1 SUBROUTINE PLOT(X,Y,IP)
3 C THIS ROUTINE IS THE HEART OF THE PLOTTING SYSTEM
7 C CALL PLOT(XP,YP,IPEN)
9 C WHERE XP IS THE VIRTUAL X COORDANATE OF THE END POINT OF THE DESIRED
11 C WHERE YP IS THE VIRTUAL Y COORDANATE OF THE END POINT OF THE DESIRED
13 C AND IPEN IS THE PEN CONTROL PARAMETER.
15 C IF THE ABSOLUTE VALUE OF IPEN IS 2, THE MOVE IS MADE WITH THE PEN DOWN,
16 C IF THE ABSOLUTE VALUE OF IPEN IS 3, THE MOVE IS MADE WITH THE PEN UP.
17 C IF THE ABSOLUTE VALUE OF IPEN IS ANYTHING ELSE, NO CHANGE IN THE PEN IS
19 C IF THE SIGN OF IPEN IS -, THE END POINT OF THE LINE DRAWN IS ASSIGNED TO
20 C BE THE ORIGIN, (0,0).
21 C IF THE SIGN OF IPEN IS +, THE ENDPOINT OF THE LINE WILL BE (XP,YP).
23 C PLOT SHOULD BE CALLED ONCE TO INITIALIZE IT.
24 C THE CALL 'CALL PLOT(0,0,3)' WOULD SUFFICE.
26 COMMON/PLOTC/SCALE,IDEV,IPEN,XCUR,YCUR
28 C SCALE IS THE SCALE EXPRESSED IN RASTER UNITS PER VIRTUAL UNIT.
29 C IDEV IS A DEVICE SELECTION FLAG.
30 C IPEN IS THE CURRENT IPEN PARAMETER
31 C XCUR IS THE CURRENT VIRTUAL X COORDANATE IN RASTER UNITS.
32 C YCUR IS THE CURRENT VIRYUAL Y COORDANATE IN RASTER UNITS.
35 DATA IDEV,SCALE/1,200./
37 C DEFAULT VALUES ARE SCALE=1, ANGLE=0, PEN AT (0,0).
42 C CALCULATIONS ARE DONE IN RASTER UNITS TO AVOID ROUND OFF ERROR
44 CALL DELTAP(XT-XCUR,YT-YCUR,IABS(IP))
49 C IPEN POSATIVE MEANS END POINT AS SPECIFIED PLUS/MINUS ONE RASTER UNIT
55 C IPEN NEGATIVE MEANS END POINT IS NEW ORIGIN
59 \f SUBROUTINE SYMBOL(X,Y,HGT,BCD,ANGD,N)
61 C THIS IS THE SYMBOL DRAWING SUBROUTINE.
63 C X AND Y SPECIFY THE POSITION AT WHICH THE SYMBOL IS TO BE DRAWN.
64 C HGT IS THE HIGHT OF THE CHARACTERS IN VIRTUAL UNITS
65 C BCD CONTAINS THE CHARACTERS (S) TO BE PLOTTED
66 C ANGD IS THE ORIENTAION IN DEGREES RELATIVE TO THE X AXIS
67 C N IS A CONTROL PARAMETER.
69 C THE CHARACTER AND ITS SPACE FORMS A SQUARE OF WIDTH HGT.
71 C IF N > 0, N CHARACTERS IN H FORMAT ARE PLOTTED.
72 C IF N = 0, ONE CHARACTER IS PLOTTED WHOSE CODE IS BCD.
74 C IF N >0, OR =0 , X AND Y ARE THE LOWER LEFT POINT OF THE CHARACTER.
76 C IF N < 0, ONE CHARACTER WHOS CODE IS B IS PLOTTED CENTERED AROUND (X,Y
79 COMMON/PLOTC/SCALE,IDEV,IPEN,XCUR,YCUR,SINA,COSA,SEG,ANG
80 DATA ANG,SINA,COSA/0.,0.,1./
83 C FIRST GO TO THE SPECIFIED POINT
87 C IF THE REQUESTED ANGLE IS THE SAME AS THE CURRENT ONE,
88 C AVOID CALCULATING THE SIN AND COSINE
95 C CHARACTERS ARE ON A 6X6 GRID
100 C THIS LOOP PLOTS THE N CHARACTERS IN BCD.
102 CALL CGET(BCD,J,CHAR)
107 C THIS PLOTS ONE CHARACTER WHOS CODE IS BCD
112 C THIS PRODUCES A CENTERED CHARACTER.
116 \f SUBROUTINE CPLOT(CHAR)
119 C THIS ROUTINE DRIVES THE CHARACTER GENERATOR.
120 C THE ANGLE AND HIGHT HAVE ALREADY BE COMPUTED.
122 COMMON/PLOTC/SCALE,IDEV,IPEN,XCUR,YCUR,SINA,COSA,SEG
125 C CHECK FOR CENTERED OR NORMAL CHARACTER
127 5 CALL WHERE(XLL,YLL)
129 C SET THE LOWER LEFT OF THE CHARACTER AT CURRENT POSITION.
133 C SET UP FOR REQUESTED CHARACTER.
135 10 CALL CQXY(X,Y,IPEN)
145 C CHECK FOR LAST VECTOR
147 25 CALL PLOT(XP,YP,IPEN)
149 C PLOT RELATIVE TO XLL,YLL AND GO BACK FOR MORE
154 C CENTERED CHARACTERS GET FUDGED, SO CHECK FOR THAT
156 40 CALL PLOT(XP,YP,IPEN)
158 30 CALL PLOT(X0,Y0,IPEN)
160 C PLOT TO CENTER OF CHARACTER
165 C FIND OUT WHERE CENTER OF CHARACTER SHOULD BE (IS)
171 C CALCULATE THE LOWER LEFT FROM GIVEN CENTER, THEN GO THERE.
176 C SELECT CENTERED CHARACTER, THEN PROCESS NORMALLY
179 \f SUBROUTINE ASSIGN(X,Y)
181 C THIS ROUTINE ASSIGNS THE CURRENT PEN POSITION AS VIRTUAL (X,Y).
183 COMMON/PLOTC/SCALE,IDEV,IPEN,XCUR,YCUR,SINA,COSA,SEG
187 C XCUR AND YCUR ARE STORED IN RASTER TS
191 \f SUBROUTINE WHERE(X,Y)
193 C THIS ROUTINE RETURNS THE VIRTUAL COORDANADTES OF THE CURRENT
196 COMMON/PLOTC/SCALE,IDEV,IPEN,XCUR,YCUR,SINA,COSA,SEG
200 C XCUR AND YCUR ARE IN RASTER UNITS
204 \f SUBROUTINE FACTOR(FACT)
206 C THIS ROUTINE ESTABLISHES A NEW SCALE FACTOR
207 C FACT=1 IS 1 UNIT = 1 INCH
209 COMMON/PLOTC/SCALE,IDEV,IPEN,XCUR,YCUR,SINA,COSA,SEG,ANG
212 C MY PLOTTER HAS 200 STEPS PER INCH
216 \f SUBROUTINE NUMBER (XP, YP, HGT, FPN, THETA, ND)
218 C THIS ROUTINE CONVERTS A NUMBER INTO PLOTTED FORM
220 C XP AND YP ARE THE COORDANATES WHERE THE PLOTTED NUMBER SHOULD BEGIN
221 C HGT IS THE HIGHT IF THE CHARACTERS.
222 C FPN IS THE NUMBER (FLOATING OR FIXED IN PDP) TO BE CONVERTED
223 C THETA IS THE ANGLE THE CHARACTERS MAKE WITH THE X AXIS
225 C IF ND>0, IT SPECIFIES THE NUMBER OF DIGITS TO THE RIGHT OF THE DECIMAL
226 C POINT THAT ARE TO BE CONVERTED AND PLOTTED, AFTER PROPER ROUNDING.
227 C FOR EXAMBLE, ASSUME AN INTERNAL VALUE OF -0.1234567X10^3. IF
228 C ND WERE 2, THE PLOTTED NUMBER WOULD BE '-123.46' .
230 C IF ND=0, ONLY THE INTEGER PORTION AND A DECIMAL POINT
231 C ARE PLOTTED, AFTER ROUNDING.
233 C IF ND=-1, ONLY THE NUMBERS INTEGER PORTION IS PLOTTED, AFTER
234 C ROUNDING. (THE NUMBER ABOVE WOULD BE PLOTTED AS '-123' W/O DECIMAL POINT
236 C IF ND<-1, ABS(ND)-1 DIGITS ARE TRUNCATED FROM THE INTEGER PORTION,
239 COMMON/PLOTC/SCALE,IDEV,IPEN,XCUR,YCUR,SINA,COSA,SEG,ANG
241 DATA SINA,COSA,ANG/0.,1.,0./
242 C MOVE TO REQURSTED LOCATION
244 C IF THE ANGLE IS THE SAME, SAVE THE SIN-COSIN WORK
245 IF(THETA-ANG) 5, 6, 5
246 5 ANG=THETA SINA=SIND(ANG)
251 C SET N VALUE TO + OR - MAXN, IF OUT OF RANGE
252 IF (N - MAXN) 11, 11, 10
254 11 IF (N + MAXN) 12, 20, 20
256 C INSERT MINUS SIGN IN FRONT OF NUMBER, IF NEGATIVE
257 20 IF (FPV) 21, 30, 30
259 C WHEN SYMBOL IS CALLED WITH SAMEV FOR X AND Y, THE CHARACTER STRING
260 C CONTINUES FROM THE LAST CHARACTER PLOTTED BY SYMBOL
261 C MN LOCATES EXPONENT VALUE FOR PROPER ROUNDING OF NUMBER
263 C IF SCALING IS DONE, MN MUST BE ADJUSTED
266 C ROUND INPUT NUMBER AND SET TO POSITIVE VALUE
267 32 FPV = ABS(FPV) + (0.5 * 10. ** MN)
268 C DETERMINE CHARACTERISTIC OF FPV AND INCREMENT IT BY 1
269 I = ALOG10(FPV) + 1.0
271 C IF SCALING IS DONE, ILP MUST BE REDUCED ACCORDING TO SCALING
272 IF (N + 1) 40, 41, 41
274 C IF NUMBER IS LESS THAN 1 PLOT A ZERO BEFORE DECIMAL (IF ANY)
275 41 IF (ILP) 50, 50, 51
278 C ILP IS NUMBER OF DIGITS TO LEFT OF DECIMAL POINT
280 C LOCATE SINGLE LEFTMOST DIGIT OF NUMBER
281 K = FPV * 10. ** (J - I)
283 C SUBTRACT VALUE OF PREVIOUS DIGIT FROM NUMBER TO LOCATE NEXT DIGIT
284 60 FPV = FPV - (FLOAT(K) * 10. ** (I - J))
285 C NO DECIMAL POINT IS PLOTTED IF N IS NEGATIVE, EXIT FROM ROUTINE
288 C PLOT DIGITS TO RIGHT OF DECIMAL IF N GT 0, OTHERWISE EXIT
291 C SCALE FRACTIONAL REMAINDER TO GIVE INTEGER DIGIT
294 C SUBTRACT INTEGER VALUE TO LOCATE NEXT DIGIT
295 90 FPV = FPV * 10. - FLOAT(K)
298 \f SUBROUTINE AXIS(XPAGE,YPAGE,IBCD,NCHAR,AXLEN,ANGLE,FIRSTV,DELTAV)
299 C..... XPAGE,YPAGE COORDINATES OF STARTING POINT OF AXIS, IN INCHES
300 C..... IBCD AXIS TITLE.
301 C..... NCHAR NUMBER OF CHARACTERS IN TITLE. + FOR C.C-W SIDE.
302 C..... AXLEN FLOATING POINT AXIS LENGTH IN INCHES.
303 C..... ANGLE ANGLE OF AXIS FROM THE X-DIRECTION, IN DEGREES.
304 C..... FIRSTV SCALE VALUE AT THE FIRST TIC MARK.
305 C..... DELTAV CHANGE IN SCALE BETWEEN TIC MARKS ONE INCH APART
315 3 IF (ADX- 99.0) 6,4,4
321 6 IF (ADX-0.01) 5,7,7
322 7 XVAL=FIRSTV*10.0**(-EX)
323 ADX= DELTAV*10.0**(-EX)
325 CTH=COS(STH STH=SIN(STH)
328 XN=XPAGE+DXB*CTH-DYB*STH
329 YN=YPAGE+DYB*CTH+DXB*STH
333 CALL NUMBER(XN,YN,0.105,XVAL,ANGLE,2)
341 13 DXB=-.07*Z+AXLEN*0.5
343 XT=XPAGE+DXB*CTH-DYB*STH
344 YT=YPAGE+DYB*CTH+DXB*STH
345 CALL SYMBOL(XT,YT,0.14,IBCD(1),ANGLE,KN)
350 CALL SYMBOL(XT,YT,0.14,3H*10,ANGLE,3)
351 XT=XT+(3.0*CTH-0.8*STH)*0.14
352 YT=YT+(3.0*STH+0.8*CTH)*0.14
353 CALL NUMBER(XT,YT,0.07,EX,ANGLE,-1)
355 CALL PLOT(XPAGE+AXLEN*CTH,YPAGE+AXLEN*STH,3)
363 CALL PLOT(XN+DXB,YN+DYB,2)
371 C THIS ROUTINE PRODUCES A SYMBOL TABLE, WHICH SHOWS THE CHARACTERS
372 C AVAILABLE IN THE SYMBOL ROUTINE.
374 C MAXCHR IS THE INTEGER EQUIVALENT OF THE LAST CHARACTER.
377 CALL PLOT (0.0,11.0,2)
378 CALL PLOT (8.5,11.0,2)
379 CALL PLOT (8.5,0.0,2)
380 CALL PLOT (0.0,0.0,2)
381 CALL SYMBOL(0.75,10.4,.14,49HCHARACTERS AVAILABLE IN SYMBOL ROUTIN
383 CALL PLOT(8.25,10.,3)
384 CALL PLOT(0.25,10.,2)
385 CALL PLOT(0.25,0.25,2)
386 CALL PLOT(8.25,0.25,2)
387 CALL PLOT(8.25,10.0,2)
393 CALL NUMBER(X,Y+0.1,.14,FLOAT (K),0.0,-1)
394 4 CALL SYMBOL(X+0.45,Y,0.35,K,0.0,0)
397 CALL NUMBER(X+0.90,Y+0.1,0.14,FLOAT (IO1),0.0,-1)
398 CALL NUMBER(X+1.04,Y+0.1,0.14,FLOAT (IO2),0.0,-1)
400 15 CALL SYMBOL(X+1.0,Y+0.1,.14,1H-,0.0,1)
403 IF(K-MAXCHR) 100,100,300
405 CALL PLOT(X+1.35,0.25,3)
406 CALL PLOT(X+1.35,10.,2)