(******************************************************************************) (* Modula-2 dependencies *) (* (C) 2011..2012 Steffen Solyga *) (******************************************************************************) MODULE m2dep; IMPORT FIO, Str; IMPORT Args, Prsr, Scnr; CONST ver = 'm2dep v0.1.1'; PROCEDURE ParseArgs(); CONST f = FIO.ErrorOutput; VAR flags: Prsr.TFlags; PROCEDURE Help(); BEGIN FIO.WrStr( f, ver ); FIO.WrStr( f, ': Modula-2 module dependencies' ); FIO.WrLn( f ); FIO.WrStr( f, 'Syntax: m2dep [options] module' ); FIO.WrLn( f ); FIO.WrStr( f, 'Options: -h show this info and exit' ); FIO.WrLn( f ); FIO.WrStr( f, ' -a dir add dir to search path' ); FIO.WrLn( f ); FIO.WrStr( f, ' -d parse definition modules only' ); FIO.WrLn( f ); FIO.WrStr( f, " -i don't parse definition modules" ); FIO.WrLn( f ); FIO.WrStr( f, " -m use mocka naming (*.md, *.mi)" ); FIO.WrLn( f ); HALT; END Help; PROCEDURE Error( s: ARRAY OF CHAR ); BEGIN FIO.WrStr( f, 'm2dep.Error: ' ); FIO.WrStr( f, s ); IF Str.Length( Args.lit ) > 0 THEN FIO.WrStr( f, ": '" ); FIO.WrStr( f, Args.lit ); FIO.WrStr( f, "'" ); END; FIO.WrLn( f ); Help() END Error; PROCEDURE Options(); BEGIN WHILE Args.sym = Args.symOpt DO IF Str.Compare( Args.lit, '?' ) = 0 THEN Help(); ELSIF Str.Compare( Args.lit, 'h' ) = 0 THEN Help(); ELSIF Str.Compare( Args.lit, 'V' ) = 0 THEN Help(); ELSIF Str.Compare( Args.lit, 'a' ) = 0 THEN Args.Read(); IF Args.sym # Args.symArg THEN Error( 'Expected directory' ) END; Scnr.PutPath( Args.lit ); ELSIF Str.Compare( Args.lit, 'd' ) = 0 THEN flags := Prsr.fsDef; ELSIF Str.Compare( Args.lit, 'i' ) = 0 THEN flags := Prsr.fsMod; ELSIF Str.Compare( Args.lit, 'm' ) = 0 THEN Scnr.mocka := TRUE; ELSE Error( 'Invalid option' ); END; Args.Read(); END; END Options; BEGIN flags := Prsr.fsBoth; Args.Reset(); Args.Read(); Options(); IF (* WHILE ? *) Args.sym = Args.symArg THEN Prsr.Inspect( Args.lit, flags ); Args.Read(); Options(); ELSE Error( 'Expected module' ); END; IF Args.sym # Args.symEOA THEN Error( 'Unhandled argument' ) END; END ParseArgs; BEGIN ParseArgs(); END m2dep.