1  REM ************* HP TIME-SHARED BASIC PROGRAM LIBRARY ***************
2  REM
3  REM             FGRAPH: SIMULTANEOUS FUNCTION GRAPHER
4  REM
5  REM              3165A           3/72
6  REM7  REM  ***************** CONTRIBUTED PROGRAM ************************
8  REM
9  REM
10  DEF FNA()=5.1413E-30
20  DEF FNB()=5.1413E-30
30  DEF FNC()=5.1413E-30
40  DEF FND()=5.1413E-30
50  DEF FNE()=5.1413E-30
60  DIM A$[72],B$[72],C$[72],D$[72],E$[72],F$[72],N$[72],V$[72],G[11]
70  I=1
80  A$="ABCDEFGH"
90  PRINT "TYPE IN THE LAST LETTERS OF THE FUNCTIONS YOU WANT GRAPHED"
100  PRINT "SEPARATED BY COMMAS.  EXAMPLE: B,C,E WILL GRAPH FNB, FNC,";
110  PRINT " AND FNE."
120  INPUT N$
130  MAT G=ZER
140  FOR I=1 TO LEN(N$) STEP 2
150  FOR I2=1 TO 5
160  IF A$[I2,I2]=N$[I,I] THEN 210
170  NEXT I2
180  PRINT "ILLEGAL FUNCTION-->";N$[I,I]
190  PRINT "RE-ENTER THE LAST LETTERS OF THE FUNCTIONS YOU WANT GRAPHED"
200  GOTO 120
210  G[I2]=1
220  NEXT I
230  PRINT "INPUT THE BEGINNING AND END POINTS FOR THE GRAPH";
240  INPUT A,B
250  IF A <= B THEN 280
260  PRINT "SMALLER NUMBER FIRST, PLEASE"
270  GOTO 240
280  IF A<B THEN 310
290  PRINT "TWO SEPARATE POINTS, PLEASE"
300  GOTO 240
310  I=A
320  FOR I1=1 TO 5
330  IF G[I1]=0 THEN 380
340  GOSUB 1180
350  IF X#5.1413E-30 THEN 380
360  PRINT "FUNCTION NOT TYPED IN-->";A$[I1,I1]
370  GOTO 190
380  NEXT I1
390  V$="*@%$#"
400  B$=" A         B         C         D         E        "
410  B$[51]=" F         G         H"
420  C$=" -         -         -         -         -        "
430  C$[51]=" -         -         -"
440  E$="+A+++++++++B+++++++++C+++++++++D+++++++++E++++++++"
450  E$[51]="+F+++++++++G+++++++++H"
460  D$="IJKLMNOPQRS"
470  F$="--------------------------------------------------"
480  F$[51]="----------------------"
490  PRINT F$
500  PRINT B$
510  S=1.E+38
520  M=-1.E+38
530  FOR I=A TO B STEP (B-A)/50
540  FOR I1=1 TO 5
550  IF G[I1]=0 THEN 610
560  GOSUB 1180
570  IF X >= S THEN 590
580  S=X
590  IF X <= M THEN 610
600  M=X
610  NEXT I1
620  NEXT I
630  IF M#S THEN 660
640  PRINT "THE GRAPH IS A HORIZONTAL LINE AT Y="S
650  GOTO 1090
660  Y=(M-S)/60
670  L=(INT(-S/Y+.5)+6 MAX 1) MIN 72
680  L1=(L=INT(-S/Y+.5)+6)
690  C=5
700  FOR I=A TO B STEP (B-A)/50
710  N$=C$
720  IF ABS(I)<(B-A)/100 OR ABS(I) <= (B-A)/100 AND I>0 THEN 830
730  IF C#INT(C/5)*5 THEN 800
740  N$=F$
750  K$=D$[INT(C/5),INT(C/5)]
760  N$[L,L]=K$
770  N$[1,1]=K$
780  N$[72,72]=K$
790  GOTO 850
800  IF L1=0 THEN 850
810  N$[L,L]="+"
820  GOTO 850
830  N$=E$
840  IF C=INT(C/5)*5 THEN 750
850  FOR I1=1 TO 5
860  IF G[I1]=0 THEN 900
870  GOSUB 1180
880  V=INT((X-S)/Y+.5)+6
890  N$[V,V]=V$[I1,I1]
900  NEXT I1
910  PRINT N$
920  C=C+1
930  NEXT I
940  PRINT B$
950  PRINT F$
960  PRINT '10'10'10"X VALUES";TAB(24);"Y VALUES";TAB(48);"FUNCTION KEY"'10'10
970  M=(B-A)/10
980  S=S-4*Y
990  FOR I=1 TO 11
1000  PRINT D$[I,I];": ";A;
1010  IF I>8 THEN 1030
1020  PRINT TAB(24);A$[I,I];": ";S;
1030  IF G[I]=0 THEN 1050
1040  PRINT TAB(48);V$[I,I];"--> FN";A$[I,I];
1050  PRINT 
1060  A=A+M
1070  S=S+Y*10
1080  NEXT I
1090  PRINT '10'10'10'10'10"DO YOU WANT TO TRY NEW END POINTS";
1100  INPUT N$
1110  IF N$="YES" THEN 230
1120  PRINT "DO YOU WANT TO TRY A DIFFERENT COMBINATION OF THE FUNCTI";
1130  PRINT "ONS THAT"
1140  PRINT "YOU TYPED";
1150  INPUT N$
1160  IF N$="YES " THEN 90
1170  STOP 
1180  GOTO I1 OF 1190,1210,1230,1250,1270
1190  X=FNA(I)
1200  RETURN 
1210  X=FNB(I)
1220  RETURN 
1230  X=FNC(I)
1240  RETURN 
1250  X=FND(I)
1260  RETURN 
1270  X=FNE(I)
1280  RETURN 
1290  END 
