GetPrintStatusImpl.mesa
Copyright © 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
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;
Commander Constants
GetPrintStatus: ROPE = "///Commands/GetPrintStatus";
doc: ROPE = "{Printer}*\nFind out the status of an XNS based printer.";
usage: ROPE = Rope.Concat["Usage: GetPrintStatus ", doc];
Procs
DecodeStatus: PROC [out: IO.STREAM, service: CHName.Name, status: Printing.PrinterStatus] ~ {
msg: ROPENIL;
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[];
}...