75 lines
1.8 KiB
Modula-2
75 lines
1.8 KiB
Modula-2
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;
|
|
NEW(result);
|
|
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.
|