/** * @file extraDesc.c * @ingroup extradesc * * Extra Description code * * @author Geoff Davis <geoff@circlemudsquared.org> * @author Greg Buxton <greg@circlemudsquared.org> * * @par Copyright: * Copyright (C) 2006 Geoff Davis <geoff@circlemudsquared.org><br> * Greg Buxton <greg@circlemudsquared.org> * * @par * Copyright (C) 1993, 94 by the Trustees of the Johns Hopkins University<br> * CircleMUD is based on DikuMUD, Copyright (C) 1990, 1991. * * @par * All rights reserved. See license.doc for complete information. * * @package cs * @version 1.0 */ #define __EXTRADESC_C__ #include "base.h" #include "structs.h" #include "utils.h" #include "comm.h" #include "constants.h" #include "dao.h" #include "db.h" #include "handler.h" #include "log.h" #include "interpreter.h" #include "spells.h" #include "extraDesc.h" /** * Converts a list of extra descriptions to their corresponding DAOs. * @param parentDao the container DAO to contain the extraDescription DAOs * @param list the list of extra descriptions to be converted */ void extraDescData_listToDao(daoData_t *parentDao, extraDescData_t *list) { if (parentDao == NULL) { log("extraDescData_listToDao(): invalid 'parentDao' daoData_t."); } else if (list == NULL) { log("extraDescData_listToDao(): invalid 'list' extraDescData_t."); } else { /* Declare a counter variable */ register size_t count = 0UL; /* Create the container for the extra description DAOs. */ daoData_t *subContainerDao = dao_newChild(parentDao, "extraDescriptions"); /* Iterate over the list of extra descriptions. */ while (list) { /* Convert the extra description. */ extraDescData_toDao(subContainerDao, count++, list); /* Advance to the next extra description in the list. */ list = list->next; } } } /** * Save a specific extraDescData_t to DAO * @param parentDao the container DAO to contain the extraDescription DAO * @param num Number of the extraDescData_t in the list * @param extra extraDescData_t to save */ void extraDescData_toDao(daoData_t *parentDao, int num, extraDescData_t *extra) { if (parentDao == NULL) { log("extraDescData_toDao(): invalid 'parentDao' daoData_t."); } else if (extra == NULL) { log("extraDescData_toDao(): invalid 'entry' extraDescData_t."); } else { /* Create a container DAO to contain the extra description. */ daoData_t *subContainerDao = dao_newChild(parentDao, "%d", num); /* Write the extra description's keywords to the DAO. */ dao_newScalar(subContainerDao, "keywords", "%s", extra->keyword); /* Write the extra description's description to the DAO. */ dao_newScalar(subContainerDao, "description", "%s", extra->description); } } /* ************************************************************************ */ /* Load Extra Desc Data from DAO */ /* ************************************************************************ */ /** * Load extra descriptions from extraDescList dao * * @param eDescListDao list of extra descriptions in dao format * @return pointer to loaded extra description list */ extraDescData_t *extraDescData_listFromDao(daoData_t *eDescListDao) { extraDescData_t *extraDescs = NULL, *tmp = NULL, *i = NULL; daoData_t *eDao = NULL; if (eDescListDao == NULL) { log("extraDescData_listFromDao(): invalid 'eDescDaoList' daoData_t."); } else { /* Iterate over the extra description container DAO. */ for (eDao = eDescListDao->children; eDao; eDao = eDao->next) { /* Read an extra description struct from each child DAO. */ tmp = extraDescData_fromDao(eDao); if (tmp) { tmp->next = NULL; if (extraDescs) { i = extraDescs; while (i && i->next) { i = i->next; } i->next = tmp; } else { extraDescs = tmp; } } } } /* Return the list of extra description structs. */ return (extraDescs); } /** * Load an extra description from it's dao entry * @param eDescDao the extra description in dao format * @return pointer to loaded extra description */ extraDescData_t *extraDescData_fromDao(daoData_t *eDescDao) { extraDescData_t *extraDesc = NULL; if (eDescDao == NULL) { log("extraDescData_fromDao(): invalid 'eDescDao' daoData_t."); } else { /* Allocate an extra description struct. */ CREATE(extraDesc, extraDescData_t, 1); /* Read the keywords from the extra description DAO. */ extraDesc->keyword = strdup(dao_queryString(eDescDao, "keywords", "keyword")); /* Read the description from the extra description DAO. */ extraDesc->description = strdup(dao_queryString(eDescDao, "description", "This extra description needs a description!\r\n")); /* There's no 'next' extra description yet. */ extraDesc->next = NULL; } /* Return the extra description struct. */ return (extraDesc); }