// G I N I T
// GYPSY CHANGES !!
get "BRAVO.DF";
get "HEAP.DF";
get "DISPLAY.DF";
get "CHAR.DF";
get "GINN.DF"; // **
// Incoming Procedures
external [
CREATES;
OPENS;
ult;
errhlt;
bravocom;
qinit;
OPENAFILE;
READVEC;
CLOSEAFILE;
updatedisplay;
move;
ActOnPages;
WritePages;
trims;
initoverlay;
junta
array
movestack
swat;
initkbd;
addbp
hpinit
opens
creates
hplay;
ugt
setmacfp;
DisableInterrupts;
EnableInterrupts;
// **
invalidatedisplay
readfile1
setsel
marks
deallocfn
];
// Incoming Statics
external [
freet;
KEYS;
freee;
rgsbcom;
rgsbopand;
rgdllast;
rgmaxdl;
rgcdlblank;
rgmaccp;
rgupdate;
macww;
vpzone;
rgcplast;
rgdoc;
BITTABLE;
mpfnof;
fillInDA;
eofDA;
DCread;
dnbp;
cominstream
macbp
ozone
pzone
vup
LASTSN1
LASTSN2
lastSN
diskBitTable
diskBTsize
vdcbsys;
vdcborig;
vyorig
SavedFinish
SavedKeyProcess;
stackroot;
Saved335
// **
ddoc
selection
fdebug
hdebug
ozonel
];
// Outgoing Procedures
external [
init;
initsb;
stperm;
markcc;
loadcore;
dumpcore;
// **
swaton
swatoff
];
// Outgoing Statics
external [
begofopsys;
topofheap;
tsmacro
rgdirty
vwheel
sbstate
sbtermesc
vmessage
bbbbb // ** S P Y
]
// Local Statics
static [
begofopsys;
topofheap;
tsmacro
rgdirty
vwheel
sbstate
sbtermesc
vmessage
bbbbb // ** S P Y
]
manifest [
DISKRO = 0;
maxcpage = 128;
AdrAdrFinish=#353 //Holds address of finish code
KeyProcess=12
interruptVector = #500
]
// I N I T
//
let init() be
[
vyorig = 0;
vdcborig = #420;
vdcbsys = rv vdcborig;
rv vdcborig = 0;
initkbd();
begofopsys = stackroot-osmachinecodel+1;
movestack(init,begofopsys-1);
junta();
initoverlay();
rv #335 = begofopsys-stackl;
hpinit(junta,(rv #335)-1-hpbuf,4,pzone);
vup = true;
tsmacro = false;
unless opens(fndir,1,#100000,#144,#10000,false,true) do
errhlt("sdr");
(mpfnof ! fndir) >> OF.wf = true;
creates(fnopsys,"$OPSYS",true,false);
dumpcore(fnopsys, begofopsys, (#176777-begofopsys+1) lshift 1);
setmacfp(fnopsys,((mpfnof ! fnopsys) >> OF.macpos) << PCD.p+2);
freee = #176777;
freet = rv #335;
if freet << odd then freet = freet + 1 // **
let stackloc = array(stackl);
movestack(init,stackloc+stackl-1); // ,lv pstack,... if any
rv #335 = stackloc;
while macbp ls 8 do addbp(array)
// ** bbbbb = array(#2500) ; // ** S P Y
qinit();
// ** GYPSY moved top of heap expansion from here to QINIT.SR
// ** initsb();
// **
invalidatedisplay(ddoc, rgmaccp ! ddoc-1, -1)
readfile1("GYPSY.DIRECTORY", ddoc, 0) // overlays
rgdirty ! ddoc = false
updatedisplay()
setsel(selection,0,-1)
marks(true) ; // first call on marks
// **
bravocom();
counterjunta();
]
// ** GYPSY deleted initsb
// S T P E R M
//
and stperm(st, alloc) = valof
[
let n = (st >> lh + 2) rshift 1 ;
let p = alloc(n) ;
move(st, p, n) ;
resultis p ;
]
// M A R K C C
// catalogue no.
and markcc(rgcc,chfirst,chlast,mark) be
for cc = chfirst to chlast do
rgcc ! cc = (rgcc ! cc) % (#100000 rshift mark);
// D U M P C O R E
//
and dumpcore(fn,ca,bytec) be
[ let of = mpfnof ! fn;
unless of >> OF.wf do errhlt("wfd");
let cpage = bytec << PCD.p+1;
let numcharslast = bytec << PCD.rc ;
let rgda = lv (of >> OF.rgda);
let fileid = lv (of >> OF.fileid);
if (rgda ! 1 eq fillInDA) % (rgda ! 1 eq eofDA) then
if ActOnPages(0,rgda,fileid,0,0,DCread,0,0,dnbp ! bpbuff,0) then errhlt("aop");
;
let rgca = vec maxcpage+1;
for i = 0 to cpage-2 do
[ rgca ! i = ca;
ca = ca+#400;
]
rgca ! (cpage-1) = dnbp ! bpbuff;
move(ca,dnbp ! bpbuff,(numcharslast+1) rshift 1);
if numcharslast eq #1000 then
[ numcharslast = 0;
rgca ! cpage = dnbp ! bpbuff;
cpage = cpage+1;
]
WritePages(rgca-1,rgda,fileid,1,cpage,0,0,numcharslast,0);
of >> OF.macpos = bytec;
trims(fn);
]
// L O A D C O R E
//
and loadcore(fn,ca) be
[ let rgca = vec maxcpage;
let macpos = (mpfnof ! fn) >> OF.macpos;
let cpage = macpos << PCD.p+1
let numcharslast = macpos << PCD.rc
for i = 0 to cpage-2 do
[ rgca ! i = ca;
ca = ca+#400;
]
rgca ! (cpage-1) = dnbp ! bpbuff;
let of = mpfnof ! fn;
let rgda = lv (of >> OF.rgda);
let fileid = lv (of >> OF.fileid);
unless ActOnPages(rgca-1,rgda,fileid,1,cpage,DCread,0,0,0,0) eq cpage do
errhlt("ncp");
move(dnbp ! bpbuff,ca,(numcharslast+1) rshift 1);
]
and counterjunta() be
[
rv vdcborig = 0;
for fn = minuserfn to maxfn-1 do // **
if mpfnof ! fn ne -1 then deallocfn(fn)
hplay(-ozonel, true) // **
if ugt(topofheap, begofopsys-stackl-1) then
[ // **
let smaller = topofheap-(begofopsys-stackl-1)
if smaller << odd then smaller = smaller+1
hplay(smaller, false)
]
@#335=ozone;
movestack(counterjunta, begofopsys-1)
loadcore(fnopsys, begofopsys);
rv LASTSN1 = lastSN ! 0;
rv LASTSN2 = lastSN ! 1;
move(diskBitTable, BITTABLE, diskBTsize);
move(begofopsys, osmachinecode, osmachinecodel);
movestack(counterjunta,stackroot)
@#335=Saved335
rv vdcborig = vdcbsys;
DisableInterrupts()
@AdrAdrFinish=SavedFinish
@(interruptVector+KeyProcess+1) = SavedKeyProcess
EnableInterrupts()
finish
]
and swaton(otherloc, threekeys; numargs N) be
[
rv #453 = rv #453 % #400
if N then rv otherloc = rv otherloc % #400
vwheel = true
hdebug = true
fdebug = threekeys
]
and swatoff() be rv #453 = rv #453 & #77377