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 >
C/C++ Source or Header  |  1994-11-11  |  4KB  |  198 lines

  1. #define ERR (-1)
  2. extern int errno;
  3.  
  4. #define dash(v) while(*++v && **v=='-') while (*++*v) switch(tolower(**v))
  5.  
  6. #define MAXBUF 256
  7. char acBuf[MAXBUF];
  8. char acOut[MAXBUF*3];
  9.  
  10. int iPassCtl=0;
  11. int iPassUpr=0;
  12. int iTrunc=0;
  13. int iDispLF=0;
  14. int iIgnore=0;
  15. int iTemp;
  16.  
  17. fixbuf(pcOut,pcIn,iLen)
  18. char *pcOut,*pcIn;
  19. int iLen;
  20. {
  21.     char *pcSav=pcOut;
  22.  
  23.     pcIn--;
  24.     while (iLen--)
  25.     {
  26.         pcIn++;
  27.         if (iTrunc) *pcIn&=127;
  28.         if (*pcIn==10)
  29.         {
  30.             if (!iDispLF) continue;
  31.             if (iPassCtl)
  32.             {
  33.                 *pcOut++=*pcIn;
  34.                 continue;
  35.             }
  36.             *pcOut++='^';
  37.             *pcOut++=(*pcIn)+64;
  38.             continue;
  39.         }
  40.         if (*pcIn==9)
  41.         {
  42.             *pcOut++=9;
  43.             continue;
  44.         }
  45.         if (*pcIn==13)
  46.         {
  47.             *pcOut++=13;
  48.             continue;
  49.         }
  50.         if (*pcIn<0)  /* really >127 */
  51.         {
  52.             if (iIgnore) continue;
  53.             if (iPassUpr)
  54.             {
  55.                 *pcOut++=*pcIn;
  56.                 continue;
  57.             }
  58.             *pcOut++='~';
  59.             *pcIn&=127;
  60.         }
  61.         if (*pcIn<32)
  62.         {
  63.             if (iIgnore) continue;
  64.             if (iPassCtl)
  65.             {
  66.                 *pcOut++=*pcIn;
  67.                 continue;
  68.             }
  69.             *pcOut++='^';
  70.             *pcOut++=(*pcIn)+64;
  71.             continue;
  72.         }
  73.         if (*pcIn==127)
  74.         {
  75.             if (iIgnore) continue;
  76.             if (iPassCtl)
  77.             {
  78.                 *pcOut++=*pcIn;
  79.                 continue;
  80.             }
  81.             *pcOut++='^';
  82.             *pcOut++='?';
  83.             continue;
  84.         }
  85.         *pcOut++=*pcIn;
  86.     }
  87.     return(pcOut-pcSav);
  88. }
  89.  
  90. list(pcFile)
  91. char *pcFile;
  92. {
  93.     int hFile;
  94.     char *pcFrom,*pcTo,*pcEnd;
  95.  
  96.     hFile=open(pcFile,1);
  97.     if (hFile==ERR)
  98.     {
  99.         writeln(2,"list: cant open ",16);
  100.         writeln(2,pcFile,strlen(pcFile));
  101.         writeln(2,"\n",1);
  102.         exit(errno);
  103.     }
  104.     while (iTemp=readln(hFile,acBuf,MAXBUF))
  105.     {
  106.         if (iTemp==ERR)
  107.         {
  108.             writeln(2,"list: error reading file ",25);
  109.             writeln(2,pcFile,strlen(pcFile));
  110.             writeln(2,"\n",1);
  111.             exit(errno);
  112.         }
  113.         iTemp=fixbuf(acOut,acBuf,iTemp);
  114.  
  115.         pcFrom=acOut;
  116.         pcTo=acOut;
  117.         pcEnd=acOut+iTemp;
  118.  
  119.         while (pcTo<pcEnd)
  120.         {
  121.             if (*pcTo!=13) pcTo++;
  122.             else
  123.             {
  124.                 pcTo++;
  125.                 writeln(1,pcFrom,pcTo-pcFrom);
  126.                 pcFrom=pcTo;
  127.             }
  128.         }
  129.         if (pcFrom!=pcEnd) writeln(1,pcFrom,pcTo-pcFrom);
  130.     }
  131. }
  132.  
  133. main(argc,argv)
  134. char **argv;
  135. {
  136.     int hFile;
  137.  
  138.     if (!*++argv || !strcmp(*argv,"-?"))
  139.     {
  140.         writeln(2,"use: list {opts} {files}  - list files to output\n",80);
  141.         writeln(2," -7        -truncate all bytes to 7 bits\n",80);
  142.         writeln(2," -c        -pass control chars\n",80);
  143.         writeln(2," -u        -pass upper 128 chars\n",80);
  144.         writeln(2," -l        -don't ignore line feeds\n",80);
  145.         writeln(2," -i        -ignore all unprintable chars\n",80);
  146.         writeln(2," -z        -read list of files from standard input\n",80);
  147.         writeln(2," -z=(path) -read list of files from path\n",80);
  148.         writeln(2,"\n",80);
  149.         writeln(2," Control codes are prefixed with ^ (127=^?)\n",80);
  150.         writeln(2," Upper 128 are prefixed with ~ (255=~^?)\n",80);
  151.         writeln(2," Want more options? Let me know!\n",80);
  152.         writeln(2," PD 1991 by StG Computers inc.\n",80);
  153.         writeln(2," P.O. Box 24285, Speedway IN 46224\n",80);
  154.         exit(1);
  155.     }
  156.     argv--;
  157.  
  158.     dash(argv)
  159.     {
  160.     case '7': iTrunc=1; break;
  161.     case 'c': iPassCtl=1; break;
  162.     case 'u': iPassUpr=1; break;
  163.     case 'l': iDispLF=1; break;
  164.     case 'i': iIgnore=1; break;
  165.     case 'z':
  166.         hFile=0;
  167.         if (*(*argv+1)=='=')
  168.         {
  169.             *(*argv+1)=0;
  170.             hFile=open(*argv+2,3);
  171.             if (hFile==ERR)
  172.             {
  173.                 writeln(2,"list: cant open ",16);
  174.                 writeln(2,*argv+2,strlen(*argv+2));
  175.                 writeln(2,"\n",1);
  176.                 exit(errno);
  177.             }
  178.         }
  179.         while (iTemp=readln(hFile,acBuf,MAXBUF))
  180.         {
  181.             if (iTemp==ERR)
  182.             {
  183.                 writeln(2,"list: error reading list of files\n",80);
  184.                 exit(errno);
  185.             }
  186.             *(acBuf+iTemp-1)=0;
  187.             list(acBuf);
  188.         }
  189.         break;
  190.     default:
  191.         writeln(2,"list: unknown option '",22);
  192.         writeln(2,*argv,strlen(*argv));
  193.         writeln(2,"'\n",2);
  194.         exit(1);    
  195.     }
  196.     while (*argv) list (*argv++);
  197. }
  198.