home *** CD-ROM | disk | FTP | other *** search
- /
- /
-
- / f47 -- analysis of data statements
-
- .globl cdata
- .globl dodata
- .globl onedata
- .globl compare
-
- .globl code
- .globl getcon
- .globl error
- .globl getsym
- .globl consub
- .globl size
- .globl geti
- .globl setln
- .globl getln
- .globl declimpl
- .globl evalcon
- .globl dattab
- .globl contab
- .globl efno
- .globl perror
- .globl qsort
- .globl negflg
- .globl repfact
- .globl geti
- .globl holround
-
- cdata:
- mov r5,-(sp)
- jsr r5,setln
- mov $dattab,r4
- mov $contab,r5
- dloop:
- jsr r5,getln
- br 2f
- br 1f
- 2:
- mov r4,-(sp)
- mov $dattab,r1
- mov r4,r2
- mov $8.,r3
- jsr pc,qsort
- mov (sp)+,r4
- mov (sp)+,r5
- rts r5
- 1:
- cmp r0,$'d
- bne dloop
- mov $line+4,r1
- / loop per specification-set
- 1:
- clr repfact
- mov r1,r2
- 2:
- jsr r5,getsym
- cmp r0,$40. / =|
- bne 3f
- 8:
- jmp 8f
- 9:
- jmp 9f
- 3:
- cmp r0,$6 / /
- bne 2b
- mov r1,-(sp)
- mov r2,r1
- mov (sp)+,r2
- / loop per specification
- 2:
- cmp r4,r5
- blo 3f
- jmp 7f
- 3:
- jsr r5,getsym
- tst r0
- bne 8b
- bit $70,symtab(r3) / test classed
- bne 3f
- jsr r5,declimpl
- 3:
- mov symtab(r3),r0
- mov r0,holquo / temp storage
- incb holquo+1 / round size
- bicb $1,holquo+1
- bit $200,r0 / test parameter
- bne 9b
- bic $!70,r0
- cmp r0,$10 / simple
- beq 3f
- cmp r0,$20 / array
- bne 9b
- 3:
- bit $100,symtab(r3) / test common
- beq 3f
- cmp progt,$6 / test block data
- bne 9b
- mov symtab+4(r3),(r4)+ / common block
- br 4f
- 3:
- cmp progt,$6 / test block data
- beq 9b
- clr (r4)+
- tst symtab+6(r3) / test allocated
- bne 4f
- mov nxtaloc,symtab+6(r3)
- jsr r5,size
- add r0,nxtaloc
- 4:
- clr (r4) / offset slot
- cmpb (r1),$'( / test subscript
- bne 3f
- inc r1
- jsr r5,consub
- bic $70,holquo
- bis $10,holquo / array -> scalar
- mov r0,(r4)
- 3:
- movb symtab+1(r3),r0 / width of item
- inc r0
- bic $1,r0
- mov r0,holround
- add symtab+6(r3),(r4)+
- tst repfact
- beq 3f
- dec repfact
- movb efno+1,r3
- mov r3,(r4)+
- mov r5,(r4)+
- br 4f
- 3:
- mov r1,-(sp)
- mov r2,r1
- mov (sp)+,r2
- 5:
- jsr r5,getsym
- cmp r0,$2 / constant
- beq 3f
- cmp r0,$10. / -
- bne 8f
- inc negflg
- jsr r5,getsym
- cmp r0,$2 / constant
- bne 8f
- 3:
- cmpb (r1)+,$'*
- bne 3f
- cmp r3,$intcon
- bne 8f
- jsr r5,geti
- dec r0
- bmi 8f
- mov r0,repfact
- br 5b
- 3:
- dec r1
- mov r1,-(sp)
- mov r2,-(sp)
- mov r3,efno
- clrb r3
- swab r3
- mov r3,(r4)+
- sub r3,r5
- mov r5,(r4)+ / ptr to const
- mov r5,r3
- mov $symbuf,r1
- jsr r5,evalcon
- clr negflg
- mov (sp)+,r1
- mov (sp)+,r2 / note r1 <=> r2
- 4:
- cmpb efno+1,holquo+1 / compare sizes
- blt 9f / constant too small
- beq 3f
- bicb $!77,holquo
- cmp holquo,$int2con+10 / simple int*2?
- bne 4f
- sub $2,-4(r4) / reduce const length
- cmpb efno,$5
- beq 3f / hollerith, OK
- add $2,-2(r4) / get least sig.
- br 3f
- 4:
- bit $20,holquo / test array
- beq 9f
- cmpb efno,$5 / test hollerith
- bne 9f
- 3:
- cmpb (r1),$'/
- beq 3f
- cmpb (r1)+,$',
- bne 8f
- tst repfact
- bne 4f
- cmpb (r2)+,$',
- bne 8f
- 4:
- jmp 2b
- 3:
- cmpb (r2)+,$'/
- bne 8f
- tstb (r2)
- beq 1f
- cmpb (r2),$',
- bne 3f
- inc r2
- 3:
- mov r2,r1
- tst repfact
- bne 8f
- jmp 1b
- 7:
- jsr r5,error; 28. / data table overflow
- br 2f
- 8:
- jsr r5,error; 21. / data syntax error
- br 2f
- 9:
- jsr r5,error; 22. / data semantic error
- 2:
- mov $dattab,r4 / reset ptrs
- mov $contab,r5
- jsr r5,perror
- 1:
- jmp dloop
-
- dodata:
- cmp progt,$6
- beq 1f / block data
- mov $dattab,r3
- cmp r3,r4
- bne 2f / is data
- mov nxtaloc,r0
- jsr r5,code
- <.=.+%d.\n.text\n\0>; .even
- r0
- rts r5
- 2:
- jsr r5,onedata
- sub nxtaloc,r1
- neg r1
- blt 9b
- jsr r5,code
- <.=.+%d.\n.text\n\0>; .even
- r1
- 1:
- rts r5
-
- onedata:
- clr r1
- 2:
- mov 2(r3),r0
- sub r1,r0
- bmi 9f
- beq 3f
- jsr r5,code
- <.=.+%d.\n\0>; .even
- r0
- add r0,r1
- 3:
- mov 4(r3),r0
- add r0,r1
- asr r0
- mov r0,-(sp)
- mov 6(r3),r2
- 3:
- mov (r2)+,r0
- jsr r5,code
- <%o\n\0>; .even
- r0
- dec (sp)
- bne 3b
- tst (sp)+
- add $8.,r3
- cmp r3,r4
- bhis 1f
- cmp (r3),-8(r3) / any more in this block
- beq 2b
- 1:
- rts r5
- 9:
- clr line
- jsr r5,error; 32. / overlapping data init
- jsr r5,perror
- rts r5
-
- / comparison routine for qsort
-
- compare:
- cmp (r0),(r4)
- bne 1f
- cmp 2(r0),2(r4)
- 1:
- rts pc
-
-