[openfirmware] [commit] r1903 - dev/video/common

repository service svn at openfirmware.info
Tue Aug 3 21:42:24 CEST 2010


Author: wmb
Date: Tue Aug  3 21:42:23 2010
New Revision: 1903
URL: http://tracker.coreboot.org/trac/openfirmware/changeset/1903

Log:
Checked-in experimental screenshot code.

Added:
   dev/video/common/screenshot.fth

Added: dev/video/common/screenshot.fth
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dev/video/common/screenshot.fth	Tue Aug  3 21:42:23 2010	(r1903)
@@ -0,0 +1,75 @@
+\ Screenshot for XO-1.5 (requires 32-bit display mode)
+\
+\ Copy this file to a USB stick - preferably FAT format
+\  ok fload u:\scrnshot.fth
+\ When you want to take a screenshot, hit the frame key.
+\ The text on the screen will flash to show you it has happened.
+\ To save the screenshot to file:
+\  ok save-screenshot u:\shot.bmp
+\ The format is .BMP at 32 bits per pixel 
+
+: screen-bounds  ( -- x y w h )  0 0 screen-wh  ;
+: screen-depth  ( -- n )  " depth" $call-screen  ;
+: total-pixels  ( -- n )  screen-wh *  ;
+: screenshot  ( -- )
+   load-base screen-bounds " native-read-rectangle" $call-screen
+   screen-ih package( blink-screen )package
+;
+4 buffer: bitbuf
+: fput-le32  ( l -- )  bitbuf le-l!  bitbuf 4 ofd @ fputs  ;
+: fput-le16  ( w -- )  bitbuf le-w!  bitbuf 2 ofd @ fputs  ;
+
+   
+: save-screenshot8  ( -- )
+   ." 8 bit depth not yet implemented for save-screenshot" cr
+;
+: 16>32-screenshot
+   ." 16 bit screenshots not yet implemented" cr
+;
+h# 4000 buffer: temp-line
+: reorder-lines  ( -- )
+   screen-wh swap /l*  >r        ( height r: line-width )
+   r@ *                          ( total-bytes )
+   load-base +  load-base        ( end-line start-line r: line-width )
+   begin  2dup u>  while         ( end-line start-line r: line-width )
+      dup temp-line r@ lmove     ( end-line start-line r: line-width )
+      2dup r@ lmove              ( end-line start-line r: line-width )
+      temp-line third r@ lmove   ( end-line start-line r: line-width )
+      swap r@ -  swap r@ +       ( end-line' start-line' r: line-width )
+   repeat                        ( end-line start-line r: line-width )
+   r> 3drop
+;
+: save-screenshot32  ( "filename" -- )
+   writing
+   " BM" ofd @ fputs
+   total-pixels /l*  d# 54 +  fput-le32  \ File size
+   0 fput-le32   \ File creator 1 and 2
+   d# 54 fput-le32  \ Offset to bits
+   d# 40 fput-le32  \ DIB header size
+   screen-wh swap fput-le32 fput-le32  \ Width and height
+   1 fput-le16      \ Number of color planes
+   d# 32 fput-le16  \ Depth
+   0 fput-le32      \ No compression
+   total-pixels /l* fput-le32  \ Bitmap size
+   d# 7874 dup  fput-le32 fput-le32  \ H and V resolution in pixels/meter
+   0 fput-le32      \ Colors in palette
+   0 fput-le32      \ All colors are important 
+
+   reorder-lines
+
+   load-base  total-pixels /l*  ofd @ fputs  
+   ofd @ fclose
+;
+
+: save-screenshot  ( -- )
+   screen-depth case
+      8 of  save-screenshot8  endof
+      d# 16 of  16>32-screenshot  save-screenshot32  endof
+      d# 24 of  save-screenshot32  endof
+      d# 32 of  save-screenshot32  endof
+      ( default )  ." Unsupported depth " dup .d cr
+   endcase
+;
+
+: do-screenshot  ( -- )  screenshot 0  ;
+patch do-screenshot allow-user-aborts? user-abort



More information about the openfirmware mailing list