*\ ---- SAVE:LOAD ---- 08.09.86 VERSION 92 **=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=** ** WORKING WTIH VIRTUAL ARRAY ** **=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=** ** LOCALS *LLOAD DATA TYPOPR DATA MEMADR,BYTE % AäPEC âAêTA é COäEPöéMOE DATA MEMIND=:M:TAB % TAâìéþKA C éHäEKCAMé âõæEPOB DATA BUFTAB=:B:TAB % - C AäPECOM âõæEPA DATA CONTAB=:C:TAB % - C CþETþéKOM DATA CONTB2=:C:TAB+2 DATA PAGTAB=:P:TAB % - C HOMEPOM CTPAHéãù DATA MODTAB=:F:TAB % - æìAöKé éúMEHEHéñ DATA XWORK,WORK % PAâOþéE ñþEêKé (äBA CìOBA) DATA ASWAP=SWAPIN,RSWAP % äìñ ðOäðPOçPAMMù DATA 'NBUF'=16 % þéCìO âõæEPOB DATA INICON=16*4 % HAþAìøHOE úHAþEHéE CþETþéKA DATA :B:TAB=0,(NBUF)*=%*&100+!MBUF DATA :C:TAB[NBUF+1] DATA :P:TAB=0,(NBUF)*=&FFFF DATA :F:TAB[NBUF+1] BYTES :M:TAB[256] % TAâìéþKA éHäEKCOB (CHAþAìA C HõìñMé) BUFFERS MBUF(256*NBUF) *\ ** úAðéCø âAêTA B BéPTõAìøHùê MACCéB ** --> ^A -- AäPEC ** ^E -- Téð OðEPAãéé =0 - CìOBO <>0 - âAêT ** ^X -- CìOBO (Téð=0) éìé âAêT ! çPñúø (Téð<>0) ** <-- CARRY -- TRUE - HOPMAìøHOE OKOHþAHéE ** -- FALSE - OûéâKA OâPAýEHéñ K KAHAìõ ** ^A,^E,^X -- éCðOPþEHù ** PROGRAM WRITE(MEMADR,,BYTE) IF >1= AND ^E= THEN RETURN ,,2 (IF ,,MEMIND(MEMADR:):= * éCðOPþEHO æìEPOBùM IF MEMADR:>=&E0 THEN CALL DEVWR MEMADR,,BYTE ; RETURN , ,TYPOPR= GOSUB @ASWAP(RSWAP) =,TYPOPR IF) WORK=BUFTAB() $CONTAB()=MODTAB()=1 =,,(MEMADR+1): IF ^E= THEN WORK()=BYTE.XAA. ELSE WORK():=BYTE: RETURN ,,0 *\ ** úAçPõúKA âAêTA éú BéPTõAìøHOçO MACCéBA ** --> ^A -- AäPEC âAêTA ** ^E -- Téð OðEPAãéé =0 - CìOBO <>0 - âAêT ** <-- CARRY -- TRUE - HOPMAìøHOE OKOHþAHéE ** -- FALSE - OûéâKA OâPAýEHéñ K KAHAìõ ** ^A -- CìOBO (Téð=0) éìé âAêT ! âAêT (Téð<>0) ** ^E,^X -- éCðOPþEHù ** PROGRAM READ(MEMADR) IF >1= AND ^E= THEN RETURN ,,2 (IF ,,MEMIND(MEMADR:):= * éCðOPþEHO æìEPOBùM IF MEMADR:>=&E0 THEN CALL DEVRD MEMADR ; RETURN , ,TYPOPR= GOSUB @ASWAP(RSWAP) =,TYPOPR IF) WORK=BUFTAB() $CONTAB()=1 =,,(MEMADR+1): IF ^E= THEN =WORK().XAA. ELSE =WORK()[WORK(): RETURN ,,0 *\ ** OâMEH C äéCKOM, ECìé HEOâXOäéMOçO âõæEPA HET B ðAMñTé. ** *SUBROUTINE SWAPIN <> = * ......éýEM âõæEP C MéHéMAìøHùM þéCìOM OâPAýEHéê WORK=#MIN1 (XCYCLE 'NBUF*2' STEP 2) IF CONTB2()-WORK<> THEN WORK,,XWORK=CONTB2() * ......MEHñEM CTPAHéãõ B âõæEPE ,,XWORK=BUFTAB(XWORK+2) IF ,MODTAB()<> THEN CALL M:SAVE ,,PAGTAB() CALL M:LOAD ,,MEMADR: * ......MEHñEM CþETþéKé (IF PAGTAB(XWORK)>= (XCYCLE 'NBUF*2' STEP 2) $CONTB2()=CONTB2().RLS.2.CNA. * ......MOäéæéãéPõEM KAPTõ âõæEPOB MEMIND(PAGTAB(XWORK)):=0 IF) MEMIND(MEMADR:):=XWORK * ......úAðOìHñEM üìEMEHTù TAâìéã äìñ HOBOê CTPAHéãù PAGTAB(XWORK)=MEMADR: MODTAB(),CONTAB()=0,INICON * ......OCTABìñEM B HOMEP (õäBOEHHùê) PAâOþEçO âõæEPA GOTO @RSWAP *\ ** OâMEH C äéCKOM ** LOCALS -LMSAVE DATA [2] USE ACR:STRUCT,FIL:STRUCT,LIB:PARAMS DATA XLIBR=LBLIBR+&100 DATA 'READ'=0,'WRITE'=1 DATA 'MAPSZ'=256,MAP(MAPSZ) DATA 'LBUF'=256 DATA MAXEC=-1,PAGE,'FREE'=0 DATA IOB=WRITE,ABUF,LENG=LBUF,NSEC=0 DATA 'COMAND'=IOB+1 *\ úAðéCø CEKTOPA HA äéCK ** ^A -- AäPEC âõæEPA ** ^X -- HOMEP CEKTOPA ** PROGRAM M:SAVE(ABUF,,PAGE) (IF MAXEC=#MIN1 MAXEC=0 MAP('MAPSZ-1'):='FREE' !MAP(0)=MAP+1.XEX. DATA CREAT=(1.0,0."-"."!64K:BYTES") !#AZC(0)=CREAT,20 IF CSV START 'LIBCRE',,XLIBR<0 THEN STOP , IOB:=#AZC(1): CALL :IO IOB\ IF) NSEC=((IF PAGE<> AND MAP(PAGE):='FREE' THEN MAP():=$MAXEC=1)) COMAND:='WRITE' CALL :IO IOB\ RETURN ABUF,,PAGE *\ þTEHéE CEKTOPA C äéCKA ** ^A -- AäPEC âõæEPA ** ^X -- HOMEP CEKTOPA ** ** PROGRAM M:LOAD(ABUF,,PAGE) (IF MAXEC=#MIN1 OR (,,PAGE<> AND MAP():='FREE') ABUF(LENG-1):=&00 !ABUF(0)=ABUF+1.XEX. ELSE NSEC=MAP(PAGE): COMAND:='READ' CALL :IO IOB\ IF) RETURN ABUF,,PAGE