home *** CD-ROM | disk | FTP | other *** search
/ Crawly Crypt Collection 1 / crawlyvol1.bin / games / stello11 / doc / stello.txt < prev    next >
Text File  |  1994-07-04  |  24KB  |  482 lines

  1. Hello everybody.
  2.  
  3. Here  is version 1.10 of my Othello/Reversi game Stello  (ST-Othello  or 
  4. Super-Othello or whatever you like best).
  5.  
  6. Files:
  7.   README            (short description of stello)
  8.   STELLO.PRG        (Othello for 68000)
  9.   STELLO30.PRG      (Othello for 68030)
  10.   STEENG.RSC        (english rsc.)
  11.   STEGER.GER        (german rsc.)
  12.   STEDAN.RSC        (danish rsc.)
  13.   BLACK.LIB         (black opening lib)
  14.   WHITE.LIB         (white opening lib)
  15.   DISCS\*.BIN       (different discs)
  16.   BOARD\COL2\*.IMG  (pictures for 2 colors)
  17.   BOARD\COL4\*.IMG  (pictures for 4 colors)
  18.   BOARD\COL16\*.IMG (pictures for 16 colors)
  19.   DOC\REGISTER.TXT  (Send this to me please)
  20.   DOC\STELLO.TXT    (you are reading it)
  21.   DOC\WHATSNEW      (what is new in this version)
  22.   GAM\BADPOS.GAM    (set response time to infinity and wait)
  23.   GAM\PLY22.GAM                      do
  24.   GAM\END.GAM                        do
  25.   GAM\WOW64.GAM                      do
  26.  
  27. History:
  28.   5 years ago.
  29.  
  30.   Beeing very interested in game theory,  and the game of Othello, i had 
  31.   (in   vain)  for  a  long  time  searched  for  a  good   and   strong 
  32.   implementation  of  this  game  for  the  Atari  computer  line.   Not 
  33.   succeding i said to myself,  why not write one myself. Had i known how 
  34.   difficult  and  timeconsuming it would be,  i would probably  not  had 
  35.   started.  Anyway i bought a book called advanced Pascal in which there 
  36.   was a tiny othello game.  It was quickly adopted to my atari computer, 
  37.   and  of cause then i played some matches against it.  What a  bommer!! 
  38.   It  played so bad that i could not belive it.  Looking at  the  source 
  39.   code i had to admit that i really didn't understand what was going on. 
  40.   I needed to learn about the fundamentals before i could make a  better 
  41.   program.  I then began to study the theory behind game  playing,  such 
  42.   as  the  alfa/beta minimax algorithm and many other  related  objects. 
  43.   During the next two years i developed the fundamental algorithms,  and 
  44.   implemented  it  in  Pascal,  and where it was  needed  for  speed  in 
  45.   assembler.  Writing in Prospero Pascal was not anything i would  whish 
  46.   for  my worst enemies.  After two years of work (in my spare  time)  i 
  47.   had  a  working version of a Othello game which had  a  primitive  Gem 
  48.   interface.  The searching algorithms were quite good,  but the "brain" 
  49.   was  not working so good.  Once in a while it would loose  control  of 
  50.   the  game due to something that i didn't quite  understand.  You  must 
  51.   understand,  that while i tried to make my program better,  i also had 
  52.   to  develop my own understanding of the game.  I can clearly say  that 
  53.   it had made me a much better Othello player to write this program.  In 
  54.   these  two  years  i concentrated on learning the  theory  behind  the 
  55.   searching  algoritmes  and the different techniques  to  optimize  the 
  56.   minimax algorithme.  (There is still room for improvement, for example 
  57.   it  was  just  during the last three months  that  i  implemented  the 
  58.   zerowidth  modifikation to minimax,  and i still need  to  investigate 
  59.   the hash table techniques).  What i needed was a better  understanding 
  60.   of the game itself.  Something then happend which were the major force 
  61.   behind  the increase in playing strength during the last three  years. 
  62.   I  read an article of Paul Rosenblaum who had made a  Othello  program 
  63.   of  remarkable strength.  In this article he made a very good  analyse 
  64.   of  the  game itself,  and made some suggestions about  the  ways  one 
  65.   could  implement  a  evaluation function which  could  understand  the 
  66.   features  of the game.  After studing his article i began  implmenting 
  67.   his  ideas  and  improving upon them.  Eureka,  my  program  got  much 
  68.   stronger.  Programming in pascal was not fun any more,  so i  switched 
  69.   to  Turbo  C,  and later to Pure C.  What a joy programming  now  was, 
  70.   compiling  the  program  was  now a  matter  of  seconds  compared  to 
  71.   minutes.  The  last two years whent by,  and i improved the  interface 
  72.   beyond  recognation  and  optimized  the shit  out  of  the  searching 
  73.   algorithms.  The brain got a facelift,  which means that i implemented 
  74.   some  ideas  of  my  own,  that made a much  stronger  player  of  the 
  75.   program.  I  did  this  by making the  program  avoid  the  inherently 
  76.   unstable evaluations which most othello programs do,  and that  really 
  77.   made  it come up amongst the best programs in the world.  So now  here 
  78.   it  is.  After  five  years  of  development  i  will  release  it  as 
  79.   Shareware.  i  really hope thet you will enyoy it,  and that you  will 
  80.   gratify a hardworking programmer with his modest shareware fee.
  81.  
  82. Tecnicals:
  83.  
  84.   The  search  is based on the alfa/beta - minimax  algorithm.  It  uses 
  85.   several   heuristics  to  improve  the  search   strategi.   Iterative 
  86.   deepening,  response  killer table,  saving the game tree  (all  moves 
  87.   are saved, as long as there is memory, the program reserves all memery 
  88.   except 10%,  so if you have 4 megabyte it could take 3.6 megabyte  for 
  89.   the  tree  of  moves alone) and sorting  the  moves  dynamically  when 
  90.   everything  else fails.  This reduces the brancing factor  to  between 
  91.   3.0  to 4.5.  It really depends on the position.  In the end game  the 
  92.   banching factor is between 1.8 to 2.4.
  93.  
  94.   The  evaluation is based on several independent  components,  such  as 
  95.   mobility,  stability and corner and edge disks. The program is capable 
  96.   of  solving  most  endgame positions when there is  only  16-14  moves 
  97.   left  (depending  on  computer and position,  some  positions  can  be 
  98.   solved  when  20 moves are missing).  It does so by using  the  highly 
  99.   optimized  search algoritms,  which in the end game is  improved  with 
  100.   the  recursive  zerowidth alfa/beta-minimax algorithm.  On  a  TT  the 
  101.   endgame  routine searches the game tree,  with 15000-20000 nodes  per. 
  102.   second.  A  TT has a clock of 32 MH.  A instruction neads at  least  2 
  103.   clock  cycles  to  complete.   This  gives  32000000/(20000*2)  =  800 
  104.   instructions  per  node.  For every node the program has to  sort  the 
  105.   moves,  make at least one move and evaluate the move. Then call itself 
  106.   recursively to do so for the rest of the nodes.  Doing so in just  800 
  107.   instructions  is,  in my own opinion,  rather good.  The speed of  the 
  108.   normal  search  is  1500-4500 nodes pr  second.  You  can  not  really 
  109.   compare  this  with other programs,  as it depends on  the  evaluation 
  110.   function.  My evaluation function, dosen't just evaluate one node, but 
  111.   investigates  the  possible responds and counterresponds  to  be  sure 
  112.   that  the position is approximately stable,  wich really improves  the 
  113.   playing strenght..
  114.  
  115. Playing strength:
  116.  
  117.   To test how strong my program was,  i made a little testmatch  against 
  118.   the program Thor.  Thor is one of the best Othollo playing programs in 
  119.   the  world,  having  participated in several  turnements,  and  usally 
  120.   ending  amongst  the top programs.  I made the two  programs  play  10 
  121.   different positions against each other,  as both black and white. This 
  122.   is 20 games in all.  The play level was turnement,  which means 30 min 
  123.   for  one game.  The results follow.   
  124.    
  125.              Stello        Thor         Thor         Stello
  126.            | Black  | p |  White | p |  Black | p |  White | p |
  127.   ---------------------------------------------------------------
  128.   game  1. |   41   | 1 |   23   | 0 |   44   | 1 |   20   | 0 |
  129.   game  2. |   30   | 0 |   33   | 1 |    7   | 0 |   57   | 1 |
  130.   game  3. |   54   | 1 |   10   | 0 |   14   | 0 |   50   | 1 |
  131.   game  4. |   53   | 1 |   11   | 0 |   15   | 0 |   49   | 1 |
  132.   game  5. |   58   | 1 |    6   | 0 |   27   | 0 |   37   | 1 |
  133.   game  6. |   22   | 0 |   42   | 1 |   19   | 0 |   45   | 1 |
  134.   game  7. |   38   | 1 |   26   | 0 |   19   | 0 |   45   | 1 |
  135.   game  8. |   25   | 0 |   39   | 1 |   23   | 0 |   41   | 1 |
  136.   game  9. |   29   | 0 |   35   | 1 |   24   | 0 |   40   | 1 |
  137.   game 10. |   37   | 1 |   27   | 0 |   22   | 0 |   42   | 1 |
  138.   --------------------------------------------------------------
  139.   Total:   |  38.7  | 6 |  25.2  | 4 |  21.4  | 1 |  42.6  | 9 |
  140.  
  141.              Stello         Thor
  142.              Discs     p    Discs   P
  143.   Total:   |  40.7  | 15 |  23.3  | 5 |
  144.   -------------------------------------
  145.  
  146.   The  theory behind Othello suggests that it is better to  have  white. 
  147.   This means that one would suspect the white side to win.  If you  look 
  148.   at  the results you will see,  that my program as white wins  9-1  !!. 
  149.   But  even as black it manages to win by 6-4.  All in all a victory  by 
  150.   15-5.  I  must emphase that this is by no means a bashing of  Thor.  I 
  151.   really belive that it is a excelent Othello player,  and i admire  the 
  152.   work  that has been put in that program.  One could probobly  find  10 
  153.   other  positions where the result would be different,  i can only  say 
  154.   that  these positions were the first 10 to be reached by  playing  the 
  155.   two programs against each other.  My conclusions are, in retrospekt of 
  156.   the  results,  you  can say that my program playes Othello  at  Master 
  157.   level.
  158.  
  159. -----------Update: Match against Thor v 3.36. (july 1994)---------------
  160.  
  161.   The  last  match  was against thor v 3.33,  and in  the  meantime  the 
  162.   authors behind Thor have improved the program.  As far as i can see it 
  163.   searches somewhat faster,  and it dosen't anymore occasionally make  a 
  164.   bad move.  Furthermore the endgameroutine is 2-3 times faster.  I made 
  165.   the  same match with the same 10 different openings.  The  new  result 
  166.   was.
  167.  
  168.              Stello      Thor 3.36    Thor 3.36     Stello
  169.            | Black  | p |  White | p |  Black | p |  White | p |
  170.   ---------------------------------------------------------------
  171.   game  1. |   52   | 1 |   12   | 0 |   32   |1/2|   32   |1/2|
  172.   game  2. |   46   | 1 |   18   | 0 |   32   |1/2|   32   |1/2|
  173.   game  3. |   24   | 0 |   40   | 1 |   21   | 0 |   43   | 1 |
  174.   game  4. |   55   | 1 |    9   | 0 |   30   | 0 |   34   | 1 |
  175.   game  5. |   27   | 0 |   37   | 1 |   23   | 0 |   41   | 1 |
  176.   game  6. |   32   |1/2|   32   |1/2|   19   | 0 |   45   | 1 |
  177.   game  7. |   26   | 0 |   38   | 1 |   21   | 0 |   43   | 1 |
  178.   game  8. |   35   | 1 |   29   | 0 |   52   | 1 |   12   | 0 |
  179.   game  9. |   32   |1/2|   32   |1/2|   31   | 0 |   33   | 1 |
  180.   game 10. |   39   | 1 |   25   | 0 |   28   | 0 |   36   | 1 |
  181.   --------------------------------------------------------------
  182.   Total:   |  36.8  | 6 |  27.2  | 4 |  28.9  | 2 |  35.1  | 8 |
  183.  
  184.  
  185.              Stello         Thor 3.36
  186.              Discs     p    Discs   P
  187.   Total:   |  36.0  | 14 |  28.0  | 6 |
  188.  
  189.   As we can see,  the outcome in points is almost identical to the  last 
  190.   testmatch.  Stello wins 14-6.  If we analyse the games in more  detail 
  191.   we can see that it now is a much closer match.  The disc  differential 
  192.   now is 8 discs,  where it in the last match was 17 discs.  We can  see 
  193.   that Thor really has improved.  Maybe i should start implementing some 
  194.   of those new ideas that i have been thinking about. 
  195.  
  196. -----------------------------Update end---------------------------------
  197.  
  198.   One  of the more facinating things about Stello,  and  gameplaying  in 
  199.   general,  is  that  i  can't  beat  it  anymore.  I  have  a  complete 
  200.   understanding  of why it makes its moves,  but i don't have  the  same 
  201.   memory  and processing power as the computer.  In the game of  Othello 
  202.   the  computer  has  a bigger advantage than for example  in  chess  or 
  203.   chekers,  as the positions change so quickly. In a sense you could say 
  204.   that  the computer have outmastered me.  Then again i can always  pull 
  205.   the plug. 8-).
  206.  
  207. Interface:
  208.  
  209.   The  interface is completely GEM controlled,  so that the game  should 
  210.   run  in all graphic resolutions (x resolution must be at  least  640), 
  211.   and  on all Atari computers.  It uses some of the features in the  new 
  212.   multitos,  such  as iconification of the windows (AES 4.1),  3d  look, 
  213.   buttom  windows etc.  It is possible to load a bacground  picture,  if 
  214.   the picture is in GEM-XIMG format.  If you are in 16 color  resolution 
  215.   it  must  be a 16 color picture of size  256x256.  Some  pictures  are 
  216.   included, for 2,4 and 16 color modes. It also supports WINX.
  217.  
  218. ---------------------update july 1994 stello v1.1-----------------------
  219.  
  220.   By popular demand (my own 8-) i have put the dialogs in windows.  This 
  221.   means,  that the program dosent hog the computer when showing dialogs. 
  222.   A  side  effect  is  that  under  normal  tos  it  almost  feels  like 
  223.   multitasking,  as the computer continues thinking while you are  using 
  224.   the  dialogs.  You  can now have 3D activator  and  indicator  buttons 
  225.   under normal tos, 3D checkboxes and niceline menus.
  226.  
  227. -------------------------------update end-------------------------------
  228.  
  229.   Multitasking:
  230.  
  231.   The  first  versions of my program had the normal structure of  a  gem 
  232.   program.  A event_multi loop, to interact with the user, and then when 
  233.   you  made a move the computer would begin thinking and  the  interface 
  234.   would  freeze  until the computer had  finished  claculating.  It  was 
  235.   rather  irritating to see the clock stop working,  not beeing able  to 
  236.   move the windows or do anything else while the computer was  thinking. 
  237.   I  had  to develop a technique to allow a sort  of  quasimultitasking. 
  238.   What  i did was to implement corutines.  I started by  implementing  a 
  239.   interrupt  routine  (timer  A)  to update the  clock  and  a  internal 
  240.   variable,  that  meant i didn' need to make a systemcall 1000 times  a 
  241.   second  to check the clock.  Of cause i could have made  a  even_multi 
  242.   call  in my recursive minimax routine,  but i didn't like to  mess  up 
  243.   the  nice  structure of my program by making interface  calls  in  the 
  244.   brain  of the program.  I was programming the interface and  brain  as 
  245.   two independent units.  Later on when i used the features of  multitos 
  246.   it turned out,  that it was much easier to implement multitasking as i 
  247.   already  had  programmed  the interface to look at  the  brain  as  an 
  248.   independent task.  In the minimax routine i check if the timeslice for 
  249.   the  brain  has  been  used,  if  so i do  a  context  switch  to  the 
  250.   event_multi  loop,  which checks if there are any messages.  If  there 
  251.   are it does the appropriate thing,  and then turns control over to the 
  252.   brain again.  In practice it seems just as multitasking. The interface 
  253.   and  the  brain  has  their own  stack  and  communicates  via  global 
  254.   variables.  Under Multitos the interface and the "brain" is running as 
  255.   two  independent  tasks.  This means,  that you cannot  interrupt  the 
  256.   brain,  by  for example showing a dialog in another program.  It  also 
  257.   means,  that you can move the windows,  update the clock, and anything 
  258.   else  the  interface will allow you.  Isn't  multitasking  wonderfull. 
  259.   Under multitos the brain and interface communicate via signals and  by 
  260.   sending messages via appl_write.  That is the reason,  that the  brain 
  261.   is  shown in the menu under multitos.  I had to make the brain  a  Gem 
  262.   application,  as  the interface is wating in a event_multi loop for  a 
  263.   message,  and  the  only  nice  way to tell  it  that  the  brain  has 
  264.   finished,  was to send it a message via appl_write.  I could have made 
  265.   a  global  variable,  and made a event_multi call with a  small  timer 
  266.   value,  but  my goal was a interface that didn't use  any  unnecessary 
  267.   time under multitos.  The program supports WINX by using wind_update's 
  268.   check and set mode.  This means,  that the interface doesn't stop when 
  269.   it tries to update the clock or the analyse window,  and someone  else 
  270.   has  control over the update semafor,  but just turns control over  to 
  271.   the  brain.  This solution isn't perfect,  but much nicer than to  see 
  272.   everything freeze.  The perfect solution is to use multitos. This must 
  273.   be  one of the first programs on the atari computers to make a  really 
  274.   good use of multitasking.  If you have a shell, and the program "top", 
  275.   you can follow how the program multitasks.
  276.  
  277.  
  278. Help for interface:
  279.  
  280. Menu "File"
  281.  
  282.   New game:
  283.     Starts a new game.
  284.  
  285.   Load game:
  286.     Loads a previosly saved game.
  287.  
  288.   Save game:
  289.     Saves current game.
  290.  
  291.   Stop:
  292.     Stop playing.
  293.  
  294. Menu "Game"
  295.  
  296.   Computer/human:
  297.     Play against the computer.
  298.  
  299.   Computer/computer
  300.     Computer playes itself.
  301.  
  302.   Human/human
  303.     Play against another person.
  304.  
  305. Menu "Level"
  306.  
  307.   Plyes ahead:
  308.     Computer thinks until a given search depht limit is reached.
  309.  
  310.   Time for one move:
  311.     Computer  thinks until a given time limit is reached.  It  tries  to 
  312.     make inteligent use of the time,  so it will somtimes respond faster 
  313.     when it sees, that it cannot make a deeper search within the current 
  314.     timelimit.
  315.  
  316.   Time for one game:
  317.     Set  the time for one game,  and the computer makes the best use  of 
  318.     this  time.  It means that it uses more time at stages in  the  game 
  319.     where  it is importent,  this is the level which should be  used  to 
  320.     play a normal game, the others are basicly for analyses.
  321.  
  322.   Openings lib:
  323.     Turns on/of the openings lib.
  324.  
  325. Menu "Move"
  326.  
  327.   Forward:
  328.     Move forvard one position in game:
  329.  
  330.   Back:
  331.     Move one position back in game.
  332.  
  333.   Move now:
  334.     Interrupt thinking, and move now.
  335.  
  336.   Change sides:
  337.     Change sides.
  338.  
  339.   Next best:
  340.     Make next best move.
  341.  
  342.   Hint:
  343.     Suggest a move.
  344.  
  345. Meny "Options"
  346.  
  347.   Show move list:
  348.     Show the moves, number of discs and clock in a window.
  349.  
  350.   Show analysis:
  351.     Show  some information concerning the game.  Value is  the  internal 
  352.     representation of how good the computer thinks it is doing. Positive 
  353.     means good for the computer.  When it is possible to completly solve 
  354.     the game,  you will see this value as either "XX e" or "XX p"  where 
  355.     "XX"  is the number of disks it nows it will (when both sides  plays 
  356.     perfect) win or lose by.  The "e" means estimated and the "p"  means 
  357.     precisely.  The  endgamesearch is split in two,  first it  tries  to 
  358.     find  a winning line,  and if such a line exists,  it then tries  to 
  359.     find  the line which wins by the largest margin.  Nodes is how  many 
  360.     nodes is visited in the tree.  Evaluations is how many nodes that is 
  361.     evaluated.  Time  is  in 1/100 sek.  "d" is the  current  depth  and 
  362.     current move. Move shows the current best line of moves.
  363.  
  364.   Reversi setup:
  365.     Make your own position.  Dobble click to empty the board. Left mouse 
  366.     button  puts  a black disc on the board,  right mouse puts  a  white 
  367.     disc  on board,  and pressing Control and left mouse  button  clears 
  368.     the board where the mouse currently is.
  369.  
  370.   Zero clock:
  371.     Reset clock.
  372.  
  373.   Print moves:
  374.     Print a list of the currently played moves.
  375.  
  376.   Load picture:
  377.     Loads  a bacground picture.  The picture format is any ximg  picture 
  378.     of  size  256x256  with the same number of  colors  as  the  current 
  379.     resolution. (St medium pics must be 256x128). 
  380.  
  381.   Configuration:
  382.     Here you can set some specific features,  such as the border of  the 
  383.     disc.  With  a  dark bacground picture it is good to  have  a  white 
  384.     border around the black discs. 
  385.  
  386.     Show  possible moves.  When this option is set,  the  mouse  changes 
  387.     form  whenever it crosses a position where it is possible  to  move. 
  388.     When  no moves are possible it changes to a "P" for  pass.  Continue 
  389.     playing   by  pressing  the  left  mouse  button  with  the   cursor 
  390.     positioned  over  the board.  Also pressing the right  mouse  button 
  391.     when  the cursor is placed over the board,  displayes  all  possible 
  392.     moves."Fast  move" sets whether or not there are a flashing disc  to 
  393.     indicate  where  there  was  moved.   Animation  turns  on/off  disc 
  394.     animation.  Sound turns on/off the sound.  Background picture  turns 
  395.     on/off the background picture.  Notation determinates which notation 
  396.     is  used.  3D  buttons  switches between  the  old  interface  style 
  397.     buttons,  and  the  new  3D buttons.  (Doesn't show  on  Falcon  and 
  398.     Multitos)
  399.  
  400.   Language:
  401.     Switch  the language.  Currently supported are English,  German  and 
  402.     Danish.
  403.  
  404.   Save configuration:
  405.     Saves   the  current   configuration.   Windows   positions,   size, 
  406.     backgroundpicture are saved.  The settings under "configuration" are 
  407.     saved,  and  level  of play is saved.  Different  configurations  is 
  408.     saved  for different screen resolutions,  which means you  can  save 
  409.     one  configuration  for  mono  and one  for  VGA  ect.  The  program 
  410.     determinates at startup which one it must use.
  411.   
  412. Future:
  413.  
  414.   Current plans for Stello 2.0 is
  415.  
  416.     - support drag an drop protocol
  417.     - load a game by clicking it
  418.     - implement the zerowidth alfa-beta mini-max algorithm for the
  419.       normal search (already implemented in the endgame search)
  420.     - implement hash tabels if it gives anything
  421.     - improving the brain (it can always get better can't it 8-)
  422.     - better output for the printer
  423.     - support for transcripted games
  424.     - whatever you suggests
  425.  
  426.   The  implementation of these improvements really is in your  hands,  i 
  427.   must  have a satisfactory response before i can find the time to  make 
  428.   them. A man must earn a living ;-). If there is enough of responses, i 
  429.   would  even  consider making other strategic games  such  as  chekers, 
  430.   five in a row or what you most would like, see REGISTER.TXT
  431.  
  432. Thanks and gretting too:
  433.  
  434.     Klaus Pedersen for beta testing.
  435.     The players on the socker team.
  436.     Helle Demant, Søren Warberg, Lone Poulsen and
  437.     Henrik Jensen for moral support.
  438.     Paul Rosenblaum for his excellent articel about Iago.
  439.     Sylvain Quin, Bruno de la Boisserie and Jean-Jacques Michel
  440.     for producing the excellent program Thor.
  441.     All my friends in Veflinge.
  442.     The twins. (Nobody can party like them.)
  443.     My parents and my brother.
  444.  
  445. Shareware: 
  446.  
  447.   STELLO  is  Shareware.  The program may only  be  distributed  without 
  448.   charge.  For example,  commercial public domain libraries,  magazines, 
  449.   publishing  companies  and software companies may only  spread  Stello 
  450.   with my prior written permission.  Stello may be uploaded to BBSs that 
  451.   do  not charge for downloads.  Both the program and the  documentation 
  452.   must  remain  together and unchanged.  The stello CFG  file  must  NOT 
  453.   under  any  circumstances  be distributed as  the  registered  version 
  454.   contains your personal key details.  It is very easy to register, just 
  455.   fill the formular in the file REGISTER.TXT,  and send it to me. I will 
  456.   then  send you a key,  which will free you from the annoying  register 
  457.   dialog that keeps popping up.
  458.  
  459. Bugs/comments:
  460.  
  461.   If you find a bug, or have any suggestions concerning the program, you 
  462.   are welcome to send me a letter.
  463.  
  464.   My adress is as follows:
  465.  
  466.           Claus J. Pedersen
  467.           Vædevej 42
  468.           5462 Morud
  469.           Denmark
  470.  
  471.   Or you can reach me on internet by E-mail at
  472.  
  473.           atari@imada.ou.dk
  474.  
  475. ----------------------------------------------------------------------
  476.  
  477.                 Hate has a reason for everything
  478.                 But love is unreasonable.
  479.   
  480. ----------------------------------------------------------------------
  481.  
  482.