MODULE TriangToAnima EXPORTS Main; IMPORT Triang, FileWr, OSError, ParseParams, Process, Wr, Thread; FROM Triang IMPORT Topology, Coords; FROM Stdio IMPORT stderr; TYPE Options = RECORD inFile: TEXT; outFile: TEXT; normalize: BOOLEAN; all: BOOLEAN; (* TRUE plots even non-existing triangles *) END; PROCEDURE DoIt() = BEGIN WITH o = GetOptions(), tc = Triang.Read(o.inFile), top = tc.top, c = tc.c^ DO IF o.normalize THEN Triang.NormalizeVertexNorms(top, c) END; WriteAnimaFile(o.outFile, top, c, o.all) END END DoIt; PROCEDURE WriteAnimaFile( name: TEXT; READONLY top: Topology; READONLY c: Coords; all: BOOLEAN; ) = <* FATAL Wr.Failure, Thread.Alerted, OSError.E *> BEGIN WITH wr1 = FileWr.Open(name & ".su"), wr2 = FileWr.Open(name & ".st") DO Triang.WriteAnima(wr1, wr2, top, c, all); Wr.Close(wr) END END WriteAnimaFile; PROCEDURE GetOptions (): Options = <* FATAL Thread.Alerted, Wr.Failure *> VAR o: Options; BEGIN WITH pp = NEW(ParseParams.T).init(stderr) DO TRY pp.getKeyword("-inFile"); o.inFile := pp.getNext(); IF pp.keywordPresent("-outFile") THEN o.outFile := pp.getNext() ELSE o.outFile := o.inFile END; o.normalize := pp.keywordPresent("-normalize"); o.all := pp.keywordPresent("-all"); pp.finish(); EXCEPT | ParseParams.Error => Wr.PutText(stderr, "Usage: TriangToAnima \\\n"); Wr.PutText(stderr, " -inFile [ -outFile ]\\\n"); Wr.PutText(stderr, " [ -normalize ]\n"); Wr.PutText(stderr, " [ -all ]\n"); Process.Exit (1); END END; RETURN o END GetOptions; BEGIN DoIt(); END TriangToAnima.