/* * file.c */ #include <stdlib.h> #include <string.h> #include <stdio.h> #include <ctype.h> #include <memory.h> #include "file.h" /* Local functions */ void process_option(char *option, char *param); /* Local variables */ int rcline_no = 0, first_space; /* Extern variables */ extern rc_type *rc_options; /* * Routine to remove white space preceeding * some text in a string */ char *remove_wspace(char *str) { while (*str && *str == ' ') str++; return str; } /* routine to get the next part of an arg */ char *next_space(char *str) { while (*str && *str != ' ') str++; if (*str == ' ') { while (*str == ' ') str++; str--; } return str; } void strip(char *str) { while(*str && *str != ' ') str++; if (*str == ' ') *str = '\0'; } void nstrip(char *str) { char *t; t = str; if (*str == ' ') { while (*str == ' ') str++; first_space = 1; return; } while(*t && *t != '\n') t++; if (*t == '\n') *t = '\0'; } /* Takes in a line of lowercase text and * matches against a list of possible * options and associated parameters */ void process_line(char *str) { char *option, *parameter; parameter = next_space(str); *parameter++ = 0; remove_wspace(parameter); option = str; strip(str); /* Allow #'s for commenting * blanks lines or lines starting with a space are ignored */ if ( (*str && *str == '#') || (!*str) ) { rcline_no++; return; } tolower(*option); /* Check to make sure it's a valid option */ process_option(option, parameter); } /* The main function for this file */ void init_updaterc(char *filename) { FILE *rcfile; int error, fd; char *curr_line; curr_line = (char *) malloc(100); memset(curr_line, 0, 100); if ((rcfile = fopen(filename, "r")) == NULL) { printf("Error - cannot open file '%s'\n", filename); printf(" Player file update aborted ..... BYE :)\n"); exit(1); } printf("Reading in updaterc file ......\n"); while ((fgets(curr_line, 100, rcfile)) != NULL) { first_space = 0; rcline_no ++; nstrip(curr_line); process_line(curr_line); memset(curr_line, 0, 100); } fclose(rcfile); } void no_param(char *option) { printf("Error in updaterc (Line %d)\n", rcline_no); printf("No path specified for %s\n", option); return; } /* This handles errors for bad option * paramaters and gives a suitable message */ void found_error(char *str) { printf("Error in updaterc (Line %d)\n", rcline_no); printf("Illegal parameter '%s'\n", str); return; } /* This routine checks for a valid option * and sets the neccessary variable in the * rc_options struct. */ void process_option(char *option, char *param) { if (!(strcmp(option, "system_rooms_path:"))) { if (!*param) no_param(option); else { strncpy(rc_options->srooms_path, param, 255); } return; }else if (!(strcmp(option, "player_files_path:"))) { if (!*param) no_param(option); else { strncpy(rc_options->pfile_path, param, 255); } return; } else if (!(strcmp(option, "new_player_files_path:"))) { if (!*param) no_param(option); else { strncpy(rc_options->new_pfile_path, param, 255); } return; }else if (!(strcmp(option, "player_rooms_path:"))) { if (!*param) no_param(option); else { strncpy(rc_options->prooms_path, param, 255); } return; }else { printf("Error in updaterc (Line %d)\n", rcline_no); printf("'%s' not a valid option\n", option); exit(1); } }