10000DEFPROCLoadrecord(N%)
10010T%=3:PROCOsgbpb
10020ENDPROC
10040DEFPROCSaverecord(N%)
10050T%=1:PROCOsgbpb
10060ENDPROC
10080DEFPROCOsgbpb
10090!&C26=N%:*SB13
10100newsurface%=!&C26
10110fileoffset%=!&C2A
10120IFnewsurface%<>oldsurface% THENPROCOpenup(newsurface%)
10130?&4780=channel%
10140!&4781=Abuffer%
10150!&4785=recordlength%
10160!&4789=fileoffset%
10170A%=T%:X%=&80:Y%=&47:CALL&FFD1
10180ENDPROC
10200DEFPROCOpenup(N%)
10210CLOSE#0
10220$&4780=":"+CHR$(2*N%+48):$&4782=".A.DBASE"
10230A%=&C0:X%=&80:Y%=&47
10240channel%=USR(&FFCE) AND&FF
10250oldsurface%=N%
10260ENDPROC
10280DEFPROCLoadfile
10290PROCLoadmap
10300PROCLoadfields
10310PROCLoadtitle
10320*SB10
10330recordlength%=!&C26
10340filelength%=!&C2A
10350fileused%=!&C2E
10360*SB27
10370title$=$&C26
10380date$=$&C3C
10390PROCOpenup(0)
10400ENDPROC
10420DEFPROCLoadmap
10430*LOAD":0.A.BITMSK"
10450ENDPROC
10470DEFPROCLoadfields
10480*LOAD":0.A.CARDFLD"
10500ENDPROC
10520DEFPROCLoadtitle
10530*LOAD":0.A.HEAD"
10550ENDPROC
10570DEFPROCLoadcard
10580*LOAD":0.A.CARDSCR"
10600ENDPROC
10620DEFPROCSavemap
10630*SAVE":0.A.BITMSK" 1C49 +200 0
10650ENDPROC
10670DEFPROCSavefields
10680*SAVE":0.A.CARDFLD" 1900 +349 0
10700ENDPROC
10720DEFPROCSavetitle
10730*SAVE":0.A.HEAD" 1E49 +40 0
10750ENDPROC
10770DEFPROCSavecard
10780*SAVE":0.A.CARDSCR" 7C00 +398 0
10800ENDPROC
10900DEFPROCCheckmap(N%)
10910!&C26=N%:*SB14
10920PROCtrue
10930ENDPROC
10950DEFPROCSetmap(N%)
10960!&C26=N%:*SB15
10970ENDPROC
10990DEFPROCClearmap(N%)
11000!&C26=N%:*SB16
11010ENDPROC
11030DEFPROCClearcard
11040*SB20
11050PROCShowrecord
11060ENDPROC
11080DEFPROCCheckempty
11090*SB18
11100PROCtrue
11110ENDPROC
11170DEFPROCInitialise
11180*SB00
11190Afields%=!&C26
11200Amap%=!&C2A
11210Atitle%=!&C2E
11220Adate%=!&C32
11230Adouble%=!&C36
11240Abuffer%=!&C3A
11250Asubset%=!&C3E AND&FFFF
11260Aline%=!&C42 AND&FFFF
11270PROCCopyright
11280ENDPROC
11300DEFPROCCopyright
11310*SB01
11320ENDPROC
11340DEFPROCInvertmap
11350*SB22
11360ENDPROC
11380DEFPROCClearmessage
11390*SB11
11400ENDPROC
11420DEFPROCCursoroff
11430VDU23,1,0;0;0;0;
11440ENDPROC
11460DEFPROCCursoron
11470VDU23,1,1;0;0;0;
11480ENDPROC
11500DEFPROCShowrecord
11510*SB17
11520ENDPROC
11540DEFPROCCardscreen
11550*SB12
11560PROCCursoroff
11570ENDPROC
11590DEFPROCFieldspec(F$)
11600$&C26=F$
11610*SB21
11620PROCtrue
11630IF NOT true THEN11690
11640type$=$&C35
11650fieldlength%=!&C37
11660tabx%=!&C3B
11670taby%=!&C3F
11680recordoffset%=!&C43
11690ENDPROC 
11820DEFPROCtrue
11830IF?&CFE=0THENtrue=0ELSEtrue=-1
11840ENDPROC
11860DEFPROCPrintcard
11870PROCCursoroff
11880FORI%=0TO22
11890PROCScreenline(I%)
11900PROCPrintline(L$)
11910NEXTI%
11920ENDPROC
11940DEFPROCScreenline(N%)
11950!&C26=N%
11960*SB24
11970L$=$Aline%
11980ENDPROC
12000DEFPROCPrintline(P$)
12010$Aline%=STRING$(margin%," ")+P$
12020*SB26
12025IF?&47F9=0THENVDU2,1,10,3
12030ENDPROC
12050DEFPROCPrintnl(N%)
12060IFN%=0THEN12110
12080FORI%=1TON%
12090VDU2,1,13,3:IF?&47F9=0THENVDU2,1,10,3
12100NEXTI%
12110ENDPROC
12130DEFPROCListfields
12140*SB25
12150ENDPROC
12170DEFPROCLoadsubset(N$)
12180$&4780="LOAD "+N$
12190X%=&80:Y%=&47:CALL&FFF7
12200subsetlength%=!Asubset% AND&FFFF
12210ENDPROC
12230DEFPROCSavesubsetrecord(N%)
12240record%=!(Asubset%+2+N%*2)
12250PROCSaverecord(record%)
12260ENDPROC
12280DEFPROCLoadsubsetrecord(N%)
12290record%=!(Asubset%+2+N%*2)
12300PROCLoadrecord(record%)
12310ENDPROC
12330DEFPROCGetfield(name$)
12335PROCFieldspec(name$)
12340$&C26=name$
12350*SB30
12360PROCtrue
12370IFNOT true THENfieldvalue$="":GOTO12390
12380fieldvalue$=$Aline%
12385IFtype$="S"THEN12400
12390fieldvalue=VAL(fieldvalue$)
12400ENDPROC
12420DEFPROCPutfield(name$,fieldvalue$)
12430PROCFieldspec(name$)
12440PROCtrue
12450IFNOT true THEN12480
12460IFtype$="N" THEN$Aline%=RIGHT$(fieldvalue$,fieldlength%)
ELSE$Aline%=LEFT$(fieldvalue$,fieldlength%)
12470*SB32
12480ENDPROC

