10000 DEF FNT0%(X0,Y0,F%)\ ON 3%-ABS(F%) GOTO 10020,10010,10030 !INITIALIZATION FUNCTION: (X0,Y0) ORIGIN OF FIGURE IN INCHES [ (0,0) IS LOWER LEFT CORNER] F% FLAG AS DEFINED BELOW 10010 OPEN 'KB9:' FOR OUTPUT AS FILE 11%\ OPEN '$TEKSYM.STD' FOR INPUT AS FILE 12%\ INPUT'X-LEN,Y-LEN (INCHES)';O3(0%),O3(1%)\ O3(O1%)=9999./O3(O1%) FOR O1%=0% TO 1%\ O3(2%)=2*(O3(0%)+O3(1%)) !ABS(F%)=1% CAUSES INITIALIZATION 10020 O1(1%)=X0\ O2(1%)=Y0\ O1(2%),O2(2%)=0\ O1(3%)=O3(0%)\ O2(3%)=O3(1%)\ O1(4%),O2(4%)=1%\ O1%,O5%=-1%\ O1(5%)=X0*O3(0%)\ O2(5%)=Y0*O3(1%) !ABS(F%)=2% RESETS ORIGIN TO (X0,Y0) 10030 IF F%=0% THEN FNT0%=FNT7%(X0,Y0,-1%) !F%=0 ENDS PLOT; O3() - 0,1 UNITS/INCH IN X&Y RESP. 2 MAX PEN MOTION 3,4,5 TEMPS USED IN 10800-10860 10040 FNEND !O1() AND O2() STOREPARAMETERS FOR X&Y RESP.; 0 - RESERVED; 1 - ORIGIN (INCHES), (X0,Y0); 2 - ORIGIN (USER UNITS); 3 - USER UNITS/INCH; 4,5 - CONVERSION FACTORS O0%=TEMP FOR HP; O1% - FLAG=ALPHA(-1)/GRAPH(0) 10100 DEF FNT1%(P0,Q0,P1,Q1)\ O1(2%)=P0 \O2(2%)=Q0\ O1(3%)=P1 \O2(3%)=Q1\ O1(4%)=O3(0%)/P1\O2(4%)=O3(1%)/Q1\ O1(5%)=P1*O1(1%)-P0\ O2(5%)=Q1*O2(1%)-Q0 10110 FNEND !FUNCTION TO SCALE THE DATA\ (P0,Q0) ORIGIN IN USER UNITS (P1,Q1) USER UNITS/INCH IN X AND Y DIRECTION, RESP. THIS FUNCTION NOT USED IF PLOTTING IN PLOTTER UNITS 10200 DEF FNT2%(X,Y,F%,G%)\ IF ABS(F%)<=1% THEN GOSUB 10880 ELSE IF O1% THEN GOSUB 10870 !SEND CHR$(29+128) IF IN ALPHA MODE OR DARK VECTOR REQUESTED 10210 IF F% THEN O3%=O1(4%)*(X+O1(5%))\ O4%=O2(4%)*(Y+O2(5%))\ GOTO 10230 10220 O4%=789%-X*22%\ O3%=14%*Y-14%\ O4%=(O3(1%)*O4%)/140.\ O3%=(O3(0%)*03%)/140. !F%= -2 LINE/ALPHA -1 DARK/ALPHA 0 CURSOR TO ROW X, COL Y 1 DARK/GRAPH 2 LINE/GRAPH 10230 O1=O3%/O3(0%)-O1(1%)\ O2=O4%/O3(1%)-O2(1%)\ GOSUB 10800\ FNT2%=FNT6%(O1,O2,0.,.10,CHR$(15%+G%)) IF G%\ IF F%<=0% THEN GOSUB 10890 !PRINT SYMBOL FOR G%>0; RETURN TO ALPHA MODE FOR F%<=0 10240 FNEND 10300 DEF FNT3%(F%)\ IF F% THEN GOSUB 10910 ELSE PRINT 'GRAPHIC INPUT BEING IGNORED' 10310 FNEND !RETURNS CURSOR LOCATION IN O1 AND O2 AS THE LAST VALUE OF O3% AND O4%, PRESUMABLY THE CURRENT PEN LOCATION. 10400 DEF FNT4%(X0,Y0,A,L,L$)\ O1(0%)=X0\ O2(0%)=Y0\ O7=A*.0174533\ O8=SIN(O7)\ O7=COS(O7) !DRAW AXIS OF LENGTH ABS(L) THRU (X0,Y0) AT ANGLE A; LABEL L$ ON SGN(L) SIDE OF AXIS 10410 O0(0%)=SGN(L)*.1\ L=ABS(L)\ O0(1%)=-O8*O0(0%)\ O0(2%)=O7*O0(0%)\ FNT4%=FNT7%(X0+O0(1%),Y0+O0(2%),1%)\ FNT4%=FNT7%(X0,Y0,2%)\ GOSUB 10910\ O0(3%)=O1\ O0(4%)=O2 10420 FOR O7%=1% TO INT(L)\ X0=X0+O7\ Y0=Y0+O8\ FNT4%=FNT7%(X0,Y0,2%)+FNT7%(X0+O0(1%),Y0+O0(2%),2%)+FNT7%(X0,Y0,2%) !DRAW AXIS WITH TICKS AN INCH APART 10430 NEXT O7%\ FNT4%=FNT7%(O1(0%)+L*O7,O2(0%)+L*O8,-2%)\ GOTO 10480 UNLESS LEN(L$)\ Y0=O0(3%)\ X0=O1(3%)\ IF ABS(O8)==1 THEN Y0=O0(4%)\ X0=O2(3%) !FINISH AXIS; GET DXVAL FROM O1 UNLESS A Y-AXIS ASKED FOR 10440 O0(4%)=SGN(X0)\ X0=ABS(X0)\ X0=X0/10 FOR O7%=0% UNTIL X0<99\ X0=X0*10 FOR O8%=O7% STEP -1% UNTIL X0>.01\ O0(5%)=O8% !DETERMINE EXPONENT FOR AXIS LABELS (FROM CALCOMP) 10450 O0(3%)=Y0*10^-O8%\ O0(4%)=X0*O0(4%)\ Y0=O0(0%)*(2-5*O0(0%))\ X0=O1(0%)-.1*O7-O8*Y0\ Y0=O2(0%)-.1*O8+O7*Y0 !INIT FOR LABELING TICK MARKS 10460 FOR O9%=0% TO INT(L)\ FNT4%=FNT6%(X0,Y0,A,.12,FNT5$(O0(3%),2%))\ O0(3%)=O0(3%)+O0(4%)\ X0=X0+O7\ Y0=Y0+O8 !LABEL EACH TICK ON AXIS 10470 NEXT O9%\ L$=L$+' (X10^'+FNT5$(O0(5%),0%)+')' IF O0(5%)<>0\ Y0=O0(0%)*(3.7-O0(0%)*5)\ X0=.5*L-.0625*LEN(L$)\ FNT4%=FNT6%(O1(0%)+X0*O7-Y0*O8,O2(0%)+O7*Y0+O8*X0,A,.12,L$) !PRINT LABEL 10480 FNEND 10500 DEF FNT5$(N,D%)\ O2$=CVT$$(NUM$(INT(N*10.^D%+.5)/10.^D%),255%)\ IF D%<=0% THEN FNT5$=O2$ ELSE O1%(0%)=INSTR(1%,O2$,'.')\ IF O1%(0%) THEN FNT5$=O2$+STRING$(D%+O1%(0%)-LEN(O2$),48%) ELSE FNT5$=O2$+'.'+STRING$(D%,48%) 10510 FNEND !NUMBER SUBROUTINE FROM CALCOMP 10600 DEF FNT6%(X0,Y0,A,H,L$)\ H=H/6\ O0=.0625*H\ A=A*.0174533\ O3=COS(A)\ O4=SIN(A) !SYMBOL FUNCTION TO PRINT THE STRING L$ AT (X0,Y0) INCHES AT ANGLE A(DEGREES) AND HEIGHT H(INCHES). 10610 FOR O7%=1% TO LEN(L$)\ O1%(1%)=1%\ CHANGE O2$(ASCII(MID(L$,O7%,1%))) TO O2%\ IF O2%(1%)=255% THEN GOSUB 10660 !O2$() VIRTUAL STRING ARRAY CONTAINING PEN MOTIONS 10620 FOR O8%=O1%(1%) TO O2%(0%)\ O2%=O2%(O8%)\GOSUB 10680\ FNT6%=FNT7%(X0+O3*O5-O4*O6,Y0+O3*O6+O4*O5,2%-O2%/128%) !PLOT POINT AFTER DECODING IT 10630 NEXT O8%\ IF O2%(2%)=255% THEN GOSUB 10675 ELSE IF (O2% AND 128%)=0% THEN O5=6.*H !CHARACTER DONE; RESET ORIGIN IF SPECIAL CENTERED CHARACTER, ELSE SPACE OVER IF LAST MOTION PEN-DOWN 10640 X0=X0+O3*O5\ Y0=Y0+O4*O5 !ADJUST X0 AND Y0 TO ORIGIN OF NEXT CHARACTER 10650 NEXT O7%\ O1=X0\ O2=Y0\ FNT6%=FNT7%(X0,Y0,-1%) IF ASCII(L$)>31%\ GOTO 10690 !SAVE LAST LOCATION IN O1 AND O2 10660 O1%(1%)=3%\ IF O2%(2%)=255% THEN O5=3*H\ X0=X0-O5*(O3-O4)\ Y0=Y0-O5*(O4+O3) !SPECIAL WITH BYTE 2=255 ==> CENTERED SYMBOL 10670 RETURN 10675 O5=3*H\ X0=X0+O5*(O3-O4)\ Y0=Y0+O5*(O4+O3)\ RETURN !SUBROUTINE TO RESET ORIGIN AFTER PLOTTING A CENTERED SYMBOL 10680 O5=(O2% AND 112%)*O0\ O6=((O2% AND 7%)-(O2% AND 8%))*H\ RETURN 10690 FNEND 10700 DEF FNT7%(X0,Y0,F%)\ O3%=O3(0%)*(X0+O1(1%))+.5\ O4%=O3(1%)*(Y0+O2(1%))+.5\ IF ABS(F%)<=1% THEN GOSUB 10880 ELSE IF O1% THEN GOSUB 10870 10710 GOSUB 10800\ IF F%<=0% THEN GOSUB 10890 10720 FNEND 10799 DIM O1%(7%),O2%(16%),O0(5%),O1(5%),O2(5%),O3(5%)\ DIM#12%, O2$(127%)=16%\ GOTO 10999 !FORCES USER PROGRAM TO SKIP OVER SUBROUTINES 10800 IF O3%<0% THEN O3%=0% ELSE IF O3%>9999% THEN O3%=9999% 10810 IF O4%<0% THEN O4%=0% ELSE IF O4%>9999% THEN O4%=9999% !FORCE POINT ONTO SCREEN 10820 IF O5%<0% THEN O5%=O3%\ O6%=O4%\ GOTO 10860 !FIRST POINT PLOTTED-- WILL BE 'DARK VECTOR' 10830 GOSUB 10860 IF O1%\ O3(3%)=ABS(O5%-O3%)+ABS(O6%-O4%)\ GOTO 10850 IF O3(3%) THAN MAX THEN BREAK IT UP 10850 O5%=O3%\ O6%=O4% !LAST MOTION OR ONLY IF SHORT ENOUGH 10860 O0$=CVT$$('000'+NUM$(O5%),255%)\ O1$=CVT$$('000'+NUM$(O6%),255%)\ PRINT#11%,RIGHT(O0$,LEN(O0$)-3%);' ';RIGHT(O1$,LEN(O1$)-3%)\ RETURN !SEND POINT TO PLOTTER IN XXXXYYYY FORMAT 10870 PRINT#11%, 'PLTL'\ O1%=0%\ RETURN !TURN ON PLOTTING MODE; NEXT POINT PLOTTED WILL BE 'DARK' IF O5%=-1%; ELSE PEN WILL BE LOWERED WHERE IT IS. 10880 GOSUB 10890\ O5%=-1%\ GOTO 10870 !COME HERE TO SET FLAG TO CAUSE NEXT LINE TO BE 'DARK' 10890 PRINT#11%,'PLTT'\ O1%,O5%=-1%\ RETURN !RAISES PEN AFTER MOVE; INHIBITS POINT BEING PLOTTED IF PRINTED IMMEDIATELY AFTER POINT VALUE 10910 O1=O3%/O1(4%)-O1(5%)\ O2=O4%/O2(4%)-O2(5%)\ RETURN !CONVERTS RASTOR UNITS TO USER UNITS 10999!!!PLOTHP.BAS VERSION 6A EDIT 7 17-FEB-77 HP7200 VERSION OF TEKTRONIX PLOTTING FUNCTIONS 32767END