.TITLE HIEXT .LIST MEB .MCALL CRRG$S,CRAW$S ; ; CALL HIEXT([IH],[ISIZE],[IMARK]) ; ; IH = # OF HISTS TO SET UP (DEFAULT 64.) ; ISIZE = EXTRA SPACE TO ALLOTT (DEFAULT 0) ; IMARK = Number of markers to set up (default=IH*2) ; ; Conditionals ;$MMGT=1 ; Enable this for memory management ; HIEXT:: MOVB (R5),R4 ; NUMBER OF PARAM TST (R5)+ DEC R4 ; MORE PARAM? BLT 11$ ; NO MORE MOV (R5)+,R1 ; NEXT PARAM CMP R1,#-1 ; NUL? BEQ 7$ ; YES MOV (R1),R1 ; GET VALUE TST SWC+2 ; HISTS ALREADY SET UP? BNE 7$ ; YES MOV @HI$BUF,R0 ; ZEROETH HIST MOVB R1,1(R0) 7$: DEC R4 ; More params? BLT 11$ ; No MOV (R5)+,R0 ; NEXT PARAM .ifdf $MMGT CMP R0,#-1 ; NUL? BEQ MARKER ; YES MOV (R0),R0 ; REGION SIZE BIC #176000,R0 ; LIMIT SIZE BEQ MARKER MOV R0,SIZE 10$: CRRG$S #RDB ; Create a region for extra space BCS MARKER ; None created, skip saving it MOV RDB,HI$WDW+6. ; Save current window CRAW$S #HI$WDW ; Create window and map it .endc BR MARKER ; NOW DO MARKERS 11$: RETURN MARKER: DEC R4 ; More params? BLT 1$ ; No MOV (R5),R0 ; Next param address CMP R0,#-1 ; Exists? BEQ 1$ ; No MOV (R0),R0 ; Number of markers desired BEQ 1$ ; None TST MK$BUF ; Do they exist already? BNE 1$ ; Yes, skip it MOV R0,R3 ; Number desired MUL #6,R3 ; R3=necessary talbe size BCS 1$ ; Too big CALL BREQW ; Get table BCS 1$ ; Too big MOV R0,MK$BUF ; Save size MOV R3,MK$BUF+2 ; Hist table ASL R0 ; Now is word index ADD R0,R3 ; Points to value table MOV R3,MK$BUF+4 ; Save it 1$: RETURN .ifdf $MMGT RDB: .WORD 0 SIZE: .WORD 500. .WORD 0,0 .RAD50 /GEN / .WORD RS.ATT!RS.RED!RS.WRT!RS.DEL .WORD 0 .endc .END