home *** CD-ROM | disk | FTP | other *** search
/ Enigma Amiga Life 109 / EnigmaAmiga109CD.iso / software / sviluppo / powerd / source / examples / showtarga.d < prev    next >
Encoding:
Text File  |  2000-02-01  |  2.1 KB  |  88 lines

  1. // This small program shows 24bit only targa files (generated by RayTrace.d)
  2. // It distinguishes if you have AGA or not and shows the image in 16 or 256 grey scale
  3.  
  4. MODULE    'dos/dos','exec/memory','intuition/intuition','intuition/screens',
  5.             'graphics/modeid','utility/tagitem'
  6.  
  7. ENUM    TARGAFILE
  8.  
  9. PROC main()
  10.     DEF    args:PTR TO LONG,ra
  11.     args:=[NIL]:LONG
  12.     IF ra:=ReadArgs('TARGAFILE/A',args,NIL)
  13.         ShowTarga(args[TARGAFILE])
  14.         FreeArgs(ra)
  15.     ELSE PrintFault(IOErr(),'showtarga')
  16. ENDPROC
  17.  
  18. OBJECT BGR
  19.     b:UBYTE,
  20.     g:UBYTE,
  21.     r:UBYTE
  22.  
  23. PROC ShowTarga(name:PTR TO CHAR)
  24.     DEF    f,head[18]:UBYTE,w,h,mem:PTR TO BGR,m:PTR TO BGR,
  25.             screen:PTR TO Screen,window:PTR TO Window,n,vp,d
  26.     IF f:=Open(name,MODE_OLDFILE)
  27.         Read(f,head,18)
  28.         w:=head[12]|head[13]<<8
  29.         h:=head[14]|head[15]<<8
  30.         Seek(f,head[0],OFFSET_CURRENT)
  31.         IF mem:=AllocMem(w*h*3,MEMF_PUBLIC)
  32.             m:=mem
  33.             Read(f,m,w*h*3)
  34.             IF CheckAGA() THEN d:=8 ELSE d:=4
  35.             IF screen:=OpenScreenTags(NIL,
  36.                     SA_Width,w,
  37.                     SA_Height,h,
  38.                     SA_Depth,d,
  39.                     SA_Title,'ShowTarga v0.1 by MarK, 1999',
  40. //                    SA_DisplayID,VGALORESDBL_KEY,
  41.                     TAG_END)
  42.                 IF window:=OpenWindowTags(NIL,
  43.                         WA_Width,w,
  44.                         WA_Height,h,
  45.                         WA_IDCMP,IDCMP_CLOSEWINDOW|IDCMP_MOUSEBUTTONS,
  46.                         WA_Flags,WFLG_BORDERLESS|WFLG_ACTIVATE|WFLG_RMBTRAP,
  47.                         WA_CustomScreen,screen,
  48.                         TAG_END)
  49.                     vp:=ViewPortAddress(window)
  50.                     IF CheckAGA()
  51.                         FOR n:=0 TO 255 DO SetRGB32(vp,n,n<<24,n<<24,n<<24)
  52.                     ELSE
  53.                         FOR n:=0 TO 15 DO SetRGB4(vp,n,n,n,n)
  54.                     ENDIF
  55.                     DEF    x,y
  56.                     FOR y:=0 TO h-1
  57.                         FOR x:=0 TO w-1
  58.                             n:=m.r+m.g+m.b
  59.                             IF CheckAGA()
  60.                                 SetAPen(window.RPort,n/3)
  61.                             ELSE
  62.                                 SetAPen(window.RPort,n/48)
  63.                             ENDIF
  64.                             WritePixel(window.RPort,x,y)
  65.                             m[]++
  66.                         ENDFOR
  67.                     ENDFOR
  68.                     WaitPort(window.UserPort)
  69.                     CloseWindow(window)
  70.                 ELSE PrintF('Unable to open window!\n')
  71.                 CloseScreen(screen)
  72.             ELSE PrintF('Unable to open screen!\n')
  73.             FreeMem(mem,w*h*3)
  74.         ENDIF
  75.         Close(f)
  76.     ELSE PrintFault(IOErr(),'showtarga')
  77. ENDPROC
  78.  
  79. APROC CheckAGA()(BOOL)
  80.     move.w    $dff07c,d0
  81.     cmpi.b    #$f8,d0
  82.     beq.s        .yes
  83.     moveq        #0,d0
  84.     rts
  85. .yes
  86.     moveq        #-1,d0
  87. ENDPROC
  88.