Пример #1
0
ban_data :: ban_data( )
{
  name = empty_string;

  record_new( sizeof( ban_data ), MEM_BAN );
  append( ban_list, this );
};
Пример #2
0
Obj_Clss_Data :: Obj_Clss_Data( )
{
  record_new( sizeof( obj_clss_data ), MEM_OBJ_CLSS );

  oprog        = NULL;
  date         = -1;
  count        = 0;
}
Пример #3
0
Help_Data :: Help_Data( )
{
  record_new( sizeof( help_data ), MEM_HELP );

  name      = (char*) empty_string;
  text      = (char*) empty_string;
  immortal  = (char*) empty_string;
  level[0]  = 0;
  level[1]  = 0;
  category  = 0;
}
Пример #4
0
Exit_Data :: Exit_Data( ) 
{
  record_new( sizeof( exit_data ), MEM_EXIT );

  name      = empty_string;
  keywords  = empty_string;
  exit_info = 0;
  key       = -1;
  strength  = 10;
  light     = 10;
  size      = SIZE_OGRE;
  direction = -1;  
  to_room   = NULL;
}
void stock_add (stock_t stock, good_t good) {
    if (stock->space - good_getVolume(good) >= 0)
        list_add(stock->goods, good, list_size(stock->goods));
    else
        return;
    if (good_getVolume(good) > 10) {
        for (int i = 0; i < subList_getCount(stock->subs); i++){
            stock->subs->sub[i]->cb(good);
        }
    }
    stock->freespace -= good_getVolume(good);
    record_t rec = record_new(good);
    recordBook_add(stock->history, rec);
}
Пример #6
0
void
database_read(database_t *database) {
  size_t i, total;
  csv_t *csv;
  csv_row_t *csv_row;
  csv_fields_t *csv_fields;
  record_t *record;

  csv = csv_new(database->filename);
  csv_row = csv_row_new(NULL, NULL);

  total = 0;

  while(csv_get_row(csv, csv_row)) {
    csv_fields = csv_fields_new(database->num_fields);
    csv_get_fields(csv_fields, csv_row, database->sep);
    record = record_new(database->num_fields);

    for(i = 0; i < database->num_fields; i++) {
      record_add_field(record, csv_fields->fields[i]);
    }

    csv_fields_deep_free(csv_fields);

    array_push(database->records, record);
    total++;

    if(!(total % 1000000)) {
      printf(
          "Registros lidos: %d de %d (%2.2f%%)\n",
          (int) total,
          (int) database->num_rows,
          100.0 * total / database->num_rows
          );
    }
  }

  printf(
      "Registros lidos: %d de %d (%2.2f%%)\n",
      (int) total,
      (int) database->num_rows,
      100.0 * total / database->num_rows
      );

  csv_row_free(csv_row);

  csv_free(csv);
}
Пример #7
0
Share_Data :: Share_Data()
{
  record_new(sizeof(share_data), MEM_SHDATA);

  strength      = 10;
  intelligence  = 10; 
  wisdom        = 10;
  dexterity     = 10;
  constitution  = 10;
  deaths        = 0;
  kills         = 0;
  level         = 0;
  fame          = 0;
  race          = RACE_HUMAN;

  vzero(resist, MAX_RESIST);
}  
Пример #8
0
Obj_Data :: Obj_Data( obj_clss_data* obj_clss )
{
  record_new( sizeof( obj_data ), MEM_OBJECT );

  valid         = OBJ_DATA;
  extra_descr   = NULL;
  array         = NULL;
  save          = NULL;
  owner         = NULL;
  source        = empty_string;
  label         = empty_string;
  position      = WEAR_NONE;
  layer         = 0;
  pIndexData    = obj_clss;

  insert( obj_list, this, 
    binary_search( obj_list, this, compare_vnum ) );
}
Пример #9
0
Wizard_Data :: Wizard_Data(char* name) : player_data(name) 
{
  record_new(sizeof(wizard_data), MEM_WIZARD);
  record_delete(sizeof(player_data), MEM_PLAYER);

  valid        = WIZARD_DATA;

  action_edit  = NULL;
  adata_edit   = NULL;
  room_edit    = NULL;
  mpdata_edit  = NULL;
  mprog_edit   = NULL;
  oextra_edit  = NULL;
  opdata_edit  = NULL;
  oprog_edit   = NULL;
  player_edit  = NULL;
  quest_edit   = NULL;
  obj_edit     = NULL;
  mob_edit     = NULL;
  exit_edit    = NULL;

  custom_edit  = 0;
  rtable_edit  = -1;
  list_edit    = 0;
  office       = 0;
  wizinvis     = 0;

  vzero(table_edit, 2);

  bamfin       = empty_string;
  bamfout      = empty_string;
  level_title  = empty_string;

  build_chan   = NULL;
  imm_talk     = NULL;
  god_talk     = NULL;
  avatar       = NULL;

  vzero(permission, 2);
}
Пример #10
0
void
test_record() {
  record_t *record;
  char fields[] = "ab\0abc\0abcd\0abcde\0ab\0c";
  uint8_t *sizes;
  size_t num_fields = 6;

  sizes = malloc(sizeof(uint8_t) * 6);

  sizes[0] = 3;
  sizes[1] = 4;
  sizes[2] = 5;
  sizes[3] = 6;
  sizes[4] = 3;
  sizes[5] = 2;

  record = record_new(num_fields, fields, sizes);

  assert_string_equal("ab", record_get_field(record, 0));
  assert_string_equal("abc", record_get_field(record, 1));
  assert_string_equal("abcd", record_get_field(record, 2));
  assert_string_equal("abcde", record_get_field(record, 3));
  assert_string_equal("ab", record_get_field(record, 4));
  assert_string_equal("c", record_get_field(record, 5));

  assert_string_equal("ab", record_get_id(record));

  assert_int_equal(2, record_field_size(record, 0));
  assert_int_equal(3, record_field_size(record, 1));
  assert_int_equal(4, record_field_size(record, 2));
  assert_int_equal(5, record_field_size(record, 3));
  assert_int_equal(2, record_field_size(record, 4));
  assert_int_equal(1, record_field_size(record, 5));

  record_free(record);
}
Пример #11
0
int record_read_filtered(struct Record **R, struct File *F, struct Field *fld)
{	
	int		len	= 0;
	int		flen	= 0;
	int		s	= 0;
	int		reject	= 0;
	long int	start_p	= 0;
	struct String	*str	= 0;
	struct Record	*Rfld	= 0;

	if (F->idx >= F->size) {
		s = file_read(F);
		if (s)
			return s;
	}

	(*R) = 0;
	while (fld) {
		/* where do we start ? */
		if (fld->start_p) {
			if (start_p < fld->start_p) {
				len	= fld->start_p - start_p;
				start_p	+= len;
				flen	= F->idx + len;
				if (flen >= F->size) {
					len = flen - F->size;
					s = file_read(F);
					if (s)
						goto err;
				} 
				F->idx += len;
			}
			if (fld->left_q) {
				if (FCURC(F) == fld->left_q) {
					F->idx++;
					start_p++;
					if (F->idx >= F->size) {
						s = file_read(F);
						if (s)
							goto err;
					}
				}
			}
		} else if (fld->left_q) {
			if (FCURC(F) == fld->left_q) {
				F->idx++;
				start_p++;
				if (F->idx >= F->size) {
					s = file_read(F);
					if (s)
						goto err;
				}
			} else
				goto err;
		}

		if (! str) {
			s = str_create(&str);
			if (s)
				goto err;
		}

		if (fld->end_p) {
			while (start_p <= fld->end_p) {
				if (fld->flag && ! reject)
					str_append_c(str, FCURC(F));

				F->idx++;
				start_p++;

				if (F->idx >= F->size) {
					s = file_read(F);
					if (s)
						goto err;
				}
			}
		} else if (fld->right_q) {
			if (fld->flag && ! reject)
				s = file_fetch_until(F, str, fld->right_q);
			else
				s = file_skip_until(F, fld->right_q);
			if (s)
				goto err;

			F->idx++;
			start_p += str->idx + 1;

			if (F->idx >= F->size) {
				s = file_read(F);
				if (s)
					goto err;
			}

			if (fld->sep) {
				while (FCURC(F) != fld->sep) {
					F->idx++;
					start_p++;
					if (F->idx >= F->size) {
						s = file_read(F);
						if (s)
							goto err;
					}
				}
				F->idx++;
				start_p++;

				if (F->idx >= F->size) {
					s = file_read(F);
					if (s)
						goto err;
				}
			}
		} else if (fld->sep) {
			if (fld->flag && !reject)
				s = file_fetch_until(F, str, fld->sep);
			else
				s = file_skip_until(F, fld->sep);
			if (s)
				goto err;

			F->idx++;
			start_p += str->idx + 1;

			if (F->idx >= F->size) {
				s = file_read(F);
				if (s)
					goto err;
			}
		} else {
			if (fld->flag && !reject)
				s = file_fetch_until(F, str, CH_NEWLINE);
			else
				s = file_skip_until(F, CH_NEWLINE);
			if (s)
				goto err;
		}

		if ((fld->flag & FFLAG_FILTER) && !reject) {
			s = fld->fop(fld->fltr_rule, str->buf,
						fld->fltr_v);
			/* reject this record */
			if (s == 0) {
				reject = 1;
				break;
			}
		}

		if (fld->flag & FFLAG_CREATE) {
			if (! reject) {
				s = record_new(&Rfld, fld, str);
				if (s)
					goto err;

				record_add_field(R, Rfld);
				str	= 0;
				Rfld	= 0;
			}
		} else
			str_prune(str);

		fld = fld->next;
	}
	/* go to next row */
	if (FCURC(F) != CH_NEWLINE) {
		s = file_skip_until(F, CH_NEWLINE);
	}
	F->idx++;
	s = 0;
err:
	str_destroy(&str);
	if ((s && s != E_FILE_END) || reject)
		record_destroy(R);
	return s;
}
Пример #12
0
/**
 * @desc: touch if you dare!
 *	priority in reading a record:
 *		- start_p > left_q
 *		- end_p > right_q > sep
 * @return:
 *	< 0	: success
 *	< !0	: fail. and R will be NULL
 */
int record_read(struct Record **R, struct File *F, struct Field *fld)
{
	int		s	= 0;
	int		len	= 0;
	int		flen	= 0;
	long int	start_p	= 0;
	struct String	*str	= 0;
	struct Record	*Rfld	= 0;

	if (F->idx >= F->size) {
		s = file_read(F);
		if (s)
			return s;
	}

	(*R) = 0;
	while (fld) {
		/* where do we start ? */
		if (fld->start_p) {
			if (start_p < fld->start_p) {
				len	= fld->start_p - start_p;
				start_p	+= len;
				flen	= F->idx + len;
				if (flen >= F->size) {
					len = flen - F->size;
					s = file_read(F);
					if (s)
						goto err;
				} 
				F->idx += len;
			}
			if (fld->left_q) {
				if (FCURC(F) == fld->left_q) {
					F->idx++;
					start_p++;
					if (F->idx >= F->size) {
						s = file_read(F);
						if (s)
							goto err;
					}
				}
			}
		} else if (fld->left_q) {
			if (FCURC(F) == fld->left_q) {
				F->idx++;
				start_p++;
				if (F->idx >= F->size) {
					s = file_read(F);
					if (s)
						goto err;
				}
			} else
				goto err;
		}

		/* create string for field data */
		s = str_create(&str);
		if (s)
			return s;

		if (fld->end_p) {
			while (start_p <= fld->end_p) {
				str_append_c(str, FCURC(F));
				F->idx++;
				start_p++;

				if (F->idx >= F->size) {
					s = file_read(F);
					if (s)
						goto err;
				}
			}
		} else if (fld->right_q) {
			s = file_fetch_until(F, str, fld->right_q);
			if (s)
				goto err;

			F->idx++;
			start_p += str->idx + 1;

			if (F->idx >= F->size) {
				s = file_read(F);
				if (s)
					goto err;
			}

			if (fld->sep) {
				while (FCURC(F) != fld->sep) {
					F->idx++;
					start_p++;
					if (F->idx >= F->size) {
						s = file_read(F);
						if (s)
							goto err;
					}
				}
				F->idx++;
				start_p++;

				if (F->idx >= F->size) {
					s = file_read(F);
					if (s)
						goto err;
				}
			}
		} else if (fld->sep) {
			s = file_fetch_until(F, str, fld->sep);
			if (s)
				goto err;

			F->idx++;
			start_p += str->idx + 1;

			if (F->idx >= F->size) {
				s = file_read(F);
				if (s)
					goto err;
			}
		} else {
			s = file_fetch_until(F, str, CH_NEWLINE);
			if (s)
				goto err;
		}

		s = record_new(&Rfld, fld, str);
		if (s)
			goto err;

		record_add_field(R, Rfld);
		str	= 0;
		Rfld	= 0;
		fld	= fld->next;
	}
	/* go to next row */
	if (FCURC(F) != CH_NEWLINE) {
		s = file_fetch_until(F, str, CH_NEWLINE);
	}
	F->idx++;
	return 0;
err:
	str_destroy(&str);
	if (s && s != E_FILE_END)
		record_destroy(R);
	return s;
}
Пример #13
0
Wizard_Data :: ~Wizard_Data()
{
  record_delete(sizeof(wizard_data), MEM_WIZARD);
  record_new(sizeof(player_data), MEM_PLAYER);
}
Пример #14
0
Player_Data :: Player_Data(char* name) : locker(this), junked(this)
{
  record_new(sizeof(player_data), MEM_PLAYER);

  player_list += this;

  /*-- INITIALISE VARIABLES --*/

  valid      = PLAYER_DATA;
  switched   = NULL;
  familiar   = NULL;
  note_edit  = NULL;

  atalk   = NULL;
  gtell   = NULL;
  ctell   = NULL;
  chant   = NULL;
  chat    = NULL;
  gossip  = NULL;
  yell    = NULL;
  shout   = NULL;
  say     = NULL;
  tell    = NULL;
  to      = NULL;
  whisper = NULL;

  base_age   = 17;
  bank       = 0;
  noteboard  = 0;
  gossip_pts = 50;
  prayer     = 500;
  whistle    = 0;
  timezone   = 0;

  vzero(iflag, 2);

  pcdata = new pc_data;
  shdata = new share_data;
  descr  = new descr_data;

  descr->name = alloc_string(name, MEM_DESCR);

  pcdata->pfile        = NULL;
  pcdata->help_edit    = NULL;
  pcdata->mail_edit    = NULL;
  pcdata->recognize    = NULL;

  pcdata->clss          = 0;
  pcdata->mod_age       = 0; 
  pcdata->piety         = 0;
  pcdata->speaking      = 0;
  pcdata->trust         = 0;
  pcdata->quest_pts     = 0;
  pcdata->terminal      = 0;
  pcdata->practice      = -1;
  pcdata->prac_timer    = 5;
  pcdata->religion      = REL_NONE;
  pcdata->lines         = 24;
  pcdata->max_level     = -1;
  pcdata->wimpy         = 0;

  vzero(pcdata->cflags, MAX_CFLAG);
  vzero(pcdata->color, MAX_COLOR);
  vzero(shdata->skill, MAX_SKILL);
  vzero(pcdata->quest_flags, MAX_QUEST);

  pcdata->condition[ COND_ALCOHOL ] = 0;
  pcdata->condition[ COND_FULL ]    = 24;
  pcdata->condition[ COND_THIRST ]  = 24;
  pcdata->condition[ COND_DRUNK ]   = 0;

  pcdata->tmp_short     = empty_string;
  pcdata->tmp_keywords  = empty_string;
  pcdata->title         = empty_string;
  pcdata->prompt        = empty_string;
  pcdata->buffer        = empty_string;

  pcdata->message       = (1 << MAX_MESSAGE)-1;
  pcdata->mess_settings = 0;
}
Пример #15
0
record record_create (/*@only@*/ char *name)
{ 
  record r = record_new ();  
  record_setName (r, name);
  return r;
}
Пример #16
0
void do_ban( char_data* ch, char* argument )
{
  account_data*   account;
  ban_data*           ban;
  pfile_data*       pfile  = NULL;
  int               flags;
  int                   i;
  bool              first  = TRUE;
  const char*        name;
  player_data*     victim;

  if( !get_flags( ch, argument, &flags, "srn", "Ban" ) )
    return;

  if( is_set( &flags, 2 ) ) {
    if( *argument == '\0' ) {
      if( badname_array == NULL ) {
        send( ch, "The badname array is empty.\n\r" );
        }
      else {
        display_array( ch, "Bad Name Array", &badname_array[0],
          &badname_array[1], max_badname );
        }
      return;
      }
    i = pntr_search( badname_array, max_badname, argument );
    if( is_set( &flags, 1 ) ) {
      if( i < 0 ) {
        send( ch, "The name '%s' wasn't in the badname array.\n\r",
          argument );
        }
      else {
        record_delete( sizeof( char* ), MEM_BADNAME );
        remove( badname_array, max_badname, i );
        send( ch, "Name removed from badname array.\n\r" );
        save_badname( );
        }
      }
    else {
      if( i > 0 ) {
        send( ch, "The name '%s' is already in the badname array.\n\r",
          argument );
        }
      else if( check_parse_name( ch->link, argument ) ) {
        i = -i-1;
        record_new( sizeof( char* ), MEM_BADNAME );
        name = alloc_string( argument, MEM_BADNAME );
        insert( badname_array, max_badname, name, i );
        send( ch, "The name '%s' is added to the badname array.\n\r",
          name );
        save_badname( );
        }
      }
    return;
    }

  if( is_set( &flags, 0 ) ) {
    if( *argument == '\0' ) {
      page_title( ch, "Banned Sites" );
      for( ban = ban_list; ban != NULL; ban = ban->next )
        page( ch, "%s\n\r", ban->name );
      return;
      }
    if( !is_set( &flags, 1 ) ) {
      for( ban = ban_list; ban != NULL; ban = ban->next ) {
        if( !strcasecmp( argument, ban->name ) ) {
          send( "That site is already banned!\n\r", ch );
          return;
          }
        }
      ban        = new ban_data;
      ban->name  = alloc_string( argument, MEM_BAN );
      save_banned( );
      send( ch, "Ok.\n\r" );
      }
    else {
      for( ban = ban_list; ban != NULL; ban = ban->next ) {
        if( !strcasecmp( argument, ban->name ) ) {
          delete ban;
          save_banned();
          send( ch, "Ok.\n\r" );
          return;
          }
        }
      send( ch, "Site is not banned.\n\r" );
      }
    return;
    }

  if( *argument == '\0' ) {
    page_title( ch, "Banned Accounts" );
    for( i = 0; i < max_account; i++ )
      if( account_list[i]->banned != -1 ) 
        display_account( ch, account_list[i], first );
    return;
    }

  if( ( account = account_arg( argument ) ) == NULL ) {
    if( ( pfile = player_arg( argument ) ) == NULL ) {
      send( ch, "No such account or player.\n\r" );
      return;
      }
    if( ( account = pfile->account ) == NULL ) {
      send( ch, "That player doesn't have an account which makes banning\
 it difficult.\n\r" );
      return;
      }
    }