{{htmlmetatags>metatag-description:(ICL George 3 and George 4 source: OPENWAIT867)}}
====== OPENWAIT867 ======
(George Source)
**Macros used:** [[george:macro:BASEFCB|BASEFCB]], [[george:macro:BFCBX|BFCBX]], [[george:macro:BRUSEN|BRUSEN]], [[george:macro:BXE|BXE]], [[george:macro:BXL|BXL]], [[george:macro:BXU|BXU]], [[george:macro:CJOBLOCK|CJOBLOCK]], [[george:macro:CLOSETOP|CLOSETOP]], [[george:macro:FILENUMB|FILENUMB]], [[george:macro:FPCAJO|FPCAJO]], [[george:macro:GEOERR|GEOERR]], [[george:macro:JBC|JBC]], [[george:macro:JBS|JBS]], [[george:macro:JMTONL|JMTONL]], [[george:macro:LONGOFF|LONGOFF]], [[george:macro:LONGSET|LONGSET]], [[george:macro:LONGSTOX|LONGSTOX]], [[george:macro:MFREE|MFREE]], [[george:macro:MFREEW|MFREEW]], [[george:macro:MHUNT|MHUNT]], [[george:macro:MHUNTW|MHUNTW]], [[george:macro:NEXTFCB|NEXTFCB]], [[george:macro:OPEN|OPEN]], [[george:macro:PSTAC|PSTAC]], [[george:macro:SEG|SEG]], [[george:macro:SEGENTRY|SEGENTRY]], [[george:macro:SETNCORE|SETNCORE]], [[george:macro:SETREP2|SETREP2]], [[george:macro:TESTMODE|TESTMODE]], [[george:macro:TESTNAMX|TESTNAMX]], [[george:macro:TFCBCHECK|TFCBCHECK]], [[george:macro:TOPFCB2|TOPFCB2]], [[george:macro:TRACEIF|TRACEIF]], [[george:macro:UP|UP]], [[george:macro:UPPLUS|UPPLUS]], [[george:macro:VFREEW|VFREEW]]
22FL SEG OPENWAIT,50,GEORGE PORTER,OPEN
22^= [
236D ...[ (C) COPYRIGHT INTERNATIONAL COMPUTERS LTD 1983
23?L ...[
23DW SEGENTRY K1OPENWAIT,WAITERASE
23YG SEGENTRY K2OPENWAIT,WAITEMPTY
24D6 SEGENTRY K3OPENWAIT,WAITFREE
24XQ SEGENTRY K4OPENWAIT,WAITTHAW
254Y ...#
25=6 ...#
25CB # ROUTINE TO GO WAITING FOR SPECIAL CASES WHEN OPENING A FILE.
25X2 # USED ONLY BY OPEN ROUTINES.
2648 ...#
269B ...#
26BL MALL #60011000
26W= MR #60000000
27*W RCL #20001000
27TG WTER +FWTBER
28*6 WTFR +FWFREE
28SQ [
29#B ...#
29S2 ...# THE CLUDGE CHECKING FOR SHARED FILESTORE IS PERFORMED BY SEPARATE
2=?L ...# (ALTHOUGH SIMILAR) CODE FROM THAT IN STANDARD GEORGE. THE REASON
2=R= ...# FOR THIS IS AS FOLLOWS:-
2?=W ...# EACH JOB BEING RUN ON 'B' (THE SLAVE MACHINE) HAS A CORRESPONDING
2?QG ...# CPAT ON 'A' (THE MASTER MACHINE) AND ANY FILES OPEN ON 'B' ARE
2#=6 ...# OPEN IN THE SAME MODES TO THE CORRESPONDING ACT. ON 'A' -
2#PQ ...# FILESTORE INTERLOCKS ARE THUS MAINTAINED ON 'A' SINCE ALL DATA AS
2*9B ...# REGARDS HOW FILES ARE OPEN IS AVAILABLE THERE. HOWEVER, ALTHOUGH
2*P2 ...# ON 'B' A JOB MAY HAVE FILES OPEN TO THE CPAT, PCA & AOLPTS, ON 'A'
2B8L ...# THESE FILES ARE ALL OPEN TO THE CPAT (THERE ARE NO CORRESPONDING
2BN= ...# PCA OR AOLPTS ON 'A'). NOW IN STANDARD GEORGE, THE REPLY CLUDGE
2C7W ...# IS GENERATED IF THE FILE IS OPEN TO THE CURRENT ACT. (WITH NO
2CMG ...# FURTHER CHECKS ON MODE ETC.). IF THIS CODE WERE OBEYED FOR 'B'
2D76 ...# JOBS (OPENREL IS ALWAYS OBEYED ON 'A' ANYWAY), IT WOULD GIVE
2DLQ ...# ERRONEOUS CLUDGE REPLIES IN SOME CIRCUMSTANCES.
2F6B ...#
2FL2 ...# N.B.
2G5L ...# ----
2GK= ...# THE SHARED FILESTORE CODE WOULD WORK IN STANDARD GEORGE.
2H4W ...# THEREFORE, AFTER 6 MONTHS VALIDATION BY SHARED FILESTORE GEORGE
2HJG ...# (I.E. AFTER AUGUST 79), IT IS SUGGESTED THAT THE OLD GEORGE CODE
2J46 ...# BE REMOVED AND THE SHARED FILESTORE VERSION BECOME THE STANDARD
2JHQ ...# GEORGE VERSION.
2K3B ...#
2KH2 ...#
2L2L ...#
4P36 ...#
4P38 ...#
4P3= ...#
4P3# ...# MAIN CODE
4P3B ...# ---- ----
4P3D ...#
4P3G ...#
4P3J ...WAITERASE
4P3L ... [THIS IS ENTRY TO WAIT FOR FILE TO
4P3N ... [BE ERASED.X3->DIRENT,X6 HOLDS ELOC1
4P3Q ... LONGSET #12,XIT,6 [SET WAITING STYLE
4P3S ... LDX 0 WTER(1)
4P3W ... STO 0 AWORK4(2)
4P3Y ... MHUNTW 1,FILE,ENT
4P42 ... LDX 3 ESER(1) [IF ENTRANT IS MT A SPECIAL
4P44 ... BZE 3 PATH [CLUDGE TEST IS NEEDED WHICH
4P46 ...[MAY BE REDUNDANT - CAN'T WAIT IF SERIAL OPEN -
4P48 ... JMTONL 3,,UP [LOOKS AT MTS ONLINE TO CURRENT
4P4= ... BRN WAIT [JOB
4P4# ...PATH
4P4B ... MHUNT 1,FILE,FLOCNB
4P4D ... TOPFCB2 2
4P4G ... LDX 4 FME1(2)
4P4J ... BASEFCB 3,FILE,WAIT,6
4P4L ... BRN NFCB2
4P4N ...NFCB1
4P4Q ... NEXTFCB 3,FILE,NFCB2,6 [MOVE TO NEXT FCB
4P4S ... BRN WAIT
4P4W ...NFCB2
4P4Y ... LDX 0 FME3(2)
4P52 ... LDX 5 FME2(2) [LOAD COMPARISON WORDS
4P54 ...NFCB3 [TEST IF RIGHT FCB
4P56 ... TXU 4 FUSER1-FCBRING(3)
4P58 ... BCC SOFAROK [BRANCH IF MAYBE
4P5= ...NFCB4
4P5# ... NEXTFCB 3,FILE,NFCB3,6 [FAST LOOP RETURN
4P5B ... BRN WAIT [ALL FCBS SEARCHED NOT FOUND
4P5D ...SOFAROK
4P5G ... TXU 5 FUSER2-FCBRING(3) [DO REST OF THE COMPARISONS
4P5J ... TXU 0 FUSER3-FCBRING(3)
4P5L ... BCS NFCB4 [NO LUCK CONTINUE SEARCH
4P5N ... TESTNAMX 6,A1(1),FLOC1-FCBRING(3),NFCB1,5 [FULL LOCAL NAME CO
4P5Q ... SBN 3 FCBRING [FCB FOUND
4P5S ... LDX 5 BACK1(3) [IF FILE FOUND, KEEP ITS BACKING
4P5W ... LDX 6 BACK2(3) [STORE HOME PAIR
4P5Y ... BRN NOFCB
4P62 ...#
4P64 ...#
4P66 ...WAITEMPTY [TO BE FREE BEFORE EMPTYING IT
4P68 ... VFREEW FILE,FCB [NONE IF WAITING BECAUSE FROZEN
4P6= ...NOFCB
4P6# ... CALL 3 TCLUDGE [TEST FOR CLUDGE
4P6B ...WAIT
4P6D ... MFREEW FILE,ENT
4P6G ... TFCBCHECK 2 [FIND FCB BELONGING TO THE DIRECTORY
4P6J ... LDX 4 FME1(2) [PICK UP THE USER NAME OF THE
4P6L ... LDX 5 FME2(2) [DIRECTORY AND KEEP IN X4,X5 AND X6
4P6N ... LDX 6 FME3(2)
4P6Q ... CLOSETOP [CLOSE THE DIRECTORY
4P6R ...#UNS EWAITFILE
4P6S ...(
4P6T ... LDX 0 JOBNO(2)
4P6W ... BZE 0 NOCQPRINT
4P6X ... SETNCORE 10,2,CQPRINT,CQFILE [FOR WHATSTATE
4P6Y ... LDN 0 10
4P6^ ... STO 0 A1(2) [RECORD HEADER
4P72 ... ADN 2 CQWTUSER
4P73 ... LDN 1 4
4P74 ... MOVE 1 3 [MOVE IN USERNAME
4P75 ... ADN 2 CQWTFILE-CQWTUSER
4P76 ... MHUNT 1,FILE,FLOCNB
4P77 ... ADN 1 A1
4P78 ... MOVE 1 6 [MOVE IN LOCAL NAME
4P79 ... LDX 2 FX2
4P7= ...NOCQPRINT
4P7? ...)
4P7# ... TRACEIF K6OPENWAIT,99,299,4,WAITING
4P7* ... TRACEIF K6OPENWAIT,99,299,CLONG1(2),-STYLE
4P7B ... LONGSTOX XBRK,,AWORK4(2)
4P7C ...#UNS EWAITFILE
4P7D ... VFREEW CQPRINT,CQFILE
4P7F ... TESTMODE 7,NREPW,NOT,REPWAIT
4P7G ... SETREP2 DIRCLOSE
4P7H ... UPPLUS 1
4P7J ...NREPW
4P7K ... LDN 3 4
4P7L ... SETUPCOR 3,1,FILE,FABSNB
4P7M ... ADN 1 A1
4P7N ... LDN 0 3 [PUT HEADER AND USERNAME INTO FABSNB
4P7P ... MOVE 0 4
4P7Q ... OPEN XIT,GENERAL,QUERY [REOPEN THE DIRECTORY
4P7R ... MFREE FILE,FABSNB
4P7S ... TRACEIF K6OPENWAIT,99,299,4,FREE NOW
4P7T ... UPPLUS 1
4P7W ...#
4P7X ...#
4P7Y ...WAITFREE [IN THE ORDINARY SENSE
4P82 ... CALL 3 TCLUDGE
4P84 ... UP [NO CLUDGE
4P86 ...#
4P88 ...#
4P8B ...TCLUDGE [ROUTINE TO TEST FOR CLUDGE
4P8D ... SBX 3 FX1
4P8G ... LDX 2 FX2
4P8J ... STO 3 AWORK1(2) [STORE LINK
4P8L ... FILENUMB 4
4P8N ... BZE 4 NCLD
4P8Q ... LDX 1 FILERING(2) [SET X2 TO FSTACK ELT OF 1ST FILE OPE
4P8S ...RING
4P8W ... PSTAC 2,1 [X2 -> FSTACK
4P8Y ... BFCBX 2,2 [X2 -> FCB
4P92 ... BXU 6 BACK2(2),NEXT [CLUDGE
4P94 ...UP LONGOFF [CLEAR LONGSET
4P96 ... SETREP2 CLUDGE
4P98 ... UPPLUS 1
4P9= ...NEXT LDX 1 FPTRF(1) [MOVE TO NEXT ELEMENT IN FILERING
4P9# ... BCT 4 RING [J IF NOT BACK TO BEGINNING OF RING
4P9B ...NCLD
4P9D ... LDX 2 FX2
4P9G ... LDEX 0 JOBNO(2)
4P9J ... BZE 0 NOTCLD [NO JOBLOCK IF ZERO
4P9L ... LDCH 0 ATYPE(2)
4P9N ... SBN 0 CPAT/64
4P9Q ... BNZ 0 NOTCLD
4P9S ... BRUSEN NOTCLD [J IF NO JOB-BLOCK.
4P9W ... CJOBLOCK 2 [FIND JOBLOCK
4P9Y ... LDEX 0 JMISC(2)
4P=2 ... BZE 0 NOTCLD [DONT MINISWAP IF NO CORE IMAGE
4P=4 ... FPCAJO 2,,N [LOCATE PCA, IF NO PCA, THERE CAN
4P=6 ... LDCH 0 ATYPE(2) [BE NO AOLPTS, THUS NO CLUDGE
4P=8 ... SBN 0 APET/64
4P== ... BNZ 0 NOTCLD
4P=# ... LDX 1 FILERING(2)
4P=B ... PSTAC 1,1 [THERE COULD BE ONE FILE OPEN TO
4P=D ... BFCBX 1,1 [APET, SO CHECK THAT IS NOT FILE
4P=G ... BXE 6 BACK2(1),TPM
4P=J ...NACT
4P=L ... LDX 2 FPTR(2)
4P=N ... LDX 0 ATYPE(2) [LOOK FOR AOLPT ACTIVITIES
4P=Q ... BXL 0 CACT,NACT [TRY NEXT IF THIS IS NOT AN ACTIVITY
4P=S ... SRL 0 12
4P=W ... SBN 0 AOLPT
4P=Y ... BNZ 0 NOTCLD
4P?2 ... LDN 0 FILERING(2)
4P?4 ... LDX 1 FILERING(2)
4P?6 ...XX1
4P?8 ... LDX 3 1
4P?= ... ADX 1 FBACKPOINT(1)
4P?# ... LDX 1 BPTR(1) [PICK UP -> TO FCB IN X1
4P?B ... BXE 6 BACK2(1),TPM [REMEMBER MULTIFILES
4P?D ... LDX 1 FPTR(3)
4P?G ... BXE 1 0,NACT
4P?J ... BRN XX1
4P?L ...# TEST NOW FOR PERMISSIBLE MODES
4P?N ...TPM
4P?Q ... SMO FILERING(2)
4P?S ... LDX 5 FGENERAL1
4P?W ... SMO FX1 [PICK OUT RELEVANT MODES
4P?Y ... ANDX 5 MALL
4P#2 ... LDX 6 7
4P#4 ... ANDN 6 #7000 [MAIN MODE
4P#6 ... SBN 6 #3000 [-VE IF READ
4P#8 ... TESTMODE 7,NOCLN,NOT,USERCLEAN
4P#= ... BPZ 6 WCL [J IF WE ARE WRITE
4P## ... SLL 5 1
4P#B ... BNG 5 OK [J IF THEY ARE ALSO READ
4P#D ... ANDN 5 #2000
4P#G ... BNZ 5 OK [J IF THEY ARE WRITE-CLEAN
4P#J ... BRN UP
4P#L ...WCL
4P#N ... SMO FX1 [J IF READ-CLEAN
4P#Q ... BXE 5 RCL,OK
4P#S ... BRN UP
4P#W ...NOCLN
4P#X ... TESTMODE 7,NOCOMM,NOT,COMMUNE
4P#Y ... LDX 0 FREEZECOUNT(1)
4P#^ ... ADX 0 FSVCT(1)
4P*2 ... BNZ 0 UP [CLUDGE IF FILE FROZEN
4P*3 ... BPZ 6 PC [J IF WE ARE NOT READ
4P*4 ... BPZ 5 TCOM [J IF THEY NOT READ
4P*6 ... TESTMODE 7,UP,,DESTRUCT [J IF DESTRUCT - CLUDGE
4P*8 ... JBS UP,1,BFDCF [CLUDGE IF ALREADY OPEN DESTRUCTIVELY
4P*= ... BRN XGRT
4P*# ...TCOM
4P*B ... ANDX 5 BIT11
4P*D ... BZE 5 UP [CLUDGE IF THEY NOT APPEND-COMM
4P*G ... TESTMODE 7,NOTDESTRUCT,NOT,DESTRUCT
4P*J ... JBC UP,1,BFDCF [OK IF NEITHER OR BOTH OPENER
4P*L ... BRN XGRT [AND FILE ARE DESTRUCT
4P*N ...NOTDESTRUCT
4P*Q ... JBS UP,1,BFDCF
4P*S ... BRN XGRT
4P*W ...PC
4P*Y ... TESTMODE 7,UP,,EMPTY
4PB2 ... BRN TCOM
4PB4 ...NOCOMM
4PB6 ... BPZ 6 UP [J IF WE ARE NOT READ
4PB8 ... SMO FX1
4PB= ... ANDX 5 MR
4PB# ... BZE 5 UP [J IF THEY ARE NOT READ
4PBB ... BRN NOTDESTRUCT
4PBD ...XGRT
4PBG ... TESTMODE 7,UP,,GDESTR [J IF GDR - CLUDGE IF ALREADY NON-GDR
4PBJ ... [COMMUNE OR FROZEN
4PBL ... JBS UP,1,BFGDR [CLUDGE IF NOTGDR MODE & FILE GDR
4PBN ...OK
4PBW LDX 5 BACK1(1)
4PWG LDX 6 BACK2(1) [RESTORE X5 AND X6
4QB6 BRN NACT
4QTQ NOTCLD
4R*B LDX 2 FX2
4S#L LDX 3 AWORK1(2)
4SS= ADX 3 FX1
4T?W EXIT 3 0 [NO CLUDGE ON FILE BEING WAITED FOR
4TC2 ...#
4TK= ...#
4TNB ...#
4TRG XIT GEOERR 1,OPENWAIT
4TYN ...XBRK
4W5W ...#UNS EWAITFILE
4W?4 ... VFREEW CQPRINT,CQFILE
4WD= ... UP
4WKH ...#
4WXY ...#
4X=B WAITTHAW
4XQ2 [THIS IS ENTRY TO WAIT FOR FILE TO BE FREE FOR EMPTYING. IT IS USED IN
4Y9L [THE CASE WHERE THE FILE IS FROZEN.IT WAS ADDED TO CORRECT BUG 2586.
4YP= [
4^8W LONGSET 6,XIT,6
4^NG LDX 0 WTFR(1)
5286 STO 0 AWORK4(2)
52MQ BRN PATH
537B [
546L #END
^^^^ ...13316103000100000000