Index: Makefile.in =================================================================== RCS file: /var/lib/cvs/public/bbs100-1.2/src/Makefile.in,v retrieving revision 1.1.1.1 diff -u -r1.1.1.1 Makefile.in --- Makefile.in 12 Dec 2003 04:11:38 -0000 1.1.1.1 +++ Makefile.in 4 Jan 2004 23:27:44 -0000 @@ -37,6 +37,8 @@ NM = @NM@ LN = @LN@ +HOMES = @enable_homes@ + INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL@ -m 0750 INSTALL_SCRIPT = @INSTALL@ -m 0750 @@ -173,6 +175,11 @@ $(MKDIR) "$(prefix)/users/$${DIR}" ; \ fi ; \ done ; \ + if [ $(HOMES) == "no" ] ; \ + then \ + echo "removing home room" ; \ + $(RM) -r "$(prefix)/rooms/2" ; \ + fi ; \ echo "setup done" ; \ echo "You can now do '$(bindir)/bbs start' to start it up" ; \ ) Index: Room.c =================================================================== RCS file: /var/lib/cvs/public/bbs100-1.2/src/Room.c,v retrieving revision 1.1.1.1 diff -u -r1.1.1.1 Room.c --- Room.c 12 Dec 2003 04:11:38 -0000 1.1.1.1 +++ Room.c 4 Jan 2004 23:27:44 -0000 @@ -245,7 +245,7 @@ if (r == NULL) return -1; - if (r->number == 1 || r->number == 2) { + if (r->number > 0 && (r->number <= RESERVED_ROOMS)) { char name[MAX_LINE], *p; strcpy(name, r->name); @@ -256,9 +256,11 @@ if (r->number == 1) sprintf(filename, "%s/%c/%s/MailData", PARAM_USERDIR, *name, name); +#ifdef HOMES else if (r->number == 2) sprintf(filename, "%s/%c/%s/HomeData", PARAM_USERDIR, *name, name); +#endif /* HOMES */ } else sprintf(filename, "%s/%u/RoomData", PARAM_ROOMDIR, r->number); @@ -384,8 +386,10 @@ if (!strcmp(name, "Mail")) return usr->mail; +#ifdef HOMES if (!strcmp(name, "Home")) return find_Home(usr->name); +#endif /* HOMES */ if ((p = cstrchr(name, '\'')) != NULL) { quote = p; @@ -407,11 +411,13 @@ *quote = '\''; return u->mail; } +#ifdef HOMES if (!strcmp(p, "Home")) { r = find_Home(name); *quote = '\''; return r; } +#endif /* HOMES */ } *quote = '\''; } @@ -420,7 +426,7 @@ for(r = AllRooms; r != NULL; r = r->next) { if (!strcmp(r->name, name)) { - if (r->number <= 2) + if (r->number <= RESERVED_ROOMS) return find_Roombynumber(usr, r->number); return r; } @@ -444,7 +450,7 @@ l = strlen(name); for(r = AllRooms; r != NULL; r = r->next) { if (!(r->flags & ROOM_HIDDEN) && !strncmp(r->name, name, l)) { - if (r->number <= 2) + if (r->number <= RESERVED_ROOMS) return find_Roombynumber(usr, r->number); return r; } @@ -454,7 +460,7 @@ */ for(r = AllRooms; r != NULL; r = r->next) { if (!(r->flags & ROOM_HIDDEN) && cstrstr(r->name, name) != NULL) { - if (r->number <= 2) + if (r->number <= RESERVED_ROOMS) return find_Roombynumber(usr, r->number); return r; } @@ -473,8 +479,10 @@ case 1: return usr->mail; +#ifdef HOMES case 2: return find_Home(usr->name); +#endif /* HOMES */ default: for(r = AllRooms; r != NULL; r = r->next) @@ -494,8 +502,10 @@ case 1: return usr->mail; +#ifdef HOMES case 2: return find_Home(username); +#endif /* HOMES */ default: for(r = AllRooms; r != NULL; r = r->next) @@ -531,8 +541,12 @@ char *p; if ((p = cstrchr(name, '\'')) != NULL) { +#ifdef HOMES if (!strcmp(p, "'s Home") || !strcmp(p, "'s Mail") || !strcmp(p, "' Home") || !strcmp(p, "' Mail")) { +#else + if (!strcmp(p, "'s Mail") || !strcmp(p, "' Mail")) { +#endif /* HOMES */ *p = 0; if (user_exists(name)) { *p = '\''; @@ -557,7 +571,7 @@ int roomnumber_exists(unsigned int u) { Room *r; - if (u <= 2) + if (u <= RESERVED_ROOMS) return 1; for(r = AllRooms; r != NULL; r = r->next) @@ -577,12 +591,14 @@ if (r == NULL) return; +#ifdef HOMES if (r->number == 2 && r->inside == NULL) { /* demand loaded Home room */ remove_Room(&HomeRooms, r); save_Room(r); destroy_Room(r); return; } +#endif /* HOMES */ if (r->number == 1) { /* demand loaded Mail> room */ Room *h; /* Index: configure.in =================================================================== RCS file: /var/lib/cvs/public/bbs100-1.2/src/configure.in,v retrieving revision 1.1.1.1 retrieving revision 1.4 diff -u -r1.1.1.1 -r1.4 --- configure.in 12 Dec 2003 04:11:38 -0000 1.1.1.1 +++ configure.in 25 Dec 2003 18:31:04 -0000 1.4 @@ -160,11 +160,26 @@ dnl special compiler options for gcc if test "$GCC" = "yes" ; then - CCOPTS='-O2 -Wall -Wstrict-prototypes -fomit-frame-pointer -fno-strength-reduce' + CCOPTS='-O2 -Wall -Wno-trigraphs -Wstrict-prototypes -fomit-frame-pointer -fno-strength-reduce' else CCOPTS='-O2' fi CFLAGS="$CCOPTS" + +dnl Some feature flips by Shannon Prickett + +AC_ARG_ENABLE(chat, [ --enable-chat use chat rooms [ default = no ]],,enable_chat=no) + +AC_ARG_ENABLE(homes, [ --enable-homes users have personal chat rooms [ default = no]],,enable_homes=no) + +if test x$enable_chat = xyes; then + AC_DEFINE(CHAT) + + if test x$enable_homes = xyes; then + AC_DEFINE(HOMES) + fi +fi +AC_SUBST(enable_homes) AC_OUTPUT(Makefile bbs expire_accounts.sh stats.pl) Index: edit.c =================================================================== RCS file: /var/lib/cvs/public/bbs100-1.2/src/edit.c,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -u -r1.1.1.1 -r1.2 --- edit.c 12 Dec 2003 04:11:38 -0000 1.1.1.1 +++ edit.c 1 Jan 2004 17:36:45 -0000 1.2 @@ -1344,7 +1344,7 @@ for(r = AllRooms; r != NULL; r = r_next) { r_next = r->next; - if (r->number <= 2) + if (r->number <= RESERVED_ROOMS) r = find_Roombynumber(usr, r->number); j = in_Joined(usr->rooms, r->number); @@ -1358,8 +1358,10 @@ if (!usr->edit_pos || !strncmp(r->name, usr->edit_buf, usr->edit_pos)) add_StringList(&usr->tablist, new_StringList(r->name)); } +#ifdef HOMES if (r->number == 2) unload_Room(r); +#endif /* HOMES */ } /* now link end to beginning and beginning to end, forming a cyclic chain */ if (usr->tablist != NULL) { Index: state.c =================================================================== RCS file: /var/lib/cvs/public/bbs100-1.2/src/state.c,v retrieving revision 1.1.1.1 retrieving revision 1.7 diff -u -r1.1.1.1 -r1.7 --- state.c 12 Dec 2003 04:11:38 -0000 1.1.1.1 +++ state.c 4 Jan 2004 20:58:53 -0000 1.7 @@ -2109,7 +2109,7 @@ Room *room; for(room = AllRooms; room != NULL; room = room->next) { - if (room->number > 2 + if (room->number > RESERVED_ROOMS && !(room->flags & ROOM_NOZAP) && in_StringList(room->room_aides, usr->name) == NULL) { @@ -2632,9 +2632,6 @@ status[0] = (char)color_by_name("white"); status[1] = ' '; - if ((r->flags & ROOM_HIDDEN) && !(usr->runtime_flags & RTF_SYSOP)) { - Return; - } read_it = 1; if ((j = in_Joined(usr->rooms, r->number)) != NULL) { @@ -2644,6 +2641,7 @@ read_it = 0; } } + if (read_it) { if (r->flags & ROOM_ANONYMOUS) { status[0] = (char)color_by_name("green"); @@ -2694,7 +2692,7 @@ /* add room aides to the line */ if (r->room_aides == NULL) { - if (r->number > 2) + if (r->number > RESERVED_ROOMS) sprintf(buf2+strlen(buf2), "%c(no %s)", (char)color_by_name("red"), PARAM_NAME_ROOMAIDE); } else { StringList *sl; @@ -2729,8 +2727,8 @@ for(r = AllRooms; r != NULL; r = r_next) { r_next = r->next; -/* first three rooms are special */ - if (r->number <= 2) +/* first few rooms are special */ + if (r->number <= RESERVED_ROOMS) r = find_Roombynumber(usr, r->number); if (!(((j = in_Joined(usr->rooms, r->number)) != NULL && j->zapped) @@ -2739,8 +2737,10 @@ || ((r->flags & ROOM_INVITE_ONLY) && in_StringList(r->invited, usr->name) == NULL))) print_known_room(usr, r); +#ifdef HOMES if (r->number == 2) unload_Room(r); +#endif /* HOMES */ } read_more(usr); Return; @@ -2757,13 +2757,15 @@ for(r = AllRooms; r != NULL; r = r_next) { r_next = r->next; - if (r->number <= 2) + if (r->number <= RESERVED_ROOMS) r = find_Roombynumber(usr, r->number); print_known_room(usr, r); +#ifdef HOMES if (r->number == 2) unload_Room(r); +#endif /* HOMES */ } read_more(usr); Return; @@ -3308,11 +3310,13 @@ if (usr->curr_room->flags & ROOM_CHATROOM) leave_chatroom(usr); +#ifdef HOMES if (usr->curr_room->number == 2 && usr->curr_room->inside == NULL) { remove_Room(&HomeRooms, usr->curr_room); save_Room(usr->curr_room); destroy_Room(usr->curr_room); } +#endif /* HOMES */ usr->curr_room = NULL; } Index: state_config.c =================================================================== RCS file: /var/lib/cvs/public/bbs100-1.2/src/state_config.c,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -u -r1.1.1.1 -r1.2 --- state_config.c 12 Dec 2003 04:11:38 -0000 1.1.1.1 +++ state_config.c 24 Dec 2003 15:39:55 -0000 1.2 @@ -986,12 +986,16 @@ "Default who list format %s\n" "Sort by... %s\n" "Sort order %s\n" +#ifdef CHAT "When in a chat room... %s\n" +#endif /* CHAT */ "Show online enemies %s\n", (usr->flags & USR_SHORT_WHO) ? "Short" : "Long", (usr->flags & USR_SORT_BYNAME) ? "Name" : "Online time", (usr->flags & USR_SORT_DESCENDING) ? "Descending" : "Ascending", +#ifdef CHAT (usr->flags & USR_SHOW_ALL) ? "Show All" : "Show Inside", +#endif /* CHAT */ (usr->flags & USR_SHOW_ENEMIES) ? "Yes" : "No" ); if (usr->runtime_flags & RTF_SYSOP) { @@ -1031,12 +1035,14 @@ CURRENT_STATE(usr); Return; +#ifdef CHAT case 'c': case 'C': Put(usr, "In a chat room...\n"); usr->flags ^= USR_SHOW_ALL; CURRENT_STATE(usr); Return; +#endif /* CHAT */ case 'e': case 'E': Index: state_msg.c =================================================================== RCS file: /var/lib/cvs/public/bbs100-1.2/src/state_msg.c,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -u -r1.1.1.1 -r1.2 --- state_msg.c 12 Dec 2003 04:11:38 -0000 1.1.1.1 +++ state_msg.c 4 Jan 2004 20:58:53 -0000 1.2 @@ -2418,9 +2418,10 @@ and Mail> is checked seperately (remove this check and strange things happen... :P) */ - if (r->number == 1 || r->number == 2) { + if ((r->number <= RESERVED_ROOMS) && (r->number > 0)) { Return NULL; } + j = in_Joined(usr->rooms, r->number); /* if not welcome anymore, unjoin and proceed */ Index: state_roomconfig.c =================================================================== RCS file: /var/lib/cvs/public/bbs100-1.2/src/state_roomconfig.c,v retrieving revision 1.1.1.1 retrieving revision 1.4 diff -u -r1.1.1.1 -r1.4 --- state_roomconfig.c 12 Dec 2003 04:11:38 -0000 1.1.1.1 +++ state_roomconfig.c 1 Jan 2004 17:36:45 -0000 1.4 @@ -61,7 +61,7 @@ if (usr->runtime_flags & RTF_SYSOP) Print(usr, "Assign/unassign %s\n", PARAM_NAME_ROOMAIDE); - if (usr->curr_room->number != 1 && usr->curr_room->number != 2) + if (usr->curr_room->number == 0 || usr->curr_room->number > RESERVED_ROOMS) Put(usr, "Change room name\n"); if (usr->runtime_flags & RTF_SYSOP) { @@ -83,11 +83,19 @@ ); Print(usr, "5 Room is not zappable [%-3s]\n" +#ifdef CHAT "6 Room is hidden [%-3s]\n" "7 Room is a chat room [%-3s]\n", +#else + "6 Room is hidden [%-3s]\n", +#endif /* CHAT */ (usr->curr_room->flags & ROOM_NOZAP) ? "Yes" : "No", +#ifdef CHAT (usr->curr_room->flags & ROOM_HIDDEN) ? "Yes" : "No", (usr->curr_room->flags & ROOM_CHATROOM) ? "Yes" : "No" +#else + (usr->curr_room->flags & ROOM_HIDDEN) ? "Yes" : "No" +#endif /* CHAT */ ); } } @@ -226,7 +234,7 @@ if (usr->curr_room->flags & ROOM_HOME) break; - if (usr->curr_room->number != 1 && usr->curr_room->number != 2) { + if (usr->curr_room->number == 0 || usr->curr_room->number > RESERVED_ROOMS) { Put(usr, "Change room name\n"); CALL(usr, STATE_CHANGE_ROOMNAME); Return; @@ -346,6 +354,7 @@ } break; +#ifdef CHAT case '7': if (usr->curr_room->flags & ROOM_HOME) break; @@ -358,6 +367,7 @@ Return; } break; +#endif /* CHAT */ } if (usr->flags & USR_ROOMNUMBERS) Print(usr, "\n[%u %s] Room Config> ", usr->curr_room->number, usr->curr_room->name); @@ -874,7 +884,7 @@ Enter(delete_room); - if (room->number <= 2) { + if (room->number <= RESERVED_ROOMS) { Print(usr, "The %s> room is special and cannot be deleted\n", room->name); Return; } Index: state_sysop.c =================================================================== RCS file: /var/lib/cvs/public/bbs100-1.2/src/state_sysop.c,v retrieving revision 1.1.1.1 diff -u -r1.1.1.1 state_sysop.c --- state_sysop.c 12 Dec 2003 04:11:38 -0000 1.1.1.1 +++ state_sysop.c 4 Jan 2004 23:27:44 -0000 @@ -79,7 +79,7 @@ Put(usr, "\n" "Create new room"); - if (usr->curr_room->number > 2) + if (usr->curr_room->number > RESERVED_ROOMS) Put(usr, " Ctrl-Delete Room\n"); else Put(usr, "\n"); @@ -141,7 +141,7 @@ Return; case KEY_CTRL('D'): - if (usr->curr_room->number > 2) { + if (usr->curr_room->number > RESERVED_ROOMS) { Put(usr, "Delete room\n"); CALL(usr, STATE_DELETE_ROOM_NAME); Return; @@ -836,15 +836,25 @@ RET(usr); Return; } +#ifdef HOMES if (!strcmp(usr->edit_buf, "Mail") || !strcmp(usr->edit_buf, "Home")) { Put(usr, "The room names Home and Mail are reserved and cannot be used\n"); +#else + if (!strcmp(usr->edit_buf, "Mail")) { + Put(usr, "The room name Mail is reserved and cannot be used\n"); +#endif /* HOMES */ RET(usr); Return; } if ((p = cstrchr(usr->edit_buf, '\'')) != NULL) { +#ifdef HOMES if (!strcmp(p, "'s Mail") || !strcmp(p, "'s Home") || !strcmp(p, "' Mail") || !strcmp(p, "' Home")) { Put(usr, "The room names Home and Mail are reserved and cannot be used\n"); +#else + if (!strcmp(p, "'s Mail") || !strcmp(p, "' Mail")) { + Put(usr, "The room name Mail is reserved and cannot be used\n"); +#endif /* HOMES */ RET(usr); Return; } @@ -858,7 +868,7 @@ room->flags = (ROOM_HIDDEN | ROOM_READONLY | ROOM_SUBJECTS | ROOM_INVITE_ONLY); /* find a room number */ - room->number = 3; /* lowest possible new room number is 3 */ + room->number = RESERVED_ROOMS + 1; /* lowest possible new room number is 3 if -DHOMES, otherwise 2 */ for(rm = AllRooms; rm != NULL; rm = rm->next) { if (room->number == rm->number) room->number++; @@ -2088,11 +2098,15 @@ PARAM_MAX_MSG_LINES ); Print(usr, +#ifdef CHAT "Max lines in chat room history %6u\n" +#endif /* CHAT */ "Max number of messages in X History %6u\n" "Max number of Friends %6u\n" "Max number of Enemies %6u\n", +#ifdef CHAT PARAM_MAX_CHAT_HISTORY, +#endif /* CHAT */ PARAM_MAX_HISTORY, PARAM_MAX_FRIEND, PARAM_MAX_ENEMY @@ -2146,11 +2160,13 @@ CALL(usr, STATE_PARAM_MSG_LINES); Return; +#ifdef CHAT case 'a': case 'A': Put(usr, "Max chat room history\n"); CALL(usr, STATE_PARAM_CHAT_HISTORY); Return; +#endif /* CHAT */ case 'h': case 'H': @@ -2321,12 +2337,14 @@ PARAM_NOTIFY_LOCKED, PARAM_NOTIFY_UNLOCKED ); +#ifdef CHAT Print(usr, "Notify enter chat %s\n" "Notify leave chat %s\n", PARAM_NOTIFY_ENTER_CHAT, PARAM_NOTIFY_LEAVE_CHAT ); +#endif /* CHAT */ break; case ' ': @@ -2396,6 +2414,7 @@ CALL(usr, STATE_PARAM_NOTIFY_UNLOCKED); Return; +#ifdef CHAT case 'e': case 'E': Put(usr, "Notify enter chat\n"); @@ -2407,6 +2426,7 @@ Put(usr, "Notify leave chat\n"); CALL(usr, STATE_PARAM_NOTIFY_LEAVE_CHAT); Return; +#endif /* CHAT */ } Print(usr, "\n[%s] Strings# ", PARAM_NAME_SYSOP); Return; @@ -2483,7 +2503,6 @@ change_string_param(usr, c, &PARAM_NOTIFY_LEAVE_CHAT, "Leave chat notification: "); Return; } - void change_int_param(User *usr, char c, unsigned int *var) { Index: include/Room.h =================================================================== RCS file: /var/lib/cvs/public/bbs100-1.2/src/include/Room.h,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -u -r1.1.1.1 -r1.2 --- include/Room.h 12 Dec 2003 04:11:38 -0000 1.1.1.1 +++ include/Room.h 1 Jan 2004 17:36:45 -0000 1.2 @@ -55,6 +55,12 @@ typedef struct User_tag User; #endif +#ifdef HOMES +#define RESERVED_ROOMS 2 +#else +#define RESERVED_ROOMS 1 +#endif /* HOMES */ + typedef struct Room_tag Room; struct Room_tag { Index: include/config.h.in =================================================================== RCS file: /var/lib/cvs/public/bbs100-1.2/src/include/config.h.in,v retrieving revision 1.1.1.1 retrieving revision 1.4 diff -u -r1.1.1.1 -r1.4 --- include/config.h.in 12 Dec 2003 04:11:38 -0000 1.1.1.1 +++ include/config.h.in 25 Dec 2003 18:40:06 -0000 1.4 @@ -103,3 +103,10 @@ /* Define if you have the xnet library (-lxnet). */ #undef HAVE_LIBXNET + +/* --enable-chat, supports having chat rooms */ +#undef CHAT + +/* --enable-homes, supports users having personal chat rooms, requires + * --enable-chat or it isn't even checked for */ +#undef HOMES