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

  1.  
  2. **********************************************************
  3. *                                                        *
  4. *    Fmon V1.8     -     hunt.a: hunt/verify             *
  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 _hunt
  15.                xdef _verify
  16.                xdef @addblk
  17.  
  18.                xref _clearl
  19.                xref _wril
  20.                xref _wric
  21.                xref _chq
  22.                xref _chqc
  23.                xref @app
  24.                xref @addax
  25.                xref @addd
  26.                xref @adds
  27.                xref _RESLEN
  28.                xref idwand
  29.                xref _CXD33
  30.                xref _wril
  31.  
  32.                csect text,0
  33.  
  34.                xref _sp
  35.                xref _cx
  36.                xref _hj
  37.                xref _huc
  38.                xref _qual
  39.                xref _bsize
  40.                xref _bptrack
  41.                xref _heads
  42.                xref _lowbl
  43.  
  44. _hunt          movem.l d2-d7/a2/a3/a5/a6,-(a7)
  45.                move.l 4+10*4(a7),a5
  46.                move.l 8+10*4(a7),a3
  47.                move.l 12+10*4(a7),a2
  48.                move.l 16+10*4(a7),d2
  49.                move.l 20+10*4(a7),d6
  50.                move.l 24+10*4(a7),a6
  51.                clr.l d5
  52.                clr.w _sp(a4)
  53.                tst.l d6
  54.                ble.s plain
  55.                move.l a5,d0
  56.                addq.l #1,d0
  57.                bclr.l #0,d0
  58.                move.l d0,a5
  59.                cmp.b #2,d6
  60.                beq rela
  61. plain          clr.l d7
  62.                move.b _hj(a4),d7
  63.                sub.w #$100,a7
  64.                move.w #$100-1,d1
  65. hucl           move.b d1,d0
  66.                tst.b _huc(a4)
  67.                beq.s nohuc
  68.                jsr idwand(pc)
  69. nohuc          move.b d0,0(a7,d1.w)
  70.                dbf d1,hucl
  71.                move.l d2,d1
  72.                move.l a2,a1
  73. hucl2          move.b (a1),d7
  74.                move.b 0(a7,d7.w),(a1)+
  75.                subq.w #1,d1
  76.                bne.s hucl2
  77.                move.b _hj(a4),d7
  78.                move.b 0(a7,d7.w),d7
  79.                sub.w #$100,a7
  80.                move.w #$100-1,d1
  81.                move.l d2,d0
  82.                addq.l #1,d0
  83.                tst.l d6
  84.                ble.s l1
  85.                bset.l #0,d0
  86. l1             move.b d0,0(a7,d1.w)
  87.                dbf d1,l1
  88.                clr.l d3
  89.                move.l a2,a1
  90.                move.l d2,d0
  91.                bra.s sma
  92. l2             move.b (a2)+,d3
  93.                tst.l d6
  94.                ble.s every
  95.                btst.l #0,d0
  96.                beq.s even
  97. every          cmp.b d3,d7
  98.                bne.s nojok
  99.                move.w #$100-1,d1
  100. l3             move.b d0,0(a7,d1.w)
  101.                dbf d1,l3
  102. nojok          move.b d0,0(a7,d3.w)
  103. even           subq.l #1,d0
  104. sma            cmp.w #2,d0
  105.                bcc.s l2
  106.                move.b (a2)+,d3
  107.                move.b 0(a7,d3.w),d3
  108.                add.l d2,a5
  109.                subq.l #1,d2
  110.                add.l d2,d3
  111. nix2           move.l d2,d4
  112. cmpl2          cmp.l a5,a3
  113.                bcs.s fin
  114.                btst.b #3,_qual+1(a4)
  115.                bne.s fin
  116.                tst.l d5
  117.                beq.s cmpl1
  118.                subq.l #1,d5
  119.                bne.s cmpl1
  120.                bsr giveout
  121.                clr.l d0
  122. cmpl1          lea 256(a7),a0
  123.                move.l a2,a1
  124. cmpl           move.b -(a5),d0
  125.                move.b 0(a0,d0.w),d0
  126.                cmp.b -(a1),d0
  127. cmpl3          dbne d4,cmpl
  128.                beq.s fou
  129.                cmp.b (a1),d7
  130.                beq.s cmpl3
  131.                cmp.b d2,d4
  132.                bne.s nix1
  133.                move.b 0(a7,d0.w),d0
  134.                add.w d0,a5
  135.                bra.s cmpl2
  136. nix1           sub.w d4,a5
  137. nix3           add.w d3,a5
  138.                bra.s nix2
  139. fou            bsr found
  140.                clr.l d0
  141.                bra.s nix3
  142. fin            add.w #$200,a7
  143. fin2           bsr.s giveout
  144.                tst.w _cx(a4)
  145.                beq.s fin4
  146.                jsr _wric(pc)
  147. fin4           movem.l (a7)+,d2-d7/a2/a3/a5/a6
  148.                rts
  149.  
  150. rela           move.l a6,d2
  151.                sub.l a6,a6
  152.                subq.l #2,a3
  153. rcmpl2         cmp.l a5,a3
  154.                bcs.s fin2
  155.                btst.b #3,_qual+1(a4)
  156.                bne fin2
  157.                tst.l d5
  158.                beq.s rcmpl
  159.                subq.l #1,d5
  160.                bne.s rcmpl
  161.                bsr.s giveout
  162. rcmpl          move.l a5,a0
  163.                add.w (a5)+,a0
  164.                cmp.l a0,d2
  165.                bne.s rcmpl2
  166.                subq.l #2,a5
  167. fou3           bsr.s found
  168.                addq.l #2,a5
  169.                bra.s rcmpl2
  170.  
  171. giveout        tst.w _sp(a4)
  172.                beq.s out2
  173. out            jsr _wril(pc)
  174.                clr.w _sp(a4)
  175. out2           jmp _chq(pc)
  176.  
  177. found          tst.l d6
  178.                bpl.s nodisk
  179.                move.l a5,d0
  180.                sub.l 4+10*4+4+$200(a7),d0
  181.                move.l _bsize(a4),d1
  182.                jsr _CXD33(pc)
  183.                add.l a6,d0
  184.                move.l d0,-(a7)
  185.                move.l d1,-(a7)
  186.                moveq.l #-1,d1
  187.                jsr @addblk(pc)
  188.                lea soff(a4),a0
  189.                jsr @adds(pc)
  190.                move.l (a7)+,d0
  191.                jsr @addd(pc)
  192.                move.w #36,_sp(a4)
  193.                lea sblk(a4),a0
  194.                jsr @adds(pc)
  195.                move.l (a7)+,d0
  196.                sub.l _lowbl(a4),d0
  197.                jsr @addd(pc)
  198.                bsr.s giveout
  199.                jmp _wric(pc)
  200. nodisk         move.l a5,d0
  201.                sub.l a4,d0
  202.                bcs.s isok
  203.                cmp.l #_RESLEN,d0
  204.                bcs.s monit
  205. isok           move.w _cx(a4),d0
  206.                add.w _sp(a4),d0
  207.                cmp.b #71,d0
  208.                bcs.s found1
  209.                bsr giveout
  210.                jsr _wric(pc)
  211. found1         moveq.l #' ',d0
  212.                jsr @app(pc)
  213.                moveq.l #'$',d0
  214.                jsr @app(pc)
  215.                move.l a5,d0
  216.                jsr @addax(pc)
  217.                move.l a6,d0
  218.                beq.s nochange
  219.                move.l a6,a0
  220.                move.l a5,a1
  221.                move.l d2,d0
  222. chal           move.b (a0)+,(a1)+
  223.                dbf d0,chal
  224. nochange       move.l #1000,d5
  225. monit          rts
  226.  
  227. _verify        movem.l a2/a3/a5/d5,-(a7)
  228.                move.l 4+4*4(a7),a2
  229.                move.l 8+4*4(a7),a5
  230.                move.l 12+4*4(a7),a3
  231.                clr.w _sp(a4)
  232.                clr.l d5
  233. vloop          cmp.l a2,a5
  234.                bcs.s vfin
  235.                btst.b #3,_qual+1(a4)
  236.                bne.s vfin
  237.                tst.l d5
  238.                beq.s vcmpl
  239.                subq.l #1,d5
  240.                bne.s vcmpl
  241.                bsr.s vgiveout
  242. vcmpl          cmpm.b (a2)+,(a3)+
  243.                beq.s vloop
  244.                bsr.s vfound
  245.                bra.s vloop
  246. vfin           bsr.s vgiveout
  247.                tst.w _cx(a4)
  248.                beq.s vfin4
  249.                jsr _wric(pc)
  250. vfin4          movem.l (a7)+,a2/a3/a5/d5
  251.                rts
  252.  
  253. vgiveout       bra giveout
  254.  
  255. vaddax         subq.l #1,d0
  256.                jmp @addax(pc)
  257.  
  258. vfound         move.w _cx(a4),d0
  259.                add.w _sp(a4),d0
  260.                cmp.b #60,d0
  261.                bcs.s vfound1
  262.                bsr.s vgiveout
  263.                jsr _wric(pc)
  264. vfound1        lea vers(a4),a0
  265.                jsr @adds(pc)
  266.                move.l a2,d0
  267.                bsr.s vaddax
  268.                moveq.l #'=',d0
  269.                jsr @app(pc)
  270.                moveq.l #'$',d0
  271.                jsr @app(pc)
  272.                move.l a3,d0
  273.                bsr.s vaddax
  274.                move.l #1000,d5
  275.                rts
  276.  
  277.  
  278. @addblk        move.l d1,-(a7)
  279.                move.l d0,-(a7)
  280.                jsr _clearl(pc)
  281.                lea scyl(a4),a0
  282.                jsr @adds(pc)
  283.                move.l (a7)+,d0
  284.                move.l _bptrack(a4),d1
  285.                jsr _CXD33(pc)
  286.                move.l d1,-(a7)
  287.                move.l _heads(a4),d1
  288.                jsr _CXD33(pc)
  289.                move.l d1,-(a7)
  290.                jsr @addd(pc)
  291.                move.w #9,_sp(a4)
  292.                lea shead(a4),a0
  293.                jsr @adds(pc)
  294.                move.l (a7)+,d0
  295.                jsr @addd(pc)
  296.                move.w #17,_sp(a4)
  297.                move.l (a7)+,d0
  298.                move.l (a7)+,d1
  299.                beq.s nosec
  300.                move.l d0,-(a7)
  301.                lea ssec(a4),a0
  302.                jsr @adds(pc)
  303.                move.l (a7)+,d0
  304.                jsr @addd(pc)
  305.                move.w #26,_sp(a4)
  306. nosec          rts
  307.  
  308.  
  309.  
  310.  
  311.  
  312.                csect data,1
  313.  
  314. vers           dc.b '  $',0
  315. scyl           dc.b 'Cyl:',0
  316. shead          dc.b 'Head:',0
  317. ssec           dc.b 'Sec:',0
  318. soff           dc.b 'Off:',0
  319. sblk           dc.b 'Block:',0
  320.  
  321.                end
  322.  
  323.  
  324.  
  325.