REM MAGSAM III 3.0 - ISAM FOR CP/M AND CBASIC
REM  MICRO APPLICATIONS GROUP
REM  7300 CALDUS AVE
REM  VAN NUYS, CA  91406
REM  (C) COPYRIGHT 1978, 1979 MAG 
REM 
%NOLIST
      DUMMY$="(C) COPYRIGHT 1978, 1979 MICRO APPLICATIONS GROUP"
60000 MAGSAM%(8)=0:MAGSAM%(10)=0:MAGSAM$(18)=""
60020 GOSUB 61450:GOSUB 60100
      IF MAGSAM%(8)<>0 THEN GOTO  60090
      IF MAGSAM$(1)="RK" THEN GOSUB 60230:GOTO 60090
      IF MAGSAM$(1)="RN" THEN GOSUB 60300:GOTO 60090
      IF MAGSAM$(1)="RG" THEN GOSUB 60340:GOTO 60090
      IF MAGSAM$(1)="WL" THEN GOSUB 60380:GOTO 60090
      IF MAGSAM$(1)="WA" THEN GOSUB 60410:GOTO 60090
      IF MAGSAM$(1)="DR" THEN GOSUB 61500:GOTO 60090
      IF MAGSAM$(1)="KD" THEN GOSUB 61500:GOTO 60090
      MAGSAM%(8)=41
60090 RETURN
60100 IF LEN(MAGSAM$(1))<>2 THEN GOTO 60210
      IF MAGSAM%(1)<1OR MAGSAM%(1)>20OR MAGSAM%(2)<1OR MAGSAM%(2)>20OR MAGSAM%(3)<1OR MAGSAM%(3)>20 THEN GOTO 60210
      IF MAGSAM%(4)>110 THEN GOTO 60210
      IF MAGSAM$(1)="RN" THEN GOTO 60220
      IF MAGSAM%(4)=0 THEN GOTO 60210
      IF LEN(MAGSAM$(2))=MAGSAM%(4) THEN GOTO 60220
60210 MAGSAM%(8)=41
60220 RETURN
60230 MAGSAM%(0)=0:GOSUB 60530:GOSUB 60260
      IF MAGSAM%(8)=0 THEN MAGSAM%(14)=MAGSAM%(14)+MAGSAM%(4)+5
      RETURN
60260 GOSUB 60840
60265 GOSUB 60850:GOSUB 60860:GOSUB 60870
      IF MAGSAM%(10)=0 THEN GOTO 60265
      IF MAGSAM%(10)<>99 THEN MAGSAM%(8)=51
      RETURN
60300 GOSUB 60530
60310 IF MAGSAM%(0)=0 THEN GOSUB 61320 \
      ELSE GOSUB 61410
      RETURN
60340 GOSUB 60530:GOSUB 60260:MAGSAM%(8)=0
      IF MAGSAM%(10)=99 THEN \ 
         GOSUB 61445: \
      ELSE GOSUB 60310
      RETURN
60380 GOSUB 60530:GOSUB 60600
60385 GOSUB 60610:MAGSAM%(17)=MAGSAM%(11):GOSUB 60750:GOSUB 60760:RETURN
60410 GOSUB 60530:GOSUB 60600:GOSUB 60260
      IF MAGSAM%(10)=99 THEN MAGSAM%(8)=61:GOTO 60510
      MAGSAM%(8)=0
      IF MAGSAM%(10)=0 THEN MAGSAM%(8)=99:GOTO 60510
      IF MAGSAM%(10)=20 AND (MAGSAM%(17)=MAGSAM%(11) OR MAGSAM%(11)=0) THEN \
         GOSUB 60385:GOTO 60510
      IF MID$(MAGSAM$(12),(MAGSAM%(13)-1)*(MAGSAM%(4)+5)+2,MAGSAM%(4))="" \
         THEN GOSUB 61120:GOTO 60500
      GOSUB 61060:GOSUB 61080:GOSUB 61090
      IF LEFT$(MAGSAM$(12),1)="I" THEN GOSUB 60750
      IF LEFT$(MAGSAM$(12),1)="O" THEN GOSUB 61310
60500 GOSUB 60760
60510 RETURN
60530 IF END # MAGSAM%(1) THEN 60560
      READ#MAGSAM%(1),1;MAGSAM$(0),MAGSAM%(4),MAGSAM%(4),MAGSAM%(4),MAGSAM%(11),MAGSAM%(12),MAGSAM%(19),MAGSAM%(18)
      GOTO 60580
60560 MAGSAM%(10)=0:MAGSAM%(11)=0:MAGSAM%(12)=1:MAGSAM%(18)=0:MAGSAM%(19)=1
      GOSUB 60760
60580 MAGSAM%(13)=INT(249/(MAGSAM%(4)+5))-1
      RETURN
60600 IF MAGSAM$(18)="S" THEN \ 
         MAGSAM%(9)=MAGSAM%(5):MAGSAM%(12)=MAGSAM%(5):GOTO 60609
      IF MAGSAM%(18) = 0 THEN \
         MAGSAM%(9)=MAGSAM%(12):MAGSAM%(12)=MAGSAM%(12)+1 \
      ELSE \
         GOSUB 61800
60609 MAGSAM$(10)=RIGHT$("0000"+STR$(MAGSAM%(9)),4)
      RETURN
60610 GOSUB 60790
      MAGSAM$(12)=MAGSAM$(12)+"I"+MAGSAM$(2)+MAGSAM$(10)
60670 RETURN
60750 PRINT#MAGSAM%(1),MAGSAM%(17);MAGSAM$(12)
      RETURN
60760 PRINT#MAGSAM%(1),1;"H",256,MAGSAM%(6),MAGSAM%(4),MAGSAM%(11),MAGSAM%(12),MAGSAM%(19),MAGSAM%(18),0,0,0
      RETURN
60790 IF MAGSAM%(11)=0 THEN MAGSAM%(11)=1: GOTO 60820
      READ#MAGSAM%(1),MAGSAM%(11);MAGSAM$(12)
      IF LEN(MAGSAM$(12))<MAGSAM%(4)+6 THEN GOTO 60830
      MAGSAM%(14)=LEN(MAGSAM$(12))-(MAGSAM%(4)+3)
      IF MID$(MAGSAM$(12),(MAGSAM%(13)-1)*(MAGSAM%(4)+5)+2,MAGSAM%(4))="" \
         AND MID$(MAGSAM$(12),MAGSAM%(14)-1,1)<>"O" \
         THEN GOTO 60830
60820 MAGSAM%(11)=MAGSAM%(11)+1:MAGSAM$(12)="I"
60830 RETURN
60840 MAGSAM%(15)=2:MAGSAM%(16)=MAGSAM%(11):MAGSAM$(12)="":RETURN
60850 MAGSAM%(17)=INT((MAGSAM%(16)-MAGSAM%(15))/2)+MAGSAM%(15):RETURN
60860 READ#MAGSAM%(1),MAGSAM%(17);MAGSAM$(12):RETURN
60870 MAGSAM%(14)=(MAGSAM%(13)-1)*(MAGSAM%(4)+5)+3
      IF MID$(MAGSAM$(12),MAGSAM%(14),MAGSAM%(4))="" THEN GOTO 60875
      IF MAGSAM$(2)>MID$(MAGSAM$(12),MAGSAM%(14),MAGSAM%(4)) THEN \
         MAGSAM%(14)=MAGSAM%(14)+MAGSAM%(4)+5:GOTO 60950
60875 MAGSAM%(14)=3
      WHILE MAGSAM%(14) <= 249
      IF MID$(MAGSAM$(12),MAGSAM%(14),MAGSAM%(4))="" THEN GOTO 60950
      IF MAGSAM$(2)>MID$(MAGSAM$(12),MAGSAM%(14),MAGSAM%(4)) THEN \
         GOSUB 61020:GOTO 60940
      IF MID$(MAGSAM$(12),MAGSAM%(14)-1,1)="O" THEN GOTO 60955
      IF MAGSAM$(2)=MID$(MAGSAM$(12),MAGSAM%(14),MAGSAM%(4)) THEN \
         GOSUB 60970:GOTO 60960
      IF MAGSAM$(2)<MID$(MAGSAM$(12),MAGSAM%(14),MAGSAM%(4)) THEN \
         GOSUB 60980:GOTO 60960
60940 MAGSAM%(14)=MAGSAM%(14)+MAGSAM%(4)+5
      WEND
60950 GOSUB 61020:GOTO 60960
60955 IF MAGSAM$(2)<=MID$(MAGSAM$(12),MAGSAM%(14),MAGSAM%(4)) THEN GOSUB 61180
60960 RETURN
60970 MAGSAM%(9)=VAL(MID$(MAGSAM$(12),MAGSAM%(14)+MAGSAM%(4),4)):MAGSAM%(10)=99
      RETURN
60980 MAGSAM%(16)=MAGSAM%(17)-1
      IF MAGSAM%(16)<MAGSAM%(15) THEN MAGSAM%(10)=10 \
      ELSE MAGSAM%(10)=0
      RETURN
61020 MAGSAM%(15)=MAGSAM%(17)+1
      IF MAGSAM%(15)>MAGSAM%(16) THEN MAGSAM%(10)=20 \
      ELSE MAGSAM%(10)=0
      RETURN
61060 MAGSAM$(15)=MID$(MAGSAM$(12),MAGSAM%(14)-1,LEN(MAGSAM$(12))-MAGSAM%(14)+2)
      MAGSAM$(15)="I"+MAGSAM$(2)+MAGSAM$(10)+MAGSAM$(15)
      MAGSAM$(14)=RIGHT$(MAGSAM$(15),(MAGSAM%(4)+5)*2) 
      MAGSAM$(16)="O"+MAGSAM$(14):RETURN
61080 PRINT#MAGSAM%(3),MAGSAM%(19);MAGSAM$(16):MAGSAM%(19)=MAGSAM%(19)+1:RETURN
61090 MAGSAM$(13)=LEFT$(MAGSAM$(12),MAGSAM%(14)-2)
      MAGSAM$(10)=RIGHT$("0000"+STR$(MAGSAM%(19)-1),4)
      MAGSAM%(15)=LEN(MAGSAM$(15))-(MAGSAM%(4)+5)*2 
      MAGSAM$(17)=LEFT$(MAGSAM$(15),MAGSAM%(15))
      MAGSAM$(12)=MAGSAM$(13)+MAGSAM$(17)+"O"+MID$(MAGSAM$(14),MAGSAM%(4)+7,MAGSAM%(4))+MAGSAM$(10)
      RETURN
61120 MAGSAM$(13)=LEFT$(MAGSAM$(12),MAGSAM%(14)-2)
      MAGSAM$(15)=MID$(MAGSAM$(12),MAGSAM%(14)-1,LEN(MAGSAM$(12))-MAGSAM%(14)+2)
      MAGSAM$(12)=MAGSAM$(13)+"I"+MAGSAM$(2)+MAGSAM$(10)+MAGSAM$(15)
      IF LEFT$(MAGSAM$(12),1)="I" THEN GOSUB 60750
      IF LEFT$(MAGSAM$(12),1)="O" THEN GOSUB 61310
      RETURN
61180 MAGSAM$(11)=MAGSAM$(12)
61190 GOSUB 61220:GOSUB 61230:GOSUB 61240
      IF MAGSAM%(10)=0 OR MAGSAM%(10)=20 THEN GOTO 61190
      IF MAGSAM%(10)=99 THEN GOSUB 60970
      RETURN
61220 MAGSAM%(0)=VAL(MID$(MAGSAM$(12),MAGSAM%(14)+MAGSAM%(4),4)):RETURN
61230 READ#MAGSAM%(3),MAGSAM%(0);MAGSAM$(12):RETURN
61240 MAGSAM%(14)=3
      WHILE MAGSAM%(14) <= 249
      IF MID$(MAGSAM$(12),MAGSAM%(14)-1,1)="O" THEN GOSUB 61220:GOTO 61300
      IF MAGSAM$(2)=MID$(MAGSAM$(12),MAGSAM%(14),MAGSAM%(4)) THEN \
         GOSUB 60970:GOTO 61300
      IF MAGSAM$(2)<MID$(MAGSAM$(12),MAGSAM%(14),MAGSAM%(4)) THEN \
         MAGSAM%(10)=10:GOTO 61300
      MAGSAM$(19)=MID$(MAGSAM$(12),MAGSAM%(14),MAGSAM%(4))
      MAGSAM%(14)=MAGSAM%(14)+MAGSAM%(4)+5
      WEND
      MAGSAM%(8)=99
61300 RETURN
61310 PRINT#MAGSAM%(3),MAGSAM%(0);MAGSAM$(12):RETURN
61320 IF MAGSAM%(14)>MAGSAM%(13)*(MAGSAM%(4)+5)+1 THEN \
         MAGSAM%(14)=3:MAGSAM%(17)=MAGSAM%(17)+1
      IF MAGSAM%(14)<3 THEN MAGSAM%(14)=3
      IF MAGSAM%(17)<2 THEN MAGSAM%(17)=2
61350 IF MAGSAM%(17)>MAGSAM%(11) THEN MAGSAM%(8)=51:GOTO 61400
      GOSUB 60860
      IF MID$(MAGSAM$(12),MAGSAM%(14)-1,1)="" THEN \
         MAGSAM%(14)=3:MAGSAM%(17)=MAGSAM%(17)+1:GOTO 61350
      IF MID$(MAGSAM$(12),MAGSAM%(14)-1,1)="I" THEN \
         GOSUB 60970: GOTO 61390
      GOSUB 61220:GOSUB 61230:MAGSAM%(14)=3:GOSUB 60970
61390 GOSUB 61445
61400 RETURN
61410 IF MAGSAM%(14)>MAGSAM%(13)*(MAGSAM%(4)+5)+1 THEN \
         MAGSAM%(14)=3:MAGSAM%(17)=MAGSAM%(17)+1:MAGSAM%(0)=0: \
         GOSUB 61320:GOTO 61440
      IF MAGSAM%(14)<3 THEN MAGSAM%(14)=3
61430 GOSUB 61230
      IF MID$(MAGSAM$(12),MAGSAM%(14)-1,1)="" THEN \
         MAGSAM%(14)=3:MAGSAM%(17)=MAGSAM%(17)+1:MAGSAM%(0)=0: \
         GOSUB 61320:GOTO 61440
      IF MID$(MAGSAM$(12),MAGSAM%(14)-1,1)="I" THEN \
         GOSUB 60970:GOSUB 61445:GOTO 61440
      GOSUB 61220:MAGSAM%(14)=3:GOTO 61430
61440 RETURN
61445 MAGSAM$(2)=MID$(MAGSAM$(12),MAGSAM%(14),MAGSAM%(4))
      MAGSAM%(14)=MAGSAM%(14)+MAGSAM%(4)+5
      RETURN
61450 IF LEFT$(MAGSAM$(1),1)<>"S" THEN GOTO 61460
      MAGSAM$(18)="S"
      MAGSAM$(1)=RIGHT$(MAGSAM$(1),1)
      IF MAGSAM$(1)="K" OR MAGSAM$(1)="G" OR MAGSAM$(1)="N" THEN \
         MAGSAM$(1)="R"+MAGSAM$(1): GOTO 61460
      IF MAGSAM$(1)="L" OR MAGSAM$(1)="A" THEN \
         MAGSAM$(1)="W"+MAGSAM$(1): GOTO 61460
      IF MAGSAM$(1)="D" THEN \
         MAGSAM$(1)="K"+MAGSAM$(1)
61460 RETURN
61500 MAGSAM$(11)="":MAGSAM$(19)="":GOSUB 60530:GOSUB 60260
      IF MAGSAM%(8)<>0 THEN GOTO 61590
      MAGSAM$(13)=LEFT$(MAGSAM$(12),MAGSAM%(14)-2)
      MAGSAM$(12)=MAGSAM$(13)+RIGHT$(MAGSAM$(12),LEN(MAGSAM$(12))-(MAGSAM%(14)+MAGSAM%(4)+3))
      IF LEFT$(MAGSAM$(12),1)="I" THEN \
         GOSUB 60750 \
      ELSE \
         GOSUB 61310: GOSUB 61600
      IF MAGSAM$(1)="DR" THEN GOSUB 61700
      GOSUB 60760
61590 RETURN
61600 IF "O"+MAGSAM$(2)<> \
         MID$(MAGSAM$(11),LEN(MAGSAM$(11))-(MAGSAM%(4)+4),MAGSAM%(4)+1) THEN \
         GOTO 61650
      IF MAGSAM$(19)="" THEN \
         MAGSAM$(12)=LEFT$(MAGSAM$(11),LEN(MAGSAM$(11))-(MAGSAM%(4)+5)): \
         GOSUB 60750: GOTO 61650
      MAGSAM$(12)= \
         LEFT$(MAGSAM$(11),LEN(MAGSAM$(11))-(MAGSAM%(4)+4))+ \
         MAGSAM$(19)+RIGHT$(MAGSAM$(11),4)
      GOSUB 60750
61610 MAGSAM%(0)=VAL(RIGHT$(MAGSAM$(12),4))
61615 GOSUB 61230
      IF LEN(MAGSAM$(12))<MAGSAM%(4)+6 THEN GOTO 61650
      IF "O"+MAGSAM$(2)<> \
         MID$(MAGSAM$(12),LEN(MAGSAM$(12))-(MAGSAM%(4)+4),MAGSAM%(4)+1) THEN \
         GOTO 61650
      IF MAGSAM$(11)="END" THEN \
         MAGSAM%(10)=VAL(RIGHT$(MAGSAM$(12),4)): MAGSAM$(12)="O": \
         GOSUB 61310: MAGSAM%(0)=MAGSAM%(10): GOTO 61615
      IF LEN(MAGSAM$(12))<(2*MAGSAM%(4)+9) THEN \
         GOSUB 61660: GOSUB 61310: GOTO 61610
      IF MAGSAM$(19)<>MID$(MAGSAM$(12),LEN(MAGSAM$(12))-(2*MAGSAM%(4)+8), \
         MAGSAM%(4)) THEN \ 
            GOSUB 61660: GOSUB 61310: GOTO 61610 \
      ELSE \
         MAGSAM$(11)="END": \
         GOSUB 61670: GOSUB 61310: MAGSAM%(0)=MAGSAM%(10): GOTO 61615
61650 RETURN
61660 MAGSAM$(12)=LEFT$(MAGSAM$(12),LEN(MAGSAM$(12))-(MAGSAM%(4)+4))+ \
      MAGSAM$(19)+RIGHT$(MAGSAM$(12),4)
      RETURN
61670 MAGSAM%(10)=VAL(RIGHT$(MAGSAM$(12),4))
      MAGSAM$(12)=LEFT$(MAGSAM$(12),LEN(MAGSAM$(12))-(MAGSAM%(4)+5))
      RETURN
61700 IF MAGSAM%(18)=0 THEN \
         GOSUB 61770:MAGSAM%(18)=MAGSAM%(0) \
      ELSE \
         MAGSAM%(0)=MAGSAM%(18):GOSUB 61230
61720 IF LEN(MAGSAM$(12))<240 THEN GOTO 61730
      IF MID$(MAGSAM$(12),LEN(MAGSAM$(12))-4,1)="N" THEN \
         MAGSAM%(0)=VAL(RIGHT$(MAGSAM$(12),4)): \
         GOSUB 61230:GOTO 61720 \
      ELSE \
         GOSUB 61750:GOTO 61740
61730 IF LEN(MAGSAM$(12))<6 THEN GOSUB 61790: GOTO 61740 
      IF MID$(MAGSAM$(12),LEN(MAGSAM$(12))-4,1)="N" THEN \
         MAGSAM$(12)=LEFT$(MAGSAM$(12),LEN(MAGSAM$(12))-5)+"D"+ \
            RIGHT$("0000"+STR$(MAGSAM%(9)),4)+ \ 
            RIGHT$(MAGSAM$(12),5) \
      ELSE \
         GOSUB 61790
61740 GOSUB 61310
      RETURN
61750 MAGSAM$(11)="D"+RIGHT$(MAGSAM$(12),5)
      MAGSAM$(12)=LEFT$(MAGSAM$(12),LEN(MAGSAM$(12))-5)
      GOSUB 61780: GOSUB 61310: GOSUB 61770
      MAGSAM$(12)=MAGSAM$(11): GOSUB 61790
      RETURN
61770 MAGSAM%(0)=MAGSAM%(19):MAGSAM%(19)=MAGSAM%(19)+1:MAGSAM$(12)="D"
      RETURN
61780 MAGSAM$(12)=MAGSAM$(12)+"N"+RIGHT$("0000"+STR$(MAGSAM%(19)),4)
      RETURN
61790 MAGSAM$(12)=MAGSAM$(12)+"D"+RIGHT$("0000"+STR$(MAGSAM%(9)),4)
      RETURN
61800 MAGSAM%(0)=MAGSAM%(18)
61810 GOSUB 61230
      IF MID$(MAGSAM$(12),2,1)="D" THEN \
         MAGSAM%(9)=VAL(MID$(MAGSAM$(12),3,4)): \
         MAGSAM$(12)="D"+RIGHT$(MAGSAM$(12),LEN(MAGSAM$(12))-6): \
         GOSUB 61310: GOTO 61890 
      IF MID$(MAGSAM$(12),2,1)="N" THEN \
         MAGSAM%(0)=VAL(MID$(MAGSAM$(12),3,4)): \
         GOTO 61810
      MAGSAM%(9)=MAGSAM%(12):MAGSAM%(12)=MAGSAM%(12)+1
61890 RETURN
