1
0
mirror of https://github.com/dschmenk/PLASMA.git synced 2026-04-21 07:17:03 +00:00

Add keepflags option to module return value

This commit is contained in:
David Schmenk
2024-11-12 10:53:50 -08:00
parent 75b1441574
commit 94d47f031a
9 changed files with 57 additions and 34 deletions
Binary file not shown.
+1
View File
@@ -37,6 +37,7 @@ import cmdsys
//
// Module don't free memory
//
const modflagkeep = $1000
const modkeep = $2000
const modinitkeep = $4000
//
+4 -2
View File
@@ -171,7 +171,7 @@ def strnum(strptr)
return num
end
def prfiles(optpath)
def catalog(optpath)
byte path[64]
byte refnum
byte firstblk
@@ -303,7 +303,7 @@ def getCmd#1
^cmdstr--
memcpy(cmdstr + 1, cmdstr + 2, ^cmdstr)
until ^cmdstr == 0 or ^(cmdstr + 1) <> ' '
prfiles(cmdstr)
catalog(cmdstr)
break
is 'Q'
if modified
@@ -395,6 +395,8 @@ def dcgrTestView(bounce)#0
j = 96-24; incj = bounce
grMode(grOff)
dcgrMode(0)
dcgrColor(clrCursor)
dcgrClearBl7(0, 0, SCR_WIDTH7, SCR_HEIGHT)
while ^$C000 < 128
dcgrPixMap(i, j, 40, 48, @dcgrSprite)
i = i + inci
+1 -1
View File
@@ -11,7 +11,7 @@ arg = argNext(argFirst)
if ^arg
if arg->1 >= '1' and arg->1 <= '7'
call($C000 + ((arg->1 - '0') << 8), 0, 0, 0, 0)
return modkeep
return modflagkeep
fin
fin
puts("Usage: INITSLOT [SLOT NUMBER 1-7]\n")
+12 -8
View File
@@ -15,8 +15,9 @@ const resxhgr2 = $0080
//
// Module don't free memory
//
const modkeep = $1000
const modinitkeep = $2000
const modflagkeep = $1000
const modkeep = $2000
const modinitkeep = $4000
//
// CFFA1 addresses.
//
@@ -1141,18 +1142,21 @@ def parsecmd(strptr)#1
end
def execmod(modfile)#1
byte moddci[63]
word saveheap, savesym, saveflags
word keep, saveheap, savesym, saveflags
perr = 1
if stodci(modfile, @moddci)
saveheap = heap
savesym = lastsym
saveflags = systemflags
if loadmod(@moddci) < modkeep
systemflags = saveflags
heap = saveheap
lastsym = savesym
^lastsym = 0
keep = loadmod(@moddci)
if keep < modkeep
if not (keep & modflagkeep)
systemflags = saveflags
fin
heap = saveheap
lastsym = savesym
^lastsym = 0
fin
fin
return -perr
+10 -6
View File
@@ -19,6 +19,7 @@ const resxhgr2 = $0080
//
// Module don't free memory
//
const modflagkeep = $1000
const modkeep = $2000
const modinitkeep = $4000
//
@@ -1304,18 +1305,21 @@ def execsys(sysfile)#0
end
def execmod(modfile)#1
byte moddci[63]
word saveheap, savesym, saveflags
word keep, saveheap, savesym, saveflags
perr = 1
if stodci(modfile, @moddci)
saveheap = heap
savesym = lastsym
saveflags = systemflags
if loadmod(@moddci) < modkeep
systemflags = saveflags
heap = saveheap
lastsym = savesym
^lastsym = 0
keep = loadmod(@moddci)
if keep < modkeep
if not (keep & modflagkeep)
systemflags = saveflags
fin
heap = saveheap
lastsym = savesym
^lastsym = 0
fin
fin
return -perr
+11 -7
View File
@@ -19,6 +19,7 @@ const nojitc = $0100
//
// Module don't free memory
//
const modflagkeep = $1000
const modkeep = $2000
const modinitkeep = $4000
//
@@ -1381,7 +1382,7 @@ def execsys(sysfile)#0
end
def execmod(modfile)#1
byte moddci[63]
word saveheap, savexheap, savesym, saveflags
word keep, saveheap, savexheap, savesym, saveflags
perr = 1
if stodci(modfile, @moddci)
@@ -1389,12 +1390,15 @@ def execmod(modfile)#1
savexheap = xheap
savesym = lastsym
saveflags = systemflags
if loadmod(@moddci) < modkeep
systemflags = saveflags
xheap = savexheap
heap = saveheap
lastsym = savesym
^lastsym = 0
keep = loadmod(@moddci)
if keep < modkeep
if not (keep & modflagkeep)
systemflags = saveflags
fin
xheap = savexheap
heap = saveheap
lastsym = savesym
^lastsym = 0
fin
fin
return -perr
+9 -5
View File
@@ -14,6 +14,7 @@ const resxhgr2 = $0080
//
// Module don't free memory
//
const modflagkeep = $1000
const modkeep = $2000
const modinitkeep = $4000
//
@@ -1242,7 +1243,7 @@ def loadmod(mod)#1
end
def execmod(modfile)#1
byte moddci[63]
word saveheap, savesym, saveflags, savemodid
word keep, saveheap, savesym, saveflags, savemodid
perr = 1
if stodci(modfile, @moddci)
@@ -1250,14 +1251,17 @@ def execmod(modfile)#1
savesym = lastsym
saveflags = systemflags
savemodid = modid
if loadmod(@moddci) < modkeep
keep = loadmod(@moddci)
if keep < modkeep
if not (keep & modflagkeep)
systemflags = saveflags
fin
while modid > savemodid
modid--
seg_release(modseg[modid])
loop
systemflags = saveflags
heap = saveheap
lastsym = savesym
heap = saveheap
lastsym = savesym
xpokeb(symtbl.0, lastsym, 0)
fin
fin
+9 -5
View File
@@ -15,6 +15,7 @@ const nojitc = $0100
//
// Module don't free memory
//
const modflagkeep = $1000
const modkeep = $2000
const modinitkeep = $4000
//
@@ -1265,7 +1266,7 @@ def loadmod(mod)#1
end
def execmod(modfile)#1
byte moddci[63]
word saveheap, savesym, saveflags, savemodid
word keep, saveheap, savesym, saveflags, savemodid
perr = 1
if stodci(modfile, @moddci)
@@ -1273,14 +1274,17 @@ def execmod(modfile)#1
savesym = lastsym
saveflags = systemflags
savemodid = modid
if loadmod(@moddci) < modkeep
keep = loadmod(@moddci)
if keep < modkeep
if not (keep & modflagkeep)
systemflags = saveflags
fin
while modid > savemodid
modid--
seg_release(modseg[modid])
loop
systemflags = saveflags
heap = saveheap
lastsym = savesym
heap = saveheap
lastsym = savesym
xpokeb(symtbl.0, lastsym, 0)
fin
fin