| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151 |
- /*
- * Copyright (C) 2000,2001 Florian Sander
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
- struct slang_mt_content {
- struct slang_mt_content *next;
- struct slang_text *text;
- };
- struct slang_multitext {
- int nr;
- struct slang_mt_content *contents;
- };
- static struct slang_multitext *slang_mtext_add(struct slang_multitext *, char *);
- //static int slang_multitext_expmem(struct slang_multitext *);
- static void slang_multitext_free(struct slang_multitext *);
- static char *slang_multitext_getrandomtext(struct slang_multitext *);
- #ifndef SLANG_NOTYPES
- static struct slang_text *slang_multitext_find(struct slang_multitext *, char *);
- #endif
- #ifndef SLANG_NOGETALL
- static char *slang_multitext_get_first(struct slang_multitext *);
- static char *slang_multitext_get_next();
- #endif
- static struct slang_multitext *slang_mtext_add(struct slang_multitext *where, char *text)
- {
- struct slang_mt_content *oc, *nc;
- if (!where) {
- where = nmalloc(sizeof(struct slang_multitext));
- where->nr = 0;
- where->contents = NULL;
- }
- nc = nmalloc(sizeof(struct slang_mt_content));
- nc->next = NULL;
- nc->text = slang_text_parse(text);
- for (oc = where->contents; oc && oc->next; oc = oc->next);
- if (oc) {
- Assert(!oc->next);
- oc->next = nc;
- } else
- where->contents = nc;
- where->nr++;
- return where;
- }
- /*static int slang_multitext_expmem(struct slang_multitext *what)
- {
- struct slang_mt_content *content;
- int size = 0;
- if (!what) {
- debug0("WARNING! slang_multitext_expmem() called with NULL pointer!");
- return 0;
- }
- size += sizeof(struct slang_multitext);
- for (content = what->contents; content; content = content->next) {
- size += sizeof(struct slang_mt_content);
- size += slang_text_expmem(content->text);
- }
- return size;
- }*/
- static void slang_multitext_free(struct slang_multitext *what)
- {
- struct slang_mt_content *content, *next;
- if (!what) {
- debug0("WARNING! slang_multitext_free() called with NULL pointer!");
- return;
- }
- content = what->contents;
- while (content) {
- next = content->next;
- slang_text_free(content->text);
- nfree(content);
- content = next;
- }
- nfree(what);
- }
- static char *slang_multitext_getrandomtext(struct slang_multitext *where)
- {
- struct slang_mt_content *content;
- unsigned long x;
- if (!where)
- return NULL;
- x = random() % where->nr;
- for (content = where->contents; content; content = content->next)
- if (!x)
- return slang_text_get(content->text);
- else
- x--;
- // we should never reach this part
- debug0("warning: getrandomtext didn't find anything!");
- return NULL;
- }
- #ifndef SLANG_NOTYPES
- static struct slang_text *slang_multitext_find(struct slang_multitext *where, char *what)
- {
- struct slang_mt_content *content;
- Assert(where);
- for (content = where->contents; content; content = content->next) {
- Assert(content->text);
- if (!slang_text_strcasecmp(content->text, what))
- return content->text;
- }
- return NULL;
- }
- #endif
- #ifndef SLANG_NOGETALL
- static struct slang_mt_content *glob_mtext_content;
- static char *slang_multitext_get_first(struct slang_multitext *where)
- {
- Assert(where);
- glob_mtext_content = where->contents;
- if (glob_mtext_content)
- return slang_text_get(glob_mtext_content->text);
- else
- return NULL;
- }
- static char *slang_multitext_get_next()
- {
- glob_mtext_content = glob_mtext_content->next;
- if (glob_mtext_content)
- return slang_text_get(glob_mtext_content->text);
- else
- return NULL;
- }
- #endif
|