At 01:43 PM 2/18/99 -0500, you wrote:
>I know the aliases I have used to test this are less than 127 and it still
>crashes. Plain and simple, if you have an alias and you type save, the mud
>dies. I can't figure it out. :(
>Does anyone out there have some alias code that patches cleanly with
>circle30bpl14???? Or maybe a fix for this situation?
>
Here is my alias.c file it may contain errors since im writing this in my
mailer and not pasting actual code :)
May not even work for you but it should give you some basic ideas of
how to write your own.
#include "conf.h"
#include "sysdep.h"
#include "structs.h"
#include "utils.h"
#include "db.h"
#include "comm.h"
#include "interpreter.h"
#include "constants.h"
/* Externs */
extern struct player_index_element *player_table;
extern int find_name(char *name);
void write_aliases(struct char_data *ch)
{
FILE *outfile;
struct alias *temp;
char outname[40], bits[127], *buf;
int length, i;
if (IS_NPC(ch) || GET_PFILEPOS(ch) < 0)
return;
memset(bits, 0, sizeof(bits));
memset(outname, 0, sizeof(outname));
for (i = 0; (*(bits + i) = LOWER(*(ch->player.name + i))); i++);
sprintf(outname, "%s%c/%s%s", PLR_PREFIX, *bits, bits, ALIAS_SUFFIX);
if (!(outfile = fopen(outname, "w"))) {
sprintf(buf2, "SYSERR: Error opening output file: %s", outname);
mudlog(buf2, NRM, MAX(LVL_PRIEST, GET_INVIS_LEV(ch)), TRUE);
send_to_char("ERROR: There was an error opening your alias file, please
report.\r\n", ch);
return;
}
if (!GET_ALIASES(ch)) {
remove(outname);
return;
}
temp = GET_ALIASES(ch);
while (temp) {
length = strlen(temp->alias);
if (length > MAX_RAW_INPUT_LENGTH) {
temp = temp->next;
continue;
}
fprintf(outfile, "%d\n", length);
fprintf(outfile, "%s\n", temp->alias);
buf = temp->replacement;
while (*++buf == ' ');
length = strlen(buf);
fprintf(outfile, "%d\n, length);
fprintf(outfile, "%s\n", buf);
fprintf(outfile, "%d\n", temp->type);
temp = temp->next;
}
fclose(outfile);
}
void read_aliases(struct char_data *ch)
{
FILE *file;
struct alias *t2;
char filename[40];
char temp_buf[MAX_RAW_INPUT_LENGTH + 5], buf[MAX_RAW_INPUT_LENGTH + 5];
long id;
int length;
if (IS_NPC(ch) || GET_PFILEPOS(ch) < 0)
return;
if ((id = find_name(GET_NAME(ch))) < 0) {
sprintf(buf2, "SYSERR: Invalid idnum in (read_aliases) for player
(%s)", GET_NAME(ch));
mudlog(buf2, NRM, MAX(LVL_PRIEST, GET_INVIS_LEV(ch)), TRUE);
return;
} else {
sprintf(filename, "%s%c/%s%s", PLR_PREFIX, *player_table[id].name,
player_table[id].name, ALIAS_SUFFIX);
if (!(file = fopen(filename, "r")))
return;
CREATE(GET_ALIASES(ch), struct alias, 1);
t2 = GET_ALIASES(ch);
do {
fscanf(file, "%d\n", &length);
fgets(buf, length + 1, file);
t2->alias = strdup(buf);
fscanf(file, "%d\n", &length);
fgets(buf, length + 1, file);
strcpy(temp_buf, " ");
strcat(temp_buf, buf);
t2->replacement = strdup(temp_buf);
fscanf(file, "%d\n", &length);
t2->type = length;
if (!feof(file)) {
CREATE(t2->next, struct alias, 1);
t2 = t2->next;
}
} while (!feof(file));
}
fclose(file);
}
+------------------------------------------------------------+
| Ensure that you have read the CircleMUD Mailing List FAQ: |
| http://qsilver.queensu.ca/~fletchra/Circle/list-faq.html |
+------------------------------------------------------------+
This archive was generated by hypermail 2b30 : 12/15/00 PST