diff -ur src/act_comm.c new/act_comm.c --- src/act_comm.c Sat Jan 11 16:24:00 2003 +++ new/act_comm.c Fri Jan 24 02:15:43 2003 @@ -305,7 +305,7 @@ chprintlnf(ch, "" CTAG(_GOSSIP1) "You gossip '" CTAG(_GOSSIP2) "%s" CTAG(_GOSSIP1) "'{x", argument); - for (d = descriptor_list; d != NULL; d = d->next) + for (d = descriptor_first; d != NULL; d = d->next) { CHAR_DATA *victim; @@ -361,7 +361,7 @@ chprintlnf(ch, "" CTAG(_GRATS1) "You grats '" CTAG(_GRATS2) "%s" CTAG(_GRATS1) "'{x", argument); - for (d = descriptor_list; d != NULL; d = d->next) + for (d = descriptor_first; d != NULL; d = d->next) { CHAR_DATA *victim; @@ -416,7 +416,7 @@ chprintlnf(ch, "" CTAG(_QUOTE1) "You quote '" CTAG(_QUOTE2) "%s" CTAG(_QUOTE1) "'{x", argument); - for (d = descriptor_list; d != NULL; d = d->next) + for (d = descriptor_first; d != NULL; d = d->next) { CHAR_DATA *victim; @@ -471,7 +471,7 @@ chprintlnf(ch, "" CTAG(_QA1) "You question '" CTAG(_QA2) "%s" CTAG(_QA1) "'{x", argument); - for (d = descriptor_list; d != NULL; d = d->next) + for (d = descriptor_first; d != NULL; d = d->next) { CHAR_DATA *victim; @@ -526,7 +526,7 @@ chprintlnf(ch, "" CTAG(_QA1) "You answer '" CTAG(_QA2) "%s" CTAG(_QA1) "'{x", argument); - for (d = descriptor_list; d != NULL; d = d->next) + for (d = descriptor_first; d != NULL; d = d->next) { CHAR_DATA *victim; @@ -584,7 +584,7 @@ CTAG(_MUSIC1) "'" CTAG(_MUSIC3) "%s" CTAG(_MUSIC1) "'{x", argument); sprintf(buf, "$n MUSIC: '%s'", argument); - for (d = descriptor_list; d != NULL; d = d->next) + for (d = descriptor_first; d != NULL; d = d->next) { CHAR_DATA *victim; @@ -639,7 +639,7 @@ chprintlnf(ch, "You clan '%s'", argument); sprintf(buf, "$n clans '%s'", argument); - for (d = descriptor_list; d != NULL; d = d->next) + for (d = descriptor_first; d != NULL; d = d->next) { if (d->connected == CON_PLAYING && d->character != ch && is_same_clan(ch, d->character) && @@ -677,7 +677,7 @@ act_new("" CTAG(_IMMTALK1) "$n" CTAG(_IMMTALK2) ":" CTAG(_IMMTALK3) " $t{x", ch, argument, NULL, TO_CHAR, POS_DEAD); - for (d = descriptor_list; d != NULL; d = d->next) + for (d = descriptor_first; d != NULL; d = d->next) { if (d->connected == CON_PLAYING && IS_IMMORTAL(d->character) && !IS_SET(d->character->comm, COMM_NOWIZ)) @@ -707,7 +707,7 @@ if (!IS_NPC(ch)) { CHAR_DATA *mob, *mob_next; - for (mob = ch->in_room->people; mob != NULL; mob = mob_next) + for (mob = ch->in_room->first_person; mob != NULL; mob = mob_next) { mob_next = mob->next_in_room; if (IS_NPC(mob) && HAS_TRIGGER(mob, TRIG_SPEECH) && @@ -749,7 +749,7 @@ act("" CTAG(_SHOUT1) "You shout '" CTAG(_SHOUT2) "$T" CTAG(_SHOUT1) "'{x", ch, NULL, argument, TO_CHAR); - for (d = descriptor_list; d != NULL; d = d->next) + for (d = descriptor_first; d != NULL; d = d->next) { CHAR_DATA *victim; @@ -950,7 +950,7 @@ } act("You yell '$t'", ch, argument, NULL, TO_CHAR); - for (d = descriptor_list; d != NULL; d = d->next) + for (d = descriptor_first; d != NULL; d = d->next) { if (d->connected == CON_PLAYING && d->character != ch && d->character->in_room != NULL && @@ -1006,7 +1006,7 @@ act("$n $t", ch, argument, NULL, TO_CHAR); - for (vch = ch->in_room->people; vch != NULL; vch = vch->next_in_room) + for (vch = ch->in_room->first_person; vch != NULL; vch = vch->next_in_room) { if (vch->desc == NULL || vch == ch) continue; @@ -1150,7 +1150,7 @@ close_socket(d); /* toast evil cheating bastards */ - for (d = descriptor_list; d != NULL; d = d_next) + for (d = descriptor_first; d != NULL; d = d_next) { CHAR_DATA *tch; @@ -1308,7 +1308,7 @@ ch->leader = NULL; - for (fch = char_list; fch != NULL; fch = fch->next) + for (fch = char_first; fch != NULL; fch = fch->next) { if (fch->master == ch) stop_follower(fch); @@ -1379,7 +1379,7 @@ } found = FALSE; - for (och = ch->in_room->people; och != NULL; och = och_next) + for (och = ch->in_room->first_person; och != NULL; och = och_next) { och_next = och->next_in_room; @@ -1418,7 +1418,7 @@ leader = (ch->leader != NULL) ? ch->leader : ch; chprintlnf(ch, "%s's group:", PERS(leader, ch)); - for (gch = char_list; gch != NULL; gch = gch->next) + for (gch = char_first; gch != NULL; gch = gch->next) { if (is_same_group(gch, ch)) { @@ -1531,7 +1531,7 @@ } members = 0; - for (gch = ch->in_room->people; gch != NULL; gch = gch->next_in_room) + for (gch = ch->in_room->first_person; gch != NULL; gch = gch->next_in_room) { if (is_same_group(gch, ch) && !IS_AFFECTED(gch, AFF_CHARM)) members++; @@ -1592,7 +1592,7 @@ amount_silver, amount_gold, share_silver, share_gold); } - for (gch = ch->in_room->people; gch != NULL; gch = gch->next_in_room) + for (gch = ch->in_room->first_person; gch != NULL; gch = gch->next_in_room) { if (gch != ch && is_same_group(gch, ch) && !IS_AFFECTED(gch, AFF_CHARM)) { @@ -1621,7 +1621,7 @@ return; } - for (gch = char_list; gch != NULL; gch = gch->next) + for (gch = char_first; gch != NULL; gch = gch->next) { if (is_same_group(gch, ch)) act_new("" CTAG(_GTELL1) "$n tells the group '" @@ -1925,7 +1925,7 @@ if (!Private) { - for (d = descriptor_list; d; d = d->next) + for (d = descriptor_first; d; d = d->next) { CHAR_DATA *och; @@ -1977,7 +1977,7 @@ return; } - if ((iValue = flag_value(info_flags, argument)) != NO_FLAG) + if ((iValue = flag_value(info_flags, argument)) != 0) { TOGGLE_BIT(ch->info_settings, iValue); chprintln(ch, "Info channel set."); diff -ur src/act_enter.c new/act_enter.c --- src/act_enter.c Sat Jan 11 16:24:00 2003 +++ new/act_enter.c Fri Jan 24 02:15:43 2003 @@ -80,7 +80,7 @@ old_room = ch->in_room; - portal = get_obj_list(ch, argument, ch->in_room->contents); + portal = get_obj_list(ch, argument, ch->in_room->first_content); if (portal == NULL) { @@ -165,7 +165,7 @@ if (old_room == location) return; - for (fch = old_room->people; fch != NULL; fch = fch_next) + for (fch = old_room->first_person; fch != NULL; fch = fch_next) { fch_next = fch->next_in_room; @@ -200,12 +200,12 @@ act("$p fades out of existence.", ch, portal, NULL, TO_CHAR); if (ch->in_room == old_room) act("$p fades out of existence.", ch, portal, NULL, TO_ROOM); - else if (old_room->people != NULL) + else if (old_room->first_person != NULL) { act("$p fades out of existence.", - old_room->people, portal, NULL, TO_CHAR); + old_room->first_person, portal, NULL, TO_CHAR); act("$p fades out of existence.", - old_room->people, portal, NULL, TO_ROOM); + old_room->first_person, portal, NULL, TO_ROOM); } extract_obj(portal); } diff -ur src/act_info.c new/act_info.c --- src/act_info.c Sat Jan 11 16:24:00 2003 +++ new/act_info.c Fri Jan 24 02:15:43 2003 @@ -498,7 +498,7 @@ { chprintln(ch, "\n\rYou peek at the inventory:"); check_improve(ch, gsn_peek, TRUE, 4); - show_list_to_char(victim->carrying, ch, TRUE, TRUE); + show_list_to_char(victim->first_carrying, ch, TRUE, TRUE); } return; @@ -1044,7 +1044,7 @@ room_is_dark(ch->in_room)) { chprintln(ch, "It is pitch black ... "); - show_char_to_char(ch->in_room->people, ch); + show_char_to_char(ch->in_room->first_person, ch); return; } @@ -1090,8 +1090,8 @@ do_function(ch, &do_exits, "auto"); } - show_list_to_char(ch->in_room->contents, ch, FALSE, FALSE); - show_char_to_char(ch->in_room->people, ch); + show_list_to_char(ch->in_room->first_content, ch, FALSE, FALSE); + show_char_to_char(ch->in_room->first_person, ch); return; } @@ -1143,7 +1143,7 @@ } act("$p holds:", ch, obj, NULL, TO_CHAR); - show_list_to_char(obj->contains, ch, TRUE, TRUE); + show_list_to_char(obj->first_content, ch, TRUE, TRUE); break; } return; @@ -1155,11 +1155,11 @@ return; } - for (obj = ch->carrying; obj != NULL; obj = obj->next_content) + for (obj = ch->first_carrying; obj != NULL; obj = obj->next_content) { if (can_see_obj(ch, obj)) { /* player can see object */ - pdesc = get_extra_descr(arg3, obj->extra_descr); + pdesc = get_extra_descr(arg3, obj->first_extra_descr); if (pdesc != NULL) { if (++count == number) @@ -1170,7 +1170,7 @@ else continue; } - pdesc = get_extra_descr(arg3, obj->pIndexData->extra_descr); + pdesc = get_extra_descr(arg3, obj->pIndexData->first_extra_descr); if (pdesc != NULL) { if (++count == number) @@ -1191,11 +1191,11 @@ } } - for (obj = ch->in_room->contents; obj != NULL; obj = obj->next_content) + for (obj = ch->in_room->first_content; obj != NULL; obj = obj->next_content) { if (can_see_obj(ch, obj)) { - pdesc = get_extra_descr(arg3, obj->extra_descr); + pdesc = get_extra_descr(arg3, obj->first_extra_descr); if (pdesc != NULL) if (++count == number) { @@ -1203,7 +1203,7 @@ return; } - pdesc = get_extra_descr(arg3, obj->pIndexData->extra_descr); + pdesc = get_extra_descr(arg3, obj->pIndexData->first_extra_descr); if (pdesc != NULL) if (++count == number) { @@ -1221,7 +1221,7 @@ } } - pdesc = get_extra_descr(arg3, ch->in_room->extra_descr); + pdesc = get_extra_descr(arg3, ch->in_room->first_extra_descr); if (pdesc != NULL) { if (++count == number) @@ -1715,10 +1715,10 @@ AFFECT_DATA *paf, *paf_last = NULL; char buf[MAX_STRING_LENGTH]; - if (ch->affected != NULL) + if (ch->first_affect != NULL) { chprintln(ch, "You are affected by the following spells:"); - for (paf = ch->affected; paf != NULL; paf = paf->next) + for (paf = ch->first_affect; paf != NULL; paf = paf->next) { if (paf_last != NULL && paf->type == paf_last->type) if (ch->level >= 20) @@ -2095,7 +2095,7 @@ output = new_buf(); - for (d = descriptor_list; d != NULL; d = d->next) + for (d = descriptor_first; d != NULL; d = d->next) { CHAR_DATA *wch; @@ -2258,7 +2258,7 @@ nMatch = 0; buf[0] = '\0'; output = new_buf(); - for (d = descriptor_list; d != NULL; d = d->next) + for (d = descriptor_first; d != NULL; d = d->next) { CHAR_DATA *wch; @@ -2309,7 +2309,7 @@ count = 0; - for (d = descriptor_list; d != NULL; d = d->next) + for (d = descriptor_first; d != NULL; d = d->next) if (d->connected == CON_PLAYING && can_see(ch, d->character)) count++; @@ -2327,7 +2327,7 @@ CH_CMD(do_inventory) { chprintln(ch, "You are carrying:"); - show_list_to_char(ch->carrying, ch, TRUE, TRUE); + show_list_to_char(ch->first_carrying, ch, TRUE, TRUE); return; } @@ -2383,7 +2383,7 @@ if (arg2[0] == '\0') { - for (obj2 = ch->carrying; obj2 != NULL; obj2 = obj2->next_content) + for (obj2 = ch->first_carrying; obj2 != NULL; obj2 = obj2->next_content) { if (obj2->wear_loc != WEAR_NONE && can_see_obj(ch, obj2) && obj1->item_type == obj2->item_type @@ -2476,7 +2476,7 @@ { chprintln(ch, "Players near you:"); found = FALSE; - for (d = descriptor_list; d; d = d->next) + for (d = descriptor_first; d; d = d->next) { if (d->connected == CON_PLAYING && (victim = d->character) != NULL && !IS_NPC(victim) && @@ -2497,7 +2497,7 @@ else { found = FALSE; - for (victim = char_list; victim != NULL; victim = victim->next) + for (victim = char_first; victim != NULL; victim = victim->next) { if (victim->in_room != NULL && victim->in_room->area == ch->in_room->area && @@ -2752,7 +2752,8 @@ return; } - for (mob = ch->in_room->people; mob != NULL; mob = mob->next_in_room) + for (mob = ch->in_room->first_person; mob != NULL; + mob = mob->next_in_room) { if (IS_NPC(mob) && IS_SET(mob->act, ACT_PRACTICE)) break; diff -ur src/act_move.c new/act_move.c --- src/act_move.c Sat Jan 11 16:24:00 2003 +++ new/act_move.c Fri Jan 24 02:15:43 2003 @@ -152,7 +152,7 @@ if (IS_IMMORTAL(ch)) found = TRUE; - for (obj = ch->carrying; obj != NULL; obj = obj->next_content) + for (obj = ch->first_carrying; obj != NULL; obj = obj->next_content) { if (obj->item_type == ITEM_BOAT) { @@ -203,7 +203,7 @@ if (in_room == to_room) /* no circular follows */ return; - for (fch = in_room->people; fch != NULL; fch = fch_next) + for (fch = in_room->first_person; fch != NULL; fch = fch_next) { fch_next = fch->next_in_room; @@ -455,7 +455,8 @@ CHAR_DATA *rch; REMOVE_BIT(pexit_rev->exit_info, EX_CLOSED); - for (rch = to_room->people; rch != NULL; rch = rch->next_in_room) + for (rch = to_room->first_person; rch != NULL; + rch = rch->next_in_room) act("The $d opens.", rch, NULL, pexit_rev->keyword, TO_CHAR); } } @@ -551,7 +552,8 @@ CHAR_DATA *rch; SET_BIT(pexit_rev->exit_info, EX_CLOSED); - for (rch = to_room->people; rch != NULL; rch = rch->next_in_room) + for (rch = to_room->first_person; rch != NULL; + rch = rch->next_in_room) act("The $d closes.", rch, NULL, pexit_rev->keyword, TO_CHAR); } } @@ -563,7 +565,7 @@ { OBJ_DATA *obj; - for (obj = ch->carrying; obj != NULL; obj = obj->next_content) + for (obj = ch->first_carrying; obj != NULL; obj = obj->next_content) { if (obj->pIndexData->vnum == key) return TRUE; @@ -856,7 +858,7 @@ WAIT_STATE(ch, skill_table[gsn_pick_lock].beats); /* look for guards */ - for (gch = ch->in_room->people; gch; gch = gch->next_in_room) + for (gch = ch->in_room->first_person; gch; gch = gch->next_in_room) { if (IS_NPC(gch) && IS_AWAKE(gch) && ch->level + 5 < gch->level) { @@ -1000,7 +1002,7 @@ chprintln(ch, "Maybe you should finish fighting first?"); return; } - obj = get_obj_list(ch, argument, ch->in_room->contents); + obj = get_obj_list(ch, argument, ch->in_room->first_content); if (obj == NULL) { chprintln(ch, "You don't see that here."); @@ -1111,7 +1113,7 @@ /* okay, now that we know we can rest, find an object to rest on */ if (argument[0] != '\0') { - obj = get_obj_list(ch, argument, ch->in_room->contents); + obj = get_obj_list(ch, argument, ch->in_room->first_content); if (obj == NULL) { chprintln(ch, "You don't see that here."); @@ -1246,7 +1248,7 @@ /* okay, now that we know we can sit, find an object to sit on */ if (argument[0] != '\0') { - obj = get_obj_list(ch, argument, ch->in_room->contents); + obj = get_obj_list(ch, argument, ch->in_room->first_content); if (obj == NULL) { chprintln(ch, "You don't see that here."); @@ -1380,7 +1382,7 @@ if (argument[0] == '\0') obj = ch->on; else - obj = get_obj_list(ch, argument, ch->in_room->contents); + obj = get_obj_list(ch, argument, ch->in_room->first_content); if (obj == NULL) { @@ -1616,7 +1618,7 @@ /* * Check for trainer. */ - for (mob = ch->in_room->people; mob; mob = mob->next_in_room) + for (mob = ch->in_room->first_person; mob; mob = mob->next_in_room) { if (IS_NPC(mob) && IS_SET(mob->act, ACT_TRAIN)) break; diff -ur src/act_obj.c new/act_obj.c --- src/act_obj.c Sat Jan 11 16:24:00 2003 +++ new/act_obj.c Fri Jan 24 02:15:43 2003 @@ -63,7 +63,7 @@ return TRUE; owner = NULL; - for (wch = char_list; wch != NULL; wch = wch->next) + for (wch = char_first; wch != NULL; wch = wch->next) if (!str_cmp(wch->name, obj->owner)) owner = wch; @@ -118,7 +118,8 @@ if (obj->in_room != NULL) { - for (gch = obj->in_room->people; gch != NULL; gch = gch->next_in_room) + for (gch = obj->in_room->first_person; gch != NULL; + gch = gch->next_in_room) if (gch->on == obj) { act("$N appears to be using $p.", ch, obj, gch, TO_CHAR); @@ -158,7 +159,7 @@ if (IS_SET(ch->act, PLR_AUTOSPLIT)) { /* AUTOSPLIT code */ members = 0; - for (gch = ch->in_room->people; gch != NULL; + for (gch = ch->in_room->first_person; gch != NULL; gch = gch->next_in_room) { if (!IS_AFFECTED(gch, AFF_CHARM) && is_same_group(gch, ch)) @@ -218,7 +219,7 @@ if (str_cmp(arg1, "all") && str_prefix("all.", arg1)) { /* 'get obj' */ - obj = get_obj_list(ch, arg1, ch->in_room->contents); + obj = get_obj_list(ch, arg1, ch->in_room->first_content); if (obj == NULL) { act("I see no $T here.", ch, NULL, arg1, TO_CHAR); @@ -231,7 +232,7 @@ { /* 'get all' or 'get all.obj' */ found = FALSE; - for (obj = ch->in_room->contents; obj != NULL; obj = obj_next) + for (obj = ch->in_room->first_content; obj != NULL; obj = obj_next) { obj_next = obj->next_content; if ((arg1[3] == '\0' @@ -296,7 +297,7 @@ if (str_cmp(arg1, "all") && str_prefix("all.", arg1)) { /* 'get obj container' */ - obj = get_obj_list(ch, arg1, container->contains); + obj = get_obj_list(ch, arg1, container->first_content); if (obj == NULL) { act("I see nothing like that in the $T.", ch, @@ -309,7 +310,7 @@ { /* 'get all container' or 'get all.obj container' */ found = FALSE; - for (obj = container->contains; obj != NULL; obj = obj_next) + for (obj = container->first_content; obj != NULL; obj = obj_next) { obj_next = obj->next_content; if ((arg1[3] == '\0' @@ -450,7 +451,7 @@ else { /* 'put all container' or 'put all.obj container' */ - for (obj = ch->carrying; obj != NULL; obj = obj_next) + for (obj = ch->first_carrying; obj != NULL; obj = obj_next) { obj_next = obj->next_content; @@ -548,7 +549,7 @@ gold = amount; } - for (obj = ch->in_room->contents; obj != NULL; obj = obj_next) + for (obj = ch->in_room->first_content; obj != NULL; obj = obj_next) { obj_next = obj->next_content; @@ -618,7 +619,7 @@ { /* 'drop all' or 'drop all.obj' */ found = FALSE; - for (obj = ch->carrying; obj != NULL; obj = obj_next) + for (obj = ch->first_carrying; obj != NULL; obj = obj_next) { obj_next = obj->next_content; @@ -854,7 +855,7 @@ return; } - obj = get_obj_list(ch, argument, ch->carrying); + obj = get_obj_list(ch, argument, ch->first_carrying); if (obj == NULL) { @@ -977,7 +978,7 @@ } found = FALSE; - for (fountain = ch->in_room->contents; fountain != NULL; + for (fountain = ch->in_room->first_content; fountain != NULL; fountain = fountain->next_content) { if (fountain->item_type == ITEM_FOUNTAIN) @@ -1159,7 +1160,7 @@ if (arg[0] == '\0') { - for (obj = ch->in_room->contents; obj; obj = obj->next_content) + for (obj = ch->in_room->first_content; obj; obj = obj->next_content) { if (obj->item_type == ITEM_FOUNTAIN) break; @@ -1700,7 +1701,7 @@ { OBJ_DATA *obj_next; - for (obj = ch->carrying; obj != NULL; obj = obj_next) + for (obj = ch->first_carrying; obj != NULL; obj = obj_next) { obj_next = obj->next_content; if (obj->wear_loc == WEAR_NONE && can_see_obj(ch, obj)) @@ -1739,7 +1740,7 @@ { OBJ_DATA *obj_next; - for (obj = ch->carrying; obj != NULL; obj = obj_next) + for (obj = ch->first_carrying; obj != NULL; obj = obj_next) { obj_next = obj->next_content; if (obj->wear_loc != WEAR_NONE && can_see_obj(ch, obj) @@ -1780,7 +1781,7 @@ return; } - obj = get_obj_list(ch, arg, ch->in_room->contents); + obj = get_obj_list(ch, arg, ch->in_room->first_content); if (obj == NULL) { chprintln(ch, "You can't find it."); @@ -1789,7 +1790,7 @@ if (obj->item_type == ITEM_CORPSE_PC) { - if (obj->contains) + if (obj->first_content) { chprintln(ch, "Mota wouldn't like that."); return; @@ -1804,7 +1805,8 @@ if (obj->in_room != NULL) { - for (gch = obj->in_room->people; gch != NULL; gch = gch->next_in_room) + for (gch = obj->in_room->first_person; gch != NULL; + gch = gch->next_in_room) if (gch->on == obj) { act("$N appears to be using $p.", ch, obj, gch, TO_CHAR); @@ -1831,7 +1833,8 @@ if (IS_SET(ch->act, PLR_AUTOSPLIT)) { /* AUTOSPLIT code */ members = 0; - for (gch = ch->in_room->people; gch != NULL; gch = gch->next_in_room) + for (gch = ch->in_room->first_person; gch != NULL; + gch = gch->next_in_room) { if (is_same_group(gch, ch)) members++; @@ -2006,7 +2009,7 @@ } else - for (vch = ch->in_room->people; vch; vch = vch_next) + for (vch = ch->in_room->first_person; vch; vch = vch_next) { vch_next = vch->next_in_room; @@ -2332,7 +2335,8 @@ SHOP_DATA *pShop; pShop = NULL; - for (keeper = ch->in_room->people; keeper; keeper = keeper->next_in_room) + for (keeper = ch->in_room->first_person; keeper; + keeper = keeper->next_in_room) { if (IS_NPC(keeper) && (pShop = keeper->pIndexData->pShop) != NULL) break; @@ -2396,7 +2400,7 @@ OBJ_DATA *t_obj, *t_obj_next; /* see if any duplicates are found */ - for (t_obj = ch->carrying; t_obj != NULL; t_obj = t_obj_next) + for (t_obj = ch->first_carrying; t_obj != NULL; t_obj = t_obj_next) { t_obj_next = t_obj->next_content; @@ -2416,13 +2420,12 @@ if (t_obj == NULL) { - obj->next_content = ch->carrying; - ch->carrying = obj; + LINK(obj, ch->first_carrying, ch->last_carrying, next_content, + prev_content); } else { - obj->next_content = t_obj->next_content; - t_obj->next_content = obj; + INSERT(obj, t_obj, ch->first_carrying, next_content, prev_content); } obj->carried_by = ch; @@ -2442,7 +2445,7 @@ number = number_argument(argument, arg); count = 0; - for (obj = keeper->carrying; obj != NULL; obj = obj->next_content) + for (obj = keeper->first_carrying; obj != NULL; obj = obj->next_content) { if (obj->wear_loc == WEAR_NONE && can_see_obj(keeper, obj) && can_see_obj(ch, obj) && is_name(arg, obj->name)) @@ -2490,7 +2493,7 @@ if (!IS_OBJ_STAT(obj, ITEM_SELL_EXTRACT)) { - for (obj2 = keeper->carrying; obj2; obj2 = obj2->next_content) + for (obj2 = keeper->first_carrying; obj2; obj2 = obj2->next_content) { if (obj->pIndexData == obj2->pIndexData && !str_cmp(obj->short_descr, obj2->short_descr)) @@ -2773,7 +2776,7 @@ } found = FALSE; - for (pet = pRoomIndexNext->people; pet; pet = pet->next_in_room) + for (pet = pRoomIndexNext->first_person; pet; pet = pet->next_in_room) { if (IS_SET(pet->act, ACT_PET)) { @@ -2803,7 +2806,7 @@ one_argument(argument, arg); found = FALSE; - for (obj = keeper->carrying; obj; obj = obj->next_content) + for (obj = keeper->first_carrying; obj; obj = obj->next_content) { if (obj->wear_loc == WEAR_NONE && can_see_obj(ch, obj) && (cost = get_cost(keeper, obj, TRUE)) > 0 && diff -ur src/act_wiz.c new/act_wiz.c --- src/act_wiz.c Sat Jan 11 16:24:00 2003 +++ new/act_wiz.c Fri Jan 24 02:15:43 2003 @@ -54,7 +54,7 @@ CH_CMD(do_wiznet) { - flag_t flag; + int flag; char buf[MAX_STRING_LENGTH]; if (argument[0] == '\0') @@ -129,7 +129,7 @@ flag = wiznet_lookup(argument); - if (flag == -1 || get_trust(ch) < wiznet_table[flag].level) + if (flag == 0 || get_trust(ch) < wiznet_table[flag].level) { chprintln(ch, "No such option."); return; @@ -157,7 +157,7 @@ { DESCRIPTOR_DATA *d; - for (d = descriptor_list; d != NULL; d = d->next) + for (d = descriptor_first; d != NULL; d = d->next) { if (d->connected == CON_PLAYING && IS_IMMORTAL(d->character) && IS_SET(d->character->wiznet, WIZ_ON) && (!flag || @@ -363,7 +363,7 @@ chprintln(ch, argument); - for (vch = ch->in_room->people; vch != NULL; vch = vch->next_in_room) + for (vch = ch->in_room->first_person; vch != NULL; vch = vch->next_in_room) { if (vch->desc == NULL || vch == ch) continue; @@ -540,7 +540,7 @@ int desc; desc = atoi(arg); - for (d = descriptor_list; d != NULL; d = d->next) + for (d = descriptor_first; d != NULL; d = d->next) { if (d->descriptor == desc) { @@ -563,7 +563,7 @@ return; } - for (d = descriptor_list; d != NULL; d = d->next) + for (d = descriptor_first; d != NULL; d = d->next) { if (d == victim->desc) { @@ -641,7 +641,7 @@ return; } - for (d = descriptor_list; d; d = d->next) + for (d = descriptor_first; d; d = d->next) { if (d->connected == CON_PLAYING) { @@ -665,7 +665,7 @@ return; } - for (d = descriptor_list; d; d = d->next) + for (d = descriptor_first; d; d = d->next) { if (d->connected == CON_PLAYING && d->character->in_room == ch->in_room) { @@ -688,7 +688,7 @@ return; } - for (d = descriptor_list; d; d = d->next) + for (d = descriptor_first; d; d = d->next) { if (d->connected == CON_PLAYING && d->character->in_room != NULL && ch->in_room != NULL @@ -764,7 +764,7 @@ if (!str_cmp(arg1, "all")) { - for (d = descriptor_list; d != NULL; d = d->next) + for (d = descriptor_first; d != NULL; d = d->next) { if (d->connected == CON_PLAYING && d->character != ch && d->character->in_room != NULL && can_see(ch, d->character)) @@ -863,7 +863,7 @@ * See if 'ch' still exists before continuing! * Handles 'at XXXX quit' case. */ - for (wch = char_list; wch != NULL; wch = wch->next) + for (wch = char_first; wch != NULL; wch = wch->next) { if (wch == ch) { @@ -896,7 +896,7 @@ } count = 0; - for (rch = location->people; rch != NULL; rch = rch->next_in_room) + for (rch = location->first_person; rch != NULL; rch = rch->next_in_room) count++; if (!is_room_owner(ch, location) && room_is_private(location) && @@ -909,7 +909,7 @@ if (ch->fighting != NULL) stop_fighting(ch, TRUE); - for (rch = ch->in_room->people; rch != NULL; rch = rch->next_in_room) + for (rch = ch->in_room->first_person; rch != NULL; rch = rch->next_in_room) { if (get_trust(rch) >= ch->invis_level) { @@ -923,7 +923,7 @@ char_from_room(ch); char_to_room(ch, location); - for (rch = ch->in_room->people; rch != NULL; rch = rch->next_in_room) + for (rch = ch->in_room->first_person; rch != NULL; rch = rch->next_in_room) { if (get_trust(rch) >= ch->invis_level) { @@ -964,7 +964,7 @@ if (ch->fighting != NULL) stop_fighting(ch, TRUE); - for (rch = ch->in_room->people; rch != NULL; rch = rch->next_in_room) + for (rch = ch->in_room->first_person; rch != NULL; rch = rch->next_in_room) { if (get_trust(rch) >= ch->invis_level) { @@ -978,7 +978,7 @@ char_from_room(ch); char_to_room(ch, location); - for (rch = ch->in_room->people; rch != NULL; rch = rch->next_in_room) + for (rch = ch->in_room->first_person; rch != NULL; rch = rch->next_in_room) { if (get_trust(rch) >= ch->invis_level) { @@ -1094,12 +1094,12 @@ flag_string(room_flags, location->room_flags), location->description); - if (location->extra_descr != NULL) + if (location->first_extra_descr != NULL) { EXTRA_DESCR_DATA *ed; chprint(ch, "Extra description keywords: '"); - for (ed = location->extra_descr; ed; ed = ed->next) + for (ed = location->first_extra_descr; ed; ed = ed->next) { chprint(ch, ed->keyword); if (ed->next != NULL) @@ -1109,7 +1109,7 @@ } chprint(ch, "Characters:"); - for (rch = location->people; rch; rch = rch->next_in_room) + for (rch = location->first_person; rch; rch = rch->next_in_room) { if (can_see(ch, rch)) { @@ -1120,7 +1120,7 @@ } chprint(ch, ".\n\rObjects: "); - for (obj = location->contents; obj; obj = obj->next_content) + for (obj = location->first_content; obj; obj = obj->next_content) { chprint(ch, " "); one_argument(obj->name, buf); @@ -1338,20 +1338,21 @@ break; } - if (obj->extra_descr != NULL || obj->pIndexData->extra_descr != NULL) + if (obj->first_extra_descr != NULL + || obj->pIndexData->first_extra_descr != NULL) { EXTRA_DESCR_DATA *ed; chprint(ch, "Extra description keywords: '"); - for (ed = obj->extra_descr; ed != NULL; ed = ed->next) + for (ed = obj->first_extra_descr; ed != NULL; ed = ed->next) { chprint(ch, ed->keyword); if (ed->next != NULL) chprint(ch, " "); } - for (ed = obj->pIndexData->extra_descr; ed != NULL; ed = ed->next) + for (ed = obj->pIndexData->first_extra_descr; ed != NULL; ed = ed->next) { chprint(ch, ed->keyword); if (ed->next != NULL) @@ -1361,7 +1362,7 @@ chprintln(ch, "'"); } - for (paf = obj->affected; paf != NULL; paf = paf->next) + for (paf = obj->first_affect; paf != NULL; paf = paf->next) { chprintf(ch, "Affects %s by %d, level %d", flag_string(apply_flags, paf->location), paf->modifier, @@ -1408,7 +1409,7 @@ } if (!obj->enchanted) - for (paf = obj->pIndexData->affected; paf != NULL; paf = paf->next) + for (paf = obj->pIndexData->first_affect; paf != NULL; paf = paf->next) { chprintlnf(ch, "Affects %s by %d, level %d.", flag_string(apply_flags, paf->location), @@ -1657,7 +1658,7 @@ } } - for (paf = victim->affected; paf != NULL; paf = paf->next) + for (paf = victim->first_affect; paf != NULL; paf = paf->next) { chprintlnf(ch, "Spell: '%s' modifies %s by %d for %d hours with bits %s, level %d.", @@ -1823,7 +1824,7 @@ return; } - for (obj = object_list; obj != NULL; obj = obj->next) + for (obj = object_first; obj != NULL; obj = obj->next) { if (!can_see_obj(ch, obj) || !is_name(argument, obj->name) || ch->level < obj->level) @@ -1878,7 +1879,7 @@ /* show characters logged */ buffer = new_buf(); - for (d = descriptor_list; d != NULL; d = d->next) + for (d = descriptor_first; d != NULL; d = d->next) { if (d->character != NULL && d->connected == CON_PLAYING && d->character->in_room != NULL @@ -1908,7 +1909,7 @@ found = FALSE; buffer = new_buf(); - for (victim = char_list; victim != NULL; victim = victim->next) + for (victim = char_first; victim != NULL; victim = victim->next) { if (victim->in_room != NULL && is_name(argument, victim->name)) { @@ -1954,7 +1955,7 @@ end_war(); merc_down = TRUE; save_gquest_data(); - for (d = descriptor_list; d != NULL; d = d_next) + for (d = descriptor_first; d != NULL; d = d_next) { d_next = d->next; vch = d->original ? d->original : d->character; @@ -1991,7 +1992,7 @@ end_war(); merc_down = TRUE; save_gquest_data(); - for (d = descriptor_list; d != NULL; d = d_next) + for (d = descriptor_first; d != NULL; d = d_next) { d_next = d->next; vch = d->original ? d->original : d->character; @@ -2065,7 +2066,7 @@ chprintln(ch, "Cancelling all snoops."); wiznet("$N stops being such a snoop.", ch, NULL, WIZ_SNOOPS, WIZ_SECURE, get_trust(ch)); - for (d = descriptor_list; d != NULL; d = d->next) + for (d = descriptor_first; d != NULL; d = d->next) { if (d->snoop_by == ch->desc) d->snoop_by = NULL; @@ -2233,7 +2234,7 @@ { OBJ_DATA *c_obj, *t_obj; - for (c_obj = obj->contains; c_obj != NULL; c_obj = c_obj->next_content) + for (c_obj = obj->first_content; c_obj != NULL; c_obj = c_obj->next_content) { if (obj_check(ch, c_obj)) { @@ -2341,7 +2342,7 @@ clone = create_mobile(mob->pIndexData); clone_mobile(mob, clone); - for (obj = mob->carrying; obj != NULL; obj = obj->next_content) + for (obj = mob->first_carrying; obj != NULL; obj = obj->next_content) { if (obj_check(ch, obj)) { @@ -2487,7 +2488,7 @@ CHAR_DATA *vnext; OBJ_DATA *obj_next; - for (victim = ch->in_room->people; victim != NULL; victim = vnext) + for (victim = ch->in_room->first_person; victim != NULL; victim = vnext) { vnext = victim->next_in_room; if (IS_NPC(victim) && !IS_SET(victim->act, ACT_NOPURGE) && victim != ch /* safety precaution */ @@ -2495,7 +2496,7 @@ extract_char(victim, TRUE); } - for (obj = ch->in_room->contents; obj != NULL; obj = obj_next) + for (obj = ch->in_room->first_content; obj != NULL; obj = obj_next) { obj_next = obj->next_content; if (!IS_OBJ_STAT(obj, ITEM_NOPURGE)) @@ -2682,7 +2683,8 @@ { /* cure room */ - for (vch = ch->in_room->people; vch != NULL; vch = vch->next_in_room) + for (vch = ch->in_room->first_person; vch != NULL; + vch = vch->next_in_room) { affect_strip(vch, gsn_plague); affect_strip(vch, gsn_poison); @@ -2709,7 +2711,7 @@ { /* cure all */ - for (d = descriptor_list; d != NULL; d = d->next) + for (d = descriptor_first; d != NULL; d = d->next) { victim = d->character; @@ -3011,7 +3013,7 @@ { CHAR_DATA *rch; - for (rch = ch->in_room->people; rch != NULL; rch = rch->next_in_room) + for (rch = ch->in_room->first_person; rch != NULL; rch = rch->next_in_room) { if (rch->fighting != NULL) stop_fighting(rch, TRUE); @@ -3839,8 +3841,7 @@ ed->keyword = str_dup(arg3); ed->description = str_dup(buf); - ed->next = obj->extra_descr; - obj->extra_descr = ed; + LINK(ed, obj->first_extra_descr, obj->last_extra_descr, next, prev); return; } } @@ -4038,7 +4039,7 @@ buf[0] = '\0'; one_argument(argument, arg); - for (d = descriptor_list; d != NULL; d = d->next) + for (d = descriptor_first; d != NULL; d = d->next) { if (d->character != NULL && can_see(ch, d->character) && (arg[0] == '\0' || is_name(arg, d->character->name) || @@ -4101,7 +4102,7 @@ return; } - for (vch = char_list; vch != NULL; vch = vch_next) + for (vch = char_first; vch != NULL; vch = vch_next) { vch_next = vch->next; @@ -4123,7 +4124,7 @@ return; } - for (vch = char_list; vch != NULL; vch = vch_next) + for (vch = char_first; vch != NULL; vch = vch_next) { vch_next = vch->next; @@ -4146,7 +4147,7 @@ return; } - for (vch = char_list; vch != NULL; vch = vch_next) + for (vch = char_first; vch != NULL; vch = vch_next) { vch_next = vch->next; @@ -4395,7 +4396,7 @@ ch ? ch->name : "System"); /* For each playing descriptor, save its state */ - for (d = descriptor_list; d; d = d_next) + for (d = descriptor_first; d; d = d_next) { CHAR_DATA *och = CH(d); d_next = d->next; /* We delete from the list , so need to save this */ @@ -4490,8 +4491,7 @@ d->descriptor = desc; d->d_flags = dflags; d->host = str_dup(host); - d->next = descriptor_list; - descriptor_list = d; + LINK(d, descriptor_first, descriptor_last, next, prev); d->connected = CON_COPYOVER_RECOVER; /* -15, so close_socket frees the char */ init_telnet(d); @@ -4522,12 +4522,11 @@ if (!d->character->in_room) d->character->in_room = get_room_index(ROOM_VNUM_TEMPLE); - /* Insert in the char_list */ - d->character->next = char_list; - char_list = d->character; + /* Insert in the char_first */ + LINK(d->character, char_first, char_last, next, prev); - d->character->next_player = player_list; - player_list = d->character; + LINK(d->character, player_first, player_last, next_player, + prev_player); char_to_room(d->character, d->character->in_room); do_look(d->character, "auto"); diff -ur src/auction.c new/auction.c --- src/auction.c Sat Jan 11 16:24:00 2003 +++ new/auction.c Fri Jan 24 02:15:43 2003 @@ -39,13 +39,11 @@ #include "magic.h" #include "recycle.h" -AUCTION_DATA *auction_list; - AUCTION_DATA *auction_lookup(int num) { AUCTION_DATA *pAuc; - for (pAuc = auction_list; pAuc != NULL; pAuc = pAuc->next) + for (pAuc = auction_first; pAuc != NULL; pAuc = pAuc->next) { if (pAuc->number == num) return pAuc; @@ -188,8 +186,7 @@ } auc = new_auction(); - auc->next = auction_list; - auction_list = auc; + LINK(auc, auction_first, auction_last, next, prev); SET_BIT(obj->extra_flags, ITEM_AUCTIONED); auc->owner = ch; auc->item = obj; @@ -212,7 +209,7 @@ { AUCTION_DATA *auc, *auc_next; - for (auc = auction_list; auc != NULL; auc = auc_next) + for (auc = auction_first; auc != NULL; auc = auc_next) { auc_next = auc->next; @@ -339,26 +336,7 @@ auc->owner = NULL; auc->status = 0; auc->number = 0; - if (auction_list == auc) - { - auction_list = auc->next; - } - else - { - AUCTION_DATA *prev; - for (prev = auction_list; prev != NULL; prev = prev->next) - { - if (prev->next == auc) - { - prev->next = auc->next; - break; - } - } - if (prev == NULL) - { - bug("auc not found in auction_list.", 0); - } - } + UNLINK(auc, auction_first, auction_last, next, prev); free_auction(auc); return; } @@ -368,7 +346,7 @@ AUCTION_DATA *q; int count; - q = auction_list; + q = auction_first; if (!q) return 0; @@ -505,7 +483,7 @@ argument = one_argument(argument, arg1); argument = one_argument(argument, arg2); - if (auction_list == NULL) + if (auction_first == NULL) { chprintln(ch, "There's nothing up for auction right now."); return; @@ -519,7 +497,7 @@ "{GNum Seller Item Description Lvl Last Bid Time{x"); chprintln(ch, "{W--- ------------ ----------------------------------- --- ------------- ----{x"); - for (auc = auction_list; auc; auc = auc_next) + for (auc = auction_first; auc; auc = auc_next) { auc_next = auc->next; @@ -595,7 +573,7 @@ return; } - bid = parsebet(auction_list->bid, arg2); + bid = parsebet(auction_first->bid, arg2); if (bid < 0 || bid > 200000000) { @@ -656,7 +634,7 @@ { AUCTION_DATA *auc; - for (auc = auction_list; auc != NULL; auc = auc->next) + for (auc = auction_first; auc != NULL; auc = auc->next) { if (auc->owner == ch || auc->high_bidder == ch) return TRUE; @@ -669,7 +647,7 @@ { AUCTION_DATA *auc, *auc_next; - for (auc = auction_list; auc != NULL; auc = auc_next) + for (auc = auction_first; auc != NULL; auc = auc_next) { auc_next = auc->next; diff -ur src/automap.c new/automap.c --- src/automap.c Sat Jan 11 16:24:00 2003 +++ new/automap.c Fri Jan 24 02:15:43 2003 @@ -40,7 +40,7 @@ #define MAPX 10 #define MAPY 8 #define BOUNDARY(x, y) (((x) < 0) || ((y) < 0) || \ -((x) > MAPX) || ((y) > MAPY)) \ +((x) > MAPX) || ((y) > MAPY)) struct map_type { diff -ur src/ban.c new/ban.c --- src/ban.c Sat Jan 11 16:24:00 2003 +++ new/ban.c Fri Jan 24 02:15:43 2003 @@ -37,8 +37,6 @@ #include "recycle.h" #include "interp.h" -BAN_DATA *ban_list; - bool check_ban(const char *site, int type) { BAN_DATA *pban; @@ -47,7 +45,7 @@ strcpy(host, capitalize(site)); host[0] = LOWER(host[0]); - for (pban = ban_list; pban != NULL; pban = pban->next) + for (pban = ban_first; pban != NULL; pban = pban->next) { if (!IS_SET(pban->ban_flags, type)) continue; @@ -84,7 +82,7 @@ if (arg1[0] == '\0') { - if (ban_list == NULL) + if (ban_first == NULL) { chprintln(ch, "No sites banned at this time."); return; @@ -92,7 +90,7 @@ buffer = new_buf(); add_buf(buffer, "Banned sites level type status\n\r"); - for (pban = ban_list; pban != NULL; pban = pban->next) + for (pban = ban_first; pban != NULL; pban = pban->next) { sprintf(buf2, "%s%s%s", IS_SET(pban->ban_flags, BAN_PREFIX) ? "*" : "", @@ -146,8 +144,10 @@ } prev = NULL; - for (pban = ban_list; pban != NULL; prev = pban, pban = pban->next) + for (pban = ban_first; pban != NULL; pban = prev) { + prev = pban->next; + if (!str_cmp(name, pban->name)) { if (pban->level > get_trust(ch)) @@ -157,10 +157,7 @@ } else { - if (prev == NULL) - ban_list = pban->next; - else - prev->next = pban->next; + UNLINK(pban, ban_first, ban_last, next, prev); free_ban(pban); } } @@ -180,8 +177,7 @@ if (fPerm) SET_BIT(pban->ban_flags, BAN_PERMANENT); - pban->next = ban_list; - ban_list = pban; + LINK(pban, ban_first, ban_last, next, prev); save_bans(); sprintf(buf, "%s has been banned.\n\r", pban->name); chprint(ch, buf); @@ -213,8 +209,10 @@ } prev = NULL; - for (curr = ban_list; curr != NULL; prev = curr, curr = curr->next) + for (curr = ban_first; curr != NULL; curr = prev) { + prev = curr->next; + if (!str_cmp(arg, curr->name)) { if (curr->level > get_trust(ch)) @@ -222,10 +220,7 @@ chprintln(ch, "You are not powerful enough to lift that ban."); return; } - if (prev == NULL) - ban_list = ban_list->next; - else - prev->next = curr->next; + UNLINK(curr, ban_first, ban_last, next, prev); free_ban(curr); chprintlnf(ch, "Ban on %s lifted.", arg); diff -ur src/bit.c new/bit.c --- src/bit.c Sat Jan 11 16:24:00 2003 +++ new/bit.c Fri Jan 24 02:15:43 2003 @@ -138,7 +138,7 @@ if (is_stat(flag_table)) { if ((f = flag_lookup(argument, flag_table)) == NULL) - return NO_FLAG; + return 0; return f->bit; } @@ -156,12 +156,12 @@ break; if ((f = flag_lookup(word, flag_table)) == NULL) - return NO_FLAG; + return 0; SET_BIT(marked, f->bit); } - return marked == 0 ? NO_FLAG : marked; + return marked; } /***************************************************************************** diff -ur src/board.c new/board.c --- src/board.c Sat Jan 11 16:24:00 2003 +++ new/board.c Fri Jan 24 02:15:43 2003 @@ -34,6 +34,7 @@ #include <time.h> #include "merc.h" #include "interp.h" +#include "recycle.h" /* @@ -91,7 +92,8 @@ long last_note_stamp = 0; /* To generate unique timestamps on notes */ -NOTE_DATA *note_list; +NOTE_DATA *note_first; +NOTE_DATA *note_last; NOTE_DATA *note_free; #define BOARD_NOACCESS -1 @@ -113,8 +115,7 @@ if (note->text) free_string(note->text); - note->next = note_free; - note_free = note; + PUT_FREE(note, next, note_free); } /* allocate memory for a new note or recycle */ @@ -159,7 +160,6 @@ void finish_note(BOARD_DATA * board, NOTE_DATA * note) { FILE *fp; - NOTE_DATA *p; char filename[200]; /* The following is done in order to generate unique date_stamps */ @@ -173,15 +173,7 @@ } if (board->note_first) /* are there any notes in there now? */ - { - for (p = board->note_first; p->next; p = p->next) - ; /* empty */ - - p->next = note; - } - else /* nope. empty list. */ - board->note_first = note; - + LINK(note, board->note_first, board->note_last, next, prev); /* append note to note file */ sprintf(filename, "%s%s", NOTE_DIR, board->short_name); @@ -225,18 +217,7 @@ /* Remove list from the list. Do not free note */ static void unlink_note(BOARD_DATA * board, NOTE_DATA * note) { - NOTE_DATA *p; - - if (board->note_first == note) - board->note_first = note->next; - else - { - for (p = board->note_first; p && p->next != note; p = p->next); - if (!p) - bug("unlink_note: could not find note.", 0); - else - p->next = note->next; - } + UNLINK(note, board->note_first, board->note_last, next, prev); } /* Find the nth note on a board. Return NULL if ch has no access to that note */ @@ -308,7 +289,6 @@ static void load_board(BOARD_DATA * board) { FILE *fp, *fp_archive; - NOTE_DATA *last_note; char filename[200]; sprintf(filename, "%s/%s", NOTE_DIR, board->short_name); @@ -321,8 +301,6 @@ /* Start note fetching. copy of db.c:load_notes() */ - last_note = NULL; - for (;;) { NOTE_DATA *pnote; @@ -370,8 +348,6 @@ break; pnote->text = fread_string(fp); - pnote->next = NULL; /* jic */ - /* Should this note be archived right now ? */ if (pnote->expire < current_time) @@ -394,12 +370,7 @@ } - if (board->note_first == NULL) - board->note_first = pnote; - else - last_note->next = pnote; - - last_note = pnote; + LINK(pnote, board->note_first, board->note_last, next, prev); } bug("Load_notes: bad key word.", 0); diff -ur src/board.h new/board.h --- src/board.h Sat Jan 11 16:24:00 2003 +++ new/board.h Fri Jan 24 02:15:43 2003 @@ -63,6 +63,7 @@ /* Non-constant data */ NOTE_DATA *note_first; /* pointer to board's first note */ + NOTE_DATA *note_last; /* pointer to board's last note */ bool changed; /* currently unused */ }; diff -ur src/comm.c new/comm.c --- src/comm.c Sat Jan 11 16:24:00 2003 +++ new/comm.c Fri Jan 24 02:15:43 2003 @@ -80,14 +80,10 @@ /* * Global variables. */ -DESCRIPTOR_DATA *descriptor_list; /* All open descriptors */ DESCRIPTOR_DATA *d_next; /* Next descriptor in loop */ -FILE *fpReserve; /* Reserved file handle */ bool god; /* All new chars are gods! */ bool merc_down; /* Shutdown */ char str_boot_time[MAX_INPUT_LENGTH]; -time_t current_time; /* time of this pulse */ -bool MOBtrigger = TRUE; /* act() switch */ /* Needs to be global because of do_copyover */ int port, control; /* Global variable */ @@ -438,7 +434,7 @@ FD_ZERO(&exc_set); FD_SET(ctrl, &in_set); maxdesc = ctrl; - for (d = descriptor_list; d; d = d->next) + for (d = descriptor_first; d; d = d->next) { maxdesc = UMAX(maxdesc, d->descriptor); FD_SET(d->descriptor, &in_set); @@ -464,7 +460,7 @@ /* * Kick out the freaky folks. */ - for (d = descriptor_list; d != NULL; d = d_next) + for (d = descriptor_first; d != NULL; d = d_next) { d_next = d->next; if (FD_ISSET(d->descriptor, &exc_set)) @@ -481,7 +477,7 @@ /* * Process input. */ - for (d = descriptor_list; d != NULL; d = d_next) + for (d = descriptor_first; d != NULL; d = d_next) { d_next = d->next; d->fcommand = FALSE; @@ -545,7 +541,7 @@ /* * Output. */ - for (d = descriptor_list; d != NULL; d = d_next) + for (d = descriptor_first; d != NULL; d = d_next) { d_next = d->next; @@ -684,8 +680,7 @@ /* * Init descriptor data. */ - dnew->next = descriptor_list; - descriptor_list = dnew; + LINK(dnew, descriptor_first, descriptor_last, next, prev); /* * Send the greeting. @@ -712,7 +707,7 @@ { DESCRIPTOR_DATA *d; - for (d = descriptor_list; d != NULL; d = d->next) + for (d = descriptor_first; d != NULL; d = d->next) { if (d->snoop_by == dclose) d->snoop_by = NULL; @@ -744,21 +739,7 @@ if (d_next == dclose) d_next = d_next->next; - if (dclose == descriptor_list) - { - descriptor_list = descriptor_list->next; - } - else - { - DESCRIPTOR_DATA *d; - - for (d = descriptor_list; d && d->next != dclose; d = d->next) - ; - if (d != NULL) - d->next = dclose->next; - else - bug("Close_socket: dclose not found.", 0); - } + UNLINK(dclose, descriptor_first, descriptor_last, next, prev); #if !defined(NO_MCCP) if (dclose->out_compress) @@ -833,6 +814,8 @@ #endif )) { + SET_BIT(d->d_flags, DESC_COLOUR); + write_to_buffer(d, "{`Colour{c enabled Automatically...{x\n\r", 0); show_greeting(d); d->connected = CON_GET_NAME; } @@ -1344,7 +1327,27 @@ if (!merc_down) { if (d->showstr_point) - write_to_buffer(d, "[Hit Return to continue]\n\r", 0); + { + char buf[MSL]; + const char *ptr; + int shown_lines = 0; + int total_lines = 0; + + for (ptr = d->showstr_head; ptr != d->showstr_point; ptr++) + if (*ptr == '\n') + shown_lines++; + + total_lines = shown_lines; + for (ptr = d->showstr_point; *ptr != '\0'; ptr++) + if (*ptr == '\n') + total_lines++; + + sprintf(buf, + "\n\r(%d%%) Please type (H)elp, (R)efresh, (B)ack, or (C)ontinue or hit ENTER.\n\r", + 100 * shown_lines / total_lines); + write_to_buffer(d, buf, 0); + + } else if (fPrompt && d->pString && d->connected == CON_PLAYING) write_to_buffer(d, "> ", 2); else if (fPrompt && d->connected == CON_NOTE_TEXT) @@ -1815,7 +1818,7 @@ { CHAR_DATA *ch; - for (ch = char_list; ch != NULL; ch = ch->next) + for (ch = char_first; ch != NULL; ch = ch->next) { if (!IS_NPC(ch) && (!fConn || ch->desc == NULL) && !str_cmp(d->character->name, ch->name)) @@ -1860,7 +1863,7 @@ { DESCRIPTOR_DATA *dold; - for (dold = descriptor_list; dold; dold = dold->next) + for (dold = descriptor_first; dold; dold = dold->next) { if (dold != d && dold->character != NULL && dold->connected != CON_GET_NAME && @@ -1939,55 +1942,93 @@ /* string pager */ void show_string(struct descriptor_data *d, char *input) { - char buffer[4 * MAX_STRING_LENGTH]; + char buffer[MAX_STRING_LENGTH * 3]; char buf[MAX_INPUT_LENGTH]; + register const char *scan; + register char *scan2; register const char *chk; - register char *scan; - int lines = 0, toggle = 1; - int show_lines; + int lines = 0; + int toggle = 1; one_argument(input, buf); - if (buf[0] != '\0') + + switch (UPPER(buf[0])) { + case '\0': + case 'C': + lines = 0; + break; + + case 'R': /* refresh current page of text */ + lines = -1 - (d->character->lines); + break; + + case 'B': /* scroll back a page of text */ + lines = -(2 * (int) d->character->lines); + break; + + case '?': + case 'H': /* Show some help */ + write_to_buffer(d, "Pager help:\n\r" "C or Enter next page\n\r" + "R refresh this page\n\r", 0); + write_to_buffer(d, + "B previous page\n\r" + "H or ? help\n\r" "Any other keys exit.\n\r", + 0); + return; + + default: /*otherwise, stop the text viewing */ if (d->showstr_head) { - free_mem(d->showstr_head); - d->showstr_head = 0; + replace_string(d->showstr_head, ""); } - d->showstr_point = 0; + d->showstr_point = NULL; return; - } - if (d->character) - show_lines = d->character->lines; - else - show_lines = 0; + } - for (scan = buffer;; scan++, d->showstr_point++) + /* do any backing up necessary */ + if (lines < 0) { - if (((*scan = *d->showstr_point) == '\n' || *scan == '\r') && - (toggle = -toggle) < 0) - lines++; + for (scan = d->showstr_point; scan > d->showstr_head; scan--) + if ((*scan == '\n') || (*scan == '\r')) + { + toggle = -toggle; + if (toggle < 0) + if (!(++lines)) + break; + } + d->showstr_point = scan; + } - else if (!*scan || (show_lines > 0 && lines >= show_lines)) + /* show a chunk */ + lines = 0; + toggle = 1; + for (scan2 = buffer;; scan2++, d->showstr_point++) + if (((*scan2 = *d->showstr_point) == '\n' || *scan2 == '\r') + && (toggle = -toggle) < 0) + lines++; + else if (!*scan2 + || (d->character && !IS_NPC(d->character) + && lines >= (int) d->character->lines)) { - *scan = '\0'; + + *scan2 = '\0'; write_to_buffer(d, buffer, strlen(buffer)); + + /* See if this is the end (or near the end) of the string */ for (chk = d->showstr_point; isspace(*chk); chk++); + if (!*chk) { - if (!*chk) + if (d->showstr_head) { - if (d->showstr_head) - { - free_mem(d->showstr_head); - d->showstr_head = 0; - } - d->showstr_point = 0; + replace_string(d->showstr_head, ""); } + d->showstr_point = 0; } return; } - } + return; } @@ -2025,7 +2066,7 @@ if (ch == NULL || ch->in_room == NULL) return; - to = ch->in_room->people; + to = ch->in_room->first_person; if (IS_SET(type, TO_VICT)) { if (vch == NULL) @@ -2037,7 +2078,7 @@ if (vch->in_room == NULL) return; - to = vch->in_room->people; + to = vch->in_room->first_person; } for (; to != NULL; to = to->next_in_room) @@ -2234,7 +2275,7 @@ "Please note any unusual circumstances to IMP and avoid using that command.\n\r", 0); } - for (d = descriptor_list; d != NULL; d = d_next) + for (d = descriptor_first; d != NULL; d = d_next) { d_next = d->next; ch = CH(d); @@ -2249,7 +2290,7 @@ } // try to save all characters - save_char_obj has sanity checking - for (d = descriptor_list; d != NULL; d = d_next) + for (d = descriptor_first; d != NULL; d = d_next) { d_next = d->next; ch = CH(d); @@ -2304,7 +2345,7 @@ { crashed++; - for (d = descriptor_list; d != NULL; d = d_next) + for (d = descriptor_first; d != NULL; d = d_next) { d_next = d->next; ch = d->original ? d->original : d->character; diff -ur src/const.c new/const.c --- src/const.c Sat Jan 11 16:24:00 2003 +++ new/const.c Fri Jan 24 02:15:43 2003 @@ -151,50 +151,6 @@ {NULL, NULL, 0} }; -struct race_type *race_table; - -struct class_type *class_table; - -/* - * Class table. - -const struct class_type class_table[] = { - { - "mage", "Mag", STAT_INT, OBJ_VNUM_SCHOOL_DAGGER, - {3018, 9618}, 75, 20, 6, 6, 8, TRUE, - "mage basics", "mage default"}, - - { - "cleric", "Cle", STAT_WIS, OBJ_VNUM_SCHOOL_MACE, - {3003, 9619}, 75, 20, 2, 7, 10, TRUE, - "cleric basics", "cleric default"}, - - { - "thief", "Thi", STAT_DEX, OBJ_VNUM_SCHOOL_DAGGER, - {3028, 9639}, 75, 20, -4, 8, 13, FALSE, - "thief basics", "thief default"}, - - { - "warrior", "War", STAT_STR, OBJ_VNUM_SCHOOL_SWORD, - {3022, 9633}, 75, 20, -10, 11, 15, FALSE, - "warrior basics", "warrior default"}, - - { - "paladin", "Pal", STAT_WIS, OBJ_VNUM_SCHOOL_MACE, - {3003, 9619}, 75, 20, 2, 7, 10, TRUE, - "paladin basics", "paladin default"}, - - { - "ranger", "Ran", STAT_STR, OBJ_VNUM_SCHOOL_SWORD, - {3022, 9633}, 75, 20, -10, 11, 15, FALSE, - "ranger basics", "ranger default"}, - - { - NULL, "", -1, -1, - {0, 0}, 0, 0, 0, 0, 0, FALSE, - NULL, NULL} -}; - */ /* * Attribute bonus tables. */ @@ -394,7 +350,3 @@ {"cordial", "clear", {100, 1, 5, 0, 2}}, {NULL, NULL, {0, 0, 0, 0, 0}} }; - -struct skill_type *skill_table; - -struct group_type *group_table; diff -ur src/db.c new/db.c --- src/db.c Sat Jan 11 16:24:00 2003 +++ new/db.c Fri Jan 24 02:15:43 2003 @@ -64,31 +64,6 @@ #endif /* - * Globals. - */ -HELP_DATA *help_first; -HELP_DATA *help_last; - -HELP_AREA *had_list; - -SHOP_DATA *shop_first; -SHOP_DATA *shop_last; - -MPROG_CODE *mprog_list; - -char bug_buf[2 * MAX_INPUT_LENGTH]; -CHAR_DATA *char_list; -CHAR_DATA *player_list; -const char *help_greeting; -char log_buf[2 * MAX_INPUT_LENGTH]; -KILL_DATA kill_table[MAX_LEVEL]; -OBJ_DATA *object_list; -TIME_INFO_DATA time_info; -WEATHER_DATA weather_info; -GQUEST gquest_info; -WAR_DATA war_info; - -/* * Locals. */ MOB_INDEX_DATA *mob_index_hash[MAX_KEY_HASH]; @@ -100,7 +75,6 @@ AREA_DATA *area_last; AREA_DATA *current_area; -char *string_space; char *top_string; char str_empty[1]; @@ -120,21 +94,13 @@ vnum_t top_vnum_obj; /* OLC */ int top_mprog_index; /* OLC */ int mobile_count = 0; -int newmobs = 0; -int newobjs = 0; +const char *help_greeting; -int maxClan; -int maxCommands; struct clan_type *clan_table; -int maxSkill; -int maxGroup; -int maxRace; -int maxClass; /* * Semi-locals. */ -bool fBootDb; FILE *fpArea; char strArea[MAX_INPUT_LENGTH]; @@ -144,7 +110,7 @@ void init_mm args((void)); void load_area args((FILE * fp)); void new_load_area args((FILE * fp)); /* OLC */ -void load_helps args((FILE * fp, char *fname)); +void load_helps args((FILE * fp)); void load_old_mob args((FILE * fp)); void load_old_obj args((FILE * fp)); void load_resets args((FILE * fp)); @@ -296,7 +262,7 @@ else if (!str_cmp(word, "AREADATA")) new_load_area(fpArea); else if (!str_cmp(word, "HELPS")) - load_helps(fpArea, strArea); + load_helps(fpArea); else if (!str_cmp(word, "MOBOLD")) load_old_mob(fpArea); else if (!str_cmp(word, "MOBILES")) @@ -379,15 +345,7 @@ pArea->nplayer = 0; pArea->empty = FALSE; - if (!area_first) - area_first = pArea; - if (area_last) - { - area_last->next = pArea; - REMOVE_BIT(area_last->area_flags, AREA_LOADING); /* OLC */ - } - area_last = pArea; - pArea->next = NULL; + LINK(pArea, area_first, area_last, next, prev); current_area = pArea; top_area++; @@ -477,12 +435,7 @@ if (!str_cmp(word, "End")) { fMatch = TRUE; - if (area_first == NULL) - area_first = pArea; - if (area_last != NULL) - area_last->next = pArea; - area_last = pArea; - pArea->next = NULL; + LINK(pArea, area_first, area_last, next, prev); current_area = pArea; top_area++; @@ -504,14 +457,14 @@ */ void assign_area_vnum(vnum_t vnum) { - if (area_last->min_vnum == 0 || area_last->max_vnum == 0) - area_last->min_vnum = area_last->max_vnum = vnum; - if (vnum != URANGE(area_last->min_vnum, vnum, area_last->max_vnum)) + if (current_area->min_vnum == 0 || current_area->max_vnum == 0) + current_area->min_vnum = current_area->max_vnum = vnum; + if (vnum != URANGE(current_area->min_vnum, vnum, current_area->max_vnum)) { - if (vnum < area_last->min_vnum) - area_last->min_vnum = vnum; + if (vnum < current_area->min_vnum) + current_area->min_vnum = vnum; else - area_last->max_vnum = vnum; + current_area->max_vnum = vnum; } return; } @@ -519,7 +472,7 @@ /* * Snarf a help section. */ -void load_helps(FILE * fp, char *fname) +void load_helps(FILE * fp) { HELP_DATA *pHelp; int level; @@ -527,36 +480,12 @@ for (;;) { - HELP_AREA *had; - level = fread_number(fp); keyword = fread_string(fp); if (keyword[0] == '$') break; - if (!had_list) - { - had = new_had(); - had->filename = str_dup(fname); - had->area = current_area; - if (current_area) - current_area->helps = had; - had_list = had; - } - else if (str_cmp(fname, had_list->filename)) - { - had = new_had(); - had->filename = str_dup(fname); - had->area = current_area; - if (current_area) - current_area->helps = had; - had->next = had_list; - had_list = had; - } - else - had = had_list; - pHelp = new_help(); pHelp->level = level; pHelp->keyword = keyword; @@ -565,22 +494,7 @@ if (!str_cmp(pHelp->keyword, "greeting")) help_greeting = pHelp->text; - if (help_first == NULL) - help_first = pHelp; - if (help_last != NULL) - help_last->next = pHelp; - - help_last = pHelp; - pHelp->next = NULL; - - if (!had->first) - had->first = pHelp; - if (!had->last) - had->last = pHelp; - - had->last->next_area = pHelp; - had->last = pHelp; - pHelp->next_area = NULL; + LINK(pHelp, help_first, help_last, next, prev); top_help++; } @@ -598,7 +512,7 @@ int race; char name[MAX_STRING_LENGTH]; - if (!area_last) /* OLC */ + if (!current_area) /* OLC */ { bug("Load_mobiles: no #AREA seen yet.", 0); exit(1); @@ -631,7 +545,7 @@ alloc_mem(pMobIndex, MOB_INDEX_DATA, 1); pMobIndex->vnum = vnum; - pMobIndex->area = area_last; /* OLC */ + pMobIndex->area = current_area; /* OLC */ pMobIndex->new_format = FALSE; pMobIndex->player_name = fread_string(fp); pMobIndex->short_descr = fread_string(fp); @@ -726,8 +640,7 @@ convert_mobile(pMobIndex); /* ROM OLC */ iHash = vnum % MAX_KEY_HASH; - pMobIndex->next = mob_index_hash[iHash]; - mob_index_hash[iHash] = pMobIndex; + LINK_SINGLE(pMobIndex, next, mob_index_hash[iHash]); top_mob_index++; top_vnum_mob = top_vnum_mob < vnum ? vnum : top_vnum_mob; /* OLC */ assign_area_vnum(vnum); /* OLC */ @@ -744,7 +657,7 @@ { OBJ_INDEX_DATA *pObjIndex; - if (!area_last) /* OLC */ + if (!current_area) /* OLC */ { bug("Load_objects: no #AREA seen yet.", 0); exit(1); @@ -777,7 +690,7 @@ alloc_mem(pObjIndex, OBJ_INDEX_DATA, 1); pObjIndex->vnum = vnum; - pObjIndex->area = area_last; /* OLC */ + pObjIndex->area = current_area; /* OLC */ pObjIndex->new_format = FALSE; pObjIndex->reset_num = 0; pObjIndex->name = fread_string(fp); @@ -829,8 +742,8 @@ paf->location = fread_number(fp); paf->modifier = fread_number(fp); paf->bitvector = 0; - paf->next = pObjIndex->affected; - pObjIndex->affected = paf; + LINK(paf, pObjIndex->first_affect, pObjIndex->last_affect, next, + prev); top_affect++; } @@ -841,8 +754,8 @@ alloc_mem(ed, EXTRA_DESCR_DATA, 1); ed->keyword = fread_string(fp); ed->description = fread_string(fp); - ed->next = pObjIndex->extra_descr; - pObjIndex->extra_descr = ed; + LINK(ed, pObjIndex->first_extra_descr, + pObjIndex->last_extra_descr, next, prev); top_ed++; } @@ -876,8 +789,7 @@ } iHash = vnum % MAX_KEY_HASH; - pObjIndex->next = obj_index_hash[iHash]; - obj_index_hash[iHash] = pObjIndex; + LINK_SINGLE(pObjIndex, next, obj_index_hash[iHash]); top_obj_index++; top_vnum_obj = top_vnum_obj < vnum ? vnum : top_vnum_obj; /* OLC */ assign_area_vnum(vnum); /* OLC */ @@ -892,26 +804,10 @@ */ void new_reset(ROOM_INDEX_DATA * pR, RESET_DATA * pReset) { - RESET_DATA *pr; - if (!pR) return; - pr = pR->reset_last; - - if (!pr) - { - pR->reset_first = pReset; - pR->reset_last = pReset; - } - else - { - pR->reset_last->next = pReset; - pR->reset_last = pReset; - pR->reset_last->next = NULL; - } - -/* top_reset++; no estamos asignando memoria!!!! */ + LINK(pReset, pR->reset_first, pR->reset_last, next, prev); return; } @@ -926,7 +822,7 @@ ROOM_INDEX_DATA *pRoomIndex; vnum_t rVnum = -1; - if (!area_last) + if (!current_area) { bug("Load_resets: no #AREA seen yet.", 0); exit(1); @@ -1023,7 +919,7 @@ { ROOM_INDEX_DATA *pRoomIndex; - if (area_last == NULL) + if (current_area == NULL) { bug("Load_resets: no #AREA seen yet.", 0); exit(1); @@ -1057,11 +953,11 @@ alloc_mem(pRoomIndex, ROOM_INDEX_DATA, 1); pRoomIndex->owner = str_dup(""); - pRoomIndex->people = NULL; + pRoomIndex->first_person = NULL; pRoomIndex->clan = -1; - pRoomIndex->contents = NULL; - pRoomIndex->extra_descr = NULL; - pRoomIndex->area = area_last; + pRoomIndex->first_content = NULL; + pRoomIndex->first_extra_descr = NULL; + pRoomIndex->area = current_area; pRoomIndex->vnum = vnum; pRoomIndex->name = fread_string(fp); pRoomIndex->description = fread_string(fp); @@ -1159,8 +1055,8 @@ alloc_mem(ed, EXTRA_DESCR_DATA, 1); ed->keyword = fread_string(fp); ed->description = fread_string(fp); - ed->next = pRoomIndex->extra_descr; - pRoomIndex->extra_descr = ed; + LINK(ed, pRoomIndex->first_extra_descr, + pRoomIndex->last_extra_descr, next, prev); top_ed++; } @@ -1184,8 +1080,7 @@ } iHash = vnum % MAX_KEY_HASH; - pRoomIndex->next = room_index_hash[iHash]; - room_index_hash[iHash] = pRoomIndex; + LINK_SINGLE(pRoomIndex, next, room_index_hash[iHash]); top_room++; if (!IS_SET(pRoomIndex->room_flags, ROOM_NOEXPLORE)) top_explored++; @@ -1221,14 +1116,7 @@ fread_to_eol(fp); pMobIndex = get_mob_index(pShop->keeper); pMobIndex->pShop = pShop; - - if (shop_first == NULL) - shop_first = pShop; - if (shop_last != NULL) - shop_last->next = pShop; - - shop_last = pShop; - pShop->next = NULL; + LINK(pShop, shop_first, shop_last, next, prev); top_shop++; } @@ -1416,7 +1304,7 @@ { MPROG_CODE *pMprog; - if (area_last == NULL) + if (current_area == NULL) { bug("Load_mobprogs: no #AREA seen yet.", 0); exit(1); @@ -1449,13 +1337,7 @@ alloc_mem(pMprog, MPROG_CODE, 1); pMprog->vnum = vnum; pMprog->code = fread_string(fp); - if (mprog_list == NULL) - mprog_list = pMprog; - else - { - pMprog->next = mprog_list; - mprog_list = pMprog; - } + LINK(pMprog, mprog_first, mprog_last, next, prev); top_mprog_index++; } return; @@ -1476,10 +1358,10 @@ for (pMobIndex = mob_index_hash[iHash]; pMobIndex != NULL; pMobIndex = pMobIndex->next) { - for (list = pMobIndex->mprogs; list != NULL; list = list->next) + for (list = pMobIndex->first_mprog; list != NULL; list = list->next) { if ((prog = get_mprog_index(list->vnum)) != NULL) - list->code = prog->code; + replace_string(list->code, prog->code); else { bug("Fix_mobprogs: code vnum %d not found.", list->vnum); @@ -1600,7 +1482,8 @@ } /* */ count = 0; - for (mob = pRoomIndex->people; mob != NULL; mob = mob->next_in_room) + for (mob = pRoomIndex->first_person; mob != NULL; + mob = mob->next_in_room) if (mob->pIndexData == pMobIndex) { count++; @@ -1663,7 +1546,7 @@ } if (pRoom->area->nplayer > 0 || - count_obj_list(pObjIndex, pRoom->contents) > 0) + count_obj_list(pObjIndex, pRoom->first_content) > 0) { last = FALSE; break; @@ -1700,7 +1583,7 @@ ) || (count = count_obj_list(pObjIndex, - LastObj->contains)) > pReset->arg4) + LastObj->first_content)) > pReset->arg4) { last = FALSE; break; @@ -2116,8 +1999,7 @@ mob->position = mob->start_pos; /* link the mob to the world list */ - mob->next = char_list; - char_list = mob; + LINK(mob, char_first, char_last, next, prev); pMobIndex->count++; return mob; } @@ -2193,7 +2075,7 @@ clone->damage[i] = parent->damage[i]; /* now add the affects */ - for (paf = parent->affected; paf != NULL; paf = paf->next) + for (paf = parent->first_affect; paf != NULL; paf = paf->next) affect_to_char(clone, paf); } @@ -2334,12 +2216,11 @@ break; } - for (paf = pObjIndex->affected; paf != NULL; paf = paf->next) + for (paf = pObjIndex->first_affect; paf != NULL; paf = paf->next) if (paf->location == APPLY_SPELL_AFFECT) affect_to_obj(obj, paf); - obj->next = object_list; - object_list = obj; + LINK(obj, object_first, object_last, next, prev); pObjIndex->count++; return obj; @@ -2375,17 +2256,17 @@ /* affects */ clone->enchanted = parent->enchanted; - for (paf = parent->affected; paf != NULL; paf = paf->next) + for (paf = parent->first_affect; paf != NULL; paf = paf->next) affect_to_obj(clone, paf); /* extended desc */ - for (ed = parent->extra_descr; ed != NULL; ed = ed->next) + for (ed = parent->first_extra_descr; ed != NULL; ed = ed->next) { ed_new = new_extra_descr(); ed_new->keyword = str_dup(ed->keyword); ed_new->description = str_dup(ed->description); - ed_new->next = clone->extra_descr; - clone->extra_descr = ed_new; + LINK(ed_new, clone->first_extra_descr, clone->last_extra_descr, next, + prev); } } @@ -2512,7 +2393,7 @@ MPROG_CODE *get_mprog_index(vnum_t vnum) { MPROG_CODE *prg; - for (prg = mprog_list; prg; prg = prg->next) + for (prg = mprog_first; prg; prg = prg->next) { if (prg->vnum == vnum) return (prg); @@ -2589,7 +2470,8 @@ flag_t fread_flag(FILE * fp) { - flag_t number; + flag_t number, temp = 1; + flag_t flag; char c; bool negative = FALSE; @@ -2599,39 +2481,59 @@ } while (isspace(c)); - if (c == '-') + if (c != '+') { - negative = TRUE; - c = getc(fp); - } + if (c == '-') + { + negative = TRUE; + c = getc(fp); + } - number = 0; + number = 0; - if (!isdigit(c)) - { - while (('A' <= c && c <= 'Z') || ('a' <= c && c <= 'z')) + if (!isdigit(c)) { - number += flag_convert(c); + while (('A' <= c && c <= 'Z') || ('a' <= c && c <= 'z')) + { + number += flag_convert(c); + c = getc(fp); + } + } + + while (isdigit(c)) + { + number = number * 10 + c - '0'; c = getc(fp); } - } - while (isdigit(c)) - { - number = number * 10 + c - '0'; - c = getc(fp); - } + if (c == '|') + number += fread_flag(fp); - if (c == '|') - number += fread_flag(fp); + else if (c != ' ') + ungetc(c, fp); - else if (c != ' ') - ungetc(c, fp); + if (negative) + return -1 * number; - if (negative) - return -1 * number; + return number; + } + else + { + number = 0; + flag = 0; + do + { + c = getc(fp); + flag += (temp << number) * (c == 'Y'); + number++; + } + while (c == 'Y' || c == 'n'); - return number; + if (c == '\n' || c == '\r') + ungetc(c, fp); + + return flag; + } } flag_t flag_convert(char letter) @@ -2641,15 +2543,15 @@ if ('A' <= letter && letter <= 'Z') { - bitsum = 1; + bitsum = ((flag_t) 1 << 0); for (i = letter; i > 'A'; i--) - bitsum *= 2; + bitsum <<= 1; } else if ('a' <= letter && letter <= 'z') { - bitsum = 67108864; /* 2^26 */ + bitsum = ((flag_t) 1 << 26); for (i = letter; i > 'a'; i--) - bitsum *= 2; + bitsum <<= 1; } return bitsum; @@ -3035,12 +2937,12 @@ /* mobs */ count = 0; count2 = 0; - for (fch = char_list; fch != NULL; fch = fch->next) + for (fch = char_first; fch != NULL; fch = fch->next) { count++; if (fch->pcdata != NULL) num_pcs++; - for (af = fch->affected; af != NULL; af = af->next) + for (af = fch->first_affect; af != NULL; af = af->next) aff_count++; } for (fch = char_free; fch != NULL; fch = fch->next) @@ -3060,7 +2962,7 @@ /* descriptors */ count = 0; count2 = 0; - for (d = descriptor_list; d != NULL; d = d->next) + for (d = descriptor_first; d != NULL; d = d->next) count++; for (d = descriptor_free; d != NULL; d = d->next) count2++; @@ -3072,7 +2974,7 @@ for (vnum = 0; nMatch < top_obj_index; vnum++) if ((pObjIndex = get_obj_index(vnum)) != NULL) { - for (af = pObjIndex->affected; af != NULL; af = af->next) + for (af = pObjIndex->first_affect; af != NULL; af = af->next) aff_count++; nMatch++; } @@ -3083,10 +2985,10 @@ /* objects */ count = 0; count2 = 0; - for (obj = object_list; obj != NULL; obj = obj->next) + for (obj = object_first; obj != NULL; obj = obj->next) { count++; - for (af = obj->affected; af != NULL; af = af->next) + for (af = obj->first_affect; af != NULL; af = af->next) aff_count++; } for (obj = obj_free; obj != NULL; obj = obj->next) diff -ur src/db.h new/db.h --- src/db.h Sat Jan 11 16:24:00 2003 +++ new/db.h Fri Jan 24 02:15:43 2003 @@ -29,30 +29,13 @@ #if !defined(DB_H) #define DB_H -/* vals from db.c */ -extern bool fBootDb; -extern int newmobs; -extern int newobjs; -extern int maxSocial; - #define MAX_STRING 4000*1024 -extern char *string_space; -extern int nAllocString; -extern size_t sAllocString; /* conversion from db.h */ void convert_mob(MOB_INDEX_DATA * mob); void convert_obj(OBJ_INDEX_DATA * obj); -/* externals for counting purposes */ -extern OBJ_DATA *obj_free; -extern CHAR_DATA *char_free; -extern DESCRIPTOR_DATA *descriptor_free; -extern PC_DATA *pcdata_free; -extern AFFECT_DATA *affect_free; - char *strspace_alloc(); -#define object_free obj_free /* macro for flag swapping */ #define GET_UNSET(flag1,flag2) (~(flag1)&((flag1)|(flag2))) diff -ur src/db2.c new/db2.c --- src/db2.c Sat Jan 11 16:24:00 2003 +++ new/db2.c Fri Jan 24 02:15:43 2003 @@ -46,6 +46,8 @@ /* values for db2.c */ +extern AREA_DATA *current_area; + /* * Snarf a mob section. new style */ @@ -53,7 +55,7 @@ { MOB_INDEX_DATA *pMobIndex; - if (!area_last) /* OLC */ + if (!current_area) /* OLC */ { bug("Load_mobiles: no #AREA seen yet.", 0); exit(1); @@ -86,7 +88,7 @@ alloc_mem(pMobIndex, MOB_INDEX_DATA, 1); pMobIndex->vnum = vnum; - pMobIndex->area = area_last; /* OLC */ + pMobIndex->area = current_area; /* OLC */ pMobIndex->new_format = TRUE; newmobs++; pMobIndex->player_name = fread_string(fp); @@ -202,7 +204,7 @@ alloc_mem(pMprog, MPROG_LIST, 1); word = fread_word(fp); - if ((trigger = flag_value(mprog_flags, word)) == NO_FLAG) + if ((trigger = flag_value(mprog_flags, word)) == 0) { bug("MOBprogs: invalid trigger.", 0); exit(1); @@ -211,8 +213,8 @@ pMprog->trig_type = trigger; pMprog->vnum = fread_number(fp); pMprog->trig_phrase = fread_string(fp); - pMprog->next = pMobIndex->mprogs; - pMobIndex->mprogs = pMprog; + LINK(pMprog, pMobIndex->first_mprog, pMobIndex->last_mprog, + next, prev); } else { @@ -222,8 +224,7 @@ } iHash = vnum % MAX_KEY_HASH; - pMobIndex->next = mob_index_hash[iHash]; - mob_index_hash[iHash] = pMobIndex; + LINK_SINGLE(pMobIndex, next, mob_index_hash[iHash]); top_mob_index++; top_vnum_mob = top_vnum_mob < vnum ? vnum : top_vnum_mob; /* OLC */ assign_area_vnum(vnum); /* OLC */ @@ -240,7 +241,7 @@ { OBJ_INDEX_DATA *pObjIndex; - if (!area_last) /* OLC */ + if (!current_area) /* OLC */ { bug("Load_objects: no #AREA seen yet.", 0); exit(1); @@ -273,7 +274,7 @@ alloc_mem(pObjIndex, OBJ_INDEX_DATA, 1); pObjIndex->vnum = vnum; - pObjIndex->area = area_last; /* OLC */ + pObjIndex->area = current_area; /* OLC */ pObjIndex->new_format = TRUE; pObjIndex->reset_num = 0; newobjs++; @@ -388,8 +389,8 @@ paf->location = fread_number(fp); paf->modifier = fread_number(fp); paf->bitvector = 0; - paf->next = pObjIndex->affected; - pObjIndex->affected = paf; + LINK(paf, pObjIndex->first_affect, pObjIndex->last_affect, next, + prev); top_affect++; } @@ -423,8 +424,8 @@ paf->location = fread_number(fp); paf->modifier = fread_number(fp); paf->bitvector = fread_flag(fp); - paf->next = pObjIndex->affected; - pObjIndex->affected = paf; + LINK(paf, pObjIndex->first_affect, pObjIndex->last_affect, next, + prev); top_affect++; } @@ -435,8 +436,8 @@ alloc_mem(ed, EXTRA_DESCR_DATA, 1); ed->keyword = fread_string(fp); ed->description = fread_string(fp); - ed->next = pObjIndex->extra_descr; - pObjIndex->extra_descr = ed; + LINK(ed, pObjIndex->first_extra_descr, + pObjIndex->last_extra_descr, next, prev); top_ed++; } @@ -448,8 +449,7 @@ } iHash = vnum % MAX_KEY_HASH; - pObjIndex->next = obj_index_hash[iHash]; - obj_index_hash[iHash] = pObjIndex; + LINK_SINGLE(pObjIndex, next, obj_index_hash[iHash]); top_obj_index++; top_vnum_obj = top_vnum_obj < vnum ? vnum : top_vnum_obj; /* OLC */ assign_area_vnum(vnum); /* OLC */ @@ -817,25 +817,24 @@ * Increase MAX_STRING if you have too. * Tune the others only if you understand what you're doing. */ -int nAllocString; -size_t sAllocString; #define IMP_COUNTER( type, start, px) \ int px##type(); \ int px##type() { type * p = start; int n = 0; while( p!=NULL ) { p= p->next; n++; } return n; } #define IMP_LIST_COUNTERS( type, prefix ) \ - IMP_COUNTER( type, prefix##list, n ) \ + IMP_COUNTER( type, prefix##first, n ) \ IMP_COUNTER( type, prefix##free, f ) // these object types have no global list IMP_COUNTER(PC_DATA, pcdata_free, f) IMP_COUNTER(AFFECT_DATA, affect_free, f) // these do +#define object_free obj_free IMP_LIST_COUNTERS(OBJ_DATA, object_); IMP_LIST_COUNTERS(CHAR_DATA, char_); IMP_LIST_COUNTERS(DESCRIPTOR_DATA, descriptor_); -IMP_COUNTER(MPROG_CODE, mprog_list, n); +IMP_COUNTER(MPROG_CODE, mprog_first, n); int nNOTE_DATA(void) { diff -ur src/effects.c new/effects.c --- src/effects.c Sat Jan 11 16:24:00 2003 +++ new/effects.c Fri Jan 24 02:15:43 2003 @@ -41,7 +41,7 @@ ROOM_INDEX_DATA *room = (ROOM_INDEX_DATA *) vo; OBJ_DATA *obj, *obj_next; - for (obj = room->contents; obj != NULL; obj = obj_next) + for (obj = room->first_content; obj != NULL; obj = obj_next) { obj_next = obj->next_content; acid_effect(obj, level, dam, TARGET_OBJ); @@ -55,7 +55,7 @@ OBJ_DATA *obj, *obj_next; /* let's toast some gear */ - for (obj = victim->carrying; obj != NULL; obj = obj_next) + for (obj = victim->first_carrying; obj != NULL; obj = obj_next) { obj_next = obj->next_content; acid_effect(obj, level, dam, TARGET_OBJ); @@ -119,8 +119,8 @@ if (obj->carried_by != NULL) act(msg, obj->carried_by, obj, NULL, TO_ALL); - else if (obj->in_room != NULL && obj->in_room->people != NULL) - act(msg, obj->in_room->people, obj, NULL, TO_ALL); + else if (obj->in_room != NULL && obj->in_room->first_person != NULL) + act(msg, obj->in_room->first_person, obj, NULL, TO_ALL); if (obj->item_type == ITEM_ARMOR) /* etch it */ { @@ -130,7 +130,7 @@ affect_enchant(obj); - for (paf = obj->affected; paf != NULL; paf = paf->next) + for (paf = obj->first_affect; paf != NULL; paf = paf->next) { if (paf->location == APPLY_AC) { @@ -153,8 +153,7 @@ paf->location = APPLY_AC; paf->modifier = 1; paf->bitvector = 0; - paf->next = obj->affected; - obj->affected = paf; + LINK(paf, obj->first_affect, obj->last_affect, next, prev); } if (obj->carried_by != NULL && obj->wear_loc != WEAR_NONE) @@ -164,9 +163,9 @@ } /* get rid of the object */ - if (obj->contains) /* dump contents */ + if (obj->first_content) /* dump contents */ { - for (t_obj = obj->contains; t_obj != NULL; t_obj = n_obj) + for (t_obj = obj->first_content; t_obj != NULL; t_obj = n_obj) { n_obj = t_obj->next_content; obj_from_obj(t_obj); @@ -196,7 +195,7 @@ ROOM_INDEX_DATA *room = (ROOM_INDEX_DATA *) vo; OBJ_DATA *obj, *obj_next; - for (obj = room->contents; obj != NULL; obj = obj_next) + for (obj = room->first_content; obj != NULL; obj = obj_next) { obj_next = obj->next_content; cold_effect(obj, level, dam, TARGET_OBJ); @@ -232,7 +231,7 @@ gain_condition(victim, COND_HUNGER, dam / 20); /* let's toast some gear */ - for (obj = victim->carrying; obj != NULL; obj = obj_next) + for (obj = victim->first_carrying; obj != NULL; obj = obj_next) { obj_next = obj->next_content; cold_effect(obj, level, dam, TARGET_OBJ); @@ -283,8 +282,8 @@ if (obj->carried_by != NULL) act(msg, obj->carried_by, obj, NULL, TO_ALL); - else if (obj->in_room != NULL && obj->in_room->people != NULL) - act(msg, obj->in_room->people, obj, NULL, TO_ALL); + else if (obj->in_room != NULL && obj->in_room->first_person != NULL) + act(msg, obj->in_room->first_person, obj, NULL, TO_ALL); extract_obj(obj); return; @@ -298,7 +297,7 @@ ROOM_INDEX_DATA *room = (ROOM_INDEX_DATA *) vo; OBJ_DATA *obj, *obj_next; - for (obj = room->contents; obj != NULL; obj = obj_next) + for (obj = room->first_content; obj != NULL; obj = obj_next) { obj_next = obj->next_content; fire_effect(obj, level, dam, TARGET_OBJ); @@ -336,7 +335,7 @@ gain_condition(victim, COND_THIRST, dam / 20); /* let's toast some gear! */ - for (obj = victim->carrying; obj != NULL; obj = obj_next) + for (obj = victim->first_carrying; obj != NULL; obj = obj_next) { obj_next = obj->next_content; @@ -404,14 +403,14 @@ if (obj->carried_by != NULL) act(msg, obj->carried_by, obj, NULL, TO_ALL); - else if (obj->in_room != NULL && obj->in_room->people != NULL) - act(msg, obj->in_room->people, obj, NULL, TO_ALL); + else if (obj->in_room != NULL && obj->in_room->first_person != NULL) + act(msg, obj->in_room->first_person, obj, NULL, TO_ALL); - if (obj->contains) + if (obj->first_content) { /* dump the contents */ - for (t_obj = obj->contains; t_obj != NULL; t_obj = n_obj) + for (t_obj = obj->first_content; t_obj != NULL; t_obj = n_obj) { n_obj = t_obj->next_content; obj_from_obj(t_obj); @@ -440,7 +439,7 @@ ROOM_INDEX_DATA *room = (ROOM_INDEX_DATA *) vo; OBJ_DATA *obj, *obj_next; - for (obj = room->contents; obj != NULL; obj = obj_next) + for (obj = room->first_content; obj != NULL; obj = obj_next) { obj_next = obj->next_content; poison_effect(obj, level, dam, TARGET_OBJ); @@ -472,7 +471,7 @@ } /* equipment */ - for (obj = victim->carrying; obj != NULL; obj = obj_next) + for (obj = victim->first_carrying; obj != NULL; obj = obj_next) { obj_next = obj->next_content; poison_effect(obj, level, dam, TARGET_OBJ); @@ -526,7 +525,7 @@ ROOM_INDEX_DATA *room = (ROOM_INDEX_DATA *) vo; OBJ_DATA *obj, *obj_next; - for (obj = room->contents; obj != NULL; obj = obj_next) + for (obj = room->first_content; obj != NULL; obj = obj_next) { obj_next = obj->next_content; shock_effect(obj, level, dam, TARGET_OBJ); @@ -547,7 +546,7 @@ } /* toast some gear */ - for (obj = victim->carrying; obj != NULL; obj = obj_next) + for (obj = victim->first_carrying; obj != NULL; obj = obj_next) { obj_next = obj->next_content; shock_effect(obj, level, dam, TARGET_OBJ); @@ -598,8 +597,8 @@ if (obj->carried_by != NULL) act(msg, obj->carried_by, obj, NULL, TO_ALL); - else if (obj->in_room != NULL && obj->in_room->people != NULL) - act(msg, obj->in_room->people, obj, NULL, TO_ALL); + else if (obj->in_room != NULL && obj->in_room->first_person != NULL) + act(msg, obj->in_room->first_person, obj, NULL, TO_ALL); extract_obj(obj); return; diff -ur src/fight.c new/fight.c --- src/fight.c Sat Jan 11 16:24:00 2003 +++ new/fight.c Fri Jan 24 02:15:43 2003 @@ -62,7 +62,7 @@ CHAR_DATA *ch_next; CHAR_DATA *victim; - for (ch = char_list; ch != NULL; ch = ch_next) + for (ch = char_first; ch != NULL; ch = ch_next) { ch_next = ch->next; @@ -106,7 +106,7 @@ { CHAR_DATA *rch, *rch_next; - for (rch = ch->in_room->people; rch != NULL; rch = rch_next) + for (rch = ch->in_room->first_person; rch != NULL; rch = rch_next) { rch_next = rch->next_in_room; @@ -169,7 +169,7 @@ target = NULL; number = 0; - for (vch = ch->in_room->people; vch; vch = vch->next) + for (vch = ch->in_room->first_person; vch; vch = vch->next) { if (can_see(rch, vch) && is_same_group(vch, victim) && @@ -277,7 +277,7 @@ if (IS_SET(ch->off_flags, OFF_AREA_ATTACK)) { - for (vch = ch->in_room->people; vch != NULL; vch = vch_next) + for (vch = ch->in_room->first_person; vch != NULL; vch = vch_next) { vch_next = vch->next; if ((vch != victim && vch->fighting == ch)) @@ -618,7 +618,7 @@ int level; AFFECT_DATA *poison, af; - if ((poison = affect_find(wield->affected, gsn_poison)) == NULL) + if ((poison = affect_find(wield->first_affect, gsn_poison)) == NULL) level = wield->level; else level = poison->level; @@ -994,23 +994,23 @@ if (!IS_NPC(ch) && (corpse = - get_obj_list(ch, "corpse", ch->in_room->contents)) != NULL + get_obj_list(ch, "corpse", ch->in_room->first_content)) != NULL && corpse->item_type == ITEM_CORPSE_NPC && can_see_obj(ch, corpse)) { OBJ_DATA *coins; - corpse = get_obj_list(ch, "corpse", ch->in_room->contents); + corpse = get_obj_list(ch, "corpse", ch->in_room->first_content); - if (IS_SET(ch->act, PLR_AUTOLOOT) && corpse && corpse->contains) /* exists and not empty */ + if (IS_SET(ch->act, PLR_AUTOLOOT) && corpse && corpse->first_content) /* exists and not empty */ { do_function(ch, &do_get, "all corpse"); } - if (IS_SET(ch->act, PLR_AUTOGOLD) && corpse && corpse->contains && /* exists and not empty */ + if (IS_SET(ch->act, PLR_AUTOGOLD) && corpse && corpse->first_content && /* exists and not empty */ !IS_SET(ch->act, PLR_AUTOLOOT)) { if ((coins = - get_obj_list(ch, "gcash", corpse->contains)) != NULL) + get_obj_list(ch, "gcash", corpse->first_content)) != NULL) { do_function(ch, &do_get, "all.gcash corpse"); } @@ -1018,7 +1018,8 @@ if (IS_SET(ch->act, PLR_AUTOSAC)) { - if (IS_SET(ch->act, PLR_AUTOLOOT) && corpse && corpse->contains) + if (IS_SET(ch->act, PLR_AUTOLOOT) && corpse + && corpse->first_content) { return TRUE; /* leave if corpse has treasure */ } @@ -1514,7 +1515,7 @@ { CHAR_DATA *fch; - for (fch = char_list; fch != NULL; fch = fch->next) + for (fch = char_first; fch != NULL; fch = fch->next) { if (fch == ch || (fBoth && fch->fighting == ch)) { @@ -1584,7 +1585,7 @@ free_string(corpse->description); corpse->description = str_dup(buf); - for (obj = ch->carrying; obj != NULL; obj = obj_next) + for (obj = ch->first_carrying; obj != NULL; obj = obj_next) { bool floating = FALSE; @@ -1609,13 +1610,13 @@ { if (IS_OBJ_STAT(obj, ITEM_ROT_DEATH)) /* get rid of it! */ { - if (obj->contains != NULL) + if (obj->first_content != NULL) { OBJ_DATA *in, *in_next; act("$p evaporates,scattering its contents.", ch, obj, NULL, TO_ROOM); - for (in = obj->contains; in != NULL; in = in_next) + for (in = obj->first_content; in != NULL; in = in_next) { in_next = in->next_content; obj_from_obj(in); @@ -1777,8 +1778,8 @@ } extract_char(victim, FALSE); - while (victim->affected) - affect_remove(victim, victim->affected); + while (victim->first_affect) + affect_remove(victim, victim->first_affect); victim->affected_by = race_table[victim->race].aff; for (i = 0; i < 4; i++) victim->armor[i] = 100; @@ -1811,7 +1812,7 @@ members = 0; group_levels = 0; - for (gch = ch->in_room->people; gch != NULL; gch = gch->next_in_room) + for (gch = ch->in_room->first_person; gch != NULL; gch = gch->next_in_room) { if (is_same_group(gch, ch)) { @@ -1829,7 +1830,7 @@ lch = (ch->leader != NULL) ? ch->leader : ch; - for (gch = ch->in_room->people; gch != NULL; gch = gch->next_in_room) + for (gch = ch->in_room->first_person; gch != NULL; gch = gch->next_in_room) { OBJ_DATA *obj; OBJ_DATA *obj_next; @@ -1895,7 +1896,7 @@ "You are now ready to complete the global quest. Type 'GQUEST COMPLETE' to finish."); } - for (obj = ch->carrying; obj != NULL; obj = obj_next) + for (obj = ch->first_carrying; obj != NULL; obj = obj_next) { obj_next = obj->next_content; if (obj->wear_loc == WEAR_NONE) diff -ur src/flags.c new/flags.c --- src/flags.c Sat Jan 11 16:24:00 2003 +++ new/flags.c Fri Jan 24 02:15:43 2003 @@ -201,7 +201,7 @@ pos = flag_value(flag_table, word); - if (pos == NO_FLAG) + if (pos == 0) { chprintln(ch, "That flag doesn't exist!"); return; Only in new/: globals.h diff -ur src/gquest.c new/gquest.c --- src/gquest.c Sat Jan 11 16:24:00 2003 +++ new/gquest.c Fri Jan 24 02:15:43 2003 @@ -38,11 +38,13 @@ struct gquest_hist { GQUEST_HIST *next; + GQUEST_HIST *prev; const char *short_descr; const char *text; }; GQUEST_HIST *gqhist_first = NULL; +GQUEST_HIST *gqhist_last = NULL; bool save_gquest_data(void) { @@ -223,7 +225,7 @@ CHAR_DATA *registar = NULL; int mobs, blevel, elevel, cost; - for (registar = ch->in_room->people; registar != NULL; + for (registar = ch->in_room->first_person; registar != NULL; registar = registar->next_in_room) { if (!IS_NPC(registar)) @@ -357,7 +359,7 @@ if (gquest_info.running != GQUEST_OFF) return; - for (wch = char_list; wch != NULL; wch = wch->next) + for (wch = char_first; wch != NULL; wch = wch->next) { if (!IS_NPC(wch) && !IS_IMMORTAL(wch)) { @@ -381,7 +383,7 @@ minlvl = number_range(minlvl, middle - lbonus); maxlvl = number_range(middle + lbonus, maxlvl); /* find the registar mob if he exits, (not needed only put in for RP aspects) */ - for (registar = char_list; registar != NULL; registar = registar->next) + for (registar = char_first; registar != NULL; registar = registar->next) { if (!IS_NPC(registar)) continue; @@ -431,7 +433,7 @@ add_buf(output, buf); sprintf(buf, "Those Playing\n\r-------------\n\r"); add_buf(output, buf); - for (wch = char_list; wch != NULL; wch = wch->next) + for (wch = char_first; wch != NULL; wch = wch->next) if (!IS_NPC(ch) && ON_GQUEST(wch) && count_gqmobs(wch) != gquest_info.mob_count) sprintf(buf, "%s [%d mobs left]\n\r", wch->name, @@ -458,8 +460,7 @@ } } hist->text = str_dup(buf_string(output)); - hist->next = gqhist_first; - gqhist_first = hist; + LINK(hist, gqhist_first, gqhist_last, next, prev); free_buf(output); return; } @@ -700,7 +701,7 @@ chprintln(ch, "The global quest hasn't started yet."); return; } - for (wch = char_list; wch != NULL; wch = wch->next) + for (wch = char_first; wch != NULL; wch = wch->next) { if (!IS_NPC(wch) && ON_GQUEST(wch) && wch != ch) { @@ -800,7 +801,7 @@ reset_gqmob(NULL, 0); gquest_info.last_registar = who; - for (wch = char_list; wch != NULL; wch = wch->next) + for (wch = char_first; wch != NULL; wch = wch->next) { if (!IS_NPC(wch) && IS_SET(wch->act, PLR_GQUEST)) { @@ -910,7 +911,7 @@ mob_count = 0; alloc_mem(vnums, vnum_t, top_mob_index); - for (victim = char_list; victim; victim = victim->next) + for (victim = char_first; victim; victim = victim->next) { if (!IS_NPC(victim)) { diff -ur src/handler.c new/handler.c --- src/handler.c Sat Jan 11 16:24:00 2003 +++ new/handler.c Fri Jan 24 02:15:43 2003 @@ -95,7 +95,7 @@ if (obj->in_room == NULL) return 0; - for (fch = obj->in_room->people; fch != NULL; fch = fch->next_in_room) + for (fch = obj->in_room->first_person; fch != NULL; fch = fch->next_in_room) if (fch->on == obj) count++; @@ -173,7 +173,7 @@ /* returns a flag for wiznet */ int wiznet_lookup(const char *name) { - flag_t flag; + int flag; for (flag = 0; wiznet_table[flag].name != NULL; flag++) { @@ -524,7 +524,8 @@ if (obj == NULL) continue; if (!obj->enchanted) - for (af = obj->pIndexData->affected; af != NULL; af = af->next) + for (af = obj->pIndexData->first_affect; af != NULL; + af = af->next) { mod = af->modifier; switch (af->location) @@ -546,7 +547,7 @@ } } - for (af = obj->affected; af != NULL; af = af->next) + for (af = obj->first_affect; af != NULL; af = af->next) { mod = af->modifier; switch (af->location) @@ -609,7 +610,7 @@ ch->armor[i] -= apply_ac(obj, loc, i); if (!obj->enchanted) - for (af = obj->pIndexData->affected; af != NULL; af = af->next) + for (af = obj->pIndexData->first_affect; af != NULL; af = af->next) { mod = af->modifier; switch (af->location) @@ -672,7 +673,7 @@ } } - for (af = obj->affected; af != NULL; af = af->next) + for (af = obj->first_affect; af != NULL; af = af->next) { mod = af->modifier; switch (af->location) @@ -737,7 +738,7 @@ } /* now add back spell effects */ - for (af = ch->affected; af != NULL; af = af->next) + for (af = ch->first_affect; af != NULL; af = af->next) { mod = af->modifier; switch (af->location) @@ -970,12 +971,11 @@ AFFECT_DATA *paf, *af_new; obj->enchanted = TRUE; - for (paf = obj->pIndexData->affected; paf != NULL; paf = paf->next) + for (paf = obj->pIndexData->first_affect; paf != NULL; paf = paf->next) { af_new = new_affect(); - af_new->next = obj->affected; - obj->affected = af_new; + LINK(af_new, obj->first_affect, obj->last_affect, next, prev); af_new->where = paf->where; af_new->type = UMAX(0, paf->type); @@ -1161,7 +1161,7 @@ if (where == TO_OBJECT || where == TO_WEAPON || vector == 0) return; - for (paf = ch->affected; paf != NULL; paf = paf->next) + for (paf = ch->first_affect; paf != NULL; paf = paf->next) if (paf->where == where && paf->bitvector == vector) { switch (where) @@ -1182,12 +1182,12 @@ return; } - for (obj = ch->carrying; obj != NULL; obj = obj->next_content) + for (obj = ch->first_carrying; obj != NULL; obj = obj->next_content) { if (obj->wear_loc == -1) continue; - for (paf = obj->affected; paf != NULL; paf = paf->next) + for (paf = obj->first_affect; paf != NULL; paf = paf->next) if (paf->where == where && paf->bitvector == vector) { switch (where) @@ -1211,7 +1211,7 @@ if (obj->enchanted) continue; - for (paf = obj->pIndexData->affected; paf != NULL; paf = paf->next) + for (paf = obj->pIndexData->first_affect; paf != NULL; paf = paf->next) if (paf->where == where && paf->bitvector == vector) { switch (where) @@ -1246,8 +1246,7 @@ *paf_new = *paf; VALIDATE(paf_new); /* in case we missed it when we set up paf */ - paf_new->next = ch->affected; - ch->affected = paf_new; + LINK(paf_new, ch->first_affect, ch->last_affect, next, prev); affect_modify(ch, paf_new, TRUE); return; @@ -1263,8 +1262,7 @@ *paf_new = *paf; VALIDATE(paf_new); /* in case we missed it when we set up paf */ - paf_new->next = obj->affected; - obj->affected = paf_new; + LINK(paf_new, obj->first_affect, obj->last_affect, next, prev); /* apply any affect vectors to the object's extra_flags */ if (paf->bitvector) @@ -1290,7 +1288,7 @@ int where; flag_t vector; - if (ch->affected == NULL) + if (ch->first_affect == NULL) { bug("Affect_remove: no affect.", 0); return; @@ -1300,29 +1298,7 @@ where = paf->where; vector = paf->bitvector; - if (paf == ch->affected) - { - ch->affected = paf->next; - } - else - { - AFFECT_DATA *prev; - - for (prev = ch->affected; prev != NULL; prev = prev->next) - { - if (prev->next == paf) - { - prev->next = paf->next; - break; - } - } - - if (prev == NULL) - { - bug("Affect_remove: cannot find paf.", 0); - return; - } - } + UNLINK(paf, ch->first_affect, ch->last_affect, next, prev); free_affect(paf); @@ -1335,7 +1311,7 @@ int where; flag_t vector; - if (obj->affected == NULL) + if (obj->first_affect == NULL) { bug("Affect_remove_object: no affect.", 0); return; @@ -1360,29 +1336,7 @@ break; } - if (paf == obj->affected) - { - obj->affected = paf->next; - } - else - { - AFFECT_DATA *prev; - - for (prev = obj->affected; prev != NULL; prev = prev->next) - { - if (prev->next == paf) - { - prev->next = paf->next; - break; - } - } - - if (prev == NULL) - { - bug("Affect_remove_object: cannot find paf.", 0); - return; - } - } + UNLINK(paf, obj->first_affect, obj->last_affect, next, prev); free_affect(paf); @@ -1399,7 +1353,7 @@ AFFECT_DATA *paf; AFFECT_DATA *paf_next; - for (paf = ch->affected; paf != NULL; paf = paf_next) + for (paf = ch->first_affect; paf != NULL; paf = paf_next) { paf_next = paf->next; if (paf->type == sn) @@ -1416,7 +1370,7 @@ { AFFECT_DATA *paf; - for (paf = ch->affected; paf != NULL; paf = paf->next) + for (paf = ch->first_affect; paf != NULL; paf = paf->next) { if (paf->type == sn) return TRUE; @@ -1434,7 +1388,7 @@ bool found; found = FALSE; - for (paf_old = ch->affected; paf_old != NULL; paf_old = paf_old->next) + for (paf_old = ch->first_affect; paf_old != NULL; paf_old = paf_old->next) { if (paf_old->type == paf->type) { @@ -1471,26 +1425,8 @@ ch->in_room->light > 0) --ch->in_room->light; - if (ch == ch->in_room->people) - { - ch->in_room->people = ch->next_in_room; - } - else - { - CHAR_DATA *prev; - - for (prev = ch->in_room->people; prev; prev = prev->next_in_room) - { - if (prev->next_in_room == ch) - { - prev->next_in_room = ch->next_in_room; - break; - } - } - - if (prev == NULL) - bug("Char_from_room: ch not found.", 0); - } + UNLINK(ch, ch->in_room->first_person, ch->in_room->last_person, + next_in_room, prev_in_room); ch->in_room = NULL; ch->next_in_room = NULL; @@ -1518,8 +1454,8 @@ } ch->in_room = pRoomIndex; - ch->next_in_room = pRoomIndex->people; - pRoomIndex->people = ch; + LINK(ch, pRoomIndex->first_person, pRoomIndex->last_person, next_in_room, + prev_in_room); if (!IS_NPC(ch)) { @@ -1542,7 +1478,7 @@ AFFECT_DATA *af, plague; CHAR_DATA *vch; - for (af = ch->affected; af != NULL; af = af->next) + for (af = ch->first_affect; af != NULL; af = af->next) { if (af->type == gsn_plague) break; @@ -1565,7 +1501,8 @@ plague.modifier = -5; plague.bitvector = AFF_PLAGUE; - for (vch = ch->in_room->people; vch != NULL; vch = vch->next_in_room) + for (vch = ch->in_room->first_person; vch != NULL; + vch = vch->next_in_room) { if (!saves_spell(plague.level - 2, vch, DAM_DISEASE) && !IS_IMMORTAL(vch) && !IS_AFFECTED(vch, AFF_PLAGUE) @@ -1586,8 +1523,8 @@ */ void obj_to_char(OBJ_DATA * obj, CHAR_DATA * ch) { - obj->next_content = ch->carrying; - ch->carrying = obj; + LINK(obj, ch->first_carrying, ch->last_carrying, next_content, + prev_content); obj->carried_by = ch; obj->in_room = NULL; obj->in_obj = NULL; @@ -1615,26 +1552,8 @@ if (obj->wear_loc != WEAR_NONE) unequip_char(ch, obj); - if (ch->carrying == obj) - { - ch->carrying = obj->next_content; - } - else - { - OBJ_DATA *prev; - - for (prev = ch->carrying; prev != NULL; prev = prev->next_content) - { - if (prev->next_content == obj) - { - prev->next_content = obj->next_content; - break; - } - } - - if (prev == NULL) - bug("Obj_from_char: obj not in list.", 0); - } + UNLINK(obj, ch->first_carrying, ch->last_carrying, next_content, + prev_content); obj->carried_by = NULL; obj->next_content = NULL; @@ -1696,7 +1615,7 @@ if (ch == NULL) return NULL; - for (obj = ch->carrying; obj != NULL; obj = obj->next_content) + for (obj = ch->first_carrying; obj != NULL; obj = obj->next_content) { if (obj->wear_loc == iWear) return obj; @@ -1738,10 +1657,10 @@ obj->wear_loc = iWear; if (!obj->enchanted) - for (paf = obj->pIndexData->affected; paf != NULL; paf = paf->next) + for (paf = obj->pIndexData->first_affect; paf != NULL; paf = paf->next) if (paf->location != APPLY_SPELL_AFFECT) affect_modify(ch, paf, TRUE); - for (paf = obj->affected; paf != NULL; paf = paf->next) + for (paf = obj->first_affect; paf != NULL; paf = paf->next) if (paf->location == APPLY_SPELL_AFFECT) affect_to_char(ch, paf); else @@ -1776,10 +1695,10 @@ if (!obj->enchanted) { - for (paf = obj->pIndexData->affected; paf != NULL; paf = paf->next) + for (paf = obj->pIndexData->first_affect; paf != NULL; paf = paf->next) if (paf->location == APPLY_SPELL_AFFECT) { - for (lpaf = ch->affected; lpaf != NULL; lpaf = lpaf_next) + for (lpaf = ch->first_affect; lpaf != NULL; lpaf = lpaf_next) { lpaf_next = lpaf->next; if ((lpaf->type == paf->type) && @@ -1797,11 +1716,11 @@ affect_check(ch, paf->where, paf->bitvector); } } - for (paf = obj->affected; paf != NULL; paf = paf->next) + for (paf = obj->first_affect; paf != NULL; paf = paf->next) if (paf->location == APPLY_SPELL_AFFECT) { bug("Norm-Apply: %d", 0); - for (lpaf = ch->affected; lpaf != NULL; lpaf = lpaf_next) + for (lpaf = ch->first_affect; lpaf != NULL; lpaf = lpaf_next) { lpaf_next = lpaf->next; if ((lpaf->type == paf->type) && @@ -1860,33 +1779,11 @@ return; } - for (ch = in_room->people; ch != NULL; ch = ch->next_in_room) + for (ch = in_room->first_person; ch != NULL; ch = ch->next_in_room) if (ch->on == obj) ch->on = NULL; - if (obj == in_room->contents) - { - in_room->contents = obj->next_content; - } - else - { - OBJ_DATA *prev; - - for (prev = in_room->contents; prev; prev = prev->next_content) - { - if (prev->next_content == obj) - { - prev->next_content = obj->next_content; - break; - } - } - - if (prev == NULL) - { - bug("Obj_from_room: obj not found.", 0); - return; - } - } + UNLINK(obj, in_room->first_content, in_room->last_content, next, prev); obj->in_room = NULL; obj->next_content = NULL; @@ -1900,8 +1797,7 @@ { if (IS_OBJ_STAT(obj, ITEM_AUCTIONED)) return; - obj->next_content = pRoomIndex->contents; - pRoomIndex->contents = obj; + LINK(obj, pRoomIndex->first_content, pRoomIndex->last_content, next, prev); obj->in_room = pRoomIndex; obj->carried_by = NULL; obj->in_obj = NULL; @@ -1919,8 +1815,8 @@ if (IS_OBJ_STAT(obj, ITEM_AUCTIONED)) return; - obj->next_content = obj_to->contains; - obj_to->contains = obj; + LINK(obj, obj_to->first_content, obj_to->last_content, next_content, + prev_content); obj->in_obj = obj_to; obj->in_room = NULL; obj->carried_by = NULL; @@ -1957,29 +1853,8 @@ return; } - if (obj == obj_from->contains) - { - obj_from->contains = obj->next_content; - } - else - { - OBJ_DATA *prev; - - for (prev = obj_from->contains; prev; prev = prev->next_content) - { - if (prev->next_content == obj) - { - prev->next_content = obj->next_content; - break; - } - } - - if (prev == NULL) - { - bug("Obj_from_obj: obj not found.", 0); - return; - } - } + UNLINK(obj, obj_from->first_content, obj_from->last_content, next_content, + prev_content); obj->next_content = NULL; obj->in_obj = NULL; @@ -2013,35 +1888,13 @@ else if (obj->in_obj != NULL) obj_from_obj(obj); - for (obj_content = obj->contains; obj_content; obj_content = obj_next) + for (obj_content = obj->first_content; obj_content; obj_content = obj_next) { obj_next = obj_content->next_content; extract_obj(obj_content); } - if (object_list == obj) - { - object_list = obj->next; - } - else - { - OBJ_DATA *prev; - - for (prev = object_list; prev != NULL; prev = prev->next) - { - if (prev->next == obj) - { - prev->next = obj->next; - break; - } - } - - if (prev == NULL) - { - bug("Extract_obj: obj %d not found.", obj->pIndexData->vnum); - return; - } - } + UNLINK(obj, object_first, object_last, next, prev); --obj->pIndexData->count; free_obj(obj); @@ -2084,7 +1937,7 @@ stop_fighting(ch, TRUE); - for (obj = ch->carrying; obj != NULL; obj = obj_next) + for (obj = ch->first_carrying; obj != NULL; obj = obj_next) { obj_next = obj->next_content; extract_obj(obj); @@ -2112,7 +1965,7 @@ ch->desc = NULL; } - for (wch = char_list; wch != NULL; wch = wch->next) + for (wch = char_first; wch != NULL; wch = wch->next) { if (wch->reply == ch) wch->reply = NULL; @@ -2120,49 +1973,10 @@ wch->mprog_target = NULL; } - if (ch == char_list) - { - char_list = ch->next; - } - else - { - CHAR_DATA *prev; - - for (prev = char_list; prev != NULL; prev = prev->next) - { - if (prev->next == ch) - { - prev->next = ch->next; - break; - } - } - - if (prev == NULL) - { - bug("Extract_char: char not found.", 0); - return; - } - } + UNLINK(ch, char_first, char_last, next, prev); if (!IS_NPC(ch)) - { - if (ch == player_list) - { - player_list = ch->next_player; - } - else - { - CHAR_DATA *prev; - for (prev = player_list; prev != NULL; prev = prev->next_player) - { - if (prev->next_player == ch) - { - prev->next_player = ch->next_player; - break; - } - } - } - } + UNLINK(ch, player_first, player_last, next, prev); if (ch->desc != NULL) ch->desc->character = NULL; @@ -2184,7 +1998,7 @@ count = 0; if (!str_cmp(arg, "self")) return ch; - for (rch = ch->in_room->people; rch != NULL; rch = rch->next_in_room) + for (rch = ch->in_room->first_person; rch != NULL; rch = rch->next_in_room) { if (!can_see(ch, rch) || !is_name(arg, rch->name)) continue; @@ -2210,7 +2024,7 @@ number = number_argument(argument, arg); count = 0; - for (wch = char_list; wch != NULL; wch = wch->next) + for (wch = char_first; wch != NULL; wch = wch->next) { if (wch->in_room == NULL || !can_see(ch, wch) || !is_name(arg, wch->name)) @@ -2230,7 +2044,7 @@ { OBJ_DATA *obj; - for (obj = object_list; obj != NULL; obj = obj->next) + for (obj = object_first; obj != NULL; obj = obj->next) { if (obj->pIndexData == pObjIndex) return obj; @@ -2276,7 +2090,7 @@ number = number_argument(argument, arg); count = 0; - for (obj = ch->carrying; obj != NULL; obj = obj->next_content) + for (obj = ch->first_carrying; obj != NULL; obj = obj->next_content) { if (obj->wear_loc == WEAR_NONE && (can_see_obj(viewer, obj)) && is_name(arg, obj->name)) @@ -2301,7 +2115,7 @@ number = number_argument(argument, arg); count = 0; - for (obj = ch->carrying; obj != NULL; obj = obj->next_content) + for (obj = ch->first_carrying; obj != NULL; obj = obj->next_content) { if (obj->wear_loc != WEAR_NONE && can_see_obj(ch, obj) && is_name(arg, obj->name)) @@ -2321,7 +2135,7 @@ { OBJ_DATA *obj; - obj = get_obj_list(ch, argument, ch->in_room->contents); + obj = get_obj_list(ch, argument, ch->in_room->first_content); if (obj != NULL) return obj; @@ -2349,7 +2163,7 @@ number = number_argument(argument, arg); count = 0; - for (obj = object_list; obj != NULL; obj = obj->next) + for (obj = object_first; obj != NULL; obj = obj->next) { if (can_see_obj(ch, obj) && is_name(arg, obj->name)) { @@ -2463,7 +2277,7 @@ else number = 1; - for (obj = obj->contains; obj != NULL; obj = obj->next_content) + for (obj = obj->first_content; obj != NULL; obj = obj->next_content) number += get_obj_number(obj); return number; @@ -2478,7 +2292,7 @@ OBJ_DATA *tobj; weight = obj->weight; - for (tobj = obj->contains; tobj != NULL; tobj = tobj->next_content) + for (tobj = obj->first_content; tobj != NULL; tobj = tobj->next_content) weight += get_obj_weight(tobj) * WEIGHT_MULT(obj) / 100; return weight; @@ -2489,7 +2303,7 @@ int weight; weight = obj->weight; - for (obj = obj->contains; obj != NULL; obj = obj->next_content) + for (obj = obj->first_content; obj != NULL; obj = obj->next_content) weight += get_obj_weight(obj); return weight; @@ -2540,7 +2354,7 @@ return TRUE; count = 0; - for (rch = pRoomIndex->people; rch != NULL; rch = rch->next_in_room) + for (rch = pRoomIndex->first_person; rch != NULL; rch = rch->next_in_room) count++; if (IS_SET(pRoomIndex->room_flags, ROOM_PRIVATE) && count >= 2) @@ -2734,7 +2548,7 @@ { CHAR_DATA *ch, *ch_next; - for (ch = char_list; ch != NULL; ch = ch_next) + for (ch = char_first; ch != NULL; ch = ch_next) { ch_next = ch->next; diff -ur src/healer.c new/healer.c --- src/healer.c Sat Jan 11 16:24:00 2003 +++ new/healer.c Fri Jan 24 02:15:43 2003 @@ -44,7 +44,7 @@ char *words; /* check for healer */ - for (mob = ch->in_room->people; mob; mob = mob->next_in_room) + for (mob = ch->in_room->first_person; mob; mob = mob->next_in_room) { if (IS_NPC(mob) && IS_SET(mob->act, ACT_IS_HEALER)) break; diff -ur src/hedit.c new/hedit.c --- src/hedit.c Sat Jan 11 16:24:00 2003 +++ new/hedit.c Fri Jan 24 02:15:43 2003 @@ -44,21 +44,6 @@ #define HEDIT( fun ) bool fun(CHAR_DATA *ch, const char*argument) -extern HELP_AREA *had_list; - -HELP_AREA *get_help_area(HELP_DATA * help) -{ - HELP_AREA *temp; - HELP_DATA *thelp; - - for (temp = had_list; temp; temp = temp->next) - for (thelp = temp->first; thelp; thelp = thelp->next_area) - if (thelp == help) - return temp; - - return NULL; -} - HEDIT(hedit_show) { HELP_DATA *help; @@ -120,9 +105,7 @@ HEDIT(hedit_new) { char arg[MIL], fullarg[MIL]; - HELP_AREA *had; HELP_DATA *help; - extern HELP_DATA *help_last; if (IS_NULLSTR(argument)) { @@ -134,54 +117,18 @@ strcpy(fullarg, argument); argument = one_argument(argument, arg); - if (!(had = had_lookup(arg))) - { - had = ch->in_room->area->helps; - argument = fullarg; - } - if (help_lookup(argument)) { chprintln(ch, "HEdit : help ya existe."); return FALSE; } - if (!had) /* el area no tiene helps */ - { - had = new_had(); - had->filename = str_dup(ch->in_room->area->file_name); - had->area = ch->in_room->area; - had->first = NULL; - had->last = NULL; - had->changed = TRUE; - had->next = had_list; - had_list = had; - ch->in_room->area->helps = had; - SET_BIT(ch->in_room->area->area_flags, AREA_CHANGED); - } - help = new_help(); help->level = 0; help->keyword = str_dup(argument); help->text = str_dup(""); - if (help_last) - help_last->next = help; - - if (help_first == NULL) - help_first = help; - - help_last = help; - help->next = NULL; - - if (!had->first) - had->first = help; - if (!had->last) - had->last = help; - - had->last->next_area = help; - had->last = help; - help->next_area = NULL; + LINK(help, help_first, help_last, next, prev); edit_start(ch, help, ED_HELP); chprintln(ch, "Ok."); @@ -233,11 +180,23 @@ CH_CMD(do_hedit) { HELP_DATA *pHelp; + char arg[MIL]; if (IS_NPC(ch)) return; - if ((pHelp = help_lookup(argument)) == NULL) + argument = one_argument(argument, arg); + + if (is_name(arg, "create new make")) + { + hedit_new(ch, argument); + return; + } + + strcat(arg, " "); + strcat(arg, argument); + + if ((pHelp = help_lookup(arg)) == NULL) { chprintln(ch, "HEdit : Help inexistente."); return; @@ -249,61 +208,16 @@ HEDIT(hedit_delete) { - HELP_DATA *pHelp, *temp; - HELP_AREA *had; + HELP_DATA *pHelp; DESCRIPTOR_DATA *d; - bool found = FALSE; EDIT_HELP(ch, pHelp); - for (d = descriptor_list; d; d = d->next) + for (d = descriptor_first; d; d = d->next) if (d->editor == ED_HELP && pHelp == (HELP_DATA *) d->pEdit) edit_done(d->character); - if (help_first == pHelp) - help_first = help_first->next; - else - { - for (temp = help_first; temp; temp = temp->next) - if (temp->next == pHelp) - break; - - if (!temp) - { - bugf("hedit_delete : help %s no encontrado en help_first", - pHelp->keyword); - return FALSE; - } - - temp->next = pHelp->next; - } - - for (had = had_list; had; had = had->next) - if (pHelp == had->first) - { - found = TRUE; - had->first = had->first->next_area; - } - else - { - for (temp = had->first; temp; temp = temp->next_area) - if (temp->next_area == pHelp) - break; - - if (temp) - { - temp->next_area = pHelp->next_area; - found = TRUE; - break; - } - } - - if (!found) - { - bugf("hedit_delete : help %s no encontrado en had_list", - pHelp->keyword); - return FALSE; - } + UNLINK(pHelp, help_first, help_last, next, prev); free_help(pHelp); @@ -339,36 +253,9 @@ return FALSE; } - if (!str_cmp(argument, "area")) - { - if (ch->in_room->area->helps == NULL) - { - chprintln(ch, "No hay helps en esta area."); - return FALSE; - } - - buffer = new_buf(); - - for (pHelp = ch->in_room->area->helps->first; pHelp; - pHelp = pHelp->next_area) - { - sprintf(buf, "%3d. %-14.14s%s", cnt, pHelp->keyword, - cnt % 4 == 3 ? "\n\r" : " "); - add_buf(buffer, buf); - cnt++; - } - - if (cnt % 4) - add_buf(buffer, "\n\r"); - - page_to_char(buf_string(buffer), ch); - return FALSE; - } - if (IS_NULLSTR(argument)) { chprintln(ch, "Sintaxis : list all"); - chprintln(ch, " list area"); return FALSE; } diff -ur src/homes.c new/homes.c --- src/homes.c Sat Jan 11 16:24:00 2003 +++ new/homes.c Fri Jan 24 02:15:43 2003 @@ -345,8 +345,7 @@ SET_BIT(pObj->wear_flags, ITEM_HOLD); pObj->condition = -1; iHash = i % MAX_KEY_HASH; - pObj->next = obj_index_hash[iHash]; - obj_index_hash[iHash] = pObj; + LINK_SINGLE(pObj, next, obj_index_hash[iHash]); ch->pcdata->home_key = pObj->vnum; break; } @@ -368,8 +367,7 @@ replace_string(pRoom->owner, ch->name); SET_BIT(pRoom->room_flags, ROOM_INDOORS); iHash = i % MAX_KEY_HASH; - pRoom->next = room_index_hash[iHash]; - room_index_hash[iHash] = pRoom; + LINK_SINGLE(pRoom, next, room_index_hash[iHash]); // do the exit // first room ch->in_room->exit[door] = new_exit(); @@ -506,8 +504,7 @@ replace_string(pRoom->owner, ch->name); SET_BIT(pRoom->room_flags, ROOM_INDOORS); iHash = i % MAX_KEY_HASH; - pRoom->next = room_index_hash[iHash]; - room_index_hash[iHash] = pRoom; + LINK_SINGLE(pRoom, next, room_index_hash[iHash]); // do the exit ch->in_room->exit[door] = new_exit(); ch->in_room->exit[door]->u1.to_room = pRoom; @@ -985,7 +982,7 @@ found = TRUE; if (home_table[i].type == H_OBJ) { - for (obj = ch->in_room->contents; obj != NULL; + for (obj = ch->in_room->first_content; obj != NULL; obj = obj_next) { obj_next = obj->next_content; @@ -996,7 +993,7 @@ } else if (home_table[i].type == H_MOB) { - for (mob = ch->in_room->people; mob != NULL; + for (mob = ch->in_room->first_person; mob != NULL; mob = mob_next) { mob_next = mob->next_in_room; diff -ur src/hunt.c new/hunt.c --- src/hunt.c Sat Jan 11 16:24:00 2003 +++ new/hunt.c Fri Jan 24 02:15:43 2003 @@ -124,7 +124,7 @@ number = number_argument(argument, arg); count = 0; - for (ach = char_list; ach != NULL; ach = ach->next) + for (ach = char_first; ach != NULL; ach = ach->next) { if (ach->in_room == NULL || ach->in_room->area != ch->in_room->area @@ -522,7 +522,7 @@ if (ch == NULL || ch->hunting == NULL || !IS_NPC(ch)) return; - for (found = 0, tmp = char_list; tmp && !found; tmp = tmp->next) + for (found = 0, tmp = char_first; tmp && !found; tmp = tmp->next) if (ch->hunting == tmp) found = 1; diff -ur src/interp.c new/interp.c --- src/interp.c Sat Jan 11 16:24:00 2003 +++ new/interp.c Fri Jan 24 02:15:43 2003 @@ -41,14 +41,11 @@ bool check_social args((CHAR_DATA * ch, char *command, const char *argument)); bool check_disabled(const struct cmd_type *command); -DISABLED_DATA *disabled_first; - #define END_MARKER "END" /* for load_disabled() and save_disabled() */ /* * Log-all switch. */ -bool fLogAll = FALSE; char last_command[MAX_STRING_LENGTH]; char last_command2[MAX_INPUT_LENGTH]; DESCRIPTOR_DATA *last_descriptor; @@ -502,7 +499,7 @@ CH_CMD(do_disable) { int i; - DISABLED_DATA *p, *q; + DISABLED_DATA *p; if (IS_NPC(ch)) { @@ -548,15 +545,7 @@ } /* Remove */ - - if (disabled_first == p) /* node to be removed == head ? */ - disabled_first = p->next; - else /* Find the node before this one */ - { - for (q = disabled_first; q->next != p; q = q->next); /* empty for */ - q->next = p->next; - } - + UNLINK(p, disabled_first, disabled_last, next, prev); free_string(p->disabled_by); /* free name of disabler */ free_mem(p); /* free node */ save_disabled(); /* save to disk */ @@ -597,8 +586,7 @@ p->command = &cmd_table[i]; p->disabled_by = str_dup(ch->name); /* save name of disabler */ p->level = get_trust(ch); /* save trust */ - p->next = disabled_first; - disabled_first = p; /* add before the current first element */ + LINK(p, disabled_first, disabled_last, next, prev); chprintln(ch, "Command disabled."); save_disabled(); /* save to disk */ @@ -656,10 +644,7 @@ p->command = &cmd_table[i]; p->level = fread_number(fp); p->disabled_by = str_dup(fread_word(fp)); - p->next = disabled_first; - - disabled_first = p; - + LINK(p, disabled_first, disabled_last, next, prev); } name = fread_word(fp); diff -ur src/lookup.c new/lookup.c --- src/lookup.c Sat Jan 11 16:24:00 2003 +++ new/lookup.c Fri Jan 24 02:15:43 2003 @@ -171,18 +171,6 @@ return NULL; } -HELP_AREA *had_lookup(char *arg) -{ - HELP_AREA *temp; - extern HELP_AREA *had_list; - - for (temp = had_list; temp; temp = temp->next) - if (!str_cmp(arg, temp->filename)) - return temp; - - return NULL; -} - int command_lookup(const char *name) { int i; diff -ur src/lookup.h new/lookup.h --- src/lookup.h Sat Jan 11 16:24:00 2003 +++ new/lookup.h Fri Jan 24 02:15:43 2003 @@ -34,6 +34,5 @@ int sex_lookup args((const char *name)); int size_lookup args((const char *name)); HELP_DATA *help_lookup args((const char *)); -HELP_AREA *had_lookup args((char *)); #endif diff -ur src/magic.c new/magic.c --- src/magic.c Sat Jan 11 16:24:00 2003 +++ new/magic.c Fri Jan 24 02:15:43 2003 @@ -160,7 +160,7 @@ sprintf(buf2, "$n utters the words, '%s'.", buf); sprintf(buf, "$n utters the words, '%s'.", skill_table[sn].name); - for (rch = ch->in_room->people; rch; rch = rch->next_in_room) + for (rch = ch->in_room->first_person; rch; rch = rch->next_in_room) { if (rch != ch) act((!IS_NPC(rch) && is_same_class(ch, rch)) ? buf : buf2, @@ -223,7 +223,7 @@ if (is_affected(victim, sn)) { - for (af = victim->affected; af != NULL; af = af->next) + for (af = victim->first_affect; af != NULL; af = af->next) { if (af->type == sn) { @@ -522,7 +522,7 @@ CHAR_DATA *vch; CHAR_DATA *vch_next; - for (vch = ch->in_room->people; vch; vch = vch_next) + for (vch = ch->in_room->first_person; vch; vch = vch_next) { vch_next = vch->next_in_room; if (victim == vch && victim->fighting == NULL) @@ -659,7 +659,7 @@ CHAR_DATA *vch; CHAR_DATA *vch_next; - for (vch = ch->in_room->people; vch; vch = vch_next) + for (vch = ch->in_room->first_person; vch; vch = vch_next) { vch_next = vch->next_in_room; if (victim == vch && victim->fighting == NULL) @@ -736,7 +736,7 @@ { AFFECT_DATA *paf; - paf = affect_find(obj->affected, gsn_curse); + paf = affect_find(obj->first_affect, gsn_curse); if (!saves_dispel(level, paf != NULL ? paf->level : obj->level, 0)) { if (paf != NULL) @@ -866,7 +866,7 @@ act("$n calls Mota's lightning to strike $s foes!", ch, NULL, NULL, TO_ROOM); - for (vch = char_list; vch != NULL; vch = vch_next) + for (vch = char_first; vch != NULL; vch = vch_next) { vch_next = vch->next; if (vch->in_room == NULL) @@ -901,7 +901,7 @@ AFFECT_DATA af; /* get sum of all mobile levels in the room */ - for (vch = ch->in_room->people; vch != NULL; vch = vch->next_in_room) + for (vch = ch->in_room->first_person; vch != NULL; vch = vch->next_in_room) { if (vch->position == POS_FIGHTING) { @@ -922,7 +922,8 @@ if (number_range(0, chance) >= mlevel) /* hard to stop large fights */ { - for (vch = ch->in_room->people; vch != NULL; vch = vch->next_in_room) + for (vch = ch->in_room->first_person; vch != NULL; + vch = vch->next_in_room) { if (IS_NPC(vch) && (IS_SET(vch->imm_flags, IMM_MAGIC) || @@ -1170,7 +1171,7 @@ while (level > 0) { found = FALSE; - for (tmp_vict = ch->in_room->people; tmp_vict != NULL; + for (tmp_vict = ch->in_room->first_person; tmp_vict != NULL; tmp_vict = next_vict) { next_vict = tmp_vict->next_in_room; @@ -1606,7 +1607,7 @@ { AFFECT_DATA *paf; - paf = affect_find(obj->affected, skill_lookup("bless")); + paf = affect_find(obj->first_affect, skill_lookup("bless")); if (!saves_dispel(level, paf != NULL ? paf->level : obj->level, 0)) { if (paf != NULL) @@ -2096,7 +2097,7 @@ chprintln(ch, "The earth trembles beneath your feet!"); act("$n makes the earth tremble and shiver.", ch, NULL, NULL, TO_ROOM); - for (vch = char_list; vch != NULL; vch = vch_next) + for (vch = char_first; vch != NULL; vch = vch_next) { vch_next = vch->next; if (vch->in_room == NULL) @@ -2153,7 +2154,7 @@ /* find the bonuses */ if (!obj->enchanted) - for (paf = obj->pIndexData->affected; paf != NULL; paf = paf->next) + for (paf = obj->pIndexData->first_affect; paf != NULL; paf = paf->next) { if (paf->location == APPLY_AC) { @@ -2166,7 +2167,7 @@ fail += 20; } - for (paf = obj->affected; paf != NULL; paf = paf->next) + for (paf = obj->first_affect; paf != NULL; paf = paf->next) { if (paf->location == APPLY_AC) { @@ -2209,12 +2210,12 @@ obj->enchanted = TRUE; /* remove all affects */ - for (paf = obj->affected; paf != NULL; paf = paf_next) + for (paf = obj->first_affect; paf != NULL; paf = paf_next) { paf_next = paf->next; free_affect(paf); } - obj->affected = NULL; + obj->first_affect = NULL; /* clear all flags */ obj->extra_flags = 0; @@ -2233,12 +2234,11 @@ AFFECT_DATA *af_new; obj->enchanted = TRUE; - for (paf = obj->pIndexData->affected; paf != NULL; paf = paf->next) + for (paf = obj->pIndexData->first_affect; paf != NULL; paf = paf->next) { af_new = new_affect(); - af_new->next = obj->affected; - obj->affected = af_new; + LINK(af_new, obj->first_affect, obj->last_affect, next, prev); af_new->where = paf->where; af_new->type = UMAX(0, paf->type); @@ -2274,7 +2274,7 @@ if (ac_found) { - for (paf = obj->affected; paf != NULL; paf = paf->next) + for (paf = obj->first_affect; paf != NULL; paf = paf->next) { if (paf->location == APPLY_AC) { @@ -2295,8 +2295,7 @@ paf->location = APPLY_AC; paf->modifier = added; paf->bitvector = 0; - paf->next = obj->affected; - obj->affected = paf; + LINK(paf, obj->first_affect, obj->last_affect, next, prev); } } @@ -2335,7 +2334,7 @@ /* find the bonuses */ if (!obj->enchanted) - for (paf = obj->pIndexData->affected; paf != NULL; paf = paf->next) + for (paf = obj->pIndexData->first_affect; paf != NULL; paf = paf->next) { if (paf->location == APPLY_HITROLL) { @@ -2355,7 +2354,7 @@ fail += 25; } - for (paf = obj->affected; paf != NULL; paf = paf->next) + for (paf = obj->first_affect; paf != NULL; paf = paf->next) { if (paf->location == APPLY_HITROLL) { @@ -2405,12 +2404,12 @@ obj->enchanted = TRUE; /* remove all affects */ - for (paf = obj->affected; paf != NULL; paf = paf_next) + for (paf = obj->first_affect; paf != NULL; paf = paf_next) { paf_next = paf->next; free_affect(paf); } - obj->affected = NULL; + obj->first_affect = NULL; /* clear all flags */ obj->extra_flags = 0; @@ -2429,12 +2428,11 @@ AFFECT_DATA *af_new; obj->enchanted = TRUE; - for (paf = obj->pIndexData->affected; paf != NULL; paf = paf->next) + for (paf = obj->pIndexData->first_affect; paf != NULL; paf = paf->next) { af_new = new_affect(); - af_new->next = obj->affected; - obj->affected = af_new; + LINK(af_new, obj->first_affect, obj->last_affect, next, prev); af_new->where = paf->where; af_new->type = UMAX(0, paf->type); @@ -2470,7 +2468,7 @@ if (dam_found) { - for (paf = obj->affected; paf != NULL; paf = paf->next) + for (paf = obj->first_affect; paf != NULL; paf = paf->next) { if (paf->location == APPLY_DAMROLL) { @@ -2493,13 +2491,12 @@ paf->location = APPLY_DAMROLL; paf->modifier = added; paf->bitvector = 0; - paf->next = obj->affected; - obj->affected = paf; + LINK(paf, obj->first_affect, obj->last_affect, next, prev); } if (hit_found) { - for (paf = obj->affected; paf != NULL; paf = paf->next) + for (paf = obj->first_affect; paf != NULL; paf = paf->next) { if (paf->location == APPLY_HITROLL) { @@ -2521,8 +2518,7 @@ paf->location = APPLY_HITROLL; paf->modifier = added; paf->bitvector = 0; - paf->next = obj->affected; - obj->affected = paf; + LINK(paf, obj->first_affect, obj->last_affect, next, prev); } } @@ -2651,7 +2647,7 @@ act("$n conjures a cloud of purple smoke.", ch, NULL, NULL, TO_ROOM); chprintln(ch, "You conjure a cloud of purple smoke."); - for (ich = ch->in_room->people; ich != NULL; ich = ich->next_in_room) + for (ich = ch->in_room->first_person; ich != NULL; ich = ich->next_in_room) { if (ich->invis_level > 0) continue; @@ -2926,7 +2922,8 @@ if (!saves_spell(level + 2, victim, DAM_FIRE) && !IS_SET(victim->imm_flags, IMM_FIRE)) { - for (obj_lose = victim->carrying; obj_lose != NULL; obj_lose = obj_next) + for (obj_lose = victim->first_carrying; obj_lose != NULL; + obj_lose = obj_next) { obj_next = obj_lose->next_content; if (number_range(1, 2 * level) > obj_lose->level && @@ -3068,7 +3065,7 @@ act("$n utters a word of divine power!", ch, NULL, NULL, TO_ROOM); chprintln(ch, "You utter a word of divine power."); - for (vch = ch->in_room->people; vch != NULL; vch = vch_next) + for (vch = ch->in_room->first_person; vch != NULL; vch = vch_next) { vch_next = vch->next_in_room; @@ -3259,7 +3256,7 @@ } if (!obj->enchanted) - for (paf = obj->pIndexData->affected; paf != NULL; paf = paf->next) + for (paf = obj->pIndexData->first_affect; paf != NULL; paf = paf->next) { if (paf->location != APPLY_NONE && paf->modifier != 0) { @@ -3303,7 +3300,7 @@ } } - for (paf = obj->affected; paf != NULL; paf = paf->next) + for (paf = obj->first_affect; paf != NULL; paf = paf->next) { if (paf->location != APPLY_NONE && paf->modifier != 0) { @@ -3498,7 +3495,7 @@ buffer = new_buf(); - for (obj = object_list; obj != NULL; obj = obj->next) + for (obj = object_first; obj != NULL; obj = obj->next) { if (!can_see_obj(ch, obj) || !is_name(target_name, obj->name) || IS_OBJ_STAT(obj, ITEM_NOLOCATE) || @@ -3574,7 +3571,7 @@ heal_num = skill_lookup("heal"); refresh_num = skill_lookup("refresh"); - for (gch = ch->in_room->people; gch != NULL; gch = gch->next_in_room) + for (gch = ch->in_room->first_person; gch != NULL; gch = gch->next_in_room) { if ((IS_NPC(ch) && IS_NPC(gch)) || (!IS_NPC(ch) && !IS_NPC(gch))) { @@ -3589,7 +3586,7 @@ AFFECT_DATA af; CHAR_DATA *gch; - for (gch = ch->in_room->people; gch != NULL; gch = gch->next_in_room) + for (gch = ch->in_room->first_person; gch != NULL; gch = gch->next_in_room) { if (!is_same_group(gch, ch) || IS_AFFECTED(gch, AFF_INVISIBLE)) continue; @@ -3989,7 +3986,7 @@ act("$n looks more relaxed.", victim, NULL, NULL, TO_ROOM); } - for (obj = victim->carrying; (obj != NULL && !found); + for (obj = victim->first_carrying; (obj != NULL && !found); obj = obj->next_content) { if ((IS_OBJ_STAT(obj, ITEM_NODROP) || @@ -4276,7 +4273,7 @@ sprintf(buf2, "Someone makes %s say '%s'.\n\r", speaker, target_name); buf1[0] = UPPER(buf1[0]); - for (vch = ch->in_room->people; vch != NULL; vch = vch->next_in_room) + for (vch = ch->in_room->first_person; vch != NULL; vch = vch->next_in_room) { if (!is_exact_name(speaker, vch->name) && IS_AWAKE(vch)) chprint(vch, saves_spell(level, vch, DAM_OTHER) ? buf2 : buf1); @@ -4389,7 +4386,7 @@ dam = UMAX(hp_dam + dice_dam / 10, dice_dam + hp_dam / 10); fire_effect(victim->in_room, level, dam / 2, TARGET_ROOM); - for (vch = victim->in_room->people; vch != NULL; vch = vch_next) + for (vch = victim->in_room->first_person; vch != NULL; vch = vch_next) { vch_next = vch->next_in_room; @@ -4446,7 +4443,7 @@ dam = UMAX(hp_dam + dice_dam / 10, dice_dam + hp_dam / 10); cold_effect(victim->in_room, level, dam / 2, TARGET_ROOM); - for (vch = victim->in_room->people; vch != NULL; vch = vch_next) + for (vch = victim->in_room->first_person; vch != NULL; vch = vch_next) { vch_next = vch->next_in_room; @@ -4500,7 +4497,7 @@ dam = UMAX(hp_dam + dice_dam / 10, dice_dam + hp_dam / 10); poison_effect(ch->in_room, level, dam, TARGET_ROOM); - for (vch = ch->in_room->people; vch != NULL; vch = vch_next) + for (vch = ch->in_room->first_person; vch != NULL; vch = vch_next) { vch_next = vch->next_in_room; diff -ur src/magic2.c new/magic2.c --- src/magic2.c Sat Jan 11 16:24:00 2003 +++ new/magic2.c Fri Jan 24 02:15:43 2003 @@ -140,11 +140,11 @@ obj_to_room(portal, to_room); - if (to_room->people != NULL) + if (to_room->first_person != NULL) { - act("$p rises up from the ground.", to_room->people, portal, + act("$p rises up from the ground.", to_room->first_person, portal, NULL, TO_ROOM); - act("$p rises up from the ground.", to_room->people, portal, + act("$p rises up from the ground.", to_room->first_person, portal, NULL, TO_CHAR); } } diff -ur src/mem.c new/mem.c --- src/mem.c Sat Jan 11 16:24:00 2003 +++ new/mem.c Fri Jan 24 02:15:43 2003 @@ -65,16 +65,7 @@ { RESET_DATA *pReset; - if (!reset_free) - { - alloc_mem(pReset, RESET_DATA, 1); - top_reset++; - } - else - { - pReset = reset_free; - reset_free = reset_free->next; - } + GET_FREE(pReset, RESET_DATA, next, reset_free); pReset->next = NULL; pReset->command = 'X'; @@ -88,8 +79,7 @@ void free_reset_data(RESET_DATA * pReset) { - pReset->next = reset_free; - reset_free = pReset; + PUT_FREE(pReset, next, reset_free); return; } @@ -98,16 +88,7 @@ AREA_DATA *pArea; char buf[MAX_INPUT_LENGTH]; - if (!area_free) - { - alloc_mem(pArea, AREA_DATA, 1); - top_area++; - } - else - { - pArea = area_free; - area_free = area_free->next; - } + GET_FREE(pArea, AREA_DATA, next, area_free); pArea->next = NULL; pArea->name = str_dup("New area"); @@ -135,8 +116,7 @@ free_string(pArea->builders); free_string(pArea->credits); - area_free = pArea; - pArea->next = area_free->next; + PUT_FREE(pArea, next, area_free); return; } @@ -144,16 +124,7 @@ { EXIT_DATA *pExit; - if (!exit_free) - { - alloc_mem(pExit, EXIT_DATA, 1); - top_exit++; - } - else - { - pExit = exit_free; - exit_free = exit_free->next; - } + GET_FREE(pExit, EXIT_DATA, next, exit_free); pExit->u1.to_room = NULL; /* ROM OLC */ pExit->next = NULL; @@ -172,8 +143,7 @@ free_string(pExit->keyword); free_string(pExit->description); - pExit->next = exit_free; - exit_free = pExit; + PUT_FREE(pExit, next, exit_free); return; } @@ -182,21 +152,12 @@ ROOM_INDEX_DATA *pRoom; int door; - if (!room_index_free) - { - alloc_mem(pRoom, ROOM_INDEX_DATA, 1); - top_room++; - } - else - { - pRoom = room_index_free; - room_index_free = room_index_free->next; - } + GET_FREE(pRoom, ROOM_INDEX_DATA, next, room_index_free); pRoom->next = NULL; - pRoom->people = NULL; - pRoom->contents = NULL; - pRoom->extra_descr = NULL; + pRoom->first_person = NULL; + pRoom->first_content = NULL; + pRoom->first_extra_descr = NULL; pRoom->area = NULL; for (door = 0; door < MAX_DIR; door++) @@ -232,7 +193,7 @@ free_exit(pRoom->exit[door]); } - for (pExtra = pRoom->extra_descr; pExtra; pExtra = pExtra->next) + for (pExtra = pRoom->first_extra_descr; pExtra; pExtra = pExtra->next) { free_extra_descr(pExtra); } @@ -243,8 +204,7 @@ free_reset_data(pReset); } - pRoom->next = room_index_free; - room_index_free = pRoom; + PUT_FREE(pRoom, next, room_index_free); return; } @@ -255,16 +215,7 @@ SHOP_DATA *pShop; int buy; - if (!shop_free) - { - alloc_mem(pShop, SHOP_DATA, 1); - top_shop++; - } - else - { - pShop = shop_free; - shop_free = shop_free->next; - } + GET_FREE(pShop, SHOP_DATA, next, shop_free); pShop->next = NULL; pShop->keeper = 0; @@ -282,8 +233,7 @@ void free_shop(SHOP_DATA * pShop) { - pShop->next = shop_free; - shop_free = pShop; + PUT_FREE(pShop, next, shop_free); return; } @@ -292,20 +242,11 @@ OBJ_INDEX_DATA *pObj; int value; - if (!obj_index_free) - { - alloc_mem(pObj, OBJ_INDEX_DATA, 1); - top_obj_index++; - } - else - { - pObj = obj_index_free; - obj_index_free = obj_index_free->next; - } + GET_FREE(pObj, OBJ_INDEX_DATA, next, obj_index_free); pObj->next = NULL; - pObj->extra_descr = NULL; - pObj->affected = NULL; + pObj->first_extra_descr = NULL; + pObj->first_affect = NULL; pObj->area = NULL; pObj->name = str_dup("no name"); pObj->short_descr = str_dup("(no short description)"); @@ -336,18 +277,17 @@ free_string(pObj->short_descr); free_string(pObj->description); - for (pAf = pObj->affected; pAf; pAf = pAf->next) + for (pAf = pObj->first_affect; pAf; pAf = pAf->next) { free_affect(pAf); } - for (pExtra = pObj->extra_descr; pExtra; pExtra = pExtra->next) + for (pExtra = pObj->first_extra_descr; pExtra; pExtra = pExtra->next) { free_extra_descr(pExtra); } - pObj->next = obj_index_free; - obj_index_free = pObj; + PUT_FREE(pObj, next, obj_index_free); return; } @@ -355,16 +295,7 @@ { MOB_INDEX_DATA *pMob; - if (!mob_index_free) - { - alloc_mem(pMob, MOB_INDEX_DATA, 1); - top_mob_index++; - } - else - { - pMob = mob_index_free; - mob_index_free = mob_index_free->next; - } + GET_FREE(pMob, MOB_INDEX_DATA, next, mob_index_free); pMob->next = NULL; pMob->spec_fun = NULL; @@ -416,17 +347,20 @@ void free_mob_index(MOB_INDEX_DATA * pMob) { + MPROG_LIST *mp; + free_string(pMob->player_name); free_string(pMob->short_descr); free_string(pMob->long_descr); free_string(pMob->description); - free_mprog(pMob->mprogs); + + for (mp = pMob->first_mprog; mp; mp = mp->next) + free_mprog(mp); if (pMob->pShop) free_shop(pMob->pShop); - pMob->next = mob_index_free; - mob_index_free = pMob; + PUT_FREE(pMob, next, mob_index_free); return; } @@ -436,16 +370,7 @@ { MPROG_CODE *NewCode; - if (!mpcode_free) - { - alloc_mem(NewCode, MPROG_CODE, 1); - top_mprog_index++; - } - else - { - NewCode = mpcode_free; - mpcode_free = mpcode_free->next; - } + GET_FREE(NewCode, MPROG_CODE, next, mpcode_free); NewCode->vnum = 0; NewCode->code = str_dup(""); @@ -457,7 +382,6 @@ void free_mpcode(MPROG_CODE * pMcode) { free_string(pMcode->code); - pMcode->next = mpcode_free; - mpcode_free = pMcode; + PUT_FREE(pMcode, next, mpcode_free); return; } diff -ur src/merc.h new/merc.h --- src/merc.h Sat Jan 11 16:24:00 2003 +++ new/merc.h Fri Jan 24 02:15:43 2003 @@ -63,18 +63,18 @@ #endif #if defined(WIN32) -typedef __int64 flag_t; /* For MSVC4.2/5.0 - flags */ #pragma warning( disable: 4018 4244 4305 4761 4800 4309) #define __attribute__(x) #if !defined(NOCRYPT) #define NOCRYPT #endif +typedef unsigned __int64 flag_t; #else #if defined(__CYGWIN__) #define NOCRYPT #define NO_MCCP #endif -typedef int64_t flag_t; +typedef u_int64_t flag_t; #endif typedef long vnum_t; @@ -114,7 +114,6 @@ typedef struct exit_data EXIT_DATA; typedef struct extra_descr_data EXTRA_DESCR_DATA; typedef struct help_data HELP_DATA; -typedef struct help_area_data HELP_AREA; typedef struct kill_data KILL_DATA; typedef struct mem_data MEM_DATA; typedef struct mob_index_data MOB_INDEX_DATA; @@ -218,6 +217,7 @@ struct ban_data { BAN_DATA *next; + BAN_DATA *prev; bool valid; flag_t ban_flags; int level; @@ -227,6 +227,7 @@ struct buf_type { BUFFER *next; + BUFFER *prev; bool valid; int state; /* error state of the buffer */ int size; /* size in k */ @@ -236,6 +237,7 @@ struct auction_data { AUCTION_DATA *next; + AUCTION_DATA *prev; OBJ_DATA *item; CHAR_DATA *owner; CHAR_DATA *high_bidder; @@ -309,26 +311,38 @@ #define BIT_d ((flag_t) 1 << 29) #define BIT_e ((flag_t) 1 << 30) #define BIT_f ((flag_t) 1 << 31) -#define BIT_g ((flag_t) 1 << 32) -#define BIT_h ((flag_t) 1 << 33) -#define BIT_i ((flag_t) 1 << 34) -#define BIT_j ((flag_t) 1 << 35) -#define BIT_k ((flag_t) 1 << 36) -#define BIT_l ((flag_t) 1 << 37) -#define BIT_m ((flag_t) 1 << 38) -#define BIT_n ((flag_t) 1 << 39) -#define BIT_o ((flag_t) 1 << 40) -#define BIT_p ((flag_t) 1 << 41) -#define BIT_q ((flag_t) 1 << 42) -#define BIT_r ((flag_t) 1 << 43) -#define BIT_s ((flag_t) 1 << 44) -#define BIT_t ((flag_t) 1 << 45) -#define BIT_u ((flag_t) 1 << 46) -#define BIT_v ((flag_t) 1 << 47) -#define BIT_w ((flag_t) 1 << 48) -#define BIT_x ((flag_t) 1 << 49) -#define BIT_y ((flag_t) 1 << 50) -#define BIT_z ((flag_t) 1 << 51) +#define BIT_Ax ((flag_t) 1 << 32) +#define BIT_Bx ((flag_t) 1 << 33) +#define BIT_Cx ((flag_t) 1 << 34) +#define BIT_Dx ((flag_t) 1 << 35) +#define BIT_Ex ((flag_t) 1 << 36) +#define BIT_Fx ((flag_t) 1 << 37) +#define BIT_Gx ((flag_t) 1 << 38) +#define BIT_Hx ((flag_t) 1 << 39) +#define BIT_Ix ((flag_t) 1 << 40) +#define BIT_Jx ((flag_t) 1 << 41) +#define BIT_Kx ((flag_t) 1 << 42) +#define BIT_Lx ((flag_t) 1 << 43) +#define BIT_Mx ((flag_t) 1 << 44) +#define BIT_Nx ((flag_t) 1 << 45) +#define BIT_Ox ((flag_t) 1 << 46) +#define BIT_Px ((flag_t) 1 << 47) +#define BIT_Qx ((flag_t) 1 << 48) +#define BIT_Rx ((flag_t) 1 << 49) +#define BIT_Sx ((flag_t) 1 << 50) +#define BIT_Tx ((flag_t) 1 << 51) +#define BIT_Ux ((flag_t) 1 << 52) +#define BIT_Vx ((flag_t) 1 << 53) +#define BIT_Wx ((flag_t) 1 << 54) +#define BIT_Xx ((flag_t) 1 << 55) +#define BIT_Yx ((flag_t) 1 << 56) +#define BIT_Zx ((flag_t) 1 << 57) +#define BIT_ax ((flag_t) 1 << 58) +#define BIT_bx ((flag_t) 1 << 59) +#define BIT_cx ((flag_t) 1 << 60) +#define BIT_dx ((flag_t) 1 << 61) +#define BIT_ex ((flag_t) 1 << 62) +#define BIT_fx ((flag_t) 1 << 63) /* * Connected state for a channel. @@ -363,6 +377,7 @@ struct descriptor_data { DESCRIPTOR_DATA *next; + DESCRIPTOR_DATA *prev; DESCRIPTOR_DATA *snoop_by; CHAR_DATA *character; CHAR_DATA *original; @@ -451,22 +466,12 @@ struct help_data { HELP_DATA *next; - HELP_DATA *next_area; + HELP_DATA *prev; int level; const char *keyword; const char *text; }; -struct help_area_data -{ - HELP_AREA *next; - HELP_DATA *first; - HELP_DATA *last; - AREA_DATA *area; - const char *filename; - bool changed; -}; - /* * Shop types. */ @@ -474,7 +479,8 @@ struct shop_data { - SHOP_DATA *next; /* Next shop in list */ + SHOP_DATA *next; + SHOP_DATA *prev; /* Next shop in list */ vnum_t keeper; /* Vnum of shop keeper mob */ int buy_type[MAX_TRADE]; /* Item types shop will buy */ int profit_buy; /* Cost multiplier for buying */ @@ -544,6 +550,7 @@ struct corpse_data { CORPSE_DATA *next; + CORPSE_DATA *prev; OBJ_DATA *corpse; }; @@ -580,6 +587,7 @@ struct note_data { NOTE_DATA *next; + NOTE_DATA *prev; bool valid; const char *sender; const char *date; @@ -620,6 +628,7 @@ struct affect_data { AFFECT_DATA *next; + AFFECT_DATA *prev; bool valid; int where; int type; @@ -1433,7 +1442,8 @@ MOB_INDEX_DATA *next; SPEC_FUN *spec_fun; SHOP_DATA *pShop; - MPROG_LIST *mprogs; + MPROG_LIST *first_mprog; + MPROG_LIST *last_mprog; AREA_DATA *area; /* OLC */ vnum_t vnum; vnum_t group; @@ -1480,6 +1490,7 @@ struct mem_data { MEM_DATA *next; + MEM_DATA *prev; bool valid; int id; int reaction; @@ -1495,6 +1506,7 @@ struct stat_data { STAT_DATA *next; + STAT_DATA *prev; bool valid; const char *name; // name of character long gamestat[MAX_GAMESTAT]; // stat data @@ -1506,8 +1518,11 @@ struct char_data { CHAR_DATA *next; + CHAR_DATA *prev; CHAR_DATA *next_player; + CHAR_DATA *prev_player; CHAR_DATA *next_in_room; + CHAR_DATA *prev_in_room; CHAR_DATA *master; CHAR_DATA *leader; CHAR_DATA *fighting; @@ -1518,8 +1533,10 @@ SPEC_FUN *spec_fun; MOB_INDEX_DATA *pIndexData; DESCRIPTOR_DATA *desc; - AFFECT_DATA *affected; - OBJ_DATA *carrying; + AFFECT_DATA *first_affect; + AFFECT_DATA *last_affect; + OBJ_DATA *first_carrying; + OBJ_DATA *last_carrying; OBJ_DATA *on; ROOM_INDEX_DATA *in_room; ROOM_INDEX_DATA *was_in_room; @@ -1603,6 +1620,7 @@ struct pc_data { PC_DATA *next; + PC_DATA *prev; BUFFER *buffer; bool valid; const char *pwd; @@ -1650,6 +1668,7 @@ struct gen_data { GEN_DATA *next; + GEN_DATA *prev; bool valid; bool *skill_chosen; bool *group_chosen; @@ -1673,7 +1692,8 @@ */ struct extra_descr_data { - EXTRA_DESCR_DATA *next; /* Next in list */ + EXTRA_DESCR_DATA *next; + EXTRA_DESCR_DATA *prev; /* Next in list */ bool valid; const char *keyword; /* Keyword in look/examine */ const char *description; /* What to see */ @@ -1685,8 +1705,10 @@ struct obj_index_data { OBJ_INDEX_DATA *next; - EXTRA_DESCR_DATA *extra_descr; - AFFECT_DATA *affected; + EXTRA_DESCR_DATA *first_extra_descr; + EXTRA_DESCR_DATA *last_extra_descr; + AFFECT_DATA *first_affect; + AFFECT_DATA *last_affect; AREA_DATA *area; /* OLC */ bool new_format; const char *name; @@ -1712,13 +1734,18 @@ struct obj_data { OBJ_DATA *next; + OBJ_DATA *prev; OBJ_DATA *next_content; - OBJ_DATA *contains; + OBJ_DATA *prev_content; + OBJ_DATA *first_content; + OBJ_DATA *last_content; OBJ_DATA *in_obj; OBJ_DATA *on; CHAR_DATA *carried_by; - EXTRA_DESCR_DATA *extra_descr; - AFFECT_DATA *affected; + EXTRA_DESCR_DATA *first_extra_descr; + EXTRA_DESCR_DATA *last_extra_descr; + AFFECT_DATA *first_affect; + AFFECT_DATA *last_affect; OBJ_INDEX_DATA *pIndexData; ROOM_INDEX_DATA *in_room; bool valid; @@ -1755,7 +1782,8 @@ vnum_t key; const char *keyword; const char *description; - EXIT_DATA *next; /* OLC */ + EXIT_DATA *next; + EXIT_DATA *prev; /* OLC */ flag_t rs_flags; /* OLC */ int orig_door; /* OLC */ }; @@ -1779,6 +1807,7 @@ struct reset_data { RESET_DATA *next; + RESET_DATA *prev; char command; vnum_t arg1; int arg2; @@ -1792,7 +1821,7 @@ struct area_data { AREA_DATA *next; - HELP_AREA *helps; + AREA_DATA *prev; const char *file_name; const char *name; const char *credits; @@ -1815,9 +1844,12 @@ struct room_index_data { ROOM_INDEX_DATA *next; - CHAR_DATA *people; - OBJ_DATA *contents; - EXTRA_DESCR_DATA *extra_descr; + CHAR_DATA *first_person; + CHAR_DATA *last_person; + OBJ_DATA *first_content; + OBJ_DATA *last_content; + EXTRA_DESCR_DATA *first_extra_descr; + EXTRA_DESCR_DATA *last_extra_descr; AREA_DATA *area; EXIT_DATA *exit[6]; RESET_DATA *reset_first; /* OLC */ @@ -1837,7 +1869,8 @@ /* one disabled command */ struct disabled_data { - DISABLED_DATA *next; /* pointer to next node */ + DISABLED_DATA *next; + DISABLED_DATA *prev; /* pointer to next node */ struct cmd_type const *command; /* pointer to the command struct */ const char *disabled_by; /* name of disabler */ int level; /* level of disabler */ @@ -1920,6 +1953,7 @@ vnum_t vnum; const char *code; MPROG_LIST *next; + MPROG_LIST *prev; bool valid; }; @@ -1928,6 +1962,7 @@ vnum_t vnum; const char *code; MPROG_CODE *next; + MPROG_CODE *prev; }; #include "gsn.h" @@ -1952,7 +1987,155 @@ (a) = (b); \ if ( (a) < 0 ) \ bug( "CHECK_POS : " c " == %d < 0", a ); \ - } \ + } + +#define UNLINK_SINGLE(pdata,pnext,type,list) \ +do \ +{ \ + if (list == pdata) \ + { \ + list = pdata->pnext; \ + } \ + else \ + { \ + type *prev; \ + for (prev = list; prev != NULL; prev = prev->pnext) \ + { \ + if (prev->pnext == pdata) \ + { \ + prev->pnext = pdata->pnext; \ + break; \ + } \ + } \ + if (prev == NULL) \ + { \ + bugf (#pdata " not found in " #list "."); \ + } \ + } \ +} while(0) + +#define LINK_SINGLE(pdata,pnext,list) \ +do \ +{ \ + pdata->pnext = list; \ + list = pdata; \ +} \ +while (0) + +#define LINK(link, first, last, next, prev) \ +do \ +{ \ + if ( !(first) ) \ + { \ + (first) = (link); \ + (last) = (link); \ + } \ + else \ + (last)->next = (link); \ + (link)->next = NULL; \ + if (first == link) \ + (link)->prev = NULL; \ + else \ + (link)->prev = (last); \ + (last) = (link); \ +} while(0) + +#define INSERT(link, insert, first, next, prev) \ +do \ +{ \ + (link)->prev = (insert)->prev; \ + if ( !(insert)->prev ) \ + (first) = (link); \ + else \ + (insert)->prev->next = (link); \ + (insert)->prev = (link); \ + (link)->next = (insert); \ +} while(0) + +#define UNLINK(link, first, last, next, prev) \ +do \ +{ \ + if ( !(link)->prev ) \ + { \ + (first) = (link)->next; \ + if ((first)) \ + (first)->prev = NULL; \ + } \ + else \ + { \ + (link)->prev->next = (link)->next; \ + } \ + if ( !(link)->next ) \ + { \ + (last) = (link)->prev; \ + if ((last)) \ + (last)->next = NULL; \ + } \ + else \ + { \ + (link)->next->prev = (link)->prev; \ + } \ +} while(0) + +#define CHECK_LINKS(first, last, next, prev, type) \ +do { \ + type *ptr, *pptr = NULL; \ + if ( !(first) && !(last) ) \ + break; \ + if ( !(first) ) \ + { \ + bugf( "CHECK_LINKS: last with NULL first! %s.", \ + #first ); \ + for ( ptr = (last); ptr->prev; ptr = ptr->prev ); \ + (first) = ptr; \ + } \ + else if ( !(last) ) \ + { \ + bugf( "CHECK_LINKS: first with NULL last! %s.", \ + #first ); \ + for ( ptr = (first); ptr->next; ptr = ptr->next ); \ + (last) = ptr; \ + } \ + if ( (first) ) \ + { \ + for ( ptr = (first); ptr; ptr = ptr->next ) \ + { \ + if ( ptr->prev != pptr ) \ + { \ + bugf( "CHECK_LINKS(%s): %p:->prev != %p. Fixing.", \ + #first, ptr, pptr ); \ + ptr->prev = pptr; \ + } \ + if ( ptr->prev && ptr->prev->next != ptr ) \ + { \ + bugf( "CHECK_LINKS(%s): %p:->prev->next != %p. Fixing.",\ + #first, ptr, ptr ); \ + ptr->prev->next = ptr; \ + } \ + pptr = ptr; \ + } \ + pptr = NULL; \ + } \ + if ( (last) ) \ + { \ + for ( ptr = (last); ptr; ptr = ptr->prev ) \ + { \ + if ( ptr->next != pptr ) \ + { \ + bugf( "CHECK_LINKS (%s): %p:->next != %p. Fixing.", \ + #first, ptr, pptr ); \ + ptr->next = pptr; \ + } \ + if ( ptr->next && ptr->next->prev != ptr ) \ + { \ + bugf( "CHECK_LINKS(%s): %p:->next->prev != %p. Fixing.",\ + #first, ptr, ptr ); \ + ptr->next->prev = ptr; \ + } \ + pptr = ptr; \ + } \ + } \ +} while(0) #define replace_string(astr, bstr) do{ free_string(astr); astr = str_dup(bstr); }while(0) @@ -2058,57 +2241,17 @@ extern const struct dex_app_type dex_app[26]; extern const struct con_app_type con_app[26]; -extern struct class_type *class_table; extern const struct weapon_type weapon_table[]; extern const struct item_type item_table[]; extern const struct wiznet_type wiznet_table[]; extern const struct attack_type attack_table[]; -extern struct race_type *race_table; extern const struct spec_type spec_table[]; extern const struct liq_type liq_table[]; -extern struct skill_type *skill_table; -extern struct group_type *group_table; - -extern struct social_type *social_table; /* * Global variables. */ -extern HELP_DATA *help_first; -extern SHOP_DATA *shop_first; - -extern CHAR_DATA *char_list; -extern DESCRIPTOR_DATA *descriptor_list; -extern OBJ_DATA *object_list; -extern CHAR_DATA *player_list; - -extern MPROG_CODE *mprog_list; - -extern AUCTION_DATA *auction_list; - -extern STAT_DATA *stat_list; -extern BAN_DATA *ban_list; - -extern char bug_buf[]; -extern time_t current_time; -extern bool fLogAll; -extern FILE *fpReserve; -extern KILL_DATA kill_table[]; -extern char log_buf[]; -extern TIME_INFO_DATA time_info; -extern WEATHER_DATA weather_info; -extern bool MOBtrigger; -extern NOTE_DATA *note_free; -extern OBJ_DATA *obj_free; -extern DISABLED_DATA *disabled_first; /* interp.c */ -extern GQUEST gquest_info; -extern WAR_DATA war_info; -extern int maxClan; -extern int maxCommands; -extern int maxSkill; -extern int maxGroup; -extern int maxRace; -extern int maxClass; +#include "globals.h" /* * The crypt(3) function is not available on some operating systems. @@ -2149,6 +2292,7 @@ #define BUG_FILE "bugs.txt" /* For 'bug' and bug() */ #define TYPO_FILE "typos.txt" /* For 'typo' */ #define SHUTDOWN_FILE "shutdown.txt" /* For 'shutdown' */ +#define HELP_FILE "help.are" #define BAN_FILE DATA_DIR "ban.dat" #define MUSIC_FILE DATA_DIR "music.dat" #define DISABLED_FILE DATA_DIR "disabled.dat" /* disabled commands */ @@ -2186,7 +2330,6 @@ #define AREA_CLOSED (BIT_E) #define MAX_DIR 6 -#define NO_FLAG -99 /* Must not be used in flags or stats. */ /* * Global Constants @@ -2199,7 +2342,6 @@ */ extern AREA_DATA *area_first; extern AREA_DATA *area_last; -extern SHOP_DATA *shop_last; extern int top_affect; extern int top_area; @@ -2221,7 +2363,8 @@ extern OBJ_INDEX_DATA *obj_index_hash[MAX_KEY_HASH]; extern ROOM_INDEX_DATA *room_index_hash[MAX_KEY_HASH]; -extern CORPSE_DATA *corpse_list; +extern CORPSE_DATA *corpse_first; +extern CORPSE_DATA *corpse_last; #define STRING_END 2 #define STRING_FOUND 1 diff -ur src/mob_cmds.c new/mob_cmds.c --- src/mob_cmds.c Sat Jan 11 16:24:00 2003 +++ new/mob_cmds.c Fri Jan 24 02:15:43 2003 @@ -212,7 +212,7 @@ return; } - for (i = 0, mprg = victim->pIndexData->mprogs; mprg != NULL; + for (i = 0, mprg = victim->pIndexData->first_mprog; mprg != NULL; mprg = mprg->next) { @@ -261,7 +261,7 @@ return; } - for (d = descriptor_list; d; d = d->next) + for (d = descriptor_first; d; d = d->next) { if (d->connected == CON_PLAYING) { @@ -291,7 +291,7 @@ if (ch->in_room == NULL) return; - for (d = descriptor_list; d; d = d->next) + for (d = descriptor_first; d; d = d->next) { if (d->connected == CON_PLAYING && d->character->in_room != NULL && d->character->in_room->area == ch->in_room->area) @@ -425,7 +425,7 @@ extract_obj(obj); } else - for (obj = ch->carrying; obj != NULL; obj = obj_next) + for (obj = ch->first_carrying; obj != NULL; obj = obj_next) { obj_next = obj->next_content; if (arg[3] == '\0' || is_name(&arg[4], obj->name)) @@ -629,7 +629,7 @@ CHAR_DATA *vnext; OBJ_DATA *obj_next; - for (victim = ch->in_room->people; victim != NULL; victim = vnext) + for (victim = ch->in_room->first_person; victim != NULL; victim = vnext) { vnext = victim->next_in_room; if (IS_NPC(victim) && victim != ch && @@ -637,7 +637,7 @@ extract_char(victim, TRUE); } - for (obj = ch->in_room->contents; obj != NULL; obj = obj_next) + for (obj = ch->in_room->first_content; obj != NULL; obj = obj_next) { obj_next = obj->next_content; if (!IS_SET(obj->extra_flags, ITEM_NOPURGE)) @@ -744,7 +744,7 @@ * See if 'ch' still exists before continuing! * Handles 'at XXXX quit' case. */ - for (wch = char_list; wch != NULL; wch = wch->next) + for (wch = char_first; wch != NULL; wch = wch->next) { if (wch == ch) { @@ -786,7 +786,8 @@ { CHAR_DATA *victim_next; - for (victim = ch->in_room->people; victim != NULL; victim = victim_next) + for (victim = ch->in_room->first_person; victim != NULL; + victim = victim_next) { victim_next = victim->next_in_room; if (!IS_NPC(victim)) @@ -858,7 +859,7 @@ if ((who = get_char_room(ch, arg1)) == NULL) return; - for (victim = ch->in_room->people; victim; victim = victim_next) + for (victim = ch->in_room->first_person; victim; victim = victim_next) { victim_next = victim->next_in_room; if (is_same_group(who, victim)) @@ -894,7 +895,7 @@ CHAR_DATA *vch; CHAR_DATA *vch_next; - for (vch = char_list; vch != NULL; vch = vch_next) + for (vch = char_first; vch != NULL; vch = vch_next) { vch_next = vch->next; @@ -946,7 +947,7 @@ if (victim == ch) return; - for (vch = victim->in_room->people; vch != NULL; vch = vch_next) + for (vch = victim->in_room->first_person; vch != NULL; vch = vch_next) { vch_next = vch->next_in_room; @@ -987,7 +988,7 @@ vnum = atol(arg); - for (victim = char_list; victim; victim = victim_next) + for (victim = char_first; victim; victim = victim_next) { victim_next = victim->next; if (IS_NPC(victim) && victim->pIndexData->vnum == vnum && @@ -1116,7 +1117,7 @@ fKill = TRUE; if (fAll) { - for (victim = ch->in_room->people; victim; victim = victim_next) + for (victim = ch->in_room->first_person; victim; victim = victim_next) { victim_next = victim->next_in_room; if (victim != ch) @@ -1343,7 +1344,7 @@ else vnum = atol(arg); - for (obj = victim->carrying; obj; obj = obj_next) + for (obj = victim->first_carrying; obj; obj = obj_next) { obj_next = obj->next_content; if (fAll || obj->pIndexData->vnum == vnum) diff -ur src/mob_prog.c new/mob_prog.c --- src/mob_prog.c Sat Jan 11 16:24:00 2003 +++ new/mob_prog.c Fri Jan 24 02:15:43 2003 @@ -257,7 +257,7 @@ { CHAR_DATA *vch, *victim = NULL; int now = 0, highest = 0; - for (vch = mob->in_room->people; vch; vch = vch->next_in_room) + for (vch = mob->in_room->first_person; vch; vch = vch->next_in_room) { if (mob != vch && !IS_NPC(vch) && can_see(mob, vch) && (now = number_percent()) > highest) @@ -277,15 +277,16 @@ { CHAR_DATA *vch; int count; - for (count = 0, vch = mob->in_room->people; vch; vch = vch->next_in_room) - if (mob != vch && - (iFlag == 0 || (iFlag == 1 && !IS_NPC(vch)) || - (iFlag == 2 && IS_NPC(vch)) || (iFlag == 3 && - IS_NPC(mob) && - IS_NPC(vch) && - mob->pIndexData->vnum == - vch->pIndexData->vnum) - || (iFlag == 4 && is_same_group(mob, vch))) && can_see(mob, vch)) + for (count = 0, vch = mob->in_room->first_person; vch; + vch = vch->next_in_room) + if (mob != vch + && (iFlag == 0 || (iFlag == 1 && !IS_NPC(vch)) + || (iFlag == 2 && IS_NPC(vch)) || (iFlag == 3 && IS_NPC(mob) + && IS_NPC(vch) + && mob->pIndexData->vnum == + vch->pIndexData->vnum) + || (iFlag == 4 && is_same_group(mob, vch))) + && can_see(mob, vch)) count++; return (count); } @@ -302,7 +303,7 @@ if (!IS_NPC(ch)) return 0; - for (i = 0, vch = ch->in_room->people; vch; vch = vch->next_in_room) + for (i = 0, vch = ch->in_room->first_person; vch; vch = vch->next_in_room) { if (vch == ch) return i; @@ -321,7 +322,7 @@ bool has_item(CHAR_DATA * ch, vnum_t vnum, int pitem_type, bool fWear) { OBJ_DATA *obj; - for (obj = ch->carrying; obj; obj = obj->next_content) + for (obj = ch->first_carrying; obj; obj = obj->next_content) if ((vnum < 0 || obj->pIndexData->vnum == vnum) && (pitem_type < 0 || obj->pIndexData->item_type == pitem_type) && (!fWear || obj->wear_loc != WEAR_NONE)) @@ -335,7 +336,7 @@ bool get_mob_vnum_room(CHAR_DATA * ch, vnum_t vnum) { CHAR_DATA *mob; - for (mob = ch->in_room->people; mob; mob = mob->next_in_room) + for (mob = ch->in_room->first_person; mob; mob = mob->next_in_room) if (IS_NPC(mob) && mob->pIndexData->vnum == vnum) return TRUE; return FALSE; @@ -347,7 +348,7 @@ bool get_obj_vnum_room(CHAR_DATA * ch, vnum_t vnum) { OBJ_DATA *obj; - for (obj = ch->in_room->contents; obj; obj = obj->next_content) + for (obj = ch->in_room->first_content; obj; obj = obj->next_content) if (obj->pIndexData->vnum == vnum) return TRUE; return FALSE; @@ -374,7 +375,6 @@ OBJ_DATA *obj1 = (OBJ_DATA *) arg1; OBJ_DATA *obj2 = (OBJ_DATA *) arg2; OBJ_DATA *lval_obj = NULL; - flag_t fvalue; const char *original; char buf[MAX_INPUT_LENGTH], code; int lval = 0, oper = 0, rval = -1; @@ -555,25 +555,16 @@ { case CHK_AFFECTED: return (lval_char != NULL && - IS_SET(lval_char->affected_by, - (fvalue = - flag_value(affect_flags, - buf)) == NO_FLAG ? 0 : fvalue)); + IS_SET(lval_char->affected_by, flag_value(affect_flags, buf))); case CHK_ACT: return (lval_char != NULL && - IS_SET(lval_char->act, - (fvalue = - flag_value(act_flags, buf)) == NO_FLAG ? 0 : fvalue)); + IS_SET(lval_char->act, flag_value(act_flags, buf))); case CHK_IMM: return (lval_char != NULL && - IS_SET(lval_char->imm_flags, - (fvalue = - flag_value(imm_flags, buf)) == NO_FLAG ? 0 : fvalue)); + IS_SET(lval_char->imm_flags, flag_value(imm_flags, buf))); case CHK_OFF: return (lval_char != NULL && - IS_SET(lval_char->off_flags, - (fvalue = - flag_value(off_flags, buf)) == NO_FLAG ? 0 : fvalue)); + IS_SET(lval_char->off_flags, flag_value(off_flags, buf))); case CHK_CARRIES: if (is_number(buf)) return (lval_char != NULL && @@ -1204,7 +1195,7 @@ { MPROG_LIST *prg; - for (prg = mob->pIndexData->mprogs; prg != NULL; prg = prg->next) + for (prg = mob->pIndexData->first_mprog; prg != NULL; prg = prg->next) { if (prg->trig_type == type && strstr(argument, prg->trig_phrase) != NULL) @@ -1225,7 +1216,7 @@ { MPROG_LIST *prg; - for (prg = mob->pIndexData->mprogs; prg != NULL; prg = prg->next) + for (prg = mob->pIndexData->first_mprog; prg != NULL; prg = prg->next) { if (prg->trig_type == type && number_percent() < atoi(prg->trig_phrase)) { @@ -1245,7 +1236,7 @@ * and give it to the mobile. WFT was that? Funcs in act_obj() * handle it just fine. */ - for (prg = mob->pIndexData->mprogs; prg; prg = prg->next) + for (prg = mob->pIndexData->first_mprog; prg; prg = prg->next) { if (prg->trig_type == TRIG_BRIBE && amount >= atoi(prg->trig_phrase)) { @@ -1261,12 +1252,12 @@ CHAR_DATA *mob; MPROG_LIST *prg; - for (mob = ch->in_room->people; mob != NULL; mob = mob->next_in_room) + for (mob = ch->in_room->first_person; mob != NULL; mob = mob->next_in_room) { if (IS_NPC(mob) && (HAS_TRIGGER(mob, TRIG_EXIT) || HAS_TRIGGER(mob, TRIG_EXALL))) { - for (prg = mob->pIndexData->mprogs; prg; prg = prg->next) + for (prg = mob->pIndexData->first_mprog; prg; prg = prg->next) { /* * Exit trigger works only if the mobile is not busy @@ -1300,7 +1291,7 @@ const char *p; MPROG_LIST *prg; - for (prg = mob->pIndexData->mprogs; prg; prg = prg->next) + for (prg = mob->pIndexData->first_mprog; prg; prg = prg->next) if (prg->trig_type == TRIG_GIVE) { p = prg->trig_phrase; @@ -1340,7 +1331,7 @@ { CHAR_DATA *mob; - for (mob = ch->in_room->people; mob != NULL; mob = mob->next_in_room) + for (mob = ch->in_room->first_person; mob != NULL; mob = mob->next_in_room) { if (IS_NPC(mob) && (HAS_TRIGGER(mob, TRIG_GREET) || HAS_TRIGGER(mob, TRIG_GRALL))) @@ -1365,7 +1356,7 @@ { MPROG_LIST *prg; - for (prg = mob->pIndexData->mprogs; prg != NULL; prg = prg->next) + for (prg = mob->pIndexData->first_mprog; prg != NULL; prg = prg->next) if ((prg->trig_type == TRIG_HPCNT) && ((100 * mob->hit / mob->max_hit) < atol(prg->trig_phrase))) { diff -ur src/multiclass.c new/multiclass.c --- src/multiclass.c Sat Jan 11 16:24:00 2003 +++ new/multiclass.c Fri Jan 24 02:15:43 2003 @@ -52,7 +52,7 @@ /* * check for priest or special mob */ - for (mob = ch->in_room->people; mob; mob = mob->next_in_room) + for (mob = ch->in_room->first_person; mob; mob = mob->next_in_room) { if (IS_NPC(mob) && IS_SET(mob->act, ACT_IS_HEALER)) /* setup to do at healer's for now */ break; @@ -112,7 +112,7 @@ "crashes while you are creating your character, log back on and write a"); chprintln(ch, "note to 'immortal' who will retrieve your backup."); wiznet("$N has remorted.", ch, NULL, 0, 0, 0); - for (af = ch->affected; af != NULL; af = af_next) + for (af = ch->first_affect; af != NULL; af = af_next) { af_next = af->next; affect_remove(ch, af); diff -ur src/music.c new/music.c --- src/music.c Sat Jan 11 16:24:00 2003 +++ new/music.c Fri Jan 24 02:15:43 2003 @@ -84,7 +84,7 @@ channel_songs[0]++; } - for (d = descriptor_list; d != NULL; d = d->next) + for (d = descriptor_first; d != NULL; d = d->next) { victim = d->original ? d->original : d->character; @@ -97,7 +97,7 @@ } } - for (obj = object_list; obj != NULL; obj = obj->next) + for (obj = object_first; obj != NULL; obj = obj->next) { if (obj->item_type != ITEM_JUKEBOX || obj->value[1] < 0) continue; @@ -123,8 +123,8 @@ sprintf(buf, "$p starts playing %s, %s.", song_table[obj->value[1]].group, song_table[obj->value[1]].name); - if (room->people != NULL) - act(buf, room->people, obj, NULL, TO_ALL); + if (room->first_person != NULL) + act(buf, room->first_person, obj, NULL, TO_ALL); obj->value[0] = 0; continue; } @@ -149,8 +149,8 @@ } sprintf(buf, "$p bops: '%s'", line); - if (room->people != NULL) - act(buf, room->people, obj, NULL, TO_ALL); + if (room->first_person != NULL) + act(buf, room->first_person, obj, NULL, TO_ALL); } } @@ -224,7 +224,8 @@ str = one_argument(argument, arg); - for (juke = ch->in_room->contents; juke != NULL; juke = juke->next_content) + for (juke = ch->in_room->first_content; juke != NULL; + juke = juke->next_content) if (juke->item_type == ITEM_JUKEBOX && can_see_obj(ch, juke)) break; diff -ur src/nanny.c new/nanny.c --- src/nanny.c Sat Jan 11 16:24:00 2003 +++ new/nanny.c Fri Jan 24 02:15:43 2003 @@ -207,7 +207,7 @@ { case 'y': case 'Y': - for (d_old = descriptor_list; d_old != NULL; d_old = pd_next) + for (d_old = descriptor_first; d_old != NULL; d_old = pd_next) { pd_next = d_old->next; if (d_old == d || d_old->character == NULL) @@ -718,10 +718,8 @@ write_to_buffer(d, "\n\rWelcome to ROM 2.4. Please do not feed the mobiles.\n\r", 0); - ch->next = char_list; - char_list = ch; - ch->next_player = player_list; - player_list = ch; + LINK(ch, char_first, char_last, next, prev); + LINK(ch, player_first, player_last, next_player, prev_player); d->connected = CON_PLAYING; reset_char(ch); diff -ur src/olc.c new/olc.c --- src/olc.c Sat Jan 11 16:24:00 2003 +++ new/olc.c Fri Jan 24 02:15:43 2003 @@ -309,7 +309,7 @@ { DESCRIPTOR_DATA *d; - for (d = descriptor_list; d != NULL; d = d->next) + for (d = descriptor_first; d != NULL; d = d->next) { if (d->pEdit == NULL || d->character == NULL) continue; @@ -470,7 +470,8 @@ {"material", (void *) &xObj.material, olced_str, NULL}, {"weight", (void *) &xObj.weight, olced_number, NULL}, {"cost", (void *) &xObj.cost, olced_number_long, NULL}, - {"ed", (void *) &xObj.extra_descr, olced_ed, NULL}, + {"ed", (void *) &xObj.first_extra_descr, olced_ed, + (const void *) &xObj.last_extra_descr}, {"delete", NULL, olced_olded, (const void *) oedit_delete}, {"extra", (void *) &xObj.extra_flags, olced_flag, @@ -493,7 +494,8 @@ {"create", NULL, olced_olded, (const void *) redit_create}, {"name", (void *) &xRoom.name, olced_str, NULL}, {"desc", (void *) &xRoom.description, olced_desc, NULL}, - {"ed", (void *) &xRoom.extra_descr, olced_ed, NULL}, + {"ed", (void *) &xRoom.first_extra_descr, olced_ed, + (const void *) &xRoom.last_extra_descr}, {"format", NULL, olced_olded, (const void *) redit_format}, {"north", NULL, olced_direction, (const void *) DIR_NORTH}, {"south", NULL, olced_direction, (const void *) DIR_SOUTH}, @@ -899,13 +901,7 @@ if ((*table[temp].function) (table[temp].name, ch, argument, puntero, table[temp].parameter)) - { - HELP_AREA *tHelp = get_help_area(pHelp); - - if (tHelp != NULL && tHelp->area != NULL) - SET_BIT(tHelp->area->area_flags, AREA_CHANGED); - save_other_helps(NULL); - } + save_helps(); return TRUE; break; case ED_SOCIAL: @@ -1437,31 +1433,6 @@ return TRUE; } -void extract_area(AREA_DATA * pArea) -{ - if (pArea == area_first) - { - area_first = pArea->next; - } - else - { - AREA_DATA *prev; - - for (prev = area_first; prev != NULL; prev = prev->next) - { - if (prev->next == pArea) - { - prev->next = pArea->next; - break; - } - } - if (prev == NULL) - { - bug("extract_area: area not found.", 0); - } - } -} - /* Entry point for editing area_data. */ CH_CMD(do_aedit) { @@ -1520,7 +1491,7 @@ clean_area_links(pArea); unlink(pArea->file_name); - extract_area(pArea); + UNLINK(pArea, area_first, area_last, next, prev); free_area(pArea); do_asave(NULL, "changed"); chprintln(ch, "Area deleted."); @@ -2277,8 +2248,7 @@ "O[%5ld] %-13.13s %-19.19s M[%5ld] %-15.15s\n\r", pReset->arg1, pObj->short_descr, (pReset->command == - 'G') ? flag_string(wear_loc_strings, - WEAR_NONE) : + 'G') ? "in the inventory" : flag_string(wear_loc_strings, pReset->arg3), pMob->vnum, pMob->short_descr); strcat(final, buf); @@ -2329,41 +2299,26 @@ Purpose: Inserts a new reset in the given index slot. Called by: do_resets(olc.c). ****************************************************************************/ -void add_reset(ROOM_INDEX_DATA * room, RESET_DATA * pReset, int pindex) +void add_reset(ROOM_INDEX_DATA * room, RESET_DATA * pReset, int pIndex) { RESET_DATA *reset; int iReset = 0; - if (!room->reset_first) - { - room->reset_first = pReset; - room->reset_last = pReset; - pReset->next = NULL; - return; - } - - pindex--; + pIndex--; - if (pindex == 0) /* First slot (1) selected. */ + if (pIndex == 0 || !room->reset_first) { - pReset->next = room->reset_first; - room->reset_first = pReset; + LINK(pReset, room->reset_first, room->reset_last, next, prev); return; } - /* - * If negative slot( <= 0 selected) then this will find the last. - */ - for (reset = room->reset_first; reset->next; reset = reset->next) + for (reset = room->reset_first; reset; reset = reset->next) { - if (++iReset == pindex) + if (++iReset == pIndex || reset->next == NULL) break; } - pReset->next = reset->next; - reset->next = pReset; - if (!pReset->next) - room->reset_last = pReset; + INSERT(pReset, reset, room->reset_first, next, prev); return; } @@ -2423,50 +2378,28 @@ if (!str_cmp(arg2, "delete")) { int insert_loc = atoi(arg1); + int iReset = -1; if (!ch->in_room->reset_first) { chprintln(ch, "No resets in this area."); return; } - - if (insert_loc - 1 <= 0) + for (pReset = pRoom->reset_first; pReset; pReset = pReset->next) { - pReset = pRoom->reset_first; - pRoom->reset_first = pRoom->reset_first->next; - if (!pRoom->reset_first) - pRoom->reset_last = NULL; + if (++iReset == insert_loc - 1) + break; } - else - { - int iReset = 0; - RESET_DATA *prev = NULL; - - for (pReset = pRoom->reset_first; pReset; pReset = pReset->next) - { - if (++iReset == insert_loc) - break; - prev = pReset; - } - - if (!pReset) - { - chprintln(ch, "Reset not found."); - return; - } - if (prev) - prev->next = prev->next->next; - else - pRoom->reset_first = pRoom->reset_first->next; - - for (pRoom->reset_last = pRoom->reset_first; - pRoom->reset_last->next; - pRoom->reset_last = pRoom->reset_last->next); + if (!pReset) + { + chprintln(ch, "Reset not found."); + return; } - + UNLINK(pReset, pRoom->reset_first, pRoom->reset_last, next, prev); free_reset_data(pReset); chprintln(ch, "Reset deleted."); + SET_BIT(ch->in_room->area->area_flags, AREA_CHANGED); } else /* @@ -2546,7 +2479,7 @@ * -------------------------- */ { - if (flag_value(wear_loc_flags, arg4) == NO_FLAG) + if (flag_value(wear_loc_flags, arg4) == 0) { chprintln(ch, "Resets: '? wear-loc'"); return; diff -ur src/olc.h new/olc.h --- src/olc.h Sat Jan 11 16:24:00 2003 +++ new/olc.h Fri Jan 24 02:15:43 2003 @@ -150,8 +150,7 @@ flag_t wear_bit(int loc); int wear_loc(flag_t bits, int count); void save_area(AREA_DATA * pArea); -void save_other_helps(CHAR_DATA * ch); -void save_helps(FILE * fp, HELP_AREA * ha); +void save_helps(void); void save_shops(FILE * fp, AREA_DATA * pArea); void save_resets(FILE * fp, AREA_DATA * pArea); void save_door_resets(FILE * fp, AREA_DATA * pArea); diff -ur src/olc_act.c new/olc_act.c --- src/olc_act.c Sat Jan 11 16:24:00 2003 +++ new/olc_act.c Fri Jan 24 02:15:43 2003 @@ -55,13 +55,13 @@ #define ALT_FLAGVALUE_SET( _blargh, _table, _arg ) \ { \ flag_t blah = flag_value( _table, _arg ); \ - _blargh = (blah == NO_FLAG) ? 0 : blah; \ + _blargh = blah; \ } #define ALT_FLAGVALUE_TOGGLE( _blargh, _table, _arg ) \ { \ flag_t blah = flag_value( _table, _arg ); \ - _blargh ^= (blah == NO_FLAG) ? 0 : blah; \ + _blargh ^= blah; \ } /* Return TRUE if area changed, FALSE if not. */ @@ -82,124 +82,42 @@ { RESET_DATA *prev, *wReset; - prev = pRoom->reset_first; - for (wReset = pRoom->reset_first; wReset; wReset = wReset->next) + for (wReset = pRoom->reset_first; wReset; wReset = prev) { + prev = wReset->next; + if (wReset == pReset) { - if (pRoom->reset_first == pReset) - { - pRoom->reset_first = pReset->next; - if (!pRoom->reset_first) - pRoom->reset_last = NULL; - } - else if (pRoom->reset_last == pReset) - { - pRoom->reset_last = prev; - prev->next = NULL; - } - else - prev->next = prev->next->next; - - if (pRoom->reset_first == pReset) - pRoom->reset_first = pReset->next; - - if (!pRoom->reset_first) - pRoom->reset_last = NULL; + UNLINK(pReset, pRoom->reset_first, pRoom->reset_last, next, prev); } - - prev = wReset; } } void unlink_obj_index(OBJ_INDEX_DATA * pObj) { int iHash; - OBJ_INDEX_DATA *iObj, *sObj; iHash = pObj->vnum % MAX_KEY_HASH; - sObj = obj_index_hash[iHash]; - - if (sObj->next == NULL) - - obj_index_hash[iHash] = NULL; - else if (sObj == pObj) - - obj_index_hash[iHash] = pObj->next; - else - { - - for (iObj = sObj; iObj != NULL; iObj = iObj->next) - { - if (iObj == pObj) - { - sObj->next = pObj->next; - break; - } - sObj = iObj; - } - } + UNLINK_SINGLE(pObj, next, OBJ_INDEX_DATA, obj_index_hash[iHash]); } void unlink_room_index(ROOM_INDEX_DATA * pRoom) { int iHash; - ROOM_INDEX_DATA *iRoom, *sRoom; iHash = pRoom->vnum % MAX_KEY_HASH; - sRoom = room_index_hash[iHash]; - - if (sRoom->next == NULL) - - room_index_hash[iHash] = NULL; - else if (sRoom == pRoom) - - room_index_hash[iHash] = pRoom->next; - else - { - - for (iRoom = sRoom; iRoom != NULL; iRoom = iRoom->next) - { - if (iRoom == pRoom) - { - sRoom->next = pRoom->next; - break; - } - sRoom = iRoom; - } - } + UNLINK_SINGLE(pRoom, next, ROOM_INDEX_DATA, room_index_hash[iHash]); } void unlink_mob_index(MOB_INDEX_DATA * pMob) { int iHash; - MOB_INDEX_DATA *iMob, *sMob; iHash = pMob->vnum % MAX_KEY_HASH; - sMob = mob_index_hash[iHash]; - - if (sMob->next == NULL) - - mob_index_hash[iHash] = NULL; - else if (sMob == pMob) - - mob_index_hash[iHash] = pMob->next; - else - { - - for (iMob = sMob; iMob != NULL; iMob = iMob->next) - { - if (iMob == pMob) - { - sMob->next = pMob->next; - break; - } - sMob = iMob; - } - } + UNLINK_SINGLE(pMob, next, MOB_INDEX_DATA, mob_index_hash[iHash]); } bool show_version(CHAR_DATA * ch, char *argument) @@ -630,7 +548,7 @@ } ocount = 0; - for (Obj = pRoom->contents; Obj; Obj = obj_next) + for (Obj = pRoom->first_content; Obj; Obj = obj_next) { obj_next = Obj->next_content; @@ -639,7 +557,7 @@ } mcount = 0; - for (wch = pRoom->people; wch; wch = wnext) + for (wch = pRoom->first_person; wch; wch = wnext) { wnext = wch->next_in_room; if (IS_NPC(wch)) @@ -690,7 +608,7 @@ } edcount = 0; - for (pExtra = pRoom->extra_descr; pExtra; pExtra = pExtra->next) + for (pExtra = pRoom->first_extra_descr; pExtra; pExtra = pExtra->next) { edcount++; } @@ -753,7 +671,7 @@ if ((pObjIndex = get_obj_index(vnum))) { if (fAll || is_name(arg, pObjIndex->name) || - flag_value(type_flags, arg) == pObjIndex->item_type) + (int) flag_value(type_flags, arg) == pObjIndex->item_type) { found = TRUE; sprintf(buf, "[%5ld] %-17.16s", pObjIndex->vnum, @@ -945,8 +863,7 @@ AREA_DATA *pArea; pArea = new_area(); - area_last->next = pArea; - area_last = pArea; /* Thanks, Walker. */ + LINK(pArea, area_first, area_last, next, prev); edit_start(ch, pArea, ED_AREA); SET_BIT(pArea->area_flags, AREA_ADDED); chprintln(ch, "Area Created."); @@ -1248,12 +1165,12 @@ strcat(buf1, buf); } - if (pRoom->extra_descr) + if (pRoom->first_extra_descr) { EXTRA_DESCR_DATA *ed; strcat(buf1, "Desc Kwds: ["); - for (ed = pRoom->extra_descr; ed; ed = ed->next) + for (ed = pRoom->first_extra_descr; ed; ed = ed->next) { strcat(buf1, ed->keyword); if (ed->next) @@ -1264,7 +1181,7 @@ strcat(buf1, "Characters: ["); fcnt = FALSE; - for (rch = pRoom->people; rch; rch = rch->next_in_room) + for (rch = pRoom->first_person; rch; rch = rch->next_in_room) { one_argument(rch->name, buf); strcat(buf1, buf); @@ -1285,7 +1202,7 @@ strcat(buf1, "Objects: ["); fcnt = FALSE; - for (obj = pRoom->contents; obj; obj = obj->next_content) + for (obj = pRoom->first_content; obj; obj = obj->next_content) { one_argument(obj->name, buf); strcat(buf1, buf); @@ -1382,7 +1299,7 @@ * Set the exit flags, needs full argument. * ---------------------------------------- */ - if ((value = flag_value(exit_flags, argument)) != NO_FLAG) + if ((value = flag_value(exit_flags, argument)) != 0) { ROOM_INDEX_DATA *pToRoom; int rev; /* ROM OLC */ @@ -1685,8 +1602,7 @@ top_vnum_room = value; iHash = value % MAX_KEY_HASH; - pRoom->next = room_index_hash[iHash]; - room_index_hash[iHash] = pRoom; + LINK_SINGLE(pRoom, next, room_index_hash[iHash]); edit_start(ch, pRoom, ED_ROOM); chprintln(ch, "Room created."); return TRUE; @@ -1789,7 +1705,7 @@ {WEAR_WRIST_R, ITEM_WEAR_WRIST}, {WEAR_WIELD, ITEM_WIELD}, {WEAR_HOLD, ITEM_HOLD}, - {NO_FLAG, NO_FLAG} + {-2, -2} }; /***************************************************************************** @@ -1802,13 +1718,13 @@ { int flag; - for (flag = 0; wear_table[flag].wear_bit != NO_FLAG; flag++) + for (flag = 0; wear_table[flag].wear_bit != -2; flag++) { if (IS_SET(bits, wear_table[flag].wear_bit) && --count < 1) return wear_table[flag].wear_loc; } - return NO_FLAG; + return 0; } /***************************************************************************** @@ -1820,7 +1736,7 @@ { int flag; - for (flag = 0; wear_table[flag].wear_loc != NO_FLAG; flag++) + for (flag = 0; wear_table[flag].wear_loc != -2; flag++) { if (loc == wear_table[flag].wear_loc) return wear_table[flag].wear_bit; @@ -1893,7 +1809,7 @@ * Load into object's inventory. */ if (argument[0] == '\0' && - ((to_obj = get_obj_list(ch, arg2, pRoom->contents)) != NULL)) + ((to_obj = get_obj_list(ch, arg2, pRoom->first_content)) != NULL)) { pReset = new_reset_data(); pReset->command = 'P'; @@ -1925,7 +1841,7 @@ /* * Make sure the location on mobile is valid. */ - if ((pwear_loc = flag_value(wear_loc_flags, argument)) == NO_FLAG) + if ((pwear_loc = flag_value(wear_loc_flags, argument)) == 0) { chprintln(ch, "REdit: Invalid wear_loc. '? wear-loc'"); return FALSE; @@ -2372,7 +2288,7 @@ pObj->value[0] = atol(argument); break; case 1: - if ((value = flag_value(container_flags, argument)) != NO_FLAG) + if ((value = flag_value(container_flags, argument)) != 0) TOGGLE_BIT(pObj->value[1], value); else { @@ -2540,13 +2456,13 @@ chprintlnf(ch, "Weight: [%5d]\n\rCost: [%5d]", pObj->weight, pObj->cost); - if (pObj->extra_descr) + if (pObj->first_extra_descr) { EXTRA_DESCR_DATA *ed; chprint(ch, "Ex desc kwd: "); - for (ed = pObj->extra_descr; ed; ed = ed->next) + for (ed = pObj->first_extra_descr; ed; ed = ed->next) { chprint(ch, "["); chprint(ch, ed->keyword); @@ -2559,7 +2475,7 @@ chprintlnf(ch, "Short desc: %s\n\rLong desc:\n\r %s", pObj->short_descr, pObj->description); - for (cnt = 0, paf = pObj->affected; paf; paf = paf->next) + for (cnt = 0, paf = pObj->first_affect; paf; paf = paf->next) { if (cnt == 0) { @@ -2599,7 +2515,7 @@ return FALSE; } - if ((value = flag_value(apply_flags, loc)) == NO_FLAG) /* Hugin */ + if ((value = flag_value(apply_flags, loc)) == 0) /* Hugin */ { chprintln(ch, "Valid affects are:"); show_help(ch, "apply"); @@ -2614,8 +2530,7 @@ pAf->duration = -1; pAf->bitvector = 0; pAf->level = pObj->level; - pAf->next = pObj->affected; - pObj->affected = pAf; + LINK(pAf, pObj->first_affect, pObj->last_affect, next, prev); chprintln(ch, "Affect added."); return TRUE; @@ -2684,7 +2599,7 @@ top_obj_index--; ocount = 0; - for (obj = object_list; obj; obj = obj_next) + for (obj = object_first; obj; obj = obj_next) { obj_next = obj->next; @@ -2763,14 +2678,14 @@ argument = one_argument(argument, mod); one_argument(argument, bvector); - if (type[0] == '\0' || (typ = flag_value(apply_types, type)) == NO_FLAG) + if (type[0] == '\0' || (typ = flag_value(apply_types, type)) == 0) { chprintln(ch, "Invalid apply type. Valid apply types are:"); show_help(ch, "apptype"); return FALSE; } - if (loc[0] == '\0' || (value = flag_value(apply_flags, loc)) == NO_FLAG) + if (loc[0] == '\0' || (value = flag_value(apply_flags, loc)) == 0) { chprintln(ch, "Valid applys are:"); show_help(ch, "apply"); @@ -2778,7 +2693,7 @@ } if (bvector[0] == '\0' || - (bv = flag_value(bitvector_type[typ].table, bvector)) == NO_FLAG) + (bv = flag_value(bitvector_type[typ].table, bvector)) == 0) { chprintln(ch, "Invalid bitvector type."); chprintln(ch, "Valid bitvector types are:"); @@ -2801,8 +2716,7 @@ pAf->duration = -1; pAf->bitvector = bv; pAf->level = pObj->level; - pAf->next = pObj->affected; - pObj->affected = pAf; + LINK(pAf, pObj->first_affect, pObj->last_affect, next, prev); chprintln(ch, "Apply added."); return TRUE; @@ -2816,7 +2730,6 @@ { OBJ_INDEX_DATA *pObj; AFFECT_DATA *pAf; - AFFECT_DATA *pAf_next; char affect[MAX_STRING_LENGTH]; int value; int cnt = 0; @@ -2839,34 +2752,18 @@ return FALSE; } - if (!(pAf = pObj->affected)) + for (pAf = pObj->first_affect; pAf != NULL; pAf = pAf->next) + if (++cnt == value) + break; + + if (!pAf) { chprintln(ch, "OEdit: Non-existant affect."); return FALSE; } - if (value == 0) /* First case: Remove first affect */ - { - pAf = pObj->affected; - pObj->affected = pAf->next; - free_affect(pAf); - } - else /* Affect to remove is not the first */ - { - while ((pAf_next = pAf->next) && (++cnt < value)) - pAf = pAf_next; - - if (pAf_next) /* See if it's the next affect */ - { - pAf->next = pAf_next->next; - free_affect(pAf_next); - } - else /* Doesn't exist */ - { - chprintln(ch, "No such affect."); - return FALSE; - } - } + UNLINK(pAf, pObj->first_affect, pObj->last_affect, next, prev); + free_affect(pAf); chprintln(ch, "Affect removed."); return TRUE; @@ -2945,8 +2842,7 @@ top_vnum_obj = value; iHash = value % MAX_KEY_HASH; - pObj->next = obj_index_hash[iHash]; - obj_index_hash[iHash] = pObj; + LINK_SINGLE(pObj, next, obj_index_hash[iHash]); edit_start(ch, pObj, ED_OBJECT); chprintln(ch, "Object Created."); return TRUE; @@ -3079,13 +2975,13 @@ } } - if (pMob->mprogs) + if (pMob->first_mprog) { int cnt; chprintlnf(ch, "\n\rMOBPrograms for [%5ld]:", pMob->vnum); - for (cnt = 0, list = pMob->mprogs; list; list = list->next) + for (cnt = 0, list = pMob->first_mprog; list; list = list->next) { if (cnt == 0) { @@ -3146,8 +3042,7 @@ pMob->act = ACT_IS_NPC; iHash = value % MAX_KEY_HASH; - pMob->next = mob_index_hash[iHash]; - mob_index_hash[iHash] = pMob; + LINK_SINGLE(pMob, next, mob_index_hash[iHash]); edit_start(ch, pMob, ED_MOBILE); chprintln(ch, "Mobile Created."); return TRUE; @@ -3225,7 +3120,7 @@ for (pRoom = room_index_hash[iHash]; pRoom; pRoom = pRoom->next) { - for (wch = pRoom->people; wch; wch = wnext) + for (wch = pRoom->first_person; wch; wch = wnext) { wnext = wch->next_in_room; if (wch->pIndexData == pMob) @@ -3444,7 +3339,7 @@ return FALSE; } - if ((value = flag_value(mprog_flags, trigger)) == NO_FLAG) + if ((value = flag_value(mprog_flags, trigger)) == 0) { chprintln(ch, "Valid flags are:"); show_help(ch, "mprog"); @@ -3461,10 +3356,9 @@ list->vnum = atol(num); list->trig_type = value; list->trig_phrase = str_dup(phrase); - list->code = code->code; + replace_string(list->code, code->code); SET_BIT(pMob->mprog_flags, value); - list->next = pMob->mprogs; - pMob->mprogs = list; + LINK(list, pMob->first_mprog, pMob->last_mprog, next, prev); chprintln(ch, "Mprog Added."); return TRUE; @@ -3474,7 +3368,6 @@ { MOB_INDEX_DATA *pMob; MPROG_LIST *list; - MPROG_LIST *list_next; char mprog[MAX_STRING_LENGTH]; int value; int cnt = 0; @@ -3496,36 +3389,18 @@ return FALSE; } - if (!(list = pMob->mprogs)) + for (list = pMob->first_mprog; list != NULL; list = list->next) + if ((++cnt == value)) + break; + + if (!list) { chprintln(ch, "MEdit: Non existant mprog."); return FALSE; } - - if (value == 0) - { - REMOVE_BIT(pMob->mprog_flags, pMob->mprogs->trig_type); - list = pMob->mprogs; - pMob->mprogs = list->next; - free_mprog(list); - } - else - { - while ((list_next = list->next) && (++cnt < value)) - list = list_next; - - if (list_next) - { - REMOVE_BIT(pMob->mprog_flags, list_next->trig_type); - list->next = list_next->next; - free_mprog(list_next); - } - else - { - chprintln(ch, "No such mprog."); - return FALSE; - } - } + REMOVE_BIT(pMob->mprog_flags, list->trig_type); + UNLINK(list, pMob->first_mprog, pMob->last_mprog, next, prev); + free_mprog(list); chprintln(ch, "Mprog removed."); return TRUE; @@ -3922,7 +3797,7 @@ } if (str_cmp(argument, "none") - && (value = flag_value(type_flags, argument)) == NO_FLAG) + && (value = flag_value(type_flags, argument)) == 0) { chprintln(ch, "MEdit: That type of item is not known."); return FALSE; @@ -3945,12 +3820,7 @@ } pMob->pShop = new_shop(); - if (!shop_first) - shop_first = pMob->pShop; - if (shop_last) - shop_last->next = pMob->pShop; - shop_last = pMob->pShop; - + LINK(pMob->pShop, shop_first, shop_last, next, prev); pMob->pShop->keeper = pMob->vnum; chprintln(ch, "New shop assigned to mobile."); @@ -3964,34 +3834,7 @@ pShop = pMob->pShop; pMob->pShop = NULL; - if (pShop == shop_first) - { - if (!pShop->next) - { - shop_first = NULL; - shop_last = NULL; - } - else - shop_first = pShop->next; - } - else - { - SHOP_DATA *ipShop; - - for (ipShop = shop_first; ipShop; ipShop = ipShop->next) - { - if (ipShop->next == pShop) - { - if (!pShop->next) - { - shop_last = ipShop; - shop_last->next = NULL; - } - else - ipShop->next = pShop->next; - } - } - } + UNLINK(pShop, shop_first, shop_last, next, prev); free_shop(pShop); @@ -4196,6 +4039,7 @@ { EXTRA_DESCR_DATA *ed; EXTRA_DESCR_DATA **pEd = (EXTRA_DESCR_DATA **) arg; + EXTRA_DESCR_DATA **lEd = (EXTRA_DESCR_DATA **) par; char command[MAX_INPUT_LENGTH]; char keyword[MAX_INPUT_LENGTH]; @@ -4222,8 +4066,7 @@ ed = new_extra_descr(); replace_string(ed->keyword, keyword); - ed->next = *pEd; - *pEd = ed; + LINK(ed, *pEd, *lEd, next, prev); string_append(ch, &ed->description); @@ -4278,10 +4121,7 @@ return FALSE; } - if (!ped) - *pEd = ed->next; - else - ped->next = ed->next; + UNLINK(ed, *pEd, *lEd, next, prev); free_extra_descr(ed); @@ -4486,7 +4326,7 @@ c = clan_lookup(pClan->name); - for (pch = char_list; pch != NULL; pch = pch->next) + for (pch = char_first; pch != NULL; pch = pch->next) { if (pch->clan == c) pch->clan = -1; diff -ur src/olc_class.c new/olc_class.c --- src/olc_class.c Sat Jan 11 16:24:00 2003 +++ new/olc_class.c Fri Jan 24 02:15:43 2003 @@ -127,7 +127,7 @@ c = class_lookup(pClass->name); - for (pch = player_list; pch != NULL; pch = pch->next_player) + for (pch = player_first; pch != NULL; pch = pch->next_player) { invalid = FALSE; diff -ur src/olc_mpcode.c new/olc_mpcode.c --- src/olc_mpcode.c Sat Jan 11 16:24:00 2003 +++ new/olc_mpcode.c Fri Jan 24 02:15:43 2003 @@ -47,7 +47,7 @@ MPROG_LIST *list, *list_next; MOB_INDEX_DATA *pMob; vnum_t vnum = 0; - int nMatch = 0, count, pos = 0; + int nMatch = 0, count; for (vnum = 0; nMatch < top_mob_index; vnum++) { @@ -56,7 +56,7 @@ nMatch++; count = -1; - for (list = pMob->mprogs; list != NULL; list = list_next) + for (list = pMob->first_mprog; list != NULL; list = list_next) { list_next = list->next; count++; @@ -64,25 +64,9 @@ if (list->vnum != pnum) continue; - if (count == 0) - { - REMOVE_BIT(pMob->mprog_flags, pMob->mprogs->trig_type); - list = pMob->mprogs; - pMob->mprogs = list->next; - free_mprog(list); - } - else - { - while ((list_next = list->next) && (++pos < count)) - list = list_next; - - if (list_next) - { - REMOVE_BIT(pMob->mprog_flags, list_next->trig_type); - list->next = list_next->next; - free_mprog(list_next); - } - } + REMOVE_BIT(pMob->mprog_flags, list->trig_type); + UNLINK(list, pMob->first_mprog, pMob->last_mprog, next, prev); + free_mprog(list); } } } @@ -229,8 +213,7 @@ pMcode = new_mpcode(); pMcode->vnum = value; - pMcode->next = mprog_list; - mprog_list = pMcode; + LINK(pMcode, mprog_first, mprog_last, next, prev); edit_start(ch, pMcode, ED_MPCODE); chprintln(ch, "MobProgram Code Created."); @@ -263,7 +246,7 @@ buffer = new_buf(); - for (mprg = mprog_list; mprg != NULL; mprg = mprg->next) + for (mprg = mprog_first; mprg != NULL; mprg = mprg->next) if (fAll || ENTRE(ch->in_room->area->min_vnum, mprg->vnum, ch->in_room->area->max_vnum)) @@ -330,15 +313,14 @@ unlink_mprog(value); prev = NULL; - for (curr = mprog_list; curr != NULL; prev = curr, curr = curr->next) + for (curr = mprog_first; curr != NULL; curr = prev) { + prev = curr->next; + if (curr->vnum != value) continue; - if (prev == NULL) - mprog_list = mprog_list->next; - else - prev->next = curr->next; + UNLINK(curr, mprog_first, mprog_last, next, prev); free_mpcode(curr); } save_area(ad); diff -ur src/olc_race.c new/olc_race.c --- src/olc_race.c Sat Jan 11 16:24:00 2003 +++ new/olc_race.c Fri Jan 24 02:15:43 2003 @@ -465,7 +465,7 @@ } } - for (rch = char_list; rch != NULL; rch = rch->next) + for (rch = char_first; rch != NULL; rch = rch->next) { if (rch->race == c) { diff -ur src/olc_save.c new/olc_save.c --- src/olc_save.c Sat Jan 11 16:24:00 2003 +++ new/olc_save.c Fri Jan 24 02:15:43 2003 @@ -99,8 +99,6 @@ { FILE *fp; AREA_DATA *pArea; - extern HELP_AREA *had_list; - HELP_AREA *ha; if ((fp = file_open("area.lst", "w")) == NULL) { @@ -109,13 +107,7 @@ } else { - /* - * Add any help files that need to be loaded at - * startup to this section. - */ - for (ha = had_list; ha; ha = ha->next) - if (ha->area == NULL) - fprintf(fp, "%s\n", ha->filename); + fprintf(fp, "%s\n", HELP_FILE); for (pArea = area_first; pArea; pArea = pArea->next) { @@ -136,24 +128,23 @@ { static int cnt; static char buf[NBUF][NBITS + 1]; - int count, pos = 0; + flag_t count = 0, temp = 1; cnt = (cnt + 1) % NBUF; - for (count = 0; count < NBITS; count++) - if (IS_SET(flags, (flag_t) 1 << count)) - { - if (count < 26) - buf[cnt][pos] = 'A' + count; - else - buf[cnt][pos] = 'a' + (count - 26); - pos++; - } + buf[cnt][0] = '+'; - if (pos == 0) - buf[cnt][pos++] = '0'; + do + { + if (IS_SET(flags, (temp << count))) + buf[cnt][count + 1] = 'Y'; + else + buf[cnt][count + 1] = 'n'; + count++; + } + while ((temp << count) <= flags && count < 64); - buf[cnt][pos] = '\0'; + buf[cnt][count + 1] = '\0'; return buf[cnt]; } @@ -248,7 +239,7 @@ if ((temp = DIF(race_table[race].parts, pMobIndex->parts))) fprintf(fp, "F par %s\n", fwrite_flags(temp)); - for (pMprog = pMobIndex->mprogs; pMprog; pMprog = pMprog->next) + for (pMprog = pMobIndex->first_mprog; pMprog; pMprog = pMprog->next) { fprintf(fp, "M %s %ld %s~\n", mprog_type_to_name(pMprog->trig_type), pMprog->vnum, @@ -386,7 +377,7 @@ fprintf(fp, "%c\n", letter); - for (pAf = pObjIndex->affected; pAf; pAf = pAf->next) + for (pAf = pObjIndex->first_affect; pAf; pAf = pAf->next) { if (pAf->where == TO_OBJECT || pAf->bitvector == 0) fprintf(fp, "A\n%d %d\n", pAf->location, pAf->modifier); @@ -418,7 +409,7 @@ } } - for (pEd = pObjIndex->extra_descr; pEd; pEd = pEd->next) + for (pEd = pObjIndex->first_extra_descr; pEd; pEd = pEd->next) { fprintf(fp, "E\n%s~\n%s~\n", pEd->keyword, fix_string(pEd->description)); @@ -478,7 +469,7 @@ fprintf(fp, "%s ", fwrite_flags(pRoomIndex->room_flags)); fprintf(fp, "%d\n", pRoomIndex->sector_type); - for (pEd = pRoomIndex->extra_descr; pEd; pEd = pEd->next) + for (pEd = pRoomIndex->first_extra_descr; pEd; pEd = pEd->next) { fprintf(fp, "E\n%s~\n%s~\n", pEd->keyword, fix_string(pEd->description)); @@ -880,51 +871,26 @@ return; } -void save_helps(FILE * fp, HELP_AREA * ha) +void save_helps(void) { - HELP_DATA *help = ha->first; - - fprintf(fp, "#HELPS\n"); + HELP_DATA *help; + FILE *fp; - for (; help; help = help->next_area) + if ((fp = file_open(HELP_FILE, "w")) != NULL) { - fprintf(fp, "%d %s~\n", help->level, help->keyword); - fprintf(fp, "%s~\n\n", fix_string(help->text)); - } + fprintf(fp, "#HELPS\n"); - fprintf(fp, "-1 $~\n\n"); - - ha->changed = FALSE; - - return; -} - -void save_other_helps(CHAR_DATA * ch) -{ - extern HELP_AREA *had_list; - HELP_AREA *ha; - FILE *fp; - - for (ha = had_list; ha; ha = ha->next) - if (ha->changed == TRUE) + for (help = help_first; help; help = help->next) { - fp = file_open(ha->filename, "w"); - - if (!fp) - { - perror(ha->filename); - return; - } - - save_helps(fp, ha); - - if (ch) - chprintf(ch, "%s\n\r", ha->filename); - - fprintf(fp, "#$\n"); - file_close(fp); + fprintf(fp, "%d %s~\n", help->level, help->keyword); + fprintf(fp, "%s~\n\n", fix_string(help->text)); } + fprintf(fp, "-1 $~\n\n"); + fprintf(fp, "#$\n"); + } + else + bug("Error opening " HELP_FILE ".", 0); return; } @@ -960,9 +926,6 @@ save_shops(fp, pArea); save_mobprogs(fp, pArea); - if (pArea->helps && pArea->helps->first) - save_helps(fp, pArea->helps); - fprintf(fp, "#$\n"); file_close(fp); @@ -1020,6 +983,7 @@ chprintln(ch, " asave races - saves race data"); chprintln(ch, " asave classes - saves class data"); chprintln(ch, " asave socials - saves social data"); + chprintln(ch, " asave helps - saves the help file"); chprintln(ch, ""); } @@ -1069,7 +1033,7 @@ if (ch) chprintln(ch, "You saved the world."); - save_other_helps(NULL); + save_helps(); return; } @@ -1111,8 +1075,6 @@ } } - save_other_helps(ch); - if (!str_cmp(buf, "None.\n\r")) { if (ch) @@ -1144,6 +1106,15 @@ chprintln(ch, "Socials saved."); return; } + + if (!str_cmp(arg1, "helps")) + { + save_area_list(); + save_helps(); + chprintln(ch, "Helps saved."); + return; + } + if (!str_cmp(arg1, "commands")) { save_commands(); @@ -1209,10 +1180,6 @@ case ED_MOBILE: pArea = ((MOB_INDEX_DATA *) ch->desc->pEdit)->area; break; - case ED_HELP: - chprint(ch, "Grabando area : "); - save_other_helps(ch); - return; default: pArea = ch->in_room->area; break; diff -ur src/olc_social.c new/olc_social.c --- src/olc_social.c Sat Jan 11 16:24:00 2003 +++ new/olc_social.c Fri Jan 24 02:15:43 2003 @@ -43,10 +43,6 @@ #include "db.h" #include "olc.h" -int maxSocial; - -struct social_type *social_table; /* and social table */ - #define SEDIT( fun ) bool fun( CHAR_DATA *ch, const char *argument ) /* Find a social based on name */ diff -ur src/proto.h new/proto.h --- src/proto.h Sat Jan 11 16:24:00 2003 +++ new/proto.h Fri Jan 24 02:15:43 2003 @@ -275,9 +275,6 @@ bool is_full_name args((const char *str, const char *namelist)); CHAR_DATA *get_char_id args((long id)); -/* hedit.c */ -HELP_AREA *get_help_area args((HELP_DATA * help)); - /* interp.c */ void interpret args((CHAR_DATA * ch, const char *argument)); bool is_number args((const char *arg)); diff -ur src/quest.c new/quest.c --- src/quest.c Sat Jan 11 16:24:00 2003 +++ new/quest.c Fri Jan 24 02:15:43 2003 @@ -139,7 +139,7 @@ bool found; found = FALSE; - for (paf_old = obj->affected; paf_old != NULL; paf_old = paf_old->next) + for (paf_old = obj->first_affect; paf_old != NULL; paf_old = paf_old->next) { if (paf_old->location == paf->location && paf_old->type == paf->type && @@ -272,25 +272,25 @@ OBJ_DATA *obj; AFFECT_DATA *o_paf; - for (obj = ch->carrying; obj != NULL; obj = obj->next_content) + for (obj = ch->first_carrying; obj != NULL; obj = obj->next_content) { if (IS_OBJ_STAT(obj, ITEM_QUEST)) { update_questobjs(ch, obj); - for (o_paf = obj->pIndexData->affected; o_paf != NULL; + for (o_paf = obj->pIndexData->first_affect; o_paf != NULL; o_paf = o_paf->next) affect_join_obj(obj, o_paf); - for (o_paf = obj->affected; o_paf != NULL; o_paf = o_paf->next) + for (o_paf = obj->first_affect; o_paf != NULL; o_paf = o_paf->next) affect_check(ch, o_paf->where, o_paf->bitvector); } else { - for (o_paf = obj->affected; o_paf != NULL; o_paf = o_paf->next) + for (o_paf = obj->first_affect; o_paf != NULL; o_paf = o_paf->next) affect_check(ch, o_paf->where, o_paf->bitvector); if (!obj->enchanted) { - for (o_paf = obj->pIndexData->affected; + for (o_paf = obj->pIndexData->first_affect; o_paf != NULL; o_paf = o_paf->next) affect_check(ch, o_paf->where, o_paf->bitvector); } @@ -312,7 +312,7 @@ OBJ_DATA *obj = NULL; ROOM_INDEX_DATA *pRoom = NULL; - for (obj = object_list; obj != NULL; obj = obj->next) + for (obj = object_first; obj != NULL; obj = obj->next) if (obj->pIndexData->vnum == ch->pcdata->questobj && is_name(ch->name, obj->owner)) found = TRUE; @@ -340,7 +340,7 @@ { CHAR_DATA *mob; - for (mob = char_list; mob != NULL; mob = mob->next) + for (mob = char_first; mob != NULL; mob = mob->next) if (IS_NPC(mob) && mob->pIndexData->vnum == ch->pcdata->questmob) break; @@ -419,7 +419,7 @@ if ((pObj = get_obj_index(ch->pcdata->questobj)) == NULL) return NULL; - for (obj = ch->carrying; obj != NULL; obj = obj->next_content) + for (obj = ch->first_carrying; obj != NULL; obj = obj->next_content) if (obj != NULL && obj->pIndexData == pObj) return obj; @@ -497,7 +497,7 @@ } else if (ch->pcdata->questobj > 0) { - for (qinfoobj = object_list; qinfoobj != NULL; + for (qinfoobj = object_first; qinfoobj != NULL; qinfoobj = qinfoobj->next) { if (qinfoobj->pIndexData->vnum == ch->pcdata->questobj) @@ -524,7 +524,7 @@ } else if (ch->pcdata->questmob > 0) { - for (qinfomob = char_list; qinfomob != NULL; + for (qinfomob = char_first; qinfomob != NULL; qinfomob = qinfomob->next) { if (IS_NPC(qinfomob) @@ -597,7 +597,7 @@ * an ACT_QUESTMASTER flag instead of a special procedure. */ - for (questman = ch->in_room->people; questman != NULL; + for (questman = ch->in_room->first_person; questman != NULL; questman = questman->next_in_room) { if (!IS_NPC(questman)) @@ -965,7 +965,7 @@ alloc_mem(mobs, CHAR_DATA *, MAX_QMOB_COUNT); mob_count = 0; - for (victim = char_list; victim; victim = victim->next) + for (victim = char_first; victim; victim = victim->next) { if (!IS_NPC(victim) @@ -1185,7 +1185,7 @@ DESCRIPTOR_DATA *d; CHAR_DATA *ch; - for (d = descriptor_list; d != NULL; d = d->next) + for (d = descriptor_first; d != NULL; d = d->next) { if (d->connected == CON_PLAYING && (ch = d->original ? d->original : d->character) != NULL) @@ -1286,7 +1286,7 @@ OBJ_DATA *c; int count = 0; - for (c = object_list; c != NULL; c = c->next) + for (c = object_first; c != NULL; c = c->next) { if (is_name(ch->name, c->owner) && c->item_type == ITEM_CORPSE_PC) @@ -1361,7 +1361,7 @@ return; } } - for (triviamob = ch->in_room->people; triviamob != NULL; + for (triviamob = ch->in_room->first_person; triviamob != NULL; triviamob = triviamob->next_in_room) { if (!IS_NPC(triviamob)) diff -ur src/recycle.c new/recycle.c --- src/recycle.c Sat Jan 11 16:24:00 2003 +++ new/recycle.c Fri Jan 24 02:15:43 2003 @@ -45,13 +45,7 @@ static BAN_DATA ban_zero; BAN_DATA *ban; - if (ban_free == NULL) - alloc_mem(ban, BAN_DATA, 1); - else - { - ban = ban_free; - ban_free = ban_free->next; - } + GET_FREE(ban, BAN_DATA, next, ban_free); *ban = ban_zero; VALIDATE(ban); @@ -67,25 +61,17 @@ free_string(ban->name); INVALIDATE(ban); - ban->next = ban_free; - ban_free = ban; + PUT_FREE(ban, next, ban_free); } /* stuff for recycling descriptors */ -DESCRIPTOR_DATA *descriptor_free; DESCRIPTOR_DATA *new_descriptor(void) { static DESCRIPTOR_DATA d_zero; DESCRIPTOR_DATA *d; - if (descriptor_free == NULL) - alloc_mem(d, DESCRIPTOR_DATA, 1); - else - { - d = descriptor_free; - descriptor_free = descriptor_free->next; - } + GET_FREE(d, DESCRIPTOR_DATA, next, descriptor_free); *d = d_zero; VALIDATE(d); @@ -107,8 +93,7 @@ free_string(d->host); free_mem(d->outbuf); INVALIDATE(d); - d->next = descriptor_free; - descriptor_free = d; + PUT_FREE(d, next, descriptor_free); } /* stuff for recycling gen_data */ @@ -119,13 +104,8 @@ static GEN_DATA gen_zero; GEN_DATA *gen; - if (gen_data_free == NULL) - alloc_mem(gen, GEN_DATA, 1); - else - { - gen = gen_data_free; - gen_data_free = gen_data_free->next; - } + GET_FREE(gen, GEN_DATA, next, gen_data_free); + *gen = gen_zero; VALIDATE(gen); alloc_mem(gen->skill_chosen, bool, maxSkill); @@ -141,8 +121,8 @@ INVALIDATE(gen); free_mem(gen->skill_chosen); free_mem(gen->group_chosen); - gen->next = gen_data_free; - gen_data_free = gen; + + PUT_FREE(gen, next, gen_data_free); } /* stuff for recycling extended descs */ @@ -152,13 +132,7 @@ { EXTRA_DESCR_DATA *ed; - if (extra_descr_free == NULL) - alloc_mem(ed, EXTRA_DESCR_DATA, 1); - else - { - ed = extra_descr_free; - extra_descr_free = extra_descr_free->next; - } + GET_FREE(ed, EXTRA_DESCR_DATA, next, extra_descr_free); ed->keyword = &str_empty[0]; ed->description = &str_empty[0]; @@ -175,25 +149,17 @@ free_string(ed->description); INVALIDATE(ed); - ed->next = extra_descr_free; - extra_descr_free = ed; + PUT_FREE(ed, next, extra_descr_free); } /* stuff for recycling affects */ -AFFECT_DATA *affect_free; AFFECT_DATA *new_affect(void) { static AFFECT_DATA af_zero; AFFECT_DATA *af; - if (affect_free == NULL) - alloc_mem(af, AFFECT_DATA, 1); - else - { - af = affect_free; - affect_free = affect_free->next; - } + GET_FREE(af, AFFECT_DATA, next, affect_free); *af = af_zero; @@ -207,25 +173,19 @@ return; INVALIDATE(af); - af->next = affect_free; - affect_free = af; + + PUT_FREE(af, next, affect_free); } /* stuff for recycling objects */ -OBJ_DATA *obj_free; OBJ_DATA *new_obj(void) { static OBJ_DATA obj_zero; OBJ_DATA *obj; - if (obj_free == NULL) - alloc_mem(obj, OBJ_DATA, 1); - else - { - obj = obj_free; - obj_free = obj_free->next; - } + GET_FREE(obj, OBJ_DATA, next, obj_free); + *obj = obj_zero; VALIDATE(obj); @@ -240,19 +200,19 @@ if (!IS_VALID(obj)) return; - for (paf = obj->affected; paf != NULL; paf = paf_next) + for (paf = obj->first_affect; paf != NULL; paf = paf_next) { paf_next = paf->next; free_affect(paf); } - obj->affected = NULL; + obj->first_affect = NULL; - for (ed = obj->extra_descr; ed != NULL; ed = ed_next) + for (ed = obj->first_extra_descr; ed != NULL; ed = ed_next) { ed_next = ed->next; free_extra_descr(ed); } - obj->extra_descr = NULL; + obj->first_extra_descr = NULL; free_string(obj->name); free_string(obj->description); @@ -260,12 +220,10 @@ free_string(obj->owner); INVALIDATE(obj); - obj->next = obj_free; - obj_free = obj; + PUT_FREE(obj, next, obj_free); } /* stuff for recyling characters */ -CHAR_DATA *char_free; CHAR_DATA *new_char(void) { @@ -273,13 +231,7 @@ CHAR_DATA *ch; int i; - if (char_free == NULL) - alloc_mem(ch, CHAR_DATA, 1); - else - { - ch = char_free; - char_free = char_free->next; - } + GET_FREE(ch, CHAR_DATA, next, char_free); *ch = ch_zero; VALIDATE(ch); @@ -323,13 +275,13 @@ if (IS_NPC(ch)) mobile_count--; - for (obj = ch->carrying; obj != NULL; obj = obj_next) + for (obj = ch->first_carrying; obj != NULL; obj = obj_next) { obj_next = obj->next_content; extract_obj(obj); } - for (paf = ch->affected; paf != NULL; paf = paf_next) + for (paf = ch->first_affect; paf != NULL; paf = paf_next) { paf_next = paf->next; affect_remove(ch, paf); @@ -343,15 +295,12 @@ free_string(ch->prefix); free_pcdata(ch->pcdata); - ch->next = char_free; - char_free = ch; + PUT_FREE(ch, next, char_free); INVALIDATE(ch); return; } -PC_DATA *pcdata_free; - PC_DATA *new_pcdata(void) { int alias; @@ -359,13 +308,7 @@ static PC_DATA pcdata_zero; PC_DATA *pcdata; - if (pcdata_free == NULL) - alloc_mem(pcdata, PC_DATA, 1); - else - { - pcdata = pcdata_free; - pcdata_free = pcdata_free->next; - } + GET_FREE(pcdata, PC_DATA, next, pcdata_free); *pcdata = pcdata_zero; @@ -403,8 +346,8 @@ free_string(pcdata->alias_sub[alias]); } INVALIDATE(pcdata); - pcdata->next = pcdata_free; - pcdata_free = pcdata; + + PUT_FREE(pcdata, next, pcdata_free); return; } @@ -438,13 +381,7 @@ { MEM_DATA *memory; - if (mem_data_free == NULL) - alloc_mem(memory, MEM_DATA, 1); - else - { - memory = mem_data_free; - mem_data_free = mem_data_free->next; - } + GET_FREE(memory, MEM_DATA, next, mem_data_free); memory->next = NULL; memory->id = 0; @@ -460,9 +397,8 @@ if (!IS_VALID(memory)) return; - memory->next = mem_data_free; - mem_data_free = memory; INVALIDATE(memory); + PUT_FREE(memory, next, mem_data_free); } /* buffer sizes */ @@ -489,13 +425,7 @@ { BUFFER *buffer; - if (buf_free == NULL) - alloc_mem(buffer, BUFFER, 1); - else - { - buffer = buf_free; - buf_free = buf_free->next; - } + GET_FREE(buffer, BUFFER, next, buf_free); buffer->next = NULL; buffer->state = BUFFER_SAFE; @@ -512,13 +442,7 @@ { BUFFER *buffer; - if (buf_free == NULL) - alloc_mem(buffer, BUFFER, 1); - else - { - buffer = buf_free; - buf_free = buf_free->next; - } + GET_FREE(buffer, BUFFER, next, buf_free); buffer->next = NULL; buffer->state = BUFFER_SAFE; @@ -546,8 +470,7 @@ buffer->state = BUFFER_FREED; INVALIDATE(buffer); - buffer->next = buf_free; - buf_free = buffer; + PUT_FREE(buffer, next, buf_free); } bool add_buf(BUFFER * buffer, const char *string) @@ -609,13 +532,7 @@ static MPROG_LIST mp_zero; MPROG_LIST *mp; - if (mprog_free == NULL) - alloc_mem(mp, MPROG_LIST, 1); - else - { - mp = mprog_free; - mprog_free = mprog_free->next; - } + GET_FREE(mp, MPROG_LIST, next, mprog_free); *mp = mp_zero; mp->vnum = 0; @@ -631,28 +548,8 @@ return; INVALIDATE(mp); - mp->next = mprog_free; - mprog_free = mp; -} - -HELP_AREA *had_free; - -HELP_AREA *new_had(void) -{ - HELP_AREA *had; - static HELP_AREA zHad; - - if (had_free) - { - had = had_free; - had_free = had_free->next; - } - else - alloc_mem(had, HELP_AREA, 1); - *had = zHad; - - return had; + PUT_FREE(mp, next, mprog_free); } HELP_DATA *help_free; @@ -661,13 +558,10 @@ { HELP_DATA *help; - if (help_free) - { - help = help_free; - help_free = help_free->next; - } - else - alloc_mem(help, HELP_DATA, 1); + GET_FREE(help, HELP_DATA, next, help_free); + + help->keyword = &str_empty[0]; + help->text = &str_empty[0]; return help; } @@ -676,8 +570,8 @@ { free_string(help->keyword); free_string(help->text); - help->next = help_free; - help_free = help; + + PUT_FREE(help, next, help_free); } /* @@ -690,13 +584,7 @@ static STAT_DATA stat_zero; STAT_DATA *stat; - if (stat_free == NULL) - alloc_mem(stat, STAT_DATA, 1); - else - { - stat = stat_free; - stat_free = stat_free->next; - } + GET_FREE(stat, STAT_DATA, next, stat_free); *stat = stat_zero; VALIDATE(stat); @@ -712,8 +600,7 @@ free_string(stat->name); INVALIDATE(stat); - stat->next = stat_free; - stat_free = stat; + PUT_FREE(stat, next, stat_free); } CORPSE_DATA *corpse_free; @@ -723,13 +610,7 @@ static CORPSE_DATA corpse_zero; CORPSE_DATA *corpse; - if (corpse_free == NULL) - alloc_mem(corpse, CORPSE_DATA, 1); - else - { - corpse = corpse_free; - corpse_free = corpse_free->next; - } + GET_FREE(corpse, CORPSE_DATA, next, corpse_free); *corpse = corpse_zero; @@ -746,8 +627,8 @@ if (corpse->corpse != NULL) free_obj(corpse->corpse); - corpse->next = corpse_free; - corpse_free = corpse; + PUT_FREE(corpse, next, corpse_free); + return; } @@ -758,13 +639,7 @@ static AUCTION_DATA auc_zero; AUCTION_DATA *auction; - if (auction_free == NULL) - alloc_mem(auction, AUCTION_DATA, 1); - else - { - auction = auction_free; - auction_free = auction_free->next; - } + GET_FREE(auction, AUCTION_DATA, next, auction_free); *auction = auc_zero; VALIDATE(auction); @@ -782,6 +657,5 @@ INVALIDATE(auction); - auction->next = auction_free; - auction_free = auction; + PUT_FREE(auction, next, auction_free); } diff -ur src/recycle.h new/recycle.h --- src/recycle.h Sat Jan 11 16:24:00 2003 +++ new/recycle.h Fri Jan 24 02:15:43 2003 @@ -35,6 +35,25 @@ int get_size(int val); +#define GET_FREE(point, type, pnext, freelist) \ +do { \ + if ( freelist != NULL ) \ + { \ + point = freelist; \ + freelist = freelist->pnext; \ + } \ + else \ + { \ + alloc_mem(point, type, 1); \ + }\ + memset(point, 0, sizeof(*point)); \ +} while(0) + +#define PUT_FREE(point, next, freelist) \ +do { \ + LINK_SINGLE(point, next, freelist); \ +} while(0) + /* stuff for providing a crash-proof buffer */ #define MAX_BUF 16384 @@ -109,7 +128,6 @@ void clear_buf args((BUFFER * buffer)); char *buf_string args((BUFFER * buffer)); -HELP_AREA *new_had args((void)); HELP_DATA *new_help args((void)); void free_help args((HELP_DATA *)); diff -ur src/save.c new/save.c --- src/save.c Sat Jan 11 16:24:00 2003 +++ new/save.c Fri Jan 24 02:15:43 2003 @@ -100,8 +100,8 @@ else { fwrite_char(ch, fp); - if (ch->carrying != NULL) - fwrite_obj(ch, ch->carrying, fp, 0); + if (ch->first_carrying != NULL) + fwrite_obj(ch, ch->first_carrying, fp, 0); /* save the pets */ if (ch->pet != NULL && ch->pet->in_room == ch->in_room) fwrite_pet(ch->pet, fp); @@ -322,7 +322,7 @@ } } - for (paf = ch->affected; paf != NULL; paf = paf->next) + for (paf = ch->first_affect; paf != NULL; paf = paf->next) { if (paf->type < 0 || paf->type >= maxSkill) continue; @@ -394,7 +394,7 @@ pet->mod_stat[STAT_INT], pet->mod_stat[STAT_WIS], pet->mod_stat[STAT_DEX], pet->mod_stat[STAT_CON]); - for (paf = pet->affected; paf != NULL; paf = paf->next) + for (paf = pet->first_affect; paf != NULL; paf = paf->next) { if (paf->type < 0 || paf->type >= maxSkill) continue; @@ -521,7 +521,7 @@ break; } - for (paf = obj->affected; paf != NULL; paf = paf->next) + for (paf = obj->first_affect; paf != NULL; paf = paf->next) { if (paf->type < 0 || paf->type >= maxSkill) continue; @@ -531,15 +531,15 @@ fwrite_flags(paf->bitvector)); } - for (ed = obj->extra_descr; ed != NULL; ed = ed->next) + for (ed = obj->first_extra_descr; ed != NULL; ed = ed->next) { fprintf(fp, "ExDe %s~ %s~\n", ed->keyword, ed->description); } fprintf(fp, "End\n\n"); - if (obj->contains != NULL) - fwrite_obj(ch, obj->contains, fp, iNest + 1); + if (obj->first_content != NULL) + fwrite_obj(ch, obj->first_content, fp, iNest + 1); return; } @@ -831,8 +831,7 @@ paf->modifier = fread_number(fp); paf->location = fread_number(fp); paf->bitvector = fread_number(fp); - paf->next = ch->affected; - ch->affected = paf; + LINK(paf, ch->first_affect, ch->last_affect, next, prev); fMatch = TRUE; break; } @@ -856,8 +855,7 @@ paf->modifier = fread_number(fp); paf->location = fread_number(fp); paf->bitvector = fread_flag(fp); - paf->next = ch->affected; - ch->affected = paf; + LINK(paf, ch->first_affect, ch->last_affect, next, prev); fMatch = TRUE; break; } @@ -1342,8 +1340,7 @@ paf->modifier = fread_number(fp); paf->location = fread_number(fp); paf->bitvector = fread_number(fp); - paf->next = pet->affected; - pet->affected = paf; + LINK(paf, pet->first_affect, pet->last_affect, next, prev); fMatch = TRUE; break; } @@ -1367,8 +1364,7 @@ paf->modifier = fread_number(fp); paf->location = fread_number(fp); paf->bitvector = fread_flag(fp); - paf->next = pet->affected; - pet->affected = paf; + LINK(paf, pet->first_affect, pet->last_affect, next, prev); fMatch = TRUE; break; } @@ -1582,8 +1578,7 @@ paf->modifier = fread_number(fp); paf->location = fread_number(fp); paf->bitvector = fread_number(fp); - paf->next = obj->affected; - obj->affected = paf; + LINK(paf, obj->first_affect, obj->last_affect, next, prev); fMatch = TRUE; break; } @@ -1606,8 +1601,7 @@ paf->modifier = fread_number(fp); paf->location = fread_number(fp); paf->bitvector = fread_flag(fp); - paf->next = obj->affected; - obj->affected = paf; + LINK(paf, obj->first_affect, obj->last_affect, next, prev); fMatch = TRUE; break; } @@ -1643,8 +1637,8 @@ ed->keyword = fread_string(fp); ed->description = fread_string(fp); - ed->next = obj->extra_descr; - obj->extra_descr = ed; + LINK(ed, obj->first_extra_descr, obj->last_extra_descr, next, + prev); fMatch = TRUE; } @@ -1666,8 +1660,7 @@ if (!new_format) { - obj->next = object_list; - object_list = obj; + LINK(obj, object_first, object_last, next, prev); obj->pIndexData->count++; } @@ -1696,8 +1689,7 @@ c = new_corpse(); c->corpse = obj; - c->next = corpse_list; - corpse_list = c; + LINK(c, corpse_first, corpse_last, next, prev); if ((Room = get_room_index(where)) == NULL) Room = get_room_index(ROOM_VNUM_MORGUE); obj_to_room(obj, Room); @@ -1843,7 +1835,8 @@ } } -CORPSE_DATA *corpse_list; +CORPSE_DATA *corpse_first; +CORPSE_DATA *corpse_last; void save_corpses(void) { @@ -1856,7 +1849,7 @@ } else { - for (c = corpse_list; c != NULL; c = c->next) + for (c = corpse_first; c != NULL; c = c->next) { if (c->corpse->item_type == ITEM_CORPSE_PC) fwrite_obj(NULL, c->corpse, fp, 0); @@ -1923,44 +1916,23 @@ { CORPSE_DATA *c; - for (c = corpse_list; c != NULL; c = c->next) + for (c = corpse_first; c != NULL; c = c->next) if (c->corpse == obj) break; if (c != NULL) { - if (c == corpse_list) - { - corpse_list = c->next; - } - else - { - CORPSE_DATA *aux; - - for (aux = corpse_list; aux != NULL; aux = aux->next) - { - if (aux->next == c) - { - aux->next = c->next; - break; - } - - if (aux == NULL) - { - bug("update_corpses: corpse not found.", 0); - return; - } - } - } if (pdelete) + { + UNLINK(c, corpse_first, corpse_last, next, prev); free_corpse(c); + } save_corpses(); } - else if (obj->contains != NULL && obj->in_room != NULL) + else if (obj->first_content != NULL && obj->in_room != NULL) { c = new_corpse(); c->corpse = obj; - c->next = corpse_list; - corpse_list = c; + LINK(c, corpse_first, corpse_last, next, prev); save_corpses(); } } @@ -1976,7 +1948,7 @@ if (!ch || IS_NPC(ch)) return; - for (c = corpse_list; c != NULL; c = c->next) + for (c = corpse_first; c != NULL; c = c->next) { if (c->corpse && is_name(ch->name, c->corpse->owner)) { diff -ur src/scan.c new/scan.c --- src/scan.c Sat Jan 11 16:24:00 2003 +++ new/scan.c Fri Jan 24 02:15:43 2003 @@ -105,7 +105,7 @@ if (scan_room == NULL) return; - for (rch = scan_room->people; rch != NULL; rch = rch->next_in_room) + for (rch = scan_room->first_person; rch != NULL; rch = rch->next_in_room) { if (rch == ch) continue; diff -ur src/skills.c new/skills.c --- src/skills.c Sat Jan 11 16:24:00 2003 +++ new/skills.c Fri Jan 24 02:15:43 2003 @@ -50,7 +50,7 @@ return; /* find a trainer */ - for (trainer = ch->in_room->people; trainer != NULL; + for (trainer = ch->in_room->first_person; trainer != NULL; trainer = trainer->next_in_room) if (IS_NPC(trainer) && IS_SET(trainer->act, ACT_GAIN)) break; diff -ur src/special.c new/special.c --- src/special.c Sat Jan 11 16:24:00 2003 +++ new/special.c Fri Jan 24 02:15:43 2003 @@ -139,7 +139,7 @@ return FALSE; /* find an ogre to beat up */ - for (vch = ch->in_room->people; vch != NULL; vch = vch->next_in_room) + for (vch = ch->in_room->first_person; vch != NULL; vch = vch->next_in_room) { if (!IS_NPC(vch) || ch == vch) continue; @@ -208,7 +208,7 @@ return FALSE; /* find an troll to beat up */ - for (vch = ch->in_room->people; vch != NULL; vch = vch->next_in_room) + for (vch = ch->in_room->first_person; vch != NULL; vch = vch->next_in_room) { if (!IS_NPC(vch) || ch == vch) continue; @@ -277,7 +277,7 @@ return FALSE; /* look for a fight in the room */ - for (vch = ch->in_room->people; vch != NULL; vch = vch->next_in_room) + for (vch = ch->in_room->first_person; vch != NULL; vch = vch->next_in_room) { if (vch == ch) continue; @@ -302,7 +302,7 @@ act("You blow down hard on $p.", ch, obj, NULL, TO_CHAR); act("$n blows on $p, ***WHEEEEEEEEEEEET***", ch, obj, NULL, TO_ROOM); - for (vch = char_list; vch != NULL; vch = vch->next) + for (vch = char_first; vch != NULL; vch = vch->next) { if (vch->in_room == NULL) continue; @@ -361,7 +361,8 @@ if (ch->position != POS_FIGHTING) { - for (victim = ch->in_room->people; victim != NULL; victim = v_next) + for (victim = ch->in_room->first_person; victim != NULL; + victim = v_next) { v_next = victim->next_in_room; if (!IS_NPC(victim) && (victim->level > ch->level) && @@ -420,7 +421,7 @@ if (ch->position != POS_FIGHTING) return FALSE; - for (victim = ch->in_room->people; victim != NULL; victim = v_next) + for (victim = ch->in_room->first_person; victim != NULL; victim = v_next) { v_next = victim->next_in_room; if (victim->fighting == ch && number_bits(3) == 0) @@ -505,7 +506,7 @@ if (!IS_AWAKE(ch)) return FALSE; - for (victim = ch->in_room->people; victim != NULL; victim = v_next) + for (victim = ch->in_room->first_person; victim != NULL; victim = v_next) { v_next = victim->next_in_room; if (victim != ch && can_see(ch, victim) && number_bits(1) == 0 @@ -574,7 +575,7 @@ if (ch->position != POS_FIGHTING) return FALSE; - for (victim = ch->in_room->people; victim != NULL; victim = v_next) + for (victim = ch->in_room->first_person; victim != NULL; victim = v_next) { v_next = victim->next_in_room; if (victim->fighting == ch && number_bits(2) == 0) @@ -658,7 +659,7 @@ if (ch->position != POS_FIGHTING) return FALSE; - for (victim = ch->in_room->people; victim != NULL; victim = v_next) + for (victim = ch->in_room->first_person; victim != NULL; victim = v_next) { v_next = victim->next_in_room; if (victim->fighting == ch && number_bits(2) == 0) @@ -685,7 +686,7 @@ if (ch->position != POS_FIGHTING) return FALSE; - for (victim = ch->in_room->people; victim != NULL; victim = v_next) + for (victim = ch->in_room->first_person; victim != NULL; victim = v_next) { v_next = victim->next_in_room; if (victim->fighting == ch && number_bits(2) == 0) @@ -765,7 +766,7 @@ if (ch->position != POS_FIGHTING) return FALSE; - for (victim = ch->in_room->people; victim != NULL; victim = v_next) + for (victim = ch->in_room->first_person; victim != NULL; victim = v_next) { v_next = victim->next_in_room; if (victim->fighting == ch && number_bits(2) == 0) @@ -844,7 +845,7 @@ return FALSE; crime = ""; - for (victim = ch->in_room->people; victim != NULL; victim = v_next) + for (victim = ch->in_room->first_person; victim != NULL; victim = v_next) { v_next = victim->next_in_room; @@ -884,14 +885,14 @@ if (!IS_AWAKE(ch)) return FALSE; - for (corpse = ch->in_room->contents; corpse != NULL; corpse = c_next) + for (corpse = ch->in_room->first_content; corpse != NULL; corpse = c_next) { c_next = corpse->next_content; if (corpse->item_type != ITEM_CORPSE_NPC) continue; act("$n savagely devours a corpse.", ch, NULL, NULL, TO_ROOM); - for (obj = corpse->contains; obj; obj = obj_next) + for (obj = corpse->first_content; obj; obj = obj_next) { obj_next = obj->next_content; obj_from_obj(obj); @@ -920,7 +921,7 @@ ech = NULL; crime = ""; - for (victim = ch->in_room->people; victim != NULL; victim = v_next) + for (victim = ch->in_room->first_person; victim != NULL; victim = v_next) { v_next = victim->next_in_room; @@ -975,7 +976,7 @@ if (!IS_AWAKE(ch)) return FALSE; - for (trash = ch->in_room->contents; trash != NULL; trash = trash_next) + for (trash = ch->in_room->first_content; trash != NULL; trash = trash_next) { trash_next = trash->next_content; if (!IS_SET(trash->wear_flags, ITEM_TAKE) || !can_loot(ch, trash)) @@ -1117,7 +1118,7 @@ if (ch->position != POS_STANDING) return FALSE; - for (victim = ch->in_room->people; victim != NULL; victim = v_next) + for (victim = ch->in_room->first_person; victim != NULL; victim = v_next) { v_next = victim->next_in_room; diff -ur src/statlist.c new/statlist.c --- src/statlist.c Sat Jan 11 16:24:00 2003 +++ new/statlist.c Fri Jan 24 02:15:43 2003 @@ -36,8 +36,6 @@ #include "interp.h" #include "recycle.h" -STAT_DATA *stat_list; - void update_statlist(CHAR_DATA * ch, bool pdelete) { STAT_DATA *prev; @@ -49,15 +47,13 @@ prev = NULL; - for (curr = stat_list; curr != NULL; prev = curr, curr = curr->next) + for (curr = stat_first; curr != NULL; curr = prev) { + prev = curr->next; + if (!str_cmp(ch->name, curr->name)) { - if (prev == NULL) - stat_list = stat_list->next; - else - prev->next = curr->next; - + UNLINK(curr, stat_first, stat_last, next, prev); free_stat_data(curr); save_statlist(); } @@ -72,8 +68,7 @@ for (i = 0; i < MAX_GAMESTAT; i++) curr->gamestat[i] = ch->pcdata->gamestat[i]; - curr->next = stat_list; - stat_list = curr; + LINK(curr, stat_first, stat_last, next, prev); save_statlist(); return; } @@ -104,15 +99,13 @@ STAT_DATA *curr = NULL; bool found = FALSE; - for (curr = stat_list; curr != NULL; prev = curr, curr = curr->next) + for (curr = stat_first; curr != NULL; curr = prev) { + prev = curr->next; + if (!str_cmp(argument, curr->name)) { - if (prev == NULL) - stat_list = stat_list->next; - else - prev->next = curr->next; - + UNLINK(curr, stat_first, stat_last, next, prev); free_stat_data(curr); save_statlist(); found = TRUE; @@ -155,7 +148,7 @@ STAT_DATA *stat; int i = 0; - for (stat = stat_list; stat != NULL; stat = stat->next) + for (stat = stat_first; stat != NULL; stat = stat->next) i++; return i; @@ -189,7 +182,7 @@ add_buf(output, "\n\r"); loop = 0; loop = 0; - for (curr = stat_list; curr != NULL; curr = curr->next) + for (curr = stat_first; curr != NULL; curr = curr->next) { top[count] = curr; count++; diff -ur src/string.c new/string.c --- src/string.c Sat Jan 11 16:24:00 2003 +++ new/string.c Fri Jan 24 02:15:43 2003 @@ -378,11 +378,11 @@ if (mpc != NULL) for (hash = 0; hash < MAX_KEY_HASH; hash++) for (mob = mob_index_hash[hash]; mob; mob = mob->next) - for (mpl = mob->mprogs; mpl; mpl = mpl->next) + for (mpl = mob->first_mprog; mpl; mpl = mpl->next) if (mpl->vnum == mpc->vnum) { chprintlnf(ch, "Fixing mob %ld.", mob->vnum); - mpl->code = mpc->code; + replace_string(mpl->code, mpc->code); } } ch->desc->pString = NULL; diff -ur src/tables.c new/tables.c --- src/tables.c Sat Jan 11 16:24:00 2003 +++ new/tables.c Fri Jan 24 02:15:43 2003 @@ -515,7 +515,6 @@ * What is seen. */ const struct flag_type wear_loc_strings[] = { - {"in the inventory", WEAR_NONE, TRUE}, {"as a light", WEAR_LIGHT, TRUE}, {"on the left finger", WEAR_FINGER_L, TRUE}, {"on the right finger", WEAR_FINGER_R, TRUE}, @@ -540,7 +539,6 @@ }; const struct flag_type wear_loc_flags[] = { - {"none", WEAR_NONE, TRUE}, {"light", WEAR_LIGHT, TRUE}, {"lfinger", WEAR_FINGER_L, TRUE}, {"rfinger", WEAR_FINGER_R, TRUE}, @@ -917,7 +915,7 @@ {"normal", LOG_NORMAL, TRUE}, {"always", LOG_ALWAYS, TRUE}, {"never", LOG_NEVER, TRUE}, - {NULL, -1, FALSE} + {NULL, 0, FALSE} }; const struct flag_type target_flags[] = { diff -ur src/tables.h new/tables.h --- src/tables.h Sat Jan 11 16:24:00 2003 +++ new/tables.h Fri Jan 24 02:15:43 2003 @@ -82,7 +82,7 @@ struct flag_type { const char *name; - int bit; + flag_t bit; bool settable; }; diff -ur src/tablesave.c new/tablesave.c --- src/tablesave.c Sat Jan 11 16:24:00 2003 +++ new/tablesave.c Fri Jan 24 02:15:43 2003 @@ -390,8 +390,7 @@ (flag_t *) ((int) temp->puntero_field - (int) typebase + (int) puntero); string = fread_string(fp); - if ((*pentero = flag_value(flagtable, string)) == NO_FLAG) - *pentero = 0; + *pentero = flag_value(flagtable, string); free_string(string); found = TRUE, cnt++; break; @@ -402,8 +401,7 @@ (int *) ((int) temp->puntero_field - (int) typebase + (int) puntero); string = fread_string(fp); - if ((*pint = flag_value(flagtable, string)) == NO_FLAG) - *pint = 0; + *pint = flag_value(flagtable, string); free_string(string); found = TRUE, cnt++; break; @@ -1328,7 +1326,7 @@ return; } - for (pstat = stat_list; pstat != NULL; pstat = pstat->next) + for (pstat = stat_first; pstat != NULL; pstat = pstat->next) { fprintf(fp, "#STAT\n"); save_struct(fp, &stat, statsavetable, pstat); @@ -1370,8 +1368,7 @@ pstat = new_stat_data(); load_struct(fp, &stat, statsavetable, pstat); - pstat->next = stat_list; - stat_list = pstat; + LINK(pstat, stat_first, stat_last, next, prev); } file_close(fp); } @@ -1393,7 +1390,7 @@ return; } - for (pban = ban_list; pban != NULL; pban = pban->next) + for (pban = ban_first; pban != NULL; pban = pban->next) { fprintf(fp, "#BAN\n"); save_struct(fp, &ban, bansavetable, pban); @@ -1436,8 +1433,7 @@ pban = new_ban(); load_struct(fp, &ban, bansavetable, pban); - pban->next = ban_list; - ban_list = pban; + LINK(pban, ban_first, ban_last, next, prev); } file_close(fp); } diff -ur src/telnet.c new/telnet.c --- src/telnet.c Sat Jan 11 16:24:00 2003 +++ new/telnet.c Fri Jan 24 02:15:43 2003 @@ -105,6 +105,9 @@ else REMOVE_BIT(ch->comm, COMM_TELNET_EOR); + if (IS_SET(ch->comm, COMM_NOCOLOUR)) + REMOVE_BIT(d->d_flags, DESC_COLOUR); + return; } @@ -130,7 +133,7 @@ #endif /* telnet window size negotiation */ - write_to_descriptor(d, naws_do, strlen(naws_do)); + write_to_descriptor(d, naws_do, 0); return; } @@ -270,7 +273,7 @@ if (IS_SET(d->d_flags, DESC_TELOPT_NAWS)) return; - write_to_descriptor(d, naws_do, strlen(naws_do)); + write_to_descriptor(d, naws_do, 0); return; } @@ -315,7 +318,7 @@ if (buf[i] == (signed char) IAC) { /* Telnet Window Size Negotiation */ - MTELOPT(naws_sb, telopt_naws(d, i, buf), 4); + MTELOPT(naws_sb, telopt_naws(d, i, buf), 6); MTELOPT(naws_will, telopt_naws_do(d), 0); MTELOPT(naws_wont, telopt_ignore(), 0); diff -ur src/update.c new/update.c --- src/update.c Sat Jan 11 16:24:00 2003 +++ new/update.c Fri Jan 24 02:15:43 2003 @@ -394,7 +394,7 @@ int door; /* Examine all mobs. */ - for (ch = char_list; ch != NULL; ch = ch_next) + for (ch = char_first; ch != NULL; ch = ch_next) { ch_next = ch->next; @@ -450,7 +450,7 @@ /* Scavenge */ if (IS_SET(ch->act, ACT_SCAVENGER) && - ch->in_room->contents != NULL && number_bits(6) == 0) + ch->in_room->first_content != NULL && number_bits(6) == 0) { OBJ_DATA *obj; OBJ_DATA *obj_best; @@ -458,7 +458,7 @@ max = 1; obj_best = 0; - for (obj = ch->in_room->contents; obj; obj = obj->next_content) + for (obj = ch->in_room->first_content; obj; obj = obj->next_content) { if (CAN_WEAR(obj, ITEM_TAKE) && can_loot(ch, obj) && obj->cost > max && obj->cost > 0) @@ -623,7 +623,7 @@ if (buf[0] != '\0') { - for (d = descriptor_list; d != NULL; d = d->next) + for (d = descriptor_first; d != NULL; d = d->next) { if (d->connected == CON_PLAYING && IS_OUTSIDE(d->character) && IS_AWAKE(d->character)) @@ -651,7 +651,7 @@ if (save_number > 29) save_number = 0; - for (ch = char_list; ch != NULL; ch = ch_next) + for (ch = char_first; ch != NULL; ch = ch_next) { AFFECT_DATA *paf; AFFECT_DATA *paf_next; @@ -737,7 +737,7 @@ gain_condition(ch, COND_HUNGER, ch->size > SIZE_MEDIUM ? -2 : -1); } - for (paf = ch->affected; paf != NULL; paf = paf_next) + for (paf = ch->first_affect; paf != NULL; paf = paf_next) { paf_next = paf->next; if (paf->duration > 0) @@ -781,7 +781,7 @@ act("$n writhes in agony as plague sores erupt from $s skin.", ch, NULL, NULL, TO_ROOM); chprintln(ch, "You writhe in agony from the plague."); - for (af = ch->affected; af != NULL; af = af->next) + for (af = ch->first_affect; af != NULL; af = af->next) { if (af->type == gsn_plague) break; @@ -804,7 +804,7 @@ plague.modifier = -5; plague.bitvector = AFF_PLAGUE; - for (vch = ch->in_room->people; vch != NULL; + for (vch = ch->in_room->first_person; vch != NULL; vch = vch->next_in_room) { if (!saves_spell @@ -830,7 +830,7 @@ { AFFECT_DATA *poison; - poison = affect_find(ch->affected, gsn_poison); + poison = affect_find(ch->first_affect, gsn_poison); if (poison != NULL) { @@ -855,7 +855,7 @@ * Autosave and autoquit. * Check that these chars still exist. */ - for (ch = char_list; ch != NULL; ch = ch_next) + for (ch = char_first; ch != NULL; ch = ch_next) { ch_next = ch->next; @@ -883,7 +883,7 @@ OBJ_DATA *obj_next; AFFECT_DATA *paf, *paf_next; - for (obj = object_list; obj != NULL; obj = obj_next) + for (obj = object_first; obj != NULL; obj = obj_next) { CHAR_DATA *rch; char *message; @@ -891,7 +891,7 @@ obj_next = obj->next; /* go through affects and decrement */ - for (paf = obj->affected; paf != NULL; paf = paf_next) + for (paf = obj->first_affect; paf != NULL; paf = paf_next) { paf_next = paf->next; if (paf->duration > 0) @@ -916,9 +916,9 @@ [paf->type].msg_obj, rch, obj, NULL, TO_CHAR); } if (obj->in_room != NULL && - obj->in_room->people != NULL) + obj->in_room->first_person != NULL) { - rch = obj->in_room->people; + rch = obj->in_room->first_person; act(skill_table [paf->type].msg_obj, rch, obj, NULL, TO_ALL); } @@ -957,7 +957,7 @@ break; case ITEM_CONTAINER: if (CAN_WEAR(obj, ITEM_WEAR_FLOAT)) - if (obj->contains) + if (obj->first_content) message = "$p flickers and vanishes, spilling its contents on the floor."; else @@ -979,7 +979,8 @@ act(message, obj->carried_by, obj, NULL, TO_ROOM); } } - else if (obj->in_room != NULL && (rch = obj->in_room->people) != NULL) + else if (obj->in_room != NULL + && (rch = obj->in_room->first_person) != NULL) { if (! (obj->in_obj && @@ -992,11 +993,11 @@ } if ((obj->item_type == ITEM_CORPSE_PC || - obj->wear_loc == WEAR_FLOAT) && obj->contains) + obj->wear_loc == WEAR_FLOAT) && obj->first_content) { /* save the contents */ OBJ_DATA *t_obj, *next_obj; - for (t_obj = obj->contains; t_obj != NULL; t_obj = next_obj) + for (t_obj = obj->first_content; t_obj != NULL; t_obj = next_obj) { next_obj = t_obj->next_content; obj_from_obj(t_obj); @@ -1051,7 +1052,7 @@ CHAR_DATA *vch_next; CHAR_DATA *victim; - for (wch = player_list; wch != NULL; wch = wch_next) + for (wch = player_first; wch != NULL; wch = wch_next) { if (wch->next == NULL) { @@ -1063,7 +1064,7 @@ IS_SET(wch->in_room->room_flags, ROOM_SAFE)) continue; - for (ch = wch->in_room->people; ch != NULL; ch = ch_next) + for (ch = wch->in_room->first_person; ch != NULL; ch = ch_next) { int count; @@ -1083,7 +1084,7 @@ */ count = 0; victim = NULL; - for (vch = wch->in_room->people; vch != NULL; vch = vch_next) + for (vch = wch->in_room->first_person; vch != NULL; vch = vch_next) { vch_next = vch->next_in_room; diff -ur src/war.c new/war.c --- src/war.c Sat Jan 11 16:24:00 2003 +++ new/war.c Fri Jan 24 02:15:43 2003 @@ -83,7 +83,7 @@ CHAR_DATA *wch, *warmaster = NULL; int blevel, elevel, type; - for (warmaster = ch->in_room->people; warmaster != NULL; + for (warmaster = ch->in_room->first_person; warmaster != NULL; warmaster = warmaster->next_in_room) { if (!IS_NPC(warmaster)) @@ -205,7 +205,7 @@ war_info.max_level); war_info.timer = 3; war_info.next = 0; - for (wch = player_list; wch != NULL; wch = wch->next_player) + for (wch = player_first; wch != NULL; wch = wch->next_player) { if (IS_SET(wch->act, PLR_WAR)) REMOVE_BIT(wch->act, PLR_WAR); @@ -225,7 +225,7 @@ if (war_info.iswar != WAR_OFF) return; - for (wch = player_list; wch != NULL; wch = wch->next_player) + for (wch = player_first; wch != NULL; wch = wch->next_player) { if (!wch->desc) continue; @@ -239,7 +239,7 @@ heros++; if (is_clan(wch)) { - for (wch_last = player_list; wch_last != NULL; + for (wch_last = player_first; wch_last != NULL; wch_last = wch_last->next_player) { if (!IS_NPC(wch_last) @@ -266,7 +266,7 @@ maxlvl = LEVEL_HERO; else maxlvl = UMIN(LEVEL_HERO, number_range((middle * 3) / 2, maxlvl)); - for (warmaster = char_list; warmaster != NULL; warmaster = warmaster->next) + for (warmaster = char_first; warmaster != NULL; warmaster = warmaster->next) if (warmaster->pIndexData && warmaster->pIndexData->vnum == MOB_VNUM_WARMASTER) break; @@ -297,7 +297,7 @@ war_info.max_level); war_info.timer = 3; war_info.next = 0; - for (wch = player_list; wch != NULL; wch = wch->next_player) + for (wch = player_first; wch != NULL; wch = wch->next_player) { if (IS_SET(wch->act, PLR_WAR)) REMOVE_BIT(wch->act, PLR_WAR); @@ -318,7 +318,7 @@ war_info.inwar = 0; war_info.timer = 0; war_info.next = number_range(100, 200); - for (wch = player_list; wch != NULL; wch = wch->next_player) + for (wch = player_first; wch != NULL; wch = wch->next_player) { if (IS_SET_WAR(wch)) { @@ -460,7 +460,7 @@ chprintlnf(ch, "{g%s{x", stringf(0, ALIGN_CENTER, "-", "[ {WWAR COMBATENTS{g ]")); - for (wch = player_list; wch != NULL; wch = wch->next_player) + for (wch = player_first; wch != NULL; wch = wch->next_player) { if (IS_SET(wch->act, PLR_WAR)) { @@ -557,11 +557,11 @@ CHAR_DATA *ch; CHAR_DATA *vict; - for (ch = player_list; ch != NULL; ch = ch->next_player) + for (ch = player_first; ch != NULL; ch = ch->next_player) { if (IS_SET(ch->act, PLR_WAR)) { - for (vict = player_list; vict != NULL; vict = vict->next_player) + for (vict = player_first; vict != NULL; vict = vict->next_player) { if (IS_SET(vict->act, PLR_WAR)) { @@ -581,11 +581,11 @@ CHAR_DATA *ch; CHAR_DATA *vict; - for (ch = player_list; ch != NULL; ch = ch->next_player) + for (ch = player_first; ch != NULL; ch = ch->next_player) { if (IS_SET(ch->act, PLR_WAR)) { - for (vict = player_list; vict != NULL; vict = vict->next_player) + for (vict = player_first; vict != NULL; vict = vict->next_player) { if (IS_SET(vict->act, PLR_WAR)) { @@ -605,11 +605,11 @@ CHAR_DATA *ch; CHAR_DATA *vict; - for (ch = player_list; ch != NULL; ch = ch->next_player) + for (ch = player_first; ch != NULL; ch = ch->next_player) { if (IS_SET(ch->act, PLR_WAR) && is_clan(ch)) { - for (vict = player_list; vict != NULL; vict = vict->next_player) + for (vict = player_first; vict != NULL; vict = vict->next_player) { if (IS_SET(vict->act, PLR_WAR) && is_clan(vict)) { @@ -644,7 +644,7 @@ sprintf(buf, "{RType : {W%s war.{x", wartype_name(war_info.wartype)); add_buf(output, buf); add_buf(output, "{WWAR COMBATENTS{g\n\r--------------{x"); - for (wch = player_list; wch != NULL; wch = wch->next_player) + for (wch = player_first; wch != NULL; wch = wch->next_player) { if (!IS_SET_WAR(wch)) continue; @@ -739,7 +739,7 @@ war_info.timer = number_range(3 * war_info.inwar, 5 * war_info.inwar); war_info.iswar = WAR_RUNNING; - for (wch = player_list; wch != NULL; wch = wch->next_player) + for (wch = player_first; wch != NULL; wch = wch->next_player) { if (IS_SET(wch->act, PLR_WAR)) { @@ -828,7 +828,7 @@ announce(NULL, INFO_WAR, "The %s's have won the War!", race_table[ch->race].name); note_war(ch); - for (wch = player_list; wch != NULL; wch = wch->next_player) + for (wch = player_first; wch != NULL; wch = wch->next_player) { if (!IS_SET_WAR(wch)) continue; @@ -852,7 +852,7 @@ announce(NULL, INFO_WAR, "The %s's have won the War!{x", class_table[ch->Class[0]].name); note_war(ch); - for (wch = player_list; wch != NULL; wch = wch->next_player) + for (wch = player_first; wch != NULL; wch = wch->next_player) { if (!IS_SET_WAR(wch)) continue; @@ -875,7 +875,7 @@ announce(NULL, INFO_WAR, "%s has won the War!{x", clan_table[ch->clan].who_name); note_war(ch); - for (wch = player_list; wch != NULL; wch = wch->next_player) + for (wch = player_first; wch != NULL; wch = wch->next_player) { if (!IS_SET_WAR(wch)) continue; @@ -947,7 +947,7 @@ chprintf(ch, "{Y({RWarTalk{Y) {gYou drum: %s{x\n\r", argument); - for (d = descriptor_list; d != NULL; d = d->next) + for (d = descriptor_first; d != NULL; d = d->next) { CHAR_DATA *victim;