home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / games / volume13 / okbridge / part06 / input.h < prev    next >
C/C++ Source or Header  |  1992-01-12  |  8KB  |  232 lines

  1. /* input.h -- interface for input module of bridge game.
  2.  ! 
  3.  ! Copyright (C) 1990,1991 by Matthew Clegg
  4.  ! 
  5.  ! This program may be copied and distributed freely.  Please do not
  6.  ! charge money for this program or for any program derived from it.
  7.  ! If you modify this program, then include a notice stating plainly
  8.  ! that your program is derived from the okbridge program and is not
  9.  ! the same as the official okbridge program.
  10.  !
  11.  ! I welcome any suggestions for improvement to okbridge, and 
  12.  ! I would be especially happy to receive improved source code.
  13.  ! If you have comments or suggestions, or if you would like to
  14.  ! join the okbridge mailing list, then write to
  15.  !
  16.  !   mclegg@cs.ucsd.edu
  17.  !
  18.  *
  19.  * This file defines the routines for handling the player-input
  20.  * in the bridge game.
  21.  *
  22.  */
  23.  
  24. /* The main job of the input module is to return a record indicating
  25.  . a player's input.  However, the input module also controls 
  26.  . some of the bookkeeping and communications aspects of the game.  The
  27.  . commands having index 100 or greater are handled internally to the
  28.  . input module and are not ever passed back to the calling routines.
  29.  */
  30.  
  31. #define CMD_ERROR    000
  32. #define CMD_VULN    001
  33. #define CMD_RDEAL    002
  34. #define CMD_BID        004
  35. #define CMD_PLAY    010
  36. #define CMD_FINISH    020
  37.  
  38. #define CMD_HELLO    0000000100
  39. #define CMD_ACK        0000000200
  40. #define CMD_TALK    0000000400
  41. #define CMD_HELP    0000001000
  42. #define CMD_QUIT    0000002000
  43. #define CMD_BELL    0000004000
  44. #define CMD_PING    0000010000
  45. #define CMD_ECHO    0000020000
  46. #define CMD_PROMPT      0000040000
  47. #define CMD_CLAIM    0000100000
  48. #define CMD_RESP    0000200000
  49. #define CMD_SCORE       0000400000
  50. #define CMD_LOG         0001000000
  51. #define CMD_DEAL    0002000000
  52. #define CMD_LOAD    0004000000
  53. #define CMD_SAVE    0010000000
  54. #define CMD_REPLAY      0020000000
  55. #define CMD_COMMENT    0040000000
  56. #define CMD_DEFAULT     0100000000
  57. #define CMD_REVIEW      0200000000
  58.  
  59. /* #define MAX_COMMANDS    25 */
  60.  
  61. #define VERSION_LENGTH    10
  62. #define VERSION_NAME_LENGTH 20
  63. #define MESSAGE_LENGTH    75
  64. #define TOPIC_LENGTH    20
  65. #define FILENAME_LENGTH 60
  66.  
  67. typedef struct player_command_struct {
  68.     long    command;
  69.     int    player_no;
  70.     union  {
  71.         int     bid;
  72.         int     card;
  73.         char     deal [52];
  74.         char     version_name [VERSION_NAME_LENGTH];
  75.         char    message [MESSAGE_LENGTH];
  76.         char    topic [TOPIC_LENGTH];
  77.         char    filename [FILENAME_LENGTH];
  78.         int    bell;
  79.         int    ping_source;
  80.         int     prompt;
  81.         int     tricks;
  82.         int    response;
  83.         int     scoring;
  84.         int    nhands;
  85.         int    vulnerable;
  86.         int     defaalt;
  87.     } data;
  88. } *player_command;
  89.  
  90. typedef struct input_buffer_struct {
  91.     char    buf[91];
  92.     int    row, col, length;    /* aspects of the screen display. */
  93.     int    pos;            /* cursor position in buffer. */
  94.     int     defaulted;              /* true if input buffer contains the
  95.                        default input. */
  96. } *input_buffer;
  97.  
  98.  
  99. #ifndef _INPUT_
  100.  
  101. extern parse_player_command ();
  102. /* void parse_player_command (parse_string ps, player_command pc); */
  103. /* parse the string ps into a player command, which is stored in pc.
  104.  * If an error is encountered, then an error message is stored in the
  105.  * global variable parsing_errmsg.
  106.  *
  107.  * The syntax of a player command is as follows:
  108.  *
  109.  * 0.  VULN  NONE | EW | NS | BOTH
  110.  * 1.  RDEAL <cards>
  111.  * 2.  BID  (<level> (<suit> | <notrump>)) | <pass> | <double> | <redouble>
  112.  * 3.  PLAY <suit> <card>
  113.  * 4.  CLAIM <ntricks>
  114.  * 5.  FINISH YES | NO
  115.  * 6.  TALK message
  116.  * 7.  HELLO version name
  117.  * 8.  ACK   version name
  118.  * 9.  HELP [topic]
  119.  * 10. BELL [ON | OFF]
  120.  * 11. PROMPT [ON | OFF]
  121.  * 12. PING
  122.  * 13. ECHO [player]
  123.  * 14. SCORE mode
  124.  * 15. LOG <log-file>
  125.  * 16. DEAL [nhands]
  126.  * 17. LOAD filename
  127.  * 18. SAVE filename
  128.  * 19. REPLAY filename
  129.  * 20. COMMENT broadcast-message
  130.  * 21. QUIT
  131.  *
  132.  * where:
  133.  *  <cards> = A string over the alphabet {0,1,2,3} containing exactly
  134.  *            thirteen occurrences of each symbol.
  135.  *  <level> = 1 | 2 | 3 | 4 | 5 | 6 | 7
  136.  *  <suit>  = C | D | H | S | CLUB[S] | DIAMOND[S] | HEART[S] | SPADE[S]
  137.  *  <notrump> = N | NT | NOTRUMP
  138.  *  <pass> = P | PASS
  139.  *  <double> = X | DOUBLE
  140.  *  <redouble> = XX | REDOUBLE
  141.  *  <card> = <suit> <rank>
  142.  *  <rank> = 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | T | J | Q | K
  143.  *             | JACK | KING | QUEEN
  144.  *  <tricks>  = an integer in the range 0 - 13.
  145.  *  <version> = a string indicating the revision level of the program
  146.  *  <name>    = the name of a player
  147.  *  <player>  = NORTH | EAST | SOUTH | WEST
  148.  *  <mode>    = RUBBER | CHICAGO
  149.  */
  150.  
  151.  
  152. extern clear_input_buffer ();
  153. /* void clear_input_buffer (input_buffer ib); */
  154. /* Clears the screen display representing the input buffer, and
  155.  * resets the cursor position to the beginning of the buffer.
  156.  */
  157.  
  158. extern int update_input_buffer ();
  159. /* int update_input_buffer (input_buffer ib, int ch); */
  160. /* Adds the character ch to the input buffer, or if it is a control
  161.  * character, then modifies the cursor position or buffer appropriately.
  162.  * If the user has indicated he is through entering input, by entering
  163.  * i.e. <^J> or <^M>, then TRUE is returned.  Otherwise, FALSE is
  164.  * returned.  The other control characters which are accepted at this
  165.  * point are:
  166.  *    <^H>    causes last character in buffer to be erased.
  167.  *     <^R>    causes the screen to be refreshed.
  168.  *    <DEL>    causes last character in buffer to be erased.
  169.  *    <ESC>    causes entire buffer to be erased.
  170.  * Printable characters are entered into the buffer if there is room.
  171.  * All other characters are ignored.
  172.  */
  173.  
  174. extern Initialize_Input ();
  175. /* void Initialize_Input (void); */
  176. /* This routine should be called once when the program first begins,
  177.  *  in order to set up the input buffers correctly.
  178.  */
  179.  
  180.  
  181. extern input_hand ();
  182. /* void input_hand (deal new_deal); */
  183. /* Inputs a new deal into the data structure 'new_deal'.  If the dealer
  184.  * is the local_player, then the deck is shuffled locally and the deal
  185.  * is messaged to the other players.  Otherwise, we wait for the other
  186.  * players to send us the new deal.
  187.  */
  188.  
  189. extern int input_bid ();
  190. /* int input_bid (int rmt_player, int minimum_bid, int double_ok,
  191.      int redouble_ok); */
  192. /* Inputs a bid from the player 'rmt_player'.  If rmt_player is the
  193.  * local player, then we only accept a contract bid which is at least as
  194.  * high as minimum_bid, and we only accept a double or redouble bid if
  195.  * respectively double_ok and redouble_ok is true.  However, if rmt_player
  196.  * is not the local player, then we wait for the bid to come from the
  197.  * network.  In this case, we assume that the bid we receive is legal.
  198.  */
  199.  
  200. extern int input_play ();
  201. /* int input_play (int rmt_player, hand legal_plays); */
  202. /* Inputs a play from the player 'rmt_player'.  If rmt_player is the
  203.  * local player, then we only accept a play which is listed as one of the
  204.  * cards in 'legal_plays'.  However, if rmt_player is not the local player,
  205.  * then we wait for the play to come from the network.  In this case, we
  206.  * assume that the play is legal.  If the return value is non-negative,
  207.  * then it indicates the card which has been played.  Otherwise,
  208.  * the return value is of the form -k-1, where k is the number of
  209.  * additional tricks conceded to the declaring team in this hand.
  210.  */
  211.  
  212. extern input_acknowledgement ();
  213. /* void input_acknowledgment (int line); */
  214. /* Displays the message "PRESS RETURN TO CONTINUE" on the given screen line,
  215.  * unless line == -1, in which case the message is displayed on the
  216.  * status line.  Then waits for the user to press, RETURN.
  217.  */
  218.  
  219. extern send_player_message (); 
  220. /* send_player_message (char *message); */
  221. /* Transmits the message to the other players through the network. 
  222.  * Prepends the name of the player to the message before transmitting.
  223.  */
  224.  
  225. extern Broadcast_Comment ();
  226. /* Broadcase_Comment (char *message); */
  227. /* Transmits the message to the other players as a comment which is
  228.  * displayed in the talk window.
  229.  */
  230.  
  231. #endif
  232.