.TITLE STORE .GLOBL VARTYP,NAMCTR,ENTCTR,VNM50 .GLOBL STOLBL,STOVAR,VAR,RAD50P,VRSTPT,LOWPTR .GLOBL HIGPTR,LINENO,DUMP,PNMFLG,PNAME .PSECT STORE,I,RO,GBL .PAGE ; THIS ROUTINE USESES ALL OF MEMOREY AVALABLE-NOT ; OTHERWISE TAKEN UP WITH THIS PROGRAMS CODEING AND OTHER BUFFERS ; HANDLERS THE MONITOR ETC AND USED IT TO STORE VAR NAMES AND ; HOW THEY ARE USED-THERE ARE TWO STACKES HERE-ONR ; STARTING AT THE LOW END OF FREE MEMORY WORKING UP TO ; STORE THE ARRAY OF VARIABLE NAMES AND THE OTHER FROM ; HIGH MEMORY GOING DOWN STOREING LINE NUMBERS AND HOW ; USED ; THE FORMAT FOR THE VAR NAME STORAGE ELEMENT IS ; LOW MEM ADDR- POINTER POINTS HERE VAR NAM(R 50 HIGH) ; VAR NAM(R 50 LOW) ; STORAGE LOCATION OF NEXT VAR IN ALPB ORDER-NEXT VAR ; LOC OF ELEMENT OF HOW USED 1ST TIME 1ST USE ADDR ; LOC OF LAST USE OF VAR ELEMENT LAST USE ADDR ; ; ; THE HOW USED ELEMENTS HAVE THE FOLLOWING FORMAT ; LOWW MEM ADDR LINE NUMBER ; HOW USED ; POINTER PONTS HERE (VALUE=0 IF LAST) NEXT USE OF VAR ELEMNT ; ; STOLBL: STOVAR: MOV #VAR,R0 ; CONVERT VAR NAME TO RADIX 50 MOV #VNM50,R1 JSR PC,RAD50P ; AND STORE IN ARRAY VNM50 ADD #2,R1 JSR PC,RAD50P TST PNMFLG ; IS THE NEXT VAR NAME A PROGRAM NAME BEQ 1$ ; SKIP IF NOT MOV VNM50,PNAME ; ELSE SAVE IT MOV VNM50+2,PNAME+2 1$: TST VRSTPT ; IS THIS THE FIRST ENTRY??? BEQ FSTIM ; IF YES HANDLE DIFERENTLY MOV #VNM50,R0 ; GET READY TO CHECK IF VAR ALREADY ; ENTERED IN TABLE MOV #VRSTPT-4,R1 ; FOR THIS PART ; R0=ADDR VNM50 ; R1=ADD OF LAST V NAM ELEMENT ; R2=ADD OF CURRENT EXMINED ELEMT ; R3=ADDR OF NEXT EXAMINED ELEMNT MOV VRSTPT,R2 ; SET UP REGISTERS MOV 4(R2),R3 CMPRVR: CMP (R2),(R0) ; COMPARE VARNAME WITH THAT IN ELEMENT BHI ENTRVN ; VARNAME IN ELEMENT HAS NAME ; FURTHER DWN THE ALPHABET THAN THAT IN ; VARNAME-INSERT NEW VARNAME BETWEEN ; ELEMENT CURRENTLY BEING EXAMINED ; AND LAST ONE BLO NXVRLB ; HAVE NOT REACHED END OF SEARCH YET- ; VAR NAME IN CURRENT ELEMNT NOT AS FAR DOWN ; AS THAT BEING SEARCHED FOR CMP 2(R2),2(R0) ; HIGH ORDER PARTS OF NAMES SAME- ; CHECK LOW ORDER BHI ENTRVN BLO NXVRLB BR ETRUSE ; NAMES SAME-ENTER HOWUSED IN USE TABLE FSTIM: MOV #VRSTPT-4,R1 ; SIMULATE VAR NAME ELEMENT ABOUT VRSTPT ENTEND: MOV #VNM50,R0 ; ENTRY POINT FOR HAVEING REACHED ; END OF TABLE AND NO MATCHING NAME FOUND ; SO NEW NAME ATTACHEDTO END MOV LOWPTR,4(R1) ; UPDATE NEXT VAR ADDR ; TO NEXT AVAILALE ELEMENT SPACE AVAILABLE MOV LOWPTR,R2 ; AND SET ADDR OF NEW ELMENT IN R2 MOV (R0)+,(R2) MOV (R0)+,2(R2) ; FILL IN VARNAM CLR 4(R2) ; NO NEXT VAR SO THIS =0 MOV HIGPTR,6(R2) ; FILLIN FIRST USE WITH NEXT AVAIL ; USE ELEMENT ADDR CLR 10(R2) ; SIGNAL THAT NO ACTUAL ENTRY HAS BEEN MADE ADD #12,LOWPTR ; INC NEXT AVAIL POINTER TO POINT TO ; NEXT FREE LOCATION FOR ELEMENT INC NAMCTR BR ETRUSE ; ENTER THE HOW USED ELEMENT IN ITS TABLE NXVRLB: MOV R2,R1 ; SHIFT ADDRESSES TO CHECK NEXT ELEMENT MOV R3,R2 BEQ ENTEND ; IF LAST ELEMENT CHECK WAS LAST ELEMENT ; IN DAISY CHAIN-ENTER VARNAM AT END MOV 4(R2),R3 BR CMPRVR ENTRVN: MOV LOWPTR,R4 ; ENTER A NEW VARNAM BETWEEN ; CURRENT AND LAST ELEMENTS EXAMINED MOV R4,4(R1) ; SET NEXT VAR ADDR OF LAST ELEMENT ; TO NEW VAR ELEMENT MOV R2,4(R4) ; SET ELEMENT ADDR OF CURRENT ELENT ; TO NEXT VAR OF NEW ELEMENT MOV R4,R2 ; SET NEW ELEMENT AS CURRENT ELEMENT MOV #VNM50,R0 MOV (R0)+,(R2) MOV (R0)+,2(R2) ; INSERT VAR NAM MOV HIGPTR,6(R2) ; INSERT ADDR OF ; NEXT USE ELEMENT ADD #12,LOWPTR INC NAMCTR CLR 10(R2) ; SIGAL NO ENTRIES YET ETRUSE: ; THIS IS THE ROUTINE TO ENTER A HOWUSED ELEMENT INTO THE PROPERVTABLE TST 10(R2) ; FIRST ENTRY FOR VARNAM BEQ FSTUSE ; YES MOV 10(R2),R3 ; GET LAST USE ELEMENT ADDR CMP LINENO,-4(R3);HASE THIS VAR NAME BEEN USED BEFORE ON ; CURRENT LINE??? BEQ OVFLTS ; IF YES DO NOT ENTER-EACH VAR GETS ONLY ; ONE ENTRY PER LINE OF CODE-MAX MOV HIGPTR,R4 ; GET NEW ELENENT MOV R4,10(R2) ; INSERT NEW LAST USE IN VAR ELEMENT MOV R4,(R3) ; INSERT NEXT USE IN LAST USE ELEMENT FNTPT: CLR (R4) ; INDICATE LAST USE ELEMENT-=0 MOV VARTYP,-2(R4) ; FILL IN ELEMENT MOV LINENO,-4(R4) SUB #6,HIGPTR ; SET POINTER TO NEXT FREE ELEMENT INC ENTCTR BR OVFLTS ; DONE-CHECK FOR OVERFLOW FSTUSE: MOV HIGPTR,R4 ; SET UP FOR 1ST ENTRY MOV R4,10(R2) ; SET LAST USE IN VAR ELEMENT BR FNTPT OVFLTS: MOV LOWPTR,R0 ; CHECT TO SEE IF TABLE FULL ADD #20,R0 ; IF ROOM FOR 1 OF EACH KIND OF ; ELEMENT IS PRESENT-OK CMP R0,HIGPTR BLO NOOVFL JSR PC,DUMP ; OUT OF ROOM-DUMP TABLES NOOVFL: RTS PC .END