v09i096: PEP filter program [ part 5 of 5 ]
Gisle Hannemyr
gisle at ifi.uio.no
Sat Dec 30 11:01:05 AEST 1989
Posting-number: Volume 9, Issue 96
Submitted-by: gisle at ifi.uio.no (Gisle Hannemyr)
Archive-name: pep/part05
# This is a shell archive [ part 5 of 5 ]
# Remove everything above and including the cut line.
# Then run the rest of the file through /bin/sh (not csh).
#--cut here-----cut here-----cut here-----cut here-----cut here-----cut here--#
#!/bin/sh
# shar: Shell Archiver
# Execute the following text with /bin/sh to create the file(s):
# bdmg.c
# plain.c
# pep.h
# bdmg.h
# This archive created: Fri Dec 29 14:42:46 1989
# Wrapped by: Gisle Hannemyr (gisle at ifi.uio.no)
echo shar: extracting bdmg.c
sed 's/^XX//' << \SHAR_EOF > bdmg.c
XX/* bdmg.c 1989 june 4 [gh]
XX+-----------------------------------------------------------------------------
XX| Abstract:
XX| Functions that compensate some of the braindamage in various DUCOS.
XX|
XX| Authorship:
XX| Copyright (c) 1988, 1989 Gisle Hannemyr.
XX| Permission is granted to hack, make and distribute copies of this module
XX| as long as this notice and the copyright notices are not removed.
XX| If you intend to distribute changed versions of this module, please make
XX| an entry in the "history" log (below) and mark the hacked lines with your
XX| initials. I maintain the module, and shall appreiciate copies of bug
XX| fixes and new versions.
XX| Flames, bug reports, comments and improvements to:
XX| snail: Gisle Hannemyr, Brageveien 3A, 0452 Oslo, Norway
XX| email: X400: gisle at nr.uninett
XX| RFC: gisle at ifi.uio.no
XX| (and several BBS mailboxes in the Oslo area).
XX|
XX| Access programs:
XX| int stricmp() -- case insenitive compare
XX| int rename() -- rename file
XX| struct DIRLIST *expwildcard() -- ersatz shell wildcard expansion
XX| void dispwildcard() -- dispose list created by expwildcard
XX|
XX| History:
XX| 11 dec 89 [gh] Latest update.
XX|
XX| See main module for more comments.
XX+---------------------------------------------------------------------------*/
XX
XX#include <stdio.h>
XX#include "pep.h"
XX#include "bdmg.h"
XX#include <string.h>
XX#if __CPM86__ || __MSDOS__
XX#include <dos.h>
XX#endif
XX
XX/*---( types )--------------------------------------------------------------*/
XX
XX#ifdef __CPM86__
XXstruct DTA {
XX unsigned char f_driv;
XX unsigned char f_name[8];
XX unsigned char f_type[3];
XX unsigned char f_dumm[20];
XX}; /* DTA */
XX#endif
XX
XX
XX#ifdef __MSDOS__
XXstruct DTA {
XX char bogus[21];
XX char attri;
XX int ftime;
XX int fdate;
XX int fsize[2];
XX char fname[64];
XX}; /* DTA */
XX#endif
XX
XX
XX/*---( braindamage compensation )-------------------------------------------*/
XX
XX#ifdef STRICMP
XXint stricmp(ss,tt)
XXchar *ss,*tt;
XX{
XX while (*ss && (tolower(*ss) == tolower(*tt))) { ss++; tt++; }
XX return(tolower(*ss) - tolower(*tt));
XX} /* stricmp */
XX#endif
XX
XX
XX#ifdef SYSV2
XXint rename(from,to)
XXchar *from,*to;
XX{
XX (void)unlink(to);
XX if (link(from,to)) return(-1);
XX return(unlink(from));
XX} /* rename */
XX#endif
XX
XX
XX#ifdef VMSV1
XXint rename(from, to)
XXchar *from, *to;
XX{
XX struct dsc$descriptor_s From={strlen(from),
XX DSC$K_DTYPE_T,DSC$K_CLASS_S,from};
XX struct dsc$descriptor_s To={strlen(to),
XX DSC$K_DTYPE_T,DSC$K_CLASS_S,to};
XX
XX if (LIB$RENAME_FILE(&From, &To) == SS$_NORMAL) return(0);
XX return(-1);
XX} /* rename */
XX#endif
XX
XX
XX#if __CPM86__ || __MSDOS__
XX#ifdef __CPM86__
XX/*
XX| Abs: Pack user number and fcb structure into string.
XX| Ret: String with filename that was in fcb.
XX| Imp: System dependent: CP/M-86, C-DOS 3.20
XX*/
XXstatic char *fcb2str(buf,lfcb,usr)
XXchar *buf;
XXstruct fcb *lfcb;
XXint usr;
XX{
XX char *cp;
XX int i;
XX
XX cp=buf;
XX if (usr!=255) {
XX if (usr>9) *buf++=((usr/10)%10)+'0';
XX *buf++=(usr%10)+'0';
XX *buf++='/';
XX }
XX if (lfcb->f_driv) {
XX *buf++=lfcb->f_driv+'a'-1;
XX *buf++=':';
XX }
XX for (i=0; i<8 && lfcb->f_name[i]!=' '; ++i)
XX *buf++=tolower(lfcb->f_name[i]&0x7f); *buf++='.';
XX for (i=0; i<3 && lfcb->f_type[i]!=' '; ++i)
XX *buf++=tolower(lfcb->f_type[i]&0x7f); *buf=0;
XX return(cp);
XX} /* fcb2str */
XX
XX
XX/*
XX| Abs: Return list of malloc'ed filenames matching ambigious input list.
XX| Ret: Pointer to alloced list, or 0 if none found.
XX| Imp: System dependent: CP/M-86, C-DOS 3.20
XX*/
XXstruct DIRLIST *expwildcard(ambig)
XXchar **ambig;
XX{
XX struct DIRLIST *first, *last, *prev;
XX int pos;
XX char *n;
XX int user;
XX struct DTA dma[4]; /* 4 CP/M directory entries */
XX struct DTA fcb; /* Working FCB */
XX
XX setmem(&fcb,sizeof(struct DTA),0); /* Initialize FCB */
XX bdos(SETDTA,dma);
XX
XX first = NULL;
XX while (*ambig) {
XX if ((user=fcbinit(*ambig,&fcb)) == -1) continue; /* Bogus file name */
XX setusr(user);
XX for (pos = bdos(FNDFRST,&fcb); pos != 0xff; pos = bdos(FNDNEXT,&fcb)) {
XX if ((last = (struct DIRLIST *)malloc(sizeof(struct DIRLIST)))
XX && (last->fnam=malloc(18))) {
XX dma[pos].f_driv=fcb.f_driv; /* set drive */
XX if (!first) first = last; else prev->next = last;
XX fcb2str(last->fnam,&dma[pos],user);
XX last->next = NULL;
XX prev = last;
XX } else mess(5); /* No more room */
XX } /* for */
XX ambig++;
XX } /* while */
XX rstusr();
XX return(first);
XX} /* expwildcard */
XX#endif
XX
XX
XX#ifdef __MSDOS__
XX/*
XX| Abs: Return list of malloc'ed filenames matching ambigious input list.
XX| Ret: Pointer to alloced list, or 0 if none found.
XX| Imp: System dependent: MS-DOS 2.0, 3.2.
XX*/
XXstruct DIRLIST *expwildcard(ambig)
XXchar **ambig;
XX{
XX union REGS ireg;
XX union REGS oreg;
XX struct SREGS sreg;
XX struct DTA dta;
XX
XX char name[64];
XX char *endpath;
XX int lenpath;
XX struct DIRLIST *first, *last, *prev;
XX
XX if (!*ambig) return(NULL); /* Doing stdin */
XX
XX ireg.h.ah = SETDTA;
XX ireg.x.dx = (int)&dta;
XX intdos(&ireg,&oreg);
XX first = NULL;
XX
XX while (*ambig) {
XX endpath = strrchr(*ambig,DIRCHAR);
XX if (endpath) {
XX endpath++; /* Behind "\" */
XX lenpath = (unsigned int)endpath - (unsigned int)*ambig;
XX } else lenpath = 0;
XX ireg.h.ah = GETFRST;
XX ireg.x.cx = _A_NORMAL; /* Look up all normal files. */
XX ireg.x.dx = (int)*ambig;
XX for (;;) {
XX intdos(&ireg,&oreg);
XX /* printf("AX = 0x%x CF = 0x%x\n",oreg.x.ax,oreg.x.cflag); */
XX if (oreg.x.cflag) break;
XX if ((last = (struct DIRLIST *)malloc(sizeof(struct DIRLIST)))
XX && (last->fnam = (char *)malloc(strlen(dta.fname)+lenpath+1))) {
XX if (!first) first = last; else prev->next = last;
XX strncpy(last->fnam,*ambig,lenpath);
XX last->fnam[lenpath] = '\0';
XX strcat(last->fnam,dta.fname);
XX last->next = NULL;
XX prev = last;
XX ireg.h.ah = GETNEXT;
XX } else mess(5); /* No more room */
XX } /* for */
XX ambig++;
XX } /* while */
XX return(first);
XX} /* expwildcard */
XX#endif
XX
XX
XX/*
XX| Abs: Dispose list of malloc'ed filenames.
XX*/
XXvoid dispwildcard(first)
XXstruct DIRLIST *first;
XX{
XX struct DIRLIST *last, *prev;
XX
XX last = first;
XX while (last)
XX {
XX prev = last;
XX free(last->fnam);
XX last = last->next;
XX free(prev);
XX }
XX} /* dispwildcard */
XX#endif
XX
XX/* EOF */
SHAR_EOF
if test 6483 -ne "`wc -c bdmg.c`"
then
echo shar: error transmitting bdmg.c '(should have been 6483 characters)'
fi
echo shar: extracting plain.c
sed 's/^XX//' << \SHAR_EOF > plain.c
XX/* plain.c 1989 december 10 [gh]
XX+-----------------------------------------------------------------------------
XX| Abstract:
XX| Plain filter module
XX|
XX| Authorship:
XX| Copyright (c) 1988, 1989 Gisle Hannemyr.
XX| Permission is granted to hack, make and distribute copies of this module
XX| as long as this notice and the copyright notices are not removed.
XX| If you intend to distribute changed versions of this module, please make
XX| an entry in the "history" log (below) and mark the hacked lines with your
XX| initials. I maintain the module, and shall appreiciate copies of bug
XX| fixes and new versions.
XX| Flames, bug reports, comments and improvements to:
XX| snail: Gisle Hannemyr, Brageveien 3A, 0452 Oslo, Norway
XX| email: X400: gisle at nr.uninett
XX| RFC: gisle at ifi.uio.no
XX| (and several BBS mailboxes in the Oslo area).
XX|
XX| Access programs:
XX| void inittable() : Initialize default transformation table.
XX| void readtable() : Initialize transformation table from file.
XX| void doplain() : Interprete one file.
XX|
XX| History:
XX| 11 dec 89 [gh] Latest update.
XX|
XX| See main module for more comments.
XX+---------------------------------------------------------------------------*/
XX
XX#include <stdio.h>
XX#include "pep.h"
XX#include <ctype.h>
XX#include <string.h>
XX
XX/*---( defines )------------------------------------------------------------*/
XX
XX#define WSHH 0x1e /* WordStar invisible soft hyphen. */
XX#define WSSH 0x1f /* WordStar visible soft hyphen. */
XX#define WSSC 0x8d /* WordStar soft carrige return. */
XX#define WSSS 0xa0 /* WordStar soft space. */
XX
XX#ifndef BUFSIZE
XX#define BUFSIZE 8192
XX#endif /* BUFSIZE */
XX
XX
XX/*---( types )--------------------------------------------------------------*/
XX
XXtypedef int FOLDMATRIX[11][2];
XX
XX
XX/*---( constants )----------------------------------------------------------*/
XX
XX/* Test for Swedish characters too, but after the Norwegian ones. */
XXstatic FOLDMATRIX decfold = {
XX { 198, 91 }, /* AE [ (N) */
XX { 216, 92 }, /* OE \ (N) */
XX { 197, 93 }, /* AA ] (-) */
XX { 230, 123 }, /* ae { (N) */
XX { 248, 124 }, /* oe | (N) */
XX { 229, 125 }, /* aa } (-) */
XX { 196, 91 }, /* AE [ (S) */
XX { 214, 92 }, /* OE \ (S) */
XX { 228, 123 }, /* ae { (S) */
XX { 246, 124 }, /* oe | (S) */
XX { 0, 0 }
XX};
XX
XX
XXstatic FOLDMATRIX ibmfold = {
XX { 146, 91 }, /* AE [ (N) */
XX { 157, 92 }, /* OE \ (N) */
XX { 143, 93 }, /* AA ] (-) */
XX { 145, 123 }, /* ae { (N) */
XX { 155, 124 }, /* oe | (N) */
XX { 134, 125 }, /* aa } (-) */
XX { 142, 91 }, /* AE [ (S) */
XX { 153, 92 }, /* OE \ (S) */
XX { 132, 123 }, /* ae { (S) */
XX { 148, 124 }, /* oe | (S) */
XX { 0, 0 }
XX};
XX
XX
XXstatic FOLDMATRIX macfold = {
XX { 174, 91 }, /* AE [ (N) */
XX { 175, 92 }, /* OE \ (N) */
XX { 129, 93 }, /* AA ] (-) */
XX { 190, 123 }, /* ae { (N) */
XX { 191, 124 }, /* oe | (N) */
XX { 140, 125 }, /* aa } (-) */
XX { 128, 91 }, /* AE [ (S) */
XX { 133, 92 }, /* OE \ (S) */
XX { 138, 123 }, /* ae { (S) */
XX { 154, 124 }, /* oe | (S) */
XX { 0, 0 }
XX};
XX
XX
XX/*---( variables )----------------------------------------------------------*/
XX
XXstatic unsigned char Buffer[BUFSIZE]; /* Output buffer */
XXstatic unsigned char CTable[256]; /* General fold matrix */
XX
XXstatic int BuffSs = 0; /* Bona-fide chars. in string. */
XXstatic int BuffXx = 0; /* Horisontal pos. in buffer. */
XXstatic int NSpace = 0; /* No. of spaces not flushed. */
XX
XX
XX/*---( forward )------------------------------------------------------------*/
XX
XXchar *getenv();
XX
XX
XX/*---( housekeeping )-------------------------------------------------------*/
XX
XX/*
XX| Abs: Is it a control character? (According to pep's rather complicated
XX| concept of such.)
XX| Ret: TRUE if it is, else FALSE (pep hacks ctrl. chars, leave others alone).
XX*/
XXstatic BOOL ctrlp(cc)
XXint cc;
XX{
XX if (isascii(cc)) {
XX if (wflag1 && (cc == WSSH)) return(FALSE);
XX if (iscntrl(cc)) return(TRUE); else return(FALSE);
XX } else if (!bflagb) return(FALSE);
XX /* Assert: if it was 7 bit ASCII, or if the upper 128 set shall be */
XX /* considered legal character, then we have returned by now. */
XX
XX if (wflag1 && (cc == WSSC)) return(FALSE);
XX /* Assert: if it was WordStar soft CR, then we have returned by now. */
XX
XX if (iflagi && IFrst) { /* We are folding to IBM charset, */
XX int jj = 0;
XX while (ibmfold[jj][0] && (ibmfold[jj][0] != cc)) jj++;
XX return(!ibmfold[jj][0]); /* so those are not control chars. */
XX }
XX return(TRUE);
XX /* If all else fails, it must be a control character. */
XX} /* ctrlp */
XX
XX
XX/*---( transformation table )-----------------------------------------------*/
XX
XX/*
XX| Abs: Catenate tabledir and cname to create a full searchpath.
XX| Ret: Pointer to the full, catenated path.
XX*/
XXstatic char *findpath(tabledir,cname)
XXchar *tabledir, *cname;
XX{
XX char fullpath[1024], *ss;
XX
XX if (!tabledir) return(cname); /* Bail out under VMS, etc. */
XX ss = fullpath;
XX while (*ss++ = *tabledir++) ; /* strcpy(fullpath,tabledir); */
XX ss--; /* ss points to terminator */
XX if (ss[-1] != DIRCHAR) { *ss = DIRCHAR; *++ss = '\0'; }
XX while (*ss++ = *cname++) ; /* strcat(fullpath,cname); */
XX return(fullpath);
XX} /* findpath */
XX
XX/*
XX| Abs: Initialize default transformation table.
XX*/
XXvoid inittable()
XX{
XX int cc;
XX
XX for (cc = 0; cc < 256; cc++) CTable[cc] = cc;
XX} /* inittable */
XX
XX
XX/*
XX| Abs: Initialize transformation table from file.
XX| Par: tabledir = pointer to table to initialize
XX| cname = file to read table from
XX| echo = TRUE to echo comments to stderr, else quiet.
XX*/
XXvoid readtable(tabledir,cname,echo)
XXchar *tabledir, *cname;
XXBOOL echo;
XX{
XX FILE *fdt;
XX char *ss;
XX
XX if ((fdt = fopen(cname,"r")) == NULL) {
XX if (tabledir) {
XX if (ss = strrchr(tabledir,DIRCHAR)) {
XX *++ss = '\0';
XX fdt = fopen(findpath(tabledir,cname),"r");
XX } /* if tabledir made sense */
XX } /* if tabledir defined */
XX if (fdt == NULL) {
XX#ifndef __CPM86__
XX if (tabledir = getenv("PEP"))
XX fdt = fopen(findpath(tabledir,cname),"r");
XX#endif
XX if (fdt == NULL) {
XX fprintf(stderr,"can't open translation table \"%s\"\n", cname);
XX exit(ERROR_EXIT);
XX } /* if file not found in environment directory */
XX } /* if file not found in startup directory */
XX } /* if file not found in local directory */
XX
XX while (fgets(Buffer,BUFSIZE-1,fdt)) {
XX char *ss;
XX int ii;
XX if (ss = strchr(Buffer,'#')) {
XX if (echo && (ss[1] != '#')) {
XX fputs(" ",stderr);
XX fputs(ss,stderr);
XX }
XX *ss = '\0';
XX } /* if comment */
XX for (ii = strlen(Buffer) - 1; isspace(Buffer[ii]) && (ii >= 0); ii--);
XX Buffer[++ii] = 0;
XX if (*Buffer) {
XX int tt, ff;
XX if (sscanf(Buffer,"%d %d",&ff,&tt) != 2) mess(6);
XX if ((tt < 0) || (tt > 255) || (ff < 0) || (ff > 255)) mess(6);
XX /* fprintf(stderr,"[%s] %d <== %d\n",Buffer,tt,ff); */
XX CTable[ff] = tt;
XX }
XX } /* while */
XX fclose(fdt);
XX} /* readtable */
XX
XX
XX/*---( foldings )-----------------------------------------------------------*/
XX
XX/*
XX| Abs:
XX*/
XXstatic unsigned char fold8(cc,fold)
XXint cc;
XXFOLDMATRIX fold;
XX{
XX if (cc >= ILimit) {
XX int jj = 0;
XX while (fold[jj][IFrst] && (fold[jj][IFrst] != cc)) jj++;
XX if (fold[jj][IFrst]) cc = fold[jj][ILast];
XX }
XX return(cc);
XX} /* fold8 */
XX
XX
XX/*
XX| Abs: Flush accumulated whitespace, compressing spaces into tabs.
XX*/
XXstatic void flushspace()
XX{
XX int ii;
XX
XX if (cflagc && OTabSz) {
XX while (NSpace > 1 && NSpace >= (ii = OTabSz - (LineXx % OTabSz))) {
XX Buffer[BuffXx++] = '\t';
XX NSpace -= ii;
XX LineXx += ii;
XX } /* while */
XX } /* if compressing tabs */
XX LineXx += NSpace;
XX while (NSpace--) Buffer[BuffXx++] = ' ';
XX NSpace = 0;
XX} /* flushspace */
XX
XX
XX/*
XX| Abs: Flush line in buffer to the output file.
XX| Des: Turbo-C return bogus values if isspace is called with arg > 128.
XX| Sef: Zero NSpace, BuffXx and LineXx counts.
XX*/
XXstatic void flushline()
XX{
XX if (!sflags || (BuffSs >= StrSiz)) {
XX while (!(Buffer[BuffXx-1] & 0x80) && isspace(Buffer[BuffXx-1]) && BuffXx)
XX BuffXx--;
XX Buffer[BuffXx] = '\0';
XX if (wflag1) {
XX int xx;
XX if (BuffXx && (Buffer[BuffXx-1] == '-')) Buffer[BuffXx-1] = WSSH;
XX xx = 0;
XX while (Buffer[xx]) {
XX if (Buffer[xx] == ' ') Buffer[xx] = WSSS;
XX xx++;
XX }
XX }
XX fputs(Buffer,Fdo);
XX
XX if (vflagv) /* Paragraph only */ ;
XX
XX /* Terminate the line we have just flushed */
XX if (wflag1) {
XX if (BuffXx) putc(WSSC,Fdo); else putc('\r',Fdo);
XX putc('\n',Fdo);
XX } else {
XX if ((vflagv && BuffXx) || (EndOLn == -2)) putc(' ',Fdo);
XX else {
XX if (EndOLn == -1) { putc('\r',Fdo); putc('\n',Fdo); }
XX else putc(EndOLn,Fdo);
XX } /* if */
XX } /* if */
XX showprogress();
XX } /* if enough of a string to print it */
XX NSpace = BuffXx = LineXx = 0;
XX} /* flushline */
XX
XX
XX/*
XX| Abs: Put character into line buffer.
XX| Des: First, make some simple character foldings. Then, put the character
XX| into a line buffer. A control character may be converted to hex,
XX| surrounded by angle brackets.
XX*/
XXstatic void putline(cc)
XXint cc;
XX{
XX static BOOL wasbs = FALSE;
XX static BOOL wascr = FALSE;
XX static BOOL wasoe = FALSE;
XX BOOL isaoe = FALSE;
XX
XX if (BuffXx >= (BUFSIZE-5)) flushline(); /* Panic! */
XX if (zflagz) cc = cc & 0x7f; /* Fold to 7 bit. */
XX if (mflagm && !IFrst && (cc == '\r')) cc = '\n'; /* Mac uses CR as terminator */
XX /* This is a hack to fool the stuff below who removes redundant CR's. */
XX /* When we are converting from Mac format, we want to keep them all. */
XX
XX if (wasoe) {
XX wasoe = FALSE;
XX if (cc != 92) {
XX Buffer[BuffXx] = '\\';
XX LineXx++;
XX BuffXx++;
XX } /* if */
XX } else if ((cc == 92) && kflagk && IFrst) { wasoe++; return; }
XX
XX if (dflagd) { if (!IFrst && (cc == 216)) isaoe++; cc = fold8(cc,decfold); }
XX if (iflagi) { if (!IFrst && (cc == 157)) isaoe++; cc = fold8(cc,ibmfold); }
XX if (mflagm) { if (!IFrst && (cc == 175)) isaoe++; cc = fold8(cc,macfold); }
XX if (gflagg) cc = CTable[cc]; /* Fold from table. */
XX if (wflag0) {
XX if (cc == WSHH) return; /* WS invisible soft hyphen. */
XX if (cc == WSSH) cc = '-'; /* WS visible soft hyphen. */
XX }
XX
XX if (wascr) {
XX wascr = FALSE;
XX if (BuffXx) {
XX flushline();
XX if (cc == '\n') return;
XX } /* if anything in buffer */
XX } /* if wascr */
XX
XX if ((cc == '\b') && BuffXx) { BuffXx--; wasbs++; }
XX else if (cc == '\f') {
XX if (BuffXx) flushline();
XX if (wflag1) fputs(".PA\n",Fdo);
XX else if (!(bflagb + sflags)) putc('\f',Fdo);
XX wasbs = FALSE;
XX }
XX else if (cc == '\n') { flushline(); BuffSs++; }
XX else if (cc == '\r') { wascr++; }
XX else if (cc == '\t') {
XX if (tflagt || cflagc) NSpace += ITabSz - ((LineXx + NSpace) % ITabSz);
XX else { Buffer[BuffXx++] = cc; LineXx++; }
XX BuffSs++;
XX wasbs = FALSE;
XX }
XX else if (ctrlp(cc)) {
XX if (xflagx) { /* Expanding control chars. */
XX char *ss;
XX if (NSpace) flushspace();
XX ss = (char *)&Buffer[BuffXx];
XX sprintf(ss,"<%02xh>",cc);
XX BuffXx += 5;
XX LineXx += 5;
XX }
XX else if (BuffXx) flushline(); /* Removing control chars. */
XX BuffSs = 0;
XX wasbs = FALSE;
XX }
XX else if (cflagc && cc == ' ') NSpace++;
XX else {
XX if (NSpace) flushspace();
XX if (!wasbs || (cc != '_')) Buffer[BuffXx] = cc;
XX LineXx++;
XX BuffXx++;
XX if (kflagk && isaoe) {
XX Buffer[BuffXx] = cc;
XX LineXx++;
XX BuffXx++;
XX }
XX BuffSs++;
XX wasbs = FALSE;
XX }
XX} /* putline */
XX
XX
XX/*---( file loop )----------------------------------------------------------*/
XX
XX/*
XX| Abs: Read (and write) one complete plain file.
XX*/
XXvoid doplain()
XX{
XX int cc;
XX
XX while ((cc = getc(Fdi)) != EOF) putline(cc);
XX if (BuffXx) flushline();
XX} /* doplain */
XX
XX/* EOF */
SHAR_EOF
if test 12521 -ne "`wc -c plain.c`"
then
echo shar: error transmitting plain.c '(should have been 12521 characters)'
fi
echo shar: extracting pep.h
sed 's/^XX//' << \SHAR_EOF > pep.h
XX/* pep.h 1989 june 27 [gh]
XX+-----------------------------------------------------------------------------
XX| Abstract:
XX| Common types and definitions for pep.
XX|
XX| History:
XX| 27 jun 89 [gh] Latest update.
XX|
XX| See main module for more comments.
XX+---------------------------------------------------------------------------*/
XX
XX/* These 4 symbols may be (un)set by you according preferences/environment */
XX
XX/* STRICMP should be defined if "stricmp" reported missing by the linker */
XX/* SYSV2 should be defined if you are compiling this on SYS V.2 UNIX */
XX/* __TURBOC__ are already set to 1 by Borland, (may be undefined by you). */
XX/* VMSV1 should be defined if you are using VAX C ver. 1.x VMS */
XX
XX
XX/* Canonize macroes predefined by the compiler. */
XX
XX#ifdef MSDOS
XX#define __MSDOS__ 1
XX#endif
XX
XX#ifdef msdos
XX#define __MSDOS__ 1
XX#endif
XX
XX#ifdef unix
XX#define __UNIX__ 1
XX#endif
XX
XX#ifdef vms
XX#define __VMS__ 1
XX#endif
XX
XX
XX/*---( defines )------------------------------------------------------------*/
XX
XX#ifdef __VMS__
XX#include <ssdef.h>
XX#endif
XX
XX#define FALSE 0 /* Boolean FALSE */
XX#define TRUE !FALSE /* Boolean TRUE */
XX
XX
XX#ifdef __CPM86__
XX#define SETDTA 0x1A /* Set Disk Transfer Address */
XX#define FNDFRST 0x11 /* Find first FCB */
XX#define FNDNEXT 0x12 /* Find next FCB */
XX#define DIRCHAR 0xFF /* Bogus */
XX#endif
XX
XX#ifdef __MSDOS__
XX#define SETDTA 0x1A /* Set Disk Transfer Address */
XX#define GETFRST 0x4E /* Find first ASCIZ */
XX#define GETNEXT 0x4F /* Find next ASCIZ */
XX#define DIRCHAR '\\' /* Directory path separator */
XX#endif
XX
XX#ifdef __UNIX__
XX#define DIRCHAR '/' /* Directory path separator */
XX#endif
XX
XX#ifdef __VMS__
XX#define unlink(x) delete(x)
XX#define DIRCHAR '>' /* Directory path separator */
XX#endif
XX
XX#ifdef __VMS__
XX#define NORML_EXIT SS$_NORMAL
XX#define ERROR_EXIT SS$_ABORT
XX#else
XX#define NORML_EXIT 0
XX#define ERROR_EXIT 1
XX#endif
XX
XX
XX/*---( types )--------------------------------------------------------------*/
XX
XXtypedef unsigned char BOOL;
XX
XX
XX/*---( variables )----------------------------------------------------------*/
XX
XX#ifdef MAIN
XX#define EXTERN
XX#else
XX#define EXTERN extern
XX#endif
XX
XXEXTERN FILE *Fdi;
XXEXTERN FILE *Fdo;
XXEXTERN int IFrst, ILast, ILimit; /* Fold direction flags */
XX
XX#ifndef MAIN
XXextern long LCount; /* Global line count */
XXextern int LineXx; /* Horisontal position on line. */
XXextern int ITabSz; /* Input tabulator size. */
XXextern int OTabSz; /* Output tabulator size. */
XXextern int StrSiz; /* String size for strings. */
XXextern int EndOLn; /* -1 CRLF, -2 Paragraph only */
XX
XXextern int bflagb; /* Binary wash. */
XXextern int cflagc; /* Compress */
XXextern int dflagd; /* DEC character set. */
XXextern int gflagg; /* General fold table */
XXextern int iflagi; /* IBM character set. */
XXextern int kflagk; /* Kman character set. */
XXextern int mflagm; /* MAC character set. */
XXextern int sflags; /* String extraction. */
XXextern int tflagt; /* Tab expansion */
XXextern int vflagv; /* Terminate only paragraphs. */
XXextern int wflag0; /* From WS doc. mode to 7-bit. */
XXextern int wflag1; /* From 7-bit to WS doc. mode. */
XXextern int xflagx;
XXextern int zflagz;
XX#endif
XX
XX/* EOH */
SHAR_EOF
if test 3745 -ne "`wc -c pep.h`"
then
echo shar: error transmitting pep.h '(should have been 3745 characters)'
fi
echo shar: extracting bdmg.h
sed 's/^XX//' << \SHAR_EOF > bdmg.h
XX/* bdmg.h 1989 december 11 [gh]
XX+-----------------------------------------------------------------------------
XX| Abstract:
XX| CP/M and DOS types and functions exported by bdmg.c
XX|
XX| History:
XX| 11 dec 89 [gh] Latest update.
XX|
XX| See main module for more comments.
XX+---------------------------------------------------------------------------*/
XX
XX/*---( types )--------------------------------------------------------------*/
XX
XXstruct DIRLIST {
XX char *fnam;
XX struct DIRLIST *next;
XX}; /* DIRLIST */
XX
XX
XX/*---( prototypes )---------------------------------------------------------*/
XX
XXstruct DIRLIST *expwildcard();
XXvoid dispwildcard();
XX
XX
XX/* EOH */
XX
SHAR_EOF
if test 659 -ne "`wc -c bdmg.h`"
then
echo shar: error transmitting bdmg.h '(should have been 659 characters)'
fi
# End of shell archive
exit 0
More information about the Comp.sources.misc
mailing list