home *** CD-ROM | disk | FTP | other *** search
/ Gold Fish 1 / GoldFishApril1994_CD2.img / d4xx / d484 / viewer / viewer.s < prev    next >
Text File  |  1991-05-09  |  6KB  |  531 lines

  1.  
  2.  
  3. *    Picture Viewer
  4.  
  5. *    ( In EZAsm )
  6.  
  7. *    Click left mouse button to exit
  8.  
  9.  
  10.  
  11. LONG    _GfxBase _DosBase _IntuitionBase
  12. LONG    CLIName CLILen
  13. LONG    Fhandle
  14. LONG    ViewMode
  15.  
  16. WORD    bm_xpos bm_ypos bm_tcolor
  17. WORD    bm_pwidth bm_pheight
  18. BYTE    bm_mask bm_compress bm_pad bm_xasp bm_yasp    
  19.  
  20. LONG    bm_planes bm_width bm_height
  21.  
  22. LONG    DispMem PSize
  23. LONG    Offset BCount TSize
  24. LONG    Colors
  25. BYTE    Bmhd CMap
  26. LONG    Flock FIB FSize FBuf BMap
  27. LONG    SaveAddr CTab
  28. LONG    OldView
  29. WORD    OrgX OrgY ModesSave
  30. LONG    Xadj Yadj TabLen
  31. LONG    View ViewPort RasInfo
  32. LONG    ColorMap
  33. BYTE    sw
  34.  
  35.  
  36.  
  37.  
  38.     CLIName = a0
  39.     CLILen = d0
  40.  
  41.  
  42.     _GfxBase = OpenLibrary( "graphics.library" 0 )
  43.     beq    Quit
  44.  
  45.     _DosBase = OpenLibrary( "dos.library" 0 )
  46.     beq    Quit
  47.  
  48.     _IntuitionBase = OpenLibrary( "intuition.library" 0 )
  49.     beq    Quit
  50.  
  51.  
  52.     a0 = CLIName
  53.     CLILen --
  54.     a0 += CLILen
  55.     (a0) = 0 b    ;$0A -> $00
  56.  
  57.     a1 = _GfxBase
  58.     OldView = 34(a1)    ;save GfxBase.ActiView
  59.  
  60.  
  61.     View = AllocMem( 18 $10001 )
  62.     beq    Quit
  63.  
  64.     ViewPort = AllocMem( 40 $10001 )
  65.     beq    Quit
  66.  
  67.     RasInfo = AllocMem( 12 $10001 )
  68.     beq    Quit
  69.  
  70.     BMap = AllocMem( 40 $10001 )
  71.     beq    Quit
  72.  
  73. *  Get file size..
  74.  
  75.     FIB = AllocMem( 260 $10001 )
  76.     beq    Quit
  77.  
  78.     Flock = Lock( CLIName -2 )
  79.     beq    Quit
  80.  
  81.     Examine( Flock FIB )    
  82.     tst.l    d0
  83.     beq    Quit
  84.     
  85.     a0 = FIB
  86.     FSize = 124(a0)        ;fib_Size 
  87.  
  88.     FBuf = AllocMem( FSize $10001 )    
  89.     beq    Quit
  90.  
  91.  
  92. *  Read whole file..
  93.  
  94.     Fhandle = Open( CLIName 1005 ) 
  95.     beq    Quit
  96.  
  97.     Read( Fhandle FBuf FSize )
  98.     tst.l    d0
  99.     bmi    Quit
  100.  
  101.     a0 = FBuf
  102.  
  103.     (a0) != 'FORM' Quit
  104.  
  105.     a0 += 8    
  106.     (a0) != 'ILBM' Quit
  107.  
  108.  
  109. *  loop till you find a 'type' process it, continue till 'BODY'
  110. *  ( for now, ignore 'GRAB' & 'DEST' )
  111.  
  112.  
  113.     a0 += 4
  114.  
  115. Nxt
  116.     (a0) = 'BMHD' {
  117.  
  118.         Bmhd = 1    ;set 'BMHD'
  119.  
  120.         a0 += 8        ;(skip length) inc to 'struct'
  121.  
  122.         bm_width = (a0)+ w
  123.         bm_height = (a0)+ w
  124.         bm_xpos = (a0)+
  125.         bm_ypos = (a0)+
  126.         bm_planes = (a0)+ b
  127.         bm_mask = (a0)+
  128.         bm_compress = (a0)+
  129.         bm_pad = (a0)+
  130.         bm_tcolor = (a0)+
  131.         bm_xasp = (a0)+
  132.         bm_yasp = (a0)+
  133.         bm_pwidth = (a0)+
  134.         bm_pheight = (a0)+
  135.  
  136.         jmp    Nxt
  137.     }
  138.  
  139.  
  140.     (a0) = 'CMAP' {
  141.  
  142.         CMap = 1    ;set 'CMAP'
  143.  
  144.         a0 += 4        ;inc to length
  145.  
  146.         d0 = (a0)+    ;number of 'triplets'
  147.         d0 /= 3
  148.         Colors = d0
  149.  
  150.         d3 = d0        ;D3 loop cnt
  151.         d3 --
  152.  
  153.         d0 *= 2
  154.         TabLen = d0 w
  155.  
  156.  
  157.         -(SP) = a0    ;save
  158.  
  159.         CTab = AllocMem( TabLen $10001 )
  160.         beq    Quit
  161.  
  162.         a0 = (SP)+    ;restore
  163.  
  164. *  Load ColorTable
  165.  
  166.         a2 = CTab
  167.  
  168. LdColor        d1 = (a0)+ b    ;??X?
  169.         d1 << 4 w    ;?X?0
  170.         d1 = (a0)+ b    ;?XX?
  171.         d1 << 4 w    ;XX?0
  172.         d1 = (a0)+ b    ;XXX?
  173.         d1 >> 4 w    ;0XXX
  174.  
  175.         (a2)+ = d1 w
  176.         dbf    d3,LdColor
  177.         jmp    Nxt
  178.     }
  179.  
  180.  
  181.     (a0) = 'CAMG' {
  182.  
  183.         a0 += 8        ;( skip length )
  184.         ViewMode = (a0)+
  185.         jmp    Nxt
  186.     }
  187.  
  188.     (a0) = 'BODY' {
  189.  
  190.         Bmhd = 0 Quit    ;BODY before BMHD.... error
  191.         SaveAddr = a0
  192.         jmp    Body
  193.     }
  194.  
  195.     a0 ++
  196.     jmp    Nxt
  197.  
  198.  
  199. Body
  200.  
  201.     Bmhd = 0 Quit        ;didn't get BMHD..    
  202.  
  203. *  Set ViewMode
  204.  
  205.     
  206.     bm_width > 384 {
  207.         ViewMode |= $8000     ;NScr.ViewModes |= HIRES        
  208.     }
  209.  
  210.     bm_height > 240 {
  211.         ViewMode |= $0004     ;NScr.ViewModes |= LACE
  212.     }
  213.  
  214.     ViewMode |= $4000        ;turn on SPRITES
  215.  
  216.  
  217. *  Get bitmap ready..
  218.  
  219.     InitBitMap( BMap bm_planes bm_width bm_height )
  220.  
  221.     d0 = bm_width
  222.     d0 /= 8
  223.     BCount = d0    ;save
  224.  
  225.     d0 *= bm_height w
  226.     PSize = d0
  227.  
  228.     d0 *= bm_planes w
  229.     TSize = d0
  230.  
  231.     DispMem = AllocMem( TSize $10002 )
  232.     beq    Quit
  233.  
  234. *  Load plane addr's into BMap
  235.  
  236.     a1 = BMap
  237.     a1 += 8
  238.     d0 = DispMem
  239.  
  240.     d1 = bm_planes
  241.     d1 --
  242.  
  243. Ld1    (a1)+ = d0
  244.     d0 += PSize
  245.     dbf    d1,Ld1
  246.  
  247.  
  248.  
  249.     InitView( View )
  250.     InitVPort( ViewPort )
  251.  
  252.     a0 = View
  253.     (a0) = ViewPort        ;View.ViewPort    
  254.     16(a0) = ViewMode w    ;View.Modes
  255.  
  256.     a0 = RasInfo
  257.     4(a0) = BMap        ;RasInfo.BitMap = BMap    
  258.     8(a0) = 0 w        ;RasInfo.RxOffset
  259.     10(a0) = 0 w        ;RasInfo.RyOffset
  260.  
  261.     a0 = ViewPort
  262.     24(a0) = bm_width w    ;ViewPort.DWidth    
  263.     26(a0) = bm_height w    ;ViewPort.DHeight    
  264.     36(a0) = RasInfo    ;ViewPort.RasInfo    
  265.  
  266.     32(a0) = ViewMode w    ;ViewPort.Modes    
  267.  
  268.  
  269. *  Pre-calc adjustments for centering
  270.  
  271.     d0 = ViewMode
  272.     d1 = bm_height
  273.     d2 = bm_width
  274.  
  275.     d3 = 0
  276.     a0 = _GfxBase
  277.     d3 = 216(a0) w        ;GfxBase.NormalDisplayRows 
  278.  
  279.  
  280.     d0:2 = 1 {    ;LACE?
  281.  
  282.         d3 *= 2
  283.         d1 > d3 {        ; > ( NormalDisplayRows * 2 )?
  284.             d1 -= d3
  285.             d1 /= 4
  286.             Yadj = d1 w
  287.         }
  288.  
  289.     } else {
  290.  
  291.         d1 > d3 {        ; > ( NormalDisplayRows )?
  292.             d1 -= d3        
  293.             d1 /= 4
  294.             Yadj = d1 w
  295.         }
  296.     }
  297.  
  298.     d0:15 = 1 {    ;HIRES?
  299.  
  300.         d2 > 640 {
  301.             d2 -= 640
  302.             d2 /= 4
  303.             Xadj = d2 w
  304.         }
  305.  
  306.     } else {
  307.  
  308.         d2 > 320 {
  309.             d2 -= 320
  310.             d2 /= 4
  311.             Xadj = d2 w
  312.         }
  313.     }
  314.  
  315.  
  316. *   Load Picture
  317.  
  318.  
  319.     a0 = SaveAddr
  320.     a0 += 8        ;skip to good stuff..
  321.  
  322.     d1 = bm_planes
  323.     d1 --
  324.  
  325.     d2 = bm_height
  326.     d2 --
  327.  
  328.  
  329. NewLine
  330.     a3 = DispMem
  331.     a3 += Offset
  332.  
  333.  
  334. Next1    d0 = BCount
  335.     d0 --
  336.  
  337.     a2 = a3
  338.  
  339.  
  340.     bm_compress != 0 {    ;( compressed )
  341.  
  342.         d4 = BCount    ;D4 keeps track of bytes remaining in line
  343.  
  344. Again        d3 = 0
  345.         d3 = (a0)+ b
  346.         bmi    Neg
  347.  
  348.         d4 -= d3
  349.         d4 --
  350.  
  351.  
  352. posloop        (a2)+ = (a0)+ b
  353.         dbf    d3,posloop
  354.         jmp    EndCk
  355.  
  356.  
  357. Neg        d3 = $80 EndCk b
  358.  
  359.         neg.b    d3
  360.  
  361.         d4 -= d3
  362.         d4 --
  363.  
  364.         d5 = (a0)+ b
  365.  
  366.  
  367. negloop        (a2)+ = d5 b
  368.         dbf    d3,negloop
  369.  
  370.  
  371. EndCk        d4 != 0 Again
  372.  
  373.     } else {    ;( non-compressed )
  374.  
  375. Next2        (a2)+ = (a0)+ b
  376.         dbf    d0,Next2
  377.     }
  378.  
  379.     a3 += PSize
  380.  
  381.     dbf    d1,Next1
  382.  
  383.     d1 = bm_planes
  384.     d1 --
  385.  
  386.     d6 = BCount
  387.     Offset += d6
  388.  
  389.     dbf    d2,NewLine
  390.  
  391. *  Save Current View's info
  392.  
  393.     Forbid( )
  394.  
  395.     a0 = ViewAddress( )
  396.  
  397.     OrgX = 14(a0)        ;View.DxOffset     
  398.     OrgY = 12(a0)        ;View.DyOffset
  399.     ModesSave = 16(a0)    ;View.Modes
  400.  
  401.     Permit( )
  402.  
  403. *  Try to center..
  404.  
  405.     a0 = View
  406.     d0 = OrgX
  407.     Xadj != 0 {
  408.         d0 -= Xadj
  409.     }
  410.     14(a0) = d0 w        ;View.DxOffset
  411.  
  412.  
  413.     d0 = OrgY
  414.     Yadj != 0 {
  415.         d0 -= Yadj
  416.     }
  417.     12(a0) = d0 w        ;View.DyOffset
  418.     
  419.  
  420.  
  421.     ColorMap = GetColorMap( Colors )
  422.     beq    Quit
  423.     
  424.     a0 = ViewPort
  425.     4(a0) = ColorMap
  426.  
  427.     CMap = 1 {
  428.  
  429.         LoadRGB4( ViewPort CTab Colors )
  430.     }
  431.  
  432.     MakeVPort( View ViewPort )
  433.     MrgCop( View )
  434.     LoadView( View )
  435.  
  436.     sw = 1
  437.  
  438. Wait    ($bfe001):6 = 1 Wait
  439.  
  440.  
  441.  
  442. Quit
  443.  
  444.     sw = 1 {
  445.  
  446.         Forbid( )
  447.  
  448.         a0 = ViewAddress( )
  449.         14(a0) = OrgX    
  450.         12(a0) = OrgY
  451.         16(a0) = ModesSave
  452.  
  453.         Permit( )
  454.  
  455.         LoadView( OldView )
  456.         WaitTOF( )
  457.     }
  458.  
  459.  
  460.     ColorMap != 0 {
  461.         FreeColorMap( ColorMap )
  462.     }
  463.  
  464.     FreeVPortCopLists( ViewPort )
  465.  
  466.     a1 = View
  467.     a0 = 4(a1)        ;View.LOFCprList    
  468.     FreeCprList( * )
  469.  
  470.     a1 = View
  471.     a0 = 8(a1)        ;View.SHFCprList
  472.     FreeCprList( * )
  473.  
  474.  
  475.  
  476.     DispMem != 0 {
  477.         FreeMem( DispMem TSize )
  478.     }
  479.  
  480.     View != 0 {
  481.         FreeMem( View 18 )
  482.     }
  483.  
  484.     ViewPort != 0 {
  485.         FreeMem( ViewPort 40 )
  486.     }
  487.  
  488.     RasInfo != 0 {
  489.         FreeMem( RasInfo 12 )
  490.     }
  491.  
  492.     Fhandle != 0 {
  493.         Close( Fhandle )
  494.     }
  495.  
  496.     FBuf != 0 {
  497.         FreeMem( FBuf FSize )
  498.     }
  499.  
  500.     Flock != 0 {
  501.         UnLock( Flock )
  502.     }
  503.  
  504.     FIB != 0 {
  505.         FreeMem( FIB 260 )
  506.     }
  507.  
  508.     CTab != 0 {
  509.         FreeMem( CTab TabLen )
  510.     }
  511.  
  512.     BMap != 0 {
  513.         FreeMem( BMap 40 )
  514.     }
  515.  
  516.     _GfxBase != 0 {
  517.         CloseLibrary( _GfxBase )
  518.     }
  519.  
  520.     _DosBase != 0 {
  521.         CloseLibrary( _DosBase )
  522.     }
  523.  
  524.     _IntuitionBase != 0 {
  525.         CloseLibrary( _IntuitionBase )
  526.     }
  527.  
  528.  
  529.  
  530.     END
  531.