home *** CD-ROM | disk | FTP | other *** search
- MODULE 'intuition/intuition',
- 'intuition/screens',
- 'dos/dos',
- 'graphics/modeid',
- 'utility/tagitem',
- 'exec/memory'
-
- ENUM NAME
-
- PROC main()
- DEF ra,args=[0]:LONG
- IF ra:=ReadArgs('FILE/A',args,NIL)
- ShowTarga24(args[NAME])
- FreeArgs(ra)
- ELSE PrintFault(IOErr(),'show24')
- ENDPROC
-
- OBJECT BGR
- b:UBYTE,
- g:UBYTE,
- r:UBYTE
-
- PROC ShowTarga24(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,vp
- IF f:=Open(name,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 screen:=OpenScreenTags(NIL,
- SA_Width,w,
- SA_Height,h,
- SA_Depth,8,
- SA_Title,'ShowTarga24 v0.1 by MarK, 2000',
- 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)
- DEF r,g,b,n=0
- FOR r:=0 TO 255 STEP 64
- FOR g:=0 TO 255 STEP 32
- FOR b:=0 TO 255 STEP 32
- SetRGB32(vp,n,r<<24,g<<24,b<<24)
- n++
- ENDFOR
- ENDFOR
- ENDFOR
- DEF x,y
- FOR y:=0 TO h-1
- FOR x:=0 TO w-1
- n:=(m.r>>6)<<6+(m.g>>5)<<3+(m.b>>5)
- SetAPen(window.RPort,n)
- WritePixel(window.RPort,x,y)
- m[]++
- ENDFOR
- ENDFOR
- n:=0
- FOR y:=0 TO 31
- FOR x:=0 TO 7
- SetAPen(window.RPort,n)
- WritePixel(window.RPort,x,y)
- n++
- ENDFOR
- ENDFOR
- WaitPort(window.UserPort)
- CloseWindow(window)
- ELSE PrintF('\s: unable to open window\n','show24')
- CloseScreen(screen)
- ELSE PrintF('\s: unable to open screen\n','show24')
- FreeMem(mem,w*h*3)
- ENDIF
- Close(f)
- ELSE PrintFault(IOErr(),'show24')
- ENDPROC
-