/* * This is all bit.c. It contains tables for Bit Vectors, * as well as the lookup functions and writing/reading */ #include <sys/types.h> #include <sys/time.h> #include <stdio.h> #include <string.h> #include <stdlib.h> #include <ctype.h> #include <time.h> #include "include.h" int bit_lookup(const struct bit_type *bit_table, int max_bit, const char *name ) { int i; for(i = 0; i < max_bit ; i++ ) { if(LOWER(name[0]) == LOWER(bit_table[i].name[0]) && !str_prefix(name, bit_table[i].name ) ) return i; } return -1; } int PrntVal_lookup(const struct bit_type *bit_table, int max_bit, const char *name ) { int i; for(i=0;i<max_bit;i++ ) { if(!strcasecmp(name, bit_table[i].PrntVal )) return i; } return -1; } char *bit_name(const struct bit_type *bit_table, int bit ) { return bit_table[bit].name; } char *bit_PrntVal(const struct bit_type *bit_table, int bit ) { return bit_table[bit].PrntVal; } void load_flags(const struct bit_type *bit_table, FILE *fp, int max_int, int *bit_array ) { int i, bit; char *word; int tmpMax = fread_number(fp); for(i = 0; i < tmpMax; i++ ) { word = fread_word(fp); if( ( bit = PrntVal_lookup(bit_table, tmpMax, word ) ) == -1 ) { logfp(LOG_BUG, "load_flags: invalid bit Print Value, \"%s\"\n", word ); fread_word(fp); continue; } bit_array[bit] = fread_number(fp); } if(tmpMax < max_int) for(; tmpMax < max_int ; ++tmpMax ) bit_array[tmpMax] = 0; return; } void save_flags(const struct bit_type *bit_table, FILE *fp, int max_int, int *bit_array ) { int i; fprintf(fp, "%d ", max_int); for( i = 0; i < max_int ; i++ ) fprintf(fp, "%s %d ", bit_PrntVal(bit_table, i), bit_array[i] ); fprintf(fp, "\n" ); return; } void clear_bits(int *bArray, int max_bit ) { int i; for( i = 0; i < max_bit ; i++ ) UNSET_BIT(bArray, i ); return; } const struct bit_type common_table [] = { { "Afk", "Ak", COMMON_AFK }, { "Ban", "Bn", COMMON_BANNED }, { "Linkdead", "Ld", COMMON_LINKDEAD }, { NULL, NULL, 0 } }; const struct bit_type channel_table[] = { // Example from MudCon V /* { "General", "Gn", 0 }, { "Advanced", "Av", 1 }, { "Coding", "Cd", 2 }, { "Intermud", "Im", 3 }, { "Novices", "Nv", 4 }, { "Administration", "Ad", 5 }, { "Building", "Bd", 6 }, { "Ethics", "Et", 7 }, { "Legal", "Lg", 8 }, { "Webdesign", "Wd", 9 }, { "Future", "Ft", 10 }, */ { NULL, NULL, 0 } };