10  COM J1,Z,D$[8],E$[8]
15  REM  SPSORT, HP 36736 REV A, 6/74 (PART 1 OF 3)
20  REM DESCRIPTION:  SORTS RANDOM ACCESS FILE.
30  REM               RECORDS MUST BE FIXED FORMAT, BUT MAY BE
40  REM               COMPRISED OF ANY SERIES OF NUMERIC AND STRING
50  REM               VARIABLES.  
60  REM               ANY FIELD MAY BE DESIGNATED SORT KEY FIELD.
70  REM               SUBFIELD OF ALPHA SORT FIELD MAY BE SPECIFIED.
80  REM               NEEDS TWO FILES -- INPUT, OUTPUT.
90  REM METHOD:       USES SPLITTING SORT AFTER ACM ALGORITHM 347.
100  REM USAGE:        SIMPLY RUN AND ANSWER SIMPLE QUESTIONS.
110  DIM A$[72],T$[72]
120  PRINT "FILE NAMES -- INPUT";
130  INPUT D$
140  PRINT "           -- OUTPUT";
150  INPUT E$
160  FILES *,*
170  ASSIGN D$,1,I
180  ASSIGN E$,2,I
190  PRINT "RECORD FORMAT BY FIELD";
200  READ #1,1
210  FOR I=1 TO 32000
220  IF TYP(-1)=2 THEN 280
230  IF TYP(-1)=4 THEN 320
240  READ #1;B
250  PRINT "  N";
260  T$[I,I]="N"
270  GOTO 340
280  READ #1;A$
290  PRINT "  A";
300  T$[I,I]="A"
310  GOTO 340
320  PRINT "  END"
330  GOTO 350
340  NEXT I
350  Z=I-1
360  PRINT "SORT KEY FIELD NUMBER";
370  INPUT K
380  IF (K>0) AND (K <= Z) THEN 410
390  PRINT "YOU HAVE ONLY";Z;"FIELDS"
400  GOTO 360
410  IF T$[K,K] <> "A" THEN 440
420  PRINT "ALPHA SORT KEY -- SUBFIELD FIRST POS, LAST POS";
430  INPUT F,G
440  REM BUILD FILE OF POINTERS AND SORT KEYS
450  IF  END #1 THEN 600
460  FOR I=1 TO 32767
470  READ #1,I
480  FOR J=1 TO Z
490  IF TYP(-1)=2 THEN 540
500  READ #1;A
510  IF J <> K THEN 580
520  PRINT #2,I;I,A
530  GOTO 590
540  READ #1;A$
550  IF J <> K THEN 580
560  PRINT #2,I;I,A$[F,G]
570  GOTO 590
580  NEXT J
590  NEXT I
600  J1=I-1
610  PRINT J1;"ITEMS ON FILE"
620  IF T$[K,K]="A" THEN 640
630  CHAIN "$NUSORT"
640  CHAIN "$ALSORT"
650  END 
