]> git.cworth.org Git - ttt/blob - ChangeLog
2005-12-13 Carl Worth <cworth@cworth.org>
[ttt] / ChangeLog
1 2005-12-13  Carl Worth  <cworth@cworth.org>
2
3         * TODO: Note that ttt-server should retry a couple times if its
4         port is not available.
5         
6         * src/test-board.c: (main): Remove debug print messages.
7         
8         * src/ttt-board.c: (ttt_board_make_move): Tighten up the code just
9         a little bit more.
10
11 2005-12-10  Richard D. Worth  <richard@theworths.org>
12
13         * TODO: check off INVITE, RETRACT, DECLINE, Game Invitation
14         notices, Connection setup errors, NO_INVITE, User information
15         errors.
16
17         * src/ttt-client.c: (_ttt_client_execute_helo),
18         (_ttt_client_execute_statistics), (_ttt_client_execute_message),
19         (_ttt_client_execute_help), (_ttt_client_execute_version),
20         (_ttt_client_execute_quit), (_ttt_client_execute_invite),
21         (_ttt_client_execute_accept), (_ttt_client_execute_retract),
22         (_ttt_client_execute_decline), (_read_request),
23         (_execute_request),
24         (_handle_requests_thread): Whitespace changes. Use exported get
25         methods (get_username, get_num_wins). Use strcasecmp in place of
26         toupper. Finish RETRACT, DECLINE.
27
28         * src/ttt.h:
29         * src/ttt-server.h:
30         * src/ttt-server.c: (ttt_server_init),
31         (ttt_server_register_client), (ttt_server_unregister_client),
32         (ttt_server_verify_username),
33         (ttt_server_get_client_from_username), (ttt_server_add_invite),
34         (ttt_server_remove_invite): Add invite struct. Make username case
35         insensitive (missed in register_client). Implement add_invite,
36         remove_invite. Moved statistics to ttt-client.c
37
38 2005-12-09  Carl Worth  <cworth@cworth.org>
39
40         * src/ttt-server.c (ttt_server_unregister_client): Move client has
41         left message to stderr so it makes it to the log file too.
42
43 2005-12-09  Carl Worth  <cworth@cworth.org>
44
45         * src/ttt-server.c (main): Put the initial server started message
46         in the log file as well.
47
48 2005-12-09  Carl Worth  <cworth@cworth.org>
49
50         * src/ttt-args.h:
51         * src/ttt-args.c: (ttt_args_help), (ttt_args_parse): Add a -u,
52         --user option for controlling the uid under which the server
53         process runs.
54         
55         * src/ttt.h:
56         * src/ttt-server.c: (ttt_server_register_client), (main): Recert
57         the dup of stdout which wasn't working. Instead just print client
58         join information on stderr so that it goes into the log. Implement
59         support for the user option by calling setuid to drop root
60         privileges the process might start out with.
61
62 2005-12-09  Bryan Worth  <bryan@theworths.org>
63         * src/ttt-curses-client.c: added error checking to ttt_create_client
64         call. Added ability to escape server commands by prepending with "/".
65         Added ability so override port number with port=xxxx entry in
66         ~/.ttt/client.conf.
67
68 2005-12-08  Carl Worth  <cworth@cworth.org>
69
70         * src/ttt-server.c (main): When detached dup stdout to stderr so
71         that everything appears in the log file.
72
73 2005-12-08  Carl Worth  <cworth@cworth.org>
74
75         * src/ttt-args.h:
76         * src/ttt-args.c: (ttt_args_help), (ttt_args_parse): Add
77         -d,--detach and --pid-file=FILE options for running the server as
78         a daemon.
79         
80         * src/ttt-server.c: (ttt_server_statistics),
81         (ttt_server_verify_username), (_detach_and_write_child_pid_to),
82         (main): Add support for detaching and writing out the child PID to
83         a file.
84
85         * src/x.h:
86         * src/x.c: (xfopen), (xdup2): Two new x-functions.
87
88 2005-12-08  Carl Worth  <cworth@cworth.org>
89
90         * src/ttt-args.c: (ttt_args_help), (ttt_args_parse):
91         * src/ttt-args.h:
92         * src/ttt-server.c: (ttt_server_statistics),
93         (ttt_server_verify_username), (_detach_and_write_child_pid_to),
94         (main):
95         * src/x.c: (xfopen), (xdup2):
96         * src/x.h:
97
98 2005-12-08  Bryan Worth  <bryan@theworths.org>
99         * src/ttt-curses-client.c: Multiple improvements!
100         Username taken from USER environment variable and stored as
101         preference in ~/.ttt/client.conf (username=xxxxxx). Backspace
102         should now work correctly with all term types. Status messages
103         display in seperate area. "MESSAGE" reply from server is
104         suppressed. Eliminated most global variables.
105
106
107 2005-12-08  Carl Worth  <cworth@cworth.org>
108
109         * src/Makefile.am: Fix rule to auto-generate ttt-lex.h.
110
111         * src/ttt-lex.h: Remove generated file from revision control.
112
113         * src/ttt-lex.l: Add copyright/license blurb.
114
115         * src/ttt-lex.l:
116         * src/ttt-client.c: (yy_init_globals), (use_yy_init_globals):
117         Shut off some annoying compiler warnings due to flex bugs (only
118         one still remains).
119
120 2005-12-07  Richard D. Worth  <richard@theworths.org>
121
122         * PROTOCOL: Remove unused error NOT_IN_GAME. Add error
123         NOT_VALID_MOVE.
124
125         * TODO: Add error NOT_VALID_MOVE.
126         
127         * src/ttt-error.h:
128         * src/ttt-error.c: (ttt_error_string): Add section comments. Add
129         error NOT_VALID_MOVE.
130
131 2005-12-06  Bryan Worth <bryan@theworths.org>
132         * src/ttt-error.c: fixed missing errors (NO_INVITE, NO_GAME)
133
134 2005-12-06  Richard D. Worth  <richard@theworths.org>
135
136         * PROTOCOL: Add error NO_INVITE
137         
138         * TODO: Uncheck INVITE, ACCEPT
139         
140         * src/ttt-error.c: (ttt_error_string): Add errors NO_INVITE,
141         NO_GAME
142
143         * src/ttt-client.c: (_ttt_client_execute_message),
144         (_ttt_client_execute_help), (_ttt_client_execute_version),
145         (_ttt_client_execute_invite), (_ttt_client_execute_accept),
146         (_ttt_client_execute_retract), (_ttt_client_execute_decline):
147         Whitespace changes. Partially implement RETRACT, DECLINE.
148
149 2005-12-05  Richard D. Worth  <richard@theworths.org>
150
151         * PROTOCOL: Fill some missing possible error occurrences.
152
153         * TODO: Check off INVITE, ACCEPT, ERROR COMMAND, ERROR NO_USER
154         
155         * src/ttt-server.h:
156         * src/ttt-server.c: (ttt_server_verify_username):
157         * src/ttt-client.c: (_ttt_client_execute_help),
158         (_ttt_client_execute_invite), (_ttt_client_execute_accept):
159         Implement INVITE, ACCEPT
160
161 2005-12-05  Richard D. Worth  <richard@theworths.org>
162
163         * src/ttt-curses-client.c: (mvprintstr), (mvwprintstr), (wprint),
164         (main), (finish): Whitespace changes.
165
166 2005-12-04  Bryan Worth <bryan@theworths.org>
167         * src/ttt-socket.c: (ttt_socket_create_client) fixed socket to be
168         non-blocking. (ttt_socket_read) added return value for number
169         of bytes read
170         * Makefile.am: added necessary code for new curses-client program.
171         * src/ttt-curses-client: new ncurses based client
172
173 2005-12-03  Richard D. Worth  <richard@theworths.org>
174
175         * PROTOCOL: Add RETRACT, DECLINE. Add game identifier for all game
176         commands.
177         
178         * TODO: Add RETRACT, DECLINE, notices.
179
180 2005-12-03  Richard D. Worth  <richard@theworths.org>
181
182         * PROTOCOL: Add underscores to error codes. Add STATISTICS
183         command. Remove statistics from WHO.
184
185         * TODO: Add STATISTICS. Check off STATISTICS.
186         
187         * src/ttt.h: Define TTT_SERVER_PROTOCOL_VERSION for VERSION.
188
189         * src/ttt-error.c: (ttt_error_string): Add underscores to error
190         codes.
191
192         * src/ttt-client.h:
193         * src/ttt-client.c: (_ttt_client_execute_helo),
194         (_ttt_client_execute_statistics), (_ttt_client_execute_message),
195         (_ttt_client_execute_version), (_ttt_client_execute_quit),
196         (_ttt_client_init), (_ttt_client_fini), (ttt_client_get_username),
197         (ttt_client_set_username): Rename client->name to
198         client->username. Implement STATISTICS. Complete implementation of
199         VERSION.
200
201         * src/ttt-server.h:
202         * src/ttt-server.c: (ttt_server_register_client),
203         (ttt_server_unregister_client), (ttt_server_who),
204         (ttt_server_statistics): Track rename of client->name to
205         client->username. Add server helper for STATISTICS.
206
207 2005-12-02  Richard D. Worth  <richard@theworths.org>
208
209         * TODO: Check off Global commands, HELP, VERSION.
210         
211         * src/ttt-client.c: (_ttt_client_execute_message),
212         (_ttt_client_execute_help), (_execute_request): Whitespace
213         changes. Implement HELP with usage and short description.
214
215         * src/ttt-server.c: Update the server welcome message.
216
217 2005-12-01  Richard D. Worth  <richard@theworths.org>
218
219         * TODO: Check off NOTICE MESSAGE, ERROR NONAMESET.
220
221         * PROTOCOL: Add NONAMESET error in possible errors where
222         applicable. Add description for MESSAGE.
223         
224         * src/ttt-token.h: Add token typedef. Rename token type enum.
225
226         * src/ttt-lex.l: Add support for quoted string as single token.
227         * src/ttt-lex.h: Autogenerated.
228
229         * src/ttt-client.c: (_ttt_client_execute_helo),
230         (_ttt_client_execute_who), (_ttt_client_execute_message),
231         (_ttt_client_execute_help), (_ttt_client_execute_version),
232         (_ttt_client_execute_quit), (_ttt_client_init), (_read_request),
233         (_execute_request): Whitespace changes. Implement VERSION,
234         HELP. Change args_required back to args_min and args_max (see
235         PROTOCOL\HELP). Modify MESSAGE to accept one token arg and quote
236         output. Return NONAMESET error where applicable.
237
238 2005-11-29  Carl Worth  <cworth@cworth.org>
239
240         * src/ttt-socket.h:
241         * src/ttt-socket.c: (ttt_socket_create_client): New function for
242         creating a client socket.
243
244         * src/x.h:
245         * src/x.c: (xconnect): Add xconnect. Return a couple of useful
246         error status values so that callers can recover on connection
247         refused or host unreachable.
248
249         * src/ttt.h: Add TTT_STATUS_CONNECTION_REFUSED and
250         TTT_STATUS_NETWORK_UNREACHABLE.
251
252 2005-11-28  Kevin Worth  <kevin@theworths.org>
253
254         * PROTOCOL: Changed board cell numbering to start with zero
255         instead of one.
256         
257         * src/Makefile.am: 
258         * src/test-board.c: (main): Added new file for testing.
259         
260         * src/ttt-board.c: (ttt_board_init), (ttt_board_to_string):
261         * src/ttt-board.h: Implemented board_to_string.
262
263 2005-11-28  kevin worth  <kevin@theworths.org>
264
265         * src/ttt-board.c:
266         * src/ttt-board.h: Moved struct def from ttt-board.h into
267         ttt-board.c to make it private
268         
269         * src/ttt-lex.h:
270         Autogenerated
271
272 2005-11-28  Carl Worth  <cworth@cworth.org>
273
274         * TODO: Add instructions on using the first letter of our names to
275         indicate we are working on something.
276
277 2005-11-25  Bryan Worth <bryan@theworths.org>
278         * ttt-client.c, ttt-server.c, ttt-error.c changed line breaks to 
279         <crlf> (\r\n) for network compatibility
280
281 2005-11-25  Bryan Worth <bryan@theworths.org>
282         * TODO: checked off NOTICE USER and NOTICE QUIT
283         *src/ttt-client.c: (_ttt_client_execute_helo): implement NOTICE USER
284         *(_ttt_client_execute_quit): implement NOTICE QUIT
285
286 2005-11-25  Bryan Worth <bryan@theworths.org>
287         * TODO: checked off MESSAGE
288
289         *src/ttt-client.c: (_ttt_client_execute_message): Implement MESSAGE
290         *(_execute_request): changed arg_required to behave as a minimum
291         instead of an absolute number to allow optional arguments such as 
292         multi-word messages
293
294 2005-11-25  Richard D. Worth  <richard@theworths.org>
295
296         * TODO: checked off WHO, QUIT, ERROR SYNTAX
297
298         * src/ttt-client.c: (_ttt_client_execute_helo), (_ttt_client_init),
299         (ttt_client_get_num_wins):
300         * src/ttt-client.h:
301         * src/ttt-server.c: (ttt_server_who): Whitespace changes. Add
302         missing player win count for WHO.
303
304 2005-11-24  Richard D. Worth  <richard@theworths.org>
305
306         * AUTHORS: Add Richard D. Worth
307         * TODO: Add newline before EOF
308
309         * src/ttt-client.c: (_ttt_client_execute_who):
310         * src/ttt-server.h:
311         * src/ttt-server.c: (ttt_server_who): Implement WHO.
312
313 2005-11-24  Carl Worth  <cworth@cworth.org>
314
315         * PROTOCOL: Document QUIT.
316
317         * src/ttt-client.c: (_ttt_client_execute_helo),
318         (_ttt_client_execute_quit), (_ttt_client_init), (_ttt_client_fini),
319         (_execute_request), (_handle_requests_thread): Implement QUIT. Add
320         client->registered flag and unregister only if registered. Change
321         from args_min and args_max to args_required.
322
323         * src/ttt-error.h:
324         * src/ttt-error.c: (ttt_error_string):
325         * src/ttt-server.c: (ttt_server_register_client): Put underscores
326         in TTT_ERRROR names for better readability.
327
328 2005-11-24  Carl Worth  <cworth@cworth.org>
329
330         * PROTOCOL:
331         * src/ttt-server.c: (ttt_server_init),
332         (ttt_server_register_client): Remove unique-name generation from
333         the server. The client is going to have to have code to do this
334         anyway.
335
336         * src/ttt-client.c: Change minimum arguments for HELO from 0 to 1.
337
338         * TODO: Note that HELO and ERROR INVALIDNAME are implemented in
339         the server.
340
341 2005-11-23  Richard D. Worth  <richard@theworths.org>
342
343         * PROTOCOL: Remove unused servername
344
345         * src/ttt-client.h: * src/ttt-client.c:
346         (_ttt_client_execute_helo), (_ttt_client_init),
347         (_ttt_client_fini), (_execute_request), (ttt_client_get_name),
348         (ttt_client_set_name): Added command descriptions structure. Match
349         command case-insensitively, dispatch to execute
350         function. Implement HELO command. Register on HELO instead of on
351         connect.
352
353         * src/ttt-server.h: * src/ttt-server.c: (ttt_server_init),
354         (ttt_server_register_client), (ttt_server_unregister_client),
355         (ttt_server_get_host), (ttt_server_get_port), (main): Added host
356         and port to server. Make client registration name-based rather
357         than id-based.
358
359         * src/x.c: (xstrdup): Return NULL on NULL
360
361         * src/ttt-lex.h: Regenerated
362
363 2005-11-22  Carl Worth  <cworth@cworth.org>
364
365         * TODO: Add TODO file listing all the stuff from the protocol that
366         needs to be implemented.
367         
368         * src/Makefile.am:
369         * configure.in:
370         * ylwrap:
371         * src/ttt-lex.h:
372         * src/ttt-lex.l:
373         * src/ttt-token.h: Add support for a flex-based tokenizer which
374         tokenizes newlines and space-separated strings.
375
376         * src/ttt-client.c: (_ttt_client_init), (_ttt_client_fini),
377         (_append_to_request), (_free_request), (_read_request),
378         (_execute_request): Use new tokenizer to tokenize input into an
379         array of request strings.
380
381 2005-11-15  Carl Worth  <cworth@cworth.org>
382
383         * src/Makefile.am:
384         * src/ttt-error.h:
385         * src/ttt-error.c: (ttt_error_string): Add error values and error
386         strings from protocol.
387
388         * src/ttt.h: Add typedefs for ttt_client_t and ttt_server_t so
389         that there's no problem with ttt-client.h and ttt-server.h needing
390         to mutually include each other.
391
392         * src/ttt-server.h:
393         * src/ttt-server.c: (ttt_server_register_client),
394         (ttt_server_unregister_client), (_ttt_server_accept), (main): Push
395         the client request handling thread back down into ttt-client.c
396         where it really does belong. The server code no longer ever
397         reaches down inside the ttt_client_t structure. Export
398         ttt_server_register_client and ttt_server_unregister_client. Add
399         documentation for ttt_server_broadcast. Document locking semantics
400         for all functions which acquire the server lock.
401
402         * src/ttt-client.h:
403         * src/ttt-client.c: (_ttt_client_create), (_ttt_client_destroy),
404         (_read_into_request_until), (_read_request), (_execute_request),
405         (_handle_requests_thread), (ttt_client_new), (ttt_client_get_id):
406         Pull the ttt_client structure definition back down inside the
407         ttt-client.c file. Don't export ttt_client_create and
408         ttt_client_destroy anymore, but instead just use static
409         _ttt_client_init and _ttt_client_fini. Implement the broadcast by
410         just passing a client pointer around and using client->request
411         rather than passing char *request all over. Document new
412         ttt_client_new and remove ttt_client_read_line. Add locking to
413         ttt_client_send and document it. Add ttt_client_get_id.
414
415 2005-11-14  Carl Worth  <cworth@cworth.org>
416
417         Server now acts as a very simple chat server.
418
419         * src/ttt-client.h:
420         * src/ttt-client.c: (ttt_client_create), (ttt_client_destroy),
421         (_append_to_request), (ttt_client_read_into_request_until),
422         (ttt_client_read_line), (ttt_client_send): Add support to do a
423         buffering read within the client and to reuse the buffer (which
424         grows by doubling) from one request to the next. Add function to
425         send a message to a client.
426
427         * src/ttt-server.c: (ttt_server_init), (ttt_server_create_client):
428         Add support for a client idea. Resize the server's client list by
429         doubling.
430         * src/ttt-server.c: (ttt_server_destroy_client): Add support to
431         destroy a client.
432         * src/ttt-server.c: (_handle_client_requests_thread),
433         (_accept_client): Move handling of client requests up to
434         ttt-server.c from ttt-client.c. Use threads rather than a fork per
435         client.
436         * src/ttt-server.h:
437         * src/ttt-server.h: (ttt_server_broadcast): Add function to send a
438         message to all connected clients.
439
440         * src/ttt-socket.h:
441         * src/ttt-socket.c: (ttt_socket_read),
442         (ttt_socket_write): Add functions to do blocking read or write of
443         the specified number of bytes.
444
445         * src/ttt-socket.c: (ttt_socket_accept): Remove fork, so that the
446         accept function call can take care of anything like that itself.
447         
448         * src/x.h:
449         * src/x.c: (xread), (xwrite): New wrappers for read and write.
450
451         * src/ttt.h: Add TTT_STATUS_EOF, TRUE, and FALSE.
452
453         * src/ttt.c: Need to include ttt-args.h explicitly now.
454
455 2005-11-11  Carl Worth  <cworth@cworth.org>
456
457         * src/ttt-server.h:
458         * src/ttt-server.c: (ttt_server_init), (ttt_server_add_client),
459         (_accept_client), (main): Add a new ttt_server_t object with a
460         mutex-protected list of clients. Move client handling code down
461         into new ttt-client.c.
462
463         * src/ttt-client.h:
464         * src/ttt-client.c: (ttt_client_create), (ttt_client_destroy),
465         (ttt_client_handle_requests): New ttt_client_t object that simply
466         holds a pointer back to the server as well as the client socket
467         file descriptor.
468
469         * src/ttt-socket.h:
470         * src/ttt-socket.c: (ttt_socket_accept): Add closure argument. Add
471         a call to fork before calling the accept callback.
472
473         * src/ttt-args.c: Hide unused ttt_args_usage from the compiler to
474         keep it from complaining.
475
476         * src/ttt.c: (main): Rename the client main program from
477         ttt-client to ttt.c, (since the server code now has its own
478         ttt-client.c).
479
480         * src/ttt.h:
481         * src/Makefile.am: Include and link with pthread now that we have
482         pthread-based mutex locking.
483
484 2005-11-11  Carl Worth  <cworth@pippin.local>
485
486         * src/ttt-server.c: (main): Don't assign to stderr which is
487         apparently an invalid lvalue on Mac OS X.
488
489         * src/x.h:
490         * src/x.c: (xfreopen): Change return type to void.
491
492         * src/ttt-board.c: (ttt_board_to_string): Add missing return
493         statement.
494
495 2005-11-11  Carl Worth  <cworth@cworth.org>
496
497         * configure.in: Key off of src/ttt.h instead of src/ttt.c which no
498         longer exists.
499
500 2005-11-11  Carl Worth  <cworth@cworth.org>
501
502         * src/ttt.h:
503         * src/x.c:
504         * src/x.h: Move include of stdarg.h from x.c to ttt.h.
505
506 2005-11-11  Carl Worth  <cworth@cworth.org>
507
508         * src/ttt-board.h: Include ttt.h to get standard includes.
509         
510         * src/ttt-socket.c: Replace include of netinet/ip.h with
511         netinet/in.h which seems to be necessary for BSD libc, (eg. Mac OS
512         X).
513
514 2005-11-09  Carl Worth  <cworth@cworth.org>
515
516         * src/Makefile.am:
517         * src/ttt.h:
518         * src/ttt-server.c: (ttt_dispatch), (main):
519         * src/ttt-socket.h:
520         * src/ttt-socket.c: (_sockaddr_init), (_wait_for_connection),
521         (ttt_socket_create_server), (ttt_socket_accept): Push a lot of
522         code out of ttt-server.c down into a new ttt_socket abstraction
523         layer. The code is much easier to read now. The server also no
524         longer exits when the first client exits, but continues to listen
525         for more connections.
526
527 2005-11-09  Carl Worth  <cworth@cworth.org>
528
529         * src/ttt-args.h:
530         * src/ttt-args.c: (ttt_args_help), (ttt_args_parse): Add support
531         for -h,--host, -p,--port, and --log-file command-line arguments.
532         
533         * src/ttt-server.c: (main): Use host, port, and log-file
534         command-line arguments.
535
536         * src/ttt-client.c: (main): Track change in signature of
537         ttt_args_parse.
538         
539         * src/x.h:
540         * src/x.c: (xfdopen), (xfreopen): More wrappers.
541
542 2005-11-08  Carl Worth  <cworth@cworth.org>
543
544         * src/ttt.h:
545         * src/ttt-server.c: (_sockaddr_init), (_wait_for_connection),
546         (main): Add socket, bind, listen, accept calls to provide a
547         simple, functional, one-shot server demonstration.
548
549         * src/x.h:
550         * src/x.c: (xsocket), (xbind), (xlisten), (xfcntl), (xselect): Add
551         more wrapped system calls.
552
553 2005-11-07  Carl Worth  <cworth@cworth.org>
554
555         * src/ttt.h: Grab some useful definitions from wdo.h:
556         ASSERT_NOT_REACHEED and TTT_PRINTF_FORMAT. Add several needed
557         include directives.
558
559         * src/Makefile.am: Rip out not-yet existing ttt-command and
560         ttt-error.
561         
562         * src/ttt-args.c: (ttt_args_parse): Track name change from
563         args_help to ttt_args_help.
564
565         * src/ttt.c: Remove in favor of ttt-server.c and ttt-client.c.
566         
567         * src/x.h: Add prototype for xfwrite.
568
569 2005-11-05  Richard D. Worth  <richard@theworths.org>
570
571         * src/ttt-board.c: (ttt_board_init): Added for loop counter init.
572         * src/ttt-board.h: Added prototypes.
573
574 2005-11-05  Richard D. Worth  <richard@theworths.org>
575
576         * src/args.c: Renamed ttt-args.c
577         * src/args.h: Renamed ttt-args.h
578         * src/ttt-args.c: (ttt_args_help), (ttt_args_usage),
579         (ttt_args_parse): Added ttt_ prefix.
580         * src/ttt-args.h: Added ttt_, TTT_ prefix.
581
582 2005-11-05  Kevin Worth  <kevin@cworth.org>
583
584         * src/ttt-board.c: (ttt_board_init): Implemented board_init.
585         * src/ttt-board.h: (ttt_board_t): Added cells array.
586
587 2005-11-05  Carl Worth  <cworth@cworth.org>
588
589         * src/Makefile.am: Add ttt-board.[ch] and x.[ch]
590         
591         * src/ttt-board.h:
592         * src/ttt-board.c: (ttt_board_init), (ttt_board_init_from_string),
593         (ttt_board_to_string), (ttt_board_write): Add some stub functions
594         for Richard and Kevin to have some practice
595         implementing. Functions to represent a board and to go to/from a
596         string.
597         
598         * src/x.h:
599         * src/x.c: (xasprintf), (xvasprintf), (xpipe), (xfork), (xmalloc),
600         (xcalloc), (xrealloc), (xfdopen), (xstrdup), (xfwrite): Several
601         utility functions that make system calls, check the result, and
602         exit on any error. This will simplify the error checking needed in
603         programs using these functions.
604         
605 2005-11-05  Carl Worth  <cworth@cworth.org>
606
607         * src/Makefile.am: Break things up for separate ttt-client and
608         ttt-server and programs.
609