home *** CD-ROM | disk | FTP | other *** search
-
-
- * Picture Viewer
-
- * ( In EZAsm )
-
- * Click left mouse button to exit
-
-
-
- LONG _GfxBase _DosBase _IntuitionBase
- LONG CLIName CLILen
- LONG Fhandle
- LONG ViewMode
-
- WORD bm_xpos bm_ypos bm_tcolor
- WORD bm_pwidth bm_pheight
- BYTE bm_mask bm_compress bm_pad bm_xasp bm_yasp
-
- LONG bm_planes bm_width bm_height
-
- LONG DispMem PSize
- LONG Offset BCount TSize
- LONG Colors
- BYTE Bmhd CMap
- LONG Flock FIB FSize FBuf BMap
- LONG SaveAddr CTab
- LONG OldView
- WORD OrgX OrgY ModesSave
- LONG Xadj Yadj TabLen
- LONG View ViewPort RasInfo
- LONG ColorMap
- BYTE sw
-
-
-
-
- CLIName = a0
- CLILen = d0
-
-
- _GfxBase = OpenLibrary( "graphics.library" 0 )
- beq Quit
-
- _DosBase = OpenLibrary( "dos.library" 0 )
- beq Quit
-
- _IntuitionBase = OpenLibrary( "intuition.library" 0 )
- beq Quit
-
-
- a0 = CLIName
- CLILen --
- a0 += CLILen
- (a0) = 0 b ;$0A -> $00
-
- a1 = _GfxBase
- OldView = 34(a1) ;save GfxBase.ActiView
-
-
- View = AllocMem( 18 $10001 )
- beq Quit
-
- ViewPort = AllocMem( 40 $10001 )
- beq Quit
-
- RasInfo = AllocMem( 12 $10001 )
- beq Quit
-
- BMap = AllocMem( 40 $10001 )
- beq Quit
-
- * Get file size..
-
- FIB = AllocMem( 260 $10001 )
- beq Quit
-
- Flock = Lock( CLIName -2 )
- beq Quit
-
- Examine( Flock FIB )
- tst.l d0
- beq Quit
-
- a0 = FIB
- FSize = 124(a0) ;fib_Size
-
- FBuf = AllocMem( FSize $10001 )
- beq Quit
-
-
- * Read whole file..
-
- Fhandle = Open( CLIName 1005 )
- beq Quit
-
- Read( Fhandle FBuf FSize )
- tst.l d0
- bmi Quit
-
- a0 = FBuf
-
- (a0) != 'FORM' Quit
-
- a0 += 8
- (a0) != 'ILBM' Quit
-
-
- * loop till you find a 'type' process it, continue till 'BODY'
- * ( for now, ignore 'GRAB' & 'DEST' )
-
-
- a0 += 4
-
- Nxt
- (a0) = 'BMHD' {
-
- Bmhd = 1 ;set 'BMHD'
-
- a0 += 8 ;(skip length) inc to 'struct'
-
- bm_width = (a0)+ w
- bm_height = (a0)+ w
- bm_xpos = (a0)+
- bm_ypos = (a0)+
- bm_planes = (a0)+ b
- bm_mask = (a0)+
- bm_compress = (a0)+
- bm_pad = (a0)+
- bm_tcolor = (a0)+
- bm_xasp = (a0)+
- bm_yasp = (a0)+
- bm_pwidth = (a0)+
- bm_pheight = (a0)+
-
- jmp Nxt
- }
-
-
- (a0) = 'CMAP' {
-
- CMap = 1 ;set 'CMAP'
-
- a0 += 4 ;inc to length
-
- d0 = (a0)+ ;number of 'triplets'
- d0 /= 3
- Colors = d0
-
- d3 = d0 ;D3 loop cnt
- d3 --
-
- d0 *= 2
- TabLen = d0 w
-
-
- -(SP) = a0 ;save
-
- CTab = AllocMem( TabLen $10001 )
- beq Quit
-
- a0 = (SP)+ ;restore
-
- * Load ColorTable
-
- a2 = CTab
-
- LdColor d1 = (a0)+ b ;??X?
- d1 << 4 w ;?X?0
- d1 = (a0)+ b ;?XX?
- d1 << 4 w ;XX?0
- d1 = (a0)+ b ;XXX?
- d1 >> 4 w ;0XXX
-
- (a2)+ = d1 w
- dbf d3,LdColor
- jmp Nxt
- }
-
-
- (a0) = 'CAMG' {
-
- a0 += 8 ;( skip length )
- ViewMode = (a0)+
- jmp Nxt
- }
-
- (a0) = 'BODY' {
-
- Bmhd = 0 Quit ;BODY before BMHD.... error
- SaveAddr = a0
- jmp Body
- }
-
- a0 ++
- jmp Nxt
-
-
- Body
-
- Bmhd = 0 Quit ;didn't get BMHD..
-
- * Set ViewMode
-
-
- bm_width > 384 {
- ViewMode |= $8000 ;NScr.ViewModes |= HIRES
- }
-
- bm_height > 240 {
- ViewMode |= $0004 ;NScr.ViewModes |= LACE
- }
-
- ViewMode |= $4000 ;turn on SPRITES
-
-
- * Get bitmap ready..
-
- InitBitMap( BMap bm_planes bm_width bm_height )
-
- d0 = bm_width
- d0 /= 8
- BCount = d0 ;save
-
- d0 *= bm_height w
- PSize = d0
-
- d0 *= bm_planes w
- TSize = d0
-
- DispMem = AllocMem( TSize $10002 )
- beq Quit
-
- * Load plane addr's into BMap
-
- a1 = BMap
- a1 += 8
- d0 = DispMem
-
- d1 = bm_planes
- d1 --
-
- Ld1 (a1)+ = d0
- d0 += PSize
- dbf d1,Ld1
-
-
-
- InitView( View )
- InitVPort( ViewPort )
-
- a0 = View
- (a0) = ViewPort ;View.ViewPort
- 16(a0) = ViewMode w ;View.Modes
-
- a0 = RasInfo
- 4(a0) = BMap ;RasInfo.BitMap = BMap
- 8(a0) = 0 w ;RasInfo.RxOffset
- 10(a0) = 0 w ;RasInfo.RyOffset
-
- a0 = ViewPort
- 24(a0) = bm_width w ;ViewPort.DWidth
- 26(a0) = bm_height w ;ViewPort.DHeight
- 36(a0) = RasInfo ;ViewPort.RasInfo
-
- 32(a0) = ViewMode w ;ViewPort.Modes
-
-
- * Pre-calc adjustments for centering
-
- d0 = ViewMode
- d1 = bm_height
- d2 = bm_width
-
- d3 = 0
- a0 = _GfxBase
- d3 = 216(a0) w ;GfxBase.NormalDisplayRows
-
-
- d0:2 = 1 { ;LACE?
-
- d3 *= 2
- d1 > d3 { ; > ( NormalDisplayRows * 2 )?
- d1 -= d3
- d1 /= 4
- Yadj = d1 w
- }
-
- } else {
-
- d1 > d3 { ; > ( NormalDisplayRows )?
- d1 -= d3
- d1 /= 4
- Yadj = d1 w
- }
- }
-
- d0:15 = 1 { ;HIRES?
-
- d2 > 640 {
- d2 -= 640
- d2 /= 4
- Xadj = d2 w
- }
-
- } else {
-
- d2 > 320 {
- d2 -= 320
- d2 /= 4
- Xadj = d2 w
- }
- }
-
-
- * Load Picture
-
-
- a0 = SaveAddr
- a0 += 8 ;skip to good stuff..
-
- d1 = bm_planes
- d1 --
-
- d2 = bm_height
- d2 --
-
-
- NewLine
- a3 = DispMem
- a3 += Offset
-
-
- Next1 d0 = BCount
- d0 --
-
- a2 = a3
-
-
- bm_compress != 0 { ;( compressed )
-
- d4 = BCount ;D4 keeps track of bytes remaining in line
-
- Again d3 = 0
- d3 = (a0)+ b
- bmi Neg
-
- d4 -= d3
- d4 --
-
-
- posloop (a2)+ = (a0)+ b
- dbf d3,posloop
- jmp EndCk
-
-
- Neg d3 = $80 EndCk b
-
- neg.b d3
-
- d4 -= d3
- d4 --
-
- d5 = (a0)+ b
-
-
- negloop (a2)+ = d5 b
- dbf d3,negloop
-
-
- EndCk d4 != 0 Again
-
- } else { ;( non-compressed )
-
- Next2 (a2)+ = (a0)+ b
- dbf d0,Next2
- }
-
- a3 += PSize
-
- dbf d1,Next1
-
- d1 = bm_planes
- d1 --
-
- d6 = BCount
- Offset += d6
-
- dbf d2,NewLine
-
- * Save Current View's info
-
- Forbid( )
-
- a0 = ViewAddress( )
-
- OrgX = 14(a0) ;View.DxOffset
- OrgY = 12(a0) ;View.DyOffset
- ModesSave = 16(a0) ;View.Modes
-
- Permit( )
-
- * Try to center..
-
- a0 = View
- d0 = OrgX
- Xadj != 0 {
- d0 -= Xadj
- }
- 14(a0) = d0 w ;View.DxOffset
-
-
- d0 = OrgY
- Yadj != 0 {
- d0 -= Yadj
- }
- 12(a0) = d0 w ;View.DyOffset
-
-
-
- ColorMap = GetColorMap( Colors )
- beq Quit
-
- a0 = ViewPort
- 4(a0) = ColorMap
-
- CMap = 1 {
-
- LoadRGB4( ViewPort CTab Colors )
- }
-
- MakeVPort( View ViewPort )
- MrgCop( View )
- LoadView( View )
-
- sw = 1
-
- Wait ($bfe001):6 = 1 Wait
-
-
-
- Quit
-
- sw = 1 {
-
- Forbid( )
-
- a0 = ViewAddress( )
- 14(a0) = OrgX
- 12(a0) = OrgY
- 16(a0) = ModesSave
-
- Permit( )
-
- LoadView( OldView )
- WaitTOF( )
- }
-
-
- ColorMap != 0 {
- FreeColorMap( ColorMap )
- }
-
- FreeVPortCopLists( ViewPort )
-
- a1 = View
- a0 = 4(a1) ;View.LOFCprList
- FreeCprList( * )
-
- a1 = View
- a0 = 8(a1) ;View.SHFCprList
- FreeCprList( * )
-
-
-
- DispMem != 0 {
- FreeMem( DispMem TSize )
- }
-
- View != 0 {
- FreeMem( View 18 )
- }
-
- ViewPort != 0 {
- FreeMem( ViewPort 40 )
- }
-
- RasInfo != 0 {
- FreeMem( RasInfo 12 )
- }
-
- Fhandle != 0 {
- Close( Fhandle )
- }
-
- FBuf != 0 {
- FreeMem( FBuf FSize )
- }
-
- Flock != 0 {
- UnLock( Flock )
- }
-
- FIB != 0 {
- FreeMem( FIB 260 )
- }
-
- CTab != 0 {
- FreeMem( CTab TabLen )
- }
-
- BMap != 0 {
- FreeMem( BMap 40 )
- }
-
- _GfxBase != 0 {
- CloseLibrary( _GfxBase )
- }
-
- _DosBase != 0 {
- CloseLibrary( _DosBase )
- }
-
- _IntuitionBase != 0 {
- CloseLibrary( _IntuitionBase )
- }
-
-
-
- END
-