home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 308.lha / AFilter_II / AFilter2.MOD < prev    next >
Text File  |  1980-12-06  |  5KB  |  153 lines

  1. (****************************************************************************
  2.  *                    AmigaDos MSDos Text File Filter                       *
  3.  *                       1989 By Robert Wilcox                              *
  4.  *                     Written in BenchMark Modula2                         *
  5.  *                       Freely Redistributable                             *
  6.  *                     PLINK Bob*CT  CIS 70107,717                          *
  7.  *                             10/30/89                                     *
  8.  ****************************************************************************)
  9.  
  10. MODULE AFilter2;
  11.  
  12. FROM System IMPORT argc, argv;
  13. FROM Terminal IMPORT WriteLn, WriteString;
  14. FROM FileSystem IMPORT Close, Delete,  File, Lookup, ReadChar, Response, WriteChar;
  15. FROM Strings IMPORT  ConvStringToUpperCase, CompareString, equal, StringLength;
  16.  
  17.  
  18. VAR
  19.  
  20.   Source, Destination, NewDest     : File;
  21.   CurChar, LastChar, NextChar      : CHAR;
  22.   DestStr, TempStr1, TempStr2      : ARRAY[0..255] OF CHAR;
  23.   StripTabs               : BOOLEAN;
  24.  
  25.  
  26. PROCEDURE ConCat(StringA, StringB :ARRAY OF CHAR; VAR NewStr :ARRAY OF CHAR);
  27. VAR i, j   : CARDINAL;
  28. BEGIN
  29.   i := 0;
  30.   WHILE ( i < StringLength(StringA)) DO
  31.     NewStr[i] := StringA[i]; INC(i);
  32.   END;
  33.   j := 0;
  34.   WHILE  ( j < StringLength(StringB)) DO
  35.     NewStr[i + j] := StringB[j]; INC(j);
  36.   END;
  37.   NewStr[j + i] := 0C;
  38. END ConCat;
  39.      
  40. BEGIN
  41.   NextChar := 12C;
  42.   IF argc > 0 THEN
  43.     ConvStringToUpperCase(argv^[1]^);
  44.   END;
  45.   IF (argc # 4) OR ((CompareString(argv^[1]^, "-I")  <> equal)  AND (CompareString(argv^[1]^, "-A")  <> equal )) 
  46.   AND (CompareString(argv^[1]^, "-T")  <> equal )THEN
  47.     WriteLn; WriteString("   Usage: AFilter <Switch> <Source File> <Destination File>\n"); 
  48.     WriteLn; WriteString("         -A     Strip Carriage Returns and Line Feeds");
  49.     WriteLn; WriteString("         -I     Convert Line Feeds to Carriage Returns and Line Feeds");
  50.     WriteLn; WriteString("         -T     Convert Tabs to Spaces");
  51.     WriteLn; WriteLn; HALT;
  52.   END;
  53.   Lookup(Source, argv^[2]^, FALSE);
  54.   IF (Source.res # done) THEN
  55.     IF (Source.res # nomemory) THEN
  56.       WriteString("Can't find "); WriteString(argv^[2]^); WriteLn; HALT;
  57.     ELSE   WriteString("Out of Memory "); WriteLn; HALT;
  58.     END;
  59.   END;
  60.   ConCat(argv^[2]^, "", TempStr1);ConCat(argv^[3]^, "", TempStr2); 
  61.   DestStr  := TempStr2;
  62.   ConvStringToUpperCase(TempStr1); ConvStringToUpperCase(TempStr2);
  63.   IF CompareString(TempStr1, TempStr2) = equal THEN
  64.     DestStr := "T:AFilter.TMP";
  65.   END;
  66.   Lookup(Destination, DestStr, TRUE);
  67.   IF (Destination.res # done) THEN
  68.     Close(Source);
  69.     IF (Source.res # nomemory) THEN
  70.       WriteString("Can't open "); WriteString(DestStr); WriteLn; HALT;
  71.     ELSE   WriteString("Out of Memory "); WriteLn; HALT;
  72.     END;
  73.   END;
  74.   WriteString("Amiga-IBM Text Filter: ");
  75.   IF (CompareString(argv^[1]^,"-I" ) = equal ) THEN  
  76.     WriteString("Adding CR + LF to "); WriteString(argv^[2]^);
  77.     WriteString("  ---->  "); WriteString(argv^[3]^); WriteLn;
  78.     LOOP
  79.       ReadChar(Source, CurChar);
  80.       IF (Source.eof) THEN EXIT; END;
  81.       IF (CurChar = 12C) THEN
  82.         CurChar := 15C;
  83.         WriteChar(Destination, CurChar); WriteChar(Destination, NextChar );
  84.       ELSE  
  85.         WriteChar(Destination, CurChar); 
  86.       END;
  87.     END;
  88.     WriteChar(Destination, 32C);
  89.   ELSIF (CompareString(argv^[1]^,"-A" ) = equal ) THEN  
  90.     WriteString("Removing CR + LF from "); WriteString(argv^[2]^);
  91.     WriteString("  ---->  "); WriteString(argv^[3]^); WriteLn;
  92.     LastChar := 32C;
  93.     LOOP
  94.       ReadChar(Source, CurChar); NextChar := CurChar;
  95.       IF (Source.eof) THEN EXIT; END;
  96.       IF (CurChar = 12C) AND (LastChar = 15C)  THEN
  97.         NextChar := 0C; 
  98.       END;
  99.       IF (CurChar = 32C) THEN NextChar := 0C; END;
  100.       IF (CurChar = 15C) THEN 
  101.         IF (LastChar = 15C) THEN 
  102.           NextChar := 0C; 
  103.         ELSE NextChar := 12C; 
  104.         END;
  105.       END;
  106.       IF NextChar <> 0C THEN WriteChar(Destination, NextChar); END;
  107.       LastChar := CurChar;
  108.     END;
  109.   ELSIF (CompareString(argv^[1]^,"-T" ) = equal ) THEN  
  110.     WriteString("Replacing Tabs in "); WriteString(argv^[2]^);
  111.     WriteString("  ---->  "); WriteString(argv^[3]^); WriteLn;
  112.     LOOP
  113.       ReadChar(Source, CurChar);
  114.       IF (Source.eof) THEN EXIT; END;
  115.       IF (CurChar = 11C) THEN
  116.         CurChar := 40C;
  117.         NextChar := 40C;
  118.         WriteChar(Destination, CurChar); WriteChar(Destination, NextChar );
  119.       ELSE  
  120.         WriteChar(Destination, CurChar); 
  121.       END;
  122.     END;     
  123.   END;
  124.   Close(Destination);  
  125.   Close(Source);
  126.   IF CompareString(TempStr1, TempStr2) = equal THEN
  127.     Lookup(Destination, DestStr, FALSE);
  128.     IF (Destination.res # done) THEN
  129.       IF (Destination.res # nomemory) THEN
  130.         WriteString("Can't open "); WriteString(DestStr); WriteLn; HALT;
  131.       ELSE   WriteString("Out of Memory "); WriteLn; HALT;
  132.       END;
  133.     END;    
  134.     Delete(argv^[2]^); 
  135.     Lookup(NewDest, argv^[2]^, TRUE);
  136.     IF (NewDest.res # done) THEN
  137.       Close(Destination);
  138.       IF (NewDest.res # nomemory) THEN
  139.         WriteString("Can't open2 "); WriteString(argv^[2]^); WriteLn; HALT;
  140.       ELSE   WriteString("Out of Memory "); WriteLn; HALT;
  141.       END;
  142.     END;
  143.     LOOP
  144.       ReadChar(Destination, CurChar);
  145.       IF (Destination.eof) THEN EXIT; END;
  146.       WriteChar(NewDest, CurChar); 
  147.     END;  
  148.     Close(NewDest);  
  149.     Close(Destination);
  150.     Delete(DestStr);
  151.   END;
  152.   END AFilter2.
  153.