home *** CD-ROM | disk | FTP | other *** search
/ Resource Library: Graphics / graphics-16000.iso / msdos / animutil / anim13 / animate.doc < prev    next >
Text File  |  1990-05-07  |  50KB  |  931 lines

  1.  
  2.  
  3.  
  4.      ANIMATE.DOC         Tuesday, March 6, 1990 4:10 pm                Page 1
  5.  
  6.  
  7.       
  8.                          Documentation for ANIMATE
  9.       
  10.       
  11.       
  12.      Overview
  13.       
  14.           ANIMATE   creates  and  displays  animated  movies  on  IBM- 
  15.      compatible  personal  computers  by reading  one  or  more  files 
  16.      containing  a  sequence of Tektronix  4010  (Tek4010)  monochrome 
  17.      graphics.   Movies are limited in length only by the capacity  of 
  18.      the  user's  hard  disk.  For the user  who  knows  C,  functions 
  19.      supplied  with  ANIMATE can be embedded into the  user's  own  PC 
  20.      graphics  programs  to  make movies of  whatever  graphics  those 
  21.      programs create.  Those movies can then be viewed with ANIMATE.
  22.       
  23.       
  24.      Table of Contents
  25.       
  26.      Overview, table of contents, and copyright   .    .    .  1
  27.      Hardware requirements    .    .    .    .    .    .    .  2
  28.      Software needed to complement ANIMATE   .    .    .    .  2
  29.      Files which comprise the ANIMATE package.    .    .    .  3
  30.      Glossary  .    .    .    .    .    .    .    .    .    .  4
  31.      Installing ANIMATE  .    .    .    .    .    .    .    .  6
  32.      Using ANIMATE to construct and view a movie  .    .    .  6
  33.      Plotting Tektronix graphics onto a rasterized background  7
  34.      Editing ANIMATE.PAR and "script" files  .    .    .    .  8
  35.      If you have trouble with ANIMATE   .    .    .    .    . 11
  36.      Optimizing ANIMATE's performance   .    .    .    .    . 11
  37.      Comments on ANIMATE's Tektronix emulation    .    .    . 12
  38.      Modifying ANIMATE   .    .    .    .    .    .    .    . 13
  39.      Compiling ANIMATE   .    .    .    .    .    .    .    . 14
  40.      Bugs in Turbo C     .    .    .    .    .    .    .    . 15
  41.      References.    .    .    .    .    .    .    .    .    . 16
  42.      Acknowledgments.    .    .    .    .    .    .    .    . 16
  43.       
  44.       
  45.       
  46.      Copyright 1990 by Jon Ahlquist, Department of Meteorology B-161,
  47.      Florida State University, Tallahassee, Florida 32306-3034, USA.
  48.      Telephone: (904) 644-1558.
  49.      Internet address:
  50.      ahlquist@metsat.met.fsu.edu (ahlquist@128.186.5.2)
  51.       
  52.      This  document and the files listed herein may be  freely  copied 
  53.      without charge, provided copyright notices are left intact.   All 
  54.      software  and documentation is provided "as is" without  warranty 
  55.      of any kind.
  56.       
  57.      Development  of  this material was sponsored by  NSF  grant  ATM-
  58.      8714674.
  59.  
  60.  
  61.  
  62.      ANIMATE.DOC         Tuesday, March 6, 1990 4:10 pm                Page 2
  63.  
  64.  
  65.      Hardware  requirements to run ANIMATE
  66.       
  67.           ANIMATE requires an IBM-compatible PC with a hard disk and a 
  68.      register  level  compatible  EGA,  VGA,  or  monochrome  Hercules 
  69.      graphics  board.  The only way to find out whether your  graphics 
  70.      board  is suitable is to try ANIMATE.  Unfortunately, many  older 
  71.      "clone" graphics boards do not meet all the requirements for true 
  72.      register  level  compatibility.   Video  boards  compatible  with 
  73.      Hercules monochrome graphics at the register level are  available 
  74.      in  the U.S. by mail order for under $100.  More  expensive   but 
  75.      more  powerful  are  boards like the  Everex  EVGA  board,  which 
  76.      supports  Hercules  monochrome, EGA, VGA, and a number  of  other 
  77.      modes.   Such boards require a multi-sync monitor to display  all 
  78.      their modes.
  79.           Only the 640 by 350 pixel, 16 color mode of EGA/VGA graphics 
  80.      and Hercules monochrome graphics are supported by ANIMATE because 
  81.      these  are the only two standard graphics modes used on  IBM  PCs 
  82.      that offer video "double buffering" (see the glossary).
  83.           Since most Tektronix graphs will be generated on a mainframe 
  84.      computer and then transferred to a microcomputer running ANIMATE, 
  85.      an  important  factor is the time it takes to send  the  graphics 
  86.      file(s) from the mainframe to the microcomputer.  For movies that 
  87.      contain  more  than  a  few  frames  of  graphics,  a  9600  baud 
  88.      connection  between  the microcomputer and  mainframe  is  almost 
  89.      essential.   A Local Area Network (LAN) like Ethernet is  helpful 
  90.      in this regard.  A telephone line may be too noisy, unless  error 
  91.      correcting  file  transfer software is used;  but  such  software 
  92.      running with a 1200 baud modem would be very slow.
  93.           If  you know C, you may decide to write some or all of  your 
  94.      graphics  directly in Turbo C and thereby avoid the  transmission 
  95.      time between mainframe and micro.  If so, you can use the program 
  96.      in file "makemovy.c" as an example of how to proceed. 
  97.       
  98.      Software needed to complement ANIMATE
  99.       
  100.           If  you  generate  Tek4010 graphics  using  a  mainframe  or 
  101.      minicomputer, you will need communications software so that  your 
  102.      microcomputer  can "capture" the graphics generated by the  other 
  103.      computer.  This software is not supplied with ANIMATE, but it  is 
  104.      widely  available.  Since Tek4010 graphics commands are  composed 
  105.      of  standard ASCII characters, any communications  software  that 
  106.      can capture an ASCII file will be suitable; the package need  not 
  107.      have  any graphics capabilities at all.  For example, Procomm,  a 
  108.      common, low cost, shareware communications program, can capture a 
  109.      Tek4010  file because it can capture any ASCII file.  A  copy  of 
  110.      the  latest version of Procomm with documentation on disk can  be 
  111.      purchased  for  $35 from Datastorm Technologies, Inc.,  P.O.  Box 
  112.      1471, Columbia, MO 65205.
  113.           Users  of TCP/IP, i.e. Internet, can acquire  public  domain 
  114.      NCSA  Telnet  software  with  documentation on  disk  for  a  $20 
  115.      handling  fee  from:  NCSA  Telnet for  the  PC  --  Orders,  152 
  116.      Computing   Applications  Building,  605  E.  Springfield   Ave., 
  117.      Champaign, IL 61820.  Telnet software does NOT work with a  modem 
  118.      and telephone line; it works only with a TCP/IP network.
  119.  
  120.  
  121.  
  122.      ANIMATE.DOC         Tuesday, March 6, 1990 4:10 pm                Page 3
  123.  
  124.  
  125.      Files which comprise the ANIMATE package
  126.       
  127.      ANIMATE.DOC    This documentation.
  128.      ANIMATE1.C     Source code for function main() of ANIMATE.
  129.      ANIMATE2.C     Source code for auxiliary functions for ANIMATE,
  130.                     including functions to save and display
  131.                     rasterized images.  These functions can be
  132.                     inserted into your own Turbo C programs.
  133.      ANIMATE.PRJ    Project file.
  134.      ANIMATE.EXE    Executable version of ANIMATE.
  135.      ANIMATE.PAR    Parameter file configured for EGA graphics and
  136.                     Tek4010 graphics.
  137.      ANIMATE.HER    Hercules monochrome version of ANIMATE.PAR.
  138.                     If you have a Hercules monochrome graphics board,
  139.                     rename ANIMATE.PAR to ANIMATE.PAE, then
  140.                     rename ANIMATE.HER to ANIMATE.PAR.
  141.      MAP.TEK        Tek4010 plot file containing a short
  142.                     movie consisting of a few world maps from a
  143.                     satellite's perspective.
  144.      MAP.SCR        Script file for showing the example movie
  145.                     with different colors than those specified
  146.                     in ANIMATE.PAR.
  147.      MAKEMOVY.C     Example program showing how a file of
  148.                     rasterized images can be created directly
  149.                     using the graphics in Turbo C.
  150.                     The program also shows the difference
  151.                     between single and double buffering of images.
  152.      MAKEMOVY.PRJ   Project file for MAKEMOVY.C.
  153.      GRAFSUPP.C     Supplemental graphics files used by MAKEMOVY.PRJ.
  154.                     Some or all of the functions in this file may be
  155.                     useful for your own Turbo C graphics programs.
  156.      GRAFSUPP.H     Header file to accompany GRAFSUPP.C.
  157.      GRAFDEMO.C     Demonstration program which calls the routines
  158.                     in GRAFSUPP.C.  Does not make a movie but runs
  159.                     with any graphics mode supported by Turbo C.
  160.      GRAFDEMO.PRJ   Project file for GRAFDEMO.C.
  161.      TESTPIC.C      Program to create a file in Tektronix 4010 format.
  162.       
  163.       
  164.           If  you wish to modify ANIMATE, you must have version  2  or 
  165.      newer  of Borland's Turbo C.  This is available inexpensively  by 
  166.      mail  order or through your local dealer.  Educational  customers 
  167.      can purchase Turbo C at especially attractive prices direct  from 
  168.      Borland;  call Borland's sales office at (408) 439-1064  and  ask 
  169.      for Educational Sales.
  170.  
  171.  
  172.  
  173.      ANIMATE.DOC         Tuesday, March 6, 1990 4:10 pm                Page 4
  174.  
  175.  
  176.      Glossary
  177.       
  178.      Knowledge  of the following computer graphics terms is  essential 
  179.      to understanding the operation of ANIMATE.  The definitions  also 
  180.      include extra information specific to ANIMATE. 
  181.       
  182.      PIXEL  means "picture element."  Computer text and  graphics  are 
  183.      composed  of  hundreds of columns and hundreds of  rows  of  tiny 
  184.      rectangular  "pixels."  The precise number of pixels in a  screen 
  185.      depends  on  the video mode you are using.   Hercules  monochrome 
  186.      graphics  have 720 columns by 348 rows of pixels for a  total  of 
  187.      250,560  pixels  per screen, while high resolution  EGA  graphics 
  188.      (medium resolution VGA graphics) have 640 rows by 350 columns for 
  189.      a total of 224,000 pixels per screen.  A Hercules pixel is either 
  190.      off  or  on,  i.e. dark or lit.  An EGA pixel can be  any  of  16 
  191.      different colors chosen from a palette of 64 colors.
  192.       
  193.      VECTOR  GRAPHICS are constructed by drawing a collection of  line 
  194.      segments.   Vector graphics may be monochrome or color.  Usually, 
  195.      only a small fraction of the total number of pixels are  involved 
  196.      in vector graphics.
  197.       
  198.      IMAGES are pictures which are more complicated than just a set of 
  199.      lines.   For example, a very young child draws stick  figures  to 
  200.      represent  objects;  these  are vector graphics.   As  the  child 
  201.      matures,  the  child's  drawing  will  include  shading.   Shaded 
  202.      regions  cannot  be represented accurately using  line  segments.  
  203.      Such pictures are called images.
  204.       
  205.      RASTERIZED  IMAGES  are like television pictures.   An  image  is 
  206.      created  by  defining  every pixel on the  screen.   Any  picture 
  207.      displayed by an IBM-compatible PC is a rasterized image,  because 
  208.      every  pixel  is defined (although many are often set to  be  the 
  209.      background  color).   ANIMATE stores rasterized  images  for  its 
  210.      movies rather than staying with the more compact files that  hold 
  211.      Tektronix vector graphics for two reasons: (1) an  IBM-compatible 
  212.      PC  can  load  a  rasterized image faster  than  it  can  draw  a 
  213.      complicated  vector  graphics plot, and (2) the rate at  which  a 
  214.      movie  of  rasterized  images  is shown  is  independent  of  the 
  215.      complexity of the images, because every pixel is always loaded.
  216.       
  217.      DOUBLE  BUFFERING of image input means that you are  viewing  one 
  218.      picture  stored  in one part (one "page") of a  graphics  board's 
  219.      memory while the next image is being loaded into a second page of 
  220.      video  memory.   When  this next picture is  ready,  then  it  is 
  221.      displayed.   That leaves the first page of video memory free  for 
  222.      loading  the third picture, etc.  With double buffering, you  see 
  223.      only  complete images and flickerless animation.  Without  double 
  224.      buffering,  you  see  images being painted  onto  the  screen  or 
  225.      flicker.  ANIMATE does not use double buffering when emulating  a 
  226.      Tektronix  terminal so that you will see the images being  drawn, 
  227.      but  it  does  use  double buffering  for  showing  movies,  i.e. 
  228.      replaying rasterized images.
  229.           To  demonstrate  single  versus  double  buffering,  I  have 
  230.      included  program  "MAKEMOVY."  Even modern Basic  allows  double 
  231.  
  232.  
  233.  
  234.      ANIMATE.DOC         Tuesday, March 6, 1990 4:10 pm                Page 5
  235.  
  236.  
  237.      buffering with its SCREEN command.  Microsoft's QuickBasic  works 
  238.      fine,  but  Borland's Turbo Basic SCREEN command has a  bug  that 
  239.      prevents  proper  use of the second page of video memory  for  at 
  240.      least  EGA graphics.  Remember, only Hercules monochrome and  the 
  241.      640 by 350 pixel mode of EGA/VGA graphics offer double buffering.  
  242.      CGA and the other VGA modes cannot double buffer.
  243.       
  244.      BIT  PLANES refer to a memory system used to store the  color  of 
  245.      each  pixel.  Let's say that each pixel has N bits  available  to 
  246.      denote  its color; with EGA/VGA 16 color graphics, N=4.   If  bit 
  247.      planes  are used, as they are with EGA/VGA graphics, there are  N 
  248.      "planes"  of  memory.  The first bit plane  holds  the  rightmost 
  249.      (least significant) bit of each pixel.  The next bit plane  holds 
  250.      the next most significant bit of each pixel, etc. until we  reach 
  251.      the N-th bit plane which holds the N-th bit of each pixel.   When 
  252.      ANIMATE  operates in EGA/VGA mode, it must know how many  of  the 
  253.      four   bit  planes  the  user  wishes  to  use.   All   necessary 
  254.      information   for  a monochrome image can be stored  in  one  bit 
  255.      plane.   Two bit planes provide four colors; three bit planes,  8 
  256.      colors; four bit planes, 16 colors.
  257.       
  258.      PALETTE  is  the name given to the color table that  relates  the 
  259.      4  bits reserved for each EGA pixel with the 6-bit integers  that 
  260.      represent  the  various possible EGA colors.   4  bits  represent 
  261.      numbers between 0 and 15, while 6 bits represent numbers  between 
  262.      0  and 63.  Therefore, only 16 of the possible 64 EGA colors  can 
  263.      actually  be used in any given palette.  64 colors  are  possible 
  264.      because each pixel can contain three primary colors (red,  green, 
  265.      and  blue)  and  three secondary colors (light  red,  green,  and 
  266.      blue).   See Wilton (1987) for a few more details, but so  far  I 
  267.      have not figured out to decode an arbitrary 6 bit integer into  a 
  268.      combination of "normal" and "light" reds, greens, and blues.  The 
  269.      problem  for  me lies with colors that involve the high  3  bits, 
  270.      i.e.  color  numbers greater than 7.  The table below  shows  the 
  271.      standard EGA assignment of colors to base 10 pixel values.
  272.       
  273.      Pixel   Color number (base 10)     Pixel  Color number (base 10)
  274.      value   and color                  value  and color
  275.        0      0  black                    8     56  dark gray
  276.        1      1  blue                     9     57  light blue
  277.        2      2  green                   10     58  light green
  278.        3      3  cyan                    11     59  light cyan
  279.        4      4  read                    12     60  light red
  280.        5      5  magenta                 13     61  light magenta
  281.        6      7  light gray              14     62  yellow
  282.        7     20  brown                   15     63  white
  283.       
  284.      For example, if the value of a pixel is 7, standard EGA  graphics 
  285.      would display it as color number 20, which looks like brown.
  286.           The  palette  can  be changed; that is, any one  of  the  63 
  287.      possible  EGA colors could be assigned to the 16  possible  pixel 
  288.      values.  This is one of ANIMATE's options that will be  explained 
  289.      later.
  290.  
  291.  
  292.  
  293.      ANIMATE.DOC         Tuesday, March 6, 1990 4:10 pm                Page 6
  294.  
  295.  
  296.      Installing ANIMATE
  297.       
  298.           On  your hard disc, create a directory called  ANIMATE,  and 
  299.      copy  all  the ANIMATE software into that  directory.   The  disk 
  300.      should  have  several unused megabytes.  You'll  need  that  much 
  301.      space once you start making movies because each frame of Hercules 
  302.      graphics  or  each bit plane of EGA graphics  occupies  about  30 
  303.      kilobytes.  If you make a movie containing 100 frames of  Tek4010 
  304.      graphics,  it will occupy about 3 MB of disk space. Don't  forget 
  305.      to back up your ANIMATE software onto "floppy" disks for safety's 
  306.      sake.
  307.       
  308.           As  provided, the parameter file ANIMATE.PAR  is  configured 
  309.      for  EGA/VGA graphics using one bit plane, which is  all  Tek4010 
  310.      graphics  need.   If you have Hercules monochrome  graphics,  you 
  311.      need a version of ANIMATE.PAR for Hercules graphics.  To do this, 
  312.      you need to rename two files; enter the MS-DOS commands:
  313.      REN ANIMATE.PAR ANIMATE.PAE
  314.      REN ANIMATE.PAH ANIMATE.PAR
  315.      If you have EGA or VGA graphics, skip those two commands, because 
  316.      ANIMATE.PAR  is already set up for you.  Just to be  safe,  enter 
  317.      TYPE ANIMATE.PAR to list the contents of the parameter file.  The 
  318.      first  line  should  say  Hercules or  EGA.   (If  you  have  VGA 
  319.      graphics, ANIMATE.PAR should say EGA.)
  320.       
  321.       
  322.      Using ANIMATE to create and view a movie
  323.       
  324.           Type  ANIMATE  to invoke ANIMATE.EXE.  This will call  up  a 
  325.      menu of choices followed by an alphabetical list of the files  in 
  326.      the  current  directory.   No more than 100 file  names  will  be 
  327.      displayed.   If  the  graphics  files  are  not  in  the  current 
  328.      directory,  you may want to hit the 'c' key to change the  active 
  329.      disk  and/or directory; then type the disk and/or directory  just 
  330.      as you would for MS-DOS.  For example, if your graphics files are 
  331.      on  the  same disk as ANIMATE -- say, the "c:" disk -- but  in  a 
  332.      different directory named \MOVIES, you can enter either C:\MOVIES 
  333.      or  \MOVIES.   Note:  Either  upper or lower  case  is  fine  for 
  334.      answering any of ANIMATE's questions.
  335.       
  336.           As  an example, we'll make a movie using the  supplied  file 
  337.      MAP.TEK,  which  you  probably have in the  same  directory  with 
  338.      ANIMATE.  Select Tek4010 emulation by hitting 't.'  Type  MAP.TEK 
  339.      as the name of the first file.  Type DONE as the second file name 
  340.      to indicate that all files have been entered.  Answer no ('n') to 
  341.      the  next  question about using a  rasterized  background;  we'll 
  342.      discuss that later.  Answer yes ('y') to the question about  sav-
  343.      ing  the  images in rasterized form.  Enter MAP.EGA  or  MAP.HER, 
  344.      depending on whether you are using EGA or Hercules graphics.   (I 
  345.      use  the suffix TEK for files that hold Tektronix  plot  instruc-
  346.      tions,  the suffix EGA for files that hold rasterized  images  in 
  347.      EGA  format,  and the suffix HER for files that  hold  rasterized 
  348.      Hercules images.  ANIMATE does not force this convention on  you, 
  349.      though.)  Lastly, you must enter which of the Tektronix plots are 
  350.      to be saved in rasterized form.  Enter 0 0 to save all frames.
  351.  
  352.  
  353.  
  354.      ANIMATE.DOC         Tuesday, March 6, 1990 4:10 pm                Page 7
  355.  
  356.  
  357.       
  358.           At this point, you should see a sequence of maps being drawn 
  359.      on  the  screen, and you should hear your hard disk  whir  as  it 
  360.      reads  Tektronix plotting instructions and saves  the  rasterized 
  361.      images.  After all the images have been drawn, control will auto-
  362.      matically return to ANIMATE's main menu.
  363.       
  364.           To  view  the movie you have just made, hit  'r'  to  select 
  365.      rasterized  replay.  Enter MAP.EGA or MAP.HER as the  first  file 
  366.      name  and  DONE as the second.  Answer no to the  question  about 
  367.      saving images in rasterized format, unless you would like to save 
  368.      a subsequence from this movie.  When the movie starts, you should 
  369.      see  a smooth sequence of world maps appear on your  screen.   If 
  370.      you  do not see a smooth sequence of maps without  flicker,  then 
  371.      your graphics board is not register level compatible with EGA  or 
  372.      Hercules  graphics, and you are out of luck as far as ANIMATE  is 
  373.      concerned.  In any case, ANIMATE will continuously repeat a movie 
  374.      until  the user hits the Escape key (Esc) to escape to  the  main 
  375.      menu.   While the movie is running, the user can hit any  one  of 
  376.      the  following keys (upper or lower case) in order to select  the 
  377.      option described.
  378.       
  379.      Choice:   Result:
  380.      s         Slower movie replay.  Hitting 's' more than once
  381.                makes the movie run even slower.
  382.      f         Faster movie replay.  When a movie first starts,
  383.                it is running as fast as possible, so hitting 'f' will
  384.                have no effect unless 's' has been hit first.
  385.      1         Toggle single step mode on or off.  (Note: 1 is the
  386.                digit one, not a lower case ell.)
  387.      n         When in single step mode, this will display the next
  388.                picture.
  389.      p         Toggle brief (roughly 1 second) pause at the end of
  390.                movie before repeating it.
  391.      Esc key   Go to the main menu.  Control C has the same effect.
  392.       
  393.      Default conditions:
  394.      1. The movie is displayed as fast as possible.
  395.      2. Single step mode is off; the movie automatically advances from 
  396.      one picture to the next.
  397.      3. There is no pause at the end of the movie before beginning  to 
  398.      show the movie again.
  399.       
  400.       
  401.      Plotting Tektronix graphs onto a rasterized background
  402.       
  403.           Now  we  are  ready to explain the  option  under  Tektronix 
  404.      emulation  that  asks whether you want your graphs plotted  on  a 
  405.      rasterized background image.  Let's suppose that you want to make 
  406.      a movie of weather maps.  Each picture will show a map and on top 
  407.      of  that map you will plot lines and symbols that show  what  the 
  408.      weather  is.   We'll assume that you have already  debugged  your 
  409.      program by making a few test plots.  At this point, you could  do 
  410.      a production run of plots for ANIMATE, and everything would  work 
  411.      fine,  and  you could forget about  the  "rasterized  background" 
  412.  
  413.  
  414.  
  415.      ANIMATE.DOC         Tuesday, March 6, 1990 4:10 pm                Page 8
  416.  
  417.  
  418.      option.  Nonetheless, an extra step may be advantageous.
  419.       
  420.           It  is inefficient to send the same complicated map to  your 
  421.      microcomputer  over  and  over again  with  every  picture.   The 
  422.      following  procedure saves execution time, transmision time,  and 
  423.      disc space at the expense of some of your time.  After debugging, 
  424.      run your graphics program twice.  The first time, draw one single 
  425.      picture  that contains the constant background that you  want  to 
  426.      appear  in  each frame of your movie; turn off the  rest  of  the 
  427.      plotting  commands  by converting them into  comments.   For  the 
  428.      second  run,  turn the "background" plotting commands  into  com-
  429.      ments,  restore  the other plotting commands,  and  produce  your 
  430.      whole movie without a background.  Send the two plot files -- one 
  431.      contains  a  single frame (the unchanging  background),  and  the 
  432.      other contains as many frames as will be in your movie -- to your 
  433.      microcomputer,  and capture them using your communications  soft-
  434.      ware.  
  435.       
  436.           On  the  microcomputer, invoke  ANIMATE.   Select  Tektronix 
  437.      emulation,  and  create  and store a rasterized  version  of  the 
  438.      background map.  Next, select Tektronix emulation, and enter  the 
  439.      file  name(s) holding the mapless graphics, ending  with  "done."  
  440.      Answer  yes  ('y') to using a rasterized  background  image,  and 
  441.      enter  the name of the file that holds the rasterized version  of 
  442.      the  map.  For every frame of your movie, ANIMATE will  read  the 
  443.      background map and plot the other graphics on top of it.
  444.       
  445.           There  is also a fancier use for the  rasterized  background 
  446.      option.   You  can combine two or more movies into one  movie  by 
  447.      overlaying  them on top of each other.  To do this, generate  the 
  448.      Tek4010  graphics for each of the movies, transmit them  to  your 
  449.      microcomputer,  and capture them.  Then invoke ANIMATE.  For  the 
  450.      first  movie,  select  Tektronix  emulation  with  no  rasterized 
  451.      background,  and  store that movie.  For the next  movie,  select 
  452.      Tektronix  emulation, and enter the file name(s).  Answer yes  to 
  453.      using  a  rasterized background, and enter the name of  the  file 
  454.      that  contains the first rasterized movie.  ANIMATE will  display 
  455.      the  first  frame of the first movie and plot on top  of  it  the 
  456.      first  frame of the second movie, etc.  If the first  movie  ends 
  457.      before  the  second does, the first movie will be  "rewound"  and 
  458.      started  again.  This is useful if the background for your  movie 
  459.      is a repetitive sequence.
  460.       
  461.       
  462.      Editing the parameter file ANIMATE.PAR and "script files".
  463.       
  464.           ANIMATE.PAR  contains all the adjustable  information  which 
  465.      ANIMATE  needs to define its graphics.  ANIMATE.PAR is  an  ASCII 
  466.      file  which  can  be  edited  by any  text  editor  such  as  the 
  467.      NONDOCUMENT  mode  of  WordStar.  What I  call  a  "script"  file 
  468.      contains the same kind of information that ANIMATE.PAR does  plus 
  469.      the names of files containing rasterized images that you want  to 
  470.      link together into a movie.  Once you understand how to construct 
  471.      ANIMATE.PAR,  you  can build a script file by starting  with  the 
  472.      same  types  of information as are required for  ANIMATE.PAR  and 
  473.  
  474.  
  475.  
  476.      ANIMATE.DOC         Tuesday, March 6, 1990 4:10 pm                Page 9
  477.  
  478.  
  479.      then following that by the file name(s) for the rasterized images 
  480.      you  want to see.  With either ANIMATE.PAR or a script  file,  do 
  481.      not  use  any commas; just leave one or more spaces  between  all 
  482.      entries.
  483.       
  484.           If you have Hercules monochrome graphics, ANIMATE.PAR should 
  485.      contain  only  two lines.  The first line should  say  "Hercules" 
  486.      (without  quotes),  and the second line should have the x  and  y 
  487.      pixel coordinates of the point at which you want the frame number 
  488.      displayed   when  that  option  is  selected  during  replay   of 
  489.      rasterized  images.  0 0 refers to the upper left corner  of  the 
  490.      screen.  719 347 is the lower right corner for Hercules graphics.  
  491.      0  10 is often a good place to display frame numbers, which  will 
  492.      place the frame numbers near the upper left corner of the screen.
  493.       
  494.           If  you have EGA or VGA graphics, ANIMATE.PAR  must  contain 
  495.      five  lines.  The first line should say "EGA"  (without  quotes).  
  496.      The second line must give the number of bit planes to be  handled 
  497.      in  normal operation.  Usually, this is 1.  The third  line  must 
  498.      contain  sixteen integers (base 10) listing the EGA  colors  that 
  499.      are  to be assigned to the palette.  (See the explanation of  the 
  500.      palette  in  the glossary.)  Do NOT separate  the  integers  with 
  501.      commas;  that would cause an error.  (The program may  not  bomb, 
  502.      but  colors will not be read correctly.)  Just leave one or  more 
  503.      spaces between the numbers.
  504.       
  505.           For EGA/VGA monochrome graphics, only the first bit plane is 
  506.      needed.  I like yellow lines plotted on a blue background, and  I 
  507.      have  specified this in the supplied copy of  ANIMATE.PAR,  whose 
  508.      third line reads:
  509.      1 62 0 0 0 0 0 0  0 0 0 0 0 0 0 0
  510.      Thus, color 1 (blue) is shown when a pixel value is 0, and  color 
  511.      62  (yellow)  is shown when a pixel value is 1.  So blue  is  the 
  512.      background  color,  and  yellow is  the  foreground  color.   The 
  513.      remaining  color  assignments for pixel values 2 through  15  are 
  514.      arbitrary because those colors will never appear if only one  bit 
  515.      plane  is loaded; I have chosen color 0 (black). Another  example 
  516.      of  color  assignment  is  given below  where  script  files  are 
  517.      discussed.
  518.       
  519.           The  fourth line of ANIMATE.PAR for EGA  graphics  specifies 
  520.      the color to be used when writing frame numbers on the  pictures.  
  521.      The  color  is  indicated by the PIXEL VALUE to  be  assigned  (0 
  522.      through  15), NOT by the actual color number (0 to 63).   In  the 
  523.      supplied  version  of ANIMATE.PAR, the fourth line  is  1.   That 
  524.      means  that, when frame numbers are written onto images, it  will 
  525.      be done by assigning a value of 1 to the affected pixels.   Given 
  526.      the color assignments indicated in the preceding paragraph,  that 
  527.      means  that  the  frame numbers will appear in  color  number  62 
  528.      (yellow).
  529.       
  530.           The fifth line of ANIMATE.PAR for EGA graphics must  contain 
  531.      the x and y pixel coordinates of the point at which you want  the 
  532.      frame  number to be displayed.  0 0 is the upper left  corner  of 
  533.      the  screen.   639 349 is the the lower right corner.   0  10  is 
  534.  
  535.  
  536.  
  537.      ANIMATE.DOC         Tuesday, March 6, 1990 4:10 pm               Page 10
  538.  
  539.  
  540.      often a good place to display frame numbers, which will place the 
  541.      frame numbers near the upper left corner of the screen. 
  542.       
  543.           A  script  file holds a "script" for  displaying  rasterized 
  544.      images.   It offers two features.  One, it allows  graphics  mode 
  545.      assignments  to  be  temporarily reset  from  the  normal  values 
  546.      specified in ANIMATE.PAR.  Second, if more than one file contains 
  547.      the  rasterized  images for a movie, you only have to  enter  the 
  548.      file names once into this file, rather than manually type all the 
  549.      file  names  each time you want to view the movie, as  you  would 
  550.      have to do if you selected ANIMATE's option to "replay rasterized 
  551.      images."
  552.       
  553.           The  first part of a script file is constructed  in  exactly 
  554.      the  same  way  as  ANIMATE.PAR.  That is,  if  your  movie  uses 
  555.      Hercules  graphics,  the first line of the script file  must  say 
  556.      "Hercules" (without quotes), and the second line must give the  x 
  557.      and  y pixel coordinates where frame numbers are to  be  written.  
  558.      If your movie uses EGA or VGA graphics, a script file must  start 
  559.      with  five  lines defining the EGA  graphics  parameters.   These 
  560.      lines can be different than what is in ANIMATE.PAR.
  561.       
  562.           As  an  example  where a script file would  be  nice,  let's 
  563.      suppose  that your mainframe computer has 3-D  graphics  routines 
  564.      that allow you to set the viewing angle of a plot in  perspective 
  565.      and that you have EGA or VGA graphics on your microcomputer.   If 
  566.      so,  you have what you need to make 3-D movies using  the  method 
  567.      where you draw one eye's view in red and the other eye's view  in 
  568.      green.  You should generate Tek4010 monochrome graphics with  two 
  569.      views of every image.  All of the even numbered frames should  be 
  570.      one  eye's  view and all the odd numbered frames  should  be  the 
  571.      other  eye's view.  Your script file for ANIMATE should be  some-
  572.      thing like this:
  573.       
  574.      EGA
  575.      2
  576.      0 2 4 6 0 0 0 0  0 0 0 0 0 0 0 0
  577.      1
  578.      0 10
  579.      FILE1.EGA
  580.      FILE2.EGA
  581.      FILE3.EGA
  582.      etc. up to a maximum of
  583.      FILE10.EGA
  584.       
  585.      With this assignment, two bit planes will be loaded to form  each 
  586.      image.   The  background  will be black  (color  0).   The  first 
  587.      rasterized  image read will be placed into the first  bit  plane, 
  588.      and the nonzero pixels will appear in color 2 (red).  The  second 
  589.      image  will be loaded into the second bit plane, and its  nonzero 
  590.      pixels will appear in color 4 (green).  In cases where a pixel is 
  591.      used in both bit planes, the pixel value will be 1+2=3, to  which 
  592.      I  suggest assigning color 6 because that color (not one  of  the 
  593.      standard EGA colors) is constructed by displaying both red (color 
  594.      2) and green (color 4).
  595.  
  596.  
  597.  
  598.      ANIMATE.DOC         Tuesday, March 6, 1990 4:10 pm               Page 11
  599.  
  600.  
  601.       
  602.           You  must  view such 3-D movies with special  glasses.   The 
  603.      Bulletin of the American Meteorological Society for February 1981 
  604.      included  a red/green viewer for 3-D pictures, or you can make  a 
  605.      crude  but  adequate  viewer  using  cardboard,  red  and   green 
  606.      cellophane,  tape, and scissors.  I have not done much  with  3-D 
  607.      movies  other  than to run the sample movie  (MAP.EGA)  with  the 
  608.      script  file  shown  above.  The result  is  not  satisfying.   I 
  609.      suspect that the user will have to experiment for a while  before 
  610.      good 3-D movies result.  Please let me know of your successes.
  611.       
  612.       
  613.      If you have trouble with ANIMATE
  614.       
  615.           The  most  common problem will be that  Tektronix  emulation 
  616.      works  okay,  but  the rasterized replay  does  not  work.   Most 
  617.      likely,  the  problem lies with your graphics  board.   Animation 
  618.      on  an  IBM-compatible PC  pushes the  capabilities  of  graphics 
  619.      boards,  and only some graphics boards meet all the standards  of 
  620.      Hercules monochrome or IBM EGA graphics.
  621.       
  622.           Nonetheless,  a  few  things should be  checked  before  you 
  623.      consider upgrading your graphics board.
  624.       
  625.      1.  Double  check  the contents of  ANIMATE.PAR.   The  only  two 
  626.      supported  graphics modes are EGA (or equivalently VGA) and  Her-
  627.      cules.   If you have CGA graphics or EGA graphics with only  64KB 
  628.      of  memory  on the video board, you are out of  luck.   Secondly, 
  629.      make sure that no commas appear in ANIMATE.PAR; entries should be 
  630.      separated only by blanks.
  631.       
  632.      2.  Some video boards require that you run a program supplied  by 
  633.      the boards manufacturer in order to set the board into a  certain 
  634.      mode  of operation.  For example, normally I keep my Everex  EVGA 
  635.      board in EGA mode (actually, in MS-DOS, I execute "EVGAMODE  5").  
  636.      If  I  want to look at a movie of rasterized Hercules  images,  I 
  637.      must first execute EVGAMODE 23 in MS-DOS to switch the board into 
  638.      Hercules mode; just specifying "Hercules" in ANIMATE.PAR or in  a 
  639.      script  file is not enough.  Curiously, if the EVGA board  is  in 
  640.      Hercules  mode, it will correctly switch itself temporarily  into 
  641.      EGA mode if ANIMATE.PAR or a script file calls for EGA graphics.
  642.       
  643.      3.  Hercules  rasterized  images and EGA  rasterized  images  are 
  644.      different, so a movie stored in rasterized Hercules form can only 
  645.      be  viewed with Hercules graphics; similarly, a movie  stored  in 
  646.      rasterized EGA form can only be viewed with EGA graphics.
  647.       
  648.       
  649.      Optimizing ANIMATE's performance
  650.       
  651.           When  ANIMATE  displays  rasterized images,  its  most  time 
  652.      consuming task by far is loading the rasterized images into video 
  653.      memory  from the disk file(s) where the images are  stored.   You 
  654.      can do three things to make the display as fast as possible.
  655.  
  656.  
  657.  
  658.      ANIMATE.DOC         Tuesday, March 6, 1990 4:10 pm               Page 12
  659.  
  660.  
  661.           First, if you have two or more megabytes of memory, you  can 
  662.      set  aside some of that memory as a virtual disk, also  called  a 
  663.      RAM  disk.   Look up DEVICE = VDISK.SYS in  your  MS-DOS  manual.  
  664.      ANIMATE  can read a rasterized movie very rapidly from RAM  disk.  
  665.      Remember that each Hercules image or each EGA bit plane  occupies 
  666.      about 30 kilobytes of memory, so you will need a lot of RAM  disk 
  667.      for a movie of any length.
  668.       
  669.           Second,  make sure that your disk is not storing  rasterized 
  670.      movies  in  "fragmented"  form.   If  you  do  not  know  what  a 
  671.      fragmented  file  is,  fragmented files are  almost  certainly  a 
  672.      problem  on  your disk.  When a file is stored on a disk,  it  is 
  673.      entirely  possible that, unknown to you, the computer  may  crack 
  674.      the  file  into  two  or more pieces  and  store  the  pieces  on 
  675.      separated  parts  of the disk.  This is known  as  fragmentation.  
  676.      The benefit of fragmentation is that it makes usable the  various 
  677.      "bare" spots scattered about the disk that result when old  files 
  678.      are  deleted.  The disadvantage of fragmentation is that  it  can 
  679.      slow  disk  access because the disk head has to jump  around  the 
  680.      disk  to  reach all the parts of a file.  There are a  number  of 
  681.      commercially  available  programs  that rewrite files  so  as  to 
  682.      eliminate    fragmentation.    I   am   familiar    with    three 
  683.      "unfragmenters": (1) Speed Disk in the Advanced Edition of Norton 
  684.      Utilities; (2) COMPRESS in PC Tools from Central Point  Software, 
  685.      and (3) VOPT from Golden Bow Systems.  Any of these is good.  (Be 
  686.      warned:  the "quick" option on Norton Utilities' Speed Disk  does 
  687.      not  remove  fragmentation  and can  actually  create  additional 
  688.      fragmentation;  instead, use "file unfragment.")  The first  time 
  689.      you  run an unfragmenter on your disk, it may take 10 minutes  or 
  690.      more to straigthen up your files.  Thereafter, it will only  need 
  691.      10-20  seconds to straighten up things if you run  it  regularly.  
  692.      My AUTOEXEC.BAT file invokes an unfragmenter every time I boot my 
  693.      computer.
  694.       
  695.           Third,  the  data transfer rate between your disk  and  your 
  696.      computer   may   not  have  been  optimized   by   the   computer 
  697.      manufacturer,  specifically, the "interleave factor"  may not  be 
  698.      optimal.  This is a "guts level" parameter that users normally do 
  699.      not  alter; however, a program called SpinRite from Steve  Gibson 
  700.      Research  can optimize the interleave factor as well as do  other 
  701.      disk  maintenance tasks.  Byte magazine (Nov 1988,  pp.  237-239) 
  702.      has  reviewed  SpinRite.   See also  the  hard  disc  maintenance 
  703.      packages reviewed in Byte, Jan 1990.
  704.       
  705.       
  706.      Comments on ANIMATE's Tektronix 4010 emulation
  707.       
  708.           I  coded  the Tek4010 emulation based on  a  description  of 
  709.      Tek4010  operation  given  in chapter 5 of  the  manual  for  the 
  710.      FlexiTek  communications program marketed by Various  Ware,  P.O. 
  711.      Box  21070, El Cajon, CA 92021, telephone (619)  448-7126.   Only 
  712.      the  graphics mode of Tek4010 operation has been simulated.   All 
  713.      other input is ignored.
  714.       
  715.           An important item which is not part of the Tek4010  graphics 
  716.  
  717.  
  718.  
  719.      ANIMATE.DOC         Tuesday, March 6, 1990 4:10 pm               Page 13
  720.  
  721.  
  722.      language  is an "end of plot" signal.  I decided to  terminate  a 
  723.      plot  when  a  "clear screen" command  (ASCII  characters  CR  FF 
  724.      (hexadecimal  0d  0c)) is received or when an end of  file  (EOF) 
  725.      mark  is encountered in the input file.  Multiple plots  can  and 
  726.      should  be in a single file, even though up to ten files  can  be 
  727.      chained  together  by ANIMATE.  The limit of 10  files  could  be 
  728.      increased by changing the definition of MAX_FILES in  ANIMATE1.C, 
  729.      but there is little reason to do this since there is no limit  to 
  730.      the  number  of  plots that can be stored in a  file.   In  other 
  731.      words, if you can, keep all your Tektronix plotting  instructions 
  732.      for  a movie in one file and all your rasterized images  for  the 
  733.      movie in one other file.
  734.       
  735.       
  736.      Modifying ANIMATE
  737.       
  738.           Source code for ANIMATE is provided in  files ANIMATE1.C and 
  739.      ANIMATE2.C so that you can make whatever modifications you  might 
  740.      like.   The  user  will no doubt think of a  number  of  possible 
  741.      improvements to ANIMATE, such as:
  742.       
  743.      1. Emulation of a color Tektronix terminal.
  744.      The  Reference Guide for version 3 of the  commercially  marketed 
  745.      Macintosh  VersaTerm-Pro communications package contains  Chapter 
  746.      X:  Appendix  (pp. 288-299) seems to provide  enough  information 
  747.      regarding  the  operation of a Tektronix 4105 terminal  to  allow 
  748.      someone  to  write  at least a partial emulator  using  Turbo  C.  
  749.      VersaTerm-Pro  is  marketed by Synergy Software,  2457  Perkiomen 
  750.      Ave, Reading, PA 19606, telephone (215) 779-0522.
  751.       
  752.      2. Allowing movies to run backwards.
  753.       
  754.      3. Expanded use of script files.
  755.       
  756.           When I first tried writing an animation program I used Turbo 
  757.      C's  getimage() and putimage() functions, but they are  too  slow 
  758.      for  animation.  Direct reads and writes from the graphics  board 
  759.      are  necessary, and that is why register level  compatibility  is 
  760.      required of your graphics board.
  761.       
  762.           I  would be pleased to hear of your ideas and  improvements.  
  763.      Before  you  do much work on improving ANIMATE, I  would  suggest 
  764.      sending me a message.  That way, I can let you know whether I  or 
  765.      somebody  else  might already be working on the  improvement  you 
  766.      have in mind.  If you are willing to share your improvements with 
  767.      me,  please  take care to write clean, heavily  documented  code.  
  768.      Anything  less  is  hard to maintain and  almost  impossible  for 
  769.      another programmer to figure out.
  770.       
  771.           I probably will not be very quick to add additional features 
  772.      to ANIMATE.  I will certainly keep your suggestions in mind and I 
  773.      hope  that ANIMATE will be improved, especially by  other  users, 
  774.      but  my job as a meteorology professor dictates that I spend  the 
  775.      majority of my time doing research and teaching, not  programming 
  776.      applications.   I  wrote  ANIMATE to display the  results  of  my 
  777.  
  778.  
  779.  
  780.      ANIMATE.DOC         Tuesday, March 6, 1990 4:10 pm               Page 14
  781.  
  782.  
  783.      research, and it took a LOT of time, because I was also  learning 
  784.      C  and  PC graphics at the same time.  I am  basically  satisfied 
  785.      with ANIMATE in its present form, although I certainly would like 
  786.      to  add a Tek4105 color emulation mode, but I feel that I do  not 
  787.      have the time to do that at present.  I need to use ANIMATE as  a 
  788.      research tool, not work on it as an end in itself.
  789.       
  790.           If  you have Internet, you might use FTP every so  often  to 
  791.      sign  onto the anonymous FTP account on unidata.ucar.edu (user  = 
  792.      anonymous,    password    =   guest)    and    check    directory 
  793.      /ahlquist/animation to see whether any bugs have been  discovered 
  794.      and corrected or whether a new version may be available.
  795.       
  796.       
  797.      Compiling ANIMATE
  798.       
  799.           If you wish to recompile ANIMATE, you will need version 2 or 
  800.      newer of Borland's Turbo C.
  801.       
  802.           "Far"  pointers  are  needed by _read()  and  _write()  when 
  803.      rasterized  images  are  placed into or read  from  the  graphics 
  804.      board.   Therefore,  I  have compiled  ANIMATE  using  Turbo  C's 
  805.      "compact"  memory model.  (Under Turbo C's Options  menu,  select 
  806.      Compiler,   then  Model  Size,  and  Compact.)   Under   Options, 
  807.      Compiler, Code Generation, I turned off "OBJ debug  information," 
  808.      which  trims  about 6 kilobytes from  ANIMATE.EXE.   Nonetheless, 
  809.      leave OBJ debug information "on" if you start modifying  ANIMATE, 
  810.      because the integrated debugger can be a great help.
  811.       
  812.           The project file ANIMATE.PRJ contains instructions for Turbo 
  813.      C on how to create ANIMATE.EXE.  The project file should contain:
  814.      ANIMATE1
  815.      ANIMATE2
  816.      GRAPHICS.LIB
  817.      EGAVGA.OBJ
  818.      HERC.OBJ
  819.      The  latter two files are created easily using  Borland's  BGIOBJ 
  820.      utility; see Borland's Turbo C Reference Guide for details.
  821.       
  822.           With  compilation of the present version of ANIMATE2.C,  you 
  823.      will encounter two warnings that say that variable num_bit_planes 
  824.      is not accessed in save_Herc_raster() and  display_Herc_raster().  
  825.      This  is  okay.   Hercules monochrome graphics  do  not  use  bit 
  826.      planes,  but num_bit_planes is included so that the arguments  to 
  827.      the Hercules routines are the same as those to  save_EGA_raster() 
  828.      and  display_EGA_raster(), which do need bit  plane  information.  
  829.      This makes it possible to use function pointers save_raster() and 
  830.      display_raster()  to  point to the  appropriate  routines.   This 
  831.      avoids  several "if" statements that would have to check for  the 
  832.      graphics mode.
  833.       
  834.           You  will also encounter a warning saying  Tek4010()  should 
  835.      return  a  value;   it does, but all the  return  statements  are 
  836.      within the function and none appears at the end.
  837.  
  838.  
  839.  
  840.      ANIMATE.DOC         Tuesday, March 6, 1990 4:10 pm               Page 15
  841.  
  842.  
  843.      Bugs in Turbo C
  844.       
  845.           While  writing ANIMATE, I encountered the following bugs  in 
  846.      Turbo  C.  A letter from Borland indicates that these  bugs  have 
  847.      not been corrected as of 18 February 1990.  ANIMATE works  around 
  848.      these bugs.
  849.       
  850.      1. In Hercules graphics mode, cleardevice() should clear only the 
  851.      active  page  of  video  memory,  but  the  Hercules  version  of 
  852.      cleardevice()  clears both pages of video memory and  resets  the 
  853.      visual  page to 0 (the first page of video memory); at least  the 
  854.      active  page  is not reset.  Occasionally, I have also  had  some 
  855.      trouble  clearing  the  screen in EGA mode  after  accessing  bit 
  856.      planes,  but Borland graphics were not designed to be  bomb-proof 
  857.      to  attacks by a user who putzes with the guts of  the  graphics.  
  858.      (See point 2 below.)
  859.       
  860.      2. Writing text to the screen in graphics mode using  outtextxy() 
  861.      after  accessing a bit plane does not always work correctly  with 
  862.      EGA graphics, so I write to the screen twice, and the second time 
  863.      is ok. 
  864.       
  865.      3.  For speed reasons, replay of rasterized images is  done  with 
  866.      unbuffered   input/output   (IO).    ANSI   standards   implement 
  867.      unbuffered  IO by calling fopen(), then setbuf(fp, NULL)  to  set 
  868.      the buffer size to zero, followed by use of fread() and fwrite().  
  869.      I  tried to do this, both for compatibility with  ANSI  standards 
  870.      and  to simplify the program.  The problem is that Turbo  C's  IO 
  871.      absolutely crawls if done according to ANSI standards; it is MUCH 
  872.      slower  that  buffered  input.  Since the ANSI  standard  is  not 
  873.      feasible,  I  have used _read() and _write() for  unbuffered  IO, 
  874.      because they are Turbo C's fastest IO routines.
  875.  
  876.  
  877.  
  878.      ANIMATE.DOC         Tuesday, March 6, 1990 4:10 pm               Page 16
  879.  
  880.  
  881.      References
  882.       
  883.           In addition to the two Borland Turbo C manuals (User's Guide 
  884.      and Reference Guide), the references I used when writing  ANIMATE 
  885.      are  listed  below.   For more exposure to  double  buffering  of 
  886.      images, I suggest that you look at the sample program MAKEMOVY.C.
  887.       
  888.      Schildt,  Herbert,  1985:  C  Made  Easy.   Osborne  McGraw-Hill, 
  889.      Berkeley,  California,  292 pages.  (No graphics  are  discussed, 
  890.      just  the  basics  of C.  There is also a version  of  this  book 
  891.      specifically for Turbo C called Turbo C Made Easy.)
  892.       
  893.      Schustack,  Steve,  1985:  Variations  in  C.   Microsoft  Press, 
  894.      Bellevue, Washington, 344 pp.  (Intermediate level guide to C;  a 
  895.      good second book after one is familiar with the basics of C.   No 
  896.      graphics.)
  897.       
  898.      Wilton,  Richard,  1987: Programmer's Guide to PC  &  PS/2  Video 
  899.      Systems.  Microsoft Press, Redmond, Washington, 531 pages.  (This 
  900.      is  the most comprehensive book available on programming  IBM  PC 
  901.      graphics.   To  understand this book, you need to  know  assembly 
  902.      language,  which I do not, so almost all of it is  too  technical 
  903.      for me.  Fortunately, Borland's Turbo C has functions to  perform 
  904.      many graphics functions, and Tom Yoksas of Unidata showed me  how 
  905.      to do the crucial reads and writes directly from the video  board 
  906.      which  make  animation  possible.  You should be  aware  of  this 
  907.      book's existence, but you can probably get along fine without  it 
  908.      unless  you  want  to know the register level  operations  of  PC 
  909.      graphics.)
  910.       
  911.       
  912.      Acknowledgments:
  913.       
  914.      ANIMATE was written to help display results of research funded by 
  915.      NSF  grant  ATM-8714674.  Not only did this grant pay  my  salary 
  916.      during part of the development of ANIMATE, it also purchased some 
  917.      of the computer equipment on which the development was done.
  918.       
  919.      Tom  Kitterman  of  the  Florida  State  University   Meteorology 
  920.      Department  patiently  answered many of  my  questions  involving 
  921.      register level operations with graphics.
  922.       
  923.      During  the summer of 1989, Carla Engel, an undergraduate  summer 
  924.      mathematics  student under NSF applied  mathematics  sponsorship, 
  925.      helped document the bugs which I had found in Turbo C.
  926.       
  927.      Tom  Yoksas  who  works  at the Unidata  Project  Office  of  the 
  928.      University  Corporation  for  Atmospheric  Research  in  Boulder, 
  929.      Colorado showed me how read and write directly from the  graphics 
  930.      board, which makes animation possible.
  931.