{{htmlmetatags>metatag-description:(ICL George 3 and George 4 source: SAVEJOB865)}}
====== SAVEJOB865 ======
(George Source)
**Macros used:** [[george:macro:ACROSS|ACROSS]], [[george:macro:BC|BC]], [[george:macro:CANTNOW|CANTNOW]], [[george:macro:CANTSAVE|CANTSAVE]], [[george:macro:CHAIN|CHAIN]], [[george:macro:CLOSE|CLOSE]], [[george:macro:COOR3|COOR3]], [[george:macro:CREATEB|CREATEB]], [[george:macro:DERINGD|DERINGD]], [[george:macro:DOWN|DOWN]], [[george:macro:ERASE|ERASE]], [[george:macro:FCAJO|FCAJO]], [[george:macro:FILENUMB|FILENUMB]], [[george:macro:FJOBLOCK|FJOBLOCK]], [[george:macro:FJOCA|FJOCA]], [[george:macro:FLONGWAIT|FLONGWAIT]], [[george:macro:FON|FON]], [[george:macro:FREECORE|FREECORE]], [[george:macro:FSHCODE|FSHCODE]], [[george:macro:FSHENTRY|FSHENTRY]], [[george:macro:FSHMOVE|FSHMOVE]], [[george:macro:FSHSKIP|FSHSKIP]], [[george:macro:GEOERR|GEOERR]], [[george:macro:HLSAV|HLSAV]], [[george:macro:HUNTW|HUNTW]], [[george:macro:JBC|JBC]], [[george:macro:JBS|JBS]], [[george:macro:JOBLOCK|JOBLOCK]], [[george:macro:LINK|LINK]], [[george:macro:LONGOFF|LONGOFF]], [[george:macro:MFREE|MFREE]], [[george:macro:MFREEW|MFREEW]], [[george:macro:MHUNTW|MHUNTW]], [[george:macro:MONOUT|MONOUT]], [[george:macro:NAME|NAME]], [[george:macro:NOTALIEN|NOTALIEN]], [[george:macro:OPEN|OPEN]], [[george:macro:OUTPAR|OUTPAR]], [[george:macro:READY|READY]], [[george:macro:SAVEACTF|SAVEACTF]], [[george:macro:SAVEBLOK|SAVEBLOK]], [[george:macro:SAVECHN|SAVECHN]], [[george:macro:SEGENTRY|SEGENTRY]], [[george:macro:SETNCORE|SETNCORE]], [[george:macro:SHLSQ|SHLSQ]], [[george:macro:SPRIVJUMP|SPRIVJUMP]], [[george:macro:SUICIDE|SUICIDE]], [[george:macro:TESTREP|TESTREP]], [[george:macro:TRACE|TRACE]], [[george:macro:TRANSBEG|TRANSBEG]], [[george:macro:TRANSFIN|TRANSFIN]], [[george:macro:UNQUEUE|UNQUEUE]], [[george:macro:UP|UP]], [[george:macro:WKSFILE|WKSFILE]], [[george:macro:WORKNUMB|WORKNUMB]]
22FL #LIS K0SAVEJOB>K0GREATGEO>K0ALLGEO
22^= #SEG SAVEJOB65 [RICHARD GRIMWADE
23DW 8HSAVEJOB
23YG SEGENTRY K1SAVEJOB,XK1
24D6 SEGENTRY K2SAVEJOB,XK2
24MY ... FSHENTRY K3SAVEJOB,,XK3,XK3
24RT ... FSHENTRY K4SAVEJOB,XBGONE,,XBGONE
24XQ SEGENTRY K100SAVEJOB
25CB #GAP 25
25X2 # THIS SEGMENT IMPLEMENTS THE SAVEJOB MACRO. FIRSTLY IT CHECKS THE
26BL # JOB CAN BE SAVED AND IF NOT,IT SETS AN APPROPRIATE REPLY AND GOES
26W= # UP.(IF IT HAS A CORE IMAGE IT GEOERRS INITIALLY). IT THEN SETS
27*W # UP A FILE TO CONTAIN THE SAVED RECORDS,AND APPENDS EACH
27TG # RELEVANT BLOCK.WHEN ALL SUCH BLOCKS HAVE BEEN SAVED,THE JOB BLOCK
28*6 # IS FREED AND A MARKER SET IN THE HLS QUEUE BLOCK TO SHOW THE JOB
28SQ # HAS BEEN SAVED
29#B REEL +0 [REEL NO
29S2 +1 [GEN NO
2=?L 4H####
2=R= TBSTBBQBLK
2?=W #HAL BSTB+BQBLK,0
2?QG # THIS S/R FINDS THE HLSQ BLOCK WHOSE JOB NO IS IN X7. PTR IN X3
2#=6 SEARCH
2#PQ SHLSQ 7,3,NOBL
2*9B EXIT 6 0
2*P2 SJOBQ
2B8L JOBLOCK 7,1
2BN= EXIT 6 0
2C7W XK1
2CMG #SKI K6SAVEJOB>99-99
2D76 TRACE ACOMMUNE4(2),SAVEJNUM
2DLQ LDX 7 ACOMMUNE4(2) [JOB NUMBER
2F6B CALL 6 SEARCH
2FL2 HLSAV 3,SET,SAVED,HLSQ,UP
2G5L CALL 6 SJOBQ
2GK= JBC XCANT,1,JBOFFL [J IF MOP
2HJG SPRIVJUMP JSISSUE,1,XCANT [J IF SYSTEM
2J46 SPRIVJUMP JSSTART,1,XCANT [ISSUED OR STARTED
2JHQ ANDN 6 #777
2K3B BZE 6 RETRY [J IF NO CORE IMAGE
2KH2 GEOERR 1,COREIMAG
2L2L XK2 [EXTRACODE ENTRY
2LG= LDX 7 ACOMMUNE4(2)
2L^W #SKI K6SAVEJOB>99-99
2MFG TRACE 7,SAVEJNUM
2M^6 RETRY
2NDQ CALL 6 SJOBQ
2NNJ ... JBS WKSF,1,JBTEMP [J IF TEMP. DIR. EXISTS
2NYB FCAJO 3,1
2PD2 STO 1 5
2PXL WKSFILE 3,WKSF [J IF WELL KNOWN SYS FILES OPEN
2QC= WORKNUMB 0,3,3
2QWW BNZ 0 WKSF [J IF WORKFILES OPNE
2R2R ... SMO 5 [J TO WAIT IF MESSAGES STILL BEING
2R6N ... LDX 6 JMESS [OUTPUT
2R=K ... BNZ 6 WKSF
2RBG TOUR LDX 3 FPTR(3)
2RW6 LDX 0 ATYPE(3)
2S*Q TXL 0 CACT
2STB BCC PHIN
2T*2 SBX 0 TBSTBBQBLK(1)
2TSL BNZ 0 TOUR
2W#= ... COOR3 #41
2WRW ... BRN RETRY
2X?G PHIN
2XR6 CALL 6 SEARCH
2Y=Q NAME 3,ADATA,JSWAP
2YQB SETNCORE 10,3,FILE,FABSNB
2^=2 CALL 6 SJOBQ
2^PL LDN 0 10
329= STO 0 A1(3)
32NW LDN 5 JUSER(1)
338G LDN 6 A1+1(3)
33N6 MOVE 5 3
347Q LDN 5 JNAME(1)
34MB ADN 6 3
3572 MOVE 5 3
35LL SMO FX1
366= LDN 5 REEL
36KW ADN 6 3 [REEL NO,FGN &
375G MOVE 5 3 [LANGUAGE
37K6 CREATEB
384Q HUNTW 2,FILE,CREATE
38JB LDCT 0 #200
3942 STO 0 CEINF2(2) [SET TEMP FILE BIT
39HL OPEN XBRK,APPEND,CREATE,QUERY
3=3= TESTREP ALREADY,READY [J IF ALREADY SUCH A FILE
3=GW #SKI K6SAVEJOB>99-99
3?2G TRACE 2,OPENSFIL
3?2M ... FSHCODE AORB
3?2S ...(
3?2^ ...# SHARED FILESTORE: THIS CODE IS ONLY OBEYED ON 'A' AND IT IS
3?36 ...# USED TO 'FETCH' A 'B' MACHINE JOB INTO 'A' SO THAT THE SAVING
3?3? ...# PROCESS CAN BE CARRIED OUT
3?3D ...#
3?3K ... CALL 5 UNQUEUE [REMOVE THE TARGET CPAT FROM FLOWQ
3?3Q ...#
3?3X ... LDCT 0 #100 [CHECK IF BREAKIN IS REGISTERED
3?44 ... ANDX 0 JOBEVENTS(3) [IN THE TARGET ACTIVITY
3?49 ... BNZ 0 REV [REVERSE THE SAVING ACTION IF BREAKIN
3?4B ...#
3?4H ... NOTALIEN XHOME,3 [JIF TARGET IS RUNNING IN 'A' M/C
3?4N ...#
3?4T ... LDCT 0 #40 [STOP BREAKIN WHILE WE FIDDLE ABOUT!!
3?52 ... ORS 0 JOBEVENTS(3)
3?57 ...#
3?5# ...# WE ARE NOW GOING TO CHANGE TO THE TARGET ACTIVITY, BUT BEFORE WE
3?5F ...# DO, WE PROTECT CERTAIN WORDS IN THE ACTIVITY BLOCK (NOTABLY:
3?5L ...# THE 'ACC', 'AWORK','ALINK' AND 'ACOMMUNE' WORDS)
3?5R ...#
3?5Y ...# GET A BLOCK TO STORE THE DATA
3?65 ...#
3?6= ... SETNCORE ACOMMUNE9-ACC3+1,3,ADATA,CSTORE
3?6C ...#
3?6J ... CALL 6 SJOBQ [RELOCATE THE JOB BLOCK AND FROM IT
3?6P ... FCAJO 1,,N [FIND THE TARGET ACTIITY
3?6W ...#
3?73 ... LDN 4 ACC3(1) [ADDRESS OF DATA TO BE STORED
3?78 ... LDN 5 A1(3) [ADDRESS OF BLOCK TO STORE DATA
3?7* ... MOVE 4 ACOMMUNE9-ACC3+1 [MOVE DATA INTO BLOCK
3?7G ...#
3?7M ... LDX 6 ACTNUM(2) [REMEMBER 'SAVING' ACTIVITY'S NUMBER
3?7S ... CHANGEAC 1 [AND TRANSFER TO THE TARGET ACTIVITY
3?7^ ...#
3?86 ...# ==============================================================
3?8? ...# WE ARE NOW RUNNING IN THE ACTIVITY THAT WILL BE SAVED (TARGET)
3?8D ...# ==============================================================
3?8K ...#
3?8Q ...#
3?8X ... TRANSFREE [REMOVE ANY TRANSFER SYSTEM BLOCKS
3?94 ...#
3?99 ...# NOW WE CAN GO TO 'B' AND FETCH THE REST OF THE DATA BLOCKS FOR
3?9B ...# OUR JOB
3?9H ...#
3?9J ...# WE WILL FIRST CREATE AN ERROR RECOVERY BLOCK
3?9K ...#
3?9L ... SETNCORE 1,3,FSH,FSHAMBLES [SET UP ERROR RECOVERY BLOCK AND
3?9M ... LDX 0 X4SAVEJOB(1) [LINK IT TO THE ERROR ROUTINE
3?9N ... STO 0 FSHCDLINK(3)
3?9P ...#
3?9Q ... TRANSBEG FSHNOID,SAVEJOB,3,,,ACOMMUNE8,XBGONE
3?9R ...#
3?9S ... MFREEW FSH,FSHAMBLES [GET RID OF ERROR RECOVERY BLOCK
3?9T ...#
3?=2 ...# ON RETURN FROM 'B', OUR 'PAIR' WILL HAVE GONE AND WE MUST
3?=7 ...# REMOVE OUR TABLE ENTRY IN THE /FSHMARKER BLOCK
3?=# ...#
3?=F ... DOWN FSHTRANC,4 [USE STANDARD CODE TO REMOVE ENTRY
3?=L ...#
3?=R ... FSHMOVE END [DEAL WITH FILES THAT HAVE COME BACK
3?=Y ...#
3??5 ...# THE COPY JOB BLOCK FROM 'B' IS ALSO RETURNED AND WE MERELY EXTRACT
3??= ...# THE JOB TIME USED SO FAR
3??C ...#
3??J ... FJOCA 2,,N [FIND OUR 'A' M/C JOB BLOCK
3??P ... MHUNTW 1,JOBQE [AND THE JOB BLOCK FROM 'B'
3??W ... LDX 4 HTIMEJ(1) [PICK UP THE 'JOBTIME USED' FIELD
3?#3 ... LDX 5 HTIMEJ+1(1)
3?#8 ... STO 4 HTIMEJ(2) [AND STORE IT INTO THE 'A' JOB BLOCK
3?#* ... STO 5 HTIMEJ+1(2)
3?#G ... BC 2,JBFSHALIEN [CLEAR ALIEN MARKER IN JOB BLOCK
3?#M ... FREECORE 1 [RELEASE COPY JOB BLOCK FROM 'B'
3?#S ... BC 2,FSHALIEN [CLEAR ALIEN MARKER IN ACTIVITY
3?#^ ...#
3?*6 ...XCHANGEACT
3?*? ... FINDACTN 2,6 [FIND THE 'SAVING' ACTIVITY AGAIN
3?*D ... LDX 3 FX2 [REMEMBER THE ADDRESS OF TARGET CPAT
3?*K ... CHANGEAC 2 [GO BACK TO THE SAVING ACTIVITY
3?*Q ...#
3?*X ...# ======================================
3?B4 ...# WE ARE NOW BACK IN THE SAVING ACTIVITY
3?B9 ...# ======================================
3?BB ...#
3?BH ... MHUNTW 1,ADATA,CSTORE [NOW WE CAN RESTORE THE DATA IN THE
3?BN ... LDN 4 A1(1) [TARGET ACTIVITY
3?BT ... LDN 5 ACC3(3)
3?C2 ... MOVE 4 ACOMMUNE9-ACC3+1 [RESTORE DATA TO ACC,AWORK,ACOM ETC
3?C7 ... FREECORE 1 [RELEASE STORE BLOCK
3?C# ...#
3?CF ... LDCT 0 #40 [FINALLY WE CLEAR 'INHIBIT BREAK-IN'
3?CL ... ORS 0 JOBEVENTS(3) [IN THE TARGET CPAT
3?CR ... ERS 0 JOBEVENTS(3)
3?CY ...#
3?D5 ... LDXC 7 7 [CHECK IF REVERSE SAVE REQUIRED
3?D= ... BCS REV [JIF REVERSE SAVE IS REQUESTED
3?DC ...#
3?DJ ...XHOME
3?DP ... SAVEBLOK 0,1,7 [SAVE THE JOB BLOCK
3?DW ... CALL 6 SJOBQ [AND THEN RELOCATE THE TARGET CPAT
3?F3 ... FCAJO 3,1,N [FROM ITS JOB BLOCK
3?F8 ...)
3?F* ... FSHSKIP
3?FG ...(
3?G6 SAVEBLOK 0,1,7
3?J* ...#SKI JWPHASE4
3?LJ ...(
3?NR ... BRN XJOBQ
3?R2 ...WAIT COOR3 #41
3?T9 ...XJOBQ
3?XD ...)
3?^Q CALL 6 SJOBQ
3#FB FCAJO 3,1
3#^2 #SKI K6SAVEJOB>99-99
3*DL TRACE 3,SAVECPAT
3*Y= LDEX 0 ATYPE(3)
3*^^ ...#SKI JWPHASE4
3B3N ...(
3B5C ... SBN 0 #31
3B76 ... BZE 0 UNQ
3B8T ... BCT 0 WAIT
3B=J ...UNQ
3B#? ...)
3BB2 ...#SKI JWPHASE4<1$1
3BCW BZE 0 OFFQ [J IF NO WAITING STYLE
3BXG LDX 2 3
3CC6 UNQUEUE [REMOVE ACT FROM QUEUE
3CWQ OFFQ
3D3Y ...#SKI JWPHASE4
3D96 ... LONGOFF 3 [CLEAR LONG EVENT FIELD
3D?Q ...)
3DBB LDX 4 CONTEXT(3)
3DW2 ANDN 4 #4000 [ISOLATE F.ST. BIT
3F*L SAVEBLOK 0,2,7
3FGS ... FSHSKIP
3FN2 ...(
3FT= CALL 6 SEARCH
3G#W LDCT 5 #20
3GSG ANDX 5 HLSYONQ(3)
3H#6 CALL 6 SJOBQ
3HRQ FCAJO 3,1
3J?B BNZ 5 REV
3JR2 LDCT 0 #100
3K=L ANDX 0 JOBEVENTS(3)
3KQ= BNZ 0 REV [J IF BREAK IN (I.E JOB TO BE STOPPED
3L24 ...)
3L9W #
3LPG # FOR NOW STORE THE JOB NUMBER IN ACOMMUNE4 FOR SAVEACTF-IT WILL
3M96 # IGNORE THE PARAMETER-LATER THE MACRO SHOULD BE ALTERED
3MNQ SMO FX2
3N8B STO 7 ACOM4
3NN2 SAVEACTF 7
3P7L SAVECHN 7
3PM= LDX 0 EXEC3(2) [TEST REPLY
3Q6W BZE 0 POK1
3QLG GEOERR 1,AOLPTSAV
3R66 POK1
3RKQ ... FREEZESA [CLOSE AND FREEZE FILE
3S5B #SKI JNLSTART
3SK2 (
3T4L OUTPAR TIMENOW
3TJ= MONOUT ASAVE,7,NONAUT [OUTPUT JOB SAVED TO SJ
3W3W )
3WHG CALL 6 SJOBQ
3X36 LDX 2 1
3XGQ CALL 6 SEARCH
3Y2B LDX 0 JMISC(2)
3YG2 STO 0 HLSSTAT(3) [SAVE COPY OF JMISC
3Y^L BZE 4 TENT [J IF T.ST. JOB
3^F= LDCT 4 1
3^YW ORS 4 HLSSTAT(3) [SET F.ST. BIT
42DG TENT
42Y6 FJOBLOCK 2 [FREE JOB BLOCK
43CQ #
43XB # FREEING THE JOB BLOCK AND SETTING AND CLEARING ALL THE BITS IN
44C2 # THE HLSQ BLOCK SHOULD ALL OCCUR WITHIN ONE COORDINATION
44WL #
45B= HLSAV 3,CLEAR,SAVING,HLSQ
45TW HLSAV 3,SET,SAVED,HLSQ
46*G UP1 MFREE FILE,FABSNB
46T6 UP
47#Q #SKI K6SAVEJOB>199-199
47SB TRACE 7,SAVEDONE
48#2 WAKE LDCT 0 #20
48RL ANDX 0 HLSYONQ(3)
49?= BZE 0 UP2 [J IF REV SAVE BIT NOT SET
49QW ERS 0 HLSYONQ(3) [CLEAR BIT
4==G FON #34 [WAKE UP ACT WAITING TO UNSAVE
4=Q6 UP2
4?9Q ACROSS SUICIDE,1 [COMMIT SUICIDE
4?PB # THIS SECTION REVERESE THE PROCESS IF AN UNSAVE IS REQUESTED
4#92 # BEFORE THE MAIN LOOP IS ENTERED
4#NL XCANT CANTSAVE 3 [SET CANT BE SAVED BIT
4*8= BRN UNS1
4*MW REV
4B7G ERASE
4BM6 CLOSE [ERASE FILE
4C6Q CALL 6 SJOBQ
4CLB HLSAV 1,CLEAR,SAVING,JOBQ
4D62 #
4DKL # FRIG TO PUT THE CPA BACK ON THE QUEUE SO IT WILL GET WOKEN UP BY
4F5= # PROCONTX AND FPUT IN THE BREAKIN CASE - THIS MEANS THAT SAVING
4FJW # JOBS CAN ONLY OCCUR WHEN WAITING TO BE FULLY STARTED AT LEAST
4G4G # UNTIL FLONGWAITX
4GJ6 FCAJO 2,1
4GP# ... LDN 0 #32
4GWG ... DEX 0 CLONG1(2)
4H3N ... LDX 0 JOBNO(2)
4H8W ... STO 0 CLONG2(2)
4HB4 ... FLONGWAIT #32
4HHB CALL 6 SEARCH
4J32 NAME 3,ADATA,JUNSWAP [RENAME BLOCK
4JGL HLSAV 3,CLEAR,SAVING,HLSQ
4K2= BRN WAKE [J TO WAKE UP ACT.
4KFW WKSF CALL 6 SEARCH
4K^G BRN UNS
4LF6 READY CALL 6 SEARCH
4LYQ HLSAV 3,SET,SAFE,HLSQ,UP1 [-> UP1 IF ALREADY SAVED OR BEING SAV
4MDB NAME 3,ADATA,JUNSWAP [RENAME BLOCK
4MY2 UNS
4NCL CANTNOW 3 [IF NOT,CANT BE SAVED NOW
4NX= UNS1 CALL 6 SJOBQ [X1 -> JOBQ
4PBW HLSAV 1,CLEAR,SAVING,JOBQ [CLEAR MARKER SET BY SCHEDJOB
4PWG CALL 6 SEARCH
4QB6 HLSAV 3,CLEAR,SAVING,HLSQ
4QTQ BRN UP
4QW3 ... FSHCODE AORB
4QW# ...(
4QWK ...# SHARED FILESTORE: SOME ROUTINES THAT ARE CALLED FROM OTHER CODE
4QWW ...# ABOVE!!
4QX7 ...#
4QXD ...XBGONE ['B' MACHINE HAS FAILED
4QXH ...#
4QXL ...# TEMPORARY SOLUTION TO THE PROBLEM OF 'B' MACHINE FAILURE!!!
4QXP ...#
4QXS ... GEOERR 1,SAVEINB!
4QXX ...#
4QY2 ...X4SAVEJOB
4QY5 ... LINK SAVEJOB,4
4QY? ...#
4QYJ ...#
4QYT ...# THE FOLLOWING ROUTINE WILL 'UNQUEUE' THE TARGET CPAT FROM FLOWQ
4Q^6 ...#
4Q^C ...# IT IS NORMALLY ENTERED AT 'UNQUEUE'
4Q^N ...#
4Q^^ ...WAIT SBX 5 FX1 [PROCESS THE LINK WHILE WE WAIT
4R2= ... COOR3 #41 [LET OTHERS RUN!!
4R2H ... ADX 5 FX1
4R2S ...#
4R35 ...UNQUEUE
4R3B ... CALL 6 SJOBQ [FIND THE JOB BLOCK FOR TARGET JOB
4R3M ... FCAJO 3,1 [AND FROM THE JOB BLOCK FIND THE CPAT
4R3Y ... LDEX 0 ATYPE(3) [PICK UP THE WAITING STYLE OF THE
4R49 ... SBN 0 #31 [ACTIVITY & JIF WAITING IN OUR STYLE
4R4G ... BZE 0 UNQU
4R4R ... BCT 0 WAIT [JIF NOT WAITING IN STYLE #32 EITHER
4R54 ...#
4R5* ...UNQU LDX 2 3
4R5L ... UNQUEUE [REMOVE THE ACTIVITY FROM THE QUEUE
4R5X ... LONGOFF 3 [AND CLEAR ANY LONGWAIT INFORMATION
4R68 ... EXIT 5 0 [MISSION ACCOMPLISHED
4R6F ...#
4R6Q ...#
4R73 ...XK3
4R7# ...#
4R7K ...# THIS ENTRY POINT IS USED ON 'B' TO COLLECT ALL THE JOB'S DATA
4R7W ...# BLOCKS AND FILES SO THAT THEY CAN BE SAVED ON 'A'
4R87 ...#
4R8D ... MFREE FSH,FSHTERM [FREE /FSHTERM BLOCK TO ENSURE ALL
4R8P ...# [DATA IS RETURNED
4R92 ...#
4R9? ... FJOCA 3,2,N [GET THE JOB BLOCK ADDRESS
4R9J ... DERINGD AJBRING(3) [DERING THE JOB BLOCK AND RECHAIN
4R9T ... CHAIN 3,2 [IT IN THE ACTIVITY CHAIN
4R=6 ...#
4R=C ... FILENUMB 4 [COUNT ALL THE OPEN FILES AND PREPARE
4R=N ... FSHMOVE START,4 [THEM FOR RETURN TO 'A'
4R=^ ...#
4R?= ... STOZ JOBNO(2) [ACTIVITY DOESN'T OWN A JOB BLOCK NOW
4R?H ... TRANSFIN ,AUT [AUTONOMOUS TRANSFIN TO RETURN DATA
4R?S ...# [AND FILES TO 'A'
4R#5 ...#
4R#B ... SUICIDE [NOTHING ELSE LEFT TO DO NOW!!!
4R#M ...)
4R*B NOBL GEOERR 1,NO HLSQ
4RT2 XBRK GEOERR 1,SAVEBKIN
4S#L NOCPAT
4SS= GEOERR 1,NOACTBLK
4T?W #END
^^^^ ...26760176000100000000