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

  1.  
  2. **********************************************************
  3. *                                                        *
  4. *    Fmon V1.8     -     cons.a: my console handler      *
  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.                include "fmon.i"
  15.  
  16.                xdef _cwrite
  17.  
  18.                xref _strlen
  19.                xref _text
  20.                xref @bltcp
  21.                xref _clear
  22.                xref _scroll
  23.                xref @waitbof
  24.                xref scrup
  25.  
  26.                csect text,0
  27.  
  28.                xref _bpl0
  29.                xref _GfxBase
  30.                xref _wifapos
  31.  
  32. _cwrite        movem.l d2-d7/a2/a3,-(a7)
  33.                move.l 4+4*8(a7),a2
  34.                move.l 8+4*8(a7),d7
  35.                moveq.l #-1,d0
  36.                cmp.l d0,d7
  37.                bne.s spec
  38.                move.l a2,-(a7)
  39.                jsr _strlen(pc)
  40.                addq.l #4,a7
  41.                move.l d0,d7
  42. spec           tst.l d7
  43.                beq cwret
  44.                clr.l d6
  45.                lea lbuf(a4),a3
  46.                move.w rcx(a4),d4
  47.                move.w rcy(a4),d5
  48.                bsr cursoroff
  49. cwloop         clr.l d0
  50.                move.b (a2)+,d0
  51.                tst.b escfl(a4)
  52.                beq.s noescfl
  53.                clr.b escfl(a4)
  54.                cmp.b #'[',d0
  55.                beq csion
  56.                bra cwloop2
  57. noescfl        tst.b csifl(a4)
  58.                beq.s nocsifl
  59.                cmp.b #'0',d0
  60.                bcs.s nonum
  61.                cmp.b #'9'+1,d0
  62.                bcc.s nonum
  63.                sub.b #'0',d0
  64.                move.l arg(a4),d1
  65.                mulu #10,d1
  66.                add.l d0,d1
  67.                move.l d1,arg(a4)
  68.                bra cwloop2
  69. nonum          cmp.b #';',d0
  70.                bne.s nosemi
  71.                move.l arg(a4),barg(a4)
  72.                addq.b #1,narg(a4)
  73.                clr.l arg(a4)
  74.                bra cwloop2
  75. nosemi         clr.b csifl(a4)
  76.                sub.b #'@',d0
  77.                bcs cwloop2
  78.                cmp.b #17,d0
  79.                bcc cwloop2
  80.                add.w d0,d0
  81.                lea swtab(pc),a0
  82.                add.w 0(a0,d0.w),a0
  83.                jsr (a0)
  84.                bra cwloop2
  85. nocsifl        cmp.b #27+128,d0
  86.                bne.s nocsi
  87. csion          clr.b narg(a4)
  88.                clr.l arg(a4)
  89.                clr.l barg(a4)
  90.                addq.b #1,csifl(a4)
  91.                bra cwloop2
  92. nocsi          cmp.b #$20,d0
  93.                bcc.s isprint
  94.                cmp.b #27,d0
  95.                bne.s noesc
  96.                addq.b #1,escfl(a4)
  97.                bra cwloop2
  98. noesc          cmp.b #10,d0
  99.                bne.s noret
  100. isret          addq.w #1,d5
  101. iscr           clr.w d4
  102.                bsr writeout
  103.                bra cwloop2
  104. noret          cmp.b #13,d0
  105.                beq.s iscr
  106.                cmp.b #12,d0
  107.                bne.s noff
  108.                bsr writeout
  109.                clr.w d4
  110.                clr.w d5
  111.                bsr writeout
  112.                move.l #YYY*8-1,-(a7)
  113.                move.l #XXX*8-1,-(a7)
  114.                clr.l -(a7)
  115.                clr.l -(a7)
  116.                jsr _clear(pc)
  117.                add.w #16,a7
  118.                bra cwloop2
  119. noff           cmp.b #8,d0
  120.                bne.s isprint
  121.                tst.w d4
  122.                beq.s bs1
  123.                subq.w #1,d4
  124. bs1            bsr writeout
  125.                bra.s cwloop2
  126. isprint        move.b d0,(a3)+
  127.                addq.l #1,d6
  128.                addq.w #1,d4
  129.                cmp.w #XXX,d4
  130.                bcc isret
  131.                subq.l #1,d7
  132.                beq.s cwlend
  133.                move.b (a2)+,d0
  134.                bra nocsifl
  135. cwloop2        subq.l #1,d7
  136.                bne cwloop
  137. cwlend         tst.l d6
  138.                beq.s nowri
  139.                bsr writeout
  140. nowri          bsr setcur
  141.                bsr.s cursoron
  142. cwret          movem.l (a7)+,d2-d7/a2/a3
  143. cret           rts
  144.  
  145. cursoroff      tst.b curfl(a4)
  146.                beq.s cret
  147.                bra.s chcur
  148. cursoron       tst.b curfl(a4)
  149.                bne.s cret
  150. chcur          cmp.w #YYY,d5
  151.                bcs.s chcurok
  152.                clr.b curfl(a4)
  153.                rts
  154. chcurok        move.l _bpl0(a4),a0
  155.                add.w d4,a0
  156.                move.w d5,d0
  157.                mulu #XXX*8,d0
  158.                add.l d0,a0
  159.                moveq.l #7,d0
  160. chcurl         not.b (a0)
  161.                add.w #XXX,a0
  162.                dbf d0,chcurl
  163.                not.b curfl(a4)
  164.                rts
  165.  
  166. swtab          dc.w csiKL-swtab
  167.                dc.w csiA-swtab
  168.                dc.w csiB-swtab
  169.                dc.w csiC-swtab
  170.                dc.w csiD-swtab
  171.                dc.w csiE-swtab
  172.                dc.w csiF-swtab
  173.                dc.w csiG-swtab
  174.                dc.w csiH-swtab
  175.                dc.w csiI-swtab
  176.                dc.w csiJ-swtab
  177.                dc.w csiK-swtab
  178.                dc.w csiL-swtab
  179.                dc.w csiM-swtab
  180.                dc.w csiN-swtab
  181.                dc.w csiO-swtab
  182.                dc.w csiP-swtab
  183.  
  184. csiH           bsr writeout
  185.                move.l arg(a4),d5
  186.                move.l barg(a4),d4
  187.                tst.b narg(a4)
  188.                beq.s norma
  189.                exg.l d4,d5
  190.                subq.w #1,d4
  191.                subq.w #1,d5
  192. norma          tst.w d4
  193.                bpl.s csih2
  194.                clr.l d4
  195. csih2          cmp.w #XXX,d4
  196.                bcs.s csih3
  197.                move.w #XXX-1,d4
  198. csih3          tst.w d5
  199.                bpl.s csih4
  200.                clr.l d5
  201. csih4          cmp.w #YYY,d5
  202.                bcs.s csih5
  203.                move.w #YYY-1,d5
  204. csih5          bsr setcur
  205.                rts
  206.  
  207. csiC           bsr writeout
  208.                add.w #1,d4
  209.                bra.s norma
  210.  
  211. csiD           bsr writeout
  212.                subq.w #1,d4
  213.                bra.s norma
  214.  
  215. csiA           bsr writeout
  216.                subq.w #1,d5
  217.                bra.s norma
  218.  
  219. csiB           bsr writeout
  220.                addq.w #1,d5
  221.                cmp.w #YYY,d5
  222.                bcs.s csib1
  223.                moveq.l #YYY-1,d5
  224.                move.l #YYY*8-1,-(a7)
  225.                move.l #XXX*8-1,-(a7)
  226.                clr.l -(a7)
  227.                clr.l -(a7)
  228.                moveq.l #8,d0
  229.                move.l d0,-(a7)
  230.                clr.l -(a7)
  231.                bsr setcur
  232.                bra doscroll
  233. csib1          bsr setcur
  234.                rts
  235.  
  236. csiJ           tst.l d6
  237.                beq.s csij1
  238.                bsr writeout
  239. csij1          cmp.w #YYY,d5
  240.                bcc.s csij2
  241.                clr.l d0
  242.                clr.l d1
  243.                move.w d4,d0
  244.                move.w d5,d1
  245.                lsl.l #3,d0
  246.                lsl.l #3,d1
  247.                move.l d1,-(a7)
  248.                addq.l #7,(a7)
  249.                move.l #XXX*8-1,-(a7)
  250.                move.l d1,-(a7)
  251.                move.l d0,-(a7)
  252.                jsr _clear(pc)
  253.                clr.l (a7)
  254.                addq.l #8,4(a7)
  255.                move.l #YYY*8-1,12(a7)
  256.                jsr _clear(pc)
  257.                add.w #16,a7
  258. csij2          rts
  259.  
  260. csiK           tst.l d6
  261.                beq.s csik1
  262.                bsr writeout
  263. csik1          cmp.w #YYY,d5
  264.                bcc.s csik2
  265.                clr.l d0
  266.                clr.l d1
  267.                move.w d4,d0
  268.                move.w d5,d1
  269.                lsl.l #3,d0
  270.                lsl.l #3,d1
  271.                move.l d1,-(a7)
  272.                addq.l #7,(a7)
  273.                move.l #XXX*8-1,-(a7)
  274.                move.l d1,-(a7)
  275.                move.l d0,-(a7)
  276.                jsr _clear(pc)
  277.                add.w #16,a7
  278. csik2          rts
  279.  
  280. csiL           bsr writeout
  281.                clr.l d0
  282.                move.w d5,d0
  283.                lsl.l #3,d0
  284.                move.l #YYY*8-1,-(a7)
  285.                move.l #XXX*8-1,-(a7)
  286.                move.l d0,-(a7)
  287.                clr.l -(a7)
  288.                moveq.l #-8,d0
  289.                move.l d0,-(a7)
  290.                clr.l -(a7)
  291.                bra doscroll
  292.  
  293. csiM           bsr writeout
  294.                clr.l d0
  295.                move.w d5,d0
  296.                lsl.l #3,d0
  297.                move.l #YYY*8-1,-(a7)
  298.                move.l #XXX*8-1,-(a7)
  299.                move.l d0,-(a7)
  300.                clr.l -(a7)
  301.                moveq.l #8,d0
  302.                move.l d0,-(a7)
  303.                clr.l -(a7)
  304.                bra doscroll
  305.  
  306. csiKL          bsr writeout
  307.                clr.l d0
  308.                clr.l d1
  309.                move.w d4,d0
  310.                move.w d5,d1
  311.                lsl.l #3,d0
  312.                lsl.l #3,d1
  313.                move.l d1,-(a7)
  314.                addq.l #7,(a7)
  315.                move.l #XXX*8-1,-(a7)
  316.                move.l d1,-(a7)
  317.                move.l d0,-(a7)
  318.                clr.l -(a7)
  319.                moveq.l #-8,d0
  320.                move.l d0,-(a7)
  321.                jsr _scroll(pc)
  322.                add.w #6*4,a7
  323.                rts
  324.  
  325. csiP           bsr writeout
  326.                clr.l d0
  327.                clr.l d1
  328.                move.w d4,d0
  329.                move.w d5,d1
  330.                lsl.l #3,d0
  331.                lsl.l #3,d1
  332.                move.l d1,-(a7)
  333.                addq.l #7,(a7)
  334.                move.l #XXX*8-1,-(a7)
  335.                move.l d1,-(a7)
  336.                move.l d0,-(a7)
  337.                clr.l -(a7)
  338.                moveq.l #8,d0
  339.                move.l d0,-(a7)
  340.                jsr _scroll(pc)
  341.                add.w #6*4,a7
  342.                rts
  343.  
  344. csiE
  345. csiF
  346. csiG
  347. csiI
  348. csiN
  349. csiO
  350.                rts
  351.  
  352. doscroll       cmp.b #' ',_wifapos+1(a4)
  353.                bne.s dosc1
  354.                move.l 4(a7),d0
  355.                asr.l #1,d0
  356.                move.l d0,4(a7)
  357.                jsr @waitbof(pc)
  358.                jsr _scroll(pc)
  359. dosc1          jsr @waitbof(pc)
  360.                jsr _scroll(pc)
  361.                add.w #6*4,a7
  362.                rts
  363.  
  364.  
  365.  
  366. writeout       clr.l d0
  367.                clr.l d1
  368.                move.w rcx(a4),d0
  369.                lsl.l #3,d0
  370.                move.w rcy(a4),d1
  371.                cmp.w #YYY,d1
  372.                bcs norwri
  373.                lea lbuf(a4),a0
  374.                add.w d6,a0
  375.                sub.w #XXX,d6
  376.                neg.w d6
  377.                moveq.l #' ',d1
  378.                bra.s compwril
  379. compwrill      move.b d1,(a0)+
  380. compwril       dbf d6,compwrill
  381.                moveq.l #8,d2
  382.                cmp.b #' ',_wifapos+1(a4)
  383.                bne.s compwrif
  384.                moveq.l #4,d2
  385. compwrif       lea lbuf(a4),a3
  386.                jsr scrup(pc)
  387.                moveq.l #YYY-1,d0
  388.                subq.l #1,d5
  389.                bra.s norwri2
  390. norwri         lsl.l #3,d1
  391.                tst.l d6
  392.                beq.s norwri2
  393.                move.l d6,-(a7)
  394.                lea lbuf(a4),a0
  395.                move.l a0,-(a7)
  396.                moveq.l #8,d2
  397.                move.l d2,-(a7)
  398.                clr.l -(a7)
  399.                move.l d1,-(a7)
  400.                move.l d0,-(a7)
  401.                jsr _text(pc)
  402.                add.w #6*4,a7
  403. norwri2        lea lbuf(a4),a3
  404.                clr.l d6
  405. setcur         move.w d4,rcx(a4)
  406.                move.w d5,rcy(a4)
  407.                rts
  408.  
  409.  
  410.  
  411.                csect __MERGED,2
  412.  
  413. arg            ds.b 4
  414. barg           ds.b 4
  415. rcx            ds.b 2
  416. rcy            ds.b 2
  417.  
  418. llen           ds.b 2
  419. lbuf           ds.b XXX
  420.  
  421. escfl          ds.b 1
  422. csifl          ds.b 1
  423. curfl          ds.b 1
  424. narg           ds.b 1
  425.  
  426.  
  427.                end
  428.  
  429.