home *** CD-ROM | disk | FTP | other *** search
/ Frozen Fish 1: Amiga / FrozenFish-Apr94.iso / bbs / alib / d0xx / d079 / m2error.lha / M2Error / getfil.mod < prev    next >
Encoding:
Modula Implementation  |  1987-06-04  |  3.1 KB  |  110 lines

  1. (* 
  2.         This module imports a procedure that interprets
  3.         the command line and builds names for input
  4.         source file and the error file.
  5.  
  6.         Created: 3/29/87 by Richie Bielak
  7.  
  8.         Modified:
  9.  
  10.         Copyright (c) 1987 by Richie Bielak.
  11.         
  12.         This program may be freely copied, but please leave
  13.         my name in.....Thanks....Richie
  14.  
  15. *)
  16. IMPLEMENTATION MODULE GetFileNames;
  17.  
  18. FROM CommandLine IMPORT GetCL, CLStrings;
  19. FROM Strings     IMPORT Length, Concat, InitStringModule;
  20.  
  21. (* +++++++++++++++++++++++++++++++++++++++++++++ *)
  22. (* This procedure splits a file into a name and  *)
  23. (* an extension. If no extension was present a   *)
  24. (* default extension is returned.                *)
  25. PROCEDURE SplitName (   instr : ARRAY OF CHAR;
  26.                      VAR fname : ARRAY OF CHAR;
  27.                      VAR ext   : ARRAY OF CHAR;
  28.                      dext      : ARRAY OF CHAR);
  29.   VAR
  30.     i, j : CARDINAL;
  31.     state : (CopyName, CopyExt, CopyDefExt);
  32.   BEGIN
  33.     i := 0; j := 0; state := CopyName;
  34.     LOOP
  35.       CASE state OF
  36.         CopyName:
  37.           IF i >= Length (instr) THEN
  38.             state := CopyDefExt; fname [i] := 0C;
  39.           ELSIF instr[i] = '.' THEN 
  40.             state := CopyExt; fname [i] := 0C;
  41.           ELSE  
  42.             fname [i] := instr[i];
  43.           END;
  44.           INC (i);
  45.         |
  46.         CopyExt:
  47.           IF i >= Length (instr) THEN
  48.             ext [j] := 0C; EXIT 
  49.           END;
  50.           ext [j] := instr [i]; INC (i); INC (j);
  51.         |
  52.         CopyDefExt:
  53.           IF j >= Length (dext) THEN 
  54.             ext [j] := 0C;  EXIT
  55.           END;
  56.           ext [j] := dext [j]; INC (j);
  57.       END
  58.     END
  59.   END SplitName;
  60.  
  61. (* +++++++++++++++++++++++++++++++++++++++++++++ *)
  62. (* This procedure makes a full file name out of  *)
  63. (* name and extension.                           *)
  64. PROCEDURE MakeFileName (VAR fullname : ARRAY OF CHAR;
  65.                         name, ext : ARRAY OF CHAR);
  66.   
  67.   BEGIN
  68.     Concat (name, ".", fullname);
  69.     Concat (fullname, ext, fullname);
  70.   END MakeFileName;
  71.  
  72. (* +++++++++++++++++++++++++++++++++++++++++++++ *)
  73. PROCEDURE ProcessCommandLine (VAR infile, outfile, errfile : ARRAY OF CHAR;
  74.                               VAR succ : BOOLEAN);
  75.   VAR
  76.     argc, i : CARDINAL;
  77.     argv : ARRAY [0..3] OF CLStrings;
  78.     DEF : BOOLEAN;
  79.     fname : CLStrings;
  80.     ext   : ARRAY [0..5] OF CHAR;
  81.  
  82.   BEGIN
  83.     (* Get the command line arguments *)
  84.     succ := GetCL (argc, argv);
  85.     IF succ AND (argc > 0) THEN
  86.        (* At least an input file provided *)
  87.        SplitName (argv[0], fname, ext, "MOD");
  88.        MakeFileName (infile, fname, ext);
  89.        (* Make the name of the error file *)
  90.        IF CAP(ext[0]) = "D" THEN
  91.          MakeFileName (errfile, fname, "ERD");         
  92.        ELSE
  93.          MakeFileName (errfile, fname, "ERM");
  94.        END;
  95.        (* Now check for an output file *)
  96.        IF argc > 1 THEN
  97.          FOR i := 0 TO Length (argv[1]) DO outfile[i] := argv[1,i] END;
  98.        ELSE
  99.          outfile[0] := 0C;
  100.        END;
  101.     (* No arguments entered *)
  102.     ELSE
  103.        succ := FALSE
  104.     END;
  105.   END ProcessCommandLine;
  106.  
  107. BEGIN
  108.   InitStringModule
  109. END GetFileNames.
  110.