mirror of
https://github.com/tbamud/tbamud.git
synced 2026-02-18 17:41:45 +01:00
Setting up 3.5.0 as trunk
This commit is contained in:
190
src/util/shopconv.c
Executable file
190
src/util/shopconv.c
Executable file
@@ -0,0 +1,190 @@
|
||||
/* code to convert 2.20 shop files to 3.0 shop files - written by Jeff Fink */
|
||||
|
||||
#include "conf.h"
|
||||
#include "sysdep.h"
|
||||
|
||||
#include "structs.h"
|
||||
#include "db.h"
|
||||
#include "utils.h"
|
||||
#include "shop.h"
|
||||
|
||||
void basic_mud_log(const char *x, ...)
|
||||
{
|
||||
puts(x);
|
||||
}
|
||||
|
||||
char *fread_string(FILE * fl, const char *error)
|
||||
{
|
||||
char buf[MAX_STRING_LENGTH], tmp[512], *rslt, *point;
|
||||
int flag;
|
||||
|
||||
*buf = '\0';
|
||||
|
||||
do {
|
||||
if (!fgets(tmp, sizeof(tmp), fl)) {
|
||||
printf("fread_string: format error at or near %s\n", error);
|
||||
exit(1);
|
||||
}
|
||||
if (strlen(tmp) + strlen(buf) > MAX_STRING_LENGTH) {
|
||||
printf("SYSERR: fread_string: string too large (shopconv.c)");
|
||||
exit(1);
|
||||
} else
|
||||
strcat(buf, tmp);
|
||||
|
||||
for (point = buf + strlen(buf) - 2; point >= buf && isspace(*point);
|
||||
point--);
|
||||
if ((flag = (*point == '~'))) {
|
||||
if (*(buf + strlen(buf) - 3) == '\n')
|
||||
*(buf + strlen(buf) - 2) = '\0';
|
||||
else
|
||||
*(buf + strlen(buf) - 2) = '\0';
|
||||
}
|
||||
} while (!flag);
|
||||
|
||||
/* do the allocate boogie */
|
||||
|
||||
if (strlen(buf) > 0) {
|
||||
CREATE(rslt, char, strlen(buf) + 1);
|
||||
strcpy(rslt, buf);
|
||||
} else
|
||||
rslt = NULL;
|
||||
return (rslt);
|
||||
}
|
||||
|
||||
|
||||
void do_list(FILE * shop_f, FILE * newshop_f, int max)
|
||||
{
|
||||
int count, temp;
|
||||
char buf[MAX_STRING_LENGTH];
|
||||
|
||||
for (count = 0; count < max; count++) {
|
||||
fscanf(shop_f, "%d", &temp);
|
||||
fgets(buf, MAX_STRING_LENGTH - 1, shop_f);
|
||||
if (temp > 0)
|
||||
fprintf(newshop_f, "%d%s", temp, buf);
|
||||
}
|
||||
|
||||
fprintf(newshop_f, "-1\n");
|
||||
}
|
||||
|
||||
|
||||
void do_float(FILE * shop_f, FILE * newshop_f)
|
||||
{
|
||||
float f;
|
||||
char str[20];
|
||||
|
||||
fscanf(shop_f, "%f \n", &f);
|
||||
sprintf(str, "%f", f);
|
||||
while ((str[strlen(str) - 1] == '0') && (str[strlen(str) - 2] != '.'))
|
||||
str[strlen(str) - 1] = 0;
|
||||
fprintf(newshop_f, "%s \n", str);
|
||||
}
|
||||
|
||||
|
||||
void do_int(FILE * shop_f, FILE * newshop_f)
|
||||
{
|
||||
int i;
|
||||
|
||||
fscanf(shop_f, "%d \n", &i);
|
||||
fprintf(newshop_f, "%d \n", i);
|
||||
}
|
||||
|
||||
|
||||
void do_string(FILE * shop_f, FILE * newshop_f, char *msg)
|
||||
{
|
||||
char *ptr;
|
||||
|
||||
ptr = fread_string(shop_f, msg);
|
||||
fprintf(newshop_f, "%s~\n", ptr);
|
||||
free(ptr);
|
||||
}
|
||||
|
||||
|
||||
int boot_the_shops(FILE * shop_f, FILE * newshop_f, char *filename)
|
||||
{
|
||||
char *buf, buf2[150];
|
||||
int temp, count;
|
||||
|
||||
sprintf(buf2, "beginning of shop file %s", filename);
|
||||
fprintf(newshop_f, "CircleMUD %s Shop File~\n", VERSION3_TAG);
|
||||
for (;;) {
|
||||
buf = fread_string(shop_f, buf2);
|
||||
if (*buf == '#') { /* New shop */
|
||||
sscanf(buf, "#%d\n", &temp);
|
||||
sprintf(buf2, "shop #%d in shop file %s", temp, filename);
|
||||
fprintf(newshop_f, "#%d~\n", temp);
|
||||
free(buf); /* Plug memory leak! */
|
||||
printf(" #%d\n", temp);
|
||||
|
||||
do_list(shop_f, newshop_f, MAX_PROD); /* Produced Items */
|
||||
|
||||
do_float(shop_f, newshop_f); /* Ratios */
|
||||
do_float(shop_f, newshop_f);
|
||||
|
||||
do_list(shop_f, newshop_f, MAX_TRADE); /* Bought Items */
|
||||
|
||||
for (count = 0; count < 7; count++) /* Keeper msgs */
|
||||
do_string(shop_f, newshop_f, buf2);
|
||||
|
||||
for (count = 0; count < 5; count++) /* Misc */
|
||||
do_int(shop_f, newshop_f);
|
||||
fprintf(newshop_f, "-1\n");
|
||||
for (count = 0; count < 4; count++) /* Open/Close */
|
||||
do_int(shop_f, newshop_f);
|
||||
|
||||
} else {
|
||||
if (*buf == '$') { /* EOF */
|
||||
free(buf); /* Plug memory leak! */
|
||||
fprintf(newshop_f, "$~\n");
|
||||
break;
|
||||
} else if (strstr(buf, VERSION3_TAG)) {
|
||||
printf("%s: New format detected, conversion aborted!\n", filename);
|
||||
free(buf); /* Plug memory leak! */
|
||||
return (1);
|
||||
}
|
||||
}
|
||||
}
|
||||
return (0);
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
FILE *sfp, *nsfp;
|
||||
char fn[256], part[256];
|
||||
int result, index;
|
||||
|
||||
if (argc < 2) {
|
||||
printf("Usage: shopconv <file1> [file2] [file3] ...\n");
|
||||
exit(1);
|
||||
}
|
||||
for (index = 1; index < argc; index++) {
|
||||
sprintf(fn, "%s", argv[index]);
|
||||
sprintf(part, "mv %s %s.tmp", fn, fn);
|
||||
system(part);
|
||||
sprintf(part, "%s.tmp", fn);
|
||||
sfp = fopen(part, "r");
|
||||
if (sfp == NULL) {
|
||||
strcat(fn, " could not be opened");
|
||||
perror(fn);
|
||||
} else {
|
||||
if ((nsfp = fopen(fn, "w")) == NULL) {
|
||||
printf("Error writing to %s.\n", fn);
|
||||
continue;
|
||||
}
|
||||
printf("%s:\n", fn);
|
||||
result = boot_the_shops(sfp, nsfp, fn);
|
||||
fclose(nsfp);
|
||||
fclose(sfp);
|
||||
if (result) {
|
||||
sprintf(part, "mv %s.tmp %s", fn, fn);
|
||||
system(part);
|
||||
} else {
|
||||
sprintf(part, "mv %s.tmp %s.bak", fn, fn);
|
||||
system(part);
|
||||
printf("Done!\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return (0);
|
||||
}
|
||||
Reference in New Issue
Block a user