<> <> <> <> <> DIRECTORY <> <> <> MiscUtilities USING [KeyForBansheeStatus, KeyForCommunicationStatus, KeyForRavenStatus], NSExec USING [CheckForAbort, Error, ExecProc, Handle, OutputHandle, UserAServerSA], NSString USING [AppendDecimal, AppendLongDecimal, FreeString, String], <> PaperTypes USING [PaperSize], <> PSActivity USING [Basic, Printer, Spooler], PSAsyncMsg USING [Msg], PSCommand USING [GetPrintServiceActivity, GetPrintServiceStatus], PSExecInternal USING [ExpandKeyAndPrint, printServiceName], PSExecMessages USING [Key], <> PSKMessages USING [GetHandle], PSState USING [CurrentActivity, StateHandle], <> Rope USING [ToRefText], <> <> XFormat USING [Blanks, Date, Handle, NSLine, NSString, NSStringObject], XMessage USING [Compose, Get, Handle, StringArray]; PSExecDImpl: CEDAR PROGRAM IMPORTS MiscUtilities, NSExec, NSString, PSCommand, PSExecInternal, PSKMessages, Rope, XFormat, XMessage EXPORTS PSExecInternal SHARES NSString = BEGIN nsNil: NSString.String = NIL; tab0: CARDINAL = 2; tab1: CARDINAL = 4; tab2: CARDINAL = 6; tab3: CARDINAL = 8; <> execMsgs: XMessage.Handle _ PSKMessages.GetHandle[exec]; DisplayPrintServiceStatus: PUBLIC NSExec.ExecProc = BEGIN ENABLE NSExec.Error => IF type = invalidExec THEN GOTO Exit; state: PSState.StateHandle _ PSCommand.GetPrintServiceStatus[]; activity: PSState.CurrentActivity _ PSCommand.GetPrintServiceActivity[]; showInternalState: BOOLEAN _ NSExec.UserAServerSA[exec]; DisplayBasicStatus[exec, state, showInternalState]; IF NSExec.CheckForAbort[exec] THEN GOTO Exit; IF showInternalState THEN ShowVolumeStatus[exec, activity]; IF NSExec.CheckForAbort[exec] THEN GOTO Exit; DisplayOptionSpecificStatus[exec, state, activity, showInternalState]; IF NSExec.CheckForAbort[exec] THEN GOTO Exit; DisplayStats[exec, state, showInternalState]; EXITS Exit => NULL; END; --DisplayPrintServiceStatus QueryTargetPrintService: PUBLIC NSExec.ExecProc = TRUSTED BEGIN ENABLE NSExec.Error => IF type = invalidExec THEN GOTO Exit; outputHandle: XFormat.Handle _ NSExec.OutputHandle[exec]; stringArray: REF XMessage.StringArray _ NEW [XMessage.StringArray[2]]; state: PSState.StateHandle _ PSCommand.GetPrintServiceStatus[]; WITH s: state SELECT FROM < >> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <<"Clearinghouse name:..." >> <> <> <> <> <> <> <> <> <> <<"Network address:...">> <> <> <> <> <> <> <<[targetActivity, targetProperties] _ PSCommand.GetTargetPSStatus[>> < BEGIN --display error message and exit>> <> < stringArray[0] _ M[mTargetNotSet];>> < stringArray[0] _ MGeneric[MiscUtilities.KeyForCommunicationStatus[what]];>> < stringArray[0] _ M[mUnknownProblem];>> <> <> <> <<]; >> <<"Spooler:...">> <> <> <> <<"Formatter:...">> <> <> <> <<"Printer:...">> <> <> <> <> <<"Paper size(s):...">> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <<"Two-sided copy:...">> <> <> <> <<"Stapling:...">> <> <> <> <> ENDCASE => ERROR; EXITS Exit => NULL; END; --QueryTargetPrintService <<********************* >> <> <<*********************>> DisplayBasicStatus: PROCEDURE [exec: NSExec.Handle, state: PSState.StateHandle, showInternalState: BOOLEAN] = BEGIN outputHandle: XFormat.Handle _ NSExec.OutputHandle[exec]; stringArray: REF XMessage.StringArray _ NEW [XMessage.StringArray[2]]; freeThisString: NSString.String; freeString: BOOLEAN _ FALSE; <> nsDateAndTime: NSString.String _ NEW[TEXT[40]]; nsDateTimeObject: XFormat.Handle _ XFormat.NSStringObject[nsDateAndTime]; sCount: NSString.String _ NEW[TEXT[20]]; <<"Print Service "" ">> stringArray[0] _ IF PSExecInternal.printServiceName = [NIL, NIL, NIL] THEN nsNil ELSE Rope.ToRefText[PSExecInternal.printServiceName.object]; stringArray[1] _ M[ SELECT state.mode.current FROM diagnostic => mDiagMode, repair => mRepairMode, shutDown, notStarted => mStopped, ENDCASE => mStarted]; PSExecInternal.ExpandKeyAndPrint[exec, mStatusHerald, stringArray]; IF state.mode.current # shutDown OR state.mode.returnTo # shutDown THEN BEGIN <<"Queuing {Started|Stopped|Preempted}">> SELECT TRUE FROM state.clientControl.spooler = enabled AND state.internalControl.spooler = enabled => BEGIN --Queuing started stringArray[0] _ IF state.lastUserToStartQueuing.length > 0 THEN state.lastUserToStartQueuing ELSE nsNil; PSExecInternal.ExpandKeyAndPrint[exec, mQueuingStartedBy, stringArray]; END; state.clientControl.spooler # enabled => BEGIN --Queuing stopped IF state.lastStopQueuingReason.length > 0 THEN BEGIN stringArray[0] _ state.lastStopQueuingReason; freeThisString _ XMessage.Compose[M[mReason], stringArray]; freeString _ TRUE; stringArray[1] _ freeThisString; END ELSE stringArray[1] _ nsNil; stringArray[0] _ IF state.lastUserToStopQueuing.length > 0 THEN state.lastUserToStopQueuing ELSE nsNil; PSExecInternal.ExpandKeyAndPrint[exec, mQueuingStoppedBy, stringArray]; IF freeString THEN BEGIN NSString.FreeString[freeThisString]; freeString _ FALSE; END; END; ENDCASE => --Queuing preempted outputHandle.NSLine[M[mQueuingPreempted]]; <<"Printing {Started|Stopped|Preempted}">> SELECT TRUE FROM state.clientControl.markerEnabled AND state.internalControl.markerEnabled => BEGIN --Printing started stringArray[0] _ IF state.lastUserToStartPrinting.length > 0 THEN state.lastUserToStartPrinting ELSE nsNil; PSExecInternal.ExpandKeyAndPrint[exec, mPrintingStartedBy, stringArray]; END; NOT state.clientControl.markerEnabled => BEGIN --Printing stopped IF state.lastStopPrintingReason.length > 0 THEN BEGIN stringArray[0] _ state.lastStopPrintingReason; freeThisString _ XMessage.Compose[M[mReason], stringArray]; freeString _ TRUE; stringArray[1] _ freeThisString; END ELSE stringArray[1] _ nsNil; stringArray[0] _ IF state.lastUserToStopPrinting.length > 0 THEN state.lastUserToStopPrinting ELSE nsNil; PSExecInternal.ExpandKeyAndPrint[exec, mPrintingStoppedBy, stringArray]; IF freeString THEN BEGIN NSString.FreeString[freeThisString]; freeString _ FALSE; END; END; ENDCASE => --Printing preempted outputHandle.NSLine[M[mPrintingPreempted]]; END; -- state.mode # shutDown <<"Installed {; Times Rebooted=n}">> IF showInternalState THEN BEGIN nsDateAndTime.length _ 0; XFormat.Date[nsDateTimeObject, state.lastInstallation]; --aopends date to nsDateAndTime stringArray[0] _ nsDateAndTime; IF state.nBoots > 0 THEN BEGIN <> XFormat.NSString[outputHandle, NSString.AppendLongDecimal[NIL, state.nBoots]]; stringArray[1] _ NEW[TEXT[20]]; freeThisString _ XMessage.Compose[M[mTimesRebooted], stringArray]; freeString _ TRUE; stringArray[0] _ freeThisString; END; PSExecInternal.ExpandKeyAndPrint[exec, mInstalled, stringArray]; IF freeString THEN BEGIN NSString.FreeString[freeThisString]; freeString _ FALSE; END; END; <<"Last booted ">> IF showInternalState THEN BEGIN nsDateAndTime.length _ 0; XFormat.Date[nsDateTimeObject, state.lastBoot]; --appends date to nsDateAndTime stringArray[0] _ nsDateAndTime; PSExecInternal.ExpandKeyAndPrint[exec, mServerBooted, stringArray]; END; <<"Statistics Reset ">> IF showInternalState THEN BEGIN nsDateAndTime.length _ 0; XFormat.Date[nsDateTimeObject, state.statisticsReset]; --aopends date to nsDateAndTime stringArray[0] _ nsDateAndTime; PSExecInternal.ExpandKeyAndPrint[exec, mStatsReset, stringArray]; END; <<"Last Activity ">> nsDateAndTime.length _ 0; XFormat.Date[nsDateTimeObject, state.lastActivity]; --aopends date to nsDateAndTime stringArray[0] _ nsDateAndTime; PSExecInternal.ExpandKeyAndPrint[exec, mLastActivity, stringArray]; END; -- of DisplayBasicStatus DisplayCurrentFaxRetries: PROCEDURE [exec: NSExec.Handle, currentCount: CARDINAL, currentDelay: LONG CARDINAL, reasonKey: PSExecMessages.Key, showInternalState: BOOLEAN _ TRUE] = BEGIN outputHandle: XFormat.Handle _ NSExec.OutputHandle[exec]; sCount1: NSString.String _ NEW[TEXT[20]]; sCount2: NSString.String _ NEW[TEXT[20]]; freeThisString: NSString.String; freeString: BOOLEAN _ FALSE; stringArray: REF XMessage.StringArray _ NEW[XMessage.StringArray[2]]; XFormat.NSString[outputHandle, NSString.AppendDecimal[sCount1, currentCount]]; IF currentCount > 0 AND showInternalState THEN BEGIN <> XFormat.NSString[outputHandle, NSString.AppendDecimal[sCount2, currentDelay]]; <> freeThisString _ XMessage.Compose[M[mRetryDelay], stringArray]; freeString _ TRUE; stringArray[1] _ freeThisString; END ELSE stringArray[1] _ NEW[TEXT[20]]; stringArray[0] _ M[reasonKey]; outputHandle.Blanks[tab2]; PSExecInternal.ExpandKeyAndPrint[exec, mTransmissionRetries, stringArray]; IF freeString THEN NSString.FreeString[freeThisString]; END; --DisplayCurrentFaxRetries DisplayOptionSpecificStatus: PROCEDURE [exec: NSExec.Handle, state: PSState.StateHandle, activity: PSState.CurrentActivity, showInternalState: BOOLEAN] = TRUSTED BEGIN outputHandle: XFormat.Handle _ NSExec.OutputHandle[exec]; stringArray: REF XMessage.StringArray _ NEW[XMessage.StringArray[2]]; freeThisString: NSString.String; freeString: BOOLEAN _ FALSE; <<"Printing option: <>{, }">> WITH s: state SELECT FROM bansheeDl => stringArray[0] _ M[mBanshee]; d1 => stringArray[0] _ M[mD1]; fax295 => stringArray[0] _ M[mTC295]; fax495 => stringArray[0] _ M[mTC495]; feps9700 => stringArray[0] _ M[mFEPS]; fx3500 => stringArray[0] _ M[mFX3500]; raven => BEGIN stringArray[0] _ M[mRaven]; stringArray[1] _ M[ SELECT s.engineBuild FROM b1 => mRavenB1, b2, b2TraySensing, b2XSISModified => mRavenB2, ENDCASE => mQuestion]; freeThisString _ XMessage.Compose[M[mOneCommaTwo], stringArray]; freeString _ TRUE; stringArray[0] _ freeThisString; END; ENDCASE => ERROR; PSExecInternal.ExpandKeyAndPrint[exec, mPrintingOption, stringArray]; IF freeString THEN BEGIN NSString.FreeString[freeThisString]; freeString _ FALSE; END; WITH a: activity SELECT FROM <<"Printer ; Status: ">> bansheeDl => BEGIN stringArray[0] _ M[IF a.marker IN [marking..paused] THEN mBusy ELSE mIdle]; stringArray[1] _ MGeneric[MiscUtilities.KeyForBansheeStatus[a.bansheeStatus]]; PSExecInternal.ExpandKeyAndPrint[exec, mPrinterStatus, stringArray]; END; < BEGIN>> <> <> <> <> < BEGIN>> <> <> <> <> <<"Forwarding activity: ; Status = <>>>> feps9700 => BEGIN IF a.forwarder = busy THEN BEGIN <> stringArray[0] _ MGeneric[MiscUtilities.KeyForCommunicationStatus[a.forwardingStatus]]; freeThisString _ XMessage.Compose[M[mRetrying], stringArray]; freeString _ TRUE; stringArray[0] _ freeThisString; END ELSE stringArray[0] _ M[mNone]; PSExecInternal.ExpandKeyAndPrint[exec, mForwardingActivity, stringArray]; IF freeString THEN BEGIN NSString.FreeString[freeThisString]; freeString _ FALSE; END; END; < BEGIN>> <> <> <> <> raven => BEGIN stringArray[0] _ M[IF a.marker IN [marking..paused] THEN mBusy ELSE mIdle]; stringArray[1] _ MGeneric[MiscUtilities.KeyForRavenStatus[a.ravenStatus]]; PSExecInternal.ExpandKeyAndPrint[exec, mPrinterStatus, stringArray]; END; ENDCASE; <> WITH s: state SELECT FROM < BEGIN>> <<"Operational Parameters: ">> <> <<"Paper size = <>">> <> <> <> <> <> <> <> <> <> <> <> <> <<"Print Order = <>">> <> <> < mPerCopy,>> < mPerSetOfCopies,>> < mSuppressed];>> <> <> <> <<>> < BEGIN>> < PSInit.unlimitedPrintingCutOffMemSize THEN BEGIN>> <<"Unlimited printing: ">> <> <> <> <> <<"Paper size = <>">> <> <> <> <> <<"Banner = <>">> <> <> < mPerCopy,>> < mPerSetOfCopies,>> < mSuppressed];>> <> <> <<"Remote banner = <>">> <> <> < BEGIN>> <> <> <> <> <> < BEGIN>> <> <> <> <> < BEGIN>> <> <> <> <> <> <> <> <> <> <> <> <> <> <<"Paper size = <>">> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <<"Two-sided copy = <>">> <> <> <> <<"Stapling = <>">> <> <> <> <> <<>> < BEGIN>> <> <<(s.paperSupply.size2 # s.paperSupply.size1) OR>> <<(s.topPaperTrayEmpty # s.bottomPaperTrayEmpty);>> <<"Operational Parameters: ">> <> <<"Paper Size = <>">> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <<"Feed = <>">> <> <> <> <> < mFirstPagePrintedFirst,>> < mLastPagePrintedFirst];>> <> <> <<"Banner = <>">> <> <