.NLIST TTM .TITLE HISET .IDENT /RICE02/ ; ; CALL HISET(NHIST,IXSIZE,IYSIZE) ; ; IYSIZE = 0 FOR 1 DIM HISTS ; ; Conditionals ; $MMGT=1 ; To enable memory management code ; PCOUNT: .WORD 0 ; NUMBER OF PARAMS SIZE: .WORD 0 ; SIZE OF HIST AREA ITYPE: .WORD 0 ; TYPE OF HIST HISET:: MOV #^RET ,-(SP) ; STORE SUBROUTINE NAME MOV #^RHIS,R4 JSR R4,NAM$ ; SET UP FOR TRACEBACK MOV (R5)+,PCOUNT ; NUMBER OF PARAM MOV #401,ITYPE ; DEFAULT TYPE CLR R0 TST SWC+2 ; TABLE EXIST? BNE 7$ ; YES ; ; SET UP FIRST TIME THROUGH ; MOV R5,-(SP) ; SAVE R5 MOV (SP)+,R5 ; RESTORE R5 MOV @HI$BUF,R0 ; ZERO PARAM LIST MOVB 1(R0),R3 ; # OF HIST? BIC #177400,R3 ; Clear extra bits BGT 3$ ; YES MOV #64.,R3 ; NO, GO WITH DEFAULT 3$: MOVB R3,1(R0) INC R3 ; ADD 1 FOR HIST#0 ASL R3 ASL R3 ; # OF BYTES IN TABLE JSR PC,BREQW ; GET BUFFER BCC 2$ ; BUFF OK, SAVE ADDRESS 1$: RETURN ; ERROR OCURRED, EXIT! 2$: MOV R3,HI$BUF ; REQUEST #+ STORE 64 WORD BLOCK ADD. MOVB 1(R0),R1 BIC #177400,R1 ; Clear extra bits INC R1 6$: MOV HI$BUF-2,(R3)+ ; INITIALLY NO PARAM CLR (R3)+ ; NO HIST SIZE SOB R1,6$ MOVB 1(R0),SWC+2 ; HIST TABLE + 1 ; ; Here we set up table of markers ; TST MK$BUF ; Markers set up? BNE 7$ ; Yes MOVB 1(R0),R1 ; Get number of hists BIC #177400,R1 ; Clear extra bits ASL R1 ; Number of markers is 2 times MOV R1,R3 ; Will be number of bytes needed MUL #6,R3 ; Buffer size needed BCS 7$ ; Too big CALL BREQW ; Get buffer BCS 7$ ; None available MOV R1,MK$BUF ; Save size MOV R3,MK$BUF+2 ; Table of hist # ASL R1 ; Number of bytes/hist table ADD R1,R3 ; Table of markers MOV R3,MK$BUF+4 ; Save it ; ; SECTION TO GET INDIVIDUAL HIST BUFFER ; 7$: DECB PCOUNT ; NUMBER OF PARAM LEFT BLT 1$ ; INPUT ERROR MOV @(R5)+,R0 ; HIST# TOO SMALL? BLE 1$ ; Yes, terminate CMP R0,SWC+2 ; IS HIST# TOO BIG? BHI 1$ ; YES, TERMINATE SET UP DECB PCOUNT ; TEST IF 2'ND PARAM BLT 1$ MOV @(R5)+,R1 ; NO OF PST PER LINE(IXSIZE) BLE 1$ ; IT IS TOO SMALL CMP R1,#1024. ; IS X SIZE TOO LARGE BHI 1$ ; YES MOV R1,R3 ASL R0 ; NOW BYTE ADDRESS ASL R0 ; NOW IS TABLE ADDRESS ADD HI$BUF,R0 ; POINTS TO ADD OF PARAM LIST TST @(R0) ; TEST IF HIST ALREADY EXISTS BNE 1$ ; IT DOES DO NOT CONTINUE DECB PCOUNT ; 2 DIM NEEDED? BLT FIN MOV (R5)+,R4 ; NEXT PARAM CMP R4,#-1 ; NULL PARAM? BEQ 12$ ; NO 2 DIM MOV (R4),R4 ; 2 DIM SIZE BLE 12$ ; NON ZERO IS 2 DIMENSIONAL CMP R4,#127. ; IS Y SIZE TOO BIG BHI 1$ ; YES CMP R4,#1 ; IS IT REALLY 1 DIM? BEQ 12$ ; YES MUL R4,R3 ; DIMENSION = IXS * IYS BCS 1$ ; PRODUCT TOO BIG MOVB R4,ITYPE 12$: DECB PCOUNT ; MORE PARAM? BLT FIN ; NO MOV (R5)+,R4 ; NEXT PARAM CMP R4,#-1 ; PARAM? BEQ FIN ; NO MOVB (R4),R4 ; Hist type? BIC #177770,R4 ; Stripped BEQ FIN ; Nope MOVB R4,ITYPE+1 ; Yup CMP R4,#1 ; Type 1? BEQ FIN ; No ASL R3 ; YES, IT IS MULTIPLE WORD TYPE FIN: ADD #13.,R3 ; ADD IN # OF WORDS OF HEADER ASL R3 ; NOW IS BYTE COUNT MOV R3,SIZE .ifdf $MMGT ; Do with memory management CALL BREQEW ; TRY EXTENDED MEMORY BCS 1$ ; NOW TRY TASK MEMORY MOV R4,(R0)+ MOV SIZE,(R0) ; SIZE OF AREA BIS #100000,(R0) ; IN DYNAMIC MEMORY BR 2$ .endc 1$: CALL BREQW ; TRY TO GET BUFFER FROM TASK MEM. BCS 11$ ; NO SUCCESS, GIVE UP!!! MOV R3,(R0)+ ; YES, GOT BUFFER 2$: MOV ITYPE,(R3)+ ; Type into buffer MOV #24.,(R3)+ ; POINTS TO DATA AREA MOV R1,(R3)+ ; 1 DIM SIZE MOV #4,R4 ; # OF SCALE PARAM 3$: MOV #1,(R3)+ ; SET UP INITIAL SCALE FAC SOB R4,3$ ; CONTINUE TILL DONE MOV #5.,R4 4$: MOV (PC)+,(R3)+ ; FILL IN 10 CHAR BLANK TITLE .ASCII / / SOB R4,4$ CLC 11$: RETURN ; ; ; CALL LABLH(IHIS,LABEL) LABEL = 10 CHAR LABEL ; HILABL:: LABLH:: MOV #^RABL,-(SP) MOV #^RHIL,R4 JSR R4,NAM$ ;SET UP TRACEBACK MOV #2,R0 ;ONLY 1 PARAM JSR PC,R5CHEK JSR PC,SWIT ;GET ADDRESS OF DESTINATION BCS END ;NO HISTOGRAM TST (R0) ;HIST EXISTS? BNE 1$ ;YES TST @-2(R5) ;WAS IT HIST#0? BNE END ;NO, DO NOT CONTINUE 1$: MOV (R5)+,R1 ;TITLE SOURCE ADD #14.,R0 ;ADDRESS OF TITLE MOV #10.,R3 ;NO OF BYTES IN LABEL 4$: MOVB (R1)+,R4 ;GET 1 BYTE BICB #200,R4 ;REMOVE EXTRANEOUS BIT CMPB R4,#40 ;IS IT BLANK OR GREATER? BLT END ;NO MOVB R4,(R0)+ ;MOVE CHAR TO LABEL BUFFER SOB R3,4$ END: RTS PC .ifdf $MMGT BREQEW:: MOV R0,-(SP) MOV R1,-(SP) CMP R3,#17700 ;IS SIZE TOO BIG? BHI 10$ ;YES MOV HI$FRH+4,R0 ;THE ADDRESS OF FREE BLOCKS MOV R0,R4 MOV R3,R1 ;THE NUMBER OF BYTES REQUESTED CALL SWC1 ;MAP TO THE AREA BCS 10$ ADD R3,HI$FRH+4 ;NEXT LOCATION IN POOL MOV R3,R1 ;NUMBER OF BYTES ASR R1 ;NOW NUMBER OF WORDS MOV R0,R3 ;BOTTOM ADDRESS 4$: CLR (R0)+ ;CLEAR THE BUFFER SOB R1,4$ CLC ;NO ERROR INDICATOR 5$: MOV (SP)+,R1 MOV (SP)+,R0 RETURN 10$: SEC ;ERROR EXIT BR 5$ .endc PGET: DECB PCOUNT ;2 DIM NEEDED? BLT 10$ MOV (R5)+,R4 ;NEXT PARAM CMP R4,#-1 ;NULL PARAM? BEQ 10$ ;YES MOV (R4),R4 ;2 DIM SIZE CLC ;PARAM OK RETURN 10$: SEC ;NO PARAM RETURN .END