/*
* Expose various room operation functions from room_ops.c to the modules API
*/
+typedef struct CfgLineType CfgLineType;
+typedef struct RoomNetCfgLine RoomNetCfgLine;
+typedef struct OneRoomNetCfg OneRoomNetCfg;
unsigned CtdlCreateRoom(char *new_room_name,
int new_room_type,
void CtdlPutRoomLock(struct ctdlroom *qrbuf);
typedef void (*ForEachRoomCallBack)(struct ctdlroom *EachRoom, void *out_data);
void CtdlForEachRoom(ForEachRoomCallBack CB, void *in_data);
+typedef void (*ForEachRoomNetCfgCallBack)(struct ctdlroom *EachRoom, void *out_data, const OneRoomNetCfg *OneRNCFG);
+void CtdlForEachNetCfgRoom(ForEachRoomNetCfgCallBack CB,
+ void *in_data,
+ RoomNetCfg filter);
+
void CtdlDeleteRoom(struct ctdlroom *qrbuf);
int CtdlRenameRoom(char *old_name, char *new_name, int new_floor);
void CtdlUserGoto (char *where, int display_result, int transiently,
extern struct config config;
-typedef struct CfgLineType CfgLineType;
-typedef struct RoomNetCfgLine RoomNetCfgLine;
-typedef struct OneRoomNetCfg OneRoomNetCfg;
-
typedef void (*CfgLineParser)(const CfgLineType *ThisOne, StrBuf *Line, const char *LinePos, OneRoomNetCfg *rncfg);
typedef void (*CfgLineSerializer)(const CfgLineType *ThisOne, StrBuf *OuptputBuffer, OneRoomNetCfg *rncfg, RoomNetCfgLine *data);
typedef void (*CfgLineDeAllocator)(const CfgLineType *ThisOne, RoomNetCfgLine **data);
void SerializeGeneric(const CfgLineType *ThisOne, StrBuf *OutputBuffer, OneRoomNetCfg *sc, RoomNetCfgLine *data);
void DeleteGenericCfgLine(const CfgLineType *ThisOne, RoomNetCfgLine **data);
+const OneRoomNetCfg* CtdlGetNetCfgForRoom(long QRNumber);
typedef struct _nodeconf {
int DeleteMe;
}
}
+/*
+ * Traverse the room file...
+ */
+void CtdlForEachNetCfgRoom(ForEachRoomNetCfgCallBack CB,
+ void *in_data,
+ RoomNetCfg filter)
+{
+ struct ctdlroom qrbuf;
+ struct cdbdata *cdbqr;
+
+ cdb_rewind(CDB_ROOMS);
+
+ while (cdbqr = cdb_next_item(CDB_ROOMS), cdbqr != NULL) {
+ memset(&qrbuf, 0, sizeof(struct ctdlroom));
+ memcpy(&qrbuf, cdbqr->ptr,
+ ((cdbqr->len > sizeof(struct ctdlroom)) ?
+ sizeof(struct ctdlroom) : cdbqr->len)
+ );
+ cdb_free(cdbqr);
+ room_sanity_check(&qrbuf);
+ if (qrbuf.QRflags & QR_INUSE)
+ {
+ const OneRoomNetCfg* RNCfg;
+ RNCfg = CtdlGetNetCfgForRoom(qrbuf.QRnumber);
+ if ((RNCfg != NULL) &&
+ ((filter == maxRoomNetCfg) ||
+ (RNCfg->NetConfigs[filter] != NULL)))
+ {
+ CB(&qrbuf, in_data, RNCfg);
+ }
+ }
+ }
+}
+
/*
* delete_msglist() - delete room message pointers