home *** CD-ROM | disk | FTP | other *** search
- /
- /
-
- / fx8 -- read source line
-
- .globl getline
- .globl isagn
- .globl levzer
-
- .globl error
- .globl getc
- .globl chrtab
-
- getline:
- mov r3,-(sp)
- clr holquo
- clr r3 / line number
- clr line
- mov $line,r1
- 1:
- jsr pc,get
- sub $'0,r0
- cmp r0,$9
- bhi 1f
- mpy $10.,r3
- add r0,r3
- br 1b
- 1:
- add $'0,r0
- movb r0,ch
- mov r3,efno
- 1:
- mov lino, ifno
- inc ifno
- jsr pc,get
- cmp r0,$'\n / nl
- beq 1f
- cmp r0,$''
- beq 2f
- cmp r0,$'"
- bne 3f
- 2:
- mov r0,holquo
- add $4,r1 / room for h count
- mov r1,-(sp)
- 2:
- jsr pc,get
- cmp r0,$'\n
- beq 4f
- cmp r0,holquo
- beq 2f
- bis $200,r0
- movb r0,(r1)+
- cmp r1,$eline-1
- blo 2b
- 4:
- tst (sp)+
- br err1
- 2:
- mov (sp)+,r3
- mov r1,-(sp)
- sub r3,r1
- movb $'h,-(r3)
- clr r0
- div $10.,r0
- add $'0,r1
- movb r1,-(r3)
- mov r0,r1
- clr r0
- div $10.,r0
- add $'0,r1
- movb r1,-(r3)
- add $'0,r0
- movb r0,-(r3)
- mov (sp)+,r1
- clr holquo
- br 1b
- 3:
- cmp r0,$'h
- bne 2f
- clr r3 / quote count
- mov r1,-(sp)
- 3:
- cmp r1,$line
- blos 4f
- movb -(r1),r0
- cmpb chrtab(r0),$4 / digit?
- beq 3b
- cmpb chrtab(r0),$2 / test letter
- beq 3f
- cmp r0,$'*
- beq 3f
- inc r1
- 4:
- cmp r1,(sp)
- bhis 4f
- movb (r1)+,r0
- sub $'0,r0
- mpy $10.,r3
- add r0,r3
- br 4b
- 4:
- mov r3,r0
- beq 3f
- mov r0,holquo
- mov (sp)+,r1
- movb $'h,(r1)+
- 4:
- jsr pc,get
- cmp r0,$'\n
- bne 5f
- mov r0,ch
- mov $' ,r0
- 5:
- bis $200,r0
- movb r0,(r1)+
- cmp r1,$eline-1
- bhis err1
- dec holquo
- bne 4b
- br 1b
- 3:
- mov (sp)+,r1
- mov $'h,r0
- 2:
- movb r0,(r1)+
- cmp r1,$eline-1
- blo 1b
- err1:
- jsr r5,error; 1.
- 1:
- clrb (r1)+
- mov (sp)+,r3
- tstb line
- bne 1f
- jmp getline
- 1:
- rts r5
-
- isagn:
- jsr r5,levzer; '=
- br 1f
- br 3f
- 1:
- mov r0,-(sp)
- jsr r5,levzer; ',
- br 4f
- jsr r5,levzer; '(
- br 1f
- tst (sp)+
- 2:
- rts r5
- 1:
- cmp (sp)+,r0
- blt 2b
- mov r1,-(sp)
- mov r0,r1
- inc r1
- jsr r5,levzer; ')
- br 1f
- 1:
- mov (sp)+,r1
- cmpb 1(r0),$'=
- bne 3f
- rts r5
-
- levzer:
- mov r1,r0
- clr -(sp)
- 1:
- tst (sp)
- bne 2f
- cmpb (r0),(r5)
- beq 1f
- 2:
- cmpb (r0),$'(
- bne 2f
- inc (sp)
- 2:
- cmpb (r0),$')
- bne 2f
- dec (sp)
- blt 5f
- 2:
- tstb (r0)+
- bne 1b
- 5:
- tst (r5)+
- 1:
- 4:
- tst (sp)+
- 3:
- tst (r5)+
- rts r5
-
- get:
- movb ch,r0
- beq 1f
- clrb ch
- rts pc
- 1:
- jsr pc,get1
- cmp r0,$'\n
- bne 2f
- jsr pc,get1
- cmp r0,$'&
- beq 1b
- movb r0,ch1
- mov $'\n,r0
- 2:
- tst holquo
- bne 1f
- cmp $' ,r0
- beq 1b
- cmp $'\t,r0
- beq 1b
- 1:
- cmp r0,$4 / test EOT
- bne 1f
- mov $1,r0
- sys write; mes; emes-mes
- mov $1,r0 / syntax errors detected
- sys exit
- 1:
- rts pc
-
- get1:
- movb ch1,r0
- beq 1f
- clrb ch1
- br 2f
- 1:
- jsr r5,getc; ibuf
- bcs 1f
- bic $!177,r0
- beq 1b
- cmp r0,$'\n
- bne 2f
- inc lino
- 2:
- tst nlflg
- beq 2f
- clr nlflg
- cmp r0,$'c
- bne 2f
- 3:
- jsr pc,get1
- cmp r0,$'\n
- beq 1b
- cmp r0,$4
- bne 3b
- 2:
- cmp r0,$'\n
- bne 2f
- inc nlflg
- 2:
- rts pc
- 1:
- mov $4,r0
- rts pc
-
- .data
- nlflg: 1
- .text
- mes:
- <EOF on input\n\0>
- emes:
- .bss
- lino: .=.+2
-