home *** CD-ROM | disk | FTP | other *** search
-
- **********************************************************
- * *
- * Fmon V1.8 - frmval: evaluate expression *
- * *
- * (c) 1991 Michael Schröder *
- * *
- * This program is freely distributable as long as *
- * the above copyright message is left intact *
- * *
- **********************************************************
-
-
- xdef _geteadr
- xdef _getadr
- xdef _frmval
- xdef _frmval2
- xdef _frmval3
-
- xref _gcla
- xref _CXM33
- xref _CXD33
-
- csect text,0,,2,2
-
- xref _rl1
- xref _rl2
- xref _ps
- xref _regs
-
-
- _geteadr bsr.s _getadr
- tst.l d0
- bmi.s ga1
- btst.l #0,d0
- beq.s ga2
- ga1 moveq.l #-1,d0
- ga2 rts
-
- _getadr moveq.l #'$',d0
- bsr.s frm1
- tst.l d0
- bmi.s ga1
- move.l d1,d0
- bmi.s ga1
- subq.w #1,_ps(a4)
- rts
-
-
- _frmval moveq.l #'!',d0
- bsr.s frm1
- tst.l d0
- bmi.s frm22
- subq.w #1,_ps(a4)
- bra.s frm22
-
- _frmval3 moveq.l #'!',d0
- bra.s frm21
-
- _frmval2 move.l 8(a7),d0
- frm21 bsr.s frm1
- frm22 move.l 4(a7),a0
- move.l d1,(a0)
- rts
-
- frm1 movem.l a5/d2-d4/d6/d7,-(a7)
- move.l d0,d6
- bsr.s frm2
- movem.l (a7)+,a5/d2-d4/d6/d7
- rts
- frm2 move.l a7,a5
- frm clr.l d2
- f100 move.l d1,-(a7)
- move.w d2,-(a7)
- f1 jsr _gcla(pc)
- cmpi.b #'+',d0
- beq.s f1
- cmpi.b #' ',d0
- beq.s f1
- moveq.l #24,d2
- cmpi.b #'-',d0
- beq.s f100
- moveq.l #25,d2
- cmpi.b #'~',d0
- beq.s f100
- cmpi.b #'0',d0
- bcs.s f4
- cmpi.b #'9'+1,d0
- bcs.s f5
- f4 cmpi.b #'$',d6
- bne.s f6
- cmpi.b #'a',d0
- bcs.s f6
- cmpi.b #'f'+1,d0
- bcc.s f6
- f5 subq.w #1,_ps(a4)
- move.l d6,d0
- f6 cmpi.b #'(',d0
- bne.s fff7
- bsr frm
- cmpi.b #')',d0
- bne err
- jsr _gcla(pc)
- bra f10
- fff7 cmp.b #$27,d0
- bne.s ff7
- clr.l d1
- moveq.l #4,d2
- fff7l jsr _gcla(pc)
- tst.b d0
- beq err
- cmp.b #$27,d0
- bne.s fff72
- jsr _gcla(pc)
- cmp.b #$27,d0
- bne f10
- fff72 subq.l #1,d2
- bcs err
- lsl.l #8,d1
- move.b d0,d1
- bra.s fff7l
- ff7 cmp.b #'_',d0
- bne.s f7
- moveq.l #19,d2
- jsr _gcla(pc)
- move.b d0,d1
- lea _rl1(a4),a1
- ff71 cmp.b 0(a1,d2.w),d1
- dbeq d2,ff71
- bne err
- jsr _gcla(pc)
- lea _rl2(a4),a0
- ff73 cmp.b 0(a1,d2.w),d1
- bne.s ff72
- cmp.b 0(a0,d2.w),d0
- ff72 dbeq d2,ff73
- bne err
- lsl.w #2,d2
- lea _regs(a4),a0
- move.l 0(a0,d2.w),d1
- bra ff10
- f7 clr.l d1
- clr.l d2
- cmpi.b #'$',d0
- bne.s f8
- f74 jsr _gcla(pc)
- cmp.b #'0',d0
- bcs.s f73
- cmpi.b #'9'+1,d0
- bcs.s f72
- f73 cmp.b #'a',d0
- bcs.s f81
- cmpi.b #'f'+1,d0
- bcc.s f81
- sub.b #'a'-'0'-10,d0
- f72 sub.b #'0',d0
- moveq.l #-1,d2
- cmpi.l #$10000000,d1
- bcc.s err
- lsl.l #4,d1
- or.b d0,d1
- bra.s f74
- f8 cmpi.b #'!',d0
- bne.s f9
- f84 jsr _gcla(pc)
- cmp.b #'0',d0
- bcs.s f81
- cmpi.b #'9'+1,d0
- bcc.s f81
- sub.b #'0',d0
- moveq.l #-1,d2
- cmpi.l #429496730,d1
- bcc.s err
- lsl.l #1,d1
- move.l d1,d3
- lsl.l #2,d1
- add.l d3,d1
- add.l d0,d1
- bcs.s err
- bra.s f84
- f81 tst.l d2
- beq.s err
- bra.s f10
- f9 cmpi.b #'%',d0
- beq.s f95
- err moveq.l #-1,d0
- move.l a5,a7
- rts
- f95 jsr _gcla(pc)
- cmpi.b #'0',d0
- beq.s f96
- cmpi.b #'1',d0
- bne.s f81
- f96 moveq.l #-1,d2
- lsr.l #1,d0
- roxl.l #1,d1
- bcs.s err
- bra.s f95
- f10 cmpi.b #' ',d0
- bne.s f11
- ff10 jsr _gcla(pc)
- bra.s f10
- f11 lea opl(a4),a1
- moveq.l #21-5,d2
- fcml cmp.b (a1)+,d0
- dbeq d2,fcml
- addq.l #5,d2
- cmp.b #20,d2
- bcs.s f16
- jsr _gcla(pc)
- cmp.b -(a1),d0
- bne err
- f16 move.b d0,d7
- f166 move.w (a7),d3
- lsr.w #2,d3
- move.w d2,d4
- lsr.w #2,d4
- cmp.w d4,d3
- bcs f17
- move.w (a7)+,d3
- move.l (a7)+,d0
- subq.w #8,d3
- lsl.w #1,d3
- lea jtab(pc),a0
- add.w 0(a0,d3.w),a0
- jsr (a0)
- move.l d0,d1
- bra.s f166
- f17 cmpi.w #8,d2
- bcc f100
- clr.l d0
- move.b d7,d0
- addq.l #6,a7
- rts
-
- jtab dc.w jadd-jtab
- dc.w jsub-jtab
- dc.w 0,0
- dc.w jmul-jtab
- dc.w jdiv-jtab
- dc.w jmod-jtab
- dc.w 0
- dc.w jand-jtab
- dc.w jor-jtab
- dc.w jeor-jtab
- dc.w 0
- dc.w jlsh-jtab
- dc.w jrsh-jtab
- dc.w 0,0
- dc.w jneg-jtab
- dc.w jnot-jtab
-
- jadd add.l d1,d0
- rts
- jsub sub.l d1,d0
- rts
- jmul jsr _CXM33(pc)
- rts
- jdiv tst.l d1
- bne.s divok
- subq.w #1,_ps(a4)
- bra err
- divok jsr _CXD33(pc)
- rts
- jmod bsr.s jdiv
- move.l d1,d0
- rts
- jand and.l d1,d0
- rts
- jor or.l d1,d0
- rts
- jeor eor.l d1,d0
- rts
- jlsh lsl.l d1,d0
- rts
- jrsh lsr.l d1,d0
- rts
- jneg move.l d1,d0
- neg.l d0
- rts
- jnot move.l d1,d0
- not.l d0
- rts
-
- csect data,1
-
- opl dc.b '>< ^|& %/* -+ '
-
- end
-