home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 545b.lha / Fmon_v1.8 / src.lzh / frmval.a < prev    next >
Encoding:
Text File  |  1991-09-03  |  7.5 KB  |  290 lines

  1.  
  2. **********************************************************
  3. *                                                        *
  4. *    Fmon V1.8     -     frmval: evaluate expression     *
  5. *                                                        *
  6. *    (c) 1991  Michael Schröder                          *
  7. *                                                        *
  8. *    This program is freely distributable as long as     *
  9. *    the above copyright message is left intact          *
  10. *                                                        *
  11. **********************************************************
  12.  
  13.  
  14.                xdef _geteadr
  15.                xdef _getadr
  16.                xdef _frmval
  17.                xdef _frmval2
  18.                xdef _frmval3
  19.  
  20.                xref _gcla
  21.                xref _CXM33
  22.                xref _CXD33
  23.  
  24.                csect text,0,,2,2
  25.  
  26.                xref _rl1
  27.                xref _rl2
  28.                xref _ps
  29.                xref _regs
  30.  
  31.  
  32. _geteadr       bsr.s _getadr
  33.                tst.l d0
  34.                bmi.s ga1
  35.                btst.l #0,d0
  36.                beq.s ga2
  37. ga1            moveq.l #-1,d0
  38. ga2            rts
  39.  
  40. _getadr        moveq.l #'$',d0
  41.                bsr.s frm1
  42.                tst.l d0
  43.                bmi.s ga1
  44.                move.l d1,d0
  45.                bmi.s ga1
  46.                subq.w #1,_ps(a4)
  47.                rts
  48.  
  49.  
  50. _frmval        moveq.l #'!',d0
  51.                bsr.s frm1
  52.                tst.l d0
  53.                bmi.s frm22
  54.                subq.w #1,_ps(a4)
  55.                bra.s frm22
  56.  
  57. _frmval3       moveq.l #'!',d0
  58.                bra.s frm21
  59.  
  60. _frmval2       move.l 8(a7),d0
  61. frm21          bsr.s frm1
  62. frm22          move.l 4(a7),a0
  63.                move.l d1,(a0)
  64.                rts
  65.  
  66. frm1           movem.l a5/d2-d4/d6/d7,-(a7)
  67.                move.l d0,d6
  68.                bsr.s frm2
  69.                movem.l (a7)+,a5/d2-d4/d6/d7
  70.                rts
  71. frm2           move.l a7,a5
  72. frm            clr.l d2
  73. f100           move.l d1,-(a7)
  74.                move.w d2,-(a7)
  75. f1             jsr _gcla(pc)
  76.                cmpi.b #'+',d0
  77.                beq.s f1
  78.                cmpi.b #' ',d0
  79.                beq.s f1
  80.                moveq.l #24,d2
  81.                cmpi.b #'-',d0
  82.                beq.s f100
  83.                moveq.l #25,d2
  84.                cmpi.b #'~',d0
  85.                beq.s f100
  86.                cmpi.b #'0',d0
  87.                bcs.s f4
  88.                cmpi.b #'9'+1,d0
  89.                bcs.s f5
  90. f4             cmpi.b #'$',d6
  91.                bne.s f6
  92.                cmpi.b #'a',d0
  93.                bcs.s f6
  94.                cmpi.b #'f'+1,d0
  95.                bcc.s f6
  96. f5             subq.w #1,_ps(a4)
  97.                move.l d6,d0
  98. f6             cmpi.b #'(',d0
  99.                bne.s fff7
  100.                bsr frm
  101.                cmpi.b #')',d0
  102.                bne err
  103.                jsr _gcla(pc)
  104.                bra f10
  105. fff7           cmp.b #$27,d0
  106.                bne.s ff7
  107.                clr.l d1
  108.                moveq.l #4,d2
  109. fff7l          jsr _gcla(pc)
  110.                tst.b d0
  111.                beq err
  112.                cmp.b #$27,d0
  113.                bne.s fff72
  114.                jsr _gcla(pc)
  115.                cmp.b #$27,d0
  116.                bne f10
  117. fff72          subq.l #1,d2
  118.                bcs err
  119.                lsl.l #8,d1
  120.                move.b d0,d1
  121.                bra.s fff7l
  122. ff7            cmp.b #'_',d0
  123.                bne.s f7
  124.                moveq.l #19,d2
  125.                jsr _gcla(pc)
  126.                move.b d0,d1
  127.                lea _rl1(a4),a1
  128. ff71           cmp.b 0(a1,d2.w),d1
  129.                dbeq d2,ff71
  130.                bne err
  131.                jsr _gcla(pc)
  132.                lea _rl2(a4),a0
  133. ff73           cmp.b 0(a1,d2.w),d1
  134.                bne.s ff72
  135.                cmp.b 0(a0,d2.w),d0
  136. ff72           dbeq d2,ff73
  137.                bne err
  138.                lsl.w #2,d2
  139.                lea _regs(a4),a0
  140.                move.l 0(a0,d2.w),d1
  141.                bra ff10
  142. f7             clr.l d1
  143.                clr.l d2
  144.                cmpi.b #'$',d0
  145.                bne.s f8
  146. f74            jsr _gcla(pc)
  147.                cmp.b #'0',d0
  148.                bcs.s f73
  149.                cmpi.b #'9'+1,d0
  150.                bcs.s f72
  151. f73            cmp.b #'a',d0
  152.                bcs.s f81
  153.                cmpi.b #'f'+1,d0
  154.                bcc.s f81
  155.                sub.b #'a'-'0'-10,d0
  156. f72            sub.b #'0',d0
  157.                moveq.l #-1,d2
  158.                cmpi.l #$10000000,d1
  159.                bcc.s err
  160.                lsl.l #4,d1
  161.                or.b d0,d1
  162.                bra.s f74 
  163. f8             cmpi.b #'!',d0
  164.                bne.s f9
  165. f84            jsr _gcla(pc)
  166.                cmp.b #'0',d0
  167.                bcs.s f81
  168.                cmpi.b #'9'+1,d0
  169.                bcc.s f81
  170.                sub.b #'0',d0
  171.                moveq.l #-1,d2
  172.                cmpi.l #429496730,d1
  173.                bcc.s err
  174.                lsl.l #1,d1
  175.                move.l d1,d3
  176.                lsl.l #2,d1
  177.                add.l d3,d1
  178.                add.l d0,d1
  179.                bcs.s err
  180.                bra.s f84
  181. f81            tst.l d2
  182.                beq.s err
  183.                bra.s f10
  184. f9             cmpi.b #'%',d0
  185.                beq.s f95
  186. err            moveq.l #-1,d0
  187.                move.l a5,a7
  188.                rts
  189. f95            jsr _gcla(pc)
  190.                cmpi.b #'0',d0
  191.                beq.s f96
  192.                cmpi.b #'1',d0
  193.                bne.s f81
  194. f96            moveq.l #-1,d2
  195.                lsr.l #1,d0
  196.                roxl.l #1,d1
  197.                bcs.s err
  198.                bra.s f95
  199. f10            cmpi.b #' ',d0
  200.                bne.s f11
  201. ff10           jsr _gcla(pc)
  202.                bra.s f10
  203. f11            lea opl(a4),a1
  204.                moveq.l #21-5,d2
  205. fcml           cmp.b (a1)+,d0
  206.                dbeq d2,fcml
  207.                addq.l #5,d2
  208.                cmp.b #20,d2
  209.                bcs.s f16
  210.                jsr _gcla(pc)
  211.                cmp.b -(a1),d0
  212.                bne err
  213. f16            move.b d0,d7
  214. f166           move.w (a7),d3
  215.                lsr.w #2,d3
  216.                move.w d2,d4
  217.                lsr.w #2,d4
  218.                cmp.w d4,d3
  219.                bcs f17
  220.                move.w (a7)+,d3
  221.                move.l (a7)+,d0
  222.                subq.w #8,d3
  223.                lsl.w #1,d3
  224.                lea jtab(pc),a0
  225.                add.w 0(a0,d3.w),a0
  226.                jsr (a0)
  227.                move.l d0,d1
  228.                bra.s f166
  229. f17            cmpi.w #8,d2
  230.                bcc f100
  231.                clr.l d0
  232.                move.b d7,d0
  233.                addq.l #6,a7
  234.                rts
  235.  
  236. jtab           dc.w jadd-jtab
  237.                dc.w jsub-jtab
  238.                dc.w 0,0
  239.                dc.w jmul-jtab
  240.                dc.w jdiv-jtab
  241.                dc.w jmod-jtab
  242.                dc.w 0
  243.                dc.w jand-jtab
  244.                dc.w jor-jtab
  245.                dc.w jeor-jtab
  246.                dc.w 0
  247.                dc.w jlsh-jtab
  248.                dc.w jrsh-jtab
  249.                dc.w 0,0
  250.                dc.w jneg-jtab
  251.                dc.w jnot-jtab
  252.  
  253. jadd           add.l d1,d0
  254.                rts
  255. jsub           sub.l d1,d0
  256.                rts
  257. jmul           jsr _CXM33(pc)
  258.                rts
  259. jdiv           tst.l d1
  260.                bne.s divok
  261.                subq.w #1,_ps(a4)
  262.                bra err
  263. divok          jsr _CXD33(pc)
  264.                rts
  265. jmod           bsr.s jdiv
  266.                move.l d1,d0
  267.                rts
  268. jand           and.l d1,d0
  269.                rts
  270. jor            or.l d1,d0
  271.                rts
  272. jeor           eor.l d1,d0
  273.                rts
  274. jlsh           lsl.l d1,d0
  275.                rts
  276. jrsh           lsr.l d1,d0
  277.                rts
  278. jneg           move.l d1,d0
  279.                neg.l d0
  280.                rts
  281. jnot           move.l d1,d0
  282.                not.l d0
  283.                rts
  284.  
  285.                csect data,1
  286.  
  287. opl            dc.b '>< ^|& %/*  -+   '
  288.  
  289.                end
  290.