Getptr
From Pickwiki
Jump to navigationJump to searchBack to BasicSource
This is a subroutine to do the same job in Universe as the finction GETPTR does in Unidata. It has two parameters, The first is the output and the second is the print channel you are interested in. I tend to write subroutines this way so they can be used in dictionaries, although this is one you would never use in this way.
SUBROUTINE GETPTR(THAT,CHANNEL)
*
* This program gets the details for a SETPTR to be repeated in Universe
* so that you can restore a printer to a prior setting.
*
* Copyright Keith Johnson 2006 - released to the public domain
*
EXECUTE 'SETPTR ':CHANNEL CAPTURING THIS
THAT = ''
XXNO = DCOUNT(THIS,@AM)
FOR XX = 1 TO XXNO
LINE = THIS<XX>
LHS = TRIM(FIELD(LINE,':',1))
RHS = TRIM(FIELD(LINE,':',2,999))
BEGIN CASE
CASE LHS = 'Unit Number' ; THAT<-1> = RHS
CASE LHS = 'Page Width' ; THAT<-1> = RHS
CASE LHS = 'Page Depth' ; THAT<-1> = RHS
CASE LHS = 'Top Margin' ; THAT<-1> = RHS
CASE LHS = 'Bottom Margin' ; THAT<-1> = RHS
CASE LHS = 'Print mode' ; THAT<-1> = TRIM(FIELD(RHS,'-',1))
CASE LHS = 'Number of copies' ; THAT<-1> = 'COPIES ':RHS
CASE LHS = 'Default spool banner'
* THAT<-1> = 'AS ':FIELD(RHS,'"',2)
CASE LHS = 'Print spool banner'
THAT<-1> = 'AS ':FIELD(RHS,'"',2)
CASE LHS = 'Output to HOLD file'
THAT<-1> = 'AS '
IF INDEX(RHS,'_',1) THEN THAT := 'UNIQUE '
THAT := FIELD(RHS,'_',1)
CASE LHS = 'Output NEXT hold file'
THAT<-1> = 'AS NEXT ':RHS
CASE LHS = 'Destination printer'
THAT<-1> = 'AT ':RHS
CASE LHS = 'Automatic page eject' AND RHS = 'Off'
THAT<-1> = 'NOEJECT'
CASE LHS = 'Defer printing until'
DAYT = FIELD(RHS,' ',3):FIELD(RHS,' ',2):FIELD(RHS,' ',5)
DAYT = ICONV(DAYT,'D')
IF DAYT EQ DATE() THEN
NEW1 = ''
END ELSE
* The next line fixes a weird bug in DEFER (Universe 10.0.8)
DAYT += 1
NEW1 = OCONV(DAYT,'DY2')
NEW1 := '.':OCONV(DAYT,'DM')
NEW1 := '.':OCONV(DAYT,'DD'):'.'
END
NEW1 := FIELD(RHS,' ',4)[1,5]
THAT<-1> = 'DEFER ':NEW1
CASE LHS = 'Page limit'
START = OCONV(FIELD(RHS,',',1),'MCN')
IF START GT 1 THEN THAT<-1> = 'STARTPAGE ':START
CEASE = OCONV(FIELD(RHS,',',2),'MCN')
IF CEASE NE '' THEN THAT<-1> = 'ENDPAGE ':CEASE
CASE LHS = 'Output formatting'
IF RHS = 'On' THEN THAT<-1> = 'FMT'
* IF RHS = 'Off' THEN THAT<-1> = 'NOFMT'
CASE LHS = 'Output form name'
THAT<-1> = 'FORM ':RHS
CASE LHS = 'Format NLS map'
THAT<-1> = 'FORMAT.MAP ':RHS
CASE LHS = 'Fortran control codes'
IF RHS = 'On' THEN THAT<-1> = 'FTN'
CASE LHS = 'Initial Job State' ; THAT<-1> = RHS
CASE LHS = 'Display job numbers'
IF RHS = 'On' THEN THAT<-1> = 'INFORM'
CASE LHS = 'Keep output file open'
IF RHS = 'On' THEN THAT<-1> = 'KEEP'
CASE LHS = 'Line numbering'
IF RHS = 'On' THEN THAT<-1> = 'LNUM'
CASE LHS = 'Suppress spool banner'
IF RHS = 'On' THEN THAT<-1> = 'NOHEAD'
CASE LHS = 'Retain in queue'
IF RHS = 'On' THEN THAT<-1> = 'RETAIN'
CASE LHS = 'Spooler priority'
THAT<-1> = 'PRIORITY ':RHS
CASE LINE[1,12] = 'User Options'
THAT<-1> = 'USEROPTS ':LINE[25,999]
CASE LHS = ''
CASE 1
* CRT 'LHS = ':LHS
* CRT 'RHS = ':RHS
END CASE
NEXT XX
CONVERT @AM TO ',' IN THAT