! UINF record for Director 17 ! ! ! !>10 + INTEGER(UINF-AICREVS)<<14 ! ! (with certain modifications depending on the state of the IC carry ! bit). ! JOBNAME A character string identifier associated with the ! batch job when it was submitted to the SPOOLR ! process (for REASON=2). ! ! BASEFILE NAME The name of the basefile in use by the process. ! ! PREVIC The value of the current instruction-execution limit ! (in K instructions) at the time the KINSTRS field in ! the ACCT REC field was last updated. ! ! ! ! ITADDR0-4 Reserved for a full network address of the process's ! interactive terminal. ! STREAM ID ! ! D IDENT ! ! ! SCARCITY The number of users on the System at and above ! which the machine resource is deemed to be scarce ! (the funds field of the process owner's index header ! is decremented according to the local charging ! formula for interactive sessions while the number of ! System users is greater than or equal to this value) ! This value is kept in the RATION field of the COM ! record (in public segment 48), see below. ! ! PREEMPT AT The number of users on the System at and above which ! an interactive user currently having no funds ! is eligible for pre-emption (i.e. automatic ! logging-off) by interactive users with positive ! funds. This value is also kept in ! the RATION field in the COM record (in public ! segment 48). ! ! ! The four bytes of the integer COM_RATION hold the following data ! (most significant byte = byte zero): ! ! 0 number of interactive users at and above which ! resources for interaction are deemed to be scarce ! (SCARCITY) ! ! 1 number of interactive users at and above which a ! user having no scarce resource units may be pre ! -empted (logged off with 5 minutes' warning) ! because a new user with some scarce-resource units ! has logged on (PREEMPT A) ! ! 2 spare (zero) ! ! 3 current number of interactive processes ! ! These values should be used in preference to those in the UINF ! record, the fields in UINF are to be withdrawn. ! ! ! SPOOLR FILE is used by Director during batch process ! start up and has no subsequent relevance ! ! FUNDS the current number of funds ! held by the process owner (or his group-holder) ! This field is relevant only when resources are ! deemed to be scarce. ! SESSLEN is the limit in minutes of the session, i.e. the ! maximum duration of the process in elapsed minutes. ! A value of zero implies no limit. Relevant only for ! interactive sessions. ! ! PRIORITY For a batch job, the priority as specified by the ! user: ! 1 = very low ! 2 = low ! 3 = standard ! 4 = high ! 5 = very high ! ! DECKS The number of tape decks to be available to this ! (batch) job. ! ! DRIVES The number of disc drives to be available to this ! (batch) job. ! ! PARTCLOSE Set -1 at process startup if a partial close is in force ! otherwise zero. ! ! TMODES Describes the terminal characteristics. This record is zero ! until a DGETMODE has been issued. Subsequently it contains ! data from the TCP. ! ! UEND marks the end of the record. !> %LIST !> ! %OWN %RECORD (UINFF) %NAME UINF ! !----------------------------------------------------------------------- ! %CONST %INTEGER MONOP = 1 ! %SYSTEMROUTINESPEC SETPAR(%STRING (255) S) %SYSTEMSTRINGFNSPEC SPAR(%INTEGER N) %SYSTEMINTEGERFNSPEC PSTOI(%STRING (63) S) %SYSTEMROUTINESPEC PSYSMES(%INTEGER ROOT, MESS) %SYSTEMROUTINESPEC SETFNAME(%STRING (40) NAME) %SYSTEM %ROUTINE %SPEC CONSOLE (%INTEGER EP, %INTEGER %NAME I, J) %EXTERNAL %INTEGER %FN %SPEC UINFI (%INTEGER N) %EXTERNAL %STRING %FN %SPEC UINFS (%INTEGER N) %EXTERNAL %INTEGER %FN %SPEC DMODE (%INTEGER SET, ADR, CMD) %SYSTEMINTEGERMAPSPEC COMREG(%INTEGER I) !! !! %EXTERNALROUTINE SETMODE(%STRING (255) S) !!SET TCP OPTIONS %CONSTSTRING (9) %ARRAY FNAME(65 : 87) = %C "APPEND","BINARY","CANCEL","DELETE","ECHO","FLOW","GRAPH","HEIGHT", "INT","","","LOWER","MODES","NEWRECORD","","PADS","","RETURN", "STOPINPUT","TABS","UPPER","VIDEO","WIDTH" !!ACTION = (TYPE<<8) ! FUNCTION NO !!TYPES 0-8 REQUIRE DIFFERENT PARAMS - WE SWITCH TO ANALYSE THEM !!FUNCTIONS 1-19 DEFINE ACTION REQUIRED %CONSTHALFINTEGERARRAY ACTION(65 : 87) = %C X'410', X'209', X'308', X'307', X'201', X'211', X'20B', X'402', X'306', X'00', X'00', X'10C', X'000', X'713', X'00', X'50E', X'00', X'305', X'412', X'80A', X'10D', X'20F', X'603' ! A B C D E F G H ! I J K L M N O P ! Q R S T U V W %CONSTBYTEINTEGERARRAY TABDEFAULTS(0 : 8) = %C 1,6,9,12,15,18,40,80,160 %CONSTBYTEINTEGERARRAY LOWER(3 : 7) = %C 2,0,0,15,0 %CONSTBYTEINTEGERARRAY UPPER(3 : 7) = %C 127,255,100,160,31 %OWN %INTEGER NEW STREAM MODE = 1; ! Default is "circular ISO". %INTEGER FLAG, TYPE, LETTER, J, I, PAR, FNO, BINMARK, ASTART, PT, TCPT %STRING (31) TERMAD %BYTEINTEGERARRAY AREA(0 : 63) %BYTEINTEGERARRAYNAME PARLIST %BYTEINTEGERARRAYFORMAT PARF(0 : 7) %STRING (63) NEXT, PARAM, FUNCTION, TAB %SWITCH SW(0 : 8) TERMAD = UINFS (14) %IF LENGTH(TERMAD)>3 %THEN TCPT = 1 %ELSE TCPT = 0 ! TCPT is 1 for a 'new' TCP and 0 for an 'old' one. ! No parameter means "take defaults": %IF S="" %THEN %START %IF TCPT#0 %THEN S = "W=80" %ELSE S = "W=72" S = S. %C ",A=0,C=24,D=127,E,F=OFF,G=OFF,H=0,I=27,P=0,R=13,U,V=OFF,T=6:9:12:15:18:40:80" %FINISH SETPAR(S) BINMARK = 0 FLAG = 0 ASTART = ADDR(AREA(0)) PT = 1 %CYCLE %IF PT > 53 %THEN %START FLAG = 215; !TOO MANY PARAMS PSYSMES(76,FLAG) %EXIT %FINISH NEXT = SPAR(0); !GET NEXT PARAMETER %IF NEXT = "" %THEN %EXIT; !END OF LIST FLAG = 0 LETTER = CHARNO(NEXT,1) %IF LETTER='-' %THEN %START %IF LENGTH(NEXT)=1 %C %THEN -> ERR %C %ELSE NEXT = SUBSTRING(NEXT,2,LENGTH(NEXT))."=OFF" LETTER = CHARNO (NEXT,1) %FINISH %UNLESS 65 <= LETTER <= 87 %AND ACTION(LETTER) # 0 %THEN -> ERR TYPE = ACTION(LETTER)>>8 FNO = ACTION(LETTER)&X'FF' %IF TYPE<=1 %THEN %START FUNCTION = NEXT PAR = 0 %FINISH %ELSE %START %UNLESS NEXT->FUNCTION.("=").PARAM %THEN %START %IF TYPE=2 %THEN %START PARAM = "ON" FUNCTION = NEXT %FINISH %ELSE -> ERR %FINISH %FINISH %IF LENGTH(FUNCTION) > 1 %AND FUNCTION # FNAME(LETTER) %THEN -> ERR !CHECK FULL NAME AREA(PT) = FNO -> SW(TYPE) SW(1): !FOR LOWER,UPPER PAR = 0; !NO PARAMETERS %IF LETTER='U' %AND TCPT=0 %THEN %START NEW STREAM MODE = 1 BINMARK = 1 %FINISH -> NOTE PARAMS SW(2): !FOR ECHO,BINARY,VIDEO,FLOW,GRAPH !PARAM=ON,OFF %IF PARAM = "ON" %THEN PAR = 1 %ELSE %START %IF PARAM = "OFF" %THEN PAR = 0 %ELSE -> ERR %FINISH %IF LETTER='G' %THEN %START %IF PAR=1 %THEN NEW STREAM MODE = X'21' %C %ELSE %IF TCPT#0 %THEN NEW STREAM MODE = 1 %FINISH %IF LETTER='B' %AND LENGTH(FUNCTION)=1 %THEN -> ERR %IF LETTER='B' %OR LETTER='G' %THEN BINMARK = PAR + 1 !ONLY ALLOW FULL NAME -> NOTE PARAMS SW(3): !FOR CANCEL,DELETE,INT,RETURN(2-127) SW(4): !HEIGHT,APPEND,STOPINPUT(0-255) SW(5): !PADS(0-100) SW(6): !WIDTH(15-160) SW(7): !NEWRECORD(0:31) %IF PARAM="OFF" %THEN PAR = 0 %ELSE PAR = PSTOI(PARAM); ! PARAM = NUMBER %IF LOWER(TYPE) <= PAR <= UPPER(TYPE) %THEN -> NOTE PARAMS !CHECK RANGE -> ERR SW(8): !TABS !PARAM=NUMERIC LIST PARLIST == ARRAY(ADDR(AREA(PT+1)),PARF) PARLIST(0) = 1 I = 0 %IF PARAM # "*" %THEN %START %WHILE PARAM # "*" %CYCLE; !LOOK OUT FOR TERMINATOR %UNLESS PARAM -> TAB.(":").PARAM %THEN TAB = PARAM %AND PARAM = "" I = I+1 PARLIST(I) <- PSTOI(TAB) %IF I = 7 %THEN %START; !SHOULD BE EMPTY NOW %IF PARAM = "" %THEN %EXIT %ELSE -> ERR %FINISH %IF PARAM = "" %THEN -> ERR; !INCOMPLETE LIST %REPEAT %CYCLE J = 1,1,I; !CHECK RANGE AND SEQUENCE %UNLESS PARLIST(J-1) < PARLIST(J) <= 160 %THEN -> ERR %REPEAT %FINISH %IF I < 7 %THEN %START; !FILL REST OF TAB VECTOR J = 0 %WHILE TABDEFAULTS(J)<=PARLIST(I) %AND J<8 %CYCLE J = J+1 %REPEAT %CYCLE I = I+1,1,7 PARLIST(I) = TABDEFAULTS(J) J = J+1 %UNLESS J = 8 %REPEAT %FINISH PT = PT+9 -> REP NOTE PARAMS: !DONT DO THIS FOR TABS AREA(PT+1) = PAR; !INSERT SINGLE PARAMETER PT = PT+2 -> REP ERR: !INDICATE INVALID PARAMETER FLAG = 202 SETFNAME(NEXT) PSYSMES(76,FLAG) REP: %REPEAT %IF MONOP#0 %THEN %START %IF FLAG#0 %THEN %START PRINT STRING ("Flag:") WRITE (FLAG,3) NEWLINE %FINISH PRINT STRING ("Bytes to send:") WRITE (PT-1,3) NEWLINE %FINISH %IF PT>1 %AND FLAG=0 %THEN %START; !SOMETHING TO SEND %IF MONOP#0 %THEN %START %CYCLE I=1,1,PT-1 WRITE (AREA(I),2) %REPEAT NEWLINE %FINISH AREA(0) = PT - 1 ! ! **** **** TEMPORARY BODGE **** **** ! ! UINF == RECORD (9<<18) ! %IF UINFI(24)=-2 %AND (UINF_STREAMID>>16)&255=2 %THEN %START ! ! **** **** TO REPLACE ! %IF UINFI(24)=-2 %THEN %START ! ! **** **** END OF TEMPORARY BODGE **** **** ! ! New FEP interface: %IF BINMARK#0 %THEN CONSOLE (18, BINMARK, I); ! Tell FEP. FLAG = DMODE (1, ASTART, 0); ! Tell TCP. %IF MONOP#0 %THEN PRINT STRING ("New") %FINISH %ELSE %START ! Old FEP interface: CONSOLE (17,ASTART,NEW STREAM MODE) %IF MONOP#0 %THEN PRINT STRING ("Old") %FINISH %IF MONOP#0 %THEN %START PRINT STRING (" FEP software") NEWLINE %FINISH %FINISH %IF MONOP#0 %THEN %START %IF TCPT=0 %THEN PRINT STRING ("Old") %ELSE PRINT STRING ("New") PRINT STRING (" TCP software") NEWLINE PRINT STRING ("Flag:") WRITE (FLAG,3) NEWLINE %FINISH COMREG(24) = FLAG; !SET RETURN CODE %END; !OF NEWMODE %ENDOFFILE