home *** CD-ROM | disk | FTP | other *** search
/ minnie.tuhs.org / unixen.tar / unixen / PDP-11 / Trees / V6 / usr / source / fort / fx / fx4.s < prev    next >
Encoding:
Text File  |  1975-07-17  |  4.0 KB  |  365 lines

  1. /
  2. /
  3.  
  4. / fx4 -- get symbol
  5.  
  6. .globl    getsym
  7. .globl    getid
  8. .globl    lookid
  9. .globl    chrtab
  10.  
  11. .globl    lookup
  12. .globl    error
  13. .globl    geti
  14. .globl    holround
  15. / getsym returns the next basic symbol
  16.  
  17. / 0    name    (symbol table entry in r3)
  18. / 2    number    (type in r3)
  19. / 4    **
  20. / 6    /
  21. / 8    *
  22. / 10    -
  23. / 12    +
  24. / 14    .lt.
  25. / 16    .le.
  26. / 18    .eq.
  27. / 20    .ne.
  28. / 22    .gt.
  29. / 24    .ge.
  30. / 26    .not.
  31. / 28    .and.
  32. / 30    .or.
  33. / 32    (
  34. / 34    )
  35. / 36    ,
  36. / 38    =
  37. / 40    =|
  38. /
  39. getsym:
  40.     mov    r2,-(sp)
  41.     mov    r1,r2
  42.     jsr    r5,lookup; bastab
  43.         br 1f
  44.     mov    r2,r1
  45.     cmp    r0,$4
  46.     bhis    2f
  47.     asr    r0
  48.     add    $'0,r0
  49.     movb    r0,symbuf
  50.     movb    $12,symbuf+1
  51.     clrb    symbuf+2
  52.     mov    $logcon,r3        / logical*2
  53.     mov    $2,r0
  54. 2:
  55.     cmp    r0,$32.
  56.     bne    2f
  57.  
  58. / check for possible complex constant
  59.  
  60.     mov    r1,-(sp)
  61.     movb    -2(r1),r0
  62.     movb    chrtab(r0),r0
  63.     beq    4f
  64.     cmp    r0,$4
  65.     blos    3f
  66. 4:
  67.     jsr    r5,srconst
  68.         br 3f
  69.     mov    r3,r2
  70.     cmpb    (r1)+,$',
  71.     bne    3f
  72.     jsr    r5,srconst
  73.         br 3f
  74.     cmp    r3,r2
  75.     bhis    4f
  76.     mov    r2,r3
  77. 4:
  78.     cmpb    (r1)+,$')
  79.     bne    3f
  80.     mov    (sp)+,r1
  81.     mov    $symbuf,r2
  82. 4:
  83.     movb    (r1)+,(r2)
  84.     cmpb    (r2)+,$')
  85.     bne    4b
  86.     clrb    -(r2)
  87.     mov    $2,r0
  88.     br    2f
  89. 3:
  90.     mov    (sp)+,r1
  91.     mov    $32.,r0
  92. 2:
  93.     mov    (sp)+,r2
  94.     rts    r5
  95. 1:
  96.     clr    lstchr
  97.     cmp    r1,$line
  98.     blos    1f
  99.     movb    -1(r1),lstchr
  100. 1:
  101.     mov    $symbuf,r2
  102.     movb    (r1)+,r0
  103.     movb    r0,(r2)+
  104.     bic    $!177,r0
  105.     movb    chrtab(r0),r0
  106.     jmp    *1f(r0)
  107. 1:
  108.     eos
  109.     let
  110.     num
  111.     per
  112.  
  113. eos:
  114.     mov    $40.,r0
  115.     tstb    -(r1)
  116.     beq    2b
  117.     jsr    r5,error; 8.
  118.     br    2b
  119.  
  120. let:
  121.     dec    r1
  122.     jsr    r5,getid
  123.         br .+2        / cannot happen
  124.     jsr    r5,lookid; symbuf
  125.     mov    (sp)+,r2
  126.     clr    r0
  127.     rts    r5
  128.  
  129. num:
  130.     mov    $intcon,r3    / integer*4
  131.     jsr    r5,numst
  132.     cmpb    (r1),$'.
  133.     bne    2f
  134.     mov    r2,-(sp)
  135.     mov    r1,r2
  136.     jsr    r5,lookup; bastab
  137.         br 1f
  138.     mov    (sp)+,r2
  139.     br    3f
  140. 1:
  141.     mov    (sp)+,r2
  142.     movb    (r1)+,(r2)+
  143.     br    1f
  144. 2:
  145.     cmpb    (r1),$'h        / hollerith const?
  146.     bne    2f
  147.     mov    lstchr,r0
  148.     cmpb    chrtab(r0),$2        / letter?
  149.     beq    2f            / not h, then
  150.     cmp    r0,$'*
  151.     beq    2f            / e.g. real*4 h...
  152.     clrb    (r2)
  153.     jsr    r5,geti
  154.     mov    $symbuf,r2
  155.     inc    r1
  156.     mov    holround,-(sp)
  157.     dec    (sp)
  158.     clr    -(sp)
  159. 4:
  160.     movb    (r1)+,(r2)+
  161.     bne    5f
  162.     jsr    r5,error; 55.
  163.     br    6f
  164. 5:
  165.     inc    (sp)
  166.     dec    r0
  167.     bgt    4b
  168. 6:
  169.     bit    (sp),2(sp)
  170.     beq    6f
  171.     movb    $' ,(r2)+
  172.     inc    (sp)
  173.     br    6b
  174. 6:
  175.     mov    (sp)+,r3
  176.     tst    (sp)+
  177.     swab    r3
  178.     clrb    r3
  179.     bis    $5,r3
  180.     mov    $2,r0
  181.     mov    (sp)+,r2
  182.     rts    r5
  183.  
  184. .bss
  185. lstchr:    .=.+2
  186. .text
  187.  
  188. per:
  189.     jsr    r5,isnum
  190.         br eos
  191. 1:
  192.     mov    $realcon,r3    / real*4
  193.     jsr    r5,numst
  194. 2:
  195.     jsr    r5,expon
  196. 3:
  197.     clrb    (r2)
  198.     mov    $2,r0
  199.     mov    (sp)+,r2
  200.     rts    r5
  201.  
  202. isnum:
  203.     movb    (r1),r0
  204.     cmpb    chrtab(r0),$4
  205.     bne    1f
  206.     tst    (r5)+
  207. 1:
  208.     rts    r5
  209.  
  210. numst:
  211.     jsr    r5,isnum
  212.         br 1b
  213.     inc    r1
  214.     movb    r0,(r2)+
  215.     br    numst
  216.  
  217. expon:
  218.     cmpb    (r1)+,$'e
  219.     beq    1f
  220.     cmpb    -1(r1),$'d
  221.     beq    1f
  222. 2:
  223.     dec    r1
  224.     rts    r5
  225. 1:
  226.     cmpb    (r1),$'+
  227.     beq    1f
  228.     cmpb    (r1),$'-
  229.     beq    1f
  230.     jsr    r5,isnum
  231.         br 2b
  232. 1:
  233.     mov    $realcon,r3    / real*4
  234.     cmpb    -(r1),$'e
  235.     beq    1f
  236.     mov    $dblcon,r3    / real*8
  237. 1:
  238.     movb    (r1)+,(r2)+
  239.     movb    (r1)+,(r2)+
  240.     jsr    r5,numst
  241.     rts    r5
  242.  
  243. getid:
  244.     mov    r0,-(sp)
  245.     mov    r2,-(sp)
  246.     movb    (r1),r0
  247.     cmpb    chrtab(r0),$2
  248.     bne    3f
  249.     tst    (r5)+
  250.     mov    $symbuf,r2
  251. 1:
  252.     movb    (r1)+,r0
  253.     movb    r0,(r2)+
  254.     movb    chrtab(r0),r0
  255.     cmp    r0,$2
  256.     beq    1b
  257.     cmp    r0,$4
  258.     beq    1b
  259.     dec    r1
  260.     clrb    (r2)
  261.     movb    $12,-(r2)
  262. 3:
  263.     mov    (sp)+,r2
  264.     mov    (sp)+,r0
  265.     rts    r5
  266.  
  267. lookid:
  268.     mov    r0,-(sp)
  269.     mov    r2,-(sp)
  270. 2:
  271.     mov    (r5),r2
  272.     jsr    r5,lookup; namebuf
  273.         br 1f
  274.     asl    r0
  275.     asl    r0
  276.     mov    r0,r3
  277.     mov    (sp)+,r2
  278.     mov    (sp)+,r0
  279.     tst    (r5)+
  280.     rts    r5
  281. 1:
  282.     mov    namep,r0
  283.     add    $8.,symtp
  284. 1:
  285.     movb    (r2)+,(r0)+
  286.     bne    1b
  287.     mov    r0,namep
  288.     cmp    r0,$enamebuf
  289.     bhis    1f
  290.     mov    symtp,r0
  291.     add    $symtab,r0
  292.     cmp    r0,esymp
  293.     blo    2b
  294. 1:
  295.     mov    $1,r0
  296.     sys    write; ovfl; eovfl-ovfl
  297.     clr    r0
  298.     sys    seek; 0; 2
  299.     mov    $-1,r0
  300.     sys    exit
  301.  
  302. ovfl:
  303.     <Symbol table overflow\n>
  304. eovfl:
  305. .even
  306.  
  307. srconst:
  308.     cmpb    (r1)+,$'+
  309.     beq    1f
  310.     cmpb    -(r1),$'-
  311.     bne    1f
  312.     inc    r1
  313. 1:
  314.     jsr    r5,getsym
  315.     cmp    r0,$2
  316.     bne    1f
  317.     clrb    r3
  318.     add    r3,r3
  319.     bisb    $cplxcon,r3
  320.     tst    (r5)+
  321. 1:
  322.     rts    r5
  323.  
  324. chrtab:
  325.     .byte    0,0,0,0,0,0,0,0
  326.     .byte    0,0,0,0,0,0,0,0
  327.     .byte    0,0,0,0,0,0,0,0
  328.     .byte    0,0,0,0,0,0,0,0
  329.     .byte    0,0,0,0,0,0,0,0
  330.     .byte    0,0,0,0,0,0,6,0
  331.     .byte    4,4,4,4,4,4,4,4
  332.     .byte    4,4,0,0,0,0,0,0
  333.     .byte    0,2,2,2,2,2,2,2
  334.     .byte    2,2,2,2,2,2,2,2
  335.     .byte    2,2,2,2,2,2,2,2
  336.     .byte    2,2,2,0,0,0,0,0
  337.     .byte    0,2,2,2,2,2,2,2
  338.     .byte    2,2,2,2,2,2,2,2
  339.     .byte    2,2,2,2,2,2,2,2
  340.     .byte    2,2,2,0,0,0,0,0
  341.  
  342. bastab:
  343.     <.false.\0>
  344.     <.true.\0>
  345.     <**\0>
  346.     </\0>
  347.     <*\0>
  348.     <-\0>
  349.     <+\0>
  350.     <.lt.\0>
  351.     <.le.\0>
  352.     <.eq.\0>
  353.     <.ne.\0>
  354.     <.gt.\0>
  355.     <.ge.\0>
  356.     <.not.\0>
  357.     <.and.\0>
  358.     <.or.\0>
  359.     <(\0>
  360.     <)\0>
  361.     <,\0>
  362.     <=\0>
  363.     <\0>
  364.  
  365.