IMPLEMENTATION MODULE CommandLineInterface; FROM SYSTEM IMPORT ADR, TSIZE; FROM Args IMPORT GetArg, Narg; FROM FIO IMPORT WriteString, WriteChar, WriteLine, StdErr; FROM Storage IMPORT ALLOCATE; FROM Strings IMPORT CompareStr, Length; FROM MemUtils IMPORT MemZero; FROM Common IMPORT ShortString; PROCEDURE parse_command_line(): PCommandLine; VAR parameter: ShortString; i: CARDINAL; result: PCommandLine; parsed: BOOLEAN; BEGIN i := 1; ALLOCATE(result, TSIZE(CommandLine)); result^.lex := FALSE; result^.parse := FALSE; MemZero(ADR(result^.input), 256); WHILE (i < Narg()) AND (result <> NIL) DO parsed := GetArg(parameter, i); parsed := FALSE; IF CompareStr(parameter, '--lex') = 0 THEN parsed := TRUE; result^.lex := TRUE END; IF CompareStr(parameter, '--parse') = 0 THEN parsed := TRUE; result^.parse := TRUE END; IF parameter[1] <> '-' THEN parsed := TRUE; IF Length(result^.input) > 0 THEN WriteString(StdErr, 'Fatal error: only one source file can be compiled at once. First given "'); WriteString(StdErr, result^.input); WriteString(StdErr, '", then "'); WriteString(StdErr, parameter); WriteString(StdErr, '".'); WriteLine(StdErr); result := NIL END; IF result <> NIL THEN result^.input := parameter END END; IF parsed = FALSE THEN WriteString(StdErr, 'Fatal error: unknown command line options: '); WriteString(StdErr, parameter); WriteChar(StdErr, '.'); WriteLine(StdErr); result := NIL END; i := i + 1 END; IF (result <> NIL) AND (Length(result^.input) = 0) THEN WriteString(StdErr, 'Fatal error: no input files.'); WriteLine(StdErr); result := NIL END; RETURN result END parse_command_line; END CommandLineInterface.