tealbitmap.txt


\ Bitmap-DOL  2/5/99

needs core-ext
needs ids
needs DataMgr
needs zstrings
needs struct

struct
  1 cells field i-width
  1 cells field i-height
  1 cells field i-bytes/line
  1 cells field i-flags
  4 cells field i-filler
 160 20 * chars field i-data \ max
end-struct bitmap:

20. 2constant p-bytes/line

2variable RscHandle
2variable PixDB
2variable RscDB
2variable Pixel
2variable DBPtr
2variable RHnd
2variable size
variable pic-no
bitmap: image

: ShowBitmap  ( y x  ID-no ID-type )
  DmGetResource
  2dup RscHandle 2!
  MemHandleLock  ( y x addr. )
  WinDrawBitmap
  RscHandle 2@ MemHandleUnlock
  throw
  RscHandle 2@ DmReleaseResource
  throw
 ;

: ShowImage ( y x -- )
  image >abs WinDrawBitmap
;

: GetImage ( h w n  -- )
  pic-no !
  image i-width !
  image i-height !
  image i-width @
  7 + 8 / dup 1 and +
  image i-bytes/line !
  image i-flags 10 0 fill
  dmModeReadOnly z" Pictures"
  OpenDB PixDB 2!
  pic-no @ PixDB 2@ DmGetRecord
  2dup RHnd 2!
  MemHandleLock
 114. D+ ( s. ) \ skip header stuff
  image i-height @ 0 do 2dup ( s. s. )
    image i-bytes/line @ s>d 2swap
    image i-bytes/line @ i *
    image i-data + >abs  ( s. u. s. d. )
    memmove throw
    p-bytes/line d+
  loop
  RHnd 2@ MemHandleUnLock throw
  false pic-no @ PixDB 2@
  DmReleaseRecord throw
  PixDB 2@ CloseDB
  ;

: SaveImage ( id icon? z-addr u  -- )
  2swap >r >r
  dmModeWrite rot rot
  OpenDB RscDB 2!
  image i-height @
  image i-bytes/line @ * 16 + s>d
  2dup size 2!
  r> r> if [id] tAIB else [id] Tbmp then
  RscDB 2@ DmNewResource
\ DmNewResource ( size. resID
\ resType. dbP. -- VoidHand. )
  2dup RHnd 2!
  MemHandleLock 2>r
\ DmWrite ( bytes. &srcP. offset.
\ &recordP. -- Err )
  size 2@  image >abs 0. 2r>
  DmWrite throw
  RHnd 2@ MemHandleUnLock throw
  RHnd 2@ DmReleaseResource
  throw
  RscDB 2@ CloseDB
  ;

: CopyImage
  40 65 0 getimage
  1001 false z" HcpResources"
  saveimage
\ page 80 10 showimage
;

: tt CopyImage ;


  HTMLized by Forth2HTML