300 HOME : PRINT "CURRENT PREFIX: ";PFX$: VTAB 6: PRINT "ENTER PATHNAME OF FILE TO LOAD:": INPUT "";F$
310 PTH$ = F$: IF LEFT$(F$,1) < >"/" THEN PTH$ = PFX$ +F$
320 GOTO 600
330 REM
340 REM ***** LINE PRINT SUBROUTINE
350 FOR X = 1 TO DIV +1
360 BLANK$ = " ": REM THREE SPACES
370 IF B(X) <(YMAX +1 -Y) THEN PRINT BLANK$;: GOTO 390
380 PRINT "EEE";
390 NEXT X
400 PRINT : REM ****** ADVANCES ONE SPACE FOR NEXT LINE.
410 RETURN
420 REM
430 REM ***** SHELL-METZNER SORT
440 J1 = 0
450 S1 = NE
460 S1 = INT(S1/2)
470 IF S1 = 0 THEN 580
480 S2 = NE -S1:J1 = 1
490 K1 = J1
500 K2 = K1 +S1
510 IF G(K1) < = G(K2) THEN 550
520 T1 = G(K1):G(K1) = G(K2)
530 G(K2) = T1:K1 = K1 -S1
540 IF K1 > = 1 THEN 500
550 J1 = J1 +1: IF J1/10 = INT(J1/10) THEN PRINT ". ";: REM 3 SPACES,SHOWS SORT IS IN PROGRESS
560 IF J1 < = S2 THEN 490
570 GOTO 460
580 RETURN
590 REM
600 REM ***** READING DATA
610 PRINT D$"VERIFY"PTH$
620 PRINT D$"OPEN"PTH$
630 PRINT D$"READ"PTH$
640 I = 1:M = 0
650 INPUT GD$
660 IF GD$ = "" THEN 650: REM IGNORES BLANKS
670 IF VAL(GD$) = 0 AND GD$ < >"0" THEN 650: REM ACCEPTS ONLY NUMBERS
680 IF GD$ = ".01" THEN PRINT " NO SHOW":M = M +1: GOTO 650
690 PRINT GD$
700 G(I) = VAL(GD$)
710 IF G(I) >GMAX THEN PRINT D$"CLOSE": PRINT CHR$(7);"A DATA ENTRY EXCEEDS MAXIMUM, GMAX": PRINT : PRINT SPC( 3)"CURRENTLY, GMAX = ";GMAX:ER = 500: PRINT "PRESS RETURN TO ALTER GMAX ";: GET A$: PRINT : HOME : GOTO 1580
720 IF G(I) <.01 THEN PRINT D$"CLOSE": INVERSE : PRINT CHR$(7);"A DATA ENTRY LESS THAN .01 EXISTS": NORMAL : PRINT "PLEASE CHECK YOUR DATA AND TRY AGAIN": PRINT "PRESS RETURN TO CONTINUE ": POKE -16368,0: GET A$: PRINT : GOTO 240
730 I = I +1
740 IF I >NF +1 THEN PRINT D$"CLOSE": PRINT CHR$(7);"NUMBER OF ENTRIES EXCEEDS MAX": PRINT SPC( 3)"CURRENTLY, MAX = ";NF:ER = 600: PRINT : PRINT "PRESS RETURN TO ALTER MAX ";: GET A$: PRINT : HOME : GOTO 1660
750 GOTO 650
760 PRINT D$"CLOSE"
770 REM ****** GRADE GRAPH MODULE
780 HOME
790 PRINT "SORTING"
800 GOSUB 430
810 NG = DIV +1: REM ****** NUMBER OF GRADE GROUPS
820 REM ****** CLEAR THE ARRAY B(K)
830 FOR K = 1 TO NG:B(K) = 0: NEXT K
840 REM ****** GROUP SORT
850 YMAX = 0
860 FOR I = 1 TO NE
870 PRINT ". ";
880 DG = GMAX/DIV
890 FOR K = 11 TO NG
900 IF G(I) > = DG *(K -1) AND G(I) <DG *K THEN B(K) = B(K) +1: GOTO 940
910 NEXT K
920 FOR K = 1 TO 10
930 GOTO 900
940 B = B(K): IF B >YMAX THEN YMAX = B: REM ****** RETURNS LARGEST ORDINATE.
1500 IF A$ = "R" OR A$ = CHR$(112) THEN SUM = 0: GOTO 980
1510 IF A$ < >"Q" AND A$ < > CHR$(113) THEN HOME : VTAB 19:SP = 12: GOSUB 1490: GOTO 1500
1520 GOTO 240
1530 REM ****** FORMATTING- 2 DECIMAL PLACES; ASSUME NUMBER ALWAYS IS <100.
1540 TS$ = LEFT$( STR$(UV),5)
1550 RETURN
1560 REM ***** ALTER PARAMETERS
1570 HOME
1580 REM ****** MAX ENTRY
1590 VTAB 5: PRINT "MAXIMUM ENTRY VALUE: ";: CALL -868: INVERSE : POKE 36,21: PRINT GMAX;: NORMAL : IF ENTRY = 1 THEN ENTRY = 0: GOTO 1650
1600 HTAB 27: CALL -958: INPUT "";A$
1610 IF A$ = "" THEN 1650
1620 IF VAL(A$) <10 OR VAL(A$) >999 THEN VTAB 5: CALL -958: INVERSE : PRINT "MUST BE >= 10 AND <=999": NORMAL : PRINT "PRESS RETURN TO CONTINUE "; CHR$(7);: POKE -16368,0: GET A$: POKE -16368,0: PRINT : GOTO 1590
1630 GMAX = VAL(A$):ENTRY = 1
1640 GOTO 1590
1650 IF ER = 500 THEN ER = 0: GOTO 1990
1660 REM ***** MAX NUMBER OF ENTRIES
1670 VTAB 7: POKE 36,0: PRINT "MAX NUMBER OF ENTRIES: ";: CALL -958: INVERSE : POKE 36,23: PRINT NF;: NORMAL : IF ENTRY = 1 THEN ENTRY = 0: GOTO 1730
1680 HTAB 29: INPUT "";A$
1690 IF A$ = "" THEN 1730
1700 IF VAL(A$) >200 OR VAL(A$) <1 THEN VTAB 7: CALL -958: INVERSE : PRINT "MUST BE >=1 AND <= 200": NORMAL : PRINT "PRESS RETURN TO CONTINUE"; CHR$(7);: POKE -16368,0: GET A$: POKE -16368,0: PRINT : GOTO 1670
1710 NF = VAL(A$):ENTRY = 1:NE = NF
1720 GOTO 1670
1730 IF ER = 600 THEN ER = 0: GOTO 1990
1740 REM ****** SELECT PRINTER
1750 VTAB 9: POKE 36,0: PRINT "<I>MAGEWRITER OR <E>PSON: ";: CALL -868: INVERSE : POKE 36,26: PRINT PM$;: NORMAL : IF ENTRY = 1 THEN ENTRY = 0: GOTO 1820
1760 HTAB 30: INPUT "";A$
1770 IF A$ = "" THEN 1820
1780 IF A$ < >"E" AND A$ < >"I" THEN PRINT CHR$(7);: GOTO 1750
1790 IF A$ = "E" THEN L6 = 50:L8 = 48:PS = 56
1800 IF A$ = "I" THEN L6 = 65:L8 = 66:PS = 79
1810 PM$ = A$:ENTRY = 1
1820 VTAB 10: CALL -868: HTAB 7: INVERSE : PRINT SLT;: NORMAL : HTAB 1: PRINT "SLOT? ";: HTAB 9: INPUT "";SL$: IF SL$ = "" THEN 1840
1830 SLT = VAL(SL$): IF SLT <1 OR SLT >6 THEN SLT = 1: PRINT CHR$(7);: GOTO 1820
1840 VTAB 12: POKE 36,0: PRINT "DIVIDE GMAX INTO 10 OR 20 PARTS:";: CALL -868: INVERSE : POKE 36,33: PRINT DIV;: NORMAL : IF ENTRY = 1 THEN ENTRY = 0: GOTO 1910
1850 HTAB 37: POKE -16368,0: INPUT "";A$
1860 IF A$ = "" THEN 1910
1870 IF A$ < >"10" AND A$ < >"20" THEN PRINT CHR$(7);: GOTO 1840
1880 DIV = VAL(A$):ENTRY = 1
1890 GOTO 1840
1900 REM ****** SELECT PREFIX
1910 VTAB 14: POKE 36,0: PRINT "PREFIX: ";: CALL -958: INVERSE : POKE 36,8: PRINT PFX$;: NORMAL : IF ENTRY = 1 THEN ENTRY = 0: GOTO 1980
1920 HTAB ( LEN(PFX$) +10): INPUT "";A$
1930 IF A$ = "" THEN 1980
1940 IF LEFT$(A$,1) < >"/" OR RIGHT$(A$,1) < >"/" THEN VTAB 17: INVERSE : POKE 36,0: PRINT "NEED SLASH MARKS";: NORMAL : PRINT "PRESS RETURN TO CONTINUE ";: GET A$: PRINT : VTAB 16: CALL -958: GOTO 1910