DIRECTORY Commander, CommandTool, FS, IO, IODefs, List, MPCParserDefs, PartitionDefs, Process, ProcessProps, Rope; MPCMainLine: CEDAR MONITOR IMPORTS Commander, CommandTool, FS, IO, IODefs, MPCParserDefs, PartitionDefs, Process, ProcessProps = BEGIN locked: BOOL _ FALSE; GotLock: ENTRY PROC RETURNS [BOOL] = BEGIN IF locked THEN RETURN[FALSE]; locked _ TRUE; RETURN[TRUE]; END; MebesConvert: PROC [cmd: Commander.Handle] RETURNS [result: REF _ NIL, msg: Rope.ROPE _ NIL] -- Commander.CommandProc -- = BEGIN IF GotLock[] THEN TRUSTED { Process.Detach[FORK DoConversion[cmd, ProcessProps.GetPropList[]]] } ELSE cmd.out.PutRope["\n...can't, because MebesConvert is already running and can't run in two processes at the same time.\n"]; END; -- of MebesConvert DoConversion: PROC [cmd: Commander.Handle, callerProps: List.AList] = BEGIN ReallyDoConversion -- sigh! -- : PROC = BEGIN ENABLE {ABORTED => GOTO UserAbort; UNWIND => locked _ FALSE}; argList: LIST OF Rope.ROPE; cStream: IO.STREAM; CommandTool.StarExpansion[cmd]; argList _ CommandTool.ParseToList[cmd].list; Process.SetPriority[Process.priorityBackground]; IODefs.WriteLine["\n\n--- Cedar MPC Mebes Converter of February 1, 1985 ---"]; IF argList=NIL THEN BEGIN IODefs.WriteLine["..command line needs a file name for the plan (.mpc) file"]; GOTO Punt; END; cStream _ FS.StreamOpen[argList.first ! FS.Error => BEGIN IODefs.WriteLine[IO.PutFR["..can't open plan file \"%g\".", IO.rope[argList.first]]]; GOTO Punt; END]; DO IODefs.WriteChar[cStream.GetChar[! IO.EndOfStream => EXIT]] ENDLOOP; IODefs.PrintTime["Starting syntax check of plan"]; cStream.SetIndex[0]; IF MPCParserDefs.Scan[cStream, FALSE] # 0 --syntax check THEN {IODefs.WriteLine["Syntax errors."]; GOTO Punt}; IODefs.PrintTime["Plan OK - Starting conversion"]; cStream.SetIndex[0]; [] _ MPCParserDefs.Scan[cStream, TRUE]; --and execute it IODefs.PrintTime["Finished."]; locked _ FALSE; EXITS UserAbort => {[] _ PartitionDefs.DestroyPartitions[]; IODefs.WriteLine[""]; IODefs.PrintTime["Conversion aborted by user"]; locked _ FALSE}; Punt => {IODefs.WriteLine[""]; IODefs.PrintTime["Conversion aborted"]; locked _ FALSE}; END; -- of ReallyDoConversion ProcessProps.AddPropList[callerProps, ReallyDoConversion]; END; -- of DoConversion Commander.Register["MebesConvert", MebesConvert, "MPC CIF-to-Mebes converter."]; END. VFile: MPCMainLine.Mesa Last Edited by: McCreight, July 2, 1985 10:20:23 am PDT ʘJšœ™Jšœ7™7J˜šÏk ˜ JšœœœJ˜hJ˜—šœ œ˜š˜Jšœœœ=˜[—Jšœ˜J˜Jš˜J˜Jšœœœ˜J˜š Ïnœœœœœ˜$Jš˜Jšœœœœ˜Jšœ œ˜Jšœœ˜ Jšœ˜J˜—šž œœœ œœ œœÏcœ˜zJš˜šœ ˜Jšœœ1˜N—Jšœ{˜JšœŸ˜J˜J˜—šž œœ3˜EJš˜J˜šœŸ œœ˜'Jš˜Jš œœœ œ œ˜=Jšœ œœœ˜Jšœ œœ˜J˜Jšœ˜J˜,J˜Jšœ0˜0J˜J˜NJ˜šœ œ˜Jš˜JšœN˜NJšœ˜ Jš˜J˜—šœ œ˜%šœœ ˜ Jš˜Jšœœ)œ˜UJšœ˜ Jšœ˜J˜——Jšœ$œœœ˜GJ˜J˜2—˜J˜šœœŸ˜9Jšœ&œ˜5J˜—J˜2Jšœ˜Jšœ!œŸ˜9J˜Jšœ œ˜J˜š˜šœ ˜ Jšœxœ˜—JšœPœ˜W—JšœŸ˜J˜—Jšœ:˜:JšœŸœ ˜J˜—J˜JšœP˜PJ˜Jšœ˜—J˜—…— @ °