.TITLE MN09.. NODE MANIPULATION ROUTINES .IDENT /MN09../ ; .PAGE ; N$CREATE:: ;GENERATE A NEW NODE IN TABLE ; ; ENTRY CONDITIONS ; R0 = SIZE IN BYTES REQUIRED BY NODE ; R1 = MARKERS TO LOCATE NODE WITH ; ; EXIT CONDITIONS ; R0 -> NEW NODE ACCESS ADDRESS IF STATUS = SUCCESS ; CALL N$SETUP ;CHECK IF SYSTEM SET UP IFERROR 60$ ;J IF SYSTEM NOT SET UP 10$: SAVE R1,R2 ;PROTECT REGISTERS BIT #1,R0 ;IS SIZE EVEN BEQ 20$ ;J IF EVEN INC R0 ;MAKE SIZE EVEN 20$: TST R0 ;IS SIZE TO BE RESERVED <= 0 BGT 30$ ;J IF VALID SIZE MOV #2,R0 ;FORCE TO MINIMUM DEFAULT SIZE 2 BYTES 30$: MOV R0,R2 ;HOLD SIZE TO BE RESERVED ADD #6,R0 ;OFFSET TO CATER FOR HEADER CMP NFREEB,R0 ;IS THERE SUFFICIENT SPACE FOR NODE BLT 40$ ;J IF NO FREE SPACE MOV NLASTADD,NPRESENT ;LOAD UP POSITION OF NEW NODE ADD R0,NLASTADD ;LOCATE POSITION FOR TERMINTING NODE ADD R0,NUSEDB ;INCREMENT NUMBER OF BYTES USED SUB R0,NFREEB ;REDUCE NUMBER OF FREE BYTES IN TABLE INC NNODE ;INCREMENT NUMBER OF NODE CREATED MOV NLASTADD,R0 ;HOLD POSITION OF LAST NODE CLR (R0)+ ;SET UP TERMINATION NODE CLR (R0)+ CLR @R0 ; MOV NPRESENT,R0 ;HOLD NEW NODE START ADDRESS MOV R0,NNEXT ;HOLD START FOR NEXT ACCESS MOV R1,@R0 ;LOAD MARKERS INTO MARKERS WORD BIC #100000,(R0)+ ;REMOVE DELETE FLAG IF SET MOV R2,(R0)+ ;HOLD NODE MAX SIZE CLR @R0 ;SET NODE USED BYTES = ZERO SETSUCCESS BR 50$ 40$: SETERROR 50$: UNSAVE R1,R2 60$: RETURN ; ; ; .END ; ; ;