X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=citadel%2Froom_ops.c;h=1ef9f0a94cdd1d98c81b4b9f86997af0e84c6005;hb=9d6ac635379521753572f0641718f58f154b2aa3;hp=3303979f6877e8a10b3a9dd76b2ae37e11aa190e;hpb=07ca17ac183819511717aa2d73e1d938f83cc4c6;p=citadel.git diff --git a/citadel/room_ops.c b/citadel/room_ops.c index 3303979f6..1ef9f0a94 100644 --- a/citadel/room_ops.c +++ b/citadel/room_ops.c @@ -42,6 +42,8 @@ #include "citadel_dirs.h" #include "threads.h" +#include "ctdl_module.h" + struct floor *floorcache[MAXFLOORS]; /* @@ -55,7 +57,7 @@ void CtdlRoomAccess(struct ctdlroom *roombuf, struct ctdluser *userbuf, /* for internal programs, always do everything */ if (((CC->internal_pgm)) && (roombuf->QRflags & QR_INUSE)) { - retval = (UA_KNOWN | UA_GOTOALLOWED | UA_POSTALLOWED); + retval = (UA_KNOWN | UA_GOTOALLOWED | UA_POSTALLOWED | UA_DELETEALLOWED); vbuf.v_view = 0; goto SKIP_EVERYTHING; } @@ -220,9 +222,9 @@ void room_sanity_check(struct ctdlroom *qrbuf) /* - * getroom() - retrieve room data from disk + * CtdlGetRoom() - retrieve room data from disk */ -int getroom(struct ctdlroom *qrbuf, char *room_name) +int CtdlGetRoom(struct ctdlroom *qrbuf, char *room_name) { struct cdbdata *cdbqr; char lowercase_name[ROOMNAMELEN]; @@ -268,12 +270,12 @@ int getroom(struct ctdlroom *qrbuf, char *room_name) } /* - * lgetroom() - same as getroom() but locks the record (if supported) + * CtdlGetRoomLock() - same as getroom() but locks the record (if supported) */ -int lgetroom(struct ctdlroom *qrbuf, char *room_name) +int CtdlGetRoomLock(struct ctdlroom *qrbuf, char *room_name) { register int retval; - retval = getroom(qrbuf, room_name); + retval = CtdlGetRoom(qrbuf, room_name); if (retval == 0) begin_critical_section(S_ROOMS); return(retval); } @@ -313,9 +315,9 @@ void b_putroom(struct ctdlroom *qrbuf, char *room_name) /* - * putroom() - store room data to disk + * CtdlPutRoom() - store room data to disk */ -void putroom(struct ctdlroom *qrbuf) { +void CtdlPutRoom(struct ctdlroom *qrbuf) { b_putroom(qrbuf, qrbuf->QRname); } @@ -330,12 +332,12 @@ void b_deleteroom(char *room_name) { /* - * lputroom() - same as putroom() but unlocks the record (if supported) + * CtdlPutRoomLock() - same as CtdlPutRoom() but unlocks the record (if supported) */ -void lputroom(struct ctdlroom *qrbuf) +void CtdlPutRoomLock(struct ctdlroom *qrbuf) { - putroom(qrbuf); + CtdlPutRoom(qrbuf); end_critical_section(S_ROOMS); } @@ -343,9 +345,9 @@ void lputroom(struct ctdlroom *qrbuf) /****************************************************************************/ /* - * getfloor() - retrieve floor data from disk + * CtdlGetFloor() - retrieve floor data from disk */ -void getfloor(struct floor *flbuf, int floor_num) +void CtdlGetFloor(struct floor *flbuf, int floor_num) { struct cdbdata *cdbfl; @@ -368,22 +370,22 @@ void getfloor(struct floor *flbuf, int floor_num) } /* - * lgetfloor() - same as getfloor() but locks the record (if supported) + * lgetfloor() - same as CtdlGetFloor() but locks the record (if supported) */ void lgetfloor(struct floor *flbuf, int floor_num) { begin_critical_section(S_FLOORTAB); - getfloor(flbuf, floor_num); + CtdlGetFloor(flbuf, floor_num); } /* - * cgetfloor() - Get floor record from *cache* (loads from disk if needed) + * CtdlGetCachedFloor() - Get floor record from *cache* (loads from disk if needed) * * This is strictly a performance hack. */ -struct floor *cgetfloor(int floor_num) { +struct floor *CtdlGetCachedFloor(int floor_num) { static int initialized = 0; int i; int fetch_new = 0; @@ -403,7 +405,7 @@ struct floor *cgetfloor(int floor_num) { if (fetch_new) { fl = malloc(sizeof(struct floor)); - getfloor(fl, floor_num); + CtdlGetFloor(fl, floor_num); begin_critical_section(S_FLOORCACHE); if (floorcache[floor_num] != NULL) { free(floorcache[floor_num]); @@ -418,9 +420,9 @@ struct floor *cgetfloor(int floor_num) { /* - * putfloor() - store floor data on disk + * CtdlPutFloor() - store floor data on disk */ -void putfloor(struct floor *flbuf, int floor_num) +void CtdlPutFloor(struct floor *flbuf, int floor_num) { /* If we've cached this, clear it out, 'cuz it's WRONG now! */ begin_critical_section(S_FLOORCACHE); @@ -437,12 +439,12 @@ void putfloor(struct floor *flbuf, int floor_num) /* - * lputfloor() - same as putfloor() but unlocks the record (if supported) + * lputfloor() - same as CtdlPutFloor() but unlocks the record (if supported) */ void lputfloor(struct floor *flbuf, int floor_num) { - putfloor(flbuf, floor_num); + CtdlPutFloor(flbuf, floor_num); end_critical_section(S_FLOORTAB); } @@ -451,7 +453,7 @@ void lputfloor(struct floor *flbuf, int floor_num) /* * Traverse the room file... */ -void ForEachRoom(void (*CallBack) (struct ctdlroom *EachRoom, void *out_data), +void CtdlForEachRoom(void (*CallBack) (struct ctdlroom *EachRoom, void *out_data), void *in_data) { struct ctdlroom qrbuf; @@ -533,7 +535,7 @@ int sort_msglist(long listptrs[], int oldcount) /* * Determine whether a given room is non-editable. */ -int is_noneditable(struct ctdlroom *qrbuf) +int CtdlIsNonEditable(struct ctdlroom *qrbuf) { /* Mail> rooms are non-editable */ @@ -612,7 +614,7 @@ void cmd_lrms(char *argbuf) } cprintf("%d Accessible rooms:\n", LISTING_FOLLOWS); - ForEachRoom(cmd_lrms_backend, &FloorBeingSearched); + CtdlForEachRoom(cmd_lrms_backend, &FloorBeingSearched); cprintf("000\n"); } @@ -650,7 +652,7 @@ void cmd_lkra(char *argbuf) } cprintf("%d Known rooms:\n", LISTING_FOLLOWS); - ForEachRoom(cmd_lkra_backend, &FloorBeingSearched); + CtdlForEachRoom(cmd_lkra_backend, &FloorBeingSearched); cprintf("000\n"); } @@ -680,7 +682,7 @@ void cmd_lprm(char *argbuf) cprintf("%d Publiic rooms:\n", LISTING_FOLLOWS); - ForEachRoom(cmd_lprm_backend, &FloorBeingSearched); + CtdlForEachRoom(cmd_lprm_backend, &FloorBeingSearched); cprintf("000\n"); } @@ -719,7 +721,7 @@ void cmd_lkrn(char *argbuf) } cprintf("%d Rooms w/ new msgs:\n", LISTING_FOLLOWS); - ForEachRoom(cmd_lkrn_backend, &FloorBeingSearched); + CtdlForEachRoom(cmd_lkrn_backend, &FloorBeingSearched); cprintf("000\n"); } @@ -758,7 +760,7 @@ void cmd_lkro(char *argbuf) } cprintf("%d Rooms w/o new msgs:\n", LISTING_FOLLOWS); - ForEachRoom(cmd_lkro_backend, &FloorBeingSearched); + CtdlForEachRoom(cmd_lkro_backend, &FloorBeingSearched); cprintf("000\n"); } @@ -797,7 +799,7 @@ void cmd_lzrm(char *argbuf) } cprintf("%d Zapped rooms:\n", LISTING_FOLLOWS); - ForEachRoom(cmd_lzrm_backend, &FloorBeingSearched); + CtdlForEachRoom(cmd_lzrm_backend, &FloorBeingSearched); cprintf("000\n"); } @@ -807,7 +809,7 @@ void cmd_lzrm(char *argbuf) * or access control is done here -- the caller should make sure that the * specified room exists and is ok to access. */ -void usergoto(char *where, int display_result, int transiently, +void CtdlUserGoto(char *where, int display_result, int transiently, int *retmsgs, int *retnew) { int a; @@ -836,7 +838,7 @@ void usergoto(char *where, int display_result, int transiently, */ if (where != NULL) { safestrncpy(CC->room.QRname, where, sizeof CC->room.QRname); - getroom(&CC->room, where); + CtdlGetRoom(&CC->room, where); } /* Take care of all the formalities. */ @@ -871,7 +873,7 @@ void usergoto(char *where, int display_result, int transiently, cdbfr = cdb_fetch(CDB_MSGLISTS, &CC->room.QRnumber, sizeof(long)); if (cdbfr != NULL) { msglist = (long *) cdbfr->ptr; - cdbfr->ptr = NULL; /* usergoto() now owns this memory */ + cdbfr->ptr = NULL; /* CtdlUserGoto() now owns this memory */ num_msgs = cdbfr->len / sizeof(long); cdb_free(cdbfr); } @@ -975,6 +977,9 @@ void convert_room_name_macros(char *towhere, size_t maxlen) { else if (!strcasecmp(towhere, "_TRASH_")) { safestrncpy(towhere, USERTRASHROOM, maxlen); } + else if (!strcasecmp(towhere, "_DRAFTS_")) { + safestrncpy(towhere, USERDRAFTROOM, maxlen); + } else if (!strcasecmp(towhere, "_BITBUCKET_")) { safestrncpy(towhere, config.c_twitroom, maxlen); } @@ -1021,13 +1026,13 @@ void cmd_goto(char *gargs) convert_room_name_macros(towhere, sizeof towhere); /* First try a regular match */ - c = getroom(&QRscratch, towhere); + c = CtdlGetRoom(&QRscratch, towhere); /* Then try a mailbox name match */ if (c != 0) { MailboxName(augmented_roomname, sizeof augmented_roomname, &CC->user, towhere); - c = getroom(&QRscratch, augmented_roomname); + c = CtdlGetRoom(&QRscratch, augmented_roomname); if (c == 0) safestrncpy(towhere, augmented_roomname, sizeof towhere); } @@ -1039,7 +1044,7 @@ void cmd_goto(char *gargs) if (CC->internal_pgm) { memcpy(&CC->room, &QRscratch, sizeof(struct ctdlroom)); - usergoto(NULL, 1, transiently, NULL, NULL); + CtdlUserGoto(NULL, 1, transiently, NULL, NULL); return; } @@ -1056,7 +1061,7 @@ void cmd_goto(char *gargs) ((ra & UA_GOTOALLOWED))) { memcpy(&CC->room, &QRscratch, sizeof(struct ctdlroom)); - usergoto(NULL, 1, transiently, NULL, NULL); + CtdlUserGoto(NULL, 1, transiently, NULL, NULL); return; } else if ((QRscratch.QRflags & QR_PASSWORDED) && ((ra & UA_KNOWN) == 0) && @@ -1076,7 +1081,7 @@ void cmd_goto(char *gargs) } else { memcpy(&CC->room, &QRscratch, sizeof(struct ctdlroom)); - usergoto(NULL, 1, transiently, NULL, NULL); + CtdlUserGoto(NULL, 1, transiently, NULL, NULL); return; } } @@ -1086,7 +1091,7 @@ void cmd_goto(char *gargs) } -void cmd_whok(void) +void cmd_whok(char *cmdbuf) { struct ctdluser temp; struct cdbdata *cdbus; @@ -1112,7 +1117,7 @@ void cmd_whok(void) /* * RDIR command for room directory */ -void cmd_rdir(void) +void cmd_rdir(char *cmdbuf) { char buf[256]; char comment[256]; @@ -1127,7 +1132,7 @@ void cmd_rdir(void) if (CtdlAccessCheck(ac_logged_in)) return; - getroom(&CC->room, CC->room.QRname); + CtdlGetRoom(&CC->room, CC->room.QRname); getuser(&CC->user, CC->curr_user); if ((CC->room.QRflags & QR_DIRECTORY) == 0) { @@ -1167,8 +1172,11 @@ void cmd_rdir(void) stat(buf, &statbuf); /* stat the file */ if (!(statbuf.st_mode & S_IFREG)) { - snprintf(buf2, sizeof buf2, "Command RDIR found something that is not a useable file. It should be cleaned up.\n RDIR found this non regular file:\n%s\n", buf); - aide_message(buf2, "RDIR found bad file"); + snprintf(buf2, sizeof buf2, + "\"%s\" appears in the file directory for room \"%s\" but is not a regular file. Directories, named pipes, sockets, etc. are not usable in Citadel room directories.\n", + buf, CC->room.QRname + ); + CtdlAideMessage(buf2, "Unusable data found in room directory"); continue; /* not a useable file type so don't show it */ } safestrncpy(comment, "", sizeof comment); @@ -1202,11 +1210,11 @@ void cmd_rdir(void) /* * get room parameters (aide or room aide command) */ -void cmd_getr(void) +void cmd_getr(char *cmdbuf) { if (CtdlAccessCheck(ac_room_aide)) return; - getroom(&CC->room, CC->room.QRname); + CtdlGetRoom(&CC->room, CC->room.QRname); cprintf("%d%c%s|%s|%s|%d|%d|%d|%d|%d|\n", CIT_OK, CtdlCheckExpress(), @@ -1252,7 +1260,7 @@ int CtdlRenameRoom(char *old_name, char *new_name, int new_floor) { old_name, new_name, new_floor); if (new_floor >= 0) { - fl = cgetfloor(new_floor); + fl = CtdlGetCachedFloor(new_floor); if ((fl->f_flags & F_INUSE) == 0) { return(crr_invalid_floor); } @@ -1260,12 +1268,12 @@ int CtdlRenameRoom(char *old_name, char *new_name, int new_floor) { begin_critical_section(S_ROOMS); - if ( (getroom(&qrtmp, new_name) == 0) + if ( (CtdlGetRoom(&qrtmp, new_name) == 0) && (strcasecmp(new_name, old_name)) ) { ret = crr_already_exists; } - else if (getroom(&qrbuf, old_name) != 0) { + else if (CtdlGetRoom(&qrbuf, old_name) != 0) { ret = crr_room_not_found; } @@ -1275,7 +1283,7 @@ int CtdlRenameRoom(char *old_name, char *new_name, int new_floor) { ret = crr_access_denied; } - else if (is_noneditable(&qrbuf)) { + else if (CtdlIsNonEditable(&qrbuf)) { ret = crr_noneditable; } @@ -1306,7 +1314,7 @@ int CtdlRenameRoom(char *old_name, char *new_name, int new_floor) { new_floor = old_floor; } qrbuf.QRfloor = new_floor; - putroom(&qrbuf); + CtdlPutRoom(&qrbuf); begin_critical_section(S_CONFIG); @@ -1405,7 +1413,7 @@ void cmd_setr(char *args) return; } - getroom(&CC->room, new_name); + CtdlGetRoom(&CC->room, new_name); /* Now we have to do a bunch of other stuff */ @@ -1417,7 +1425,7 @@ void cmd_setr(char *args) new_order = 127; } - lgetroom(&CC->room, CC->room.QRname); + CtdlGetRoomLock(&CC->room, CC->room.QRname); /* Directory room */ extract_token(buf, args, 2, '|', sizeof buf); @@ -1478,7 +1486,7 @@ void cmd_setr(char *args) } /* Write the room record back to disk */ - lputroom(&CC->room); + CtdlPutRoomLock(&CC->room); /* Create a room directory if necessary */ if (CC->room.QRflags & QR_DIRECTORY) { @@ -1489,7 +1497,7 @@ void cmd_setr(char *args) } snprintf(buf, sizeof buf, "The room \"%s\" has been edited by %s.\n", CC->room.QRname, CC->curr_user); - aide_message(buf, "Room modification Message"); + CtdlAideMessage(buf, "Room modification Message"); cprintf("%d Ok\n", CIT_OK); } @@ -1498,7 +1506,7 @@ void cmd_setr(char *args) /* * get the name of the room aide for this room */ -void cmd_geta(void) +void cmd_geta(char *cmdbuf) { struct ctdluser usbuf; @@ -1530,13 +1538,13 @@ void cmd_seta(char *new_ra) newu = usbuf.usernum; } - lgetroom(&CC->room, CC->room.QRname); + CtdlGetRoomLock(&CC->room, CC->room.QRname); post_notice = 0; if (CC->room.QRroomaide != newu) { post_notice = 1; } CC->room.QRroomaide = newu; - lputroom(&CC->room); + CtdlPutRoomLock(&CC->room); /* * We have to post the change notice _after_ writing changes to @@ -1551,7 +1559,7 @@ void cmd_seta(char *new_ra) snprintf(buf, sizeof buf, "There is now no room aide for \"%s\".\n", CC->room.QRname); - aide_message(buf, "Aide Room Modification"); + CtdlAideMessage(buf, "Aide Room Modification"); } cprintf("%d Ok\n", CIT_OK); } @@ -1559,7 +1567,7 @@ void cmd_seta(char *new_ra) /* * retrieve info file for this room */ -void cmd_rinf(void) +void cmd_rinf(char *gargs) { char filename[128]; char buf[SIZ]; @@ -1587,7 +1595,7 @@ void cmd_rinf(void) * deleted to the user(s), but it won't actually get purged from the * database until THE DREADED AUTO-PURGER makes its next run. */ -void schedule_room_for_deletion(struct ctdlroom *qrbuf) +void CtdlScheduleRoomForDeletion(struct ctdlroom *qrbuf) { char old_name[ROOMNAMELEN]; static int seq = 0; @@ -1597,7 +1605,7 @@ void schedule_room_for_deletion(struct ctdlroom *qrbuf) safestrncpy(old_name, qrbuf->QRname, sizeof old_name); - getroom(qrbuf, qrbuf->QRname); + CtdlGetRoom(qrbuf, qrbuf->QRname); /* Turn the room into a private mailbox owned by a user who doesn't * exist. This will immediately make the room invisible to everyone, @@ -1611,7 +1619,7 @@ void schedule_room_for_deletion(struct ctdlroom *qrbuf) qrbuf->QRflags |= QR_MAILBOX; time(&qrbuf->QRgen); /* Use a timestamp as the new generation number */ - putroom(qrbuf); + CtdlPutRoom(qrbuf); b_deleteroom(old_name); } @@ -1624,7 +1632,7 @@ void schedule_room_for_deletion(struct ctdlroom *qrbuf) * AUTO-PURGER in serv_expire.c. All user-facing code should call * the asynchronous schedule_room_for_deletion() instead.) */ -void delete_room(struct ctdlroom *qrbuf) +void CtdlDeleteRoom(struct ctdlroom *qrbuf) { struct floor flbuf; char filename[100]; @@ -1650,9 +1658,9 @@ void delete_room(struct ctdlroom *qrbuf) CtdlDeleteMessages(qrbuf->QRname, NULL, 0, ""); /* Flag the room record as not in use */ - lgetroom(qrbuf, qrbuf->QRname); + CtdlGetRoomLock(qrbuf, qrbuf->QRname); qrbuf->QRflags = 0; - lputroom(qrbuf); + CtdlPutRoomLock(qrbuf); /* then decrement the reference count for the floor */ lgetfloor(&flbuf, (int) (qrbuf->QRfloor)); @@ -1674,7 +1682,7 @@ int CtdlDoIHavePermissionToDeleteThisRoom(struct ctdlroom *qr) { return(0); } - if (is_noneditable(qr)) { + if (CtdlIsNonEditable(qr)) { return(0); } @@ -1726,15 +1734,15 @@ void cmd_kill(char *argbuf) } /* Do the dirty work */ - schedule_room_for_deletion(&CC->room); + CtdlScheduleRoomForDeletion(&CC->room); /* Return to the Lobby */ - usergoto(config.c_baseroom, 0, 0, NULL, NULL); + CtdlUserGoto(config.c_baseroom, 0, 0, NULL, NULL); /* tell the world what we did */ snprintf(msg, sizeof msg, "The room \"%s\" has been deleted by %s.\n", deleted_room_name, CC->curr_user); - aide_message(msg, "Room Purger Message"); + CtdlAideMessage(msg, "Room Purger Message"); cprintf("%d '%s' deleted.\n", CIT_OK, deleted_room_name); } else { cprintf("%d ok to delete.\n", CIT_OK); @@ -1748,7 +1756,7 @@ void cmd_kill(char *argbuf) * Room types: 0=public, 1=guessname, 2=passworded, 3=inv-only, * 4=mailbox, 5=mailbox, but caller supplies namespace */ -unsigned create_room(char *new_room_name, +unsigned CtdlCreateRoom(char *new_room_name, int new_room_type, char *new_room_pass, int new_room_floor, @@ -1761,10 +1769,10 @@ unsigned create_room(char *new_room_name, struct floor flbuf; struct visit vbuf; - CtdlLogPrintf(CTDL_DEBUG, "create_room(name=%s, type=%d, view=%d)\n", + CtdlLogPrintf(CTDL_DEBUG, "CtdlCreateRoom(name=%s, type=%d, view=%d)\n", new_room_name, new_room_type, new_room_view); - if (getroom(&qrbuf, new_room_name) == 0) { + if (CtdlGetRoom(&qrbuf, new_room_name) == 0) { CtdlLogPrintf(CTDL_DEBUG, "%s already exists.\n", new_room_name); return(0); } @@ -1816,7 +1824,7 @@ unsigned create_room(char *new_room_name, qrbuf.QRdefaultview = new_room_view; /* save what we just did... */ - putroom(&qrbuf); + CtdlPutRoom(&qrbuf); /* bump the reference count on whatever floor the room is on */ lgetfloor(&flbuf, (int) qrbuf.QRfloor); @@ -1876,7 +1884,7 @@ void cmd_cre8(char *args) } if (num_parms(args) >= 5) { - fl = cgetfloor(extract_int(args, 4)); + fl = CtdlGetCachedFloor(extract_int(args, 4)); if (fl == NULL) { cprintf("%d Invalid floor number.\n", ERROR + INVALID_FLOOR_OPERATION); @@ -1918,7 +1926,7 @@ void cmd_cre8(char *args) } /* Check to make sure the requested room name doesn't already exist */ - newflags = create_room(new_room_name, + newflags = CtdlCreateRoom(new_room_name, new_room_type, new_room_pass, new_room_floor, 0, avoid_access, new_room_view); if (newflags == 0) { @@ -1934,7 +1942,7 @@ void cmd_cre8(char *args) /* If we reach this point, the room needs to be created. */ - newflags = create_room(new_room_name, + newflags = CtdlCreateRoom(new_room_name, new_room_type, new_room_pass, new_room_floor, 1, 0, new_room_view); @@ -1950,7 +1958,7 @@ void cmd_cre8(char *args) ((newflags & QR_PASSWORDED) ? " Password: " : ""), ((newflags & QR_PASSWORDED) ? new_room_pass : "") ); - aide_message(notification_message, "Room Creation Message"); + CtdlAideMessage(notification_message, "Room Creation Message"); free(notification_message); cprintf("%d '%s' has been created.\n", CIT_OK, new_room_name); @@ -1991,16 +1999,16 @@ void cmd_einf(char *ok) fclose(fp); /* now update the room index so people will see our new info */ - lgetroom(&CC->room, CC->room.QRname); /* lock so no one steps on us */ + CtdlGetRoomLock(&CC->room, CC->room.QRname); /* lock so no one steps on us */ CC->room.QRinfo = CC->room.QRhighest + 1L; - lputroom(&CC->room); + CtdlPutRoomLock(&CC->room); } /* * cmd_lflr() - List all known floors */ -void cmd_lflr(void) +void cmd_lflr(char *gargs) { int a; struct floor flbuf; @@ -2010,7 +2018,7 @@ void cmd_lflr(void) cprintf("%d Known floors:\n", LISTING_FOLLOWS); for (a = 0; a < MAXFLOORS; ++a) { - getfloor(&flbuf, a); + CtdlGetFloor(&flbuf, a); if (flbuf.f_flags & F_INUSE) { cprintf("%d|%s|%d\n", a, @@ -2046,7 +2054,7 @@ void cmd_cflr(char *argbuf) } for (a = 0; a < MAXFLOORS; ++a) { - getfloor(&flbuf, a); + CtdlGetFloor(&flbuf, a); /* note any free slots while we're scanning... */ if (((flbuf.f_flags & F_INUSE) == 0) @@ -2157,3 +2165,35 @@ void cmd_eflr(char *argbuf) cprintf("%d Ok\n", CIT_OK); } + + +/*****************************************************************************/ +/* MODULE INITIALIZATION STUFF */ +/*****************************************************************************/ + +CTDL_MODULE_INIT(room_ops) +{ + CtdlRegisterProtoHook(cmd_lrms, "LRMS", "Autoconverted. TODO: document me."); + CtdlRegisterProtoHook(cmd_lkra, "LKRA", "Autoconverted. TODO: document me."); + CtdlRegisterProtoHook(cmd_lkrn, "LKRN", "Autoconverted. TODO: document me."); + CtdlRegisterProtoHook(cmd_lkro, "LKRO", "Autoconverted. TODO: document me."); + CtdlRegisterProtoHook(cmd_lzrm, "LZRM", "Autoconverted. TODO: document me."); + CtdlRegisterProtoHook(cmd_lprm, "LPRM", "Autoconverted. TODO: document me."); + CtdlRegisterProtoHook(cmd_goto, "GOTO", "Autoconverted. TODO: document me."); + CtdlRegisterProtoHook(cmd_whok, "WHOK", "Autoconverted. TODO: document me."); + CtdlRegisterProtoHook(cmd_rdir, "RDIR", "Autoconverted. TODO: document me."); + CtdlRegisterProtoHook(cmd_getr, "GETR", "Autoconverted. TODO: document me."); + CtdlRegisterProtoHook(cmd_setr, "SETR", "Autoconverted. TODO: document me."); + CtdlRegisterProtoHook(cmd_geta, "GETA", "Autoconverted. TODO: document me."); + CtdlRegisterProtoHook(cmd_seta, "SETA", "Autoconverted. TODO: document me."); + CtdlRegisterProtoHook(cmd_rinf, "RINF", "Autoconverted. TODO: document me."); + CtdlRegisterProtoHook(cmd_kill, "KILL", "Autoconverted. TODO: document me."); + CtdlRegisterProtoHook(cmd_cre8, "CRE8", "Autoconverted. TODO: document me."); + CtdlRegisterProtoHook(cmd_einf, "EINF", "Autoconverted. TODO: document me."); + CtdlRegisterProtoHook(cmd_lflr, "LFLR", "Autoconverted. TODO: document me."); + CtdlRegisterProtoHook(cmd_cflr, "CFLR", "Autoconverted. TODO: document me."); + CtdlRegisterProtoHook(cmd_kflr, "KFLR", "Autoconverted. TODO: document me."); + CtdlRegisterProtoHook(cmd_eflr, "EFLR", "Autoconverted. TODO: document me."); + /* return our Subversion id for the Log */ + return "$Id$"; +}