<> <> <> <> <> 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[]; }...