#include <stdio.h> #include <ctype.h> #include "player.h" #include "stringops.h" static char tempstr[1024]; player_list *player_load (char *filename) { char name [128]; player_list *pl; FILE *f; int status, verbose, ignore, command, owner; #ifdef FUNCTIONS puts ("**player_load"); #endif f = fopen (filename, "r"); pl = allocate (player_list); pl->head = pl->tail = NULL; pl->size = 0; if (f == NULL) return pl; fgets (tempstr, 127, f); while (!feof(f)) { fscanf (f, "%s%d%d%d%d%d", name, &status, &verbose, &ignore, &command, &owner); if (!feof(f)) { player_add (pl, name); pl->tail->status = status; pl->tail->verbose = verbose; pl->tail->ignore = ignore; pl->tail->command = command; pl->tail->owner = owner; } } return pl; } void player_add (player_list *pl, char *name) { player *new; #ifdef FUNCTIONS puts ("**player_add"); #endif new = allocate (player); copystring(new->name, name); new->status = 0; new->verbose = 0; new->ignore = 0; new->command = 0; new->owner = 0; new->next = NULL; if (pl->tail != NULL) pl->tail->next = new; pl->tail = new; if (pl->head == NULL) pl->head = new; (pl->size)++; } void player_delete (player_list *pl, player *dead) { player *scan; #ifdef FUNCTIONS puts ("**player_delete"); #endif if (pl->head == NULL) return; if (pl->head == dead) { if (pl->tail == dead) pl->tail = NULL; pl->head = dead->next; free (dead->name); free (dead); (pl->size)--; return; } for (scan = pl->head; (scan->next != dead) && (scan->next != NULL); scan = scan->next); if (scan != NULL) { if (pl->tail == dead) pl->tail = scan; scan->next = dead->next; free (dead->name); free (dead); (pl->size)--; } } player *player_find_num (player_list *pl, int n) { player *scan; #ifdef FUNCTIONS puts ("**player_find_num"); #endif for (scan = pl->head; (scan != NULL) && (n > 1); scan = scan->next, n--); return scan; } player *player_find (player_list *pl, char *name) { player *scan; #ifdef FUNCTIONS puts ("**player_find"); #endif if (isdigit (*name)) return (player_find_num (pl, atoi (name))); for (scan = pl->head; (scan != NULL) && (strcasecmp (scan->name, name)); scan = scan->next); return scan; } void player_save (player_list *pl, char *name) { FILE *f; player *scan; #ifdef FUNCTIONS puts ("**player_save"); #endif f = fopen (name, "w"); fputs ("Name S V I C O\n", f); for (scan = pl->head; scan != NULL; scan = scan->next) fprintf (f, "%-25s %+03d %d %d %d %d\n", scan->name, scan->status, scan->verbose, scan->ignore, scan->command, scan->owner); fclose (f); } static void player_elements_burn (player *p) { #ifdef FUNCTIONS puts ("**player_elements_burn"); #endif if (p != NULL) { player_elements_burn (p->next); free (p->name); free (p); } } void player_burn (player_list *pl) { #ifdef FUNCTIONS puts ("**player_burn"); #endif if (pl) { player_elements_burn (pl->head); free (pl); } } int player_num (player_list *pl, player *p) { int ret = 1; player *scan; #ifdef FUNCTIONS puts ("**player_num"); #endif for (scan = pl->head; (scan != NULL) && (scan != p); scan = scan->next, ret++); if (scan != NULL) return ret; else return 0; }