Sophie

Sophie

distrib > Mageia > 4 > x86_64 > by-pkgid > 8f148a746e04cedfa46d707ed904ee59 > files > 7

gfxboot-devel-4.4.5-3.mga4.x86_64.rpm

gfxboot reference

   Abstract

   Creating bootloader graphics with gfxboot for
   syslinux/isolinux, lilo, and grub.
     __________________________________________________________

   Table of Contents

   Overview
   Utilities
   Reference

        Initialisation
        Callbacks
        Primary words

Overview

   To make a graphical boot screen you'll have to write a small
   script. Optionally you might want font files, graphics files
   and sound files.

   The script is written in a Postscript-like language. You must
   program everything related to graphics output in it. That does
   include e.g. drawing the background picture and in particular
   handling all kind of user input.

   Font files have a special format. Create them using
   gfxboot-font. Maximum font file size is 512kB.

   If you have written a script, convert it into byte code using
   gfxboot-compile.

   Debugging this script is rather tedious. For this,
   gfxboot-compile -l will give you debug information that is
   useful together with the dtrace command.

Utilities

   Tools needed to build a boot graphics file.
     * gfxboot-compile
       Compile source into byte code. The result (together with
       any other files you might need) has to be put into a cpio
       archive. If you are using isolinux or syslinux, this is not
       required, as you can read files directly from the
       filesystem. The compiled byte code, however, always has to
       be put into the cpio archive.
       Example 1.
  # compile 'foo.ps' to 'foo', writing log to foo.log
  # Note: '-O' turns on the optimizer. You'll always want to do this.
  gfxboot-compile -O -v -l foo.log -c foo.ps foo

  # put it into a cpio archive
  # we'll assume you need a picture 'foo.jpg' and are using font 'foo.fn
t'
  echo -e "foo\nfoo.jpg\nfoo.fnt" | cpio -o >bootlogo

  # 'bootlogo' is ready to use, e.g.
  # as 'gfxboot bootlogo' in isolinux.cfg

     * gfxboot-font
       Build font file using the freetype rendering engine.
     * help2txt
       Convert html files into the internal online-help format.

Reference

   Comments start with '%' and extend to the end of line.

   To include some other source file, do:
%% include file

   Numbers are always 32 bit signed integer. Numerical and string
   constants are given in a C-like way (not as in Postscript).

   Example 2.
    123, -456
    0x4567
    "Hi there\n"
    '\033', '\x1b', '\u20ac'

   But: chars have values in the range 0 .. 0x1fffff.

   Strings are interpreted as utf8-sequences. Alternatively you
   can use '\uXXXX' or '\UXXXXXXXX' to include Unicode characters.

   Example 3.
     "1 Euro = 1 EUR\n"
     "1 Euro = 1 \u20ac\n"
     "1 Euro = 1 \xe2\x82\xac\n"

   Logical operations return values of type 'bool'. They are not
   identical with integers. There are no pre-defined constants
   'true' and 'false'. But you can define them yourself if you
   need them, e.g.:
/true 0 0 eq def

   Strings and arrays are effectively pointers. So duplicating
   them on the stack does duplicate the pointer, not the object.

   In addition, there is a unspecific pointer data type. You can
   use it to construct arbitrary memory references.

   Variable/constants/function names can consist of everything
   except whitespace.

Initialisation

   During initialization the config file in run. It must leave
   either an empty stack or a boolean 'true' value at the TOS (top
   of stack) to indicate the boot loader that everything worked
   fine. Otherwise the boot loader will assume that some error
   occured and not continue in graphics mode.

   If you want to handle input (as you probably do) you must
   define at least the callback function KeyEvent.

Callbacks

   Communication with the boot loader is done via callback
   functions. You are responsible to assign useful actions to
   them. See config file examples for more documentation.
     * KeyEvent
       Called if a key is pressed.
     * MenuInit
       Should draw boot menu.
     * InfoBoxInit
       Show message box (e.g. error messages).
     * InfoBoxDone
       Hide message box.
     * ProgressInit
       Initialize kernel load progress bar (syslinux/isolinux
       only).
     * ProgressDone
       Hide progress bar.
     * ProgressUpdate
       Advance progress bar.
     * PasswordInit
       Show password dialog.
     * PasswordDone
       Hide password dialog.
     * Timeout
       Timeout counter; called every 18.3th second until timeout
       occurs.
     * Timer
       Called every 18.3th second regardless of timeout.

Primary words

     * { - start code definition
       ( -- code1 )
       code1: code start marker
       After {, no code is executed until a matching } is found.
       See also: def, }
       Example 4.
  /++ { 1 add } def       % define increment function '++'

     * } - complete code definition
       ( -- )
       Note: { and } are taken care of already during conversion
       into bytecode. This means that redefining them does not
       work as you would expect.
       See also: def, {
       Example 5.
  /dec { 1 sub } def      % define decrement function 'dec'

     * 64bit - test if we run on a 64-bit machine
       ( -- int1 )
       int1 = 1: 64-bit architecture
       See also: _readsector, date, eject, getbyte, getdword,
       getkey, getword, idle, inbyte, keepmode, mount, notimeout,
       outbyte, poweroff, putbyte, putdword, putword, realpath,
       reboot, serial.init, serialsetconfig, sysconfig,
       systempath, test1, time, usleep
     * [ - start array
       ( -- mark1 )
       mark1: array start marker
       See also: ]
       Example 6.
  [ 1 2 3 ]       % array with 3 elements

     * ] - complete array definition
       ( mark1 obj1 ... objN -- array1 )
       mark1: array start marker
       obj1 ... objN: some objects
       array1: N-dimensional array with obj1 ... objN
       Note: The array uses dynamically allocated memory which
       must be released using free
       See also: [, array, chdir, dumpmem, filesize, findfile,
       free, getcwd, length, malloc, memcpy, memsize, realloc,
       snprintf
       Example 7.
  /foo [ "some" "text" ] def      % array with 2 elements
  foo free                        % free memory

     * _readsector - read sector
       ( int1 -- ptr1 )
       int1: sector number
       ptr1: sector data
       Note: internal function. Returns pointer to static buffer.
       Does not return on error. Returns .undef if function is not
       implemented.
       See also: 64bit, date, eject, getbyte, getdword, getkey,
       getword, idle, inbyte, keepmode, mount, notimeout, outbyte,
       poweroff, putbyte, putdword, putword, realpath, reboot,
       serial.init, serialsetconfig, sysconfig, systempath, test1,
       time, usleep
     * abs - absolute value
       ( int1 -- int2 )
       int2: |int1|
       See also: add, and, div, max, min, mod, mul, neg, not, or,
       shl, shr, sub, xor
       Example 8.
  -6 abs          % 6

     * add - addition
       ( int1 int2 -- int3 )
       ( string1 int4 -- string2 )
       ( ptr1 int5 -- ptr2 )
       int3: int1 + int2
       string2: substring of string1 at offset int4
       Note: Strings are treated as byte sequences, not Unicode
       chars. Sizes of string1 and ptr1 are not checked.
       See also: abs, and, div, max, min, mod, mul, neg, not, or,
       shl, shr, sub, xor
       Example 9.
  1 2 add         % 3

  "abc" 1 add     % "bc"

     * and - logical or arithmetical 'and'
       ( int1 int2 -- int3 )
       ( bool1 bool2 -- bool3 )
       int3: int1 & int2
       bool3: bool1 && bool2
       Note: Mixing boolean and integer argument types is
       possible, in this case integers are converted to boolean
       first.
       See also: abs, add, div, max, min, mod, mul, neg, not, or,
       shl, shr, sub, xor
       Example 10.
  true false and          % false

  3 6 and                 % 2

  10 true and             % gives true, but please avoid this

     * array - create an empty array
       ( int1 -- array1 )
       int1: array dimension
       array1: new array
       Note: Use free to free array1.
       See also: ], chdir, dumpmem, filesize, findfile, free,
       getcwd, length, malloc, memcpy, memsize, realloc, snprintf
       Example 11.
  /foo 10 array def       % create array with 10 elements
  foo 4 123 put           % foo[4] = 123
  foo free                % free foo

     * blend - - blend image with alpha channel
       ( obj1 obj2 ptr3 -- )
       obj1: pointer to source image or color value
       obj2: pointer to alpha channel or transparency value
       ptr3: destination
       An image section of obj1 is copied to ptr3 using obj2 as
       alpha channel. obj1 may be a color value or an unpacked
       image (unpackimage, savescreen). obj2 may be a transparency
       value (0..255) or an unpacked image used as alpha channel.
       The current cursor position is used as offset into obj1 and
       obj2 if they are images. If both obj1 and obj2 are images,
       they must have the same dimensions.
       Note: 16/32-bit modes only.
       See also: currentimage, image, image.colors, image.size,
       loadpalette, restorescreen, savescreen, setimage,
       settransparentcolor, unpackimage
     * chdir - set current working directory
       ( str1 -- )
       str1: file name
       See also: ], array, dumpmem, filesize, findfile, free,
       getcwd, length, malloc, memcpy, memsize, realloc, snprintf
       Example 12.
  "/foo/bar" chdir        % set working directory

     * colorbits - current pixel size
       ( -- int1 )
       int1: pixel size in bits
       See also: currentmode, monitorsize, screen.size, setmode,
       sysinfo, videomodeinfo, videomodes, vscreen.size
     * currentcolor - current drawing color
       ( -- int1 )
       int1: palette index (8-bit mode) or 24-bit RGB-value
       (16/32-bit modes).
       See also: currentpoint, currenttransparency, fillrect,
       getpalette, getpixel, lineto, moveto, putpixel, rmoveto,
       setcolor, setpalette, settransparency, show
       Example 13.
  currentcolor not setcolor       % inverse color

     * currenteotchar - current alternative end-of-text char
       ( -- int1 )
       int1: eot char
       See also: currentlink, currentmaxrows, currenttextcolors,
       currenttextwrap, currenttitle, formattext, getlink,
       getlinks, gettextrows, serialgetbaud, serialputc,
       seteotchar, setlink, setmaxrows, setstartrow,
       settextcolors, settextwrap, show, strsize
     * currentfont - get current font
       ( -- ptr1 )
       ( -- int1 )
       ptr1: current font
       int1: current font, in password mode
       See also: fontheight, lineheight, setfont
       Example 14.
  currentfont                             % save font
  "16x16_bold.fnt" findfile setfont       % set bold font
  "bold text" show                        % write something in bold font
  setfont                                 % back to normal font

     * currentimage - currently used image
       ( -- ptr1 )
       See also: blend, image, image.colors, image.size,
       loadpalette, restorescreen, savescreen, setimage,
       settransparentcolor, unpackimage
     * currentlink - currently selected link
       ( -- int1 )
       int1: selected link
       See also: currenteotchar, currentmaxrows,
       currenttextcolors, currenttextwrap, currenttitle,
       formattext, getlink, getlinks, gettextrows, serialgetbaud,
       serialputc, seteotchar, setlink, setmaxrows, setstartrow,
       settextcolors, settextwrap, show, strsize
     * currentmaxrows - - current maxium number of text rows to
       display
       ( -- int1 )
       int1: maxium number of text rows to display in a single
       show command.
       See also: currenteotchar, currentlink, currenttextcolors,
       currenttextwrap, currenttitle, formattext, getlink,
       getlinks, gettextrows, serialgetbaud, serialputc,
       seteotchar, setlink, setmaxrows, setstartrow,
       settextcolors, settextwrap, show, strsize
     * currentmode - current video mode
       ( -- int1 )
       int1: current video mode number
       See also: colorbits, monitorsize, screen.size, setmode,
       sysinfo, videomodeinfo, videomodes, vscreen.size
     * currentpoint - current cursor position
       ( -- int1 int2 )
       int1, int2: x, y (upper left: 0, 0)
       See also: currentcolor, currenttransparency, fillrect,
       getpalette, getpixel, lineto, moveto, putpixel, rmoveto,
       setcolor, setpalette, settransparency, show
     * currenttextcolors - current text markup colors
       ( -- int1 int2 int3 int4 )
       int1: normal color
       int2: highlight color
       int3: link color
       int4: selected link color
       See also: currenteotchar, currentlink, currentmaxrows,
       currenttextwrap, currenttitle, formattext, getlink,
       getlinks, gettextrows, serialgetbaud, serialputc,
       seteotchar, setlink, setmaxrows, setstartrow,
       settextcolors, settextwrap, show, strsize
     * currenttextwrap - current text wrap column
       ( -- int1 )
       int1: text wrap column
       See also: currenteotchar, currentlink, currentmaxrows,
       currenttextcolors, currenttitle, formattext, getlink,
       getlinks, gettextrows, serialgetbaud, serialputc,
       seteotchar, setlink, setmaxrows, setstartrow,
       settextcolors, settextwrap, show, strsize
     * currenttitle - current page title
       ( -- str1 )
       str1: page title
       Note: available after running formattext
       See also: currenteotchar, currentlink, currentmaxrows,
       currenttextcolors, currenttextwrap, formattext, getlink,
       getlinks, gettextrows, serialgetbaud, serialputc,
       seteotchar, setlink, setmaxrows, setstartrow,
       settextcolors, settextwrap, show, strsize
     * currenttransparency - current transparency
       ( -- int1 )
       See also: currentcolor, currentpoint, fillrect, getpalette,
       getpixel, lineto, moveto, putpixel, rmoveto, setcolor,
       setpalette, settransparency, show
     * date - get current date
       ( -- int1 )
       int1: date (bit 0-7: day, bit 8-15: month, bit 16-31: year)
       See also: 64bit, _readsector, eject, getbyte, getdword,
       getkey, getword, idle, inbyte, keepmode, mount, notimeout,
       outbyte, poweroff, putbyte, putdword, putword, realpath,
       reboot, serial.init, serialsetconfig, sysconfig,
       systempath, test1, time, usleep
     * def - define new word
       ( dict1 obj1 -- )
       dict1: is defined as obj1
       See also: {, }
       Example 15.
  /x 100 def              % define constant x as 100

  /neg { -1 mul } def     % define 'neg' function

     * div - division
       ( int1 int2 -- int3 )
       int3: int1 / int2
       See also: abs, add, and, max, min, mod, mul, neg, not, or,
       shl, shr, sub, xor
       Example 16.
  17 3 div        % 5

     * dtrace - single step with debug window
       ( -- )
       Turn on trace mode and show debug info in upper left screen
       corner.
       See also: trace
     * dumpmem - dump memory usage to console
       ( -- )
       Note: useful only for debugging.
       See also: ], array, chdir, filesize, findfile, free,
       getcwd, length, malloc, memcpy, memsize, realloc, snprintf
     * dup - duplicate TOS
       ( obj1 -- obj1 obj1 )
       See also: exch, index, over, pop, roll, rot
       Example 17.
  key                             % key: some input value
  dup 'a' eq { do_a } if          % if key = 'a'
  dup 'b' eq { do_b } if          % if key = 'b'
  dup 'c' eq { do_c } if          % if key = 'c'
  pop

     * edit.done - restore input field background
       ( array1 -- )
       array1: see edit.init
       Note: does not free any data associated with array1.
       See also: edit.getleft, edit.hidecursor, edit.init,
       edit.input, edit.redraw, edit.showcursor
       Example 18.
  ed edit.done    % delete input field

     * edit.getleft - get chat left from cursor
       ( array1 -- int1 )
       array1: see edit.init
       int1: char (0 = start of line)
       See also: edit.done, edit.hidecursor, edit.init,
       edit.input, edit.redraw, edit.showcursor
     * edit.hidecursor - hide input field cursor
       ( array1 -- )
       array1: see edit.init
       See also: edit.done, edit.getleft, edit.init, edit.input,
       edit.redraw, edit.showcursor
     * edit.init - - setup and show an editable input field
       ( array1 str1 -- )
       str1: initial input string value
       array1: (at least) 6-dimensional array: [ x y bg buf
       buf_size .undef ]. x, y: input field position; bg:
       background pixmap (created with savescreen) - this
       determines the input field dimensions, too; buf: string
       buffer, large enough for a string of length buf_size. The
       last element is used internally.
       See also: edit.done, edit.getleft, edit.hidecursor,
       edit.input, edit.redraw, edit.showcursor
       Example 19.
  50 100 moveto 200 20 savescreen /bg exch def
  /buf 100 string def
  /ed [ 50 100 bg buf 100 .undef ] def
  ed "foo" edit.init

     * edit.input - edit field input processing
       ( array1 int1 -- )
       array1: see edit.init
       int1: key (bits 0-23 Unicode char, bits 24-31 scan code)
       See also: edit.done, edit.getleft, edit.hidecursor,
       edit.init, edit.redraw, edit.showcursor
       Example 20.
  /keyLeft 0x4b000000 def         % move cursor left
  ed 'a' edit.input
  ed keyLeft edit.input

     * edit.redraw - redraw input field
       ( array1 -- )
       array1: see edit.init
       See also: edit.done, edit.getleft, edit.hidecursor,
       edit.init, edit.input, edit.showcursor
       Example 21.
  ed edit.redraw          % redraw input field

     * edit.showcursor - show input field cursor
       ( array1 -- )
       array1: see edit.init
       See also: edit.done, edit.getleft, edit.hidecursor,
       edit.init, edit.input, edit.redraw
     * eject - eject CD-ROM
       ( int1 -- int2 )
       int1: BIOS drive id
       int2: BIOS error code
       Note: does not work with all BIOSes. (With very few,
       actually.)
       See also: 64bit, _readsector, date, getbyte, getdword,
       getkey, getword, idle, inbyte, keepmode, mount, notimeout,
       outbyte, poweroff, putbyte, putdword, putword, realpath,
       reboot, serial.init, serialsetconfig, sysconfig,
       systempath, test1, time, usleep
     * eq - equal
       ( int1 int2 -- bool1 )
       ( str1 str2 -- bool2 )
       ( obj1 obj2 -- bool3 )
       bool1: true if int1 == int2
       bool2: true if str1 == str2
       bool3: true if obj1 and obj2 are identical
       See also: ge, gt, le, lt, ne
       Example 22.
  1 3 eq                  % false
  "abc" "abc" eq          % true
  /a [ 1 2 ] def
  /b a def
  a [ 1 2 ] eq            % false (not the same array)
  a b eq                  % true

     * exch - exchange TOS with TOS-1
       ( obj1 obj2 -- obj2 obj1 )
       See also: dup, index, over, pop, roll, rot
       Example 23.
  8
  /a exch def     % a = 8

     * exec - evaluate object
       ( dict1 -- )
       ( obj1 -- obj1 )
       If obj1 is a dictionary entry, it is looked up and
       evaluated. If not, the stack is left unchanged.
       Note: Unlike Postscript, no cvx is necessary. And it works
       only with dictionary references.
       See also: exit, for, forall, if, ifelse, loop, repeat,
       return
       Example 24.
  /foo [ /bar 100 "abc" ] def
  foo 0 get                       % /bar
  exec                            % run bar
  foo 2 get                       % "abc"
  exec                            % still "abc"

     * exit - leave loop/repeat/for/forall loop.
       ( -- )
       See also: exec, for, forall, if, ifelse, loop, repeat,
       return
       Example 25.
  0 1 100 { 56 eq { exit } if } for       % leave if counter == 56

     * filesize - get file size
       ( str1 -- int1 )
       str1: file name
       int1: file length (or .undef if not found)
       Note: Unlike findfile, it doesn't load the file.
       See also: ], array, chdir, dumpmem, findfile, free, getcwd,
       length, malloc, memcpy, memsize, realloc, snprintf
       Example 26.
  "xxx.jpg" filesize      % file size of "xxx.jpg"

     * fillrect - fill rectangular area
       ( int1 int2 -- )
       int1, int2: width, height
       See also: currentcolor, currentpoint, currenttransparency,
       getpalette, getpixel, lineto, moveto, putpixel, rmoveto,
       setcolor, setpalette, settransparency, show
       Example 27.
  0 0 moveto
  blue setcolor
  300 200 fillrect        % 300x200 blue rectangle

     * findfile - load file
       ( str1 -- ptr1 )
       str1: file name
       ptr1: buffer with file data
       Note: ptr1 may or may not have to be free'd using free,
       depending on whether it is actually loaded from file system
       or is part of the bootlogo archive. To be on the safe side,
       always free it.
       To get the file length, use length on ptr1.
       See also: ], array, chdir, dumpmem, filesize, free, getcwd,
       length, malloc, memcpy, memsize, realloc, snprintf
       Example 28.
  "xxx.jpg" findfile length       % file size of "xxx.jpg"

     * fontheight - font height
       ( -- int1 )
       int1: font height
       See also: currentfont, lineheight, setfont
       Example 29.
  currentpoint
  "Hello" show                    % print "Hello"
  moveto 0 fontheight rmoveto
  "world!"                        % print "world!" below "Hello"

     * for - - typical 'for' loop
       ( int1 int2 int3 code1 -- )
       int1: start value
       int2: step size
       int3: final value (inclusive)
       Run code1 and put the current counter value onto the stack
       for every iteration.
       See also: exec, exit, forall, if, ifelse, loop, repeat,
       return
       Example 30.
  0 1 4 { } for           % leave 0 1 2 3 4 on the stack

     * forall - loop over all array elements
       ( array1 code 1 -- )
       ( str1 code 1 -- )
       ( ptr1 code 1 -- )
       Run code1 for every element of array1, str1 or ptr1 putting
       each element on the stack in turn.
       Note: str1 is treated as a sequence of bytes, not utf8
       chars.
       See also: exec, exit, for, if, ifelse, loop, repeat, return
       Example 31.
  [ 1 2 3 ] { } forall    % leave 1 2 3 on the stack

     * formattext - - format text
       ( str1 -- )
       str1: text
       Preprocess text to find (and remember) line breaks, links
       and stuff.
       See also: currenteotchar, currentlink, currentmaxrows,
       currenttextcolors, currenttextwrap, currenttitle, getlink,
       getlinks, gettextrows, serialgetbaud, serialputc,
       seteotchar, setlink, setmaxrows, setstartrow,
       settextcolors, settextwrap, show, strsize
     * free - free memory
       ( obj1 -- )
       obj1: object to free, either array, string or pointer
       Note: There is no garbage collector implemented. You have
       to keep track of memory usage yourself. If obj1 does not
       refer to some dynamically allocated object, free does
       nothing.
       See also: ], array, chdir, dumpmem, filesize, findfile,
       getcwd, length, malloc, memcpy, memsize, realloc, snprintf
       Example 32.
  2 array                 % create array with 2 elements...
  free                    % and free it

  100 malloc              % allocate 100 bytes...
  free                    % and free it

  "Some Text" free        % free nothing

     * ge - greater or equal
       ( int1 int2 -- bool1 )
       ( str1 str2 -- bool2 )
       ( ptr1 ptr2 -- bool3 )
       bool1: true if int1 >= int2
       bool2: true if str1 >= str2
       bool3: true if ptr1 >= ptr2
       See also: eq, gt, le, lt, ne
       Example 33.
  7 4 ge                  % true
  "abc" "abc" ge          % true
  /a 10 malloc def
  /b a + 2 def
  b a ge                  % true

     * get - get array, string or memory element
       ( array1 int1 -- obj1 )
       ( string1 int2 -- int3 )
       ( ptr1 int4 -- int5 )
       obj1: int1-th element of array1
       int3: int2-th byte of string1
       int5: int4-th byte of ptr1
       Note: Returns the n-th byte of string1, not the n-th utf8
       char. Sizes of string1 or ptr1 are not checked.
       See also: put
       Example 34.
  "abc" 1 get             % 'b'

  [ 10 20 30 ] 2 get      % 30

     * getbyte - get byte from memory
       ( ptr1 -- int1 )
       int1: byte at ptr1
       See also: 64bit, _readsector, date, eject, getdword,
       getkey, getword, idle, inbyte, keepmode, mount, notimeout,
       outbyte, poweroff, putbyte, putdword, putword, realpath,
       reboot, serial.init, serialsetconfig, sysconfig,
       systempath, test1, time, usleep
     * getcwd - get current working directory
       ( -- str1 )
       str1: file name
       See also: ], array, chdir, dumpmem, filesize, findfile,
       free, length, malloc, memcpy, memsize, realloc, snprintf
       Example 35.
  getcwd show     % print working directory

     * getdword - get dword from memory
       ( ptr1 -- int1 )
       int1: dword at ptr1
       See also: 64bit, _readsector, date, eject, getbyte, getkey,
       getword, idle, inbyte, keepmode, mount, notimeout, outbyte,
       poweroff, putbyte, putdword, putword, realpath, reboot,
       serial.init, serialsetconfig, sysconfig, systempath, test1,
       time, usleep
     * getkey - get keyboard input
       ( -- int1 )
       int1: key (bit 0-7: ASCII, bit 8-15: scan code, bit 16-31:
       kbd status bits)
       Note: the function does not block. If there is no key
       pressed, bits 0-15 will be 0.
       See also: 64bit, _readsector, date, eject, getbyte,
       getdword, getword, idle, inbyte, keepmode, mount,
       notimeout, outbyte, poweroff, putbyte, putdword, putword,
       realpath, reboot, serial.init, serialsetconfig, sysconfig,
       systempath, test1, time, usleep
     * getlink - - get link information
       ( int1 -- str1 str2 int2 int3 )
       int1: link number
       str1: link label
       str2: link text
       int1: link text x-offset
       int2: link text row
       See also: currenteotchar, currentlink, currentmaxrows,
       currenttextcolors, currenttextwrap, currenttitle,
       formattext, getlinks, gettextrows, serialgetbaud,
       serialputc, seteotchar, setlink, setmaxrows, setstartrow,
       settextcolors, settextwrap, show, strsize
     * getlinks - - number of links in text
       ( -- int1 )
       int1: number of links in text.
       Note: available after running formattext
       See also: currenteotchar, currentlink, currentmaxrows,
       currenttextcolors, currenttextwrap, currenttitle,
       formattext, getlink, gettextrows, serialgetbaud,
       serialputc, seteotchar, setlink, setmaxrows, setstartrow,
       settextcolors, settextwrap, show, strsize
     * getpalette - get palette entry
       ( int1 -- int2 )
       int1: palette index
       int2: RGB value
       See also: currentcolor, currentpoint, currenttransparency,
       fillrect, getpixel, lineto, moveto, putpixel, rmoveto,
       setcolor, setpalette, settransparency, show
       Example 36.
  11 dup getpalette not setpalette        % invert color 11

     * getpixel - read pixel from graphics memory
       ( -- int1 )
       int1: color; either 8-bit palette index or 24-bit
       RGB-value, depending on graphics mode.
       See also: currentcolor, currentpoint, currenttransparency,
       fillrect, getpalette, lineto, moveto, putpixel, rmoveto,
       setcolor, setpalette, settransparency, show
       Example 37.
  getpixel not setcolor putpixel          % invert pixel color

     * gettextrows - number of text rows
       ( -- int1 )
       int1: total number of text rows.
       Note: available after running formattext
       See also: currenteotchar, currentlink, currentmaxrows,
       currenttextcolors, currenttextwrap, currenttitle,
       formattext, getlink, getlinks, serialgetbaud, serialputc,
       seteotchar, setlink, setmaxrows, setstartrow,
       settextcolors, settextwrap, show, strsize
     * gettype - get object type
       ( obj1 -- int1 )
       Returns the object type.
       See also: settype
       Example 38.
  "abc" gettype           % 4 (= string)

     * getword - get word from memory
       ( ptr1 -- int1 )
       int1: word at ptr1
       See also: 64bit, _readsector, date, eject, getbyte,
       getdword, getkey, idle, inbyte, keepmode, mount, notimeout,
       outbyte, poweroff, putbyte, putdword, putword, realpath,
       reboot, serial.init, serialsetconfig, sysconfig,
       systempath, test1, time, usleep
     * gt - greater than
       ( int1 int2 -- bool1 )
       ( str1 str2 -- bool2 )
       ( ptr1 ptr2 -- bool3 )
       bool1: true if int1 > int2
       bool2: true if str1 > str2
       bool3: true if ptr1 > ptr2
       See also: eq, ge, le, lt, ne
       Example 39.
  7 4 gt                  % true
  "abc" "abd" gt          % false
  /a 10 malloc def
  /b a + 2 def
  b a gt                  % true

     * idle - run stuff when idle
       ( ptr1 int1 -- )
       ptr1: 'kroete' data
       int1: direction (0 or 1)
       Run 'kroete' animation while we're waiting for keyboard
       input.
       See also: 64bit, _readsector, date, eject, getbyte,
       getdword, getkey, getword, inbyte, keepmode, mount,
       notimeout, outbyte, poweroff, putbyte, putdword, putword,
       realpath, reboot, serial.init, serialsetconfig, sysconfig,
       systempath, test1, time, usleep
     * if - typical 'if'
       ( bool1 code1 -- )
       ( int1 code1 -- )
       ( undef1 code1 -- )
       ( obj1 code1 -- )
       bool1: contition
       code1: code start marker (see {)
       int1: integer are automatically converted to boolean
       undef1: the undefined value is treated as 'false'
       obj1: strings, arrays, pointer are considered 'true'
       See also: exec, exit, for, forall, ifelse, loop, repeat,
       return
       Example 40.
  10 4 gt { "10 > 4" show } if

  "" { "is always true" show } if         % strings are always 'true'

     * ifelse - typical 'if' / 'else'
       ( bool1 code1 code2 -- )
       ( int1 code1 code2 -- )
       ( undef1 code1 code2 -- )
       ( obj1 code1 code2 -- )
       bool1: contition
       code1: code start marker (see {) for 'true' branch
       code2: code start marker (see {) for 'false' branch
       int1: integer are automatically converted to boolean
       undef1: the undefined value is treated as 'false'
       obj1: strings, arrays, pointer are considered 'true'
       See also: exec, exit, for, forall, if, loop, repeat, return
       Example 41.
  x1 x2 gt { "x1 > x2" } { "x1 <= x2" } ifelse show

     * image - show image region
       ( int1 int2 int3 int4 -- )
       int1, int2: x, y position in image
       int3, int4: width, height of image region
       See also: blend, currentimage, image.colors, image.size,
       loadpalette, restorescreen, savescreen, setimage,
       settransparentcolor, unpackimage
       Example 42.
  "xxx.jpg" findfile setimage     % load and activate "xxx.jpg"
  0 0 image.size image            % draw whole image

     * image.colors - image palette entries
       ( -- int1 )
       int1: number of colors in 8-bit PCX image.
       8-bit modes use a color palette. An image uses the first
       image.colors entries. If you want to define your own
       colors, use image.colors to get the first free palette
       entry. For 16/32-bit modes, 0 is returned.
       See also: blend, currentimage, image, image.size,
       loadpalette, restorescreen, savescreen, setimage,
       settransparentcolor, unpackimage
     * image.size - graphics image size
       ( -- int1 int2 )
       int1, int2: image width and height. The image is specified
       with setimage
       See also: blend, currentimage, image, image.colors,
       loadpalette, restorescreen, savescreen, setimage,
       settransparentcolor, unpackimage
       Example 43.
  image.size screen.size
  exch 4 -1 roll sub 2 div 3 1 roll exch sub 2 div        % center image
  moveto 0 0 image.size image                             % draw it

     * inbyte - get byte from i/o port
       ( int1 -- int2 )
       int2: byte from port int1
       See also: 64bit, _readsector, date, eject, getbyte,
       getdword, getkey, getword, idle, keepmode, mount,
       notimeout, outbyte, poweroff, putbyte, putdword, putword,
       realpath, reboot, serial.init, serialsetconfig, sysconfig,
       systempath, test1, time, usleep
     * index - copy stack element
       ( objN ... obj1 int1 -- objN ... obj1 objM )
       objM: M = int1 + 1
       See also: dup, exch, over, pop, roll, rot
       Example 44.
  /dup { 0 index } def
  /over { 1 index } def

     * keepmode - keep video mode
       ( int1 -- )
       int1 = 1: keep video mode when starting kernel.
       See also: 64bit, _readsector, date, eject, getbyte,
       getdword, getkey, getword, idle, inbyte, mount, notimeout,
       outbyte, poweroff, putbyte, putdword, putword, realpath,
       reboot, serial.init, serialsetconfig, sysconfig,
       systempath, test1, time, usleep
     * le - less or equal
       ( int1 int2 -- bool1 )
       ( str1 str2 -- bool2 )
       ( ptr1 ptr2 -- bool3 )
       bool1: true if int1 <= int2
       bool2: true if str1 <= str2
       bool3: true if ptr1 <= ptr2
       See also: eq, ge, gt, lt, ne
       Example 45.
  7 7 le                  % true
  "abc" "abd" le          % true
  /a 10 malloc def
  /b a + 2 def
  b a le                  % false

     * length - array, string or memory size
       ( array1 -- int1 )
       ( string1 -- int1 )
       ( ptr1 -- int1 )
       int1: size of array1 or string1 or ptr1
       Returns the length of string1 in bytes, not the number of
       Unicode chars. If ptr1 doesn't point at the start of a
       memory area, length returns the number of remaining bytes.
       See also: ], array, chdir, dumpmem, filesize, findfile,
       free, getcwd, malloc, memcpy, memsize, realloc, snprintf
       Example 46.
  "abc" length            % 3

  [ 0 1 ] length          % 2

  /foo 10 malloc def
  foo length              % 10
  foo 3 add length        % 7

     * lineheight - current line height
       ( -- int1 )
       int1: line height
       See also: currentfont, fontheight, setfont
     * lineto - draw line
       ( int1 int2 -- )
       int1, int2: line end
       See also: currentcolor, currentpoint, currenttransparency,
       fillrect, getpalette, getpixel, moveto, putpixel, rmoveto,
       setcolor, setpalette, settransparency, show
       Example 47.
  0 0 moveto screen.size lineto           % draw diagonal

     * loadpalette - load current palette
       ( -- )
       Activates current palette in 8-bit modes.
       See also: blend, currentimage, image, image.colors,
       image.size, restorescreen, savescreen, setimage,
       settransparentcolor, unpackimage
     * loop - endless loop
       ( code1 -- )
       See also: exec, exit, for, forall, if, ifelse, repeat,
       return
       Example 48.
  /x 0 def { /x x 1 add def x 56 eq { exit } if } loop    % loop until x
 == 56

     * lt - less than
       ( int1 int2 -- bool1 )
       ( str1 str2 -- bool2 )
       ( ptr1 ptr2 -- bool3 )
       bool1: true if int1 < int2
       bool2: true if str1 < str2
       bool3: true if ptr1 < ptr2
       See also: eq, ge, gt, le, ne
       Example 49.
  7 4 lt                  % false
  "abc" "abd" lt          % true
  /a 10 malloc def
  /b a + 2 def
  b a lt                  % false

     * malloc - allocate memory
       ( int1 -- ptr1 )
       int1: memory size
       ptr1: pointer to memory area
       Note: Use free to free ptr1.
       See also: ], array, chdir, dumpmem, filesize, findfile,
       free, getcwd, length, memcpy, memsize, realloc, snprintf
       Example 50.
  /foo 256 malloc def     % allocate 256 bytes...
  foo free                % and free it

     * max - maximum
       ( int1 int2 -- int3 )
       int3: max(int1, int2)
       See also: abs, add, and, div, min, mod, mul, neg, not, or,
       shl, shr, sub, xor
       Example 51.
  4 11 max        % 11

     * memcpy - copy memory
       ( ptr1 ptr2 int1 -- )
       ptr1: destination
       ptr2: source
       int1: size
       See also: ], array, chdir, dumpmem, filesize, findfile,
       free, getcwd, length, malloc, memsize, realloc, snprintf
       Example 52.
  /a 10 malloc def
  /b 10 malloc def
  a 1 100 put             % a[1] = 100
  b a 10 memcpy           % copy a to b

     * memsize - report available memory size
       ( int1 -- int2 int3 )
       int1: memory region (0 ... 3)
       int2: total free memory
       int3: size of largest free block
       Region 0 is memory in the low 640kB range. Region >= 1 are
       typically 1 MB extended memory per region.
       Note: available memory depends on the boot loader.
       See also: ], array, chdir, dumpmem, filesize, findfile,
       free, getcwd, length, malloc, memcpy, realloc, snprintf
       Example 53.
  0 memsize pop 1024 lt { "less than 1kB left" show } if

     * min - minimum
       ( int1 int2 -- int3 )
       int3: min(int1, int2)
       See also: abs, add, and, div, max, mod, mul, neg, not, or,
       shl, shr, sub, xor
       Example 54.
  4 11 min        % 4

     * mod - remainder
       ( int1 int2 -- int3 )
       int3: int1 % int2
       See also: abs, add, and, div, max, min, mul, neg, not, or,
       shl, shr, sub, xor
       Example 55.
  17 3 mod        % 2

     * mod.load - assign mod file to player
       ( int1 ptr1 -- )
       int1: player
       ptr1: mod file
       See also: mod.play, mod.playsample, sound.done,
       sound.getsamplerate, sound.getvolume, sound.play,
       sound.setsamplerate, sound.setvolume, wav.play,
       wav.playlater
     * mod.play - play mod file
       ( int1 int2 -- )
       int1: player
       int2: song start
       Note: sounds are played using the PC speaker.
       See also: mod.load, mod.playsample, sound.done,
       sound.getsamplerate, sound.getvolume, sound.play,
       sound.setsamplerate, sound.setvolume, wav.play,
       wav.playlater
     * mod.playsample - play mod sample
       ( int1 int2 int3 int4 -- )
       int1: player
       int2: channel
       int3: sample number
       int4: pitch
       See also: mod.load, mod.play, sound.done,
       sound.getsamplerate, sound.getvolume, sound.play,
       sound.setsamplerate, sound.setvolume, wav.play,
       wav.playlater
     * monitorsize - monitor size
       ( -- int1 int2 )
       int1, int2: width and height
       See also: colorbits, currentmode, screen.size, setmode,
       sysinfo, videomodeinfo, videomodes, vscreen.size
     * mount - re-read filesystem meta data
       ( -- int1 )
       int1: error
       See also: 64bit, _readsector, date, eject, getbyte,
       getdword, getkey, getword, idle, inbyte, keepmode,
       notimeout, outbyte, poweroff, putbyte, putdword, putword,
       realpath, reboot, serial.init, serialsetconfig, sysconfig,
       systempath, test1, time, usleep
       Example 56.
  mount pop       % re-read iso fs after cdrom change

     * moveto - set cursor position
       ( int1 int2 -- )
       int1, int2: x, y (upper left: 0, 0).
       See also: currentcolor, currentpoint, currenttransparency,
       fillrect, getpalette, getpixel, lineto, putpixel, rmoveto,
       setcolor, setpalette, settransparency, show
       Example 57.
  200 100 moveto "Hello" show     % print "Hello" at (200, 100)

     * mul - multiplication
       ( int1 int2 -- int3 )
       int3: int1 * int2
       See also: abs, add, and, div, max, min, mod, neg, not, or,
       shl, shr, sub, xor
       Example 58.
  2 3 mul         % 6

     * ne - not equal
       ( int1 int2 -- bool1 )
       ( str1 str2 -- bool2 )
       ( obj1 obj2 -- bool3 )
       bool1: false if int1 == int2
       bool2: false if str1 == str2
       bool3: false if obj1 and obj2 are identical
       See also: eq, ge, gt, le, lt
       Example 59.
  1 3 ne                  % true
  "abc" "abc" ne          % false
  /a [ 1 2 ] def
  /b a def
  a [ 1 2 ] ne            % true (not the same array)
  a b ne                  % false

     * neg - negation
       ( int1 -- int2 )
       int2: -int1
       See also: abs, add, and, div, max, min, mod, mul, not, or,
       shl, shr, sub, xor
       Example 60.
  5 neg           % -5

     * not - logical or arithmetical 'not'
       ( int1 -- int2 )
       ( bool1 -- bool2 )
       int2: -int1 - 1
       bool2: !bool1
       See also: abs, add, and, div, max, min, mod, mul, neg, or,
       shl, shr, sub, xor
       Example 61.
  true not        % false

  0 not           % -1

     * notimeout - turn off initial boot loader timeout
       ( -- )
       Turns off any automatic booting.
       See also: 64bit, _readsector, date, eject, getbyte,
       getdword, getkey, getword, idle, inbyte, keepmode, mount,
       outbyte, poweroff, putbyte, putdword, putword, realpath,
       reboot, serial.init, serialsetconfig, sysconfig,
       systempath, test1, time, usleep
     * or - logical or arithmetical 'or'
       ( int1 int2 -- int3 )
       ( bool1 bool2 -- bool3 )
       int3: int1 | int2
       bool3: bool || bool2
       Note: Mixing boolean and integer argument types is
       possible, in this case integers are converted to boolean
       first.
       See also: abs, add, and, div, max, min, mod, mul, neg, not,
       shl, shr, sub, xor
       Example 62.
  true false or           % true

  3 6 or                  % 7

  10 true or              % gives true, but please avoid this

     * outbyte - write byte to i/o port
       ( int1 int2 -- )
       Write byte int2 to port int1.
       See also: 64bit, _readsector, date, eject, getbyte,
       getdword, getkey, getword, idle, inbyte, keepmode, mount,
       notimeout, poweroff, putbyte, putdword, putword, realpath,
       reboot, serial.init, serialsetconfig, sysconfig,
       systempath, test1, time, usleep
     * over - copy TOS-1
       ( obj1 obj2 -- obj1 obj2 obj1 )
       See also: dup, exch, index, pop, roll, rot
     * pop - remove TOS
       ( obj1 -- )
       See also: dup, exch, index, over, roll, rot
       Example 63.
                                  % status: true or false
  "bad" status { pop "ok" } if    % "bad" or "ok"

     * poweroff - switch computer off
       ( -- )
       Note: uses APM, not ACPI.
       See also: 64bit, _readsector, date, eject, getbyte,
       getdword, getkey, getword, idle, inbyte, keepmode, mount,
       notimeout, outbyte, putbyte, putdword, putword, realpath,
       reboot, serial.init, serialsetconfig, sysconfig,
       systempath, test1, time, usleep
     * put - set an array, string or memory element
       ( array1 int1 obj1 -- )
       ( string1 int2 int3 -- )
       ( ptr1 int4 int5 -- )
       int1-th element of array1 = obj1
       int2-th byte of string1 = int3
       int4-th byte of ptr1 = int5
       Note: Sets the n-th byte of string1, not the n-th utf8
       char. Sizes of string1 or ptr1 are not checked.
       See also: get
       Example 64.
  /foo [ 10 20 30 ] def
  foo 2 77 put                    % foo = [ 10 20 77 ]

  /foo 10 string def
  foo 0 'a' put
  foo 1 'b' put                   % foo = "ab"

  But don't do this:
  "abc" 1 'X' put                 % modifies string constant "abc" to "a
Xc"!

     * putbyte - write byte to memory
       ( ptr1 int1 -- )
       Write byte int1 at ptr1.
       See also: 64bit, _readsector, date, eject, getbyte,
       getdword, getkey, getword, idle, inbyte, keepmode, mount,
       notimeout, outbyte, poweroff, putdword, putword, realpath,
       reboot, serial.init, serialsetconfig, sysconfig,
       systempath, test1, time, usleep
     * putdword - write dword to memory
       ( ptr1 int1 -- )
       Write dword int1 at ptr1.
       See also: 64bit, _readsector, date, eject, getbyte,
       getdword, getkey, getword, idle, inbyte, keepmode, mount,
       notimeout, outbyte, poweroff, putbyte, putword, realpath,
       reboot, serial.init, serialsetconfig, sysconfig,
       systempath, test1, time, usleep
     * putpixel - draw single pixel
       ( -- )
       Draw pixel in current color at current cursor position.
       See also: currentcolor, currentpoint, currenttransparency,
       fillrect, getpalette, getpixel, lineto, moveto, rmoveto,
       setcolor, setpalette, settransparency, show
       Example 65.
  blue setcolor
  0 0 moveto putpixel     % blue dot at upper left corner

     * putword - write word to memory
       ( ptr1 int1 -- )
       Write word int1 at ptr1.
       See also: 64bit, _readsector, date, eject, getbyte,
       getdword, getkey, getword, idle, inbyte, keepmode, mount,
       notimeout, outbyte, poweroff, putbyte, putdword, realpath,
       reboot, serial.init, serialsetconfig, sysconfig,
       systempath, test1, time, usleep
     * realloc - change allocated memory size
       ( obj1 int1 -- )
       obj1: object to resize, either array, string or pointer
       int1: new size; memory is freed if zero
       Note: There is no garbage collector implemented. You have
       to keep track of memory usage yourself. If obj1 does not
       refer to some dynamically allocated object, realloc does
       nothing.
       See also: ], array, chdir, dumpmem, filesize, findfile,
       free, getcwd, length, malloc, memcpy, memsize, snprintf
       Example 66.
  100 malloc      % allocate 100 bytes...
  10 realloc      % resize to 10 bytes

     * realpath - convert path to canonical absolute path
       ( str1 -- str2 )
       str1: path
       str2: real path
       Note: str2 points to a static buffer.
       See also: 64bit, _readsector, date, eject, getbyte,
       getdword, getkey, getword, idle, inbyte, keepmode, mount,
       notimeout, outbyte, poweroff, putbyte, putdword, putword,
       reboot, serial.init, serialsetconfig, sysconfig,
       systempath, test1, time, usleep
       Example 67.
  "foo/bar" realpath

     * reboot - reboot computer
       ( -- )
       See also: 64bit, _readsector, date, eject, getbyte,
       getdword, getkey, getword, idle, inbyte, keepmode, mount,
       notimeout, outbyte, poweroff, putbyte, putdword, putword,
       realpath, serial.init, serialsetconfig, sysconfig,
       systempath, test1, time, usleep
     * repeat - repeat code
       ( int1 code1 -- )
       Repeat code1 int1 times.
       See also: exec, exit, for, forall, if, ifelse, loop, return
       Example 68.
  3 { "X" show } repeat           % print "XXX"

     * restorescreen - restore screen area
       ( ptr1 -- )
       ptr1: buffer with image data; use free to free the buffer
       Note: width and height are taken from buffer. Does not
       actually free ptr1 - use free explicitly.
       See also: blend, currentimage, image, image.colors,
       image.size, loadpalette, savescreen, setimage,
       settransparentcolor, unpackimage
       Example 69.
  0 0 moveto 100 100 savescreen           % save upper left 100x100 sect
ion...
  300 200 moveto dup restorescreen        % and copy it to 300x200
  free                                    % free memory

     * return - leave current function
       ( -- )
       See also: exec, exit, for, forall, if, ifelse, loop, repeat
       Example 70.
  /x {                                    % expects key on TOS
  dup 'a' eq { pop do_a return } if
  dup 'b' eq { pop do_b return } if
  dup 'c' eq { pop do_c return } if
  pop
  } def

     * rmoveto - set relative cursor position
       ( int1 int2 -- )
       int1, int2: x-ofs, y-ofs.
       See also: currentcolor, currentpoint, currenttransparency,
       fillrect, getpalette, getpixel, lineto, moveto, putpixel,
       setcolor, setpalette, settransparency, show
       Example 71.
  200 100 moveto
  "Hello" show
  30 0 rmoveto "world!"           % "Hello    world!" (approx.)

     * roll - rotate stack elements
       ( obj1 ... objN int1 int2 -- objX ... objY )
       int1: number of elements to rotate
       int2: amount
       objX: X = (1 - int2) mod int1
       objY: Y = (N - int2) mod int1
       See also: dup, exch, index, over, pop, rot
       Example 72.
  /rot { 3 -1 roll } def
  1 2 3 4 5 5 2 roll              % leaves: 4 5 1 2 3

     * rot - rotate TOS, TOS-1, TOS-2
       ( obj1 obj2 obj3 -- obj2 obj3 obj1 )
       See also: dup, exch, index, over, pop, roll
       Example 73.
  /a 4 array def
  8
  a 1 rot put             % a[1] = 8

     * savescreen - save screen area
       ( int1 int2 -- ptr1 )
       int1, int2: width, height of screen area
       ptr1: buffer with image data; use free to free the buffer
       Note: width and height are stored in buffer.
       See also: blend, currentimage, image, image.colors,
       image.size, loadpalette, restorescreen, setimage,
       settransparentcolor, unpackimage
       Example 74.
  0 0 moveto screen.size savescreen       % save entire screen

     * screen.size - screen size in pixel
       ( -- int1 int2 )
       int1, int2: width, height
       See also: colorbits, currentmode, monitorsize, setmode,
       sysinfo, videomodeinfo, videomodes, vscreen.size
       Example 75.
  blue setcolor
  0 0 moveto screen.size fillrect         % draw blue screen

     * serial.init - program serial lines
       ( -- )
       See also: 64bit, _readsector, date, eject, getbyte,
       getdword, getkey, getword, idle, inbyte, keepmode, mount,
       notimeout, outbyte, poweroff, putbyte, putdword, putword,
       realpath, reboot, serialsetconfig, sysconfig, systempath,
       test1, time, usleep
     * serialgetbaud - get current baud rate
       ( int1 -- int2 )
       int1: console
       int2: baud (0 = undefined)
       See also: currenteotchar, currentlink, currentmaxrows,
       currenttextcolors, currenttextwrap, currenttitle,
       formattext, getlink, getlinks, gettextrows, serialputc,
       seteotchar, setlink, setmaxrows, setstartrow,
       settextcolors, settextwrap, show, strsize
     * serialputc - write char to serial line
       ( int1 -- )
       int1: char (bit 0-23: char, bit 24-31: console id)
       See also: currenteotchar, currentlink, currentmaxrows,
       currenttextcolors, currenttextwrap, currenttitle,
       formattext, getlink, getlinks, gettextrows, serialgetbaud,
       seteotchar, setlink, setmaxrows, setstartrow,
       settextcolors, settextwrap, show, strsize
     * serialsetconfig - set serial line config
       ( int1 int2 int3 -- )
       int1: line number (0-4)
       int2: port
       int3: baud
       See also: 64bit, _readsector, date, eject, getbyte,
       getdword, getkey, getword, idle, inbyte, keepmode, mount,
       notimeout, outbyte, poweroff, putbyte, putdword, putword,
       realpath, reboot, serial.init, sysconfig, systempath,
       test1, time, usleep
     * setcolor - set active drawing color
       ( int1 -- )
       int1: palette index (8-bit mode) or 24-bit RGB-value
       (16/32-bit modes).
       See also: currentcolor, currentpoint, currenttransparency,
       fillrect, getpalette, getpixel, lineto, moveto, putpixel,
       rmoveto, setpalette, settransparency, show
       Example 76.
  0xff0000 setcolor       % continue in red...
  0xff00 setcolor         % or green...
  0xff setcolor           % or blue

     * seteotchar - set alternative end-of-text char
       ( int1 -- )
       int1: eot char
       Normally strings are 0 terminated. seteotchar lets you
       define an additional char text functions recognize.
       See also: currenteotchar, currentlink, currentmaxrows,
       currenttextcolors, currenttextwrap, currenttitle,
       formattext, getlink, getlinks, gettextrows, serialgetbaud,
       serialputc, setlink, setmaxrows, setstartrow,
       settextcolors, settextwrap, show, strsize
     * setfont - set font
       ( ptr1 -- )
       ( int1 -- )
       ptr1: font data (e.g. font file).
       int1: same value as ptr1, but font is in password mode - it
       prints only '*'s.
       Note: password mode used to be passed as bit 31 in ptr1.
       gfxboot will try to guess if you are doing that, but please
       don't.
       See also: currentfont, fontheight, lineheight
       Example 77.
  "16x16.fnt" findfile setfont    % set 16x16 font

  /pwmode { 1 settype } def
  currentfont pwmode setfont      % now in password mode
  "abc" show                      % print "***"

     * setimage - set active image
       ( ptr1 -- )
       ptr1: image data. Either JPG or PCX file.
       Note: JPG is only supported in 16/32-bit modes.
       See also: blend, currentimage, image, image.colors,
       image.size, loadpalette, restorescreen, savescreen,
       settransparentcolor, unpackimage
       Example 78.
  "foo.jpg" findfile setimage     % load and use "foo.jpg"

     * setlink - select link
       ( int1 -- )
       int1: link number
       See also: currenteotchar, currentlink, currentmaxrows,
       currenttextcolors, currenttextwrap, currenttitle,
       formattext, getlink, getlinks, gettextrows, serialgetbaud,
       serialputc, seteotchar, setmaxrows, setstartrow,
       settextcolors, settextwrap, show, strsize
     * setmaxrows - maximum number of text rows to display
       ( int1 -- )
       int1: maximum number of text rows to display in a single
       show command.
       See also: currenteotchar, currentlink, currentmaxrows,
       currenttextcolors, currenttextwrap, currenttitle,
       formattext, getlink, getlinks, gettextrows, serialgetbaud,
       serialputc, seteotchar, setlink, setstartrow,
       settextcolors, settextwrap, show, strsize
     * setmode - set video mode
       ( int1 -- bool1 )
       int1: VESA or VGA mode number
       bool1: true = mode is set, false = failed
       Note: if video mode setting fails, the old mode is
       restored, but the screen contents is undefined.
       See also: colorbits, currentmode, monitorsize, screen.size,
       sysinfo, videomodeinfo, videomodes, vscreen.size
     * setpalette - set palette entry
       ( int1 int2 -- )
       int1: palette index
       int2: RGB value
       See also: currentcolor, currentpoint, currenttransparency,
       fillrect, getpalette, getpixel, lineto, moveto, putpixel,
       rmoveto, setcolor, settransparency, show
       Example 79.
  /red 11 0xff0000 def            % color 11 = red
  /yellow 12 0xffff00 def         % color 12 = yellow

     * setstartrow - set start row
       ( int1 -- )
       int1: start row for next show command.
       Note: if a start row > 0 is set, the argument to show is
       irrelevant. Instead the internal data built during the last
       formattext is used.
       See also: currenteotchar, currentlink, currentmaxrows,
       currenttextcolors, currenttextwrap, currenttitle,
       formattext, getlink, getlinks, gettextrows, serialgetbaud,
       serialputc, seteotchar, setlink, setmaxrows, settextcolors,
       settextwrap, show, strsize
     * settextcolors - - set text markup colors
       ( int1 int2 int3 int4 -- )
       int1: normal color
       int2: highlight color
       int3: link color
       int4: selected link color
       Note: int1 can be changed using setcolor, too.
       See also: currenteotchar, currentlink, currentmaxrows,
       currenttextcolors, currenttextwrap, currenttitle,
       formattext, getlink, getlinks, gettextrows, serialgetbaud,
       serialputc, seteotchar, setlink, setmaxrows, setstartrow,
       settextwrap, show, strsize
     * settextmodecolor - set color to be used in text mode
       ( int1 -- )
       int1: text mode color
       Note: You only need this in case you're running in text
       mode (practically never).
     * settextwrap - set text wrap column
       ( int1 -- )
       int1: text wrap column; set to 0 to turn text wrapping off.
       See also: currenteotchar, currentlink, currentmaxrows,
       currenttextcolors, currenttextwrap, currenttitle,
       formattext, getlink, getlinks, gettextrows, serialgetbaud,
       serialputc, seteotchar, setlink, setmaxrows, setstartrow,
       settextcolors, show, strsize
     * settransparency - set transparency
       ( int1 -- )
       int1: transparency for fillrect operations; valid values
       are 0 - 256.
       See also: currentcolor, currentpoint, currenttransparency,
       fillrect, getpalette, getpixel, lineto, moveto, putpixel,
       rmoveto, setcolor, setpalette, show
     * settransparentcolor - set color used for transparency
       ( int1 -- )
       When doing an image operation, pixels with this color are
       not copied. Something like an alpha channel, actually.
       Works only with PCX images. Not at all related to
       settransparency
       See also: blend, currentimage, image, image.colors,
       image.size, loadpalette, restorescreen, savescreen,
       setimage, unpackimage
     * settype - set object type
       ( obj1 int1 -- obj2 )
       obj2: obj1 with type changed to int1.
       See also: gettype
       Example 80.
                                                  % PS-like 'string' fun
ction
  /string { 1 add malloc 4 settype } def          % 4 = string type
  10 string                                       % new empty string of
length 10

     * shl - shift left
       ( int1 int2 -- int3 )
       int3: int1 << int2
       See also: abs, add, and, div, max, min, mod, mul, neg, not,
       or, shr, sub, xor
       Example 81.
  5 2 shl         % 20

     * show - print text
       ( str1 -- )
       Print str1 in current color using current font.
       See also: currentcolor, currenteotchar, currentlink,
       currentmaxrows, currentpoint, currenttextcolors,
       currenttextwrap, currenttitle, currenttransparency,
       fillrect, formattext, getlink, getlinks, getpalette,
       getpixel, gettextrows, lineto, moveto, putpixel, rmoveto,
       serialgetbaud, serialputc, setcolor, seteotchar, setlink,
       setmaxrows, setpalette, setstartrow, settextcolors,
       settextwrap, settransparency, strsize
       Example 82.
  "Hello world!" show     % print "Hello world!"

     * shr - shift right
       ( int1 int2 -- int3 )
       int3: int1 >> int2
       See also: abs, add, and, div, max, min, mod, mul, neg, not,
       or, shl, sub, xor
       Example 83.
  15 2 shr        % 3

     * snprintf - C-style snprintf
       ( obj1 ... objN str1 int1 ptr1 -- )
       ptr1: buffer
       int1: buffer size
       str1: format string
       obj1 ... objN: printf arguments
       Note: reversed argument order!
       See also: ], array, chdir, dumpmem, filesize, findfile,
       free, getcwd, length, malloc, memcpy, memsize, realloc
       Example 84.
  /sprintf {
  dup 12 settype length exch snprintf                     % 12 = pointer
 type
  } def

  /buf 100 string def
  "bar" "foo" 3 "%d %s %s" buf sprintf
  buf show                                                % print "3 foo
 bar"

     * sound.done - turn off sound subsystem
       ( -- )
       See also: mod.load, mod.play, mod.playsample,
       sound.getsamplerate, sound.getvolume, sound.play,
       sound.setsamplerate, sound.setvolume, wav.play,
       wav.playlater
     * sound.getsamplerate - current sample rate
       ( -- int1 )
       int1: sample rate
       See also: mod.load, mod.play, mod.playsample, sound.done,
       sound.getvolume, sound.play, sound.setsamplerate,
       sound.setvolume, wav.play, wav.playlater
     * sound.getvolume - current sound volume
       ( -- int1 )
       int1: volume (0 .. 100)
       See also: mod.load, mod.play, mod.playsample, sound.done,
       sound.getsamplerate, sound.play, sound.setsamplerate,
       sound.setvolume, wav.play, wav.playlater
     * sound.play - play sound
       ( -- )
       Note: obsolete. Sounds are played using the PC speaker.
       See also: mod.load, mod.play, mod.playsample, sound.done,
       sound.getsamplerate, sound.getvolume, sound.setsamplerate,
       sound.setvolume, wav.play, wav.playlater
     * sound.setsamplerate - set sample rate
       ( int1 -- )
       int1: sample rate
       See also: mod.load, mod.play, mod.playsample, sound.done,
       sound.getsamplerate, sound.getvolume, sound.play,
       sound.setvolume, wav.play, wav.playlater
     * sound.setvolume - set sound volume
       ( int1 -- )
       int1: volume (0 .. 100)
       See also: mod.load, mod.play, mod.playsample, sound.done,
       sound.getsamplerate, sound.getvolume, sound.play,
       sound.setsamplerate, wav.play, wav.playlater
     * strsize - text dimensions
       ( str1 -- int1 int2 )
       int1, int2: width, height of str1.
       See also: currenteotchar, currentlink, currentmaxrows,
       currenttextcolors, currenttextwrap, currenttitle,
       formattext, getlink, getlinks, gettextrows, serialgetbaud,
       serialputc, seteotchar, setlink, setmaxrows, setstartrow,
       settextcolors, settextwrap, show
       Example 85.
  "Hi there!"
  dup strsize pop neg 0 rmoveto show      % print "Hi there!" right alig
ned

     * strstr - find string in string
       ( str1 str2 -- int1 )
       Search for str2 in str1.
       int1: offset of str2 in str1 + 1 if found; otherwise 0.
       Note: a bit strange, I know.
       Example 86.
  "abcd" "c" strstr       % 3 (not 2)

     * sub - subtraction
       ( int1 int2 -- int3 )
       ( string1 int4 -- string2 )
       ( ptr1 int5 -- ptr2 )
       ( string3 string4 -- int6 )
       ( ptr2 ptr3 -- int7 )
       int3: int1 - int2
       string2: substring of string1 at offset -int4
       int6: string3 - string4
       int7: ptr2 - ptr3
       Note: Strings are treated as byte sequences, not Unicode
       chars. Boundaries of string1 and ptr1 are not checked.
       See also: abs, add, and, div, max, min, mod, mul, neg, not,
       or, shl, shr, xor
       Example 87.
  3 1 sub         % 2

  "abcd" 3 add    % "d"
  2 sub           % "bcd"

     * sysconfig - get pointer to boot loader config data
       ( -- ptr1 )
       ptr1: boot loader config data (32 bytes)
       See also: 64bit, _readsector, date, eject, getbyte,
       getdword, getkey, getword, idle, inbyte, keepmode, mount,
       notimeout, outbyte, poweroff, putbyte, putdword, putword,
       realpath, reboot, serial.init, serialsetconfig, systempath,
       test1, time, usleep
     * sysinfo - return system info
       ( int1 -- obj1 )
       int1: info type
       obj1: info (or .undef)
       See also: colorbits, currentmode, monitorsize, screen.size,
       setmode, videomodeinfo, videomodes, vscreen.size
       Example 88.
  0 sysinfo       % video mem size in kb
  1 sysinfo       % gfx card oem string
  2 sysinfo       % gfx card vendor string
  3 sysinfo       % gfx card product string
  4 sysinfo       % gfx card revision string

     * systempath - convert path to path relative to system
       working directory
       ( str1 -- str2 )
       str1: path
       str2: system path
       Note: str2 points to a static buffer.
       See also: 64bit, _readsector, date, eject, getbyte,
       getdword, getkey, getword, idle, inbyte, keepmode, mount,
       notimeout, outbyte, poweroff, putbyte, putdword, putword,
       realpath, reboot, serial.init, serialsetconfig, sysconfig,
       test1, time, usleep
       Example 89.
  "foo/bar" systempath

     * test1 - for internal testing
       ( ptr1 -- )
       ptr1: some value with obscure meaning
       See also: 64bit, _readsector, date, eject, getbyte,
       getdword, getkey, getword, idle, inbyte, keepmode, mount,
       notimeout, outbyte, poweroff, putbyte, putdword, putword,
       realpath, reboot, serial.init, serialsetconfig, sysconfig,
       systempath, time, usleep
       Example 90.
  0x123 test1

     * time - get current time
       ( -- int1 )
       int1: time in seconds since midnight.
       See also: 64bit, _readsector, date, eject, getbyte,
       getdword, getkey, getword, idle, inbyte, keepmode, mount,
       notimeout, outbyte, poweroff, putbyte, putdword, putword,
       realpath, reboot, serial.init, serialsetconfig, sysconfig,
       systempath, test1, usleep
     * trace - single step
       ( -- )
       Enter single step mode. Waits for a keypress after every
       instruction. Tab sets a temporary breakpoint after the
       current instruction and continues until it reaches it.
       Leave this mode by pressing Esc.
       See also: dtrace
     * unpackimage - unpack image region into buffer
       ( int1 int2 int3 int4 -- ptr1 )
       int1, int2: x, y position in image
       int3, int4: width, height of image region
       ptr1: buffer with image data; use free to free the buffer
       See also: blend, currentimage, image, image.colors,
       image.size, loadpalette, restorescreen, savescreen,
       setimage, settransparentcolor
       Example 91.
  "xxx.jpg" findfile setimage     % load and activate "xxx.jpg"
  0 0 10 10 unpackimage           % unpack upper left 10x10 region
  /img exch def                   % img = buffer

  0 10 100 {
  0 exch moveto
  img restorescreen
  } for                           % repeat image section horizontally 10
 times

  img free                        % free it

     * usleep - sleep micro seconds
       ( int1 -- )
       int1: micro seconds to sleep.
       Note: the actual granularity is 18Hz, so don't make up too
       sophisticated timings.
       See also: 64bit, _readsector, date, eject, getbyte,
       getdword, getkey, getword, idle, inbyte, keepmode, mount,
       notimeout, outbyte, poweroff, putbyte, putdword, putword,
       realpath, reboot, serial.init, serialsetconfig, sysconfig,
       systempath, test1, time
     * videomodeinfo - return video mode info
       ( int1 -- int2 int3 int4 int5 )
       int1: mode index int2, int3: width, height
       int4: color bits
       int5: mode number (bit 14: framebuffer mode) or .undef
       See also: colorbits, currentmode, monitorsize, screen.size,
       setmode, sysinfo, videomodes, vscreen.size
       Example 92.
  2 videomodeinfo

     * videomodes - video mode list length
       ( -- int1 )
       int1: video mode list length (always >= 1)
       See also: colorbits, currentmode, monitorsize, screen.size,
       setmode, sysinfo, videomodeinfo, vscreen.size
     * vscreen.size - virtual screen size
       ( -- int1 int2 )
       int1, int2: virtual width and height
       You normally can expect the virtual height to be larger
       than the visible height returned by screen.size That area
       is available e.g. for hidden drawing. Some kind of
       scrolling is not implemented, however.
       See also: colorbits, currentmode, monitorsize, screen.size,
       setmode, sysinfo, videomodeinfo, videomodes
     * wav.play - play wav file
       ( ptr1 -- )
       ptr1: wav file
       See also: mod.load, mod.play, mod.playsample, sound.done,
       sound.getsamplerate, sound.getvolume, sound.play,
       sound.setsamplerate, sound.setvolume, wav.playlater
     * wav.playlater - play wav file after current one
       ( ptr1 -- )
       ptr1: wav file
       See also: mod.load, mod.play, mod.playsample, sound.done,
       sound.getsamplerate, sound.getvolume, sound.play,
       sound.setsamplerate, sound.setvolume, wav.play
     * xor - logical or arithmetical exclusive 'or'
       ( int1 int2 -- int3 )
       ( bool1 bool2 -- bool3 )
       int3: int1 ^ int2
       bool3: bool ^^ bool2
       Note: Mixing boolean and integer argument types is
       possible, in this case integers are converted to boolean
       first.
       See also: abs, add, and, div, max, min, mod, mul, neg, not,
       or, shl, shr, sub
       Example 93.
  true false xor          % true

  3 6 xor                 % 5

  10 true xor             % gives false, but please avoid this