REM MAGSAMR/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 SPECIAL READ ONLY VERSION OF MAGSAM/E:  
REM	INCLUDES RK, RN, AND RG FUNCTIONS ONLY
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)="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
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(8)=41:GOTO 60590
60580 MAGSAM(13)=INT(249/(MAGSAM(4)+7))-1
60590 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
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
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
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
