.TITLE DISTIC - ROUTINE TO DISPLAY TIC MARKS ON GRIDS .IDENT 'DIST00' .PSECT DISTIC ; KEN DEMERS ; UTRC ; JANUARY 1980 ; THIS ROUTINE DISPLAYS TIC MARKS ON THE GRAPH. ; THE TIC MARKS ARE ACTUALLY SMALL CROSSES. THEY ; ARE DISPLAYED ONLY ALONG THE X AND Y GRIDS. ; CALLING FORMAT: ; CALL DISTIC(XTAB,YTAB) ; WHERE: ; XTAB = TABLE OF X DIST(F.P.),START(F.P.),DELTA(F.P.),NTICS ; YTAB = TABLE OF Y DIST(F.P.),START(F.P.),DELTA(F.P.),NTICS ; INTERNAL GLOBALS .GLOBL D$ISTIC ; EXTERNAL GLOBALS .GLOBL T$ICXOY,V$IRABS,X$MIN,Y$MIN .GLOBL X$RANGE,Y$RANGE,X$MXCOR,Y$MXCOR .GLOBL L$ABTIC,R$IDGX,R$IDGY .GLOBL T$ICVAL,T$ICBUM,M$AXALD ; ASSIGNMENTS AC0 = %0 ;FPP ACCULUMULATOR 0 AC1 = %1 AC2 = %2 YLBCOR = 23. ;Y COORD OF X LABELS CHWIDT = 14. + 4. ;WIDTH OF 1 CHAR(PLUS A LITTLE) CHWID3 = 14.*3 ;WIDTH OF 3 CHARS XMXALD = 6. ;MAX # OF X TIC LABELS ALLOWED YMXALD = 12. ;MAX # OF Y TIC LABELS ALLOWED D$ISTIC: MOV 2(R5),R4 ;R4= A(XTAB) MOV 4(R5),-(SP) ;SAVE A(YTAB) MOV R4,R0 ;R0= A(X DIST) .IF DF FP$ ;FP HW SETF ;SET FPP MODE TO S.P. SETI ;SET FPP MODE TO SHORT INTEGER LDF 4(R0),AC0 ;GET X START STF AC0,T$ICVAL ;SAVE F.P. VALUE OF TIC LDF (R0),AC0 ;GET X DIST STF AC0,T$ICBUM ;SAVE F.P. VALUE OF DIST LDF X$RANGE,AC1 ;AC1= (X$RANGE) LDCIF #X$MXCOR,AC0 ;AC0= F.P. OF ABS INT X M$AX .IFF ;NO FP HW MOV R4,(PC)+ ;SAVE A(XTAB) FOR OTS XTPTR: .WORD 0 MOV (SP),(PC)+ ;SAVE A(YTAB) FOR OTS YPTR: .WORD 0 MOV R4,(PC)+ ;SAVE A(X DIST) FOR OTS XDPTR: .WORD 0 ADD #4,R4 ;BUMP PTR TO X START MOV R4,(PC)+ ;SAVE A(X START) FOR OTS XSPTR: .WORD 0 CALL S$AVARG ;SAVE REGS JSR R4,P$OLISH ;ENTER OTS .WORD MOF$PM,XSPTR,T$ICVAL ;SAVE F.P. VALUE OF TIC .WORD MOF$PM,XDPTR,T$ICBUM ;SAVE F.P. VALUE OF DIST .WORD MOF$MM,X$RANGE,M$XRAN ;SET UP MAX ARG .WORD MOI$IS,X$MXCOR ;GET MAX RANGE .WORD CFI$ ;CONVERT IT TO FLOAT .WORD MOF$SM,A$IMAX ;SET UP MAX RANGE ARG .WORD .+2 ;RETURN FROM OTS CALL R$STARG ;RESTORE REGS .ENDC CALL V$IRABS ;CONVERT IT TO INTEGER ABS. X SPACING MOV R0,R2 ;SAVE X SPACING MOV R4,R0 ;R0= A(X DIST) CMP (R0)+,(R0)+ ;RO = A(START) .IF DF FP$ ;FP HW LDF (R0),AC2 ;GET START SUBF X$MIN,AC2 ;GET START RELATIVE TO XMIN STF AC2,(R0) ;SAVE IT BEFORE CONVETING TO GRID INT LDF X$RANGE,AC1 ;AC1= (X$RANGE) LDCIF #X$MXCOR,AC0 ;AC0= F.P. OF ABS INT X M$AX .IFF CALL S$AVARG ;SAVE REGS JSR R4,P$OLISH ;ENTER OTS .WORD MOF$PS,XSPTR ;GET X START .WORD SUF$MS,X$MIN ;GET START RELATIVE TO X MIN .WORD MOF$SP,XSPTR ;SAVE IT BEFORE CONVERTING TO GRID INT .WORD MOF$MM,X$RANGE,M$XRAN ;SET UP MAX ARG .WORD MOI$IS,X$MXCOR ;GET MAX RANGE .WORD CFI$ ;CONVERT IT TO FLOAT .WORD MOF$SM,A$IMAX ;SET UP MAX RANGE ARG .WORD .+2 ;RETURN FROM OTS CALL R$STARG ;RESTORE REGS .ENDC CALL V$IRABS ;CONVERT IT TO INTEGER ABS. X SPACING ADD #R$IDGX,R0 ;COMPENSATE FOR RIDGE MOV 8.(R4),R1 ;R1= X NTICS MOV R0,R4 ;R4= INT X START CLR R3 ;FLG=0= X GRID MOV #R$IDGY,R5 ;R5= STARTING Y COORD CALL T$ICXOY ;PLOT X TICS MOV #YLBCOR,R5 ;R5= Y COORD OF X TIC LABELS MOV #XMXALD,M$AXALD ;INIT MAX # OF TIC LABELS ALLOWED CALL L$ABTIC ;LABEL X TICS MOV (SP)+,R5 ;R5= A(YTAB) MOV R5,R0 ;R0= A(YTAB)=A(DIST) .IF DF FP$ ;FP HW LDF 4(R0),AC0 ;GET Y START STF AC0,T$ICVAL ;SAVE F.P. VALUE OF TIC LDF (R0),AC0 ;GET Y DIST STF AC0,T$ICBUM ;SAVE F.P. VALUE OF DIST LDF Y$RANGE,AC1 ;AC1= (Y$RANGE) LDCIF #Y$MXCOR,AC0 ;AC0= F.P. OF ABS INT Y M$AX .IFF MOV R0,R4 ;GET ADDR OF YTAB MOV R4,(PC)+ ;SAVE Y DIST FOR OTS YDPTR: .WORD 0 ADD #4,R4 ;GET ADDR OF Y START MOV R4,(PC)+ ;SAVE A(Y START) FOR OTS YSPTR: .WORD 0 CALL S$AVARG ;SAVE REGS JSR R4,P$OLISH ;ENTER OTS .WORD MOF$PM,YSPTR,T$ICVAL ;SAVE F.P. VALUE OF TIC .WORD MOF$PM,YDPTR,T$ICBUM ;SAVE F.P. VALUE OF DIST .WORD MOF$MM,X$RANGE,M$XRAN ;SET UP MAX ARG .WORD MOI$IS,X$MXCOR ;GET MAX RANGE .WORD CFI$ ;CONVERT IT TO FLOAT .WORD MOF$SM,A$IMAX ;SET UP MAX RANGE ARG .WORD .+2 ;RETURN FROM OTS CALL R$STARG ;RESTORE REGS .ENDC CALL V$IRABS ;CONVERT IT TO INTEGER ABS. Y SPACING MOV R0,R2 ;SAVE Y SPACING MOV R5,R0 ;R0= A(Y DIST) CMP (R0)+,(R0)+ ;R0= A(Y START) .IF DF FP$ ;FP HW LDF (R0),AC2 ;GET START SUBF Y$MIN,AC2 ;GET START RELATIVE TO YMIN STF AC2,(R0) ;SAVE IT BEFORE CONVETING TO GRID INT LDF Y$RANGE,AC1 ;AC1= (Y$RANGE) LDCIF #Y$MXCOR,AC0 ;AC0= F.P. OF ABS INT Y M$AX .IFF CALL S$AVARG ;SAVE REGS JSR R4,P$OLISH ;ENTER OTS .WORD MOF$PS,YSPTR ;GET X START .WORD SUF$MS,Y$MIN ;GET START RELATIVE TO X MIN .WORD MOF$SP,YSPTR ;SAVE IT BEFORE CONVERTING TO GRID INT .WORD MOF$MM,Y$RANGE,M$XRAN ;SET UP MAX ARG .WORD MOI$IS,Y$MXCOR ;GET MAX RANGE .WORD CFI$ ;CONVERT IT TO FLOAT .WORD MOF$SM,A$IMAX ;SET UP MAX RANGE ARG .WORD .+2 ;RETURN FROM OTS CALL R$STARG ;RESTORE REGS .ENDC CALL V$IRABS ;CONVERT IT TO INTEGER ABS. Y SPACING ADD #R$IDGY,R0 ;COMPENSATE FOR RIDGE MOV 8.(R5),R1 ;R1= Y NTICS MOV R0,R5 ;R5= Y START (INT) MOV #1,R3 ;FLG=1= DO Y GRID MOV #R$IDGX,R4 ;R4= X COORD CALL T$ICXOY ;PLOT Y TICS MOV #YMXALD,M$AXALD ;INIT MAX # OF TIC LABELS ALLOWED CALL L$ABTIC ;LABEL Y TICS RETURN .END