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

  1.  
  2. **********************************************************
  3. *                                                        *
  4. *    Fmon V1.8     -     other.a                         *
  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 @addbname
  15.                xdef @addbname4
  16.                xdef @addc
  17.                xdef @dumpmem
  18.                xdef @dumpasc
  19.                xdef @setcd
  20.                xdef @setnam
  21.                xdef @getbytes
  22.                xdef @binfoh
  23.                xdef _getnam
  24.                xdef _getnam2
  25.                xdef _getdevnam
  26.                xdef _fill
  27.  
  28.                xref @app
  29.                xref @addax
  30.                xref @addbx
  31.                xref @adds
  32.                xref @cmpsbs
  33.                xref _gcl
  34.                xref _gcla
  35.                xref _wril
  36.                xref _dnl
  37.                xref _clearl
  38.  
  39.  
  40.                csect text,0,,2,2
  41.  
  42.                xref _sp
  43.                xref _fib
  44.                xref _cl
  45.                xref _ps
  46.                xref _DOSBase
  47.                xref _proc
  48.  
  49.  
  50.  
  51. _fill          move.l d2,-(a7)
  52.                move.l 4+4(a7),a0
  53.                move.l 8+4(a7),d2
  54. fll            move.l 12+4(a7),a1
  55.                move.l 16+4(a7),d1
  56.                beq.s one
  57. flll           move.b (a1)+,(a0)+
  58.                sub.l #1,d2
  59.                beq fr
  60.                dbf d1,flll
  61.                bra.s fll
  62. one            move.b (a1),d0
  63.                move.b d0,d1
  64.                lsl.w #8,d0
  65.                move.b d1,d0
  66.                move.w d0,d1
  67.                swap d0
  68.                move.w d1,d0
  69.                move.l a0,d1
  70.                btst.l #0,d1
  71.                beq.s eve
  72.                move.b d0,(a0)+
  73.                subq.l #1,d2
  74. eve            move.l d2,d1
  75.                lsr.l #2,d1
  76.                beq.s m4
  77. evel           move.l d0,(a0)+
  78.                subq.l #1,d1
  79.                bne.s evel
  80. m4             andi.w #$0003,d2
  81.                bra.s m4ll
  82. m4l            move.b d0,(a0)+
  83. m4ll           dbf d2,m4l
  84. fr             move.l (a7)+,d2
  85.                rts
  86.  
  87.  
  88. @addbname      lsl.l #2,d0
  89.                beq.s nix
  90. @addbname4     movem.l a2/d2,-(a7)
  91.                move.l d0,a2
  92.                move.b (a2)+,d2
  93.                bra.s abn1
  94. abn2           move.b (a2)+,d0
  95.                bsr @addc
  96. abn1           subq.b #1,d2
  97.                bcc.s abn2
  98.                movem.l (a7)+,a2/d2
  99. nix            rts
  100.  
  101.  
  102. addsp          moveq.l #' ',d0
  103.                jmp @app(pc)
  104.  
  105. @dumpmem       movem.l a0/a2/d2,-(a7)
  106.                move.l a0,a2
  107.                clr.w _sp(a4)
  108.                moveq.l #'.',d0
  109.                jsr @app(pc)
  110.                moveq.l #'&',d0
  111.                jsr @app(pc)
  112.                bsr.s addsp
  113.                move.l a2,d0
  114.                jsr @addax(pc)
  115.                moveq.l #':',d0
  116.                jsr @app(pc)
  117.                bsr.s addsp
  118.                moveq.l #7,d2
  119. dml            move.b (a2)+,d0
  120.                jsr @addbx(pc)
  121.                move.b (a2)+,d0
  122.                jsr @addbx(pc)
  123.                bsr.s addsp
  124.                dbf d2,dml
  125.                bsr.s addsp
  126.                movem.l (a7)+,a0/a2/d2
  127.                moveq.l #16,d0
  128.  
  129. @dumpasc       movem.l a2/d2,-(a7)
  130.                move.l a0,a2
  131.                move.l d0,d2
  132. duascl         move.b (a2)+,d0
  133.                bsr.s @addc
  134.                subq.l #1,d2
  135.                bne.s duascl
  136.                movem.l (a7)+,a2/d2
  137.                jmp _wril(pc)
  138.  
  139. @addc          lsl.w #1,d0
  140.                cmp.b #32*2,d0
  141.                bcc.s adc1
  142.                moveq.l #'.'*2,d0
  143. adc1           lsr.w #1,d0
  144.                jmp @app(pc)
  145.  
  146.  
  147. @setnam        sub.l a0,a0
  148.                bra.s setcd
  149.  
  150. @setcd         clr.l d0
  151. setcd          movem.l d2/d3/d6/d7/a2/a3/a6,-(a7)
  152.                moveq.l #80,d6
  153.                move.l d0,d2
  154.                move.l _DOSBase(a4),a6
  155.                move.l a0,a2
  156.                move.l _proc(a4),a3
  157.                move.l 168(a3),d7
  158.                move.l 172(a3),a3
  159.                add.l a3,a3
  160.                add.l a3,a3
  161.                move.l 4(a3),a3
  162.                add.l a3,a3
  163.                add.l a3,a3
  164.                tst.l d2
  165.                bne notfound
  166.                move.l 34(a6),a0
  167.                move.l 24(a0),a0
  168.                add.l a0,a0
  169.                add.l a0,a0
  170.                addq.l #4,a0
  171. weit           move.l (a0),d0
  172.                beq notfound
  173.                lsl.l #2,d0
  174.                move.l d0,a0
  175.                tst.l 4(a0)
  176.                bne.s weit
  177.                cmp.l 8(a0),d7
  178.                bne.s weit
  179.                move.l 40(a0),d7
  180.                move.l a2,d0
  181.                beq.s tonull
  182.                move.l d7,d0
  183.                move.l a2,a0
  184.                jsr @cmpsbs(pc)
  185.                tst.l d0
  186.                beq.s notfound
  187.                clr.l d1
  188.                jsr -126(a6)
  189.                move.l d0,d1
  190.                jsr -90(a6)
  191. tonull         lsl.l #2,d7
  192.                move.l d7,a0
  193.                clr.l d0
  194.                move.b (a0)+,d0
  195.                subq.l #1,d6
  196.                cmp.l d0,d6
  197.                bcc.s nllok
  198.                move.l d6,d0
  199. nllok          move.b d0,(a3)
  200.                addq.b #1,(a3)+
  201. scdl           move.b (a0)+,(a3)+
  202.                dbf d0,scdl
  203.                move.b #':',-(a3)
  204.                bra scdok
  205. notfound       move.l a2,d1
  206.                beq.s endsetnam
  207.                moveq.l #-2,d2
  208.                jsr -84(a6) ; lock
  209.                tst.l d0
  210.                beq.s scderr
  211.                move.l d0,d1
  212.                move.l d0,d2
  213.                jsr -126(a6)
  214.                move.l d0,d1
  215.                jsr -90(a6) ; unlock
  216. endsetnam      clr.b (a3)+
  217.                move.l a3,a2
  218.                bsr.s recur
  219.                move.l a2,d0
  220.                sub.l a3,d0
  221.                move.b d0,-(a3)
  222. scdok          moveq.l #0,d0
  223.                bra.s scdfin
  224. scderr         moveq.l #-1,d0
  225. scdfin         movem.l (a7)+,d2/d3/d6/d7/a2/a3/a6
  226.                rts
  227.  
  228. recur          move.l d2,d1
  229.                jsr -210(a6)
  230.                move.l d1,d3
  231.                bne.s noro
  232.                lsl.l #2,d2
  233.                beq.s crlo2
  234.                move.l d2,a0
  235.                move.l 16(a0),a0
  236.                add.l a0,a0
  237.                add.l a0,a0
  238.                move.l 40(a0),a0
  239.                add.l a0,a0
  240.                add.l a0,a0
  241.                move.b (a0)+,d0
  242.                beq.s crlo2
  243. crlo           move.b (a0)+,(a2)+
  244.                subq.l #1,d6
  245.                beq.s crrr
  246.                subq.b #1,d0
  247.                bne.s crlo
  248. crlo2          move.b #':',(a2)+
  249.                subq.l #1,d6
  250. crrr           rts
  251. noro           movem.l d2/d3,-(a7)
  252.                move.l d3,d2
  253.                bsr.s recur
  254.                tst.l d3
  255.                beq.s nomore
  256.                tst.l d6
  257.                beq.s nomore
  258.                move.b #'/',(a2)+
  259.                subq.l #1,d6
  260. nomore         movem.l (a7)+,d2/d3
  261.                move.l d3,d1
  262.                jsr -90(a6)  ;unlock
  263.                move.l d2,d1
  264.                lea _fib(a4),a0
  265.                move.l a0,d2
  266.                jsr -102(a6)
  267.                tst.l d0
  268.                beq.s endcp
  269.                tst.l d6
  270.                beq.s endcp
  271.                lea _fib+8(a4),a0
  272. endcp1         move.b (a0)+,d0
  273.                beq.s endcp
  274.                move.b d0,(a2)+
  275.                subq.l #1,d6
  276.                bne.s endcp1
  277. endcp          rts
  278.  
  279.  
  280. rsl            addq.w #1,_ps(a4)
  281. readspace      jsr _gcl(pc)
  282.                cmp.b #' ',d0
  283.                beq.s rsl
  284.                rts
  285.  
  286. _getdevnam     bsr.s readspace
  287.                lea _cl+1(a4),a0
  288.                add.w _ps(a4),a0
  289.                tst.b (a0)
  290.                bne.s nocut
  291.                sub.w #'0',d0
  292.                bcs.s nocut
  293.                cmp.w #4,d0
  294.                bcc.s nocut
  295.                lea _dnl(a4),a0
  296.                add.w d0,a0
  297.                lsl.w #2,d0
  298.                add.w d0,a0
  299.                move.l a0,d0
  300. gdnret         rts
  301. nocut          bsr.s _getnam
  302.                tst.l d0
  303.                beq.s gdnret
  304.                move.l d0,a0
  305. nocu           tst.b (a0)+
  306.                bne.s nocu
  307.                subq.l #2,a0
  308.                moveq.l #':',d1
  309.                cmp.b (a0)+,d1
  310.                beq.s gdnret
  311.                move.b d1,(a0)+
  312.                clr.b (a0)
  313.                rts
  314.  
  315. _getnam        bsr.s _getnam2
  316.                tst.l d0
  317.                bne.s gnret
  318.                jsr _gcl(pc)
  319.                tst.b d0
  320.                bne.s gnret2
  321.                addq.w #1,_ps(a4)
  322. gnret2         clr.l d0
  323. gnret          rts
  324.  
  325. _getnam2       bsr readspace
  326.                lea _cl(a4),a0
  327.                add.w _ps(a4),a0
  328.                moveq.l #'"',d1
  329.                cmp.b d1,d0
  330.                bne.s ohnanf
  331.                move.l a0,a1
  332.                move.l a1,d0
  333.                addq.l #1,a0
  334. gnl            addq.w #1,_ps(a4)
  335.                move.b (a0),(a1)+
  336.                beq.s gnre
  337.                cmp.b (a0)+,d1
  338.                bne.s gnl
  339.                addq.w #1,_ps(a4)
  340.                cmp.b (a0)+,d1
  341.                beq.s gnl
  342.                clr.b -(a1)
  343.                bra.s gnre
  344. ohnanf         clr.l d0
  345.                tst.b (a0)
  346.                beq.s gnre
  347.                move.l a0,d0
  348. ohnanfl        tst.b (a0)
  349.                beq.s gnre
  350.                addq.w #1,_ps(a4)
  351.                cmp.b #' ',(a0)+
  352.                bne.s ohnanfl
  353.                clr.b -(a0)
  354. gnre           rts
  355.  
  356.  
  357. @getbytes      movem.l a2/d2,-(a7)
  358.                move.l a0,a2
  359.                move.l a0,-(a7)
  360. gbloop         bsr readspace
  361.                addq.w #1,_ps(a4)
  362.                tst.b d0
  363.                bne.s gbwei
  364. gbret          subq.w #1,_ps(a4)
  365.                move.l a2,d0
  366.                sub.l (a7)+,d0
  367.                movem.l (a7)+,a2/d2
  368.                rts
  369. gbwei          cmp.b #'"',d0
  370.                bne.s bytes
  371. gbl2           jsr _gcla(pc)
  372.                tst.b d0
  373.                beq.s gbret
  374.                cmp.b #'"',d0
  375.                bne.s noanf2
  376.                jsr _gcl(pc)
  377.                cmp.b #'"',d0
  378.                bne.s gbloop
  379.                addq.w #1,_ps(a4)
  380. noanf2         move.b d0,(a2)+
  381.                bra.s gbl2
  382. bytes          clr.l d2
  383.                bsr.s getnib
  384.                jsr _gcl(pc)
  385.                bsr.s getnib
  386.                addq.w #1,_ps(a4)
  387.                move.b d2,(a2)+
  388.                bra.s gbloop
  389. getnib         cmp.b #'a',d0
  390.                bcs.s digi
  391.                sub.b #'a'-10,d0
  392.                cmp.b #16,d0
  393.                bcs.s gnwei
  394. gnerr          addq.l #4,a7
  395.                bra.s gbret
  396. digi           sub.b #'0',d0
  397.                bcs.s gnerr
  398.                cmp.b #10,d0
  399.                bcc.s gnerr
  400. gnwei          lsl.b #4,d2
  401.                or.b d0,d2
  402.                rts
  403.  
  404. @binfoh        move.l a0,-(a7)
  405.                jsr _clearl(pc)
  406.                move.l (a7)+,a0
  407.                jsr @adds(pc)
  408.                move.w #20,_sp(a4)
  409.                rts
  410.  
  411.                end
  412.