(George Source)
Macros used: ABANDCOM, ACROSS, ADDJOB, ADDJOBJ, ADDJOBW, BUDGCHAR, BXE, CHARMOVE, CHEKLFN2, CLOSETOP, COMBRKIN, DICTJOB, DOWN, ENDCOM, ERRORX, FJOCA, FREECORE, FSHENTRY, GEOERR, HUNTW, IPBINOPID, JBC, JBS, JLADJUST, JMBAC, MBS, MFREE, MFREEALL, MHUNT, MHUNTW, MONOUT, NAMETOP, OFF, PARABEG, PARALYSX, PARANOTX, PARUNACC, REWIND, SECHECK, SEG, SEGENTRY, SETNCORE, SINM551, SINMAC2, SPARABEG, SPARANOX, SPARUNAC, SUBJOB, SUBJOBJ, SUICIDE, T, TESTHKN, TESTHOOK, TESTPRIV, TESTREP2, TESTRPN2, TRACE, UP, UPPLUS, WKPTABLE
226D ... SEG INITJOB,867,SECTION CENT,,G3UGSI,G551,G400 22=W ...[ 22C# ...[ (C) COPYRIGHT INTERNATIONAL COMPUTERS LTD 1982 22HQ ...[ THIS EXCLUDES CODE UNDER #SKI G551 22N8 ...[ AND UNDER #SKI G3UGSI 22SL ...[ 22^= #OPT WELLTEST=0 23DW #OPT K0INITJOB=0 23YG #LIS K0INITJOB>K0ALLGEO>K0GREATGEO>K0COMMAND 244Y ...#UNS G400 249B ...# THIS CHAPTER MODIFIED FOR G3PLUS-IH 24*S ...#OPT G551 = 0 24G= ...#SKI G551&1 24LN ...# WITH G3UG EDIT M551 (SELECTIVE PASSWORD CHECKS FOR CENTRAL AND REMOTE) 24R6 ...#OPT G3UGSI = 0 24XQ [ 252* ...#SKI G3UGSI 254Y ...( 257H ...[ MACRO TO PREVENT M551 AND SECURITY INTERFACE CLASH 25=6 ... SINM551 25#P ...) 25CB [ THIS SEGMENT ... 25X2 [ 26BL [ 26W= [ USE OF AWORK1-4 WORDS 27*W [ 27TG [ AWORK1 USER CONTEXT PRIVS 28*6 [ AWORK2 COMMAND TYPE 28SQ [ AWORK3 TERMINATOR 29#B [ AWORK4 PARAM/ SHIFT MARKER /TERM/MODE PARAM NUMBER 29S2 [ 2=?L [ 2=R= [ ENTRY POINTS 2?=W SEGENTRY K1INITJOB [DISCONNECT 2?QG [ 2#=6 CALL 7 START 2#PQ SEGENTRY K2INITJOB [LOGIN 2*9B CALL 7 START 2*P2 SEGENTRY K3INITJOB [JOB 2B8L CALL 7 START 2BN= SEGENTRY K4INITJOB [RUNJOB 2C7W CALL 7 START 2CMG SEGENTRY K9INITJOB,TIDY3 [ERROR ENTRY FROM ENWELL/DEWELL 2CX# FSHENTRY K10INITJOB,XK10,,XK10 2D39 FSHENTRY K11INITJOB,,XBIPB,XBIPB 2D4G ...#SKI G551 2D5R ... SEGENTRY K20INITJOB,PWCHECK 2D76 SEGENTRY K99INITJOB 2DLQ ...[ 2F6B #DEF SIZEU=APARA+3-A1 2FL2 [ 2G5L [ 2GK= [ 2GKG ...#SKI G551 2GKQ ...( 2GL2 ...# MEND M551 - SELECTIVE PASSWORD CHECKING 2GL= ...# COPYRIGHT (C) 1980 YORKSHIRE REGIONAL HEALTH AUTHORITY 2GLG ...# WRITTEN BY J.THOMASON FOR Y.R.H.A. 2GLQ ...# 2GM2 ...TLETQ 4H000Q 2GM= ...TLETF 4H000F 2GMG ...TLETL 4H000L 2GMQ ...# 2GN2 ... SEGENTRY K21INITJOB 2GN= ...TCENTRAL 16HNMM NMM NOF NOF 2GNG ...TREMOTE 16HNMM NMM PMF OFF 2GNQ ...) 2GP7 XBRA #30 2GT4 XSTOP #36 2GY^ XSPACE #20 2H4W PARAM 5HPARAM 2HJG MODE 4HMODE 2J46 T 4H000T 2JHQ S 4H000S 2K3B T1 4HT 2KH2 S1 4HS 2KQS XONE 2L2L XCOLON 1 2LG= 4H: 2L^W WKPTAB 2MFG WKPTABLE 2NDQ PCON #700000 2PD2 PJUSNA +JUSNA 2PXL PJJOBNA +JJOBNA 2Q=2 NOWELL 4HNOWE 2QC= [ 2QWW [ SUBROUTINE TO PARABEG FOR PARAMETER BEGINNING WITH THE [X5] 2RBG [ CHARACTERS STARTING AT [X3]. EXITS AS ANNOTATED. 2RW6 [ 2S*Q XPBEG NGNC 0 1 2STB XPBEGCH [ENTRY A0 XPBEGCH CHECKS PARAMETER... 2T*2 LDN 4 0 [...FOUND IS COMPOSITE (I.E. TYPE 2) 2TSL SBX 7 FX1 2W#= PARABEG 1,5,0(3),,0 2WRW MHUNT 3,CPB,CUNI 2X?G ADX 7 FX1 2XR6 LDX 5 ANUM(3) 2Y=Q STO 4 ACOMMUNE1(2) 2YQB BNZ 4 XPB1 [J IF XPBEG ENTRY 2^=2 LDX 4 JPARNUM(3) 2^PL FREECORE 3 [FREE CPB/CUNI BLOCK IF XPBEGCH 329= XPB1 BPZ 5 XPB2 [J IF PARAMETER EXISTS 32NW EXIT 7 0 [PARAMETER NON-EXISTENT 338G XPB2 BNZ 5 XPB3 33N6 XPB4 EXIT 7 1 [NULL PARAMETER (ILLEGAL IF XPBEGCH) 347Q XPB3 LDX 0 ACOMMUNE1(2) 34MB BNZ 0 XPB5 [J IF XPBEG ENTRY 3572 SRL 5 12 35LL SBN 5 2 366= BNZ 5 XPB4 [J IF NOT TYPE 2 PARAMETER 36KW XPB5 EXIT 7 2 [OK 375G [ 376H [ SUBROUTINE TO SPLIT PARAMETER AND TEST REPLY 377J [ X7=LINK 378K [ X3=NO OF PARAMETER 379L [ EXIT 0 IF ERROR FOUND, EXIT 1 OTHERWISE 37=M [ 37?N PARAL 37#P SBX 7 FX1 37*Q PARALYSX 4,,3 37BR ADX 7 FX1 37CS TESTRPN2 OK,PARAL10 [J IF NOT OK 37DT EXIT 7 1 37FW PARAL10 37GX EXIT 7 0 37HY [ 37K6 [ SUBROUTINE TRAN SPACE-FILLS THE 3 WORD AREA FROM [X2] AND THEN 384Q [ MOVES INTO IT THE CONTENTS OF THE CPB/CUNI BLOCK AT [X3]. ENTRY 38JB [ AT TRANH HUNTS THE CPB/CUNI BLOCK FIRST. 3942 [ 39HL TRANH MHUNT 3,CPB,CUNI 3=3= TRAN LDX 5 ACES 3=GW STO 5 0(2) 3?2G STO 5 1(2) 3?G6 STO 5 2(2) 3?^Q LDX 1 ANUM(3) 3#FB LDN 5 APARA(3) 3#^2 LDN 6 0(2) 3*DL MVCH 5 0(1) 3*Y= LDX 1 FX1 3BCW EXIT 7 0 3BXG [ 3CC6 [ SUBROUTINE TO CHECK THAT PARAMETER HAS LOCAL FILE NAME FORMAT 3CWQ [ 3DBB XCHEKLFN 3DW2 CHEKLFN2 (7),NLFN 3F*L EXIT 7 1 3FT= [ 3G#W [ SUBROUTINE TO SPARABEG FOR USERNAME PARAMETER 3GSG [ 3H#6 XSPCOL 3HRQ SBX 7 FX1 3J?B SPARABEG 1,XCOLON(1) 3JR2 ADX 7 FX1 3K=L EXIT 7 0 3KQ= [ 3L9W [ X4USER SETS X4 TO POINT TO THE 3 WORD USERNAME. THIS IS CPREFIX 3LPG [ IN THE CPA FOR NO-USER AND JUSER IN THE JOBLOCK FOR USER. 3M96 [ 3MNQ X4USER 3MNT ...#UNS G400 3MNY ...( 3MP3 ...[ 3MP6 ...[ TEST FOR RJ TO ANOTHER USER 3MP9 ...[ 3MP# ... HUNTW 2,IUSER,G400USER [SEE IF A USERNAME 3MPC ... BNG 2 X4HOOK [JUST AS NORMAL 3MPG ... LDN 4 A1(2) [GET ADDR OF USERNAME 3MPK ... BRN X6 3MPN ...X4HOOK 3MPR ...) 3MPY [ 3MR6 [ 3MS# [ TEST FOR SPECIAL DC CASE FIRST 3MTG [ 3MWN HUNTW 2,JWELL,COPYSYS 3MXW BNG 2 X4ACT 3M^4 LDX 0 A1+FRH+JLUSER(2) 3N2= BZE 0 X4ACT 3N3D LDN 4 A1+FRH+JLUSER(2) 3N59 BRN X6 3N72 X4ACT 3N7N LDX 2 FX2 3N8B LDN 4 CPREFIX(2) 3NN2 LDX 0 CONTEXT(2) 3P7L ANDN 0 1 3PM= BZE 0 X4XIT 3Q6W FJOCA 2 3QLG LDN 4 JUSER(2) 3R66 X6 LDX 2 FX2 3RKQ X4XIT EXIT 7 0 3S5B [ 3S5^ SETUPJW 3S6J SBX 4 FX1 3S77 LDX 2 FX2 3S7Q STO 4 ACOMMUNE1(2) 3S8* LDX 6 JOBDATASIZE 3S8Y ADN 6 JOBLISTSIZE 3S9H SETUPCOR 6,3,JWELL,COPYSYS [ INITIAL RECORD SIZE FOR SYS JOBLIST 3S=6 [ 3S=P [ CLEAR TO ZERO 3S?# [ 3S?X STOZ A1(3) 3S#G LDN 4 A1(3) 3S*5 LDN 5 A1+1(3) 3S*N SMO 6 3SB? MOVE 4 511 [ CLEAR TO ZERO 3SBW [ 3SCF [ RECORD SIZE... 3SD4 [ 3SDM STO 6 A1(3) 3SF= JLADJUST 3 3SFT STO 7 JLBUDGETS(3) 3SGD LDX 4 ACOMMUNE1(2) 3SGL MHUNTW 2,FILE,ADICTENT 3SGN JBC NFRZ,2,BFROZEN 3SGQ MBS 3,JLBFROZENNC,JLBNOTCAND 3SGS NFRZ 3SH3 CLOSETOP 3SHL ADX 4 FX1 3SJ9 EXIT 4 0 3SK2 [ 3T4L [ 3TJ= [ 3W3W [ 3WHG [ 3X36 [ 3XGQ [ 3Y2B [ START OF MAIN SEQUENCE OF CODE 3YG2 [ 3Y^L START 3^F= ANDX 7 BITS22LS [CONVERT X7 TO COMMAND MARKER... 3^YW SBN 7 K4INITJOB(1) [...DC=-2 ; LN=-1 ; JB=0 ; RJ=1 42DG BNG 7 ST1 42Y6 BZE 7 ST1 [J IF NOT FROM RUNJOB 43CQ ANDX 7 CONTEXT(2) 43XB ADN 7 1 [X7=1 FOR NO-USER RJ ;=2 FOR USER RJ 44C2 ST1 STO 7 AWORK2(2) [ COMMAND TYPE 44WL ADN 7 1 45B= BNZ 7 ST2 [J IF NOT LOGIN 45TW LDX 4 CPLEV(2) 46*G BNZ 4 XNOUGHT [ERROR IF LN NOT DIRECT FROM CONSOLE 46T6 ST2 LDX 4 ACES [SP-FILL AWORK3 LEST TERM<4 CHAS... 47#Q STO 4 AWORK3(2) [...FOUND IN JOB. 47SB STOZ AWORK4(2) 48#2 LDX 7 AWORK2(2) [ COMMAND TYPE 48RL TRACE 7,INITJOB 49?= SBN 7 2 49QW BZE 7 XRJ [J IF USER RJ 4==G ADN 7 4 4=Q6 BZE 7 XDC [J IF DC 4?9Q [ 4?PB [ GET AND CHECK USERNAME PARAMETER 4#92 [ 4#B8 ...#UNS G400 4#HB ...XNEWRJ 4#NL CALL 7 XSPCOL 4*8= CALL 7 XCHEKLFN 4*MW BRN NUSEN 4B7G LDX 6 JPARNUM(3) 4BM6 SBN 6 3 4C6Q BPZ 6 NUSEN [MUST BE PARAMETER 1 OR 2 4C7Y ...#UNS G400 4C96 ...( 4C=# ... LDN 7 1 4C?G ... ANDX 7 CONTEXT(2) 4C#N ... BZE 7 XNUH [J IF NO-USER 4C*W ... SETNCORE 3,2,IUSER,G400USER [BLOCK TO HOLD USER NAME 4CC4 ... LDN 2 A1(2) [ADDR OF DUMP AREA 4CD= ... CALL 7 TRANH 4CFD ... FREECORE 3 4CGL ... BRN XNUHX 4CHS ...XNUH 4CK2 ...) 4CLB LDN 2 CPREFIX(2) 4D62 CALL 7 TRAN [MOVE USERNAME TO CPAT 4DKL FREECORE 3 4F5= XRJ 4F6H ...#UNS G400 4F7S ...( 4F95 ... TESTHKN XNUHX [JUMP IF NOT IN A HOOK 4F=B ... PARUNACC 4F?M ... MHUNT 3,CPB,CUNI 4F#Y ... LDCH 0 APARA(3) 4FB9 ... SBN 0 10 4FCG ... BNZ 0 XDC 4FDR ... BRN XNEWRJ 4FG4 ...XNUHX 4FH* ...) 4FJW [ 4G4G [ GET AND CHECK JOBNAME PARAMETER 4GJ6 [ 4H3Q PARUNACC 4HHB XDC 4J32 CALL 7 XCHEKLFN 4JGL BRN NJOBN 4K2= LDXC 6 EXT+7(2) 4KFW BCS SPACERR [SPACE(S) FOUND IN JOBNAME 4K^G [ 4LF6 [ PASS JDF PARAMETER FOR RUNJOB (NOW IN CASE IT IS PARAM...) 4LYQ [ 4MDB NGX 7 AWORK2(2) 4MY2 BPZ 7 NTRJ [J IF NOT RUNJOB 4N2* SPARUNAC 4N4N MHUNT 3,CPB,CUNI 4N73 LDX 7 ANUM(3) 4N9B BZE 7 NCHSP 4N?P BNG 7 NCHSP 4NB4 ANDN 7 #7777 [(NON ZERO) CHARACTER COUNT 4NDC LDN 2 APARA(3) 4NGQ LDN 5 0 [SET "IGNORING LEADING SPACES" 4NK5 LDN 6 0 4NMD TSPLOOP 4NPR LDCH 0 0(2) 4NS6 BXE 0 XBRA(1),XOUTLOOP [J OUT IF "(" 4NWF BXE 0 XSTOP(1),ZERO56 [J IF "." 4NYS BXE 0 XSPACE(1),SETSP6 [J IF SPACE 4P37 LDN 5 1 [UNSET "IGNORING LEADING SPACES" 4P5G BPZ 6 NXTCHAR [J IF NOT AFTER SPACE 4P7T ORN 6 1 [SET INTERNAL SPACE MARK 4P=8 BRN NXTCHAR 4P#H SETSP6 4PBW BZE 5 NXTCHAR [J IF IGNORING SPACES 4PF9 ORX 6 GSIGN [SET SPACE FOUND 4PHJ BRN NXTCHAR 4PKX ZERO56 4PN= LDN 5 0 4PQK LDN 6 0 4PSY NXTCHAR 4PX? BCHX 2 £ 4P^L BCT 7 TSPLOOP 4Q3^ XOUTLOOP 4Q6# ANDN 6 1 4Q8M BNZ 6 SPACERR2 [J IF INTERNAL SPACE FOUND 4Q?2 NCHSP 4QB6 NAMETOP 3,FILE,FNAME 4QTQ NTRJ 4R*B [ 4RT2 [ GET AND CHECK FORMAT OF 'PARAM' PARAMETER. 4S#L [ IF PRESENT 4SS= [ 4T?W LDN 5 5 4TRG LDN 3 PARAM(1) 4W?6 CALL 7 XPBEGCH [LOCATE AND CHECK 'PARAM' 4WQQ BRN XMODE [NONE PRESENT 4X=B BRN PARILL [FORMAT ERROR IN 'PARAM' PARAMETER 4XQ2 DCH 4 AWORK4(2) [ REMEMBER PARAM NUMBER 4XQX [ 4XRS [ CHECK PARAMETER 4XSP LDX 3 4 4XTL NGN 4 1 [SET SEPARATOR=-1 4XWH CALL 7 PARAL [SPLIT INTO "PARAM" & "PARAMETERS" 4XXD BRN PARILL [J IF ERROR 4XY* LDN 3 2 4X^= CALL 7 PARAL [SPLIT OFF OUTER BRACKETS 4Y27 BRN PARILL [J IF ERROR 4Y34 LDN 3 1 4Y3^ LDN 4 #34 [SET SEPARATOR = "," 4Y4W CALL 7 PARAL [SPLIT ACTUAL PARAMETERS 4Y5R BRN PARILL [J IF ERROR 4Y6N [ ALL OK - RELEASE THE CPB/CMULTI BLOCKS 4Y7K MFREEALL CPB,CMULTI 4Y8G [ 4Y9L XMODE LDX 7 AWORK2(2) 4YP= BNZ 7 PEND1 [J UNLESS FROM JOB 4^8W [ 4^NG [ FOR 'JOB' WE HAVE TO DEAL WITH THE OPTIONAL MODE AND TERMINATOR 5286 [ PARAMETERS,BEARING IN MIND THE 2 POSSIBLE FORMATS. 52MQ [ NEW FORMAT IS ASSUMED IF 'PARAM' OR 'MODE' IS PRESENT,OR IF 537B [ PARAMETER 3 IS NOT NULL/T/S. 53M2 [ 546L [ GET PARAMETER NUMBER AND CHECK FORMAT OF 54L= [ 'MODE' PARAMETER,IF PRESENT 555W [ 55KG LDN 5 4 5656 LDN 3 MODE(1) 56JQ CALL 7 XPBEGCH 574B BRN XTERM [NO 'MODE' PARAMETER 57J2 BRN MODILL [FORMAT ERROR IN 'MODE' PARAMETER 583L DEX 4 AWORK4(2) [REMEMBER PARAMETER NUMBER 585J [ 587G [ CHECK PARAMETER 589D LDX 3 4 58?B NGN 4 1 [SET SEPARATOR =-1 58*# CALL 7 PARAL 58C= BRN MODILL [J IF ERROR 58F= MFREE CPB,CMULTI 58H= BRN XTERB [ASSUME NEW FORMAT - GO FIND TERM. 58PG XTERM 5Q5Q XTERB LDN 6 2 5QKB LDN 3 T1(1) 5R52 XTB1 LDN 5 1 5RJL CALL 7 XPBEG [PARABEG FOR T/S 5S4= BRN NONE [NO SUCH PARAMETER 5SHW BRN NULL [PRESENT BUT NULL 5T3G LDX 4 APARA(3) [TEXT OF TERM.(SP-FILLED TO 4 CHARS) 5TH6 STO 4 AWORK3(2) 5W2Q NULL ADN 6 #62 5WGB SLL 6 6 5X22 ORS 6 AWORK4(2) [REMEMBER T/S 5XFL BRN PEND 5X^= NONE FREECORE 3 5YDW LDN 3 S1(1) 5YYG BCT 6 XTB1 [IF 'T' ABSENT LOOK FOR 'S' 5^D6 BRN PEND1 5^XQ PEND FREECORE 3 62CB [ 62X2 [ END OF 'JOB' SOLO. INCREMENT JOB COUNT IF POSSIBLE 63BL [ 63FH PEND1 63GG LDN 5 4 63HF LDN 3 NOWELL(1) 63JD CALL 7 XPBEG [LOOK FOR NOWELL PARAMETER 63KC BRN NNWL 63LB NULL 63M* LDCT 0 #400 63N# ORS 0 AWORK1(2) [SET MARKER FOR LATER 63P? NNWL 63Q= FREECORE 3 63R9 NGX 7 AWORK2(2) 64?= # 64#4 XK10 64#W # 65*6 BCT 7 NLN [J IF NOT LN 65SQ ADDJOB UP,XCOM [INCREMENT JOB COUNT WITH MOP JOB 66#B BRN XOFFL 66C8 ...NLN 66G2 ...#SKI CASKI8214 66JS ...( 66ML ... LDX 7 AWORK1(2) 66QD ... BNG 7 NLN1 [J IF NOWELL 66T= ... ADDJOBW UP,XCOM 66Y4 ... BRN XOFFL 672W ...NLN1 675N ...) 678G ... ADDJOBJ UP,XCOM [INCREMENT JOB COUNT WITH OFFLINE JOB 67?L XOFFL 67R= [ 68=W [ CHECK USER'S MONEY BUDGET AND,IF OK,INCREMENT COUNT OF HIS JOBS 68QG [ IN DICTIONARY 69=6 [ 69PQ SETNCORE 3,3,FILE,ADICT 6=9B CALL 7 X4USER 6=P2 LDN 5 A1(3) 6?8L MOVE 4 3 [MOVE USERNAME INTO FILE/ADICT 6?N= DICTJOB 1 [CHECK MONEY/INCREMENT COUNT 6#7W TESTREP2 OK,XDOK,NOUSER,XNOUSE,UNJOB,UNJOB,NOTENUF,XENUF 6#MG GEOERR 1,DICTNOK 6*76 XDOK 6*LQ [ 6B6B [ GET CONTEXT PRIV'S OF USER AND,IF NECESSARY,CHECK HE HAS THOSE 6BL2 [ REQUIRED. REMEMBER HIS CONTEXT PRIV'S IN AWORK1.CHECK PW IF NEC. 6C5L [ 6CK= LDX 7 AWORK2(2) 6D4W SBN 7 2 6DJG BZE 7 XRJ1 [J IF USER RUNJOB 6F46 ADN 7 4 6FHQ BZE 7 XDC1 [J IF DC 6FW7 ...#UNS G400 6G8J ...XSDK1 6GH2 LDN 7 0 6H2L LDN 3 0 6H^W SETNCORE 4,1,CPB,CUNI 6JFG LDN 0 8 6J^6 STO 0 ANUM(1) 6KDQ BRN Q1A 6KYB Q1 MHUNT 1,CPB,CUNI 6LD2 Q1A SMO FX1 6LXL LDN 0 WKPTAB(3) 6MC= LDN 1 APARA(1) 6MWW MOVE 0 2 [MOVE 'CONTEXTA/B/C' INTO CPB/CUNI 6NBG REWIND 6NW6 BUDGCHAR [GET BIT PATTERN FOR GIVEN CONTEXT... 6P*Q [ [...PRIV IN JBUDGET/JLINE 6PTB TESTRPN2 OK,Q2 [JUMP ON IF NO SUCH BUDGET TYPE 6Q*2 MHUNTW 2,JBUDGET,JLINE 6QSL MHUNTW 1,FILE,ADICTENT 6R#= TESTPRIV JPATTERN(2),1 [TEST IF USER HAS CONTEXTA/B/C PRIV 6RRW BZE 0 Q3 [J IF NOT 6S6? SMO FX1 6SDN ORX 7 WKPTAB+2(3) 6SR6 Q3 FREECORE 2 [FREE JBUDGET/JLINE 6T86 Q2 ADN 3 3 [UPDATE CONTEXT C!AR. STRING MOD. 6TK6 SMO FX1 6W26 LDX 0 WKPTAB(3) 6WC6 BNZ 0 Q1 6WS6 CALL 4 SETUPJW 6X9= MFREE CPB,CUNI 6XNW LDX 5 AWORK1(2) [CONTEXT BITS OF COMMAND LEFT BY... 6Y8G [ [...COMMAND PROCESSOR. 6YN6 ANDX 5 PCON(1) [ISOLATE CONTEXT PRIV'S REQUIRED 6^7Q ANDX 5 ICONTEXT [DROP THOSE NOT CURRENTLY ENFORCED 7272 BZE 5 XCONOK [J IF NO CONTEXT PRIV'S REQUIRED 72LL ANDX 7 5 72WD ANDX 7 PCON(1) 736= ERX 7 5 73KW BNZ 7 XERPRIV [J IF USER HASN'T ALL REQUIRED 745G XCONOK 746? ...#SKI G551&1 7474 ...( 747T ...[ MEND EXCHANGE SCHEME CODE 748L ... LDCT 0 #600 749C ... ANDX 0 CONTEXT(2) 74=8 ... BNZ 0 SYSIS 74=^ ... LDN 7 2 74?Q ... ADX 7 AWORK2(2) [ 1 - LN, 2 - JB, 3 - RJ 74#H ... DOWN INITJOB,20 74*# ... BRN XBROKIN [ BREAK-IN 74B5 ... BRN MESSI [ PW INVALID 74BW ... BRN NCH [ OK 74CM ... BRN MESSH [ PW REQ'D & NOT OFFERED 74DD ...) 74F9 ...#SKI G551^G3UGSI<1$1 74G2 ...( 74GR ...[ THE NEXT BIT IS COMPILED IF NEITHER OF G3 USER GROUP 74HJ ...[ MENDS FOR SECURITY INTERFACE ENHANCEMENT NOR SELECTIVE PASSWORD 74J* ...[ CHECKING (G551) IS SWITCHED ON 74K6 MHUNTW 3,FILE,ADICTENT 74KX ...#UNS G400 74LN ...( 74MF ... HUNTW 1,IUSER,G400USER 74N= ... BPZ 1 USERLS 74P3 ... LDX 1 FX1 74PS ... LDX 4 AWORK2(2) 74QK ... SBN 4 1 74RB ... BNZ 4 NOTRJ 74S7 ... TESTHOOK USERLS 74SY ...NOTRJ SEGENTRY G400PSWD 74TP ... BRN PASSCHK 74WG ...XTYPE +0 74X? ... LDX 0 XTYPE(1) 74Y4 ... ADN 4 2 74YT ... SMO 4 74^L ... SLL 0 0 752C ... BNG 0 USERLS 7538 ...PASSCHK 753^ ...) 754Q LDCT 4 #600 75JB ANDX 4 CONTEXT(2) 7642 BNZ 4 USERLS [J IF SYSTEM ISSUED 76HL SECHECK 3,USERLS,XNOR [-> USERLS IF LOW :->XNOR IF NOR. SEC 76NS SINMAC2 MESSH 76W2 LDX 2 FX2 773= LDX 4 CONTEXT(2) 77GW ANDN 4 #60 782G BNZ 4 MESSH [J TO ERROR FLAG IF NOT MOP AND HIGH 78G6 XNOR LDX 4 CONTEXT(2) 78^Q ANDN 4 #10 79FB BZE 4 USERLS [SKIP PW CHECK IF NOT MOP 7=Y= CHEKPASW XBROKIN,MESSI [READ AND CHECK PW. N.B. CHEKPASWRD.. 7?CW [ [...FREES FILE/ADICTENT 7?GN ...) 7?KG ...[ 7?N# ...#SKI G3UGSI 7?R6 ...( 7?TY ...[ THIS SECTION IS COMPILED IF G3 UG SEC INTERFACE ENHANCEMENT 7?YQ ...[ IS SWITCHED ON 7#3J ... SINMAC2 XENOR,XBROKIN,2 [XENOR=ERROR, XBROKIN=BREAKIN 7#6B ...) 7#98 ...#SKI G551&1$1 7##2 ... BRN NCH 7#C6 XRJ1 [FOR RJ IN USER CONTEXT AND DC... 7#FP ...#UNS G400 7#J# ...( 7#LX ... HUNTW 3,IUSER,G400USER 7#PG ... BPZ 3 XSDK1 7#S5 ...) 7#WQ XDC1 [CONTEXT PRIV'S ARE FOUND FROM JPRIV 7*BB [ [IN THE JOB BLOCK. 7B*L FJOCA 3,2 7BN3 NGN 7 4 7C2D ANDX 7 JPRIV(3) 7C3P ...#SKI G3UGSI<1$1 7C53 JBC NSECURE,3,JBSINFACE1 [J IF NOT SECURE USER 7C5M ...[ 7C6? ...#SKI G3UGSI [USER GROUP SECURITY INTERFACE 7C6X ... JMBAC NSECURE,3,JBSINFACE1,JBSINFACE2 [J IF NOT SECURE USER 7C7L ORN 7 1 7C=9 NSECURE 7C#W CALL 4 SETUPJW 7CM? ...#SKI G551&1 7C^N ...SYSIS 7D#6 MHUNTW 3,FILE,ADICTENT 7DRQ USERLS 7F?B FREECORE 3 7FR2 NCH 7G=L XACR ACROSS ENWELL,1 7G=N ...#SKI G551&1 7G=Q ...( 7G=S ...[ MEND EXCHANGE SCHEME CODE 7G=W ...# 7G=Y ...PWSTL 8,8HPASSWORD [ LONG KEY - CAN BE CHANGED IF REQ'D 7G?2 ...PWSTS 2,2HPW [ SHORT KEY - DITTO 7G?4 ...# 7G?6 ...ZQUOT #22 7G?8 ...ZCOMM #34 7G?= ...#DEF ZLBRA = XBRA 7G?# ...ZRBRA #31 7G?B ...#DEF ZSPAC = XSPACE 7G?D ...# 7G?G ...# SUBROUTINE TO FIND NEXT PARAM, LEAVING START POINT IN AWORK3, 7G?J ...# END POINT IN AWORK2, NUMBER OF CHARACTERS IN X4 7G?L ...SKPAR LDX 3 AWORK2(2) [ POSITION OF PRECEDING COMMA 7G?N ... BCHX 3 £ 7G?Q ... SBN 7 1 7G?S ... STO 3 AWORK3(2) [ START OF PARAMETER 7G?W ... STO 7 GEN0 7G?Y ... BZE 7 PFIN [ IN CASE NO PW & FINAL COMMA 7G#2 ... LDN 6 0 [ -1 = QUOTES, +VE = () DEPTH 7G#4 ...SKPL LDCH 4 0(3) 7G#6 ... NGX 0 6 7G#8 ... LDXC 0 0 [ NGXC DOESN'T WORK AS REQUIRED 7G#= ... TXU 4 ZQUOT(1) 7G## ... NGN 0 0 7G#B ... ERX 0 GMINUS1 [ IF QUOTES OUTSIDE (), 7G#D ... ERX 6 0 [ SWITCH QUOTES MARKER 7G#G ... TXU 6 GZERO 7G#J ... TXU 4 ZCOMM(1) 7G#L ... BCC PFIN [ COMMA OUTSIDE QUOTES OR () 7G#N ... LDXC 0 6 7G#Q ... TXU 4 ZLBRA(1) [ ( OUTSIDE QUOTES 7G#S ... SBN 6 0 7G#W ... LDXC 0 6 [ IGNORE ) IN QUOTES OR WITHOUT ( 7G#Y ... TXU 4 ZRBRA(1) 7G*2 ... ADN 6 0 7G*4 ... BCHX 3 £ 7G*6 ... BCT 7 SKPL 7G*8 ...PFIN STO 3 AWORK2(2) 7G*= ... LDX 6 GEN6 7G*# ... LDX 4 GEN0 7G*B ... ADN 6 1 7G*D ... SBX 4 7 [ NO. OF CHARS IN THIS PARAM 7G*G ... STO 6 GEN6 [ LEAVE PARAM NO. IN X6 7G*J ... EXIT 5 0 7G*L ...# 7G*N ...# TEST IF 'PASSWORD' KEY AT START OF PARAM JUST SCANNED. 7G*Q ...# ENTER WITH X1 POINTING TO KEY STRING PWSTL OR PWSTS. 7G*S ...# EXIT IF NOT MATCHED, ELSE GO AHEAD WITH PROCESSING IT. 7G*W ...TPWS STO 5 GEN0 [ LINK 7G*Y ... TXL 4 0(1) 7GB2 ... BCS NPWS [ TOO SHORT 7GB4 ... LDX 6 0(1) 7GB6 ... LDX 3 AWORK3(2) 7GB8 ... STO 1 GEN1 7GB= ...TPWSL BZE 6 YPWS 7GB# ... LDCH 5 1(1) 7GBB ... BCHX 1 £ 7GBD ... SBN 6 1 7GBG ...TPWSB TXU 3 AWORK2(2) [ END OF PAR 7GBJ ... BCC NPWS 7GBL ... LDCH 0 0(3) 7GBN ... BCHX 3 £ 7GBQ ... TXU 0 5 7GBS ... BCC TPWSL [ OK SO FAR 7GBW ... ERN 0 #20 7GBY ... BZE 0 TPWSB [ IGNORE SPACE 7GC2 ...NPWS LDX 1 FX1 7GC4 ... BRN (GEN0) [ EXIT - NOT MATCHED 7GC6 ...# 7GC8 ...YPWS NGN 1 3 7GC= ... ANDX 1 BITS22LS 7GC# ... SBN 4 1 7GCB ... STO 4 GEN5 [ TOTAL LENGTH OF PW PARAM -1 7GCD ... STO 7 GEN4 [ NO. OF CHARS LEFT IN COMMAND 7GCG ... TXU 3 AWORK2(2) 7GCJ ... BCC PWMVS [ EMPTY - INSERT SPACES 7GCL ... LDN 5 #20 7GCN ...YPWSK LDCH 0 0(3) 7GCQ ... BCHX 3 £ 7GCS ... TXU 0 5 [ SKIP INITIAL SPACES 7GCW ... BCS PWMV 7GCY ... TXU 3 AWORK2(2) 7GD2 ... BCS YPWSK 7GD4 ...PWMVS LDN 0 #20 7GD6 ...PWMV DCH 0 8(1) [ COPY TO X5X6X7 7GD8 ... BCHX 1 £ 7GD= ... BZE 1 PWMVE [ 12 CHARS DONE 7GD# ... TXU 3 AWORK2(2) 7GDB ... BCC PWMVS [ SPACES AFTER END 7GDD ... LDCH 0 0(3) 7GDG ... BCHX 3 PWMV 7GDJ ...PWMVE LDXC 0 AWORK4(2) 7GDL ... BCS ZMV [ NO WIPE REQUIRED 7GDN ... LDX 4 AWORK3(2) [ SLIDE UP ANYTHING FOLLOWING 7GDQ ... LDX 3 AWORK2(2) 7GDS ... CHARMOVE 3,GEN4 7GDW ... LDX 3 4 [ TO WIPE REST WITH SPACES 7GDY ... LDN 0 #20 7GF2 ... BCHX 4 £ 7GF4 ... DCH 0 0(3) 7GF6 ... CHARMOVE 3,GEN5 7GF8 ... LDX 4 GEN5 7GF= ... SMO AWORK1(2) 7GF# ... SBS 4 ANUMCHA [ REDUCE CLB CHAR COUNT 7GFB ...ZMV LDX 4 GEN6 [ PARAMETER TO BE MARKED 'ACCESSED' 7GFD ... PARANOTX 4 [ AND TIME WE COORDINATED ANYWAY 7GFG ... MFREE CPB,CUNI 7GFJ ... MHUNTW 3,FILE,ADICTENT 7GFL ... LDN 0 1 7GFN ... ANDX 0 AWORK4(2) 7GFQ ... BZE 0 PWOK [ N OR P - NO CONTENT CHECK 7GFS ... TXU 5 CPASS(3) 7GFW ... TXU 6 CPASS+1(3) 7GFY ... TXU 7 CPASS+2(3) 7GG2 ... BCS XMESSI 7GG4 ...PWOK 7GG6 ... FREECORE 3 7GG8 ... UPPLUS 2 7GG= ...XMESSI 7GG# ... FREECORE 3 7GGB ... UPPLUS 1 7GGD ...XMESSH 7GGG ... FREECORE 3 7GGJ ... UPPLUS 3 7GGL ...# 7GGN ...# ENTRY POINT - X7 -VE IF PARAM CLEARING NOT REQUIRED 7GGQ ...# L.S. 22 BITS OF X7 IDENTIFY CALLING ROUTINE: 7GGS ...# 1 - LN / CN, 2 - JOB / INPUT, 3 - RJ 7GGW ...# 7GGY ...PWCHECK 7GH2 ... STO 7 AWORK4(2) 7GH4 ... LDN 0 3 7GH6 ... ANDX 7 BITS22LS 7GH8 ... TXU 7 0 7GH= ... SBN 0 0 [ RESET TO 2 UNLESS RJ 7GH# ... STO 0 GEN5 [ NO. OF FIXED-POSITION PARAMS 7GHB ... SBX 7 0 [ -1 - LN/CN, 0 - OTHERS 7GHD ... JBS PWCX,2,CXTMOP 7GHG ... LDN 7 1 7GHJ ... JBS PWCX,2,CXTREADER 7GHL ... LDN 7 2 [ OPERATOR CONTEXT 7GHN ...PWCX ADN 7 1 [ 0 LN/CN, 1 MOP, 2 READER, 3 OPS 7GHQ ... JBC PWCT,2,CXTREMOTE 7GHS ... ADN 7 4 [ + 4 IF REMOTE 7GHW ...PWCT MHUNTW 3,FILE,ADICTENT 7GHY ... LDX 2 CINDIC(3) 7GJ2 ... ANDN 2 3 [ SECURITY - 0 NORMAL, 1 HIGH, 2 LOW 7GJ4 ... LDN 0 1 7GJ6 ... SLL 0 22(2) [ CHAR. 0 LOW, 1 NORMAL, 2 HIGH 7GJ8 ... ADX 1 7 [ TABLE WORD POINTER 7GJ= ... ORX 1 0 [ CORRECT CHARACTER POINTER 7GJ# ... LDCH 6 TCENTRAL(1) [ TABLE CHAR F,M,N,O,P,Q 7GJB ... LDX 1 FX1 7GJD ... NGNC 5 1 7GJG ... TXL 6 TLETQ(1) 7GJJ ... BCS NTBIG [ MUST BE <= 'Q' 7GJL ...TABWR GEOERR 1,PW-TABLE [ X6 = INVALID LETTER, X2 = SECURITY LEVEL 7GJN ...# X0 = CHAR ADDR, X7 = WORD ADDR IN TABLE 7GJQ ...NTBIG TXU 6 TLETF(1) 7GJS ... BCC XMESSH 7GJW ... TXU 6 TLETQ(1) [ 'Q' - NO CHECK FOR PARAM 7GJY ... BCC PWPROMPT 7GK2 ... NGNC 5 1 7GK4 ... TXL 6 TLETL(1) [ MUST NOT BE <= 'L' 7GK6 ... BCS TABWR 7GK8 ... LDX 2 FX2 7GK= ... SBX 6 TLETL(1) [ M N O P 7GK# ... DEX 6 AWORK4(2) [ -> 1 2 3 4 7GKB ...# NOW SEEK (AND CLEAR) PASSWORD PARAMETER 7GKD ... MHUNT 3,CLB 7GKG ... STO 3 AWORK1(2) 7GKJ ... LDX 7 ANUMCHA(3) 7GKL ... ADN 3 CLBFIR [ START OF COMMAND 7GKN ... STO 3 AWORK2(2) 7GKQ ... STOZ GEN6 [ NO. OF LAST PARAM SCANNED 7GKS ...PSKIP CALL 5 SKPAR [ IGNORE COMPULSORY INITIAL PARAMS 7GKW ... BZE 7 NPW 7GKY ... TXL 6 GEN5 7GL2 ... BCS PSKIP 7GL4 ...PWSCH CALL 5 SKPAR 7GL6 ... LDN 1 PWSTL(1) [ CHECK LONG KEY FIRST 7GL8 ... CALL 5 TPWS 7GL= ... LDN 1 PWSTS(1) 7GL# ... CALL 5 TPWS 7GLB ... BNZ 7 PWSCH 7GLD ...# NO PASSWORD PARAMETER 7GLG ...NPW MHUNTW 3,FILE,ADICTENT [ FOR FREECORE 7GLJ ... LDN 0 2 7GLL ... ANDX 0 AWORK4(2) 7GLN ... BNZ 0 PWOK [ WASN'T NEEDED 7GLQ ...PWPROMPT [ TRY AND GET FROM MOP IF POSS 7GLS ... JBC XMESSH,FX2,CXTMOP 7GLW ... ACROSS ADDJOB,3 [ NORMAL PW CHECK & EXIT 7GLY ...) 7GQ= [ 7H9W [ ERROR/BREAK-IN ROUTINES 7HPG [ 7J96 [ 7JNQ [ 7K8B [ ERROR MESSAGES AND TIDY UP ROUTINES.......... 7KN2 [ 7L7L [ 7LM= [ ADDITIONAL VALUES OF AWORK2 FOR ERRORS 7M6W [ -3 DC ENDING IN NO USER CONTEXT 7MLG [ -4 BREAKIN ON JB,RJ AT DEWELLMENT 7MW# [ -5 PERMANENT BACK WELL ABANDON 7N66 [ 7NKQ [ 7P5B [ 7PK2 TIDY3 7Q4L XBRK 7QJ= TIDY2 SETNCORE 3,3,FILE,ADICT 7R3W CALL 7 X4USER 7RHG LDX 0 4 7S36 LDN 1 A1(3) 7SGQ MOVE 0 3 [MOVE USERNAME FROM CPAT 7T2B DICTJOB 2 [DECREMENT USER'S JOBS COUNT 7TG2 TIDY1 7XM8 LDX 7 AWORK2(2) 7XTW ADN 7 3 7Y4J BZE 7 SDC [J IF SPECIAL DC 7Y?= SBN 7 2 7YFY BNZ 7 TNLN [J IF NOT LOGIN 7YNL SDC 7YXB SUBJOB 7YY# [ 7Y^= [ THE MACRO IPBINOPID TAKES CARE OF CASE WHEN 7^28 [ AUTO-ANSWER TERMINAL GOES INOPERABLE. 7^44 [ 7^#G [ 7^*D XIPBINOP 7^F8 IPBINOPID 7^G6 BRN TIDY0 7^JY [ 7^WL TNLN SUBJOBJ 82TW [ 83*G TIDY0 LDX 7 AWORK2(2) [ FOR DEWELL ERRORS 83T6 BZE 5 XBR1 [ J IF BREAKIN CASE 84#Q BPZ 5 TERR [ J IF ERROR MESSAGE 84SB LDXC 5 5 [ SEE IF ERROR MESS ALREADY DONE 85#2 BZE 5 XENDCOM 85RL ACROSS CONNECT,2 [ DC WITH EXISTING JOBNAME 86?= TERR 86QW ADN 7 4 [ ARE WE IN DC CASE 87=G BZE 7 XSU [ SUICIDE IF DEWELLMENT 87BC BXE 5 XONE(1),UP 87G# ERRORX 5,6 87Q6 UP 889Q XENDCOM 88PB ENDCOM 8992 XSU 89NL SUICIDE 8=8= XCOM 8=MW COMBRKIN 8?7G [ 8?M6 [ 8#6Q XBR1 ADN 7 4 8#LB BZE 7 XSU 8*62 BCT 7 XCOM 8*KL MONOUT EDCBRKIN [ DC TYPE BREAKIN 8B5= ABANDCOM [ ABANDONED 8BJW OBREAKIN 8C4G GEOERR 1,BREAKJOB [BREAK-IN FOUND ILLEGALLY 8CJ6 [ 8D3Q [ 8DHB MCUNI NGNC 4 1 [ 'EXITS' TO TIDY1 8F32 MCUNI1 ['EXITS' TO TIDY2 8FGL LDN 4 0 8FK9 ...#UNS G400 8FMS ...( 8FQC ... HUNTW 3,IUSER,G400USER 8FT2 ... BPZ 3 X8HOOK 8FXK ...) 8G2= LDX 0 CONTEXT(2) 8GFW ANDN 0 1 8G^G BNZ 0 MC1 [J IF USER CONTEXT 8H6N ...#UNS G400 8H?W ...X8HOOK 8HF6 CALL 7 XSPCOL 8HYQ BRN NMK 8JDB MC1 SETNCORE SIZEU,3,CPB,CUNI 8JY2 LDN 0 12 8KCL STO 0 ANUM(3) 8KX= STO 4 ACOMMUNE1(2) 8LBW CALL 7 X4USER 8LWG LDX 0 5 8MB6 LDN 5 APARA(3) 8MTQ MOVE 4 3 8N*B LDX 4 ACOMMUNE1(2) 8NT2 LDX 5 0 8P#L NMK BZE 4 TIDY2 8PS= BRN TIDY1 8Q?W XTA LDX 4 JPARNUM(3) 8QRG XTB SBX 7 FX1 8R?6 SPARANOX 4 [GET PARAMETER FOR ERRORX 8RQQ ADX 7 FX1 8S=B XTC LDN 4 TIDY0-TIDY3 8SQ2 XTC1 NGN 6 1 [INDICATES NO SUBSIDUARY MESSAGE 8T9L XTD SMO 7 8TP= LDX 5 0 [LOAD APPROPRIATE ERROR UNIVERSAL 8W8W SMO 4 8WNG BRN TIDY3 [J TO APPROPRIATE ENTRY IN TIDY... 8X86 [ [...ROUTINE. 8XMQ XTE LDN 4 TIDY2-TIDY3 8Y7B BRN XTC1 8YM2 XTF LDN 4 MCUNI-TIDY3 8^6L BRN XTC1 8^L= XTG LDN 4 MCUNI1-TIDY3 925W BRN XTC1 92KG XTH LDN 4 0 9356 BRN XTC1 93JQ NJOBN LDX 6 PJJOBNA(1) 944B BRN PMISS 94J2 PARILL 953L CALL 7 XTB 95H= +APFERR 962W XNOUGHT 96GG CALL 7 XTC 9726 +JXCONSOLE 97FQ MODILL 97^B CALL 7 XTB 98F2 +ADOCER 98YL NLFN CALL 7 XTC 99D= +JNLFNF 99XW SPACERR 9=CG CALL 7 XTA 9=X6 +JOBIN 9?BQ NUSEN LDX 6 PJUSNA(1) 9?WB PMISS LDN 4 TIDY0-TIDY3 9#B2 CALL 7 XTD 9#TL +JPARMIS 9**= XNOUSE 9*SW CALL 7 XTF 9B#G +ERNOUSER 9BS6 UNJOB CALL 7 XTF 9C?Q +ERUNJOB 9CRB XENUF CALL 7 XTF 9D?2 +ERNOTENUF 9DQL XERPRIV 9F== CALL 7 XTG 9FPW +ANOPRIV 9FTR ...[ SKIP NEXT BIT IF G3 UG SEC I/FACE IS ON 9F^N ...#SKI G3UGSI<1$1 9G5K ...( 9G9G MESSH CALL 7 XTG 9GP6 +HSECURE 9H8Q MESSI CALL 7 XTG 9HNB +IMPASSE 9HQK ...) 9HSS ...#SKI G3UGSI [USER GROUP SECURITY INTERFACE 9HX3 ...( 9H^= ...XENOR CALL 7 XTG 9J3F ... #40000000 9J5N ...) 9J82 XBROKIN 9JML LDN 5 0 9K7= BRN TIDY2 9KLW SPACERR2 9L6G CALL 7 XTC [ SPACES IN JDF NAME 9LL6 +JDFINVAL 9M5Q #END ^^^^ ...25374543000700000000