DIRECTORY CHNameP2V0 USING [Name], Commander USING [CommandProc, Register], CommandTool USING [ArgumentVector, Failed, Parse], IO USING [PutF, PutRope, rope, STREAM], PrintingP4V3 USING [PrinterStatus], PrintingP4V3Aux USING [ExposePrinterStatus], Process USING [CheckForAbort], Rope USING [Concat, Length, ROPE], XNSPrintRequestManager USING [Context, ContextObject, GetDefaults, GetPrinterStatus]; GetPrintStatusImpl: CEDAR PROGRAM IMPORTS Commander, CommandTool, IO, PrintingP4V3Aux, Process, Rope, XNSPrintRequestManager ~ { OPEN CHName: CHNameP2V0, Printing: PrintingP4V3, PrintingAux: PrintingP4V3Aux; ROPE: TYPE ~ Rope.ROPE; GetPrintStatus: ROPE = "///Commands/GetPrintStatus"; doc: ROPE = "{Printer}*\nFind out the status of an XNS based printer."; usage: ROPE = Rope.Concat["Usage: GetPrintStatus ", doc]; DecodeStatus: PROC [out: IO.STREAM, service: CHName.Name, status: Printing.PrinterStatus] ~ { msg: ROPE _ NIL; IO.PutF[out, " Service: [%g:%g:%g]\n ", IO.rope[service.object], IO.rope[service.domain], IO.rope[service.organization] ]; msg _ Rope.Concat[PrintingAux.ExposePrinterStatus[status, 1], "\n"]; -- nest 2 spaces IO.PutRope[out, msg]; }; GetPrintStatusProc: Commander.CommandProc ~ { argsProcessed: NAT _ 0; argv: CommandTool.ArgumentVector _ CommandTool.Parse[cmd: cmd, starExpand: FALSE ! CommandTool.Failed => { msg _ errorMsg; GO TO failed; }]; out: IO.STREAM ~ cmd.out; CheckPrinter: PROC [arg: ROPE] = { service: CHName.Name; status: Printing.PrinterStatus; argsProcessed _ argsProcessed + 1; Process.CheckForAbort[]; [service, status] _ XNSPrintRequestManager.GetPrinterStatus[arg]; DecodeStatus[out, service, status]; }; FOR i: NAT IN [1..argv.argc) DO printerName: ROPE ~ argv[i]; Process.CheckForAbort[]; IF (Rope.Length[printerName] = 0) THEN LOOP; CheckPrinter[printerName]; ENDLOOP; SELECT argsProcessed FROM 0 => { context: XNSPrintRequestManager.Context _ NEW[XNSPrintRequestManager.ContextObject]; XNSPrintRequestManager.GetDefaults[context]; IF (context.printerName = NIL) THEN msg _ usage ELSE CheckPrinter[context.printerName]; }; ENDCASE => NULL; EXITS failed => {result _ $Failure}; }; Init: PROC ~ { Commander.Register[GetPrintStatus, GetPrintStatusProc, doc]; }; Init[]; }... ψGetPrintStatusImpl.mesa Copyright c 1985 by Xerox Corporation. All rights reserved. Russ Atkinson, April 2, 1985 4:22:08 pm PST Bill Jackson (bj) February 6, 1987 2:45:39 am PST Demers, June 6, 1986 3:09:39 pm PDT Commander Constants Procs Κx˜codešœ™Kšœ Οmœ1™˜GKš œžœ) œ˜9K˜—šœ™K˜šŸ œžœžœžœ;˜]Kšœžœžœ˜šžœ'˜)Kšžœ˜Kšžœ˜Kšžœ˜Kšœ˜—KšœEΟc˜UKšžœ˜K˜K˜—šŸœ˜-Kšœžœ˜•StartOfExpansionI[cmd: Commander.Handle, starExpand: BOOL _ FALSE, switchChar: CHAR]šœKž˜PKšœ*žœžœ ˜;—Kšœž œ ˜K˜šŸ œžœžœ˜"Kšœ˜Kšœ˜Kšœ"˜"K˜KšœA˜AKšœ#˜#K˜K˜—šžœžœžœž˜Kšœ žœ ˜K˜Kšžœ žœžœ˜,Kšœ˜Kšžœ˜K˜—šžœž˜šœ˜Kšœ*žœ'˜TKšœ,˜,šžœžœ˜Kšžœ ˜Kšžœ#˜'—K˜—Kšžœžœ˜—šž˜Kšœ˜—K˜—K˜šŸœžœ˜Kšœ œ œ œ˜