                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
MODULE NewCaps;

(*
     8/20/85 Robert H. Rimmer, Jr., M.D.

     This program capitalizes Modula-2 reserverd words.
     Side effects include capitalizing occurences OF reserved words
     IN comments AND IN write statements.

     Updated:  04/09/1986  John Tal    Version made for Logitech Imp.
                                       Changed File I/O a little
                                       Program looks for source to have
                                       no extension.  .MOD is added to
                                       end of destination.

*)


  FROM Terminal IMPORT
    WriteString,WriteLn,Write,ReadString;
  FROM FileSystem IMPORT  (* M2Files *)
    Lookup,Reset,Create,File,ReadChar,WriteChar,Close,SetRead,Response,
    SetWrite;


  TYPE
    STRING = ARRAY [0..255] OF CHAR;

  VAR
    newline,line:STRING;
    EndFile: BOOLEAN;
    oldfilename,newfilename,temp: STRING;
    ucword,word:STRING;
    letter:CHAR;
    i,j,k:CARDINAL;
    newfile,oldfile: File;


                              PROCEDURE Length(source:STRING):CARDINAL;
    VAR
      i:CARDINAL;
      ch:CHAR;
    BEGIN
      i:=0;
      ch := source[i];
      WHILE ch <> CHR(0) DO
        INC(i);
        ch := source[i];
      END;
      RETURN i;
    END Length;

  PROCEDURE Concat(s1,s2:STRING;VAR result:STRING);
    VAR
      i,j:CARDINAL;
    BEGIN
      j:= Length(s1);
      FOR i:= 0 TO j DO
        result[i] := s1[i];
      END;
      FOR i := 0 TO Length(s2) DO
        result[i+j] := s2[i];
      END;
    END Concat;


  PROCEDURE ReadFile;
    BEGIN
      IF ((letter >= 'a') AND (letter <= 'z')) OR ((letter >= 'A')
        AND (letter <= 'Z')) THEN
        word[i] := letter;
        ucword[i] := CAP(letter);
        INC(i)
      ELSE
        ClearString;
        WriteChar(newfile,letter);
        IF letter = CHR(13) THEN
          Write('.');
          INC(k);
        END;
        IF k > 49 THEN
          WriteLn;
          k:=0;
        END;
      END;
      ReadChar(oldfile,letter);
      IF letter = 0C THEN
                   EndFile := TRUE;
      END;
    END ReadFile;


  PROCEDURE ClearString;
    VAR
      j,c : CARDINAL;
      reserved:BOOLEAN;
    BEGIN
      IF i > 0 THEN
        c := i-1;
        reserved := CheckReserved();
        IF reserved THEN
          FOR j := 0 TO c DO
            WriteChar(newfile,ucword[j]);
          END;
        ELSE
          FOR j := 0 TO c DO
            WriteChar(newfile,word[j]);
          END;
        END;
        word := '';
        ucword := '';
        i:= 0;(* Resets index *)
      END;
    END ClearString;

  PROCEDURE Equal(test,source:STRING):BOOLEAN;

    VAR
      j:CARDINAL;
      ch: CHAR;
    BEGIN
      IF i = Length(source) THEN
        FOR j := 0 TO i-1 DO
          IF test[j] <> source[j] THEN
            RETURN FALSE;
          END;
        END;
        RETURN TRUE;
      ELSE
        RETURN FALSE;
      END;
    END Equal;

  PROCEDURE CheckReserved():BOOLEAN;
    BEGIN
      IF i = 2 THEN
        IF Equal(ucword,'DO') THEN RETURN TRUE;
                                ELSIF Equal(ucword,'IF') THEN RETURN TRUE;
        ELSIF Equal(ucword,'IN') THEN RETURN TRUE;
        ELSIF Equal(ucword,'OF') THEN RETURN TRUE;
        ELSIF Equal(ucword,'OR') THEN RETURN TRUE;
        ELSIF Equal(ucword,'TO') THEN RETURN TRUE;
        ELSIF Equal(ucword,'BY') THEN RETURN TRUE;
      END;
      ELSIF i = 3 THEN
        IF Equal(ucword,'END') THEN RETURN TRUE;
        ELSIF Equal(ucword,'VAR') THEN RETURN TRUE;
        ELSIF Equal(ucword,'AND') THEN RETURN TRUE;
        ELSIF Equal(ucword,'FOR') THEN RETURN TRUE;
        ELSIF Equal(ucword,'ORD') THEN RETURN TRUE;
        ELSIF Equal(ucword,'INC') THEN RETURN TRUE;
        ELSIF Equal(ucword,'DEC') THEN RETURN TRUE;
        ELSIF Equal(ucword,'CHR') THEN RETURN TRUE;
        ELSIF Equal(ucword,'CAP') THEN RETURN TRUE;
        ELSIF Equal(ucword,'DIV') THEN RETURN TRUE;
        ELSIF Equal(ucword,'ABS') THEN RETURN TRUE;
        ELSIF Equal(ucword,'ODD') THEN RETURN TRUE;
        ELSIF Equal(ucword,'MOD') THEN RETURN TRUE;
                   ELSIF Equal(ucword,'NOT') THEN RETURN TRUE;
        ELSIF Equal(ucword,'VAL') THEN RETURN TRUE;
        ELSIF Equal(ucword,'NEW') THEN RETURN TRUE;
        ELSIF Equal(ucword,'NIL') THEN RETURN TRUE;
        ELSIF Equal(ucword,'SET') THEN RETURN TRUE;
        END;
      ELSIF i = 4 THEN
        IF Equal(ucword,'REAL') THEN RETURN TRUE;
        ELSIF Equal(ucword,'CHAR') THEN RETURN TRUE;
        ELSIF Equal(ucword,'TRUE') THEN RETURN TRUE;
        ELSIF Equal(ucword,'FROM') THEN RETURN TRUE;
        ELSIF Equal(ucword,'THEN') THEN RETURN TRUE;
        ELSIF Equal(ucword,'WITH') THEN RETURN TRUE;
        ELSIF Equal(ucword,'TYPE') THEN RETURN TRUE;
        ELSIF Equal(ucword,'CASE') THEN RETURN TRUE;
        ELSIF Equal(ucword,'ELSE') THEN RETURN TRUE;
        ELSIF Equal(ucword,'EXIT') THEN RETURN TRUE;
        ELSIF Equal(ucword,'LOOP') THEN RETURN TRUE;
        ELSIF Equal(ucword,'HALT') THEN RETURN TRUE;
        ELSIF Equal(ucword,'HIGH') THEN RETURN TRUE;
                                                  ELSIF Equal(ucword,'PROC') THEN RETURN TRUE;
        ELSIF Equal(ucword,'INCL') THEN RETURN TRUE;
        ELSIF Equal(ucword,'EXCL') THEN RETURN TRUE;
        END;
      ELSIF i = 5 THEN
        IF Equal(ucword,'BEGIN') THEN RETURN TRUE;
        ELSIF Equal(ucword,'TRUNC') THEN RETURN TRUE;
        ELSIF Equal(ucword,'UNTIL') THEN RETURN TRUE;
        ELSIF Equal(ucword,'ELSIF') THEN RETURN TRUE;
        ELSIF Equal(ucword,'FALSE') THEN RETURN TRUE;
        ELSIF Equal(ucword,'FLOAT') THEN RETURN TRUE;
        ELSIF Equal(ucword,'CONST') THEN RETURN TRUE;
        ELSIF Equal(ucword,'WHILE') THEN RETURN TRUE;
        ELSIF Equal(ucword,'ARRAY') THEN RETURN TRUE;
        END;
      ELSIF i = 6 THEN
        IF Equal(ucword,'RECORD') THEN  RETURN TRUE;
        ELSIF Equal(ucword,'REPEAT') THEN RETURN TRUE;
        ELSIF Equal(ucword,'IMPORT') THEN RETURN TRUE;
        ELSIF Equal(ucword,'RETURN') THEN RETURN TRUE;
        ELSIF Equal(ucword,'EXPORT') THEN RETURN TRUE;
                                             ELSIF Equal(ucword,'MODULE') THEN RETURN TRUE;
        ELSIF Equal(ucword,'BITSET') THEN RETURN TRUE;
        (**ELSIF Equal(ucword,'STRING') THEN RETURN TRUE;**)
      END;
    ELSIF i > 6 THEN
      IF Equal(ucword,'CARDINAL') THEN RETURN TRUE;
      ELSIF Equal(ucword,'BOOLEAN') THEN RETURN TRUE;
      ELSIF Equal(ucword,'POINTER') THEN RETURN TRUE;
      ELSIF Equal(ucword,'INTEGER') THEN RETURN TRUE;
      ELSIF Equal(ucword,'QUALIFIED') THEN RETURN TRUE;
      ELSIF Equal(ucword,'PROCEDURE') THEN RETURN TRUE;
      ELSIF Equal(ucword,'DISPOSE') THEN RETURN TRUE;
      ELSIF Equal(ucword,'DEFINITION') THEN RETURN TRUE;
      ELSIF Equal(ucword,'IMPLEMENTATION') THEN RETURN TRUE;
      END;
    END;
    RETURN FALSE;
  END CheckReserved;

  BEGIN(*main program*)
    word := '';
    ucword := '';
    i:= 0;
    k:=0;(* Resets index *)
    WriteString('File to Capitalize> ');
    ReadString(oldfilename);
    WriteLn;
    Lookup(oldfile, oldfilename,TRUE);
    IF oldfile.res = done THEN
                   WriteString('Lookuped ');WriteString(oldfilename);Write('.');
      WriteLn;
    END;
    Reset(oldfile);
    SetRead(oldfile);
    EndFile := FALSE;
    temp := '.MOD';(***appends ".MOD" to file name for the compiler***)
    Concat(oldfilename,temp, newfilename);
    WriteString('Updating ');WriteString(newfilename);Write('.');
    WriteLn;
    Lookup(newfile, newfilename,TRUE);
    SetWrite(newfile);
    ReadChar(oldfile,letter);
    WHILE NOT EndFile DO
      ReadFile;
    END;
    Close(oldfile);
    Close(newfile);
  END NewCaps.






<End of file>

 41 min left
To See new Files:

                  1. Type N
	          2. Type the date you were last on (eg. 1/1/80)
		  3. Select ALL for all directories or type the directory of
	             your choice (eg. PASCAL, PASCAL1, or DIR ) 	

_______________________________________________________________________________
| F I L E   T R A N S F E R                |UTILITIES      | ELSEWHERE    |   |
                                                       |__________________________________________|_______________|______________|   |
|FILE TRANSFER     FILE INFORMATION        |               |                  |
|                                          |               |                  |
|D)ownload a file  L)ist files available   | H)elp         | G)oodbye         |
|U)pload a file    N)ew files listed       | X)pert on/off | Q)uit and return |
|                  S)earch file directories|               |     to main menu |
|                  ?)File transfer tutorial|               |                  |
|__________________________________________|_______________|__________________|




File Func <D,G,H,L,N,Q,S,U,X,?>? 
                                                                                                                                                                                                                                                                                                                                                          