home *** CD-ROM | disk | FTP | other *** search
/ The C Users' Group Library 1994 August / wc-cdrom-cusersgrouplibrary-1994-08.iso / vol_200 / 240_01 / backgmmn.doc < prev    next >
Text File  |  1987-07-30  |  14KB  |  317 lines

  1. /*
  2. **  backgmmn.doc - history file
  3.  
  4.    Program  : PC-Gammon IV with User-Defined ** COLOR **
  5.    Computer : 100% IBM PC compatibles 
  6.    Language : Microsoft C 4.00
  7.             :
  8.    Author   : David C. Oshel
  9.             : 1219 Harding Avenue
  10.             : Ames, Iowa 50010
  11.             : August 10, 1986
  12.  
  13.  
  14. HISTORY
  15. -------
  16. v7.0 6/13/87 - Ported from MSC 4.0 to Turbo C 1.0.  Generally an easy port,
  17.                but Turbo C has a number of undocumented macros, such as
  18.                min() and max() in stdlib.h, that were briefly a puzzle.
  19.                Also, MS C "signal" replaced by Turbo C "ctrlbrk", and various
  20.                other small edits such as "alloc.h" instead of "malloc.h",
  21.                "farfree" for "_ffree", etc.  Turbo C introduced a number
  22.                of functions or macros which collided with names I had
  23.                already defined -- esp. sleep(), peek(), min(), max().
  24.  
  25.                Compile the CIAO.C module using UNSIGNED CHARS, as there
  26.                is a difference in implementation there somewhere.  This
  27.                may have introduced a bug into Typeafile, which no longer
  28.                wordwraps properly.  Borland seems to have found ways to
  29.                prefer idiosyncrasy even in ANSI standard C.
  30.  
  31.                The program runs noticeably faster -- sounds are higher
  32.                pitched, play is excessively rapid, etc. -- under Turbo C.
  33.  
  34.  
  35. v6.0 9/08/86 - Now linking to CIAO.LIB, with fast video RAM output
  36.  
  37. v5.3 9/01/86 - Minor change, just added typeafile for the user's manual.
  38.                Typeafile is a new addition to the IO.LIB.
  39.  
  40. v5.2 8/21/86 - Got rid of clairol.obj, in favor of an improved io.lib.
  41.                Includes ambiguity test in clairol(), adds a mode
  42.                argument to the vid_init() routine, adds a vid_exit()
  43.                routine.  The library is smaller, and allows a smaller
  44.                obj file where only sound or keyin is needed.  The clairol()
  45.                function now does a wputs("^0"); on exit to ensure the new 
  46.                normal mode is set.
  47.  
  48.                PC-Gammon now allows a command line parameter.  
  49.                Sets video mode 2 instead of video mode 3, if present.  
  50.                Usage: backgmmn b&w
  51.  
  52.                Actually, any argument will do, but document "b&w" for users.
  53.  
  54.  
  55.  
  56. v5.1 8/18/86 - minor add: "^0" to mycount(), yrcount() format strings
  57.                minor edits in backgmmn.h to remove obsolete function decls
  58.  
  59.                Note that wprintf("^%d", cnt); is DANGEROUS, depending on
  60.                how the cnt argument gets formatted.  The correct usage in
  61.                this case is wprintf("^0%d", cnt);, with the zero!  This
  62.                ensure that the ^ escape finds a legitimate command char in
  63.                the anticipated position.
  64.  
  65.                Note that the current main() and command() fns in bg0.c were
  66.                split apart in version 5.0:  vid_init() was in the wrong
  67.                place to correctly save the startup screen for cga!  The
  68.                public domain version is ok, has the change.  Note also that
  69.                setting video mode 3 absolutely will clear the cga startup
  70.                screen and send cursor home, so there's no point saving it,
  71.                but we do it anyway.  It's a good screen to come home to.
  72.  
  73.                TO DO: ruminate on improvements in playing strategy.  Torve
  74.                seems unexpectedly strong, lately.  Have I overlooked some
  75.                strength not noted there before?  Need to pin that last bug
  76.                in the Arrange command, if I can figure out what it is!  Is
  77.                Torve reacting to full moon?  Are small but noticeable changes 
  78.                in strategy the result of using a $600 compiler for a change?
  79.                Have I finally gone mad?
  80.  
  81.  
  82. Version 5.0  August 17, 1986, the LAST public domain version of PC-Gammon!
  83.  
  84.    a) Reorganized the code into four sensible modules, with a
  85.       common header file, for use with MAKE.  The source files are
  86.       backgmmn.h, bg0.c, bg1.c, bg2.c, bg3.c.  Supporting modules
  87.       are clairol.obj, and its .h file.
  88.  
  89.    b) Revised code to use the new wprintf() function. (<stdarg.h> in
  90.       Microsoft C 4.0 is magic!)
  91.  
  92.       Simplified the savescreen(), restorescreen() calls to do automatic
  93.       heap allocation/free.
  94.  
  95.    c) Added the CLAIROL module to change screen attributes.
  96.       (Combined module from CURSES.C, SOUND.C., plus clairol() routine.)
  97.  
  98.    d) In other words, PC-Gammon now has full color support for the cga 
  99.       and color monitor.  WITHOUT sacrificing special support for the
  100.       monochrome adapter.
  101.  
  102.  
  103.  
  104. Version 4.4  August 12, 1986
  105.  
  106.    a) Revised BGTOKENS.C to default to my preferred stones.
  107.    b) Added H(ues stub to main command line, if not monochrome.
  108.  
  109. Version 4.3  August 10, 1986
  110.  
  111.    a) Minor changes to CURSES.OBJ file.  Variables for screen
  112.       attributes can support color selection in a H(ues command.
  113.       Appended the old GETMS file to CURSES.  Some changes in
  114.       argument order for windowing commands (in the direction
  115.       of easier to remember and more consistent).
  116.  
  117. Version 4.2  August 3, 1986
  118.  
  119.    a) V.4.1 FAILED its test on the cga card!  Modified CURSES.OBJ to
  120.       correctly set 80x25 text 16/8 mode on PCs with cga cards.  Moved
  121.       call to title() into setup(), so the change is noted before
  122.       anything is output to screen.  Tested results on NCR PC Model 3
  123.       with cga, and on Epson Equity I.  Passed with flying colors (for
  124.       B&W, that is)!
  125.  
  126. Version 4.1  August 2, 1986
  127.  
  128.    a) Minor revision to CURSES.OBJ allows wink() to handle '\b'.
  129.       Discovered that Microsoft C 3.00 interprets '\008' as '\0', 
  130.       not '\b', so changed the backgammon source code accordingly.
  131.  
  132. Version 4.0  August 2, 1986 (PC clone version Gammon IV.40)
  133.  
  134.    a) Added sound and ultra-fast screen io.  Makes it a game for 100% 
  135.       clones only, now.  Totally ignores ANSI.SYS, if present.
  136.  
  137.    b) Altered keyin() and getms() to accept function parameters for
  138.       the wait-for-input and the do-on-ESC routines.  For separate 
  139.       compilation later (maybe).
  140.  
  141.    c) Revised references to '\n' in user input routines because
  142.       keyin() does not return newline when it encounters ENTER. 
  143.       In effect, the "All ok?" question now accepts ENTER and does
  144.       not force users to type 'Y'.  
  145.  
  146.    d) Fixed a bug in user's dice routine.  
  147.  
  148.    e) Known BUG:  Computer does not come in from the bar on the first 
  149.       roll after Arrange-ing the board.
  150.       
  151.  
  152.  
  153. Version 3.1:  July 29, 1986 (MS-DOS version Gammon IV.31)
  154.  
  155.    a) Changed the keyin() routine to correctly handle Fn key inputs.
  156.       Extended ASCII is returned with high bit set from now on.
  157.  
  158.  
  159.  
  160. Version 3:   July 27, 1986 (Original MS-DOS version Gammon IV.30)
  161.  
  162.    a) Numerous minor changes to the code reflect differences in
  163.       C compilers and their standard libraries.   In particular,
  164.       Microsoft C implements some functions as macros -- locating all
  165.       the side effects of this approach can be troublesome when
  166.       porting.
  167.  
  168.       Otherwise, this is just a "quick and dirty" port; old code which
  169.       implemented for the Lear-Siegler ADM-3A terminal's lack of a
  170.       clear-to-end-of-line command has not been optimized (or cleaned
  171.       up, depending on your point of view).
  172.  
  173.    b) The graphics toggle (CP/M Kaypro) is a hilite toggle (MS-DOS ANSI). 
  174.  
  175.    c) User bailout is ESC.  Control-C is trapped by MS-DOS and halts
  176.       the program.
  177.  
  178.    d) The "kill typeahead" feature (in BG0.C) is commented out to improve
  179.       play under the abominably slow conditions of IBM-clone i/o.
  180.  
  181.  
  182.  
  183. Version 2:   March 28, 1986 (CP/M)
  184.  
  185.    a) Fixed the bug in which the doubling cube might revert to its
  186.       default value if the computer took back a move, and if the cube
  187.       had been doubled one or more times during the opening roll-off
  188.       but not yet offered.
  189.  
  190.    b) Fixed an odd bug in the Arrange command which occasionally caused 
  191.       stones to switch allegiance to the opponent's color, or else to
  192.       mysteriously multiply to more than 15 on a side.
  193.  
  194.    c) An improved error handler now hints that BAR and HOME are words
  195.       used in the game; also, slows down the incorrect entry routine so
  196.       that it is less mysterious than before.  
  197.  
  198.    d) Added a Graphic toggle to main command line.  Same as Control-K,
  199.       as in previous versions; turns on/off the Kaypro '84 video graphics;
  200.       uses the alternate token set defined in the CRT module below.
  201.  
  202.    e) Changed the break character back to Control-C; there is a
  203.       proximity problem in keyboarding the escape key on a Kaypro
  204.       keyboard.  (Various CP/M versions may have used either ESC or 
  205.       Control-C, depending.)
  206.  
  207.    f) There is no longer a sanction against cheating; if you bail
  208.       out during play and re-Arrange the stones, your opponent
  209.       does not change.
  210.  
  211.    g) As before, the computer will not always take (or find) a forced 
  212.       move.  The rule is that the player must take both dice if possible,
  213.       or the larger if both are possible singly but not together.
  214.       The playing algorithm attempts to find the legally required move, 
  215.       but will sometimes fail.  It is sometimes advantageous to avoid a
  216.       forced move but the computer cannot make that distinction in this
  217.       version; the program allows the same lenience for the human player.
  218.  
  219.       The cube is doubled when doubles are thrown during the opening
  220.       rolloff to decide who goes first.  However, if the cube reaches 8,
  221.       further pairs on the dice during rolloff have no effect.
  222.  
  223.       Gammon IV knows all the other OFFICIAL rules of the game; 
  224.       U.S. Navy and/or Saloon rules don't count.
  225.  
  226.    h) Improved coding in some routines, especially putstone(), which was
  227.       far more baroque than necessary.  There is also some occasional 
  228.       re-coding, where I could not prevent myself.  The game strategy
  229.       has not been changed, mostly because I don't fully understand it
  230.       anymore, even though the documentation there is better than usual.
  231.       It was written months ago in a white heat of inspiration; but I
  232.       feel reluctant to submit myself to that strain again, without the
  233.       prospect of remuneration.
  234.  
  235.  
  236. INTRODUCTION
  237. ------------
  238.  
  239. Gammon IV is a full-screen backgammon game.  I wrote it for CP/M 
  240. some time ago, and have finally gotten around to porting it to MS-DOS.
  241.  
  242. Gammon IV has always been designed to run nicely on the lowest common
  243. denominator of available computer terminals.  The CP/M version has a
  244. number of sophisticated i/o features which are nevertheless compatible 
  245. with the Lear-Siegler ADM-3A (extremely) dumb terminal.
  246.  
  247. This version assumes 100% IBM-compatible io, for screen and sound.
  248. Screen control is via ROM BIOS calls, sound control uses port io.
  249.  
  250.  
  251.  
  252.  
  253. DISCUSSION ABOUT THE PORT FROM CP/M TO MS-DOS (Gammon IV.30)
  254. ------------------------------------------------------------
  255. This is a straightforward "port" from CP/M to MS-DOS.  GAMMON IV was
  256. originally written for the Kaypro 10.  It has now been translated for
  257. the Epson Equity I, or any IBM-PC clone with an ANSI terminal (below).
  258.  
  259. The original language was Toolworks C/80, version 3.1 (CP/M), the 
  260. current language is Microsoft C, version 3.00 (MS-DOS).
  261.  
  262. Program modules have been altered to account for the PC-clone
  263. environment.  
  264.  
  265. In addition, certain in-line assembly kludges which were required in 
  266. the CP/M version have now been replaced by pure C code in the MS-DOS 
  267. version; i.e., there are some minor changes involving setjmp() and 
  268. longjmp(), which now control program logic in a more portable fashion.  
  269.  
  270.  
  271.  
  272.  
  273. DISCUSSION OF THE PROGRAM
  274. _________________________
  275.  
  276. Gammon IV is probably the best FREE backgammon game ever written....
  277. I'm not modest!  I wrote it because I was disgusted with the price 
  278. and dullness of all other public domain programs which allegedly play 
  279. backgammon. 
  280.  
  281. This program has THREE DIFFERENT PLAYING STYLES, any one of which can
  282. consistently beat a novice player, and occasionally beat a good player.
  283. In all three levels, the computer's strategy can even seem brilliant;
  284. there is nothing routine about it.
  285.  
  286. This version incorporates a few minor changes and bug fixes which make it
  287. different from previous editions which have appeared on various bulletin 
  288. boards and club offerings around the country.  This is a public domain
  289. program.  Feel free to distribute or improve it.  Credit to the original
  290. author (me) will be appreciated, but is not strictly required since the
  291. copyright owners are abnormally mild-mannered (and extremely distant;
  292. see Acknowledgments, below.)
  293.  
  294. Acknowledgments:
  295.  
  296.    The opening dialogue, in which you chose your computer opponent,
  297.    is freely adapted from Alexei Panshin's long out-of-print, and
  298.    now classic, "Star Well" travelogues.  Scholars of computer history 
  299.    will recognize many allusions to this same opus in various passages 
  300.    of Mike Goetz's 550-point Adventure (especially in the Ice Caverns!).  
  301.  
  302.    The Xochitl Sodality, which owns the copyright on Gammon IV, is a 
  303.    philanthropic society first publicized by Panshin.  Persons who wish 
  304.    to obtain information on site licensing for Gammon IV should contact 
  305.    the Monist Association imaginary properties secretary at the following 
  306.    address:
  307.                       Monist Association I.P.S.
  308.                       c/o Xochitl Sodality
  309.                       Semichastny House
  310.                       Delbalso, Nashuite Empire
  311.  
  312.  
  313. */
  314.  
  315. /* eof: backgmmn.doc */
  316.  
  317.