From ab283cb0bfa4be0e09652bfb9fd7a6865b117981 Mon Sep 17 00:00:00 2001 From: David Schmenk Date: Sun, 17 Dec 2017 15:40:47 -0800 Subject: [PATCH] Initial module version of ED --- src/makefile | 8 +-- src/toolsrc/ed.pla | 143 +++++++++++++++++++-------------------------- 2 files changed, 64 insertions(+), 87 deletions(-) diff --git a/src/makefile b/src/makefile index dce4ea5..997e798 100755 --- a/src/makefile +++ b/src/makefile @@ -6,7 +6,7 @@ PLVM02 = PLASMA.SYSTEM\#FF2000 PLVM802 = PLASMA16.SYSTEM\#FF2000 PLVM03 = SOS.INTERP\#050000 CMD = CMD\#FF2000 -ED = ED\#FF2000 +ED = ED\#FE1000 SB = SB\#FF2000 ROD = ROD\#FE1000 SIEVE = SIEVE\#FE1000 @@ -69,7 +69,7 @@ TXTTYPE = .TXT #SYSTYPE = \#FF2000 #TXTTYPE = \#040000 -all: $(PLASM) $(PLVM) $(PLVM01) $(PLVM02) $(PLVM802) $(PLVM03) $(CMD) $(ARGS) $(MEMMGR) $(MEMTEST) $(FIBER) $(SB) $(MON) $(ROD) $(SIEVE) $(UTHERNET2) $(UTHERNET) $(ETHERIP) $(INET) $(DHCP) $(HTTPD) $(ROGUE) $(ROGUEMAP) $(ROGUECOMBAT) $(ROGUEIO) $(HGR1) $(TONE) $(DGR) $(DGRTEST) $(FILEIO) $(CONIO) $(PORTIO) $(SPIPORT) $(SDFAT) $(FATCAT) $(FATGET) $(FATPUT) $(FATWDSK) $(FATRDSK) $(SANE) $(FPSTR) $(FPU) $(SANITY) $(RPNCALC) +all: $(PLASM) $(PLVM) $(PLVM01) $(PLVM02) $(PLVM802) $(PLVM03) $(CMD) $(ARGS) $(MEMMGR) $(MEMTEST) $(FIBER) $(ED) $(MON) $(ROD) $(SIEVE) $(UTHERNET2) $(UTHERNET) $(ETHERIP) $(INET) $(DHCP) $(HTTPD) $(ROGUE) $(ROGUEMAP) $(ROGUECOMBAT) $(ROGUEIO) $(HGR1) $(TONE) $(DGR) $(DGRTEST) $(FILEIO) $(CONIO) $(PORTIO) $(SPIPORT) $(SDFAT) $(FATCAT) $(FATGET) $(FATPUT) $(FATWDSK) $(FATRDSK) $(SANE) $(FPSTR) $(FPU) $(SANITY) $(RPNCALC) clean: -rm *FE1000 *FF2000 $(PLASM) $(PLVM) $(PLVM01) $(PLVM02) $(PLVM03) @@ -122,8 +122,8 @@ test: samplesrc/test.pla samplesrc/testlib.pla $(PLVM) $(PLASM) ./$(PLVM) TEST $(ED): toolsrc/ed.pla $(PLVM02) $(PLASM) toolsrc/ed.pla - ./$(PLASM) -AOW < toolsrc/ed.pla > toolsrc/ed.a - acme --setpc 8192 -o $(ED) toolsrc/ed.a + ./$(PLASM) -AMOW < toolsrc/ed.pla > toolsrc/ed.a + acme --setpc 4094 -o $(ED) toolsrc/ed.a $(SB): toolsrc/sb.pla $(PLVM02) $(PLASM) toolsrc/sb.pla ./$(PLASM) -AOW < toolsrc/sb.pla > toolsrc/sb.a diff --git a/src/toolsrc/ed.pla b/src/toolsrc/ed.pla index 7a4ee93..f93a9f4 100755 --- a/src/toolsrc/ed.pla +++ b/src/toolsrc/ed.pla @@ -7,6 +7,8 @@ include "inc/cmdsys.plh" include "inc/args.plh" include "inc/fileio.plh" +const FALSE = 0 +const TRUE = not FALSE // // Hardware constants // @@ -16,6 +18,7 @@ const pushbttn2 = $C062 const pushbttn3 = $C063 const keyboard = $C000 const keystrobe = $C010 +const cmdline = $01FF // // ASCII key values // @@ -75,21 +78,22 @@ word = $0450,$04D0,$0550,$05D0,$0650,$06D0,$0750,$07D0 // byte nullstr = "" byte[64] txtfile = "UNTITLED" -word strlinbuf = $1000 -word strpoolmap = $1F00 -word strpoolmsz = 224 // $E0 = 28K is memory@16 bytes per bit map, 128 bytes per 8 bit map, 1K bytes per 8 byte map -word strpool = $4800 -word strpoolsz = $7000 +word strlinbuf = $1000 +word strpoolmap = $1F00 +word strpoolmsz = 224 // $E0 = 28K is memory@16 bytes per bit map, 128 bytes per 8 bit map, 1K bytes per 8 byte map +word strpool = $4800 +word strpoolsz = $7000 +byte exit = FALSE byte flags = 0 byte flash = 0 word numlines = 0 word cutbuf = 0 -byte perr, cursx, cursy, scrnleft, curscol, underchr, curschr +byte cursx, cursy, scrnleft, curscol, underchr, curschr word keyin, cursrow, scrntop, cursptr // // Predeclared functions // -predef cmdmode +predef cmdmode#0 // // Utility functions // @@ -98,26 +102,6 @@ predef cmdmode asm equates !SOURCE "vmsrc/plvmzp.inc" end -//def toupper(c) -// if c >= 'a' -// if c <= 'z' -// return c - $20 -// fin -// fin -// return c -//end -asm toupper - LDA ESTKL,X - AND #$7F - CMP #'a' - BCC + - CMP #'z'+1 - BCS + - SEC - SBC #$20 -+ STA ESTKL,X - RTS -end asm clrhibit(strptr) LDA ESTKL,X STA SRCL @@ -181,11 +165,8 @@ CPLNLP LDA (SRC),Y RTS end -def crout - cout($0D) -end def bell - cout($07) + putc($07) end // // Memory management routines @@ -204,11 +185,11 @@ def delstr(strptr) byte mask, ofst if strptr and strptr <> @nullstr - mask = sizemask(^strptr + 1) - ofst = (strptr - strheap) >> 4 - mask = mask << (ofst & $07) - ofst = ofst >> 3 - strpoolmap->[ofst] = strpoolmap->[ofst] & ~mask +// mask = sizemask(^strptr + 1) +// ofst = (strptr - strheap) >> 4 +// mask = mask << (ofst & $07) +// ofst = ofst >> 3 +// strpoolmap->[ofst] = strpoolmap->[ofst] & ~mask fin end def newstr(strptr) @@ -222,24 +203,24 @@ def newstr(strptr) if strlen == 0 return @nullstr fin - newptr = strpoolalloc(strlen + 1) - if newptr - memcpy(newptr, strptr, strlen + 1) - ^newptr = strlen - return newptr - fin +// newptr = strpoolalloc(strlen + 1) +// if newptr +// memcpy(newptr, strptr, strlen + 1) +// ^newptr = strlen +// return newptr +// fin return @nullstr end def inittxtbuf#0 word i - strlinbuf = $1000 - strpoolmap = $1F00 - strpoolmsz = 224 // $E0 = 28K is memory@16 bytes per bit map, 128 bytes per 8 bit map, 1K bytes per 8 byte map - strpool = $4800 - strpoolsz = $7000 - memset(strpoolmap, strheapmsz, 0) - memset(strlinbuf, maxfill * 2, @nullstr) +// strlinbuf = $1000 +// strpoolmap = $1F00 +// strpoolmsz = 224 // $E0 = 28K is memory@16 bytes per bit map, 128 bytes per 8 bit map, 1K bytes per 8 byte map +// strpool = $4800 +// strpoolsz = $7000 +// memset(strpoolmap, strheapmsz, 0) +// memset(strlinbuf, maxfill * 2, @nullstr) numlines = 1 cursrow = 0 curscol = 0 @@ -342,7 +323,7 @@ def readtxt(filename)#0 strlinbuf:[numlines] = newstr(@txtbuf) numlines++ fin - if !(numlines & $0F); cout('.'); fin + if !(numlines & $0F); putc('.'); fin until txtbuf == 0 or numlines == maxlines fileio:close(refnum) // @@ -377,7 +358,7 @@ def writetxt(filename)#0 txtbuf = txtbuf + 1 txtbuf[txtbuf] = $0D fileio:write(refnum, @txtbuf + 1, txtbuf) - if !(i & $0F); cout('.'); fin + if !(i & $0F); putc('.'); fin next fileio:close(refnum) end @@ -634,7 +615,7 @@ def printtxt(slot)#0 for i = 0 to numlines - 1 cpyln(strlinbuf:[i], @txtbuf) puts(@txtbuf) - crout + putln next *csw = scrncsw end @@ -650,7 +631,7 @@ def openline(row) return FALSE end def cutline#0 - freestr(cutbuf) + delstr(cutbuf) cutbuf = strlinbuf:[cursrow] memcpy(@strlinbuf:[cursrow], @strlinbuf:[cursrow + 1], (numlines - cursrow) * 2) if numlines > 1 @@ -682,9 +663,9 @@ def joinline#0 if joinlen < 80 memcpy(@joinstr + joinstr + 1, strlinbuf:[cursrow + 1] + 1, ^(strlinbuf:[cursrow + 1])) joinstr = joinlen - freestr(strlinbuf:[cursrow]) + delstr(strlinbuf:[cursrow]) strlinbuf:[cursrow] = newstr(@joinstr) - freestr(strlinbuf:[cursrow + 1]) + delstr(strlinbuf:[cursrow + 1]) numlines-- memcpy(@strlinbuf:[cursrow + 1], @strlinbuf:[cursrow + 2], (numlines - cursrow) * 2) flags = flags | changed @@ -706,7 +687,7 @@ def splitline#0 strlinbuf:[cursrow + 1] = newstr(@splitstr) memcpy(@splitstr + 1, strlinbuf:[cursrow] + 1, curscol) splitstr = curscol - freestr(strlinbuf:[cursrow]) + delstr(strlinbuf:[cursrow]) strlinbuf:[cursrow] = newstr(@splitstr) fin else @@ -818,7 +799,7 @@ def editline(key) else strlinbuf:[cursrow] = @nullstr fin - freestr(undoline) + delstr(undoline) fin return key end @@ -893,7 +874,7 @@ def editmode#0 redraw break wend - until false + until exit end // // Command mode @@ -904,22 +885,23 @@ def prfiles(optpath) byte firstblk byte entrylen, entriesblk byte i, type, len - word entry, filecnt + word databuff, entry, filecnt if ^optpath strcpy(@path, optpath) else getpfx(@path) puts(@path) - crout + putln fin - refnum = open(@path, sysbuf) + databuff = heapalloc(512) + refnum = fileio:open(@path) if perr return perr fin firstblk = 1 repeat - if read(refnum, databuff, 512) == 512 + if fileio:read(refnum, databuff, 512) == 512 entry = databuff + 4 if firstblk entrylen = databuff.$23 @@ -934,11 +916,11 @@ def prfiles(optpath) ^entry = len puts(entry) if type & $F0 == $D0 // Is it a directory? - cout('/') + putc('/') len++ fin for len = 20 - len downto 1 - cout(' ') + putc(' ') next filecnt-- fin @@ -949,8 +931,9 @@ def prfiles(optpath) filecnt = 0 fin until filecnt == 0 - close(refnum) - crout + fileio:close(refnum) + heaprelease(databuff) + putln return 0 end def striplead(strptr, chr)#0 @@ -978,28 +961,22 @@ def chkchng if flags & changed puts("LOSE CHANGES TO FILE (Y/N)?") if toupper(keyin()) == 'N' - crout + putln return FALSE fin - crout + putln fin return TRUE end -def quit#0 - if chkchng - exit - fin -end def cmdmode#0 byte slot word cmdptr clrscrn - puts("PLASMA ][ EDITOR VERSION 0.99") - crout - while TRUE + puts("PLASMA ][ EDITOR VERSION 0.99\n") + while not exit puts(@txtfile) - cmdptr = rdstr($BA) + cmdptr = gets($BA) when toupper(parsecmd(cmdptr)) is 'A' readtxt(cmdptr) @@ -1036,7 +1013,7 @@ def cmdmode#0 printtxt(slot) break is 'Q' - quit + exit = chkchng is 'E' is 0 return @@ -1048,8 +1025,8 @@ def cmdmode#0 break otherwise bell - cout('?') - crout + putc('?') + putln wend if perr puts("ERROR: $") @@ -1057,7 +1034,7 @@ def cmdmode#0 else puts("OK") fin - crout + putln loop end // @@ -1070,8 +1047,8 @@ else keyin = @keyin2e fin inittxtbuf -if argbuff - strcpy(@txtfile, @argbuff) +if ^argNext(argFirst) + strcpy(@txtfile, cmdline) puts(@txtfile) numlines = 0 readtxt(@txtfile)