home *** CD-ROM | disk | FTP | other *** search
- // This small program shows 24bit only targa files (generated by RayTrace.d)
- // It distinguishes if you have AGA or not and shows the image in 16 or 256 grey scale
-
- MODULE 'dos/dos','exec/memory','intuition/intuition','intuition/screens','graphics/modeid'
-
- ENUM TARGAFILE
-
- PROC main()
- DEF args:PTR TO LONG,ra
- args:=[NIL]:LONG
- IF ra:=ReadArgs('TARGAFILE/A',args,NIL)
- ShowTarga(args[TARGAFILE])
- FreeArgs(ra)
- ELSE DO PrintFault(IOErr(),'showtarga')
- ENDPROC
-
- OBJECT BGR
- b:UBYTE,
- g:UBYTE,
- r:UBYTE
-
- PROC ShowTarga(name:PTR TO CHAR)
- DEF f,head[18]:UBYTE,w,h,mem:PTR TO BGR,m:PTR TO BGR,
- screen:PTR TO Screen,window:PTR TO Window,n,vp,d
- IF f:=Open(name,MODE_OLDFILE)
- Read(f,head,18)
- w:=head[12]|head[13]<<8
- h:=head[14]|head[15]<<8
- Seek(f,head[0],OFFSET_CURRENT)
- IF mem:=AllocMem(w*h*3,MEMF_PUBLIC)
- m:=mem
- Read(f,m,w*h*3)
- IF CheckAGA() THEN d:=8 ELSE d:=4
- IF screen:=OpenScreenTags(NIL,
- SA_Width,w,
- SA_Height,h,
- SA_Depth,d,
- SA_Title,'ShowTarga v0.1 by MarK, 1999',
- // SA_DisplayID,VGALORESDBL_KEY,
- TAG_END)
- IF window:=OpenWindowTags(NIL,
- WA_Width,w,
- WA_Height,h,
- WA_IDCMP,IDCMP_CLOSEWINDOW|IDCMP_MOUSEBUTTONS,
- WA_Flags,WFLG_BORDERLESS|WFLG_ACTIVATE|WFLG_RMBTRAP,
- WA_CustomScreen,screen,
- TAG_END)
- vp:=ViewPortAddress(window)
- IF CheckAGA()
- FOR n:=0 TO 255 DO SetRGB32(vp,n,n<<24,n<<24,n<<24)
- ELSE
- FOR n:=0 TO 15 DO SetRGB4(vp,n,n,n,n)
- ENDIF
- DEF x,y
- FOR y:=0 TO h-1
- FOR x:=0 TO w-1
- n:=m.r+m.g+m.b
- IF CheckAGA()
- SetAPen(window.RPort,n/3)
- ELSE
- SetAPen(window.RPort,n/48)
- ENDIF
- WritePixel(window.RPort,x,y)
- m[]++
- ENDFOR
- ENDFOR
- WaitPort(window.UserPort)
- CloseWindow(window)
- ELSE DO PrintF('Unable to open window!\n')
- CloseScreen(screen)
- ELSE DO PrintF('Unable to open screen!\n')
- FreeMem(mem,w*h*3)
- ENDIF
- Close(f)
- ELSE DO PrintFault(IOErr(),'showtarga')
- ENDPROC
-
- APROC CheckAGA()(BOOL)
- move.w $dff07c,d0
- cmpi.b #$f8,d0
- beq.s .yes
- moveq #0,d0
- rts
- .yes
- moveq #-1,d0
- ENDPROC
-