Add A command line parsing procedure
This commit is contained in:
74
source/CommandLineInterface.mod
Normal file
74
source/CommandLineInterface.mod
Normal file
@ -0,0 +1,74 @@
|
||||
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[0] <> '-' 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.
|
Reference in New Issue
Block a user