10 ! ERIC JOHNSON'S PROGRAM TO SORT A LIST OF ITEMS
12      ? TAB(-1,0) : ? TAB(10,10);
15 STRSIZ 65
17      INPUT LINE "WOULD YOU LIKE THE INSTRUCTIONS? ", A$
18      IF UCS(A$[1,1]) = "Y" THEN GOSUB INSTRUCTIONS:
19
20
30 MENU:
40      ? TAB(-1,0)
50      ? TAB(10);"WOULD YOU LIKE TO:"
60      ? TAB(13);"1. ENTER A LIST OF ITEMS"
70      ? TAB(13);"2. READ THE SORTED LIST"
80      ? TAB(13);"3. PRINT OUT THE LIST ON THE PRINTER"
90      ? TAB(13);"4. QUIT"
100     ? TAB(20,10);
110     INPUT "ENTER YOUR CHOICE: ",A
120     ON A GOTO ENTER, READ, PRINT, QUIT
130     ? "PLEASE ENTER A NUMBER BETWEEN 1 AND 4.  WHEN YOU THINK YOU"
140     INPUT LINE "KNOW WHAT THAT MEANS, HIT RETURN. ", A$
150     GOTO MENU
160
200 ENTER:
205     ? TAB(-1,0)
210     INPUT "WHAT IS THE NAME OF THE FILE YOU WANT THIS LIST ON? ", FILE$
220     IF LEN(FILE$) > 6 THEN GOTO BAD'START
230     LOOKUP FILE$, X
235     A$ = ""
240     IF X > 0 THEN INPUT "THAT FILE ALREADY EXISTS, DO YOU WANT TO KILL IT? "A$
250     IF A$[1,1] = "Y" THEN GOTO OPEN'FILE
260     IF X < 0 THEN ? "SORRY, THAT NAME IS ALREADY TAKEN FOR ANOTHER FILE"
270     IF X < 0 THEN INPUT LINE "HIT RETURN TO CONTINUE ", A$
280     IF X < 0 THEN GOTO ENTER
290     GOTO OPEN'FILE
295
300 BAD'START:
310     ? "SIX LETTERS OR LESS, PLEASE "
320     INPUT LINE "HIT RETURN TO CONTINUE ", A$
330     GOTO ENTER
340
350 OPEN'FILE:
360     OPEN #1, FILE$, OUTPUT
365 USED'ENTER=1
370
380 SET'LENGTH:
390     ? TAB(-1,0)
400     ? TAB(5,1); "YOU MAY ENTER UP TO 78 LETTERS ON A LINE.  WHAT IS THE"
410     INPUT "LONGEST LINE YOU WILL WANT TO ENTER? ", LENGTH
420     IF LENGTH > 78 THEN ? "I'LL SAY IT ONCE MORE, THIS TIME IN ENGLISH"
425     IF LENGTH <= 78 THEN GOTO ENTER'INFO
430     FOR N = 1 TO 2000 : NEXT N
440     GOTO SET'LENGTH
450
460 ENTER'INFO:
470     ? TAB(-1,0)
480     ? TAB(10,1); "YOU MAY NOW ENTER YOUR LIST, ONE LINE AT A TIME."
490     ? "WHEN YOU ARE DONE, ENTER 'ZZZZ' AS THE LAST LINE"
500
510 INFO'LOOP:
520     INPUT LINE ">",INFO$
530     IF LEN(INFO$) > LENGTH THEN ? SPACE(50);"TOO LONG!";
532     IF LEN(INFO$) > LENGTH THEN FOR N = 1 TO 1000 : NEXT N
535     IF LEN(INFO$) > LENGTH THEN ? TAB(0);SPACE(50);"TOO LONG!"
540     PRINT #1, INFO$
550     IF UCS(INFO$) = "ZZZZ" THEN GOTO END'LOOP
560     GOTO INFO'LOOP
570
580 END'LOOP:
590     CLOSE #1
600
610  SORT:
620     OPEN #1,FILE$,INPUT
630     OPEN #2, FILE$+".SRT", OUTPUT
640     XCALL BASORT,1,2,LENGTH,LENGTH,1,0,0,0,0,0,0,0
650     CLOSE #1
660     CLOSE #2
670     ?"PROGRM ENTERED......."
675     FOR V=1 TO 2000 : NEXT V
680     GOTO MENU
690
1000 READ:
1010    IF USED'ENTER<>1 THEN GOTO ENTER'NAME
1020    ?"DO YOU WANT TO READ ";FILE$;"?"
1030    INPUT READIT$
1040    IF READIT$[1,1]="Y" THEN GOTO READING
1090  ENTER'NAME:
1100    INPUT "WHICH FILE DO YOU WANT TO READ?",FILE$
1110    LOOKUP FILE$,X
1120    IF X > 0 THEN GOTO READING
1130    ? "THAT FILE DOESN'T EXIST " : GOTO ENTER'NAME
1140  READING:
1150    OPEN #2, FILE$+".SRT", INPUT
1160  LOOP:
1170    INPUT LINE #2,INFO$
1180    ?INFO$
1190    IF INFO$ = "ZZZZ" THEN GOTO END'READ
1200    GOTO LOOP
1210  END'READ:
1220    CLOSE #2
1225    ? : ? "END OF FILE"
1230    INPUT LINE "HIT RETURN WHEN READY......", A$
1240 GOTO MENU
2000  PRINT:
2010    IF USED'ENTER<>1 THEN GOTO FILE'NAME
2020    ?"DO YOU WANT TO PRINT ";FILE$;"?"
2030    INPUT PRINTIT$
2040    IF PRINTIT$[1,1] = "Y" THEN GOTO PRINTING
2090 FILE'NAME:
2100    INPUT "WHAT FILE DO YOU WANT TO PRINT? ", FILE$
2110    LOOKUP FILE$, X
2120    IF X > 0 THEN GOTO PRINTING
2130    ?"THAT FILE DOESN'T EXSIST" : GOTO FILE'NAME
2140  PRINTING:
2150    XCALL SPOOL, FILE$+".SRT"
2250    GOTO MENU
3000 QUIT:
5000 ! IT'S DONE!!!!!!
5020    END
5030
6000 INSTRUCTIONS:
6010    ? TAB(-1,0);
6020    ? "This program allows you to enter a list of items (each item"
6030    ? "may be up to one line long). It then alphabetizes the list"
6040    ? "and allows you to look at that list on the screen or print"
6050    ? "out the list.  Be sure to enter 'ZZZZ' as the last item so"
6060    ? "that the program will know where to stop."
6070    ? TAB(20,10); : INPUT "hit RETURN to continue >",a$
6100    RETURN