. . This version of BSP$ from RLIB$73 has been modified to . allow reentrant operation despite not being part of . PIRCB$. . PIR$COM EQU 1 . 1 = COMMON BANK - 0 = RELOCATABL* fang * SKIP EQU 0 . TURNS ON/OFF BLOCKS OF BSP FUNCTIONS PREPF EQU 4 . DISCS PREPPING FACTOR AXR$ . ON PIR$COM . * fang * . RET0 EQU CBRET0 . * fang * . RET1 EQU CBRET1 . *fang * . OFF PIR$COM . * fang * . ON 1-PIR$COM . * fang * RET0 EQUF 0,X11 . RET1 EQUF 1,X11 . . OFF 1-PIR$COM . * fang * . ***EQUATES*** . ****** THESE EQUATES TURN ON/OFF VARIOUS BSP FUNCTIONS ****** WPFTX EQU 1-SKIP . WRITE PROGRAM FILE INDEX WFTIX EQU 1-SKIP . WRITE FILE TABLE INDEX PFTIDX EQU 1-SKIP . PROGRAM FILE TABLE ITEM DELETE PFTIAX EQU 1-SKIP . PROGRAM FILE TABLE ITEM ADD PTWTX EQU 1-SKIP . PART TABLE WRITE RPFTX EQU 1 . READ PROGRAM FILE TABLE PFTNLX EQU 1 . PROGRAM FILE LOOKUP BY NUMBER PFTISX EQU 1 . TABLE SEARCH ETIAX EQU 1 . . ****** END OF EQUATES TO TURN ON/OFF VARIOUS BSP FUNCTIONS ****** READ EQUF 02000,0,U . READ FUNCTION WRITE EQUF 01000,0,U . WRITE FUNCTION NORITE EQUF 05,0,U . NOT USED I/O STATUS PTSIZ2 EQU 140/28 PTSIZ3 EQU 139 PTSIZ1 EQUF 139,0,U . ACTUAL USED SIZE OF TABLE MINSIZ EQUF 196,0,U PTSIZE EQUF 140,0,U . POINTER TABLE LENGTH ET EQUF 9,A0,U AT EQUF 12,A0,U CT EQUF 15,A0,U FT EQUF 18,A0,U EP EQUF 21,A0,U NEWRBS EQUF 24,,S6 . NEW RELOCATABLE ELEMENT FLAG: . SET WHEN RB ELEMENT ADDED AND . CLEARED WHEN ABS ELEMENT ADDED FASTFLG EQUF 24,A0,S5 . CONTAINS A FLAG . NE 0 - FASTRAND FILE . EQ 0 - NON-FASTRAND FILE MAXPRE EQUF 24,A0,H1 . MAX PREAMBLE SIZE TXTADR EQUF 26,A0 . ELT TEXT START ADDR STATUS EQUF 3,A0,S1 . IO STATUS FUNC EQUF 3,A0,H1 . ACW EQUF 4,A0 . PACKET ACCESS WORD DRUMAD EQUF 5,A0 . PACKET DRUM ADDRESS DSBEG EQUF 0,A3,H1 . DSBEG IS T1 DEF AS H1 FOR QTR DSTART EQUF 0,A3,H2 . TABLE START ADDRESS ON DRUM CSBEG EQUF 1,A3,H2 . ADDRESS OF USER CORE BUFFER CSEND EQUF 2,A3,H2 . END ADDRESS OF USER CORE BUFFER DLENGT EQUF 1,A3,H1 . CURRENT TABLE LENGTH ITMSIZ EQUF 2,A3,S3 . ITMEM SIZE PTWORD EQUF 2,A3,H1 . POINTER TABLE SIZE DPREPF EQUF 2,A3,S1 . OVERLAYS PTWORD DURING EXECUTION CHANGE EQUF 0,A3,S3 ON PIR$COM . NEWSEQ EQUF 34,A0 . LNKWDS EQUF 35,A0 . SEQNBR EQUF 37,A0 . STAT EQUF 38,A0 . ITMLOC EQUF 39,A0 . FCT EQUF 41,A0 . ADDR EQUF 43,A0 . CORLOC EQUF 43,A0,H2 . MAXLEN EQUF 43,A0,H1 . SAVEX8 EQUF 44,A0,H1 . SAVEX10 EQUF 44,A0,H2 . X11SAV EQUF 45,A0 . X11S EQUF 45,A0,H1 . X11SP EQUF 45,A0,H2 . OFF PIR$COM . $(2) ON 1-PIR$COM . NEWSEQ + 0 . SEQUENCE NUM OF ENTRY TO BE ADDED LNKWDS + 0 . LINK WORDS FROM PACKET MODIFIED + 0 SEQNBR + 0 . SEQNBR OF LAST ENTRY LOC BY BSP STAT + 0 . H1=TYPE OF PTR H2=POINTING ITEM ITMLOC + 0 . DRUM ADDRESS OF ITEM + 0 . FCT + 0 . HOLD ADDR OF FCT AND A1 (PKT) + 0 . ADDR + 0 . SAVEX8 EQUF $,,H1 . SAVEX10 EQUF $,,H2 . + 0 . X11SAV + 0 . X11S EQUF X11SAV,,H1 . X11SP EQUF X11SAV,,H2 . CORLOC EQUF ADDR,,H2 . MAXLEN EQUF ADDR,,H1 . OFF 1-PIR$COM . $(1) LIT P FORM 12,6,18 . ********************************************************** . ************** STATIC I-BANK DATA ************************ PFWORD$* '**PF**' . PROGRAM FILE INDICATOR . FOLLOWING ARE STANDARD STARTING SECTOR . ADDRESSES FOR PROGRAM FILE TABLES KET + 1 . ELEMENT TABLE KAPT + 960 . ASSEMBLER PROCEDURE TABLE KCPT + 1088 . COBOL PROCEDURE TABLE KFPT + 1216 . FORTRAN PROCEDURE TABLE KEPT + 1344 . ENTRY POINT TABLE SYSKON$* + 1792 . START OF ELEMENT TEXT AC628 + 28,6 ON 1-SKIP FCYCLE + 5 . STANDARD FILE CYCLE (F-CYCLE) MAXIMUM SPACES ' ' . OFF 1-SKIP . . / . READ FILE TABLE INDEX . RFTI$* . ON PREPF>1 . ER FACIL$ . LA,S1 A1,6,A0 . FETCH EQUIPMENT TYPE LA,U A2,PREPF . TG,U A1,030 . ANY FASTRAND FILE TG,U A1,040 . SZ A2 . L R2,PTSIZE . OFF PREPF>1 . . LA A5,READ . SET IO PACKET FOR READ FTIO . SA A5,FUNC AU A0,AC628 S A1,ACW . SET READ OF 28 WORDS TO FCT+6 SZ DRUMAD . THE FTI IS IN SECTOR 0 ER IOW$ L A5,STATUS TNE A5,NORITE . IS IT AN 05 J NEW . FILE NOT WRITTEN IN YET JNZ A5,IOERR . NO MUST BE ANOTHER ERROR . ON WFTIX . LA A5,FUNC . TOP A5,READ . WERE WE READING J RET1 . NO THEREFORE DONE SZ A5 . OFF WFTIX . . LXI,U A1,1 L,U R1,28 SNE A5,0,*A1 J PUTPF . IT IS NOT A PROGRAM FILE L A4,PFWORD$ TE A4,6,A0 . IS FIRST WORD **PF** J NOPF . NO, ERROR CASE S A2,FASTFLG . L,U A1,0,A0 . ADDR OF FCT L,U R1,7 . LOOK AT SEVEN WORDS LXI,U A1,1 . INCREMENT BY ONE SNE A5,27,*A1 . LOOK FOR NON ZEROS J ZEROS . ALL ZEROS L,U A4,0 . DS A4,27,A0 . CLEAR OUT LAST SEVEN WORDS OF FTI DS A4,29,A0 . DS A4,31,A0 . S A4,33,A0 . J SETXTADR . ZEROS . TZ TXTADR . J RET1 . SETXTADR . L A5,SYSKON$ . S A5,TXTADR . SET TXTADR TO SYSTEM CONSTANT NORMX . J RET1 . NORMAL EXIT RETURN TO USER NOPF L,U A0,2 . ** FILE IS NOT PF ** ALLER . J RET0 . ERROR RETRUN TO USER NEW . LR,U R1,26 . CLEAR 26 WORDS SZ A2 . LA,U A3,A2-2 . WILL USE A2 WITH FOLLOWING BT LXI,U A1,1 . INCRE BY 1 BT A1,2,*A3 . DOING THE CLEAR PUTPF . S A2,FASTFLG . L A4,PFWORD$ . GET PROGRAM FILE IDENTIFIER S A4,6,A0 . STORE IT IN FIRST WORD OF FTI L A5,SYSKON$ . GET SYSTEM STANDARD FOR START OF TEXT S A5,7,A0 . STORE IT IN NEXT WRITE LOCATION S A5,TXTADR . STORE IT IN START OF TEXT J RET1 . NORMAL EXIT . IOERRES . LXM X8,SAVEX8 . RESTORE X8 LXM X10,SAVEX10 . IOERR . LA,U A0,077 . EMIT AN IO ERROR SSC A0,6 A A0,A5 J RET0 . ERROR RETURN / ON RPFTX . . . *** READ PROGRAM FILE TABLE *** . RPFET$* . L A3,ET . J RPFT RPFAPT$* . L A3,AT . J RPFT RPFCPT$* . L A3,CT . J RPFT RPFFPT$* . L A3,FT . J RPFT RPFEPT$* . L A3,EP . RPFT . L A5,PFWORD$ . TE A5,6,A0 . FTI MUST BE IN CORE J NOFTI . S,H1 A1,ACW . SET NBR OF WORDS TO READ SSC A1,18 . SWAP H1 AND H2 S,H2 A1,ACW . A1 CONTIN USER BUFFER ADDRESS S A1,CSBEG DSL A1,54 DI,U A1,28 . FIND NBR OF SECTORS TLE,U A1,7 . 7 IS MINIMUM NBR OF SECTORS J NOBUF . . ON PREPF>1 . SZ DPREPF . CLEAR DISC PREPPING FACTOR . ON/OFF FLAG TNZ FASTFLG . FASTRAND FILE J BUFIX2 . NO AN,U A1,PTSIZ2 . SUBT OFF POINTER TAB SIZE TLE,U A1,PREPF . IS RESULTANT BUFFER TOO SMALL J BUFIX1 . YES S A0,R1 . SAVE A0 FOR AWHILE L,XU A0,-(PREPF-1) . A MASK BASED ON DISC PREP FAC AND A1,A0 . TRUNCATE BUFFER TO NEAREST BOUNDRY LA A1,A2 . MOVE IT TO A1 SSL A2,1 . SSL A0,1 LOOP CONTROL REGISTER JNB A0,$-2 . L A0,R1 . RESTORE A1 S A2,DPREPF . BUFIX1 . AA,U A1,PTSIZ2 . ADD BACK ON THE PTR TAB SIZE BUFIX2 . OFF PREPF>1 . . MSI,U A1,28 . CONVERT BACK TO WORDS AU A1,CSBEG . SA A2,CSEND . L A4,DSTART . FETCH TABLE START ON DRUM JNZ A4,TAB . ASSUME TABLE EXISTS . ON SKIP . J RET1 . RETURN TO USER OFF SKIP . . ON 1-SKIP . NOTAB . L,U A2,6,A0 . FETCH ADDR OF FIRST DESCRIPTOR L A1,KET SSL A5,36 DO1 A,U A2,3 TNE A2,A3 J DO4 TNZ,H2 0,A2 J DO1 L,H2 A1,0,A2 L,H1 A5,1,A2 A,U A5,2*28 J DO1 DO4 SSL A4,36 DI,U A4,28 A A4,A1 DO2 . L A5,TXTADR . TNE,U A2,21,A0 . START ADDR OF LAST DESCRIPTOR J DO3 A,U A2,3 L,H2 A5,0,A2 JZ A5,DO2 DO3 . L A1,A3 . AN,U A1,9,A0 DSL A1,36 DI,U A1,3 . INDEX TO SYSTEM STANDARD TLE A4,KET,A1 L A4,KET,A1 . USE SYSTEM DEFINED VALUE AN,U A5,7 TG A4,A5 J NOROOM1 . L,U A5,10 JZ A1,$+2 L,U A5,4 OK . S A5,ITMSIZ . S A4,DSTART . INITIALIZE TABLE ENTRIES L A5,PTSIZE S A5,DLENGT L A5,PTSIZ1 LSSL A5,6 . A A5,ITMSIZ . S A5,PTWORD . OFF 1-SKIP . . TAB . S A4,DRUMAD . PUT IT IN IO PKT A,U A4,PTSIZ2 . ADD NBR OF WORDS IN PTR TABLE LSSL A4,6 . MOVE IT LEFT 6 BITS A A4,CHANGE . STUFF IN CHANGE INDICATOR S A4,DSBEG . STORE SECTOR ADDR IN CORE . IN DESCRIPTOR L A2,DLENGT . FETCH LENGTH OF TABLE TLE,U A2,141 . IS TABLE SIZE GREATER THAN PTR TAB J INITPT . NO, THEREFORE NO USEFUL INFO . TLE,H1 A2,ACW . COMPARE TABLE SIZE WITH BUFFER SIZE S,H1 A2,ACW . USE SMALLER SIZE L A5,READ . J MEXIT . GO DO IO OPERATION INITPT . INITIALIZE POINTER TABLE . ON 1-SKIP . THIS CODE NOT NEEDED IN A . READ ONLY ENVIORMENT L A1,CSBEG . FETCH CORE BUFFER ADDR L,U A5,4 . TNE A3,ET . WORKING WITH ELT TABLE L,U A5,10 . ITEM SIZE IS 10 S A5,ITMSIZ . L A2,A1 . L R1,PTSIZE . SIZE OF PTR TAB S R1,DLENGT . SZ A4 . L,U A3,A4 . ADDR OF A4 LXI,U A1,1 . BT A1,0,*A3 . CLEAR PTR TABLE S,H1 A5,139,A2 . STORE ITEM SIZE OFF 1-SKIP . . J RET1 . NORMAL RETURN NOROOM . LXM X11,X11SP . RESTORE X11 LXM X8,SAVEX8 . NOROOM1 . L,U A0,044 . J RET0 . ERROR RETURN NOBUF L,U A0,024 . USER BUFFER TOO SMALL J RET0 . ERROR RETURN NOFTIA LXM X8,SAVEX8 . RESTORE X8 NOFTI L,U A0,012 . ** NO FILE TABLE INDEX ** J RET0 . ERROR RETURN OFF RPFTX . / ON PFTNLX . . *** PROGRAM FILE TABLE NAME LOOKUP *** ETNL$* . L A3,ET . POINT TO ELT TABLE DESCRIP. IN FTI J PFTNL . APTNL$* . L A3,AT . ASM PROC TABLE DESCRIP J PFTNL . CPTNL$* . L A3,CT . COBOL PROC TABLE DESCRIP J PFTNL . FPTNL$* . L A3,FT . J PFTNL . EPTNL$* . L A3,EP . PFTNL . S X8,SAVEX8 . SAVE X8 LMJ X8,TABCHK . L A2,CSBEG . GET CURRENT NUMBER OF ENTRIES L,H2 A2,PTSIZ3,A2 TLE A2,A1 J COR . OUT OF RANGE L A5,A1 LMJ X8,LOOKUP . LXM X8,SAVEX8 . RESTORE X8 S A2,A0 . ADDRESS OF ITEM J RET1 . COR . LXM X8,SAVEX8 . RESTORE X8 L,U A0,014 . ERROR CODE J RET0 . OFF PFTNLX . / ON PTWTX . . *** PART TABLE WRITES *** PTEWT$* . L A3,ET . POINT TO ELT TABLE DESCRIP. IN FTI J PTW . PTATWT$* . L A3,AT . ASM PROC DESCRIP. J PTW . PTCTWT$* . L A3,CT . J PTW . PTFTWT$* . L A3,FT . J PTW . PTETWT$* . L A3,EP . PTW . S X8,SAVEX8 . SAVE X8 LMJ X8,TABCHK . LXM X8,SAVEX8 . RESTOR X8 L A4,ITMLOC S A4,DRUMAD L A1,CORLOC . CORE LOCATION OF LAST . ITEM REFERENCED ANU A1,ITMLOC+1 . DEDUCT NON SECTOR PORTION S,H2 A2,ACW . SAVE RESULT ASS CORE WRITE ADDR L A5,ITMLOC+1 A A5,ITMSIZ TE A3,CT . WORKING WITH COBOL ITEM J NOTCOB . NO L,U A2,020 . YES, IS ITEM EXTENDED TEP,S1 A2,3,A1 A A5,ITMSIZ . ENTRY IS EXTENDED NOTCOB . L,U A1,28 TG,U A5,28+1 . DOES ITEM EXTEND INTO 2 SECTORS? L,U A1,56 S,H1 A1,ACW . ENTRY EXTENDS INTO NEXT SECTOR J MEXITW . WRITE IT AND EXIT OFF PTWTX . / ON WPFTX . . *** WRITE PROGRAM FILE TABLE *** WPFET$* . L A3,ET . POINT TO ELT TABLE DESCRIPTORS J WPFT . WPFAPT$* . L A3,AT . POINT TO ASM PROC DESCRIP J WPFT . WPFCPT$* . L A3,CT . POINT TO COBOL PROC DESCRIP J WPFT . WPFFPT$* . L A3,FT . J WPFT . WPFEPT$* . L A3,EP . WPFT . S X8,SAVEX8 . SAVE X8 LMJ X8,TABCHK . L A5,WRITE S X10,SAVEX10 . SAVE X10 TZ CHANGE . SKIP IF TABLE WAS NOT CHANGED LMJ X10,IOSEG . L A2,CSBEG . CORE ADDR OF PTR TABLE LXM X8,SAVEX8 . RESTORE X8 LXM X10,SAVEX10 . RESTORE X10 SZ CSBEG . SZ DSBEG . CLEAR SECTOR ADDR IN CORE L A5,DLENGT . IF LENGTH IS LESS AN,U A5,141 . THAN 141, NO USEFUL JN A5,NORIT . INFORMATION IS IN TABLE LXI A2,PTSIZE . NBR OF WORDS TO WRITE OUT S A2,ACW . STORE ACCESS CNTRL WORD IN IO PKT L A5,DSTART . WRITE THE POINTER TABLE OUT S A5,DRUMAD . AT THIS ADDRESS J MEXITW . GOTO WRITE CODE THEN EXIT NORIT . SZ DSTART . TABLE IS EMPTY - CLEAR DRUM START ADDR J RET1 . NORMAL RETURN TO USER OFF WPFTX . / . *** PROGRAM FILE TABLE ITEM SEARCH ON PFTISX . ETIS$* . L A3,ET . POINT TO ELT TABLE DESCRIP. IN FTI J PFTIS . APTIS$* . L A3,AT . ASM PROC TABLE J PFTIS . CPTIS$* . L A3,CT . J PFTIS . FPTIS$* . L A3,FT . J PFTIS . EPTIS$* . L A3,EP . PFTIS . S X8,SAVEX8 . LMJ X8,TABCHK . SEE IF PF TABLE IN CORE S X11,X11SP . LMJ X11,SEARCH . MATCH SPKT WITH PF TABLE ITEM J NOFS . NO FIND - STATUS CODE ALREADY SET LXM X11,X11SP . DL A1,SEQNBR . A1 GETS SEQUENCE NUMBER . A2 GETS STAT(LINK,ADDR) LXM X8,SAVEX8 . RESTORE MODIFIER PORTION OF X8 L A0,CORLOC . ADDRESS OF ITEM J RET1 . NORMAL RETURN TO USER NOFS . LXM X11,X11SP . L A2,SEQNBR . L,H1 A4,STAT . FETCH LINK TYPE LSSL A4,3 . BUILD NOFIND INDICATION TNE,U A4,030 . L,U A4,040 . A,U A4,1 . S,H1 A4,STAT . LXM X8,SAVEX8 . RESTORE MODIFIER PORTION OF X8 L,H1 A0,STAT . RETURN TYPE OF LENGTH SSL A1,36 . J RET0 . NO FIND RETURN TO USER OFF PFTISX . / ON PFTIAX . . *** PROGRAM FILE TABLE ITEM ADD *** APTIA$* . L A3,AT . POINT TO ASM PROC TABLE . DESCRIPTOR IN THE FTI J PNIA . CPTIA$* . L A3,CT . COBOL PROC TABLE DESCRIP. J PNIA . FPTIA$* . L A3,FT . FORTRAN PROC TABLE DESCRIP J PNIA . EPTIA$* . L A3,EP . ENTRY POINT TABLE J PNIAA . ETIA$* . L A3,ET . ELT TABLE SZ,H1 2,A1 . CLEAR VERSION LINK PNIAA . CLEAR DUPLICATE LINK AND SZ,H2 3,A1 . CLEAR TYPE LINK PNIA . SZ,H2 2,A1 . S X8,SAVEX8 . SAVE X8 LMJ X8,TABCHK . SEE IF PF TABLE IN CORE S X11,X11SP LXM X11,CSBEG . PF TABLE START ADDR TE A3,ET . WORKING WITH AN ELEMENT TABLE J NOTET . NO, DON'T WORRY ABOUT VERSION NAME TZ 4,A1 . CK SPKT VERSION NAME J $+3 . VERSION NAME GIVEN DL A4,SPACES . DS A4,4,A1 . SET VERSION NAME TO SPACES NOTET . LXM,U X8,0 . L,U A2,0,A3 . ADDR OF CURRENT DESCRIP. TLOOP . A,U A2,3 . INCRE TO NEXT SET OF DESCRIP L,H2 A5,0,A2 . FETCH THE DSTART TNE,U A2,24,A0 . LAST TABLE ? L A5,TXTADR . YES,USE START OF TEXT JZ A5,TLOOP . NO,FIND SOME NON-ZERO AN A5,DSTART . MAX LENGTH OF TABLE MSI,U A5,28 . CONVERT TO WORDS L A2,DLENGT . CURRENT LENGTH OF TABLE A A2,ITMSIZ . CALC HOW BIG TABLE WILL BE L,S1 A4,3,A1 . A4 = FLAG BITS FROM SPKT TNE A3,CT . WORKING WITH COBOL PROC TABLE TOP,U A4,020 . WORKING WITH SPKT EXTENDED ? J NOTCOBA . NO - BYPASS A,U A2,4 . YES ALLOW MORE ROOM LXM,U X8,1 . BUMP SEQ NBR BY 1 NOTCOBA . TLE A5,A2 . WILL IT FIT J NOROOM . S A2,MAXLEN . NEW LENGTH OF TABLE L,H2 A5,PTSIZ3,X11 . FETCH SEQ NBR A,U A5,1 . INCRE SEQ NBR S A5,NEWSEQ . A X8,A5 . ADD ON FOR EXTENDED TABLE S,H2 X8,PTSIZ3,X11 . SAVE IN LAST WORD OF PTR TAB OR,U A4,040 . SET BIT 35 OF FLG BITS IN SPKT TNE A3,EP . IS ENTRY POINT TABLE ACTIVE S,S1 A5,3,A1 . YEP ALLOW FOR DUP EPS LMJ X11,SEARCH . J EANF . NO FIND EXIT L A2,CORLOC . ADDR OF ITEM FOUND L A1,FCT+1 . RESTORE A1, DIDN'T CLOBBER A0 L A4,NEWSEQ TE A3,ET J PNIA2 L,H1 A5,2,A2 . * SET UP VERSION LINK S,H1 A5,2,A1 . * S,H1 A4,2,A2 . * J SAME PNIA2 . L,H2 A5,2,A2 . * SET UP POINTER LINK S,H2 A5,2,A1 . * S,H2 A4,2,A2 . * TE A3,EP J SAME L,H2 A5,3,A2 . * SET UP DUPLICATE LINK S,H2 A5,3,A1 . * S,H2 A4,3,A2 . * J SAMO SAME LMJ X8,CHGIT . SET SEGMENT CHANGE INDICATOR TN 3,A2 J DELIT LMJ X8,LOOKUP . TP 3,A2 J SAMO+1 LMJ X11,FINDER DELIT LMJ X11,DELE . J SAMO+1 EANF . NOFIND ACTION HERE LXM X11,X11SP . DL A0,FCT L,H2 X11,STAT L,H1 A2,STAT L A5,NEWSEQ JNZ A2,TRYP LMJ X8,FOLD . YES-BY PTR TABLE GENERATED ORIG L A5,NEWSEQ JB A4,SET2 S,H2 A5,0,A2 J SAMO+1 SET2 S,H1 A5,0,A2 J SAMO+1 SAMO LMJ X8,CHGIT . L A5,NEWSEQ LXM X11,X11SP LMJ X8,LOOKUP . LMJ X8,CHGIT . MARK SEGMENT CHANGE LXI,U A1,1 LXI,U A2,1 L,S1 A4,3,A1 AND,U A4,037 S,S1 A5,3,A1 . CLEAR DELETE FLAG IN PACKET ENTRY L R1,ITMSIZ L,U A5,020 TEP,S1 A5,3,A1 L,U R1,8 BT A2,0,*A1 L A2,CORLOC TNE A3,ET TZ 9,A2 . IS TIME ALRADY SET J SKPITM L A1,A0 . MOVE A0 TO HIGH GROUND ER TDATE$ . NO GO GET ONE SSC A0,18 S A0,9,A2 L A0,A1 . RESTORE A0 SKPITM L A1,FCT+1 . RESTORE A1 L A5,MAXLEN S A5,DLENGT . SET NEW LENGTH L A5,NEWSEQ TE A3,ET . WAS THIS AN ELEMENT TABLE INSERT J AFIND . NO - EXIT L,S3 A4,3,A2 . GET ELEMENT TYPE TE,U A4,6 . IS IT ABSOLUTE J RBCHK . NO, GO CHECK FOR RB ELEMENT SZ NEWRBS,A0 . CLEAR NEW RB FLAG WHEN . ABS ELEMENT ADDED S A5,25,A0 . PUT SEQUENCE NUMBER IN WD 25 OF FCT . (LAST ABS ELEMENT IN PROGRAM FILE) RBCHK TE,U A4,5 . IS A RB ELEMENT BEING ADDED? J AFIND . NO - EXIT L,H1 A4,7,A1 . FETCH SIZE OF PREAMBLE TG A4,MAXPRE . IS IT THE LARGEST ONE . ENCOUNTERED SO FAR? S A4,MAXPRE . YES, SAVE LARGEST ONE LA,U A1,1 SA A1,NEWRBS,A0 . SET RB ELEMENT ADDED FLAG SZ,H2 21,A0 . CLEAR STARTING LOC OF . ENTRY POINT TABLE SZ,H1 22,A0 . CLEAR LENGTH OF ENTRY . POINT TABLE IN FTI J AFIND . EXIT TRYP EX SAVLNK-1,A2 J SAMO AFIND . DL A1,SEQNBR . A1 GETS SEQUENCE NUMBER . A2 GETS STAT LXM X8,SAVEX8 . RESTORE MODIFIER PORTION OF X8 L A0,CORLOC . A0 = ADDRESS OF ITEM J RET1 . NORMAL RETURN TO USER SAVLNK. S,H2 A5,2,X11 S,H2 A5,3,X11 S,H1 A5,2,X11 OFF PFTIAX . / ON PFTIDX . . *** PROGRAM FILE TABLE ITEM DELETE *** ETID$* . L A3,ET . POINT TO ELEMENT TABLE . DESCRIPTORS IN THE FTI J PFTID . APTID$* . L A3,AT . POINT TO ASM PROC TABLE . DESCRIPTORS IN THE FTI J PFTID . CPTID$* . L A3,CT . J PFTID . FPTID$* . L A3,FT . J PFTID . EPTID$* . L A3,EP . PFTID . S X8,SAVEX8 . LMJ X8,TABCHK . SEE IF PF TABLE IN CORE S X11,X11SP . LMJ X11,SEARCH . FIND ITEM GIVEN IN A1 J DEXIT0 . NO FIND L A2,CORLOC . ADDR OF ITEM LMJ X11,DELE . SET DELETE BIT IN ITEM - SET CHG FLG TE A3,ET . ELT TABLE ACTIVE J DEXIT1 . NOPE L A1,SEQNBR . FETCH SEQ NO OF ELEMENT DELETED TNE A1,25,A0 . WAS IT LATEST ABSOLUTE SZ 25,A0 . YES, CLEAR FTI CELL DEXIT1 . L A2,STAT . A2 =LINK NBR,ADDR OF LAST ITEM SEARCHED LXM X11,X11SP . RESTORE MODIFIER PORTION OF X11 LXM X8,SAVEX8 . RESTORE MODIFIER PORTION OF X8 L A0,CORLOC . A0 = ADDRESS OF ITEM DELETED J RET1 . NORMAL RETURN TO USER DEXIT0 . LXM X11,X11SP . RESTORE X11 LXM X8,SAVEX8 . RESTORE X8 J RET0 . ERROR RETURN TO USER OFF PFTIDX . / ON WFTIX . . . WRITE FILE TABLE INDEX . WFTI$* . LA,U A3,6,A0 . A3 POINTS TO START OF FTI L,U R2,077 . A MASK TO PROTECT ITMSIZ L A4,PTSIZ1 . FETCH SIZE OF PTR TAB(213) LSSL A4,6 . MAKE ROOM FOR ITMSIZ TESTM . A,U A3,3 . MOVE TO NEXT TABLE L A5,DLENGT . TLE,U A5,141 . VOID TABLE J CKDONE . YES MLU A4,PTWORD . STUFF IN PTR SIZE S A5,PTWORD . TNZ CSBEG . HAS TABLE BEEN WRITTEN OUT J CKDONE . YES L,U A0,042 . NO ---- ERROR J RET0 . ERROR RETURN TO USER CKDONE . TE,U A3,21,A0 . LOOKED AT ALL TABLES? J TESTM . NO SZ FASTFLG . CLEAR FASTRAND FILE FLAG LA A5,WRITE . YES GO WRITE FTI OUT J FTIO . OFF WFTIX . / ON PFTNLX . ON PFTISX . . ************************************************************ LOOKUP . . THIS ROUTINE TAKES A SEQUENCE NUMBER AND GETS INTO CORE THE . SEGMENT WHICH CONTAINS THE ITEM CORRESPONDING TO THE SEQUENCE . NUMBER . INPUT ------ . A5 - SEQUENCE NUMBER TO BE FOUND . A4 - POSSIBLE LINK TYPE . OUTPUT ------ . A2 - ADDR OF ITEM IN CORE CORRESPONDING TO SEQ. NBR . CORLOC - ALSO CONTAINS ADDR OF ITEM . USES REGISTERS ----- . A2,A4,A5 . S,H1 A4,STAT . SAVE LINK TYPE L A2,SEQNBR . ITEM THAT CONTAINED THE POINTER S A5,SEQNBR . SAVE SEQ NBR TO FIND S,H2 A2,STAT . SAVE A2 L A4,DSTART . FETCH DRUM START ADDR OF PF TABLE A,U A4,PTSIZ2 . INCRE BY NBR OF SECTORS IN PTR TAB L R1,A4 . SAVE RESULT IN R1 AN,U A5,1 . MSI A5,ITMSIZ . SSL A4,36 . CLEAR A4 DI,U A4,28 . CONVERT TO SECTORS A A4,R1 . DS A4,ITMLOC . SAVE SECTORS AND NUMBER . OF WORDS LEFT OVER LOOK10 . L A5,DSBEG . SSL A5,6 . ISOLATE DSBEG AN A4,A5 . MIGHT ITEM BE IN CORE JN A4,GETSEG . NO WAY MSI,U A4,28 . MIGHT BE DO FINER CHECKING A A4,CSBEG . A A4,PTSIZE . A A4,ITMLOC+1 . THIS WAS NBR OF WORDS LEFT OVER S A4,A2 . SAVE THIS ADDR IT MAY BE GOOD S A4,CORLOC . DITTO AN A4,CSEND . DOES ADDR WE GENERATED OCCUR . IN BUFFER JP A4,GETSEG . NO THEREFORE ITEM NOT IN CORE A A4,ITMSIZ . ADD ON LENGTH OF ITEM TNE A3,CT . PLAYING WITH COBOL TABLE A,U A4,4 . YES ITEM MAY BE EXTENDED JZ A4,0,X8 . A4 < OR = TO ZERO - ITEM DESIRED JN A4,0,X8 . RESIDES ENTIRELY IN CORE . ITEM WHOLLY RESIDES IN CORE ON PREPF>1 . ITEM OVER-LAPS . IF THE EUB IS EQUAL TO DISC PREPPING . FACTOR AND ITEM OVERLAPS WE . CAN'T ELIMINATE RBW L A4,DPREPF . TNE,U A4,1 . LN A2,A4 . SET A FLG OFF PREPF>1 . GETSEG . L A5,WRITE . S X10,SAVEX10 . TZ CHANGE . HAS SEGMENT CHANGED LMJ X10,IOSEG . YES ,WRITE IT OUT L A4,ITMLOC . DRUM ADDR WHERE ITEM IS . ON PREPF>1 . TN A2 . A2 IS A FLAG TNZ DPREPF . J GETSEG20 . DON'T ELIMINATE RBW AND,U A4,-(PREPF-1) . MASSAGE ADDR TO GET SECTOR BOUNDRY TG A5,R1 . IS START OF ITEMS > RESULTANT ADDR L A4,A5 . NO, THEREFORE USE NEW ADDR OFF PREPF>1 . GETSEG20 . LSSL A4,6 . MAKE ROOM FOR CHANGE INDICATOR A A4,CHANGE . STUFF IN CHANGE S A4,DSBEG . L A5,READ . LMJ X10,IOSEG . GO READ SECTOR(S) LXM X10,SAVEX10 . L A4,ITMLOC . J LOOK10 . GO CHECK FOR ITEM IN NEW SEGMENT OFF PFTNLX . OFF PFTISX . . ******************************************************** . *********************** SEARCH ************************* . ********************************************************* SEARCH . S X11,X11S . SZ SEQNBR LMJ X8,FOLD . FOLD NAME TO GET PRINTER TABLE L,H2 A5,0,A2 . QUOTIENT DETERMINE HALF TO LUSE JNB A4,$+2 L,H1 A5,0,A2 SSL A4,36 . CLEAR A4, FOR LOOKUP JZ A5,NOSR1 . NO POINTER TABLE ENTRY ON SKIP . TNZ DSTART . J NOSR1 . OFF SKIP . LOOKE LMJ X8,LOOKUP . LMJ X11,FINDER J FIND1 . FIND RETURN JNZ A5,LOOKE NOSR1 . S,H1 A4,STAT . SAVE LINK TYPE S,H2 A2,STAT . SAVE ADDR OF LAST ITEM SEAECHED LXM,U X11,0 . RETURN+0 J SEXIT . FIND1 . LXM,U X11,1 . SEXIT . A X11,X11S . J 0,X11 . . . ********************************************************* . ******************** TABCHK ***************************** TABCHK. DS A0,FCT L A5,PFWORD$ TE A5,6,A0 J NOFTIA . TZ CSBEG J 0,X8 . TABCHK EXIT NOT . LXM X8,SAVEX8 . L,U A0,022 . ERROR CODE J RET0 . ERROR RETURN . ON PFTIAX . ON PFTIDX . . ********************************************************** . *********************** DELE ***************************** DELE. L,S1 A4,3,A2 OR,U A4,040 S,S1 A5,3,A2 LMJ X8,CHGIT . MARK SEGMENT CHANGE J 0,X11 . DELE EXIT . . ************************************************************ . ************************** CHGIT *************************** CHGIT. L,U A4,1 S A4,CHANGE J 0,X8 . CHGIT EXIT OFF PFTIAX . OFF PFTIDX . . ON PFTISX . . ************************************************************** FINDER . L A1,FCT+1 . FETCH ADDR OF SPKT DL A4,0,A1 . DTE A4,0,A2 J RELT . NO ON ETIAX . TE A3,ET J NAMCHK L,S3 A5,3,A1 . DO TYPE MATCH TE,S3 A5,3,A2 J RETYP . NO VERCK DL A4,4,A1 DJZ A4,$+3 DTE A4,4,A2 . DO VERSIONS MATCH J REVER . NO TN 3,A1 TN 3,A2 . CHECK FOR DELETES J 0,X11 . FIND REVER L,H1 A5,2,A2 L,U A4,3 J 1,X11 . NO FIND RETYP TG,U A5,5 J TYPA L,U A5,4 . PACKET TYPE SYMBOLIC TG,S3 A5,3,A2 J VERCK . ENTRY TYPE SYMBOLIC TOO TYPA L,U A4,2 TRY TYPE LINK L,H2 A5,3,A2 J 1,X11 . NO FIND OFF ETIAX . NAMCHK. TE A3,CT . COBOL TABLE MAY NEED EXTENDED MA J CONSR2 L,S1 A4,3,A1 XOR,S1 A4,3,A2 TEP,U A5,020 J RELT TOP,U A4,020 J CONSR2 DL A4,4,A2 DTE A4,4,A1 J RELT L A4,7,A2 TE A4,7,A1 J RELT CONSR2 TP 3,A2 . CHECK IF DELETES ALLOWED TP 3,A1 J 0,X11 . FIND RELT L,U A4,1 . TRY POINTER LINK L,H2 A5,2,A2 J 1,X11 . NO FIND . ************************************************************ FOLD. L A5,0,A1 . ADD LAST HALF NAME TO 1ST HALF A A5,1,A1 SSL A4,36 DI A4,PTSIZ1 A A5,CSBEG L A2,A5 J 0,X8 . FOLD EXIT OFF PFTISX . IOSEG . THIS ROUTINE PERFORMS READS/WRITES OF . SEGMENTS. WHEN AN IO ERROR OCCURS THE ROUTINE DOES NOT . RETURN TO THE CALLER, IT GOES TO TAG IOERR. . INPUT A5 - CONTAINS FUNCTION TO BE PERFORMED . DSBEG - CONTAINS THE STARTING SECTOR ADDR . CSBEG - CONTAINS STARTING BUFFER ADDR . CSEND - CONTAINS ENDING BUFFER ADDR+1 . DESTROYS THE CONTENTS OF REGISTERS A4,A5 . S A5,FUNC . LN A4,DSBEG . STARTING DRUM ADDR SSA A4,6 . DUMP LOWER 6 BITS SN A4,DRUMAD . I/O ON THIS SECTOR A A4,DSTART . OFFSET IN SECTORS MSI,U A4,28 . CONVERT TO WORDS A A4,DLENGT . S,H1 A4,ACW . NBR OF WORDS IN TABLE LN A4,CSBEG . STARTING ADDR OF BUFFER AN A4,PTSIZE . BY-PASS PTR TABLE SN,H2 A4,ACW . START ADDR OF DYNAMIC AREA OF BUFFER A A4,CSEND . NBR OF WORDS IN TABLE TLE,H1 A4,ACW . COMPARE SIZE OF TABLE WITH . SIZE OF BUFFER S,H1 A4,ACW . PERFORM I/O ON SMALLER SIZE BUFFER TZ,H1 ACW . DON'T FOOL WITH ZERO WORDS ER IOW$ . L A5,STATUS . FETCH STATUS FROM I/O OP JNZ A5,IOERRES . GO PROCESS ERROR THEN LEAVE SZ CHANGE . J 0,X10 . . . MEXITW . L A5,WRITE . FETCH WRITE FUNCTION MEXIT . SA A5,FUNC . SET UP FUNCTION ER IOW$ . LA A5,STATUS . FETCH STATUS OF OPERATION JNZ A5,IOERR . SOME KIND OF IO ERROR J RET1 . NORMAL RETURN TO USER END