(*

        Created: 3/29/87 by Richie Bielak

        Modified: 5/3/87 by Dale Thompson
                  Exports SplitName and MakeFileName,
                  removed ProcessCommandLine to make
                  routines more importable.

        Copyright (c) 1987 by Richie Bielak.

        This program may be freely copied, but please leave
        my name in.....Thanks....Richie

*)
IMPLEMENTATION MODULE FileNames;

FROM Strings     IMPORT Length, Concat;

(* +++++++++++++++++++++++++++++++++++++++++++++ *)
(* This procedure splits a file into a name and  *)
(* an extension. If no extension was present a   *)
(* default extension is returned.                *)
PROCEDURE SplitName (   instr : ARRAY OF CHAR;
                     VAR fname : ARRAY OF CHAR;
                     VAR ext   : ARRAY OF CHAR;
                     dext      : ARRAY OF CHAR);
  VAR
    i, j : CARDINAL;
    state : (CopyName, CopyExt, CopyDefExt);
  BEGIN
    i := 0; j := 0; state := CopyName;
    LOOP
      CASE state OF
        CopyName:
          IF i >= Length (instr) THEN
            state := CopyDefExt; fname [i] := 0C;
          ELSIF instr[i] = '.' THEN
            state := CopyExt; fname [i] := 0C;
          ELSE
            fname [i] := instr[i];
          END;
          INC (i);
        |
        CopyExt:
          IF i >= Length (instr) THEN
            ext [j] := 0C; EXIT
          END;
          ext [j] := instr [i]; INC (i); INC (j);
        |
        CopyDefExt:
          IF j >= Length (dext) THEN
            ext [j] := 0C;  EXIT
          END;
          ext [j] := dext [j]; INC (j);
      END (* CASE *)
    END (* LOOP *)
  END SplitName;

(* +++++++++++++++++++++++++++++++++++++++++++++ *)
(* This procedure makes a full file name out of  *)
(* name and extension.                           *)
PROCEDURE MakeFileName (VAR fullname : ARRAY OF CHAR;
                        name, ext : ARRAY OF CHAR);

  BEGIN
    Concat (name, ".", fullname);
    Concat (fullname, ext, fullname);
  END MakeFileName;

END FileNames.
