module; 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; proc 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()) & (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) & (Length(result^.input) = 0) then WriteString(StdErr, 'Fatal error: no input files.'); WriteLine(StdErr); result := nil end; return result end; end.