5  FILES CHAR
6  REM HP CONTRIBUTED LIBRARY, REV. C, 2/75
7  REM USE PROGRAM '$CHRGEN' TO CREATE 'CHAR' FILE IN YOUR OWN ACCOUNT.
8  REM IF DESIRED, BESTOW 'CHAR' TO A000 AND CHANGE STATEMENT 5 TO READ
9  REM 5 FILES $CHAR
10  DIM A$[4],C$[72],O$[22]
20  P9=1
30  P1=3.14159
40  PRINT "INSTRUCTIONS";
50  INPUT A$
60  IF A$[1,1]="N" THEN 100
70  GOTO 3000
100  PRINT "GRAPH SIZE IN MAJOR DIVISIONS:"
110  PRINT "WIDTH ";
120  INPUT H9
130  PRINT "HEIGHT ";
140  INPUT V9
160  S9=Y9=5
170  A9=U9=X9=0
180  PRINT "INPUTS DESIRED:"
190  PRINT "1=SIZE,2=LOCATION,3=ANGLE,4=TITLE (1234 FOR ALL):";
195  INPUT A$
200  FOR I=1 TO LEN(A$)
210  IF A$[I,I]="4" THEN 400
220  IF A$[I,I]="3" THEN 350
230  IF A$[I,I]="2" THEN 300
240  PRINT "SIZE";
250  INPUT S9
260  GOTO 390
300  PRINT "LOCATION (X,Y)";
310  INPUT X9,Y9
320  GOTO 390
350  PRINT "ANGLE";
360  INPUT A9
390  NEXT I
400  PRINT "TITLE:"
410  INPUT C$
420  IF C$[LEN(C$)]#'13 THEN 450
430  INPUT C$[LEN(C$)+1]
440  GOTO 420
450  S7=S8=S9
470  T9=A9*P1/180
480  X7=X8=X9*9999/V9
490  Y7=Y8=Y9*9999/V9
500  FOR I=1 TO LEN(C$)
510  IF C$[I,I]='13 THEN 910
520  IF C$[I,I]='10 THEN 920
525  REM: CTRL "O" IN 510, CTRL "N" IN 520
580  U9=1
590  X6=Y6=0
600  READ #1,1
610  GOTO TYP(1) OF 620,640,1900
620  READ #1;Q9
630  GOTO 610
640  READ #1;Q$
650  IF Q$#C$[I,I] THEN 610
660  IF TYP(1)=2 THEN 810
670  READ #1;X1,Y1
680  IF X1>-1 THEN 710
690  U9=1
700  GOTO 670
710  X6=X7+X1*S7
720  Y6=Y7+Y1*S8
730  IF A9=0 THEN 760
740  GOSUB 8000
750  GOTO 780
760  X5=X6*V9/H9
770  Y5=Y6
780  GOSUB 9000
790  U9=0
800  GOTO 660
810  X7=X7+100*S7
820  NEXT I
830  GOTO 9900
910  X7=X8
920  Y7=Y8=Y8-100*S8
930  IF A9=0 THEN 990
940  X6=X7
950  Y6=Y7
955  Y8=Y7+100*S9
960  GOSUB 8000
970  X8=X7=X5*H9/V9
980  Y8=Y7=Y5
990  GOTO 820
1900  PRINT "      PLTT"
1910  PRINT "CHARACTER' ";C$[I,I];" 'NOT IN TABLE"
1920  P9=1
1930  READ #1,1
1940  GOTO 810
3000  PRINT '10"YOU WILL BE ASKED FOR INPUTS:"
3010  PRINT '10"1=SIZE,2=LOCATION,3=ANGLE,4=TITLE(1234 FOR ALL):"
3020  PRINT '10"ANY COMBINATION OF THE FOUR NUMBERS MAY BE USED,"
3030  PRINT "SUCH AS '24' FOR LOCATION AND TITLE ONLY."
3040  PRINT '10"SIZE IS 0.1 MAJOR DIVISION PER LETTER MULTIPLIED BY"
3050  PRINT "THE NUMBER YOU ENTER; ENTERING '20' WOULD PRODUCE LETTERS"
3060  PRINT "OCCUPYING 2X2 MAJOR DIVISIONS. SIZE IS SET AT '5' IF"
3070  PRINT "YOU DO NOT INPUT."
3080  PRINT '10"LOCATION IS THE POSITION ON THE GRAPH IN MAJOR DIVISIONS,"
3090  PRINT "MEASURED FROM THE LOWER LEFT OF THE GRAPH; 5,5 WOULD"
3100  PRINT "BE THE CENTER OF A 10X10 DIVISION GRAPH."
3110  PRINT '10"ANGLE IS THE ANGLE IN DEGREES FROM HORIZONTAL."
3120  PRINT '10"TITLE IS THE TEXT YOU WISH PRINTED, UP TO 72 CHARACTERS."
3130  PRINT "A CONTROL 'O' PRODUCES A CARRIAGE RETURN AND LINEFEED"
3140  PRINT "ON THE GRAPH. A CONTROL 'N' PRODUCES A LINEFEED ONLY."
3150  PRINT "A CONTROL 'O' AS THE LAST CHARACTER PRODUCES A CARRIAGE"
3160  PRINT "RETURN, LINEFEED, AND A REQUEST FOR MORE INPUT."'13'10'10'10'10
3200  GOTO 100
8000  H6=SQR((X6-X8)^2+(Y6-Y8)^2)
8010  T8=P1/2*SGN(Y6-Y8)
8020  IF X6=X8 THEN 8040
8030  T8=ATN((Y6-Y8)/(X6-X8))
8040  X5=(X8+H6*COS(T8+T9))*V9/H9
8050  Y5=Y8+H6*SIN(T8+T9)
8060  RETURN 
9000  IF (X5 MAX Y5)>9999 OR (X5 MIN Y5)<0 THEN 9800
9010  O$="         0123456789"
9020  IF P9=0 THEN 9500
9030  P9=0
9040  PRINT "PLTL"
9500  FOR O0=1 TO 4
9510  X3=INT(X5/10^(4-O0))
9520  Y3=INT(Y5/10^(4-O0))
9530  O$[O0,O0]=O$[X3+10,X3+10]
9540  O$[O0+5,O0+5]=O$[Y3+10,Y3+10]
9550  X5=X5-X3*10^(4-O0)
9560  Y5=Y5-Y3*10^(4-O0)
9570  NEXT O0
9700  IF U9=0 THEN 9740
9710  PRINT O$[1,9];"^"
9720  U9=0
9730  GOTO 9750
9740  PRINT O$[1,9]
9750  RETURN 
9800  PRINT "      PLTT"
9810  P9=1
9820  PRINT "OFF SCALE!!...PLAN AHE"'10"A"'10"D"'10"!"
9830  GOTO 9920
9900  PRINT "9999 9999^"
9910  PRINT "PLTT"
9920  PRINT "MORE (1234)";
9930  P9=1
9940  INPUT A$
9950  IF A$[1,1]="N" THEN 9999
9960  IF A$[1,1]="Y" THEN 9980
9970  GOTO 200
9980  GOTO 190
9999  END 
