DIRECTORY Ascii USING [Lower], Commander USING [CommandProc, Register, Handle], CommandTool USING [ArgumentVector, Parse, Failed], DFInternal, DFOperations, IO USING [int, STREAM, PutF, PutFR, rope], Rope USING [Compare, Concat, Fetch, Find, Length, ROPE, Substr]; DFCommands: CEDAR PROGRAM IMPORTS Ascii, Commander, CommandTool, DFInternal, DFOperations, IO, Rope = BEGIN ROPE: TYPE = Rope.ROPE; STREAM: TYPE = IO.STREAM; DoBringover: Commander.CommandProc = { argv: CommandTool.ArgumentVector _ NIL; i: NAT _ 1; oSwitch: BOOL _ FALSE; selectedFileAdded: BOOL; dfFile: ROPE; filter: DFOperations.BringOverFilter _ [ filterA: $all, filterB: $all, filterC: $all, list: NIL ]; action: DFOperations.BringOverAction _ $enter; { -- interpret the command line, modifying dfFile, filter, action argv _ CommandTool.Parse[cmd ! CommandTool.Failed => { msg _ errorMsg; CONTINUE; }]; IF argv = NIL OR argv.argc < 2 THEN RETURN[$Failure, bringoverHelpText]; DO { IF i = argv.argc - 1 THEN EXIT; IF oSwitch THEN { IF argv[i].Length[] = 0 THEN GOTO fileNameSyntaxError; IF argv[i].Fetch[0] = '- THEN { IF selectedFileAdded THEN oSwitch _ FALSE ELSE GOTO oSwitchSyntaxError } ELSE { filter.list _ CONS[argv[i], filter.list]; selectedFileAdded _ TRUE; GOTO nextArg } }; IF argv[i].Length[] # 2 OR argv[i].Fetch[0] # '- THEN GOTO switchSyntaxError; SELECT Ascii.Lower[argv[i].Fetch[1]] FROM 'b => filter.filterA _ $derived; 'f => action _ $fetch; 'o => { oSwitch _ TRUE; selectedFileAdded _ FALSE }; 'p => filter.filterB _ $public; 'r => filter.filterC _ $imported; 's => filter.filterA _ $source; 'v => action _ $check; 'w => filter.filterC _ $defining; ENDCASE => GOTO switchSyntaxError; GOTO nextArg EXITS nextArg => i _ i.SUCC } ENDLOOP; IF oSwitch AND NOT selectedFileAdded THEN GOTO oSwitchSyntaxError; dfFile _ CompleteDFFileName[argv[i]]; EXITS fileNameSyntaxError => RETURN[ $Failure, IO.PutFR["Illegal file name: \"%g\"\n", IO.rope[argv[i]]]]; switchSyntaxError => RETURN[ $Failure, IO.PutFR["Unrecognized switch: \"%g\"\n", IO.rope[argv[i]]]]; oSwitchSyntaxError => RETURN[ $Failure, "No list-of-selected-files following \"o\" switch"]; }; { -- do the Bringover errors, warnings, filesActedUpon: INT; [errors, warnings, filesActedUpon] _ DFOperations.BringOver[ dfFile: dfFile, filter: filter, action: action, interact: DFInternal.DefaultInteractionProc, clientData: NIL, log: cmd.out]; IF errors + warnings > 0 THEN cmd.out.PutF["%g errors, %g warnings, %g files acted upon\n", IO.int[errors], IO.int[warnings], IO.int[filesActedUpon]] ELSE cmd.out.PutF["%g files acted upon\n", IO.int[filesActedUpon]]; RETURN[NIL, NIL] } }; DoSModel: Commander.CommandProc = { argv: CommandTool.ArgumentVector _ NIL; i: NAT _ 1; dfFile: ROPE; action: DFOperations.SModelAction _ [remoteCheck: TRUE, storeChanged: TRUE]; { -- interpret the command line, modifying dfFile, action argv _ CommandTool.Parse[cmd ! CommandTool.Failed => { msg _ errorMsg; CONTINUE; }]; IF argv = NIL OR argv.argc < 2 THEN RETURN[$Failure, smodelHelpText]; DO IF i = argv.argc - 1 THEN EXIT; IF argv[i].Length[] # 2 OR argv[i].Fetch[0] # '- THEN GOTO switchSyntaxError; SELECT Ascii.Lower[argv[i].Fetch[1]] FROM 'd => action.remoteCheck _ FALSE; 'n => action.storeChanged _ FALSE; ENDCASE => GOTO switchSyntaxError; i _ i.SUCC ENDLOOP; dfFile _ CompleteDFFileName[argv[i]]; EXITS switchSyntaxError => RETURN[ $Failure, IO.PutFR["Unrecognized switch: \"%g\"\n", IO.rope[argv[i]]]]; }; { -- do the SModel errors, warnings, filesActedUpon: INT; [errors, warnings, filesActedUpon] _ DFOperations.SModel[ dfFile: dfFile, action: action, interact: DFInternal.DefaultInteractionProc, clientData: NIL, log: cmd.out]; IF errors + warnings > 0 THEN cmd.out.PutF["%g errors, %g warnings, %g files acted upon\n", IO.int[errors], IO.int[warnings], IO.int[filesActedUpon]] ELSE cmd.out.PutF["%g files acted upon\n", IO.int[filesActedUpon]]; RETURN[NIL, NIL] } }; DoVerifyDF: Commander.CommandProc = { argv: CommandTool.ArgumentVector _ NIL; dfFile: ROPE; { -- interpret the command line, modifying dfFile argv _ CommandTool.Parse[cmd ! CommandTool.Failed => { msg _ errorMsg; CONTINUE; }]; IF argv = NIL OR argv.argc # 2 THEN RETURN[$Failure, verifydfHelpText]; dfFile _ CompleteDFFileName[argv[1]]; }; { -- do the VerifyDF errors, warnings, filesActedUpon: INT; [errors, warnings, filesActedUpon] _ DFOperations.Verify[ dfFile: dfFile, interact: DFInternal.DefaultInteractionProc, clientData: NIL, log: cmd.out]; IF errors + warnings > 0 THEN cmd.out.PutF["%g errors, %g warnings, %g files acted upon\n", IO.int[errors], IO.int[warnings], IO.int[filesActedUpon]] ELSE cmd.out.PutF["%g files acted upon\n", IO.int[filesActedUpon]]; RETURN[NIL, NIL] } }; CompleteDFFileName: PROC [dfFileName: ROPE] RETURNS [ROPE] = { length: INT = dfFileName.Length[]; IF length < 4 OR (Rope.Compare[Rope.Substr[dfFileName, length - 3, 3], ".df", FALSE] # equal AND Rope.Find[dfFileName, "!"] = -1) THEN RETURN[Rope.Concat[dfFileName, ".df"]] ELSE RETURN[dfFileName]; }; bringoverHelpText: ROPE = "Usage: Bringover {-p (access: public),\n\t-s (origin: source), -b (origin: derived),\n\t-r (reference: imported), -w (reference: defining),\n\t-v (action: check), -f (action: fetch),\n\t-o list-of-files (selected files: list-of-files)} dfFile\nUnless changed by switches, Bringover uses (Auto-Confirm: yes, access: all, origin: all, reference: all, selected files: (no filtering), action: enter).\n"; smodelHelpText: ROPE = "Usage: SModel {-d (Check on server: no),\n\t-n (Store changed files: no)} dfFile\nUnless changed by switches, SModel uses (Auto-Confirm: yes, Check existence on server: yes, Store changed files: yes).\n"; verifydfHelpText: ROPE = "Usage: VerifyDF dfFile\nVerifyDF uses (Auto-Confirm: yes).\n"; Commander.Register["Bringover", DoBringover, bringoverHelpText]; Commander.Register["SModel", DoSModel, smodelHelpText]; Commander.Register["VerifyDF", DoVerifyDF, verifydfHelpText]; END. :DFCommands.mesa last edited by vanLeunen on December 19, 1983 11:40 am PROC [cmd: Commander.Handle] RETURNS [result: REF _ NIL, msg: Rope.ROPE _ NIL] PROC [cmd: Commander.Handle] RETURNS [result: REF _ NIL, msg: Rope.ROPE _ NIL] PROC [cmd: Commander.Handle] RETURNS [result: REF _ NIL, msg: Rope.ROPE _ NIL] ΚΜ˜Jšœ™Jšœ6™6unitšΟk ˜ Jšœœ ˜Jšœ œ!˜0Jšœ œ!˜2Jšœ ˜ Jšœ ˜ Jšœœœ˜*Jšœœ(œ ˜@—šœ œ˜Jšœ:œ˜I—Kšœ˜Jšœœœ˜Jšœœœœ˜šΟb œ˜&Jš œœ œœ œœ™NKšœ#œ˜'Jšœœ˜ Jšœ œœ˜Jšœœ˜Kšœœ˜ šœ(˜(Jšœ˜J˜J˜Jšœ˜ J˜—Jšœ.˜.šœΟc?˜AJšœHœ˜UJš œœœœœ˜Hšœ˜Jšœœœ˜šœ œ˜Jšœœœ˜6šœœ˜Jš œœ œœœ˜FJ˜—šœ˜Jšœœ˜)Jšœœ˜Jšœ˜ J˜—J˜—Jšœœœœ˜Mšœ˜)J˜ Jšœ˜Jšœœœ˜5Jšœ˜J˜!J˜Jšœ˜J˜!Jšœœ˜#—Jšœ˜ Jšœœ˜Jšœ˜—Jš œ œœœœ˜BJšœ%˜%š˜šœœ˜Jšœ œ&œ˜E—šœœ˜Jšœ œ(œ˜G—šœœ˜Jšœ>˜>——J˜—šœŸ˜Jšœ"œ˜&šœ<˜—Jšœœœ˜J˜—Jšœ˜—šžœ˜#Jš œœ œœ œœ™NKšœ#œ˜'Jšœœ˜ Kšœœ˜ Jšœ2œœ˜LšœŸ7˜9JšœHœ˜UJš œœœœœ˜Eš˜Jšœœœ˜Jšœœœœ˜Mšœ˜)Jšœœ˜!Jšœœ˜"Jšœœ˜#—Jšœ˜ Jšœ˜—Jšœ%˜%š˜šœœ˜Jšœ œ(œ˜G——J˜—šœŸ˜Jšœ"œ˜&šœ9˜9Jšœ˜Jšœ9œ˜L—šœ˜šœ=˜=Jšœœœ˜9——š˜Jšœ&œ˜>—Jšœœœ˜J˜—Jšœ˜—šž œ˜%Jš œœ œœ œœ™NKšœ#œ˜'Kšœœ˜ šœŸ/˜1JšœHœ˜UJš œœœœœ˜GJšœ%˜%J˜—šœŸ˜Jšœ"œ˜&šœ9˜9Jšœ˜Jšœ9œ˜L—šœ˜šœ=˜=Jšœœœ˜9——š˜Jšœ&œ˜>—Jšœœœ˜J˜—Jšœ˜—š Οnœœœœœ˜>Jšœœ˜"šœ œ>œ ˜\Jšœ!˜$Jšœœ ˜+—Jšœœ ˜J˜—Kšœœ”˜«KšœœΠ˜δKšœœB˜XKšœ@˜@Kšœ7˜7Kšœ=˜=Kšœ˜J˜—…—28