xzip(1)

xzip(1)

xtrojka Home Page Games Index


Name
       xzip - X Interface to the Z-code Interpreter

Syntax
       xzip [ options ...  ] gamefile

       The  list  of  options  is  described  below. The gamefile
       should be the filename  of  a  Z-code  file  or  a  PICKLE
       archive containing a Z-code file.

Description
       is  a  clean X Windows interface to games written in Info-
       com's Z-code game format. It  handles  Z-code  versions  1
       through 5, plus the newer version 8.

       The  interface is heavily (well, completely) based on ATK,
       an X toolkit developed at CMU. Really, I would  have  pre-
       ferred  to  actually  do  this  in ATK... except that then
       you'd need ATK to run  it,  and  that's  50  megabytes  of
       source code. (Honest.) So I just did an imitation.

Mouse Commands
       In the text window:

       Left-click to move the dot to the mouse location.
       Click-and-drag to select a large region.
       Right-click to extend the selection to the mouse location.
       Double-clicking selects a word (or extends  the  selection
       one word at a time).

       In the scroll bar:

       Left-click on the arrows to scroll to the top or bottom.
       Right-click on the arrows to scroll up or down one line.
       Click-and-drag  on  the  elevator  will scroll up and down
       smoothly.
       Left-click in the bar (without dragging) will scroll  down
       by an amount controlled by where in the bar you click. The
       farther down the bar, the more it scrolls.  This  is  com-
       puted  so that if you left-click next to a line, that line
       scrolls to the top of the screen.
       Right-click in the bar (without dragging) will  scroll  up
       in  a  similar  manner.  The  top line will scroll down to
       where you clicked.

Key Commands
       The key commands will be familiar to Emacs  users.   meta-
       combinations  can  be used either by holding down the meta
       key (possibly labelled alt or something else) or by press-
       ing escape before the desired key.

       The  commands  listed  below are the defaults. They can be
       customized with  the  bindings  X  resource  (see  below.)
       <none>  indicates a function which by default is not bound

       to any key.

       ctrl-f (forward-char) Move dot forward one character.
       ctrl-b (backward-char) Move dot backward one character.
       meta-f (forward-word) Move dot forward one word.
       meta-b (backward-word) Move dot backward one word.
       ctrl-a (beginning-of-line) Move dot to beginning of  line.
       ctrl-e (end-of-line) Move dot to end of line.

       PageDown, ctrl-v (scroll-down) Scroll down one page.
       PageUp, meta-v (scroll-up) Scroll up one page.

       delete (delete-char) Delete character before the dot.
       ctrl-d  (delete-next-char) Delete character after the dot.
       meta-delete (delete-word) Delete word before the dot.
       meta-d (delete-next-word) Delete word after the dot.

       ctrl-w (kill-region) Cut selection to cut buffer.
       meta-w (copy-region) Copy selection to cut buffer.
       ctrl-y (yank) Copy the cut buffer in at the dot.
       ctrl-k (kill-line) Cut from dot to end of  line  into  the
       cut buffer.
       ctrl-u (kill-input) Cut all text typed so far into the cut
       buffer.

       UpArrow, meta-= (backward-history) Move back one  line  in
       command history buffer.
       DownArrow,  meta-` (forward-history) Move back one line in
       command history buffer.

       meta-0...meta-9 (macro) Insert a macro string at the  dot.
       By  default,  all macros are undefined at startup, but you
       can change this with the bindings option.
       meta-r (define-macro) The next macro key hit will be rede-
       fined to be the selection. If there is no selection, or if
       the next key hit is not a macro  key,  an  error  is  dis-
       played.

       ctrl-l  (redraw-all-windows)  Redraw  text and status win-
       dows.
       <none> (redraw-status) Redraw status window.
       <none> (redraw-screen) Redraw text window.
       meta-z (zoom-status) Expand status window to maximum  size
       (only when the autoresize option is on.)
       meta-s  (shrink-status)  Shrink  status  window to minimum
       size (only when the autoresize option is on.)
       meta-c (clear-status) Clear any extra text below the  sta-
       tus line in the status window.

       Enter, Return (enter) Accept the text that has been typed.
       Escape (escape) Set escape mode;  next  key  hit  will  be
       taken as a meta key.
       ctrl-g  (cancel)  Cancel  escape  mode,  and anything else
       that's going on.

       Help, ctrl-_ (explain-key) Explain the next key hit;  this
       displays  the  function  that the key is bound to, and its
       argument, if any.
       All normal keys (insert-self) Insert whatever key is bound
       to this at the dot.
       <none>  (no-op)  Do nothing. Bind a key to this to disable
       it.

Resources and Options
       All the behavior of is controlled by X resources and  com-
       mand-line options. Any particular behavior can be set with
       either  a  resource  or  an   option;   options   override
       resources.

       Command-line options go on the command line, looking like,
       xzip -option value gamefile
       Note that even binary options like "justify" must be given
       a value, "yes" or "no".

       Resources  are  usually  placed in your .Xdefaults or Xre-
       sources file, depending on your system  setup.  They  have
       the format
       xzip.resourcename: value

       These are the resources and options that you can currently
       set. The default values are in italics.

       geometry: 500x600+100+100
              The geometry of the text window,  in  the  usual  X
              geometry format.

       statgeometry: 80x24+100+50
              The  geometry  of  the status window. Note that the
              size  is  given  in  characters,  not  in   pixels,
              although  the  position  is  still  in pixels. This
              makes it something of a pain to position it in  the
              right or bottom sides of the screen.

       foreground: black
              The color of the text and other window decorations.

       background: white
              The color of the window background.

       greycolor: grey60
              An intermediate color, used for the scroll  bar  on
              color displays.

       justify: yes
              If "yes", full-justify the text in the text window.

       marginx: 4
              Width (in pixels) of the margin  between  the  left
              edge of the text and the scroll bar.

       leading: 3
              Width  (in  pixels)  of  extra space to put between
              lines of text.

       autoresize: yes
              If "yes",  the  status  window  will  automatically
              resize  to be just big enough for the game's status
              line. (But see "Quirks", below.)

       resizeupward: no
              If "no", the status window  will  resize  downward;
              the  top  edge  will  stay in place, and the bottom
              edge will move. If "yes", it will resize upward. At
              the  moment,  this  doesn't  work very well at all.
              (See "Known Bugs", below.)

       autoclear: yes
              If "yes", extraneous text in the status window will
              be cleared after one turn. (See "Quirks", below.)

       history: 20
              The number of commands to store in the command his-
              tory.

       buffer: 4000
              The amount of text (in characters) to keep  in  the
              scrollback  buffer.  If this is made too large, the
              program can become very slow.

       inputstyle: b
              The style to display your typed input in. This  can
              be  n for normal text, or r, b, rb, i, ri, bi, rbi,
              f, rf, bf, rbf, if, rif, bif, rbif to  specify  any
              combination  of  Reverse,  Bold, Italic, and Fixed.
              Note that the letters must be in the  order  shown;
              you cannot use ib to specify italic and bold.

       X-color:  (same as foreground)
              X may be any of n, r, b, rb, i, ri, bi, rbi, f, rf,
              bf, rbf, if, rif, bif, rbif.  This  allows  you  to
              specify  the color of any of the sixteen fonts used
              by For non-reversed fonts, this is the color of the
              text;  for  reversed  fonts, it is the color of the
              field on which the text is displayed. (The text  of
              reversed  fonts is always in the background color.)

       X-font:
              X may be any of n, b, i, bi, f, bf, if, bif.   This
              allows  you  to  specify  the sixteen fonts used by
              (Note that you cannot set the reversed fonts;  they
              always  use  the  same  font  as their non-reversed
              counterparts.)
              The  status  window  always  uses  the  fixed-width
              fonts;  the  text  window  usually (but not always)
              uses proportional fonts.

       bindings: (see above)
              Key bindings to supplement or override the  default
              bindings. The resource should look like
              key=function  [,  argument ]; key=function [, argu-
              ment ] ...
              where key is the name of a key, preceded by  c-  to
              indicate  a  control  key and m- to indicate a meta
              key.  function should be one of the function  names
              listed  in  parentheses  in the "Key Bindings" sec-
              tion.  argument (which is  optional)  should  be  a
              quoted string which will be passed to the function.
              Currently, only the macro function takes  an  argu-
              ment.
              So, for example,
              xzip.bindings:   c-x=kill-input;  m-i=macro,"inven-
              tory"; m-d=no-op
              would mean that ctrl-x will delete all  input,  and
              meta-i will enter the string "inventory", and meta-
              d will do nothing. You can have more than  one  key
              bound  to  a  function,  but  you can only have one
              function bound to a key; later bindings will  over-
              ride earlier ones.

       Ok,  I lied; there's one behavior which is set by an envi-
       ronment variable. If you set INFOCOM_PATH to  a  directory
       or  colon-separated  list  of directories, will look there
       for a story file if it doesn't  find  it  in  the  current
       directory.

Quirks
       As  always,  if you highlight colored text, the result may
       be surprising. Highlighting "normal" text  will  be  fine,
       and  any  other  fonts which are the same color, but other
       colors may highlight in strange ways, and could be hard to
       read.  (This  is  only  a  problem for text which is high-
       lighted because it's selected.  Text  in  a  reverse  font
       looks correct.)

       Certain  games  (notably  and ) display pop-up windows, by
       using the status line in a slightly funky way. They expand
       the  status  line, display some text, and then immediately
       shrink the status line again.
       I have done my best to support this in 's two-window  sys-
       tem.  The  pop-up  window  will be visible from when it is
       created until the first time you  hit  Return.   Then  the
       status window will shrink again. This gives you one "turn"
       to read the pop-up, which should be sufficient.  (In  one-
       window,  non-scrolling  interpreters,  the  pop-up appears
       over your old text,  and  scrolls  away  as  you  continue
       play.)

       If  you turn off the autoclear option, pop-ups will not be
       erased; use meta-z to expand the status  window  and  read
       them  after  the  window shrinks, and meta-c to erase them
       manually. If you do not erase the pop-up, a  later  pop-up
       may partially overwrite it, which looks ugly.
       If  you  turn off the autoshrink option, the status window
       will not shrink, but  the  pop-up  will  still  be  erased
       (unless you have turned off autoclear as well.)

Known Bugs
       The  "resizeupward" preference just plain doesn't work. If
       you use it, the status window will slowly drift  downwards
       as it resizes.
       If  a  timed  input  (such  as uses) expires while you are
       editing a line, the dot jumps to the end of the line.
       If a style change occurs in the middle of a  word,  thinks
       it's okay to break the word there (when wrapping lines.)
       Reverse  text  has  gaps in it in full-justified lines. It
       also has gaps between lines, in the text window.
       The keybindings are ignored while is waiting for a  single
       keystroke  (as  opposed  to  a  line of input.)  ctrl-l is
       hardwired to work, but any other key will  just  be  taken
       literally.
       Scrolling  is  slow and awful on X servers without backing
       store.
       Ignores meta modifier  on  special  keyboard  keys  (Home,
       PageUp, etc)
       Parsing of keys in bindings could be cleverer. It ought to
       understand /123 octal notation at least.
       Ought to have separate font and color prefs for the status
       window.
       Sometimes  makes  you  place a window by hand, even though
       the geometry is specified.

Author
       X interface by Andrew Plotkin erkyrath@netcom.com
       The Z-code engine is taken from ZIP V2.0.7 by Mark  Howell
       howell_ma@movies.enet.dec.com

       You  are  expressly  forbidden  to  use this program on an
       Infocom game data file if, in so doing,  you  violate  the
       copyright  notice supplied with the original Infocom game.
       Parts of this program (the files xinit.c,  xio.c,  xkey.c,
       xmess.c,  xstat.c,  xtext.c)  are  copyrighted  by  Andrew
       Plotkin. These files may  be  distributed,  modified,  and
       used freely, with the exception noted above.
       I  do  not  know  the  exact copyright status of the rest,
       except that it was written by  Mark  Howell  and  thus  is
       probably  copyrighted  by him. He released it for free, so
       to the best of my knowledge, it can also  be  distributed,
       modified, and used freely, with the exception noted above.

xtrojka Home Page Games Index