.TITLE STORE .MCALL ..V2..,.REGDEF ..V2.. .REGDEF .GLOBL VARTYP .GLOBL STOLBL,STOVAR,VAR,LABL,RAD50P,VRSTPT,LOWPTR .GLOBL HIGPTR,LINENO,DUMP .CSECT STORE ; ;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 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 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 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 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 VNM50: .WORD 0,0 .END