home *** CD-ROM | disk | FTP | other *** search
/ The C Users' Group Library 1994 August / wc-cdrom-cusersgrouplibrary-1994-08.iso / vol_100 / 110_01 / yamdoc.fin < prev    next >
Text File  |  1984-03-03  |  25KB  |  661 lines

  1.  
  2.  
  3.  
  4.                     YAM (Yet Another Modem program)
  5.  
  6.                            by Chuck Forsberg
  7.  
  8.                          Manual Revised 9-6-81
  9.  
  10.  YAM  performs  a  number  of  "Super-Terminal"  functions.  It may be
  11.  regarded  as  a  (not  proper)  superset  of  MODEM7.   Commands  and
  12.  subcommands are listed below. 
  13.  
  14.  XYAM is a version of yam which corresponds to XMODEM.
  15.  
  16.  
  17.  
  18.                                 Glossary
  19.  
  20.  )
  21.  
  22.  FUNCTION         An operation supported by yam, such as DIR, TYPE, S,
  23.                   R, or T(term). A command may set or reset a MODE, or
  24.                   perform 0 or more FUNCTIONS.
  25.  
  26.  MODE             Many modes  affect the way the term function handles
  27.                   data. 
  28.  
  29.  OPTION           Option(s) apply to the S and R commands only. 
  30.  
  31.  
  32.  
  33.                                 Commands
  34.  
  35.  
  36.  
  37.  a:               Change to a: disk (or b, etc.) 
  38.  
  39.  a1: Change to a: disk user 1
  40.  
  41.  bm               Set baudrate to m.  Example: "b19200"
  42.  
  43.  bye              Drop any call in progress and prepare to make/answer
  44.                   another. 
  45.  
  46.  call name        Enable Data  Terminal  Ready (DTR), and set baudrate
  47.                   to the value (if present) corresponding to name.  If
  48.                   autodial is supported,  dial  the telephone number. 
  49.                   If autodial is not supported, the  telephone  number
  50.                   is displayed.  It  is  not  necessary  to  type  the
  51.                   entire name as it appears  in  the  file.   Example:
  52.                   "call tcbbs" or "call tc"
  53.  
  54.  close            Dump cpature buffer if a recrive file is open, close
  55.                   files. 
  56.  
  57.  dir  [pattern  ...] Display pathnames matching  pattern  alphabetized
  58.                   across  the page.  The usual ambiguous filenames are
  59.                   allowed  under  CP/M provided a correct  version  of
  60.                   setfcb()  is  used.  Since dir or any other commands
  61.                   which accept a pattern use the circular  buffer  for
  62.                   filename  expansion,   be  sure  to  write  out  any
  63.  
  64.                                  - 1 -
  65.  
  66.  
  67.  
  68.  
  69.                   captured  data first!  Example: "dir" "dir *.c" "dir
  70.                   *.c *.h"
  71.  
  72.  dirr [pattern ...]
  73.                   Displays the directory with the number of sectors in
  74.                   each file.  The  number  of files matched, number of
  75.                   blocks,  number  of kb allocated to those files, and
  76.                   estimated transmission time at the  current baudrate
  77.                   for  all files listed are  displayed.   Transmission
  78.                   time estimate is  based on batch transmission from a
  79.                   Z89 with 700kb Tandon drives to a Cromenco 4mHz 4fdc
  80.                   system with Persci 277  drive.   Time  includes file
  81.                   i/o but not error correction. 
  82.  
  83.  d{mode}           Disable  mode(s)  affecting  file  transmission  or
  84.                   reception with  the  term function.  (The "s" and"r"
  85.                   commands always send data transparently.) 
  86.  
  87.  e{mode}                Disable       mode(s)      affecting      file
  88.                   transmission/reception with the term function.  (The
  89.                   "s"     and"r"    commands    always    send    data
  90.                   transparently.) 
  91.  
  92.  f[mode] name     Send file 'name' in the term function.  The optional
  93.                   mode  enables  one or modes.  If squelch is enabled,
  94.                   preface  with  ^R  and  append  with  ^T.  See  also
  95.                   type/list command. 
  96.  
  97.  help             Displays a command summary.  This command closes any
  98.                   open send file. 
  99.  
  100.  initialize       Initializes yam to all its default values.  Does not
  101.                   reset the disk system (see "reset").
  102.  
  103.  kill             Kill all  data  in the capture buffer.  Restores the
  104.                   pointers to their initial positions. 
  105.  
  106.  list pattern [...]
  107.                   Display  the  files   specified   by   the  possibly
  108.                   ambiguous pattern(s).  This command closes  any open
  109.                   send file.  List  stops/resumes  printing  with  ^S.
  110.                   Typing ^C cancels, and any other character  skips to
  111.                   the next file. 
  112.  
  113.  mn               Change modem data port  to  (decimal)  n.   Example:
  114.                   "m224"
  115.  
  116.  o                Disable the modem by turning off DTR.
  117.  
  118.  off              Disable modem and return to operating system. 
  119.  
  120.  pxm              Set Parameter x to value m. 
  121.  
  122.  reset [size]     Dump  the  capture  buffer (if on), close all files,
  123.                   and  reset the disk  system  (this  allows  swapping
  124.                   diskettes).  The optional argument size  becomes the
  125.                   size of  the  circular  capture  buffer,  useful for
  126.                   debugging. 
  127.  
  128.  replot [m]       Redisplay the last m lines received from the modem. 
  129.  
  130.                                  - 2 -
  131.  
  132.  
  133.  
  134.  
  135.                   If  m  is 0 or absent, redisplay starting  with  the
  136.                   earliest data.  A screenful is displayed at a time. 
  137.                   The commands accepted  in  replot  mode  are  listed
  138.                   below. 
  139.  
  140.  rewind           Rewind the buffer pointers for the display, printer,
  141.                   and file dump from the term function.  The effect of
  142.                   this command is  the  same  as  if the data had been
  143.                   sent another time. 
  144.  
  145.  r[options] [file ...]
  146.                   Receive with options 1 or more files using the Wayne
  147.                   Christensen  protocol.   If  no  filename  is given,
  148.                   batch  mode  is  assumed.   (Note: batch mode is not
  149.                   compatible with MODEM7.)  If  more than one filename
  150.                   is  given,  a single file transfer will be made  for
  151.                   each. 
  152.  
  153.  s                Displays status information. 
  154.  
  155.  s[options] pattern ...
  156.                   If batch mode  is  specified with the b option, 0 or
  157.                   more  files  are  sent  according to  the  ambiguous
  158.                   pathname(s).   If  batch  mode is not specified, the
  159.                   named  unambiguous file(s) are sent each  in  single
  160.                   file mode. 
  161.  
  162.  type afn ...     Type files.   XYAM  prefaces  each  file with ^R and
  163.                   suffixes it with ^T.
  164.  
  165.  t[c][mode] [file]The term function with optional  capture  to  file. 
  166.                   The c (close)  option  causes  data  in  the capture
  167.                   buffer to be written and closed immeadiately.   0 or
  168.                   more modes may be enabled.   View  mode  causes  the
  169.                   term  function  to  display  control  characters  by
  170.                   prefixing ^  to the corresponding letter.  A receive
  171.                   file previously opened  by  't  file'  will  not  be
  172.                   closed  by  't'.  While  in the term  function,  the
  173.                   keyboarded characters are transmitted except for
  174.  
  175.                     1.   ^E Exits from the term function back to  main
  176.                         command   level.   Rapidly  typing  ^E^E  will
  177.                         instead cause one ^E to be transmitted. 
  178.  
  179.                     2.   ^Q  Iff  a  send  file  is   open   and   its
  180.                         transmission  has  been  stopped  by  a  XOFF,
  181.                         transmission is resumed.  Otherwise no special
  182.                         treatment. 
  183.  
  184.                     3.   ^S  Iff  a send file is open and it is  being
  185.                         transmitted,   transmission    is    stopped. 
  186.                         Otherwise no special treatment. 
  187.  
  188.                     4.  ^V Replots the last 24 lines, then awaits next
  189.                         command in replot.   ^V^V  typed quickly sends
  190.                         one instead. 
  191.  
  192.                   The following received  characters are recognized in
  193.                   the term function, when they  are  fetched  from the
  194.                   circular buffer for the display. 
  195.  
  196.                                  - 3 -
  197.  
  198.  
  199.  
  200.  
  201.  
  202.                     1.  XOFF Stops file transmission from yam. 
  203.  
  204.                     2.  XON Resumes file transmission. 
  205.  
  206.                     3.   TAB  Tab  characters   are  expanded  on  the
  207.                         display. 
  208.  
  209.  wrt              Write dumps the circular buffer to the receive file,
  210.                   if open. 
  211.  
  212.  ;                Semicolon is an optional command delimiter which may
  213.                   be used  in  place  or  RETURN  in  order  to  place
  214.                   multiple commands on a line.  Since commands such as
  215.                   "t"  have an  indefinite  number  of  operands,  the
  216.                   semicolon must be used to string commands together. 
  217.                   Example: "sb *.c;off" batch transmits all *.c files,
  218.                   then   disconnects.    Unfortunately,   CP/M's   CCP
  219.                   clobbers  ;  and  everyting past it in  the  command
  220.                   line, so use backslash instead. 
  221.  
  222.  backslash        An alternate to ; for CP/M systems. 
  223.  
  224.  
  225.  
  226.                  Modes used with D, E, T or F commands
  227.  
  228.  e                 Echo  characters received from  the  modem  to  the
  229.                   modem.   Use this  only  for  keyboard  to  keyboard
  230.                   communication,  and  then  only  at  one end.  Reset
  231.                   after each command.  Does not imply "Half Duplex".
  232.  
  233.  f                Full duplex. 
  234.  
  235.  h                Half Duplex. Displays keyboarded  characters as they
  236.                   are sent to the modem. 
  237.  
  238.  g                Resumes (GO) sending file once in the term function,
  239.                   equivalent to XON. Disabling GO causes a file queued
  240.                   for transmission to wait for an XON character. 
  241.  
  242.  i                 Image  transparent data capture, all 8 bits of  all
  243.                   characters received, including NULLS. This overrides
  244.                   the t and/or z modes. 
  245.  
  246.  l                 List  unit  (Printer) on.   Since  the  printer  is
  247.                   separately  buffered, it needn't be as fast  as  the
  248.                   incoming  data  as  long as the  difference  doesn't
  249.                   exceed the buffer  size.   The rewind command may be
  250.                   used to get extra copies of the received data. 
  251.  
  252.  n                 Send NEWLINE (lf) only when transmitting  file  (no
  253.                   CR).
  254.  
  255.  p                Send CR only at end  of  line,  and then pause until
  256.                   echoes from remote have stopped.  Useful for sending
  257.                   files to bulletin boards where the remote needs time
  258.                   to prepare for the next text line. 
  259.  
  260.  r                Send CR only at the end of each transmitted line. 
  261.  
  262.                                  - 4 -
  263.  
  264.  
  265.  
  266.  
  267.  
  268.  s                Squelch captured data with ^T and unsquelch with ^R.
  269.                   These characters are not copied  to  the file.  This
  270.                   mode must be set/reset as desired BEFORE opening the
  271.                   receive file. 
  272.  
  273.  t                 If Waitnum is more than 1, wait for echoes to  stop
  274.                   after  sending  each  Waitnum  characters for period
  275.                   Pause.  If  Waitnum==1, send at 1/Throttle, measured
  276.                   in loops of the term() function.  The default values
  277.                   of  Waitnum and  Throttle  provide  transmission  at
  278.                   about 50 words per minute regardless of  baud rate. 
  279.                   Many  'BYE'  programs  cannot accept input  at  full
  280.                   speed. 
  281.  
  282.  v                View control characters as ^C. Useful in shutting up
  283.                   the  bloody bell.  View mode is distinct  from  view
  284.                   option. 
  285.  
  286.  w                Wait to receive a newline afrer  sending a CR at the
  287.                   end of a line. 
  288.  
  289.  x                Exit from the term  function when EOF is encountered
  290.                   on transmitted file. 
  291.  
  292.  z                Terminate data capture and  close  file  when  ^Z is
  293.                   received.  Otherwise ^Z  is  ignored.   It should be
  294.                   noted  that  The Source coughs up an  occasional  ^Z
  295.                   just   as   UPI   is  about  to   output   something
  296.                   interesting. 
  297.  
  298.  
  299.  
  300.                    Options used with S or R commands
  301.  
  302.  All options are reset after each command. 
  303.  
  304.  
  305.  
  306.  b                Batch mode.  Pathnames are provided by  the sender. 
  307.                   Disk   names   are  excluded  from  the  transmitted
  308.                   pathname(s), and may not be specified for batch mode
  309.                   reception (use the change directory command). 
  310.  
  311.  q                Quiet mode inhibits some of the status information. 
  312.                   Quiet mode is not necessary for proprer operation at
  313.                   higher baudrates. 
  314.  
  315.  t                Execute the term function after file transfer(s). 
  316.  
  317.  v                View the data being  transmitted.   Correct  data is
  318.                   displayed   once.   Viewing  ascii  files  does  not
  319.                   interfere with correct transmission at  extreme baud
  320.                   rates,  although  throughput  will be affected.  For
  321.                   each   sector,   data   is   viewed    once   before
  322.                   sending/after receiving. 
  323.  
  324.  y                 Yes it is OK to clobber a file already on disk.  If
  325.                   absent,  the  operator  is  promped for  a  y  or  n
  326.                   decision. 
  327.  
  328.                                  - 5 -
  329.  
  330.  
  331.  
  332.  
  333.  
  334.  
  335.  
  336.                      Parameters used with P command
  337.  
  338.  wn                Set  Waitnum  to  n.   See "w" mode  for  details. 
  339.                   Default is 1.
  340.  
  341.  tm               Set Throttle to m.  The default value corresponds to
  342.                   about 80 words per minute sending speed. 
  343.  
  344.  m                Set Pause  to  m.   When  the free characters in the
  345.                   circular buffer reach 400, an XOFF is  sent.   Pause
  346.                   controls  the  time  which  must then  pass  without
  347.                   characters received before believing that  the other
  348.                   end really has obeyed the XOFF character, as opposed
  349.                   to the sometimes  lengthy  Compuserve hitches in the
  350.                   getalong.   If  Pause is too short, it  is  possible
  351.                   that  a  lurch  in  output  will  be  interpreted as
  352.                   acknowledgement  of  the  XOFF,  only to  have  more
  353.                   characters arrive whilst yam is occupied dumping the
  354.                   buffer  to  disk.   When this  happens,  unfortunate
  355.                   characters are routed to  the proverbial bit bucket,
  356.                   and  you can retry the download as  the  timesharing
  357.                   service increments the connect charge.   The default
  358.                   value  seems suitable for Source over Tymnet and BBS
  359.                   systems.   Pause  is  also the echo wait period used
  360.                   with  the  "p" mode.  Some bulletin  board  programs
  361.                   require a longer pause when accepting files with the
  362.                   "p" mode. 
  363.  
  364.  
  365.  
  366.                             Replot Commands
  367.  
  368.  Commands  within  replot consist of a single character.  Replot  maps
  369.  uppercase, lowercase, and  control  characters  together  in decoding
  370.  commands. 
  371.  
  372.  v                backspace
  373.                   Previous page (some overlap provided)
  374.  
  375.  space            Next page
  376.  
  377.  p                Backup one line and redisplay
  378.  
  379.  n                LF
  380.                   Advance one line
  381.  
  382.  OTHERWISE        Return to previous funccion
  383.  
  384.  
  385.  
  386.                            Sample YAM Session
  387.  
  388.  A sample session might be:
  389.  
  390.  A0>yam b19200 cd b (set 19kb, change to b disk)
  391.  
  392.  dirr yam?.?  yamhlp.mss (list files and calculate xmsn time)
  393.  
  394.                                  - 6 -
  395.  
  396.  
  397.  
  398.  
  399.  
  400.  sb yam?.?  yamhlp.mss (send them to a local system)
  401.  
  402.  call hydepark (Can't remember the phone number!) 
  403.  
  404.  t  (go  to  the term function, log in, run minicbbs, begin entering a
  405.  message)
  406.  
  407.  .......
  408.  
  409.  ^E
  410.  
  411.  ftp letter (enable prompt and throttle modes, open letter and send to
  412.  bbs)
  413.  
  414.  ^E
  415.  
  416.  off
  417.  
  418.  Notes
  419.  
  420.    -  The transmission  of  pathnames  in batch mode differs from that
  421.       used  in MODEM7. Yam sends the pathname  as  a  null  terminated
  422.       string in a standard Wayne Christensen type packet with sector a
  423.       number  of 0. Disk specifiers (B:) are  not  sent.   The  sender
  424.       waits for an  initial  NAK  before  sending  the  pathname.   An
  425.       explicit NAK is sent by  the receiver at intervals when is ready
  426.       to  receive  a  pathname.   Upon receiving and acknowledging the
  427.       pathname packet, the receiver opens  the file and then sends the
  428.       initial  NAK  for  the  data  in  the  file.   A  null  pathname
  429.       terminates batch transmission. 
  430.  
  431.    -  File transmission is  compatible  with  MODEM7  in  single  file
  432.       mode.  File transmission may be aborted by sending a sequence of
  433.       CAN  (^X)  characters.  Each  character  keyboarded  will  cause
  434.       readline()  to  return  a TIMEOUT error, thus regaining keyboard
  435.       control relatively easily. 
  436.  
  437.    -  I routinely send files at 19200 baud between a Z89 (2 mHz) and a
  438.       Cromenco 4mHz system.  Reception in  the  term function seems to
  439.       works well at 9600 baud on a Z89 provided  the  printer is off. 
  440.       If you use  bios  calls for terminal i/o (e.g., TRS-80 version),
  441.       the  maximum speed may be less in the term function.  Quiet mode
  442.       is not necessary for proper  operation at 19kb, although it does
  443.       increase  thruput slightly.  View option (S and R commands) does
  444.       not decrease maximum baud rate, although throughput is obviously
  445.       affected   according   to  the  ratio  of  terminal   speed   to
  446.       communications rate. 
  447.  
  448.    -   Printer  operation  with  bios calls or view mode substantially
  449.       reduces  the  highest  baudrate  possible with the term function
  450.       without  losing  characters  (independent  of   actual   printer
  451.       speed).   The  term  function  will  send XOFF to prevent buffer
  452.       overflow if the printer is on, or if a receive file is created. 
  453.       Term function on a Cromenco  with  a 300 baud printer works fine
  454.       at 2400 baud. 
  455.  
  456.    -  Baudrate selection routines are provided for the  Cromenco TUART
  457.       and Z89 serial board (8250's).
  458.  
  459.  
  460.                                  - 7 -
  461.  
  462.  
  463.  
  464.  
  465.    -  In the term function, use of  the  circular buffer provides some
  466.       advantages. 
  467.  
  468.         1.  Incoming data  may  come  in  at  a  rate  higher than the
  469.             display  and/or  printer.  Tab expansion for  the  display
  470.             does not compromise this ability. 
  471.  
  472.         2.  The user  may  decide to save a timesharing session on the
  473.             disk  AFTER  it has started (or possibly even finished) as
  474.             long as the buffer pointers have not wrapped around. 
  475.  
  476.         3.  The same ability also applies to the printer.  The printer
  477.             need not be as fast as the modem as long as  the  Tortoise
  478.             is allowed to catch up. 
  479.  
  480.         4.   Received data may be redisplayed (rep command).  A future
  481.             version might allow scrolling and/or string searching. 
  482.  
  483.       At high speeds, the display will fall behind the  incoming data,
  484.       as  storing  of  raw modem data into the buffer takes precedence
  485.       over  all  else.   As  a  result,  a  defective  or  incorrectly
  486.       programmed modem port  which  sources  data  at  high  speed can
  487.       lockout the keyboard.  If yam "goes away" when entering the term
  488.       function, this may be the cause. 
  489.  
  490.    -  If insufficient stack space is provided above  the  end  of  the
  491.       circular buffer, yam may sulk  when  attempting to exit from the
  492.       term function. 
  493.  
  494.    -  The enable  t  and  z  modes affecting data capture are executed
  495.       when the circular buffer is  written to the receive file, not as
  496.       the characters are first received from the data port. 
  497.  
  498.  
  499.  
  500.                              Installing Yam
  501.  
  502.  Yam  consists  of  yam.h,  yamsys.h, and yam[12357].c.  Yam currently
  503.  supports the Z89 (with aux board) and  Cromenco  TUART.  Yamz89.h  is
  504.  used for Z89 computers (check the  port  definitions  to be sure they
  505.  agree with your usage.)  Yamtuart.h is setup for a TUART board at 60H
  506.  running under CDOS. Yamz89xm.h describes  the  XMODEM configuration. 
  507.  One of these (Or one you write for your system) should  be  copied to
  508.  yamsys.h before compiling the files.  Compilation should be  with  -e
  509.  5800 for all files and -o for  yam[235]  if operation at extreme baud
  510.  rates is desired. 
  511.  
  512.  I have found yam to be handy for transferring files  between adjacent
  513.  machines; hence all the attention to high speed operation. 
  514.  
  515.  If  your  machine uses a different type of UART chip, or  a  built-in
  516.  modem card, then the yamsys.h and yam5.c files will need work. 
  517.  
  518.  Two  bugs  in  the  BDS  C  compiler   v1.42   have   surfaced.   The
  519.  "preprocessor" sometimes misses #endif lines, depending on  the phase
  520.  of the moon and the number of characters here there an somwehere else
  521.  in the source file.  Usually, adding some  comments before the #endif
  522.  fixes things. 
  523.  
  524.  A subtle bug in code generation (or  perhaps my source program?)  may
  525.  
  526.                                  - 8 -
  527.  
  528.  
  529.  
  530.  
  531.  cause unpredictable results  when  e1xpand is called.  Its appearance
  532.  is also  a  function  of  the phase of the moon and will probabaly go
  533.  away if you put in printf's to try  to  track  it down.  This problem
  534.  affects the type, dir, dirr, and sb commands but not s  ufn command. 
  535.  Hopefully, later versions of the compiler aviod these problems. 
  536.  
  537.  A bug in some versions of ccc.asm causes  wild  cards  such as *.c to
  538.  expand as *.* instead.  If you  have  this problem, use ????????.c or
  539.  get  a version of ccc.asm and matching deff2.crl with the changes  as
  540.  indicated in fixccc.asm. 
  541.  
  542.  Some early versions of  deff.crl  with a defective getc() may need to
  543.  look like this: /* changed NSECTS to nsecs CAF */ iobuf ->  _nleft  =
  544.  (nsecs * SECSIZ - 1); That change is much  easier  to get right; just
  545.  recompile stdlib1.c and use clib.  Later versions have this change. 
  546.  
  547.  
  548.  
  549.                          Interesting #define's
  550.  
  551.  TERMRESET        A  string enclosed in quotes which sets the terminal
  552.                   to  the mode  desireable  for  the  term  function. 
  553.                   TERMRESET  as   defined   for   the   Z19  turns  on
  554.                   wraparound. 
  555.  
  556.  STATLINE          Define  this  if  your terminal has an extra (viz.,
  557.                   25th) line usable for  status information which does
  558.                   not  scroll  up   nor   interfere  with  scrolling. 
  559.                   lpstat() writes  to the entire status line, clearing
  560.                   out any previous contents.  pstat() writes statrting
  561.                   at the 48th position, not disturbing any information
  562.                   written by lpstat(). 
  563.  
  564.  MODEMSTUFF        If  you  provide  routines  setbaud(),  readbaud(),
  565.                   bye(),  and onhook(), define MODEMSTUFF  to  exclude
  566.                   the default dummy routines. 
  567.  
  568.  AUTODIAL          If  your  modem supports autodial, write  your  own
  569.                   version of dial() and define  AUTODIAL  to  suppress
  570.                   the default routine. 
  571.  
  572.  Z19               Generates  output  for  Z19  functions,  especially
  573.                   status (25th) line. 
  574.  
  575.  
  576.  
  577.                             XYAM Differences
  578.  
  579.  XYAM is produced  by  defining XMODEM in the file 'yamsys.h'. Consult
  580.  'yamz89xm.h' and 'yamx.sub' for an  example.   Ceratin  #defines  are
  581.  especially applicable to XYAM:
  582.  
  583.  LOGFILE          All files sent (includes  type  or list commands) or
  584.                   received (r  or  t file) are stored with the current
  585.                   baudrate in LOGFILE.
  586.  
  587.  RESTRICTED       Certain commands and  options  are  disabled.  Files
  588.                   with '.BAD' extensions and files with TAG2  will not
  589.                   be opened.  A file with extension of '.COM' will  be
  590.                   uploaded with a  '.OBJ' extension.  Exisiting filles
  591.  
  592.                                  - 9 -
  593.  
  594.  
  595.  
  596.  
  597.                   cannot be overwritten. 
  598.  
  599.  CDO              Define  a test for carrier drop out so that XYAM can
  600.                   exit when the connection is broken. 
  601.  
  602.  
  603.  
  604.  
  605.  
  606.  
  607.  
  608.  
  609.  
  610.  
  611.  
  612.  
  613.  
  614.  
  615.  
  616.  
  617.  
  618.  
  619.  
  620.  
  621.  
  622.  
  623.  
  624.  
  625.  
  626.  
  627.  
  628.  
  629.  
  630.  
  631.  
  632.  
  633.  
  634.  
  635.  
  636.  
  637.  
  638.  
  639.  
  640.  
  641.  
  642.  
  643.  
  644.  
  645.  
  646.  
  647.  
  648.  
  649.  
  650.  
  651.  
  652.  
  653.  
  654.  
  655.  
  656.  
  657.  
  658.                                  - 10 -
  659.  
  660.  
  661. ced  by  defining XMODE