{{htmlmetatags>metatag-description:(ICL George 3 and George 4 source: TRAPCHEC867)}}
====== TRAPCHEC867 ======
(George Source)
**Macros used:** [[george:macro:BRUSEN|BRUSEN]], [[george:macro:BXU|BXU]], [[george:macro:CHAIN|CHAIN]], [[george:macro:CJOBLOCK|CJOBLOCK]], [[george:macro:CLOSE|CLOSE]], [[george:macro:COMBRKIN|COMBRKIN]], [[george:macro:COMERR|COMERR]], [[george:macro:ENDCOM|ENDCOM]], [[george:macro:FINDFEXTRA|FINDFEXTRA]], [[george:macro:FINDNAME|FINDNAME]], [[george:macro:FINDWFL|FINDWFL]], [[george:macro:FINDWFN|FINDWFN]], [[george:macro:FREECORE|FREECORE]], [[george:macro:FSHCODE|FSHCODE]], [[george:macro:FSHENTRY|FSHENTRY]], [[george:macro:FSHSKIP|FSHSKIP]], [[george:macro:GEOERR|GEOERR]], [[george:macro:HUNT|HUNT]], [[george:macro:JBS|JBS]], [[george:macro:LOGACCESS|LOGACCESS]], [[george:macro:MENDAREA|MENDAREA]], [[george:macro:MFREE|MFREE]], [[george:macro:MHUNT|MHUNT]], [[george:macro:MHUNTW|MHUNTW]], [[george:macro:MONOUT|MONOUT]], [[george:macro:NAME|NAME]], [[george:macro:NAMETOP|NAMETOP]], [[george:macro:OPENDIR|OPENDIR]], [[george:macro:OUTBLOCK|OUTBLOCK]], [[george:macro:OUTPARAM|OUTPARAM]], [[george:macro:PROPUSER|PROPUSER]], [[george:macro:READAGAIN|READAGAIN]], [[george:macro:REPALLER|REPALLER]], [[george:macro:SEG|SEG]], [[george:macro:SEGENTRY|SEGENTRY]], [[george:macro:SETNCORE|SETNCORE]], [[george:macro:SIX|SIX]], [[george:macro:SPRIVTEST|SPRIVTEST]], [[george:macro:STEP|STEP]], [[george:macro:TESTHOOK|TESTHOOK]], [[george:macro:TESTNAMX|TESTNAMX]], [[george:macro:TESTREP2|TESTREP2]], [[george:macro:TESTREPNOT|TESTREPNOT]], [[george:macro:TESTUSER|TESTUSER]], [[george:macro:TRACE|TRACE]], [[george:macro:TRANSFIN|TRANSFIN]], [[george:macro:UNNORM|UNNORM]], [[george:macro:UP|UP]]
228= ... SEG TRAPCHEC,3,FILE,USERCOMS,G400
22BG ...[
22JQ ...[ (C) COPYRIGHT INTERNATIONAL COMPUTERS LTD 1982
22R2 ...[
22^= ...#
23DW ...#UNS G400
23YG ...# THIS CHAPTER IS FOR G3PLUS-IH MK2
25CB # THIS SEGMENT IS USED BY THE TRAPCHECK COMMAND AND THE CHECKTRAP
25X2 # A SEARCH IS MADE FOR THE TRAP FOR THE GIVEN USER (OR HIS GROUP) OR
26BL # GROUP TRAP OF A SUPEROOR USER. AN APPROPRIATE REPLY IS GIVEN. ERRO
26W= # ARE REPORTED WHERE A USER ATTEMPTS TO ASCERTAIN THE ACCESS OF ANOT
27*W # IN ANOTHER USER'S FILE OR WHERE HE IS NOT ALLOWED ACCESS IN ANOTHE
27TG # USER'S FILE IE THE RESULT OF THE SEARCH IS NEGATIVE.
28*6 [
28SQ SEGENTRY K3TRAPCHEC,PARAMSDONE
29#B SEGENTRY K5TRAPCHEC,ZCHECKTRA
29LR ... SEGENTRY K7TRAPCHEC,(GEOERR)[OLD AND REDUNDANT ENTRYPOINT
29^8 ...
2=6C ... FSHENTRY K8TRAPCHEC,,RETFROMA,RETFROMA
2=?L [
2J46 ONE +1
2JHQ PARA1
2K3B +5
2KH2 8HGROUP
2L2L PARA2
2LG= +3
2L^W 8HALL
2MFG PARA3
2M^6 +5
2NDQ 8HERASE
2NYB +5
2PD2 8HWRITE
2PXL +6
2QC= 8HAPPEND
2QWW +4
2RBG 8HREAD
2RW6 +7
2S*Q 8HEXECUTE
2STB PARA4
2T*2 PM6 4H:
2TSL MASTER 12HMASTER
2W#= MANAG 12HMANAGER
2WRW ZGEOER1
2X?G GEOERR 1,JBBLOCK?
2XR6 RCHEQNAME
2Y=Q # ROUTINE CHECKS IF THE NAME IN THE "TRAP-TYPE" BLOCK AT X1 IS
2YQB # EQUAL TO ANY OF THE NAMES IN THE FULLY EXPANDED ABS.NAME BLOCK
2^=2 # AT X2.CALLED BY X7,USES X2,X3,X4,X0.
2^PL LDX 4 A1(2) [
329= SBN 4 4 [
32NW STOZ 3 [X4= COUNT OF NAMES IN FABSNB LESS 1
338G SMO FX1 [MUST BE 1 OR MORE
33N6 DVD 3 SIX [
347Q ADX 2 A1(2) [A1(2) NOW
34MB TESTA [POINTS TO
3572 SBN 2 6 [NEXT NAME UP
35LL TESTNAMX 3,A1+1(2),ETRUSER1(1),TBCT,3 [J IF NAMES ONEQUAL
366= EXIT 7 1 [EXIT +1 IF OK
36KW TBCT
375G BCT 4 TESTA [J FOR NEXT NAME
37K6 EXIT 7 0 [TOP NAME IS :MASTER,SO DON'T NEED
384Q [TO CHECK IT.
38JB SIX +6
3942 # X7 IS USED TO INDICATE WHETHER TRAPCHECK COMMAND OR MACRO
39HL # B1=1,B2=0 INDICATES COMMAND
3=3= # B1=1,B2=1 INDICATES MACRO
3=GW [
3*Y= ZCHECKTRA
3DBB # THIS SECTION INITIALISES ACCUMULATORS
3DW2 LDCT 7 #300 [MACRO MARKER
3F*L LDCT 4 #400 [TO SET B0 OF X4 =1 AS A MARKER
3FT= LDN 6 0 [INITIALISE X6
3G#W LDN 5 0
3GBK ...#UNS G400
3GC2 ...(
3GCC ... SEGENTRY K20TRAPCHEC
3GCS ... NULL
3GD# ... TESTHOOK XCHWF [ IGNORE ALL TRAPS IF IN A HOOK
3GDW ... SEGENTRY K21TRAPCHEC
3GFD ...)
3GG4 ... SEGENTRY K90TRAPCHEC
3GM= ... NULL
3GSG ... JBS XCHWF,2,CXTSYSIS [J IF SYSISSUED ACT
3H4# ... SEGENTRY K91TRAPCHEC
3H#6 BRUSEN T30Q [J IF NO JOBBLOCK
3HRQ CJOBLOCK 3 [FIND CURRENT JOBLOCK
3M96 SPRIVTEST JSSTART,3,T30Q [TEST IF PRIV,J TO T30Q IF NOT HELD
3MNQ XCHWF
3N8B HUNT 1,FILE,FABSNB [J ROUND WINDING THRU'ENTRY
3NN2 LDN 0 #200 [FOR W/F'S
3P7L ANDX 0 ATYPE(1)
3PM= BNZ 0 QEOF
3Q6W RSTEP STEP [THIS SECTION SETS POINTER TO END OF
3QLG BZE 3 QEOF
3R66 LDX 5 ERES-A1(3)
3RKQ BNZ 5 RSTEP [ZERO IF NEXT ENTRY
3S5B QEOF
3SK2 LDN 5 CALL
3T4L #SKI K6TRAPCHEC>99-99
3TJ= TRACE 3,PRIVHELD
3W3W BRN PRIV2
3W?N ... SEGENTRY K92TRAPCHEC
3WHG T30Q
3X36 MHUNT 1,FILE,FABSNB
3XGQ LDN 0 #200
3Y2B ANDX 0 ATYPE(1)
3YG2 BZE 0 NOWF1
3Y^L LDN 0 1 [IN CASE OF NON-FILESTORE ENTRANT WHI
3^F= ANDX 0 ATYPE(1) [IS WORKFILE, TREAT AS ORDINARY FILE
3^YW BNZ 0 NOWF1 [IT WILL BE A WORKTAPE
42DG FINDWFN ,3 [X3->FCB
42Y6 FINDFEXTRA 3,3 [X3 -> FEXTRA
43CQ LDX 5 FWORKTRAP(3) [TRAPS.
43XB BRN PRIV4
44C2 NOWF1
44WL SETNCORE 4,3,FILE,FAPB, [SET UP FAPB FOR COMPARISON
45B= LDN 0 4
45TW STO 0 A1(3) [R.H.
46*G #SKI ANOUSER
46T6 BRUSEN NOJOBLOCK [J IF NO JOBLOCK
47#Q CJOBLOCK 2 [JOBLOCK
47SB LDX 0 ALOGLEN(2) [FOR A CHECKTRAPS IN NO USER
48#2 SBN 0 ASTJOB [CONTEXT,WE NEED THE USER-NAME
48RL BNZ 0 YJOBLK [J IF EXISTS JOBBLK
49?= PROPUSER [GET PROPER USER
49QW MHUNTW 3,FILE,FAPB
4==G TESTREP2 OK,NOJOBLO [J IF ALREADY PROPER
4=Q6 ADN 2 ACOMMUNE1
4?9Q BRN MOIT
4?PB YJOBLK
4#92 ADN 2 JUSER [ORIGIN
4#NL MOIT
4*8= ADN 3 A1+1 [DESTINATION
4*MW MOVE 2 3 [NAME GOES ACROSS
4B7G BRN T30 [J. TO SET UP FABSNB
4BM6 NOJOBLOCK
4C6Q NOJOBLOK
4CLB LDX 2 FX2 [PTR TO CPREFIX IN CURRENT
4D62 NOJOBLO
4DKL ADN 2 CPREFIX [ACTIVITY
4F5= BRN MOIT
4FJW #
4G4G # THIS ROUTINE CHECKS THAT,IF A USER PARAM IS GIVEN
4GJ6 # AND THE CURRENT USER DOES NOT OWN THE FILE-NAME GIVEN,
4H3Q # THE USERNAME PARAMETER IS EQUAL TO THE CURRENT USER.
4HHB # IF NOT,AN ERROR IS REPORTED
4J32 TSEST
4JGL BNG 4 T43A [MARKER SET BY TRAPPARA,NO USER PARAM
4K2= #SKI ANOUSER
4KFW (
4K^G #SKI K6TRAPCHEC
4LF6 BRUSEN ZGEOER1 [ERROR IF NO JOBLOCK
4LYQ )
4MDB CJOBLOCK 3
4MY2 MHUNTW 1,FILE,FAPB [COMPARE
4NCL LDN 2 3 [3.WORDS
4NX= QLP
4PBW SMO 2 [IN FAPB
4PWG LDX 0 A1(1) [WITH JOB'S PROPER
4QB6 SMO 2 [USER-NAME
4QTQ BXU 0 JUSER-1(3),QUEER
4R*B BCT 2 QLP
4RT2 BRN T43A
4S#L QUEER
4SS= CLOSE
4T?W ... COMERR ERNOAUTH
4TRG ...#
4WQQ # ENTRY FROM TRAPPARA. THE FAPB HAS BEEN SET UP AND B0 OF X6 SET IF
4X=B # A'GROUP'PARAMETER GINEN.
4XQ2 # THE DIRECTORY IS OPENED AND OWNERSHIP OF THE FILE CHECKED
4Y9L [
4YP= PARAMSDONE
4^8W [
4^NG LDN 5 0
5286 MHUNTW 3,FILE,FTRAP [RENAME FTRAP BLOCK
52MQ NAMETOP 3,FILE,FAPB
537B MHUNT 2,FILE,FABSNB
53M2 LDN 0 2
546L ORS 0 ATYPE(2)
54L= LDN 0 #200
555W ANDX 0 ATYPE(2)
55KG BZE 0 NOTWF5
5656 LDN 0 1
56JQ ANDX 0 ATYPE(2) [IF NON-FILESTORE I.E. WORKTAPE, TREA
574B BNZ 0 NOTWF5 [AS NON-WORKFILE
57J2 FINDWFL 3 [-> FCB
583L FINDFEXTRA 3 [-> FEXTRA
58H= LDX 5 FWORKTRAP(3)
592W MHUNT 1,FILE,FNAME
59GG NAMETOP 1,CPB,CUNI
59Q# ... FSHSKIP
5=26 BRN YZYZ
5=7# ... FSHCODE AORB
5=#G ... BRN YYYZ
5=FQ NOTWF5
5=^B OPENDIR ZBRAK,READ,QUERY
5?F2 MHUNT 3,FILE,FNAME
5?YL CHAIN 3,FX2
5#D= NAMETOP 3,CPB,CUNI [RENAME FNAME BLOCK
5#XW TESTREP2 OK,OKDIROP [JIF OK
5*CG ... REPALLER [REPORT ERRORS
5*G5 ... FSHCODE A,SKIPINB2
5*JN ...(
5*M? ... TRANSFIN ,,ALIEN
5*PW ...SKIPINB2
5*SF ...)
5*X6 ... ENDCOM
5G?Q OKDIROP
5GRB OWNERCHECK
5H?2 TESTREPNOT OK,TSEST [J IF NOT OWNER
5HQL LDCT 5 #400 [MARKER
5J== T43A
5JPW T30 [ENTRY FOR CHECKTRAPS MACRO
5K9G SETNCORE 4,3,FILE,FABSNB [SET UP FABSNB
5KP6 MHUNTW 2,FILE,FAPB
5L8Q ADN 2 ETRUSER1 [MOVE PTRS
5LNB ADN 3 A1+1 [
5M82 MOVE 2 3 [MOVE IN USER-NAME
5MML SBN 3 A1+1
5N7= LDN 0 4
5NLW STO 0 A1(3) [R.H.
5P6G SEARCH
5PL6 STEP [STEP ONTO 1ST TRAPS RECORD
5Q5Q BZE 3 NDENT [JIF END-OF-FILE
5QKB LDX 0 ERES-A1(3) [X0=2ND WORD OF RECORD
5R52 BZE 0 NDENT [JIF NEXT NAME REC
5RJL BPZ 0 SEARCH [JIF NOT TRAP REC
5RLT ... LDEX 0 ETRAPMODES-A1(3) [TRAPS IN RECORD
5RP4 ... LDEX 4 5 [TRAPS FOUND SO FAR
5RR? ... ANDX 4 0 [TRAPS IN RECORD WE HAVE ALREADY
5RTG ... [FOUND USER TO POSSESS
5RXP ... ERX 4 0 [ARE THERE ANY OTHER TRAPS IN REC
5R^Y ... BZE 4 SEARCH [IF NOT, IGNORE RECORD
5S4= LDX 0 ETRAPMODES-A1(3) [MODES WORD
5SHW BPZ 0 TCNOGRUP [J IF NOT GROUP TRAP
5T3G LDX 0 MANAG(1)
5TH6 BXU 0 ETRUSER1-A1(3),MACROCHTR [J IF NOT :MANAGER
5W2Q LDX 0 MANAG+1(1)
5WGB LDX 2 MANAG+2(1)
5X22 TXU 0 ETRUSER2-A1(3)
5XFL BXU 2 ETRUSER3-A1(3),MACROCHTR
5X^= LDEX 0 ETRAPMODES-A1(3) [MANAGER,GROUP = EVERYONE
5YDW ORX 5 0
5YYG BRN XMANAT
5^D6 MACROCHTR
5^XQ # THIS SECTION LOOKS TO SEE WHETHER A USER IS ALLOWED ACCESS TO A FI
62CB # AS A MEMBER OF A GROUP BY COMPARING THE TRAP USERNAME WITH EACH
62X2 # COMPONENT OF THE EXPANDED FULL ABSOLUTE NAME OF THE TRAPEE
63BL # IF OK THE TRAPSTYLE BITS ARE CRED INTO X5
63W= HUNT 2,FILE,FABSNB
64*W TESTNAMX 3,A1+1(2),MASTER(1),YFOUND,3
64TG BRN YFIND [IF NAME ALREADY UP TO :MASTER
65*6 YFOUND [DO NOT EXPAND USING FINDNAME
65SQ FINDNAME
66#B TESTREPN NOUSER,YFIND [J IF OK
66S2 GEOERR 1,CORRDICT
67?L YFIND
67R= READAGAIN
68=W MHUNTW 1,FILE,FRB
68QG STO 7 AWORK1(2)
69=6 HUNT 2, FILE,FABSNB
69PQ CALL 7 RCHEQNAME [CHECK NAMES IN FABSNB
6=9B BRN T7 [NAMES NOT EQUAL
6=P2 LDEX 0 ETRAPMODES(1) [OR IN TRAPBITS,EX. FOR
6?8L ORS 0 5 [GROUP BIT
6?N= SMO FX2
6#7W LDX 7 AWORK1
6#MG FREECORE 1 [FREE FRB
6*76 XMANAT
6*LQ LDEX 0 5
6B6B SBN 0 CALL [J IF"ALL"NOT YET ESTABLISHED
6BL2 BNZ 0 SEARCH
6C5L BRN NDENTF
6CK= T7
6D4W MFREE FILE,FRB
6DJG LDX 7 AWORK1(2)
6F46 BRN SEARCH
6FHQ TCNOGRUP
6G3B BNG 6 SEARCH [JIF NOT GROUP BUT GROUP REQD
6GH2 MHUNTW 2,FILE,FAPB
6H2L LDN 1 3
6HG= TCLOOPQ
6H^W SMO 1
6JFG LDX 0 A1(2) [CHECK IF NAMES THE SAME
6J^6 SMO 1 [IN FAPB & TRAP
6KDQ BXU 0 0(3),SEARCH
6KYB BCT 1 TCLOOPQ
6LD2 LDEX 0 4(3) [TRAPBITS
6LXL ORX 5 0 [DON'T WANT"GROUP" BIT
6MC= LDEX 0 5
6MWW SBN 0 CALL [J BACK TO FINISH SEARCH THROUGH
6NBG BNZ 0 SEARCH
6NW6 NDENTF
6P*Q #SKI K6TRAPCHEC>99-99
6PTB TRACE 5,TRAPBITS
6Q*2 T49 STEP
6QSL BZE 3 NDENT
6R#= LDX 0 ERES-A1(3) [LOOP THRU TO
6RRW BNZ 0 T49
6S?G NDENT
6SR6 SLL 7 2
6T=Q BZE 7 YY
7G=L PRIV
7GQ= MFREE FILE,FABSNB [FREE FABSNB
7H9W PRIV3
7HPG MFREE FILE,FAPB
7J96 PRIV4
7JNQ ANDX 5 BITS22LS
7K8B PRIV2
7KD8 ... LDX 2 FX2
7KN2 STO 5 ACOMMUNE7(2) [STORE REPLY
7L7L UP
7L9T ...YY
7L#4 ...#UNS ILOGACC
7LB? ...(
7LDG ...# LOG THIS ACCESS OR ATTEMPTED ACCESS
7LGP ... MHUNTW 2,FILE,FAPB
7LJY ... NAME 2,FILE,FTRAP
7LM7 ... ORS 6 ETRAPMODES(2) [INDICATE IF GROUP
7LPB ... LOGACCESS 10
7LRK ... MHUNTW 2,FILE,FTRAP
7LTS ... NAME 2,FILE,FAPB
7LY3 ... ERS 6 ETRAPMODES(2)
7M2= ...)
7M4F ... CLOSE [CLOSE DIRECTORY
7M6W MFREE FILE,FABSNB
7M8K ...YYYZ
7M=# ... FSHCODE A,SKIPINB1
7M#3 ...(
7M*Q ... LDN 7 1
7MCF ... TRANSFIN 7,,ALIEN
7MF8 ...SKIPINB1
7MGX ...)
7MJL ...RETFROMA
7MLG BNZ 5 YZYZ [DO NOT JUMP IF NOT OWNER AND NO ACCE
7N66 # NORMALLY WHEN THERE IS A NEGATIVE RESPONSE TO A CHECK BY A USER AB
7NKQ # HIS ACCESS TO ANOTHER USER'S FILE AN ERROR IS REPORTED, BUT FOR TE
7P5B # PURPOSES, A REPLY WILL BE GIVEN INDICATING THAT NO ACCESS IS PERMI
7PK2 MONOUT JNOACC
7Q4L BRN TERM
7QJ= YZYZ ANDX 5 BITS22LS [CLEAR B0 OF X5
7R3W BNZ 5 Y14
7RHG MICH MONOUT CHTRAPREP2
7S36 BRN TERM
7SGQ Y14 ORX 5 6
7T2B LDN 7 4 [X7 CONTAINS SIZE FOR OUTBLOCK
7TG2 BPZ 5 NOGPOUT [J IF NEED NO GROUP PARM
7T^L ADN 7 3
7WF= NOGPOUT
7WYW LDN 3 4 [DEFAULT COUNT FOR LOOP
7XDG LDEX 0 5
7XY6 SBN 0 CALL
7YCQ BNZ 0 NOTALLP [J IF NOT ALL
7YXB ADN 7 3 [ONLY NEED ONE MORE PARAM IF ALL
7^C2 BRN SETBLOQ
7^WL NOTALLP
82B= ADN 0 CALL
82TW Y59
83*G SRC 0 1
83T6 BPZ 0 PARACT [J IF NEXT BIT NOT SET
84#Q ADN 7 3 [IF IT IS,ADD ANOTHER 3WDS TO OUTBLOK
84SB PARACT
85#2 BCT 3 Y59 [BRN ON COUNT
85RL SETBLOQ
86?= MHUNT 1,FILE,FABSNB
86QW LDX 0 ALOGLEN(1) [IF FABSNB ONLY & 6 WDS LONG,USE CUNI
87=G SBN 0 4 [BLOCK TO OUTPARAM ENTRANT NAME.O/W
87Q6 BZE 0 USECUNIPARA [USE LOCAL NAME IN FABSNB FOR UP-TO-
889Q [DATE DETAILS
88PB LDN 0 #200
8992 ANDX 0 ATYPE(1)
89NL BNZ 0 USECUNIPARA [J IF W/F.
8=8= ADX 1 ALOGLEN(1)
8=MW LDX 0 A1-6(1)
8?7G BZE 0 USECUNIPARA [EXIT IF NAMELESS FILE(I.E.M.T.).
8?M6 TESTUSER A1-6(1),USECUNIPARA [OR IF DIR BEING TRAPCHECKED-ELSE
8#6Q [NNORM GOES POTTY & GEOERRS SHORTFAB.
8#LB SETNCORE 10+CPDATA-A1+1,1,ADATA,CREADL
8*62 STOZ A1(1)
8*KL UNNORM TWO [CONVERT ABSOLUTE NAME
8B5= MHUNTW 1,ADATA,CREADL
8BJW LDX 6 A1(1) [CHAR.CT.
8C4G LDX 0 6
8CJ6 ADN 0 1 [MIN NO. WDS. TO CONTAIN PARAM
8D3Q SRA 0 2
8DHB ADX 7 0
8F32 OUTBLOCK 7 [PARAM BLOCK
8FGL OUTPARAM 6,CPDATA,ADATA,CREADL
8G2= MFREE CPB,CUNI
8GFW BRN OUTUSER
8G^G USECUNIPARA
8HF6 MHUNT 2,CPB,CUNI
8HYQ ADX 7 ALOGLEN(2) [SIZE OF FILENAME PARAM
8JDB SBN 7 1
8JY2 OUTBLOCK 7 [OUTPUT BLOCK
8KCL MHUNT 1,CPB,CUNI
8KX= LDEX 6 ANUM(1)
8LBW OUTPARAM 6,APARA,CPB,CUNI [OUTPARAM FILE NAME
8LWG MFREE CPB,CUNI
8MB6 OUTUSER
8MTQ LDN 6 12
8N*B OUTPARAM 6,A1+1,FILE,FAPB [OUTPARAM USERNAME
8NT2 BPZ 5 NOGRPAR [J IF NO GP. MODE
8P#L ADN 1 PARA1
8PS= CALL 6 OUTPARAM [OUTPUT GROUP PARAM
8Q?W NOGRPAR
8QRG LDEX 0 5
8R?6 SBN 0 CALL [J IF NOT ALL
8RQQ BNZ 0 PARALOOP
8S=B ADN 1 PARA2
8SQ2 CALL 6 OUTPARAM [OUTPUT "ALL" PARAM
8T9L BRN MONOUT
8TP= PARALOOP
8W8W LDN 3 PARA4-PARA3
8WNG ZP2Q SRC 5 1
8X86 BPZ 5 NOLUK [J IF NEXT BIT NOT SET
8XMQ ADN 1 PARA3-3(3)
8Y7B CALL 6 OUTPARAM [OUTPUT APPR. PARAM
8YM2 NOLUK
8^6L SBN 3 3
8^L= BNZ 3 ZP2Q [J BACK IF COUNT NOT EXPIRED
925W MONOUT
92KG MFREE FILE,FAPB [FREE OUR TRUSTY FAPB
9356 MONOUT CHTRAPREP [OUTPUT MESSAGE
93JQ TERM
944B ENDCOM
94J2 OUTPARAM
953L SBX 6 FX1
95H= LDX 4 0(1) [NO. CHARS
962W ADN 1 1 [PTR FOR MOVE
96GG MHUNTW 2,FILE,FAPB [MOVE IN 2 WORDS
9726 ADN 2 A1
97FQ MOVE 1 2
97^B OUTPARAM 4,A1,FILE,FAPB [OUTPARAM PARAMETER FROM FAPB
98F2 ADX 6 FX1
98YL EXIT 6 0
99D= ZBRAK
99N4 ... FSHSKIP
99XW COMBRKIN
9=54 ... FSHCODE AORB
9=== ... BRN (GEOERR)
9=CG [
9=X6 MENDAREA 25,K99TRAPCHEC
9?BQ #END
^^^^ ...12764344000200000000