home *** CD-ROM | disk | FTP | other *** search
/ Magazyn Exec 5 / CD_Magazyn_EXEC_nr_5.iso / Programy / Programowanie / AmigaE / powerd.lha / PowerD / examples / show24.d < prev    next >
Encoding:
Text File  |  2000-03-20  |  1.9 KB  |  85 lines

  1. MODULE    'intuition/intuition',
  2.             'intuition/screens',
  3.             'dos/dos',
  4.             'graphics/modeid',
  5.             'utility/tagitem',
  6.             'exec/memory'
  7.  
  8. ENUM    NAME
  9.  
  10. PROC main()
  11.     DEF    ra,args=[0]:LONG
  12.     IF ra:=ReadArgs('FILE/A',args,NIL)
  13.         ShowTarga24(args[NAME])
  14.         FreeArgs(ra)
  15.     ELSE PrintFault(IOErr(),'show24')
  16. ENDPROC
  17.  
  18. OBJECT BGR
  19.     b:UBYTE,
  20.     g:UBYTE,
  21.     r:UBYTE
  22.  
  23. PROC ShowTarga24(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,vp
  26.     IF f:=Open(name,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 screen:=OpenScreenTags(NIL,
  35.                     SA_Width,w,
  36.                     SA_Height,h,
  37.                     SA_Depth,8,
  38.                     SA_Title,'ShowTarga24 v0.1 by MarK, 2000',
  39.                     SA_DisplayID,VGALORESDBL_KEY,
  40.                     TAG_END)
  41.                 IF window:=OpenWindowTags(NIL,
  42.                         WA_Width,w,
  43.                         WA_Height,h,
  44.                         WA_IDCMP,IDCMP_CLOSEWINDOW|IDCMP_MOUSEBUTTONS,
  45.                         WA_Flags,WFLG_BORDERLESS|WFLG_ACTIVATE|WFLG_RMBTRAP,
  46.                         WA_CustomScreen,screen,
  47.                         TAG_END)
  48.                     vp:=ViewPortAddress(window)
  49.                     DEF    r,g,b,n=0
  50.                     FOR r:=0 TO 255 STEP 64
  51.                         FOR g:=0 TO 255 STEP 32
  52.                             FOR b:=0 TO 255 STEP 32
  53.                                 SetRGB32(vp,n,r<<24,g<<24,b<<24)
  54.                                 n++
  55.                             ENDFOR
  56.                         ENDFOR
  57.                     ENDFOR
  58.                     DEF    x,y
  59.                     FOR y:=0 TO h-1
  60.                         FOR x:=0 TO w-1
  61.                             n:=(m.r>>6)<<6+(m.g>>5)<<3+(m.b>>5)
  62.                             SetAPen(window.RPort,n)
  63.                             WritePixel(window.RPort,x,y)
  64.                             m[]++
  65.                         ENDFOR
  66.                     ENDFOR
  67.                     n:=0
  68.                     FOR y:=0 TO 31
  69.                         FOR x:=0 TO 7
  70.                             SetAPen(window.RPort,n)
  71.                             WritePixel(window.RPort,x,y)
  72.                             n++
  73.                         ENDFOR
  74.                     ENDFOR
  75.                     WaitPort(window.UserPort)
  76.                     CloseWindow(window)
  77.                 ELSE PrintF('\s: unable to open window\n','show24')
  78.                 CloseScreen(screen)
  79.             ELSE PrintF('\s: unable to open screen\n','show24')
  80.             FreeMem(mem,w*h*3)
  81.         ENDIF
  82.         Close(f)
  83.     ELSE PrintFault(IOErr(),'show24')
  84. ENDPROC
  85.