From 547fef522b1decb0a543890605a2ae0cde9d61f4 Mon Sep 17 00:00:00 2001 From: "warren.toomey" Date: Thu, 15 May 2008 01:41:16 +0000 Subject: [PATCH] Doug Merritt has provided all of his reconstructed files, and Warren has compared them to his set. Both sets had errors, and having the two was immensely helpful. This commit checks in the new files and the ones from Warren's set which needed to be modified to fix mistakes. --- src/cmd/bas0.s | 1 + src/cmd/cat.s | 1 + src/cmd/chmod.s | 8 - src/cmd/colon.s | 29 - src/cmd/dc1.s | 1370 ++++++++++++++++++++++++++++++++ src/cmd/dsw.s | 1 + src/cmd/ed2.s | 561 +++++++++++++ src/cmd/ed3.s | 436 ++++++++++ src/cmd/exit.c | 5 + src/cmd/fed1.s | 109 +++ src/cmd/form5.s | 46 -- src/cmd/if.c | 27 + src/cmd/{ld1.s.part1 => ld1.s} | 24 - src/cmd/{ld2.s.part1 => ld2.s} | 44 - src/cmd/ldx.s | 1 + 15 files changed, 2512 insertions(+), 151 deletions(-) create mode 100644 src/cmd/dc1.s create mode 100644 src/cmd/ed2.s create mode 100644 src/cmd/ed3.s create mode 100644 src/cmd/exit.c create mode 100644 src/cmd/fed1.s rename src/cmd/{ld1.s.part1 => ld1.s} (95%) rename src/cmd/{ld2.s.part1 => ld2.s} (94%) diff --git a/src/cmd/bas0.s b/src/cmd/bas0.s index e37c2f1..89a25b4 100644 --- a/src/cmd/bas0.s +++ b/src/cmd/bas0.s @@ -344,3 +344,4 @@ isymtab: blo 1b clr (r0)+ rts pc + diff --git a/src/cmd/cat.s b/src/cmd/cat.s index 19f0dcd..100e806 100644 --- a/src/cmd/cat.s +++ b/src/cmd/cat.s @@ -62,3 +62,4 @@ ibuf: .=.+512. obuf: .=.+512. fin: .=.+2 .text + diff --git a/src/cmd/chmod.s b/src/cmd/chmod.s index b985af3..644f95d 100644 --- a/src/cmd/chmod.s +++ b/src/cmd/chmod.s @@ -32,11 +32,3 @@ chmerr: sys exit 1: -q 1f - jsr pc,1b -1: - mov (sp)+,r0 - add $'0,r0 - jsr pc,putc - rts pc - diff --git a/src/cmd/colon.s b/src/cmd/colon.s index 3e2af08..d7158df 100644 --- a/src/cmd/colon.s +++ b/src/cmd/colon.s @@ -2,32 +2,3 @@ sys exit -; 9: - mov r1,frlist(r0) - mov exp2(r0),r0 - add $strbuf,r0 - mov r0,l(r1) - mov $frlist-2,r1 -1: mov (r1),r1 - tst r1 - beq 1f - mov $strbuf,a(r1) - mov $strbuf,l(r1) - br 1b -1: - mov (sp)+,r1 - mov (sp)+,r0 - rts pc -/ -/ - .bss -stats: .=.+16. -useful: .=.+2 -hdrptr: .=.+2 /do not move me -frlist: .=hdrptr+32. -frend: -headers:.=hdrptr+512. -headend: -strbuf: .=.+4000 -strend: -end: diff --git a/src/cmd/dc1.s b/src/cmd/dc1.s new file mode 100644 index 0000000..b656960 --- /dev/null +++ b/src/cmd/dc1.s @@ -0,0 +1,1370 @@ +.globl lookchar +.globl fsfile +.globl seekchar +.globl backspace +.globl putchar +.globl alterchar +.globl move +.globl rewind +.globl create +.globl zero +.globl allocate +.globl release +.globl collect +.globl w, r, a, l +/ + cmp (sp)+,$2 + blo 1f + tst (sp)+ + mov (sp)+,0f + sys open; 0:.=.+2; 0 + bec 2f + mov $1,r0 + sys write; 4f; 5f-4f + sys exit +/ +4: +5: .even +/ +2: + mov r0,source +1: + sys intr; case177 + clr delflag + mov $pdl,r5 +/ + clr r0 + jsr pc,allocate + mov r1,basptr + mov $10.,r0 + jsr pc,putchar + mov $1,r0 + jsr pc,allocate + mov r1,inbas + mov $10.,r0 + jsr pc,putchar + mov $1,r0 + jsr pc,allocate + mov $10.,r0 + jsr pc,putchar + mov r1,tenptr + clr r0 + jsr pc,allocate + mov r1,chptr + clr r0 + jsr pc,allocate + mov r1,strptr + clr r0 + jsr pc,allocate + mov $1,r0 + jsr pc,putchar + mov r1,kptr + mov $1,r0 + jsr pc,allocate + mov $2,r0 + jsr pc,putchar + mov r1,sqtemp + clr r0 + jsr pc,allocate + mov r1,divxyz +loop: + tst delflag + bne in177 + mov sp,errstack + jsr pc,readc + mov $casetab,r1 +1: tst (r1)+ + beq 2f + cmp r0,(r1)+ + bne 1b + jmp *-4(r1) +2: jmp eh +/ +/ +/ case for new line (which is special for apl box) +/ +case012: + br loop +/ +/ +/ case q for quit +/ +case161: + cmp readptr,$readstack+2 + blos 1f + mov *readptr,r1 + beq 2f + jsr pc,release +2: + sub $2,readptr + mov *readptr,r1 + beq 2f + jsr pc,release +2: + sub $2,readptr + jmp loop +1: + sys exit +/ +/ +/ case of delete character +/ +case177: + mov $1,delflag + mov r0,-(sp) + mov 2(sp),r0 + cmp -6(r0),$sys+read + bne 1f + sub $6,2(sp) + clr delflag +1: + mov (sp)+,r0 + 2 /rti +/ +in177: + mov $' ,ch + mov $1,r0 + sys write; 1f; 1 + clr delflag + jmp eh +/ +delflag: .=.+2 +1: <\n> + .even +/ +/ +/ case digit +/ +case060: + movb r0,savec + jsr pc,readin + jsr pc,push + br loop +/ +/ +/ case _ for negative numbers +/ +case137: + jsr pc,readin + jsr pc,chsign + jsr pc,push + br loop +/ +/ +/ case screamer +/ +case041: + jsr pc,in041 + br loop +/ +in041: + sys fork + br 9f + sys wait + mov $1,r0 + sys write; screamer; 2 + rts pc +9: sys exec; 7f; 8f + 4 +8: 7f; 0 +7: +screamer: + .even +/ +/ +/ case d for duplicate +/ +case144: + cmp r5,$pdl + bne 9f; jmp eh; 9: + clr r0 + jsr pc,allocate + mov -2(r5),r0 + jsr pc,move + jsr pc,push + br loop +/ +/ +/ case z for stack size +/ +case172: + clr r0 + jsr pc,allocate + mov r5,r3 + sub $pdl,r3 + asr r3 +2: + beq 2f + clr r2 + dvd $100.,r2 + mov r3,r0 + jsr pc,putchar + mov r2,r3 + br 2b +2: + jsr pc,push + jmp loop +/ +/ +/ case c for flush +/ +case143: +2: jsr pc,pop + bec 9f; jmp loop; 9: + jsr pc,release + br 2b +/ +/ case s for save +/ +case163: + jsr pc,readc + cmp r5,$pdl + bne 2f + movb $'s,ch + jmp eh +2: + cmpb r0,$128. + blo 9f; jmp err; 9: + asl r0 + mov stable(r0),r1 + beq 2f + jsr pc,release +2: + jsr pc,pop + mov r1,stable(r0) + jmp loop +/ +/ +/ case l for load +/ +case154: + jsr pc,in154 + jmp loop +/ +in154: + jsr pc,readc + cmp r0,$128. + blo 9f; jmp err; 9: + asl r0 + mov stable(r0),r1 + beq 1f + mov r1,-(sp) + jsr pc,length + jsr pc,allocate + mov (sp)+,r0 + jsr pc,move + jsr pc,push + rts pc +1: + clr r0 + jsr pc,allocate + jsr pc,push + rts pc +/ +/ +/ case - for subtract +/ +case055: + jsr pc,in055 + jmp loop +/ +in055: + jsr pc,pop + bec 9f; jmp eh; 9: + jsr pc,chsign + jsr pc,push + br in053 +/ +/ +/ case + for add +/ +case053: + jsr pc,in053 + jmp loop +/ +in053: + mov $add3,r0 + jsr pc,binop + rts pc +/ +/ +/ case * for multiply +/ +case052: + mov $mul3,r0 + jsr pc,binop + tst k + beq 1f + jsr pc,pop + mov r1,r3 + mov kptr,r2 + jsr pc,div3 + jsr pc,push + mov r3,r1 + jsr pc,release + mov r4,r1 + jsr pc,release +1: jmp loop +/ +/ case / for divide +/ +case057: + mov $1f,r0 + jsr pc,binop + mov r4,r1 + jsr pc,release + jmp loop +1: + tst k + beq 1f + mov r2,-(sp) + mov kptr,r2 + jsr pc,mul3 + mov r1,-(sp) + mov r3,r1 + jsr pc,release + mov (sp)+,r3 + mov (sp)+,r2 +1: jsr pc,div3 + rts pc +/ +/ +/ case % for remaindering +/ +case045: + mov $div3,r0 + jsr pc,binop + jsr pc,pop + jsr pc,release + mov r4,r1 + jsr pc,push + jmp loop +/ +/ +binop: + jsr pc,pop + bec 9f; jmp eh; 9: + mov r1,r2 + jsr pc,pop + bec 9f; jmp eh; 9: + mov r1,r3 + jsr pc,(r0) + jsr pc,push + mov r2,r1 + jsr pc,release + mov r3,r1 + jsr pc,release + rts pc +/ +/ +/ case i for input base +/ +case151: + jsr pc,in151 + jmp loop +/ +in151: + jsr pc,pop + bec 9f; jmp eh; 9: + mov r1,-(sp) + mov inbas,r1 + mov (sp)+,inbas + jsr pc,release + rts pc +/ +inbas: .=.+2 +/ +/ +/ case o for output base +/ +case157: + jsr pc,in157 + jmp loop +/ +in157: + jsr pc,pop + bec 9f; jmp eh; 9: + mov r1,-(sp) + mov basptr,r1 + jsr pc,release + mov (sp),basptr +/ +/ set field widths for output +/ and set output digit handling routines +/ + mov (sp),r1 + mov $bigout,outdit + jsr pc,length + cmp r0,$1. + bne 2f + jsr pc,fsfile + jsr pc,backspace + cmp r0,$16. + bhi 2f + mov $hexout,outdit +2: + jsr pc,length + jsr pc,allocate + mov (sp),r0 + jsr pc,move + clr (sp) + jsr pc,fsfile + jsr pc,backspace + bpl 2f + add $1.,(sp) + jsr pc,chsign +2: + mov r1,r2 + mov $1,r0 + jsr pc,allocate + mov $-1,r0 + jsr pc,putchar + mov r1,r3 + jsr pc,add3 + jsr pc,length + asl r0 + add r0,(sp) + jsr pc,fsfile + jsr pc,backspace + cmp r0,$9. + blos 2f + add $1,(sp) +2: + jsr pc,release + mov r2,r1 + jsr pc,release + mov r3,r1 + jsr pc,release + mov (sp)+,fw + cmp outdit,$hexout + bne 2f + mov $1,fw +2: + mov $60.,ll + cmp fw,$60. + blo 9f; rts pc; 9: + mov $60.,r1 + clr r0 + dvd fw,r0 + mov r0,r1 + mpy fw,r1 + mov r1,ll + rts pc +/ +fw: 1 /field width for digits +ll: 60. /line length +/ +/ +/ case k for skale factor +/ +case153: + jsr pc,pop + bec 9f; jmp eh; 9: + mov w(r1),r0 + sub a(r1),r0 + cmp r0,$1 + blos 9f; jmp eh; 9: + jsr pc,rewind + jsr pc,getchar + bpl 9f; jmp eh; 9: + mov r0,k + mov r0,r2 + jsr pc,release + mov kptr,r1 + jsr pc,create + clr r0 +2: cmp r2,$2 + blo 2f + jsr pc,putchar + sub $2,r2 + br 2b +2: mov $1,r0 + cmp r2,$1 + blo 2f + mov $10.,r0 +2: jsr pc,putchar +1: jmp loop +/ +/ +/ case ^ for exponentiation +/ +case136: + jsr pc,pop + bec 9f; jmp eh; 9: + mov r1,r3 + jsr pc,pop + bec 9f; jmp eh; 9: + mov r1,r2 + jsr pc,exp3 + jsr pc,push + mov r2,r1 + jsr pc,release + mov r3,r1 + jsr pc,release + jmp loop +/ +/ +/ case v for square root +/ +case166: + jsr pc,pop + bec 9f; jmp eh; 9: +/ +/ multiply argument by skale factor +/ + mov r1,r2 + mov kptr,r3 + jsr pc,mul3 + mov r1,r3 + mov r2,r1 + jsr pc,release +/ +/ check for zero or negative +/ + mov w(r3),r2 + sub a(r3),r2 + tst r2 + bne 9f; jmp sqz; 9: +/ +/ look at the top one or two digits +/ + mov r3,r1 + jsr pc,fsfile + jsr pc,backspace + mov r0,r4 + bpl 9f; jmp eh; 9: + bit $1,r2 + bne 2f + mov r4,r1 + mul $100.,r1 + mov r1,r4 + mov r3,r1 + jsr pc,backspace + add r0,r4 +2: +/ +/ allocate space for result +/ + inc r2 + asr r2 + mov r2,r0 + jsr pc,allocate + jsr pc,zero + mov r2,r0 + jsr pc,seekchar + mov r1,r2 +/ +/ get high order digit of arg and square root it +/ + mov $1,r0 +2: sub r0,r4 + blt 2f + add $2,r0 + br 2b +2: inc r0 + asr r0 + mov r0,r4 + mov r2,r1 + jsr pc,fsfile + jsr pc,backspace + mov r4,r0 + jsr pc,alterchar + mov r1,-(sp) + mov r3,-(sp) +/ +/ get successive approx. from Newton +/ +1: mov (sp),r3 /arg + mov 2(sp),r2 /approx + jsr pc,div3 + mov r1,r3 + jsr pc,add3 + mov r1,-(sp) + mov r3,r1 + jsr pc,release + mov r4,r1 + jsr pc,release + mov (sp)+,r1 + mov sqtemp,r2 + mov r1,r3 + jsr pc,div3 + mov r1,-(sp) + mov r3,r1 + jsr pc,release + mov r4,r1 + jsr pc,release + mov (sp)+,r3 + mov 2(sp),r1 + jsr pc,length + jsr pc,allocate + mov 2(sp),r0 + jsr pc,move + jsr pc,chsign + mov r1,r2 + jsr pc,add3 + jsr pc,fsfile + jsr pc,backspace + jsr pc,release + mov r2,r1 + jsr pc,release + tst r0 + bpl 2f +/ +/ loop if new < old +/ + mov 2(sp),r1 + jsr pc,release + mov r3,2(sp) + br 1b +/ +2: + mov r3,r1 + jsr pc,release + mov 2(sp),r1 + jsr pc,push + mov (sp),r1 + jsr pc,release + tst (sp)+ + tst (sp)+ + jmp loop +/ +sqz: clr r0 + jsr pc,allocate + jsr pc,push + mov r3,r1 + jsr pc,release + jmp loop +sqtemp: .=.+2 +/ +/ +/ case [ for subroutine definition +/ +case133: + clr -(sp) + clr r0 + jsr pc,allocate + jsr pc,push +1: jsr pc,readc + cmp r0,$'] + bne 3f + tst (sp) + beq 1f + dec (sp) + br 2f +3: + cmp r0,$'[ + bne 2f + inc (sp) +2: + jsr pc,putchar + br 1b +/ +1: tst (sp)+ + jmp loop +/ +/ +/ case x for execute top of stack +/ +case170: + jsr pc,in170 + jmp loop +/ +in170: + jsr pc,pop + bec 9f; jmp eh; 9: + mov r1,-(sp) + tst *readptr + beq 1f + mov *readptr,r1 + cmp r(r1),w(r1) + bne 1f + jsr pc,release + br 2f +1: + add $2,readptr + cmp readptr,$readtop + bhis 1f +2: mov (sp)+,r1 + mov r1,*readptr + beq 2f + jsr pc,rewind + rts pc +2: + jsr pc,readc + cmp r0,$'\n + beq 3f + mov r0,savec +3: + rts pc +1: +nderr: + mov $1,r0 + sys write; 1f; 2f-1f + sys exit +1: +2: .even +/ +readptr: readstack + .bss +readstack: .=.+100. +readtop: + .text +/ +/ case ? for apl box function +/ +case077: + add $2,readptr + cmp readptr,$readtop + bhis nderr + clr *readptr +in077: + mov source,-(sp) + clr source + jsr pc,readc + cmp r0,$'! + bne 1f + jsr pc,in041 + mov (sp)+,source + br in077 +1: + mov r0,savec + clr r0 + jsr pc,allocate + jsr pc,readc + jsr pc,putchar +1: + jsr pc,readc + jsr pc,putchar + cmp r0,$'\n + bne 1b + mov (sp)+,source + mov r1,*readptr + jmp loop +/ +/ +/ case < for conditional execution +/ +case074: + jsr pc,in055 /go subtract + jsr pc,pop + jsr pc,length + tst r0 + beq 1f + jsr pc,fsfile + jsr pc,backspace + tst r0 + bmi 1f + jsr pc,release + jsr pc,in154 /load from register + br case170 +/ +1: + jsr pc,release + jsr pc,readc + jmp loop +/ +/ +/ case = for conditional execution +/ +case075: + jsr pc,in055 /go subtract + jsr pc,pop + jsr pc,length + tst r0 + beq 1f /is zero + jsr pc,release + jsr pc,readc + jmp loop +1: + jsr pc,release + jsr pc,in154 /load from register + jmp case170 /go to execute code +/ +/ +/ case > for conditional execution +/ +case076: + jsr pc,in055 /go subtract + jsr pc,pop + jsr pc,length + tst r0 + beq 1f + jsr pc,fsfile + jsr pc,backspace + tst r0 + bpl 1f + jsr pc,release + jsr pc,in154 /load from register + jmp case170 /go to execute code +1: + jsr pc,release + jsr pc,readc + jmp loop +err: 4 +/ +eh: + movb ch,1f+2 + mov $1,r0 + sys write; 1f; 2f-1f + mov $readstack,readptr + mov errstack,sp + jmp loop +1: <( ) ?\n> +2: .even +/ +/ +/ routine to read and convert a number from the +/ input stream. Numbers beginnig with 0 are +/ converted as octal. Routine converts +/ up to next nonnumeric. +/ +/ +readin: + clr r0 + jsr pc,allocate + mov r1,-(sp) + mov strptr,r1 + jsr pc,create + jsr pc,readc +1: + cmpb ch,$'0 + blt 1f + cmpb ch,$'9 + bgt 1f + mov ch,r0 + sub $'0,r0 + mov chptr,r1 + jsr pc,create + tst r0 + beq 2f + jsr pc,putchar +2: mov r1,chptr + mov (sp),r3 + mov inbas,r2 + jsr pc,mul3 + mov r1,(sp) + mov r3,r1 + jsr pc,release + mov (sp),r3 + mov chptr,r2 + jsr pc,add3 + mov r1,(sp) + mov r3,r1 + jsr pc,release + jsr pc,readc + mov r0,ch + br 1b +1: + mov ch,savec + mov (sp)+,r1 + rts pc +/ +/ +/ routine to read another character from the input +/ stream. If the caller does not want the character, +/ it is to be placed in the cell savec. +/ The routine exits to the system on end of file. +/ Character is returned in r0. +/ +/ jsr pc,readc +/ movb r0,... +/ +/ +readc: + tst savec + beq 1f + movb savec,r0 + clr savec + rts pc +1: + tst *readptr + bne 1f +2: mov source,r0 + sys read; ch; 1 + bes eof + tst r0 + beq eof + movb ch,r0 + rts pc +1: + mov r1,-(sp) + mov *readptr,r1 + jsr pc,getchar + bes eof1 + mov r0,ch + mov (sp)+,r1 + rts pc +/ +eof: + tst source + beq 1f + clr source + br 2b +1: + sys exit +/ +eof1: + mov *readptr,r1 + beq 2f + jsr pc,release +2: + sub $2,readptr + mov (sp)+,r1 + jmp readc +/ +/ +/ case p for print +/ +case160: + cmp r5,$pdl + bne 9f; jmp eh; 9: + jsr pc,in160 + jmp loop +/ +/ +in160: + mov $1,r0 + sys write; sphdr; 4 + br 1f +/ +sphdr: < > + .even +/ +1: cmp r5,$pdl + bne 1f + mov $1,r0 + sys write; qm; 1 + mov $1,r0 + sys write; nl; 1 + rts pc +/ +/ do the conversion +/ +1: + mov -2(r5),r1 + jsr pc,printf + rts pc +/ +/ +/ case f for print the stack +/ +case146: + mov r5,-(sp) +1: + cmp r5,$pdl + beq 2f +1: + jsr pc,in160 + jsr pc,pop + cmp r5,$pdl + bne 1b +2: + mov $stable-2,r0 +1: + tst (r0)+ + cmp r0,$stable+254. + bhi 1f +/ + mov (r0),r1 + beq 1b + mov r0,-(sp) + sub $stable,r0 + asr r0 + movb r0,7f+1 + mov $1,r0 + sys write; 7f; 8f-7f + jsr pc,printf + mov (sp)+,r0 + br 1b +1: + mov (sp)+,r5 + jmp loop +/ +7: <" " > +8: .even +/ +/ +/ routine to convert to decimal and print the +/ top element of the stack. +/ +/ jsr pc,printf +/ +/ +printf: + mov r2,-(sp) + mov r1,-(sp) + mov r0,-(sp) + clr -(sp) + jsr pc,rewind +2: + jsr pc,getchar + bes 2f + cmp r0,$143 + blos 2b + cmp r0,$-1 + beq 2b + bis $1,(sp) + br 2b +2: + tst (sp)+ + beq 2f + jsr pc,length + mov r0,0f + mov a(r1),3f + mov $1,r0 + sys write; 3:.=.+2; 0:.=.+2 + br prout +2: + jsr pc,fsfile + jsr pc,backspace + bec 1f + mov $1,r0 + sys write; blank; 1 + mov $1,r0 + sys write; asczero; 1 + br prout +1: + jsr pc,length + mov r1,-(sp) + jsr pc,allocate + mov (sp),r0 + mov r1,(sp) + jsr pc,move + mov ll,count + inc count + jsr pc,fsfile + jsr pc,backspace + cmpb r0,$-1 + bne 2f + mov basptr,r1 + jsr pc,fsfile + jsr pc,backspace + cmp r0,$-1 + beq 2f + mov (sp),r1 + jsr pc,chsign + mov $'-,ch + jsr pc,wrchar + br 1f +2: + mov $' ,ch + jsr pc,wrchar +1: + mov strptr,r1 + jsr pc,create + mov basptr,r1 + jsr pc,length + cmp r0,$1 + blo dingout + bne 1f + jsr pc,rewind + jsr pc,getchar + cmp r0,$1. + beq unout + cmp r0,$-1 + beq dingout +1: + mov (sp),r3 + mov basptr,r2 + jsr pc,div3 + mov r1,r2 + mov (sp),r1 + jsr pc,release + mov r2,(sp) + mov r4,r1 + jsr pc,*outdit + mov (sp),r1 + jsr pc,length + bne 1b +/ + mov strptr,r1 + jsr pc,fsfile +1: + jsr pc,backspace + bes 1f + mov r0,ch + jsr pc,wrchar + br 1b +1: + mov (sp)+,r1 + jsr pc,release +/ +/ cleanup, print new line and return +/ +prout: mov $1,r0 + sys write; nl; 1 + mov (sp)+,r0 + mov (sp)+,r1 + mov (sp)+,r2 + rts pc +/ +/ +dingout: + clr -(sp) + br 1f +unout: + mov $1,-(sp) +1: + mov strptr,r1 + jsr pc,create + mov $-1,r0 + jsr pc,putchar + mov r1,r3 +1: + mov 2(sp),r1 + jsr pc,length + beq 1f + mov r1,r2 + jsr pc,add3 + mov r1,2(sp) + mov r2,r1 + jsr pc,release + mov $1,r0 + tst (sp) + beq 2f + mov $'1,ch + jsr pc,wrchar + br 1b +2: + tst delflag + beq 9f; jmp in177; 9: + sys write; ding; 3 + br 1b +1: + tst (sp)+ + mov (sp)+,r1 + jsr pc,release + br prout +/ +ding: < > / +blank: < > +sp5: <\n > +minus: <-> +one: <1> + .even +count: .=.+2 +/ +bigout: + mov r1,-(sp) /big digit + mov strptr,r1 + jsr pc,length + add fw,r0 + dec r0 + mov r0,-(sp) /end of field + clr -(sp) /negative + mov 4(sp),r1 + jsr pc,length + bne 2f + mov strptr,r1 + mov $'0,r0 + jsr pc,putchar + br 1f +2: + mov 4(sp),r1 /digit + jsr pc,fsfile + jsr pc,backspace + bpl 2f + mov $1,(sp) /negative + jsr pc,chsign +2: + mov 4(sp),r3 /digit + mov r3,r1 + jsr pc,length + beq 1f + mov tenptr,r2 + jsr pc,div3 + mov r1,4(sp) /digit + mov r3,r1 + jsr pc,release + mov r4,r1 + jsr pc,rewind + jsr pc,getchar + jsr pc,release + add $'0,r0 + mov strptr,r1 + jsr pc,putchar + br 2b +1: + mov strptr,r1 + jsr pc,length + cmp r0,2(sp) /end of field + bhis 1f + mov $'0,r0 + jsr pc,putchar + br 1b +1: + tst (sp) /negative + beq 1f + mov $'-,r0 + mov strptr,r1 + dec w(r1) + jsr pc,putchar +1: + mov $' ,r0 + jsr pc,putchar + tst (sp)+ + tst (sp)+ + mov (sp)+,r1 + jsr pc,release + rts pc +/ +tenptr: .=.+2 +/ +/ +/ +hexout: + mov r1,-(sp) + jsr pc,rewind + jsr pc,getchar + add $60,r0 + cmp r0,$'9 + blos 2f + add $'A-'9-1,r0 +2: + mov strptr,r1 + jsr pc,putchar + mov (sp)+,r1 + jsr pc,release + rts pc +/ +/ +wrchar: + tst delflag + beq 9f; jmp in177; 9: + mov $1,r0 + tst count + bne 7f + sys write; sp5; 6 + mov ll,count + mov $1,r0 +7: + dec count + sys write; ch; 1 + rts pc +/ +/ +/ here for unimplemented stuff +/ +junk: + movb r0,1f + mov $1,r0 + sys write; 1f; 2f-1f + jmp loop +1: <0 not in switch.\n> +2: .even +/ +/ +/ +/ routine to place one word onto the pushdown list +/ Error exit to system on overflow. +/ +/ +push: + mov r1,(r5)+ + cmp r5,$pdltop + bhis pdlout + rts pc +/ +pdlout: + mov $1,r0 + sys write; 1f; 2f-1f + 4 +1: +2: .even +/ +/ +/ routine to remove one word from the pushdown list +/ carry bit set on empty stack +/ +/ +/ jsr pc,pop +/ +pop: + cmp r5,$pdl + bhi 1f + clr r1 + sec + rts pc +1: mov -(r5),r1 + clc + rts pc +/ +/ +/ +/ +outdit: hexout +source: .=.+2 +savec: .=.+2 +ch: .=.+2 +nl: <\n> +asczero: <0> +qm: + .even +/ +chptr: .=.+2 +strptr: .=.+2 +basptr: .=.+2 +errstack:.=.+2 +/ + .bss +stable: .=.+256. + .text +casetab: + case012; 012 /nl + loop; 040 /sp + case041; 041 /! + case045; 045 /% + case052; 052 /* + case053; 053 /+ + case055; 055 /- + junk; 056 /. + case057; 057 // + case060; 060 /0 + case060; 061 /1 + case060; 062 /2 + case060; 063 /3 + case060; 064 /4 + case060; 065 /5 + case060; 066 /6 + case060; 067 /7 + case060; 070 /8 + case060; 071 /9 + case074; 074 /< + case075; 075 /= + case076; 076 /> + case077; 077 /? + case143; 103 /C + case144; 104 /D + case146; 106 /F + case151; 111 /I + case153; 113 /K + case154; 114 /L + case157; 157 /O + case160; 120 /P + case161; 121 /Q + case163; 123 /S + case166; 126 /V + case170; 130 /X + case172; 132 /Z + case133; 133 /[ + case136; 136 /^ + case137; 137 /_ + case143; 143 /c + case144; 144 /d + case146; 146 /f + case151; 151 /i + case153; 153 /k + case154; 154 /l + case157; 157 /o + case160; 160 /p + case161; 161 /q + case163; 163 /s + case166; 166 /v + case170; 170 /x + case172; 172 /z + 0;0 +/ + .bss +pdl: .=.+100. +pdltop: + .text diff --git a/src/cmd/dsw.s b/src/cmd/dsw.s index e81ba1e..13ecdc7 100644 --- a/src/cmd/dsw.s +++ b/src/cmd/dsw.s @@ -90,3 +90,4 @@ stbuf: .=.+40. buf: .=.+11. ch: .=.+1 ch1: .=.+1 + diff --git a/src/cmd/ed2.s b/src/cmd/ed2.s new file mode 100644 index 0000000..29f104b --- /dev/null +++ b/src/cmd/ed2.s @@ -0,0 +1,561 @@ +/ ed2 -- text editor + +address: + clr minflg + clr addr + +ad1: + jsr r5,switch; addrt + tst minflg + bne 9f + tst addr + beq 1f + tst (r5)+ +1: + rts r5 + +addrt: + ' ; ad1 + 11; ad1 + '+; ad1 + '/; fsrch + '?; bsrch + '-; amin + '.; adot + '$; adol + '0; num0 + '1; num1 + '2; num1 + '3; num1 + '4; num1 + '5; num1 + '6; num1 + '7; num1 + '8; num1 + '9; num1 + ''; amark + '^; up1 + 0 + +adot: + jsr r5,addrel; dot + br ad1 + +adol: + jsr r5,addrel; dol + br ad1 + +up1: + mov dot,r1 + cmp r1,zero + beq 9f + tst -(r1) + mov r1,f + jsr r5,addrel; f + br ad1 + +9: jmp error + +fsrch: + jsr r5,compile + mov dot,-(sp) +1: + add $2,(sp) + cmp (sp),dol + blos 2f + mov zero,(sp) +2: + cmp (sp),zero + beq 2f + mov (sp),r4 + jsr r5,execute + br 2f + br 3f +2: + cmp (sp),dot + bne 1b + br 9b + +bsrch: + jsr r5,compile + mov dot,-(sp) +1: + sub $2,(sp) + cmp (sp),zero + bhis 2f + mov dol,(sp) +2: + cmp (sp),zero + beq 2f + mov (sp),r4 + jsr r5,execute + br 2f + br 3f +2: + cmp (sp),dot + bne 1b + br 9b +3: + mov (sp)+,f + jsr r5,addrel; f + br ad1 + +addrel: + add minflg,addr + bne 9b + mov *(r5)+,addr + rts r5 + +amin: + tst minflg + bne 9f + inc minflg + jmp ad1 + +num0: + mov $8.,-(sp) + br 1f + +num1: + mov $10.,-(sp) +1: + mov r1,peekc + clr r3 +1: + jsr r5,getc + cmp r1,$'0 + blt 1f + cmp r1,$'9 + bgt 1f + mpy (sp),r3 + sub $'0,r1 + add r1,r3 + br 1b +1: + mov r1,peekc + tst addr + bne 1f + mov zero,addr +1: + asl r3 + tst minflg + beq 1f + clr minflg + neg r3 +1: + add r3,addr + jmp ad1 + +9: jmp error +8: jmp advanc + +amark: + jsr r5,getc + jsr r5,findk + bne 9b + mov [kaddr-kname](r2),r2 + mov zero,r4 +1: + mov (r4)+,r3 + bic $1,r3 + cmp r2,r3 + beq 2f + cmp r4,dol + blos 1b + br 9b +2: + tst -(r4) + mov r4,f + jsr r5,addrel; f + jmp ad1 + +findk: + clr -(sp) + mov $kname,r2 +1: + tst (r2) + beq 2f + cmp r1,(r2) + beq 3f + tst (r2)+ + cmp r2,$ekname + blos 1b + clr r2 +2: + inc (sp) +3: + tst (sp)+ + rts r5 + +findka: + mov $kaddr,r1 +1: + cmp (r1)+,r0 + beq 2f + cmp r1,$ekaddr + blos 1b + clr r1 + rts r5 +2: + tst -(r1) + rts r5 + +printn: + mov r0,-(sp) + mov r1,-(sp) + clr r0 + mov count,r1 + mov $linebuf,r3 + jsr r5,1f + movb $'\n,(r3)+ + jsr r5,print; linebuf + mov (sp)+,r1 + mov (sp)+,r0 + rts r5 + +1: + clr r0 + dvd $10.,r0 + mov r1,-(sp) + mov r0,r1 + beq 1f + jsr r5,1b +1: + add $'0,(sp) + movb (sp)+,(r3)+ + rts r5 + +set.: + tst adrflg + bne testa + br 1f + +set1d: + tst adrflg + bne testa + mov zero,r4 + cmp r4,dol + bhis 9b + tst (r4)+ + mov r4,addr1 +1: + mov dol,addr2 + rts r5 + +set.d: + tst adrflg + bne testa + mov dot,r4 + mov r4,addr1 + mov r4,addr2 + rts r5 + +testa: + mov addr1,r4 + cmp r4,addr2 + bhi 9b + jsr r5,1f + mov addr2,r4 + jsr r5,1f + rts r5 + +1: + cmp r4,zero + blo 9f + cmp r4,dol + bhi 9f + rts r5 + +nonzero: + cmp addr1,zero + blos 9f + rts r5 + +setna: + tst adrflg + bne 9f + rts r5 + +8: jmp advanc +9: jmp error + +newline: + jsr r5,getc + cmp r1,$'p + bne 1f + jsr r5,getc + inc pflag +1: + cmp r1,$'\n + bne 9b + rts r5 + +rdline: + mov $linebuf,r4 +1: + jsr r5,getc + movb r1,(r4)+ + cmp r1,$'\n + beq 1f + cmp r4,$elinbuf + blo 1b + br 9b +1: + cmp linebuf,$".\n + beq 8b + rts r5 + +append: + cmp dol,$ebuffer-5 + bhis 9b + jsr r5,*(r5)+ + mov dol,r4 + tst (r4)+ + mov r4,dol + jsr r5,setbrk + mov r4,r3 + tst (r3)+ + clr (r3) + add $2,dot +1: + mov -(r4),-(r3) + cmp r4,dot + bhi 1b + mov $linebuf,r0 + jsr r5,putline + rts r5 + +putline: + mov r0,r4 + mov oblkp,r2 + bit $1,r2 + beq 2f + jsr r5,1f +2: + mov dska,r1 + add r2,r1 + mov r1,*dot +2: + movb (r4)+,r1 + clr r0 + jsr r5,1f + cmp r1,$'\n + bne 2b + mov r2,oblkp + rts r5 + +1: + movb r1,obuf(r2) + inc r2 + bit $777,r2 + bne 2f + mov fout,r0 + sys 0;7f +.data +7: + sys seek; dska: 0; 0 +.text + mov fout,r0 + sys write; obuf; 512. + bes tmperr + cmp dska,$65536.-512. + bhis tmperr + add $512.,dska + clr r2 +2: + rts r5 + +tmperr: + mov $1,r0 + sys write; scream; 3 + br 9f + +scream: ; .even + +getline: + mov r3,-(sp) + mov $linebuf,r1 + mov (r4),r4 + bic $1,r4 + mov r4,r3 + bic $777,r4 +1: + mov $ibuf,2f+2 + bic $!777,r3 + cmp r4,iblk + beq 4f + cmp r4,dska + // above is from v5 ed2.s, below is from s1 frag0 -- DougMerritt + bne 3f + mov $obuf,2f+2 + br 2f +3: + mov r4,iblk + mov fin,r0 + sys seek; iblk: -1; 0 + mov fin,r0 + sys read; ibuf; 512. +2: + movb ibuf(r3),r0 + movb r0,(r1)+ + cmp r0,$'\n + beq 1f + inc r3 + bit $777,r3 + bne 2b + add $512.,r4 + br 1b +1: + mov (sp)+,r3 + rts r5 + +9: jmp error + +filnam: + mov $filebuf,r4 + jsr r5,getc + cmp r1,$'\n + beq 2f + cmp r1,$' / + bne 9b +1: + jsr r5,getc + cmp r1,$' / + beq 1b + cmp r1,$'\n + beq 2f + movb r1,(r4)+ + cmp r4,$filebuf+filsiz + blo 1b + br 9b +2: + cmp r4,$filebuf + beq 4f + clrb (r4) + tst eflag + beq 3f + clr eflag +1: + mov $filebuf,r3 + mov $filsav,r4 +2: + movb (r3)+,(r4)+ + bne 2b +3: + tstb filsav + beq 1b + rts r5 +4: + tstb filsav + beq 9b + mov $filsav,r3 + mov $filebuf,r4 + br 2b + +rdfile: + mov $linebuf,r4 +1: + jsr r5,fchar + movb r1,(r4)+ + cmp r1,$'\n + beq 1f + cmp r4,$elinbuf + blo 1b + br 9b +1: + rts r5 + +fchar: + dec filec + blt 1f + movb *filep,r1 + inc filep + tst r1 + beq fchar + rts r5 +1: + mov f,r0 + sys read; fbuf; efbuf-fbuf + bes 9b + add r0,count + mov r0,filec + beq 1f + mov $fbuf,filep + br fchar +1: + mov f,r0 + sys close + jsr r5,printn + jmp advanc + +delete: + jsr r5,nonzero + mov addr1,r3 + add r3,dol + mov addr2,r4 + sub r4,dol + sub $2,dol + tst (r4)+ +1: + mov (r4)+,(r3)+ + bne 1b + jsr r5,setbrk + rts r5 + +inite: + movb $'a,qetmp+8 +1: + sys stat; qetmp; linebuf + bec 2f + sys creat; qetmp; 10 + bec 1f +2: + incb qetmp+8 + cmpb qetmp+8,$'z + blos 1b + br e1 +1: + mov r0,fout + sys open; qetmp; 0 + bes e1 + mov r0,fin + mov $buffer,r0 + mov r0,zero + mov r0,dol + mov r0,dot + jsr r5,setbrk + mov $-1,iblk + mov $1,oblkp + clr dska + mov $kname,r0 + mov r0,kp +1: + clr (r0)+ + cmp r0,$ekname + blos 1b + rts r5 + +e1: + jsr r5,print; qbadf + sys exit + +terme: + mov fin,r0 + sys close + mov fout,r0 + sys close + sys unlink; qetmp + rts r5 + +setbrk: + mov dol,-(sp) + add $514.,(sp) + bic $777,(sp) + cmp (sp),0f + beq 1f + mov (sp),0f + sys break; 0:.. +1: + tst (sp)+ + rts r5 + diff --git a/src/cmd/ed3.s b/src/cmd/ed3.s new file mode 100644 index 0000000..b3d65b8 --- /dev/null +++ b/src/cmd/ed3.s @@ -0,0 +1,436 @@ +/ ed3 -- text editor + +compile: + mov r1,compt + mov r1,prect + mov $exprbuf,r3 + jsr r5,switch; prect + jsr r5,cop; 2 + br cadv + +prect: + 00; ceof1 + '^; cadv1 +prect1: + '*; cerr + 0 + +cadv1: + jsr r5,switch; prect1 / ^* case + +cadv: + jsr r5,switch; compt + jsr r5,cop; 4 + jsr r5,getc + movb r1,(r3)+ + cmp r3,$eexprbuf + blo cadv + br cerr + +compt: + 00; ceof + '\\; cesc + '\n; cerr + '.; cdot + '*; cast + '$; cdol + '[; cccl + 0 + +ceof: + clrb (r3)+ + cmp r3,$eexprbuf-1 + bhis cerr + movb $1,(r3)+ + rts r5 + +ceof1: + tst (r3) + beq cerr + rts r5 + +cesc: + jsr r5,cop; 4 + jsr r5,getc + cmp r1,$'\n + beq cerr + movb r1,(r3)+ + cmp r3,$eexprbuf + blo cadv + +cerr: + clr exprbuf + jmp 9b + +cdot: + jsr r5,cop; 8. + br cadv + +cdol: + jsr r5,getc + mov r1,peekc + cmp r1,compt + beq 1f + jsr r5,cop; 4 + movb $'$,(r3)+ + cmp r3,$eexprbuf + blo cadv + br cerr +1: + jsr r5,cop; 20. + br cadv + +cccl: + jsr r5,cop; 12. + jsr r5,getc + cmp r1,$'^ + bne 1f + movb *f,r1 + add $4,r1 + movb r1,*f + jsr r5,getc +1: + cmp r1,$'\n + beq cerr + movb r1,(r3)+ + cmp r3,$eexprbuf-1 + bhis cerr + jsr r5,getc + cmp r1,$'] + bne 1b + clrb (r3)+ + br cadv + +cast: + bisb $2,*f + br cadv + +cop: + mov r3,f + movb (r5)+,(r3)+ + cmp r3,$eexprbuf + bhis cerr + tstb (r5)+ + rts r5 + +gexecute: + cmpb exprbuf,$2 + beq 1f + rts r5 / ^ in global substitute +1: + mov $linebuf,r3 + mov $subbuf,r4 +1: + movb (r4)+,(r3) + cmpb (r3)+,$'\n + bne 1b + mov loc2,r4 + add $linebuf-subbuf,r4 + mov r4,locs + br 1f + +execute: + jsr r5,getline + mov $linebuf,r4 + clr locs +1: + mov r4,loc1 + mov $exprbuf,r3 + +eadv: + movb (r3)+,r1 + jmp *1f(r1) +1: + eeof + ecmf + echr + echrs + edot + edots + eccl + eccls + enccl + enccls + edol + +eeof: + mov r4,loc2 + +eeof1: + tst (r5)+ +efail: + rts r5 + +ecmf: + mov r3,-(sp) + mov r4,-(sp) + jsr r5,eadv + br 1f + mov (sp)+,loc1 + tst (sp)+ + br eeof1 +1: + mov (sp)+,r4 + mov (sp)+,r3 + cmpb (r4)+,$'\n + bne ecmf + br efail + +echr: + cmpb (r3)+,(r4)+ + beq eadv + br efail + +echrs: + movb (r3)+,r1 + mov r4,-(sp) +1: + cmpb (r4)+,r1 + beq 1b + br east + +edot: + cmpb (r4)+,$'\n + bne eadv + br efail + +edots: + mov r4,-(sp) +1: + cmpb (r4)+,$'\n + bne 1b + br east + +eccl: + jsr r5,cclas; 0 + br efail + br eadv + +enccl: + jsr r5,cclas; 1 + br efail + br eadv + +enccls: + mov pc,0f + br 1f + +eccls: + clr 0f +1: + mov r4,-(sp) + mov r3,-(sp) +2: + jsr r5,cclas; 0:0 + br 1f + mov (sp),r3 + br 2b +1: + tst (sp)+ + br east + +edol: + cmpb (r4),$'\n + beq eadv + br efail + +east: + dec r4 + mov r3,-(sp) + mov r4,-(sp) + jsr r5,eadv + br 1f + cmp r4,locs + bne 2f + mov r4,4(sp) + br 1f +2: + add $6,sp + br eeof1 +1: + mov (sp)+,r4 + mov (sp)+,r3 + cmp r4,(sp) + bhi east + tst (sp)+ + br efail + +cclas: + movb (r4)+,r1 + cmp r1,$'\n + beq 2f +1: + cmpb r1,(r3)+ + beq 1f + tstb (r3) + bne 1b + tst (r5)+ + beq 3f +2: + tst (r5)+ + br 3f +1: + tst (r5)+ + beq 2b +3: + tstb (r3)+ + bne 3b + rts r5 + +8: jmp advanc +9: jmp error + +dosub: + mov $linebuf,r1 + mov $subbuf,r2 + mov $rhsbuf,r3 +1: + cmp r1,loc1 + beq 1f + movb (r1)+,(r2)+ + br 1b +1: + movb (r3)+,r0 + beq 1f + cmp r0,$'& + bne 3f + mov r1,r4 +2: + cmp r4,loc2 + beq 1b + movb (r4)+,(r2)+ + cmp r2,$esubbuf + blo 2b + br 9b +3: + bic $200,r0 + movb r0,(r2)+ + cmp r2,$esubbuf + blo 1b + br 9b +1: + mov r4,r1 + mov r2,loc2 +1: + movb (r1)+,r0 + movb r0,(r2)+ + cmp r0,$'\n + beq 1f + cmp r2,$esubbuf + blo 1b + br 9b +1: + mov addr1,dot + rts r5 + +switch: + jsr r5,getc + mov (r5)+,r4 +1: + tst (r4) + beq 1f + cmp r1,(r4)+ + beq 2f + tst (r4)+ + br 1b +1: + mov r1,peekc + rts r5 +2: + mov (sp)+,r5 + jmp *(r4) + +getc: + mov peekc,r1 + bne 1f + tst gflag + beq 2f + movb *gbufp,r1 + beq 8b + inc gbufp + br 1f +2: + clr r0 + sys read; ch; 1 + bes 2f + tst r0 + beq 2f + mov ch,r1 + beq getc +1: + clr peekc + rts r5 +2: + jmp cq1 + +print: + mov (r5),r0 + jsr r5,size + mov r4,0f + mov (r5)+,0f-2 + mov $1,r0 + sys write; 0; 0:0 + rts r5 + +size: + clr r4 +1: + inc r4 + cmpb (r0)+,$'\n + bne 1b + rts r5 + +qex: +qetmp: +qbadf: +qerr: +qed: +prompt: <*> +.even +peekc: 0 +eflag: 0 +gbufp: gbuf-1 +kp: kname + + .bss +kname: .=.+18. +ekname: .=.+2 +nl: .=.+2 +kaddr: .=.+18. +ekaddr: .=.+2 +oblkp: .=.+2 +zero: .=.+2 +dol: .=.+2 +dot: .=.+2 +gsp: .=.+2 +shflg: .=.+2 +exprbuf:.=.+128.; eexprbuf: +fin: .=.+2 +fout: .=.+2 +ch: .=.+2 +fch: .=.+2 +pflag: .=.+2 +gflag: .=.+2 +addr: .=.+2 +addr1: .=.+2 +addr2: .=.+2 +gsubf: .=.+2 +loc1: .=.+2 +loc2: .=.+2 +locs: .=.+2 +adrflg: .=.+2 +f: .=.+2 +minflg: .=.+2 +count: .=.+2 +filec: .=.+2 +filep: .=.+2 +linebuf:.=.+512.; elinbuf: +fbuf:subbuf:.=.+512.; efbuf: esubbuf: +rhsbuf: .=.+256.; erhsbuf: +filsiz = 64. +filebuf:.=.+filsiz +filsav: .=.+filsiz+2 +gz: .=.+2 +gbuf: .=.+100.; egbuf: +buffer: ebuffer = buffer+6000. + diff --git a/src/cmd/exit.c b/src/cmd/exit.c new file mode 100644 index 0000000..79ca444 --- /dev/null +++ b/src/cmd/exit.c @@ -0,0 +1,5 @@ +/* exit -- end runcom */ + +main() { + seek(0, 0, 2); +} diff --git a/src/cmd/fed1.s b/src/cmd/fed1.s new file mode 100644 index 0000000..77dfac6 --- /dev/null +++ b/src/cmd/fed1.s @@ -0,0 +1,109 @@ +testing = 0 +/ +/ command interpreter for form letter editor +/ +/ +/ +command: + sys intr; inter + jsr pc,initl + mov sp,spi +loop: + mov spi,sp + mov $buffer,r2 + clr r4 + clr iflag +1: + jsr pc,tfiget + cmpb $' ,r0 + beq 1f + cmpb $'\n,r0 + bne 2f + clrb (r2) + br 4f +2: + movb r0,(r2)+ + br 1b +1: + clrb (r2) + mov $argc,r3 +3: + mov $arg,r2 +2: + jsr pc,tfiget + cmpb $' ,r0 + beq 1f + cmpb $'\n,r0 + beq 1f + movb r0,(r2)+ + br 2b +1: + clrb (r2)+ + inc r4 +1: + movb -(r2),sv + cmp r2,$arg + blos 1f + movb -(r2),-(sp) + movb sv,1(sp) + cmp r2,$arg + bhi 1b + mov sp,(r3)+ + br 2f +1: + clrb -(sp) + movb sv,1(sp) + mov sp,(r3) + add $1,(r3)+ +2: + cmpb r0,$'\n + bne 3b +1: + mov -(r3),-(sp) + cmp r3,$argc + bhi 1b +4: + mov r4,-(sp) +3: + clr r0 + mov $tabl,r4 +2: + mov (r4)+,r1 + cmp r4,$tend + bhi error + add $2,r0 + mov $buffer,r2 +1: + cmpb (r1)+,(r2)+ + bne 2b + tstb (r1) + bne 1b + tstb (r2) + bne 2b + sub $2,r0 + add $jtable,r0 + clr vflag + clr qflag + jmp *(r0) +/ +error: + mov $1,r0 + sys write; err; 2 + br loop +/ +/ +tabl: c1; c2; c3; c4; c5; c6; c7; c8; +tend: 0 +c1: +c2: +c3: +c4: +c5: +c6: +c7: +c8: +err: +endt: .even +jtable: list; listf; ed; remove; rename; fin; q; memck; +spi: .=.+2 +sv: .=.+2 diff --git a/src/cmd/form5.s b/src/cmd/form5.s index c8ff078..a3b057f 100644 --- a/src/cmd/form5.s +++ b/src/cmd/form5.s @@ -741,49 +741,3 @@ fixct: 2: add $2,r3 br 1b -b - bge 1f - cmp u1(r3),u1(r2) - bhis 2f - mov r3,r2 -2: - inc r4 - add $2.,r3 - br 1b -1: - mov r2,r3 - jsr pc,getb - add $stats+14.,r3 - inc (r3) - mov (sp)+,r3 - mov (sp)+,r4 - rts pc -/ -/ -/ this routine renumbers the time used cell u1(r2) -/ of the buffers when the clock overflows -/ -fixct: - mov r1,-(sp) - mov r3,-(sp) - mov $numb,r1 - mov $numb,flag -2: - mov r1,u1(r2) - dec r1 - bge 1f - mov (sp)+,r3 - mov (sp)+,r1 - rts pc -1: - clr r2 - mov $2,r3 -1: - cmp r3,$numb2 - bge 2b - cmp u1(r3),u1(r2) - blo 2f - mov r3,r2 -2: - add $2,r3 - br 1b diff --git a/src/cmd/if.c b/src/cmd/if.c index a62165a..56e0d47 100644 --- a/src/cmd/if.c +++ b/src/cmd/if.c @@ -97,3 +97,30 @@ err: exit(); } +tio(a, f) { + + a = open(a, f); + if (a>=0) { + close(a); + return(1); + } + return(0); +} + +tcreat(a) { + return(1); +} + +eq(a, b) +char *a, *b; +{ + int i; + + i = 0; +l: + if(a[i] != b[i]) + return(0); + if(a[i++] == '\0') + return(1); + goto l; +} diff --git a/src/cmd/ld1.s.part1 b/src/cmd/ld1.s similarity index 95% rename from src/cmd/ld1.s.part1 rename to src/cmd/ld1.s index 02d6e96..53b55e0 100644 --- a/src/cmd/ld1.s.part1 +++ b/src/cmd/ld1.s @@ -449,27 +449,3 @@ wrlocsym: tst (sp)+ rts r5 -dd 12(r4),r3 / symbol value - mov 10(r4),r2 - sub $41,r2 - bic $!1,r0 - bne 4f - tst r2 - beq 5f / not relative & relocatable - add dotdot,r3 - br 5f -4: - tst r2 - bne 5f / relative & absolute - sub dotdot,r3 -5: - asl r2 - bis r2,r0 - br relrel -/ absolute, text, data, or bss symbol -3: - add *reltab(r2),r3 -relrel: - bit $1,r0 - beq 1f - sub rel diff --git a/src/cmd/ld2.s.part1 b/src/cmd/ld2.s similarity index 94% rename from src/cmd/ld2.s.part1 rename to src/cmd/ld2.s index 9b2768f..198e3be 100644 --- a/src/cmd/ld2.s.part1 +++ b/src/cmd/ld2.s @@ -514,47 +514,3 @@ addin: add cdatsiz,datsiz add cbsssiz,bsssiz rts r5 - - - mov symbol+10,r0 - bic $!37,r0 - beq 1f - cmp r0,$5 - bhis 1f - asl r0 - add *reltab-2(r0),symbol+12 -1: - rts r5 - -lookloc: - mov $local,r4 -1: - cmp r4,locp - bhis 1f - cmp (r4)+,r2 - beq 2f - tst (r4)+ - br 1b -1: - jsr r5,mesg; snotfound - jmp sintr -2: - mov (r4),r4 - rts r5 - -aopen: - clr reopened - mov r0,0f - mov r0,filnam - mov fin,r0 - beq 1f - sys close -1: - sys open; 0:..; 0 - bec 1f - jsr r5,mesg; fnotfound - rts r5 -1: - mov r0,fin - tst (r5)+ - \ No newline at end of file diff --git a/src/cmd/ldx.s b/src/cmd/ldx.s index e16f270..a3f1a53 100644 --- a/src/cmd/ldx.s +++ b/src/cmd/ldx.s @@ -128,3 +128,4 @@ hshtab: .=2*hshsiz+. symtab: esymtab = orig+16384.-300. +