30000 REM *** BRIAN SCHWARTZ ***›30010 REM ALPHABETIZATION ROUTINE›30020 REM AND SUPPORTING ROUTINES›30030 REM FOR THE ATARI COMPUTERS›30040 REM *** ANALOG MAGAZINE ***›30100 REM INITIALIZATION ROUTINE›30110 IF INIT=1 THEN RETURN ›30120 INIT=1›30130 DIM STORAGE$(MEMALLOCATION),ITEM$(MAXSIZE),PIVOT$(MAXSIZE)›30140 DIM STACK(100,2),POINTERS(MAXNO,2)›30145 LET POINTERS(0,2)=0›30150 RETURN ›30200 REM CLEAR WORKSPACE ROUTINE›30210 NUMITEMS=0›30220 RETURN ›30300 REM ADD ITEM TO LIST ROUTINE›30310 IF LEN(ITEM$)=0 THEN RETURN ›30320 IF NUMITEMS=MAXNO THEN PRINT "ITEM LIST FILLED":RETURN ›30330 IF POINTERS(NUMITEMS,2)+LEN(ITEM$)>MEMALLOCATION THEN PRINT "MME":RETURN ›30340 NUMITEMS=NUMITEMS+1›30350 LET POINTERS(NUMITEMS,1)=POINTERS(NUMITEMS-1,2)+1›30360 LET POINTERS(NUMITEMS,2)=POINTERS(NUMITEMS-1,2)+LEN(ITEM$)›30370 STORAGE$(POINTERS(NUMITEMS,1),POINTERS(NUMITEMS,2))=ITEM$›30380 RETURN ›30400 REM RETRIEVE ITEM ROUTINE›30410 IF ITEMNO>NUMITEMS OR ITEMNO<1 THEN PRINT "NO SUCH ITEM":RETURN ›30420 ITEM$=STORAGE$(POINTERS(ITEMNO,1),POINTERS(ITEMNO,2))›30430 RETURN ›30500 REM QUICKSORT ROUTINE›30510 IF NUMITEMS<2 THEN RETURN ›30520 SP=1›30530 STACK(1,1)=1›30540 STACK(1,2)=NUMITEMS›30550 IF SP=0 THEN RETURN ›30560 UP=STACK(SP,1)›30570 DOWN=STACK(SP,2)›30580 SP=SP-1›30590 IF UP=DOWN THEN 30550›30600 PIVOT$=STORAGE$(POINTERS(UP,1),POINTERS(UP,2))›30610 US=UP›30620 DS=DOWN›30630 UP=UP+1›30640 IF STORAGE$(POINTERS(UP,1),POINTERS(UP,2))>PIVOT$ THEN 30680›30650 IF UP=DOWN THEN 30790›30660 UP=UP+1›30670 GOTO 30640›30680 IF STORAGE$(POINTERS(DOWN,1),POINTERS(DOWN,2))PIVOT$ THEN UP=UP-1›30800 TEMP=POINTERS(UP,1)›30810 LET POINTERS(UP,1)=POINTERS(US,1)›30820 LET POINTERS(US,1)=TEMP›30830 TEMP=POINTERS(UP,2)›30840 LET POINTERS(UP,2)=POINTERS(US,2)›30850 LET POINTERS(US,2)=TEMP›30860 IF US>UP-1 THEN 30900›30870 SP=SP+1›30880 STACK(SP,1)=US›30890 STACK(SP,2)=UP-1›30900 IF UP+1>DS THEN 30560›30910 SP=SP+1›30920 STACK(SP,1)=UP+1›30930 STACK(SP,2)=DS›30940 GOTO 30560›30950 RETURN ›