diff --git a/src/libsrc/apple/fileio.pla b/src/libsrc/apple/fileio.pla index 9f01a91..0bc5f10 100644 --- a/src/libsrc/apple/fileio.pla +++ b/src/libsrc/apple/fileio.pla @@ -23,14 +23,14 @@ const sysbuf = $0800 // // External interface // -predef a2getpfx(path), a23setpfx(path), a2getfileinfo(path, fileinfo), a2setfileinfo(path, fileinfo), a23geteof(refnum)#2, a23seteof(refnum, eofl, eofh), a2iobufs(iobufs), a2open(path), a2close(refnum) +predef a2getpfx(path), a2setpfx(path), a2getfileinfo(path, fileinfo), a2setfileinfo(path, fileinfo), a23geteof(refnum)#2, a23seteof(refnum, eofl, eofh), a2iobufs(iobufs), a2open(path), a2close(refnum) predef a23read(refnum, buf, len), a2write(refnum, buf, len), a2create(path, type, aux), a23destroy(path), a23rename(path, newpath) predef a2newline(refnum, emask, nlchar), a2online(unit, buf), a2readblock(unit, buf, block), a2writeblock(unit, buf, block) // // Exported function table. // word fileio[] -word = @a2getpfx, @a23setpfx, @a2getfileinfo, @a2setfileinfo, @a23geteof, @a23seteof, @a2iobufs, @a2open, @a2close +word = @a2getpfx, @a2setpfx, @a2getfileinfo, @a2setfileinfo, @a23geteof, @a23seteof, @a2iobufs, @a2open, @a2close word = @a23read, @a2write, @a2create, @a23destroy, @a23rename word = @a2newline, @a2online, @a2readblock, @a2writeblock // @@ -60,7 +60,7 @@ def a2getpfx(path) return path end def a3getpfx(path) - byte params[3] + byte params[4] params.0 = 2 params:1 = path @@ -71,7 +71,7 @@ end def a1setpfx(path) return path end -def a23setpfx(path) +def a2setpfx(path) byte params[3] params.0 = 1 @@ -79,6 +79,29 @@ def a23setpfx(path) perr = syscall($C6, @params) return path end +def a3setpfx(path) + byte params[6] + byte fileinfo[2] + char fullpath[65] + + if ^path and ^(path + 1) <> '/' and ^(path + 1) <> '.' + a3getpfx(@fullpath) + strcat(@fullpath, path) + path = @fullpath + fin + params.0 = 3 + params:1 = path + params:3 = @fileinfo + params.5 = 2 + if not syscall($C4, @params) and (fileinfo.1 == $00 or fileinfo.1 == $0F) // Make sure it's a directory + params.0 = 1 + params:1 = path + syscall($C6, @params) + else + a3getpfx(path) // Get current path + fin + return path +end def a1getfileinfo(path, fileinfo) perr = $01 return perr @@ -445,6 +468,7 @@ end when MACHID & MACHID_MODEL is MACHID_III fileio:getpfx = @a3getpfx + fileio:setpfx = @a3setpfx fileio:getfileinfo = @a3getfileinfo fileio:setfileinfo = @a3setfileinfo fileio:iobufalloc = @a13iobufs diff --git a/src/mk4th b/src/mk4th old mode 100644 new mode 100755 diff --git a/src/toolsrc/plforth.pla b/src/toolsrc/plforth.pla index 4cd43c0..f4c575e 100644 --- a/src/toolsrc/plforth.pla +++ b/src/toolsrc/plforth.pla @@ -6,22 +6,25 @@ include "inc/longjmp.plh" // // Internal variables // -word vlist, infunc, inptr, IIP, W -word vmvect, startheap, arg -word keyinbuf = $1FF const JSR = $20 // 6502 JSR opcode needed for VM entry const SRCREFS = 2 const INBUF_SIZE = 128 +word vlist, infunc, inptr, IIP, W +word vmvect, startheap, arg byte srclevel = 0 -word inbufptr -byte inref[SRCREFS] -word previnptr[SRCREFS] // // Internal buffers // res[SRCREFS * INBUF_SIZE] inbuf res[t_except] exitforth // +// Input references, pointers, and saved values +// +word keyinbuf = @inbuf // Point somewhere benign for starters (updated in keyin) +word inbufptr +byte inref[SRCREFS] +word previnptr[SRCREFS] +// // RSTACK // const RSTK_SIZE = 16 diff --git a/src/vmsrc/apple/soscmd.pla b/src/vmsrc/apple/soscmd.pla index c444dc1..46f805c 100755 --- a/src/vmsrc/apple/soscmd.pla +++ b/src/vmsrc/apple/soscmd.pla @@ -189,7 +189,7 @@ def shell#1 catalog(cmdptr) break is 'P' - if ^cmdptr and ^(cmdptr + 1) <> '/' + if ^cmdptr and ^(cmdptr + 1) <> '/' and ^(cmdptr + 1) <> '.' strcat(@prefix, cmdptr) else strcpy(@prefix, cmdptr) diff --git a/src/vmsrc/apple/soscmdjit.pla b/src/vmsrc/apple/soscmdjit.pla index 15e86a2..41d1d16 100755 --- a/src/vmsrc/apple/soscmdjit.pla +++ b/src/vmsrc/apple/soscmdjit.pla @@ -264,7 +264,7 @@ def shell#1 catalog(cmdptr) break is 'P' - if ^cmdptr and ^(cmdptr + 1) <> '/' + if ^cmdptr and ^(cmdptr + 1) <> '/' and ^(cmdptr + 1) <> '.' strcat(@prefix, cmdptr) else strcpy(@prefix, cmdptr) diff --git a/src/vmsrc/apple/sossys.pla b/src/vmsrc/apple/sossys.pla index a89ef5e..c119b07 100755 --- a/src/vmsrc/apple/sossys.pla +++ b/src/vmsrc/apple/sossys.pla @@ -1225,24 +1225,23 @@ def loadmod(mod)#1 end def execmod(modfile)#1 byte moddci[63] - word saveheap, savesym, saveflags + word saveheap, savesym, saveflags, savemodid perr = 1 if stodci(modfile, @moddci) saveheap = heap savesym = lastsym saveflags = systemflags + savemodid = modid if loadmod(@moddci) < modkeep lastsym = savesym heap = saveheap - while modid + while modid > savemodid modid-- seg_release(modseg[modid]) loop xpokeb(symtbl.0, lastsym, 0) systemflags = saveflags - else - modid = 0 fin fin return -perr diff --git a/src/vmsrc/apple/sossysjit.pla b/src/vmsrc/apple/sossysjit.pla index 38cf259..dae50fd 100755 --- a/src/vmsrc/apple/sossysjit.pla +++ b/src/vmsrc/apple/sossysjit.pla @@ -1248,24 +1248,23 @@ def loadmod(mod)#1 end def execmod(modfile)#1 byte moddci[63] - word saveheap, savesym, saveflags + word saveheap, savesym, saveflags, savemodid perr = 1 if stodci(modfile, @moddci) saveheap = heap savesym = lastsym saveflags = systemflags + savemodid = modid if loadmod(@moddci) < modkeep lastsym = savesym heap = saveheap - while modid + while modid > savemodid modid-- seg_release(modseg[modid]) loop xpokeb(symtbl.0, lastsym, 0) systemflags = saveflags - else - modid = 0 fin fin return -perr