.TITLE ADDTXT .IDENT /00/ .PSECT CODE,RO ; ; VERSION 00 ; ; TOM GETZINGER 30-DEC-79 ; ; THIS ROUTINE ADDS AN ENTRY TO THE TEXT LIST ; ; INPUTS: ; R5 = 2 FOR A WORD, 1 FOR A BYTE ; CRNADR = TEXT ADDRESS ; R3 -> VALUE ; R4 = # OF BYTES POINTED TO BY R3 ; ; OUTPUTS: ; CRNADR = CRNADR + R5 ; R3 = R3 + R5 ; R4 = R4 -R5 ; TEXT IS ADDED TO LINKED LIST ; LSTTXT IS UPDATED TO POINT TO IT ; "ZERO" SET IF R4 IS ZERO (NO MORE TEXT) ; ADDTXT:: MOV #FREEHD,R0 ; POINT TO FREE MEMORY LISTHEAD MOV #T.LEN,R1 CALL $RQCB ; ALLOCATE A TEXT ENTRY BCC 10$ TRAP NOMEM ; "NO DYNAMIC MEMORY" 10$: CLR (R0) ; CLEAR THE LINK TST FRSTXT ; IS THERE ANY TEXT? BNE 20$ ; YES MOV R0,FRSTXT ; NO, SO THIS IS THE FIRST BR 30$ 20$: MOV R0,@LSTTXT ; LINK THE TEXT IN 30$: MOV R0,LSTTXT ; THE NEW TEXT IS THE LAST TEXT MOV CRNADR,T.ADDR(R0) ; SETUP THE ADDRESS ADD R5,CRNADR ; INCREMENT THE ADDRESS CLR T.FLAG(R0) CLR T.STR ; THERE IS NO STRING YET CMP R5,#1 ; IS THIS A BYTE? BNE 40$ ; NO MOV #TF.BYT,T.FLAG(R0) ; YES, INDICATE THAT MOVB (R3)+,T.VAL(R0) ; COPY THE VALUE CLRB T.VAL+1(R0) ; CLEAR UPPER BYTE BR 50$ 40$: MOVB (R3)+,T.VAL(R0) ; COPY THE VALUE MOVB (R3)+,T.VAL+1(R0) 50$: SUB R5,R4 ; ADJUST THE LENGTH RETURN ; AND WE'RE DONE .END