(* Copyright (C) 1989, Digital Equipment Corporation *) (* All rights reserved. *) (* See the file COPYRIGHT for a full description. *) (* Last modified on Mon Jun 25 20:08:09 1990 by muller *) (* modified on Fri Nov 3 11:34:29 1989 by kalsow *) (* Main program for the Modula-3 pretty- printer *) MODULE Main; IMPORT Wr, Text, ParseParams, Cstdlib, M3toC, Ctypes; IMPORT Scan, FileStream, Formatter, Parse; FROM Stdio IMPORT stdin, stdout, stderr; VAR margin : INTEGER := 79; style : Parse.Style := Parse.Style.SRC; emacs : BOOLEAN := FALSE; lower : BOOLEAN := FALSE; offset : INTEGER := 2; output : Formatter.T; infile : Text.T := NIL; program : Text.T; file : Ctypes.char_star := NIL; PROCEDURE GetParameters () = BEGIN TRY program := ParseParams.GetParameter (0); ParseParams.BeginParsing (stderr); IF ParseParams.KeywordPresent ("-c") THEN lower := TRUE END; IF ParseParams.KeywordPresent ("-caps") THEN lower := TRUE END; IF ParseParams.KeywordPresent ("-m") OR ParseParams.KeywordPresent ("-margin") THEN margin := ParseParams.GetNextInt (0); END; IF ParseParams.KeywordPresent ("-o") OR ParseParams.KeywordPresent ("-offset") THEN offset := ParseParams.GetNextInt (0); END; IF ParseParams.KeywordPresent ("-ZZ") THEN emacs := TRUE END; IF ParseParams.KeywordPresent ("-s") OR ParseParams.KeywordPresent ("-src") THEN style := Parse.Style.SRC; END; IF ParseParams.KeywordPresent ("-eric") THEN style := Parse.Style.EMULLER; END; ParseParams.UnparsedTail (); IF ParseParams.NextParameter < ParseParams.NumParameters THEN infile := ParseParams.GetNext (); END; ParseParams.EndParsing (); EXCEPT Scan.BadFormat => Wr.PutText (stderr, "Usage: "& program & " [-caps] [-margin n] [-offset n] [-src] [-eric] [file]\n"); Cstdlib.exit (1); END; END GetParameters; BEGIN GetParameters (); output := Formatter.New (stdout, margin); IF (infile # NIL) THEN file := M3toC.TtoS (infile); END; Parse.initParser (file, output, emacs, lower, offset, style); TRY LOOP Parse.yyparse (); IF (NOT emacs) THEN EXIT END; Formatter.PutChar (output, '\001'); Formatter.PutChar (output, '\n'); Formatter.Flush (output); END; Formatter.PutChar (output, '\n'); Formatter.Flush (output); FINALLY Formatter.Close (output); END; END Main.