// INITOM MODULE
get "CHAR.DF"
get "BRAVO1.DF"
get "AltoFileSys.d"
get "OM.DF"
get "vm.df"
// Incoming Procedures
external [
ActOnPages
move
movec
gets
stput
dirlkup
opens
setmacfp
open
array
pjinit1
errhlta
normalizefilesb
RealDA
lastproc
];
// Incoming Statics
external [
mpfnof
vversion
vsn1
vsn2
vda
dnbp
fillInDA
eofDA
DCread
];
// Outgoing Procedures
external [
initom
readsbsubsys
opensavefile
];
// Outgoing Statics
external [
ozone
ozonel
mpmnom
macmn
vCfaEndRes
];
// Local Statics
static [
ozone
ozonel
mpmnom
macmn
vCfaEndRes
];
// Local Structures
structure SV:
[ startingaddress word
length word
];
// Local manifests
manifest [
cda = 500
]
// I N I T O M
//
let initom() be
[
mpmnom = array(maxmn+1);
movec(mpmnom,mpmnom+maxmn+1,0);
let tom = array(lnom);
mpmnom ! mnfixedstor = tom;
movec(tom,tom+lnom-1,0);
tom >> OM.ffixedstor = true;
tom >> OM.fp = -1;
tom >> OM.mn = mnfixedstor;
macmn = 1;
opensavefile();
ozone = lastproc;
ozonel = 0;
]
// O P E N S A V E F I L E
//
and opensavefile() be
[
// let tsbsubsys = vec 50;
// tsbsubsys ! 0 = 0;
// readsbsubsys(tsbsubsys);
// let tnsbsubsys = vec 50;
// tnsbsubsys ! 0 = 0;
// normalizefilesb(tsbsubsys,tnsbsubsys);
// unless dirlkup(tnsbsubsys) do errhlt("dir");
// let da = RealDA(vCfaEndRes>>CFA.fp.leaderVirtualDa)
// opens(fnom,vCfaEndRes>>CFA.fp.version,vCfaEndRes>>CFA.fp.serialNumber.word1,vCfaEndRes>>CFA.fp.serialNumber.word2,da,true,true);
// let ofom = mpfnof ! fnom;
// ofom >> OF.wf = false;
// let tpfnrgda = lv(ofom >> OF.rgda);
// let tpfnfileid = lv(ofom >> OF.fileid);
let tnumcharslast = 0;
// ActOnPages(0,tpfnrgda,tpfnfileid,0,1,DCread,lv tnumcharslast,0,dnbp ! bpbuff);
// let tsv = dnbp ! bpbuff;
// let tfpdsk = 1;
let fptrOm = array(lFP)
move(vCfaEndRes,fptrOm,lFP)
let fid = vec 3
fid ! 0 = fptrOm >> FP.version
move(lv (fptrOm >> FP.serialNumber),fid+1,2)
let pgn = vCfaEndRes>>CFA.fa.pageNumber;
let cpg = (vCfaEndRes>>CFA.fa.charPos eq 0) ? 1,2
// let tcfpdsk = tsv >> SV.length+1;
let trgda = vec cda;
movec(trgda,trgda+pgn-1,eofDA);
movec(trgda+pgn+1,trgda+cda-1,fillInDA);
ckmove: trgda ! pgn = vCfaEndRes>>CFA.fa.da;
let pgnlast = nil;
[ pgnlast = ActOnPages(0,trgda,fid,pgn,pgn+cpg-1,DCread,lv tnumcharslast,0,dnbp ! bpbuff);
if tnumcharslast ne #1000 do break;
let tov = dnbp ! bpbuff;
let tom = array(lnom);
movec(tom,tom+lnom-1,0);
tom >> OM.fp = pgn+cpg-2;
unless tom >> OM.fp eq tov >> OV.fp then errhlta(56)
tom >> OM.fptr = fptrOm;
tom >> OM.aFa.pageNumber = tom >> OM.fp+1;
tom >> OM.aFa.da = trgda ! (tom >> OM.aFa.pageNumber);
tom >> OM.aFa.charPos = 0;
tom >> OM.cword = tov >> OV.lnmod;
macmn = macmn+1;
if macmn ge maxmn then errhlta(57);
setom: tom >> OM.mn = macmn;
mpmnom ! macmn = tom;
pgn = pgn+cpg-1;
cpg = ((tov >> OV.lnmod+#377) << lh)+1;
] repeat
// setmacfp(fnom,pgnlast);
// move(trgda,lv ((mpfnof ! fnom) >> OF.rgda),pgnlast+2)
macmn = macmn+1
]
// R E A D S B S U B S Y S
//
// and readsbsubsys(sb) be
// [
// if mpfnof ! fncom eq -1 then open(fncom,"COM.CM",false,false);
// let tich = 0;
// [ let tchar = gets(fncom);
// if (tchar eq chcr) % (tchar eq chsp) % (tchar eq $/) then break;
// stput(sb,tich,tchar);
// tich = tich+1;
// ] repeat
// sb >> SB.siz = tich;
// ]