home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
rtsi.com
/
2014.01.www.rtsi.com.tar
/
www.rtsi.com
/
OS9
/
OSK
/
TELECOM
/
stg_v4.lzh
/
list.c
< prev
next >
Wrap
C/C++ Source or Header
|
1994-11-11
|
4KB
|
198 lines
#define ERR (-1)
extern int errno;
#define dash(v) while(*++v && **v=='-') while (*++*v) switch(tolower(**v))
#define MAXBUF 256
char acBuf[MAXBUF];
char acOut[MAXBUF*3];
int iPassCtl=0;
int iPassUpr=0;
int iTrunc=0;
int iDispLF=0;
int iIgnore=0;
int iTemp;
fixbuf(pcOut,pcIn,iLen)
char *pcOut,*pcIn;
int iLen;
{
char *pcSav=pcOut;
pcIn--;
while (iLen--)
{
pcIn++;
if (iTrunc) *pcIn&=127;
if (*pcIn==10)
{
if (!iDispLF) continue;
if (iPassCtl)
{
*pcOut++=*pcIn;
continue;
}
*pcOut++='^';
*pcOut++=(*pcIn)+64;
continue;
}
if (*pcIn==9)
{
*pcOut++=9;
continue;
}
if (*pcIn==13)
{
*pcOut++=13;
continue;
}
if (*pcIn<0) /* really >127 */
{
if (iIgnore) continue;
if (iPassUpr)
{
*pcOut++=*pcIn;
continue;
}
*pcOut++='~';
*pcIn&=127;
}
if (*pcIn<32)
{
if (iIgnore) continue;
if (iPassCtl)
{
*pcOut++=*pcIn;
continue;
}
*pcOut++='^';
*pcOut++=(*pcIn)+64;
continue;
}
if (*pcIn==127)
{
if (iIgnore) continue;
if (iPassCtl)
{
*pcOut++=*pcIn;
continue;
}
*pcOut++='^';
*pcOut++='?';
continue;
}
*pcOut++=*pcIn;
}
return(pcOut-pcSav);
}
list(pcFile)
char *pcFile;
{
int hFile;
char *pcFrom,*pcTo,*pcEnd;
hFile=open(pcFile,1);
if (hFile==ERR)
{
writeln(2,"list: cant open ",16);
writeln(2,pcFile,strlen(pcFile));
writeln(2,"\n",1);
exit(errno);
}
while (iTemp=readln(hFile,acBuf,MAXBUF))
{
if (iTemp==ERR)
{
writeln(2,"list: error reading file ",25);
writeln(2,pcFile,strlen(pcFile));
writeln(2,"\n",1);
exit(errno);
}
iTemp=fixbuf(acOut,acBuf,iTemp);
pcFrom=acOut;
pcTo=acOut;
pcEnd=acOut+iTemp;
while (pcTo<pcEnd)
{
if (*pcTo!=13) pcTo++;
else
{
pcTo++;
writeln(1,pcFrom,pcTo-pcFrom);
pcFrom=pcTo;
}
}
if (pcFrom!=pcEnd) writeln(1,pcFrom,pcTo-pcFrom);
}
}
main(argc,argv)
char **argv;
{
int hFile;
if (!*++argv || !strcmp(*argv,"-?"))
{
writeln(2,"use: list {opts} {files} - list files to output\n",80);
writeln(2," -7 -truncate all bytes to 7 bits\n",80);
writeln(2," -c -pass control chars\n",80);
writeln(2," -u -pass upper 128 chars\n",80);
writeln(2," -l -don't ignore line feeds\n",80);
writeln(2," -i -ignore all unprintable chars\n",80);
writeln(2," -z -read list of files from standard input\n",80);
writeln(2," -z=(path) -read list of files from path\n",80);
writeln(2,"\n",80);
writeln(2," Control codes are prefixed with ^ (127=^?)\n",80);
writeln(2," Upper 128 are prefixed with ~ (255=~^?)\n",80);
writeln(2," Want more options? Let me know!\n",80);
writeln(2," PD 1991 by StG Computers inc.\n",80);
writeln(2," P.O. Box 24285, Speedway IN 46224\n",80);
exit(1);
}
argv--;
dash(argv)
{
case '7': iTrunc=1; break;
case 'c': iPassCtl=1; break;
case 'u': iPassUpr=1; break;
case 'l': iDispLF=1; break;
case 'i': iIgnore=1; break;
case 'z':
hFile=0;
if (*(*argv+1)=='=')
{
*(*argv+1)=0;
hFile=open(*argv+2,3);
if (hFile==ERR)
{
writeln(2,"list: cant open ",16);
writeln(2,*argv+2,strlen(*argv+2));
writeln(2,"\n",1);
exit(errno);
}
}
while (iTemp=readln(hFile,acBuf,MAXBUF))
{
if (iTemp==ERR)
{
writeln(2,"list: error reading list of files\n",80);
exit(errno);
}
*(acBuf+iTemp-1)=0;
list(acBuf);
}
break;
default:
writeln(2,"list: unknown option '",22);
writeln(2,*argv,strlen(*argv));
writeln(2,"'\n",2);
exit(1);
}
while (*argv) list (*argv++);
}