REM MAGSAM/E 3.0 - EXTENDED KEYED FILE MANAGEMENT SYSTEM 
REM                    FOR CP/M AND CBASIC AND CB80
REM
REM CB80 VERSION - REAL RECORD NUMBERS ARE ONLY DIFFERENCE
REM
REM PROPRIETARY SOFTWARE OF:
REM
REM  MICRO APPLICATIONS GROUP
REM  20201 SHERMAN WAY, SUITE 205
REM  CANOGA PARK, CA 91306
REM
REM (C) COPYRIGHT 1978-1982 MAG 
REM 
%NOLIST
      MAGSAM.COPYRIGHT$="(C) COPYRIGHT 1978-1982 MICRO APPLICATIONS GROUP"
      MAGSAM.COPYRIGHT$=""
60000 MAGSAM(8)=0:MAGSAM(9)=0:MAGSAM(10)=0:MAGSAM$(18)=""
60020 GOSUB 61450:GOSUB 60100
      IF MAGSAM(8)<>0 THEN GOTO 60090
      IF MAGSAM$(6)<>"B" THEN GOSUB 60530
      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)="WI" THEN GOSUB 60420:GOTO 60090
      IF MAGSAM$(1)="DR" THEN GOSUB 61500:GOTO 60090
      IF MAGSAM$(1)="KD" THEN GOSUB 61500:GOTO 60090
      IF MAGSAM$(1)="OO" THEN GOSUB 61900: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 MAGSAM$(1)="OO" THEN GOTO 60220
      IF LEN(MAGSAM$(2))=MAGSAM(4) THEN GOTO 60220
60210 MAGSAM(8)=41
60220 RETURN
60230 GOSUB 60260
      IF MAGSAM(8)=0 THEN MAGSAM(14)=MAGSAM(14)+MAGSAM(4)+7
      RETURN
60260 MAGSAM(7)=0:MAGSAM(0)=0: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 MAGSAM(7)=0
60310 IF MAGSAM(0)=0 THEN GOSUB 61320 ELSE GOSUB 61410
      RETURN
60340 GOSUB 60260:MAGSAM(8)=0
      IF MAGSAM(10)=99 THEN GOSUB 61445 ELSE GOSUB 60310
      RETURN
60380 IF MAGSAM$(3)="D" THEN GOSUB 60410:GOTO 60390
      MAGSAM(7)=0:GOSUB 60600
60385 GOSUB 60610:MAGSAM(17)=MAGSAM(11):GOSUB 60750:GOSUB 60760
60390 RETURN
60410 GOSUB 60260
60420 MAGSAM$(11)=MAGSAM$(12):GOSUB 60600:MAGSAM$(12)=MAGSAM$(11)
      IF MAGSAM$(3)<>"D" AND 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 MAGSAM(10)=20 THEN \
         MAGSAM(14)=3:MAGSAM(17)=MAGSAM(17)+1:GOSUB 60860
      IF MID$(MAGSAM$(12),(MAGSAM(13)-1)*(MAGSAM(4)+7)+2,MAGSAM(4))="" \
         THEN GOSUB 61120:GOTO 60500
60426 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(6),MAGSAM(6),MAGSAM(6), \
         MAGSAM(11),MAGSAM(12),MAGSAM(19),MAGSAM(18)
      IF MAGSAM(4)<>MAGSAM(6) THEN MAGSAM(8)=41
      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)+7))-1
      RETURN
60600 IF MAGSAM$(18)="S" AND MAGSAM(5)>=MAGSAM(12) THEN \ 
         MAGSAM(9)=MAGSAM(5):MAGSAM(12)=MAGSAM(5)+1:GOTO 60609
      IF MAGSAM$(18)="S" THEN \
         MAGSAM(9)=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$("000000"+STR$(MAGSAM(9)),6)
      RETURN
60610 GOSUB 60790
      MAGSAM$(12)=MAGSAM$(12)+"I"+MAGSAM$(2)+MAGSAM$(10)
60670 RETURN
60750 PRINT#MAGSAM(1),MAGSAM(17);MAGSAM$(12)
      IF MAGSAM(17)=MAGSAM(20) THEN MAGSAM$(20)=MAGSAM$(12)
      RETURN
60760 PRINT#MAGSAM(1),1;"H",256,0,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
      MAGSAM(17)=MAGSAM(11):GOSUB 60860
      IF LEN(MAGSAM$(12))<MAGSAM(4)+8 THEN GOTO 60830
      MAGSAM(14)=LEN(MAGSAM$(12))-(MAGSAM(4)+5)
      IF MID$(MAGSAM$(12),(MAGSAM(13)-1)*(MAGSAM(4)+7)+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)="I":RETURN
60850 MAGSAM(17)=INT((MAGSAM(16)-MAGSAM(15))/2)+MAGSAM(15):RETURN
60860 IF MAGSAM$(6)<>"B" THEN GOTO 60868
      IF MAGSAM(20)=MAGSAM(17) THEN \
         MAGSAM$(12)=MAGSAM$(20):MAGSAM.BIO$="I":MAGSAM.BUF=MAGSAM(17): \
         GOTO 60869
      IF MAGSAM.BIO$="I" AND MAGSAM.BUF=MAGSAM(17) THEN \
         GOTO 60869
      MAGSAM.BUF=MAGSAM(17):MAGSAM.BIO$="I"
      IF MAGSAM(17)<2 THEN \
         MAGSAM(17)=2:MAGSAM.BUF=2:GOTO 60869
60868 READ#MAGSAM(1),MAGSAM(17);MAGSAM$(12)
60869 RETURN
60870 MAGSAM(14)=(MAGSAM(13)-1)*(MAGSAM(4)+7)+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)+7: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)+7
      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),6)):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)+7)*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$("000000"+STR$(MAGSAM(19)-1),6)
      MAGSAM(15)=LEN(MAGSAM$(15))-(MAGSAM(4)+7)*2 
      MAGSAM$(17)=LEFT$(MAGSAM$(15),MAGSAM(15))
      MAGSAM$(12)=MAGSAM$(13)+MAGSAM$(17)+"O"+MID$(MAGSAM$(14),MAGSAM(4)+9, \
         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),6))
      MAGSAM(7)=MAGSAM(7)+1:RETURN
61230 IF MAGSAM$(6)<>"B" THEN GOTO 61237
      IF MAGSAM.BIO$="O" AND MAGSAM.BUF=MAGSAM(0) THEN GOTO 61239	
      MAGSAM.BUF=MAGSAM(0):MAGSAM.BIO$="O"	
61237 READ#MAGSAM(3),MAGSAM(0);MAGSAM$(12)
61239 RETURN
61240 MAGSAM(14)=3
      WHILE MAGSAM(14) <= 249
      IF MID$(MAGSAM$(12),MAGSAM(14)-1,1)="" THEN MAGSAM(10)=10:GOTO 61300
      IF MID$(MAGSAM$(12),MAGSAM(14)-1,1)="O" THEN 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)+7
      WEND
      MAGSAM(8)=99
61300 RETURN
61310 PRINT#MAGSAM(3),MAGSAM(0);MAGSAM$(12):RETURN
61320 IF MAGSAM(14)>MAGSAM(13)*(MAGSAM(4)+7)+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
      IF MID$(MAGSAM$(12),MAGSAM(14)-1,1)="O" THEN \
         GOSUB 61220:MAGSAM(14)=3:GOSUB 61430:GOTO 61400
      MAGSAM(8)=99:GOTO 61400
61390 GOSUB 61445
61400 RETURN
61410 IF MAGSAM(14)>MAGSAM(13)*(MAGSAM(4)+7)+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
      IF MID$(MAGSAM$(12),MAGSAM(14)-1,1)="O" THEN \
         GOSUB 61220:MAGSAM(14)=3:GOTO 61430
      MAGSAM(8)=99:GOTO 61400
61440 RETURN
61445 MAGSAM$(2)=MID$(MAGSAM$(12),MAGSAM(14),MAGSAM(4))
      MAGSAM(14)=MAGSAM(14)+MAGSAM(4)+7
      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" OR MAGSAM$(1)="I" 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 60230
      MAGSAM$(9)=MAGSAM$(2)
61510 IF MAGSAM(8)<>0 THEN GOTO 61590
      IF MAGSAM$(3)<>"D" THEN GOTO 61520
      IF MAGSAM(5)=0 OR \
         (MAGSAM$(9)=MAGSAM$(2) AND MAGSAM(5)=MAGSAM(9)) THEN GOTO 61520
      IF MAGSAM$(9)=MAGSAM$(2) THEN GOSUB 60310: GOTO 61510
      MAGSAM(8)=51:GOTO 61590
61520 MAGSAM(14)=MAGSAM(14)-(MAGSAM(4)+7)
      MAGSAM$(13)=LEFT$(MAGSAM$(12),MAGSAM(14)-2)
      MAGSAM$(12)=MAGSAM$(13)+RIGHT$(MAGSAM$(12), \
         LEN(MAGSAM$(12))-(MAGSAM(14)+MAGSAM(4)+5))
      IF LEFT$(MAGSAM$(12),1)="I" THEN \
         GOSUB 60750 \
      ELSE \
         GOSUB 61310
      IF MAGSAM$(1)="DR" THEN GOSUB 61700
      GOSUB 60760
61590 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))-6,1)="N" THEN \
         MAGSAM(0)=VAL(RIGHT$(MAGSAM$(12),6)): \
         GOSUB 61230:GOTO 61720
      GOSUB 61750:GOTO 61740
61730 IF LEN(MAGSAM$(12))<6 THEN GOSUB 61790: GOTO 61740 
      IF MID$(MAGSAM$(12),LEN(MAGSAM$(12))-6,1)="N" THEN \
         MAGSAM$(12)=LEFT$(MAGSAM$(12),LEN(MAGSAM$(12))-7)+"D"+ \
            RIGHT$("000000"+STR$(MAGSAM(9)),6)+ \ 
            RIGHT$(MAGSAM$(12),7) \
      ELSE \
         GOSUB 61790
61740 GOSUB 61310
      RETURN
61750 MAGSAM$(11)="D"+RIGHT$(MAGSAM$(12),7)
      MAGSAM$(12)=LEFT$(MAGSAM$(12),LEN(MAGSAM$(12))-7)
      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$("000000"+STR$(MAGSAM(19)),6)
      RETURN
61790 MAGSAM$(12)=MAGSAM$(12)+"D"+RIGHT$("000000"+STR$(MAGSAM(9)),6)
      RETURN
61800 MAGSAM(6)=MAGSAM(0):MAGSAM(0)=MAGSAM(18)
61810 GOSUB 61230
      IF MID$(MAGSAM$(12),2,1)="D" THEN \
         MAGSAM(9)=VAL(MID$(MAGSAM$(12),3,6)): \
         MAGSAM$(12)="D"+RIGHT$(MAGSAM$(12),LEN(MAGSAM$(12))-8): \
         GOSUB 61310: GOTO 61890 
      IF MID$(MAGSAM$(12),2,1)="N" THEN \
         MAGSAM(0)=VAL(MID$(MAGSAM$(12),3,6)): \
         GOTO 61810
      MAGSAM(9)=MAGSAM(12):MAGSAM(12)=MAGSAM(12)+1
61890 MAGSAM(0)=MAGSAM(6):RETURN
61900 FOR MAGSAM.I%=10 TO 20
      MAGSAM(MAGSAM.I%)=0
      NEXT MAGSAM.I%
      GOSUB 60530
      IF MAGSAM(8)<>0 THEN GOTO 61990
      MAGSAM.BUF=0:MAGSAM.BIO$="" 
      GOSUB 60840:GOSUB 60850:GOSUB 60860
      MAGSAM$(20)=MAGSAM$(12):MAGSAM(20)=MAGSAM(17):MAGSAM(0)=0
61990 RETURN
%LIST
