/**************************************************************************
* File: insert_any.c Part of DikuMud *
* Usage: Merges DikuMud wld/obj/mob/zon files *
* Copyright (C) 1990, 1991 - see 'license.doc' for complete information. *
***************************************************************************/
#include "os.h"
#define MAX_LINE 256
/*************************************************************************
* Merge routines *
*********************************************************************** */
void assume (int faktisk, int antal, int place, char *errmsg)
{
if (antal != faktisk) {
printf ("Error has occured at #%d.\n\r", place);
printf ("Message is : %s\n\r", errmsg);
printf ("Actual number read is %d\n\r", faktisk);
exit (1);
}
}
void merge (FILE * fl1, FILE * fl2)
{
int antal;
int eof1, eof2;
int num1, num2;
char buf1[MAX_LINE], buf2[MAX_LINE];
char tbuf1[MAX_LINE], tbuf2[MAX_LINE];
eof1 = 0;
eof2 = 0;
FGETS (buf1, MAX_LINE, fl1);
antal = sscanf (buf1, " #%d ", &num1);
assume (antal, 1, 0, "No #xxxx found next (old)");
FGETS (buf2, MAX_LINE, fl2);
antal = sscanf (buf2, " #%d ", &num2);
assume (antal, 1, 0, "No #xxxx found next (new)");
FGETS (buf1, MAX_LINE, fl1);
eof1 = (buf1[0] == '$');
FGETS (buf2, MAX_LINE, fl2);
eof2 = (buf2[0] == '$');
for (;;) {
if (eof1) {
/* Purge file 2 */
printf ("#%d\n", num2);
printf ("%s", buf2);
while (FGETS (buf2, MAX_LINE, fl2))
printf ("%s", buf2);
return;
}
if (eof2) {
/* Purge file 1 */
printf ("#%d\n", num1);
printf ("%s", buf1);
while (FGETS (buf1, MAX_LINE, fl1))
printf ("%s", buf1);
return;
}
/* Merge the rooms */
if (num1 < num2) {
printf ("#%d\n", num1);
printf ("%s", buf1);
do {
FGETS (buf1, MAX_LINE, fl1);
antal = sscanf (buf1, " #%d ", &num1);
if (antal != 1)
printf ("%s", buf1);
} while (antal != 1);
FGETS (buf1, MAX_LINE, fl1);
eof1 = (buf1[0] == '$');
} else if (num1 == num2) { /* Replace the room */
printf ("#%d\n", num1);
printf ("%s", buf1);
do { /* Print from "new" file */
FGETS (buf1, MAX_LINE, fl1);
antal = sscanf (buf1, " #%d ", &num1);
if (antal != 1)
printf ("%s", buf1);
} while (antal != 1);
do { /* Skip the "old" file */
FGETS (buf2, MAX_LINE, fl2);
antal = sscanf (buf2, " #%d ", &num2);
} while (antal != 1);
FGETS (buf1, MAX_LINE, fl1);
eof1 = (buf1[0] == '$');
FGETS (buf2, MAX_LINE, fl2);
eof2 = (buf2[0] == '$');
} else { /* Print a room from "old" file */
printf ("#%d\n", num2);
printf ("%s", buf2);
do {
FGETS (buf2, MAX_LINE, fl2);
antal = sscanf (buf2, " #%d ", &num2);
if (antal != 1)
printf ("%s", buf2);
} while (antal != 1);
FGETS (buf2, MAX_LINE, fl2);
eof2 = (buf2[0] == '$');
}
}
}
int main (int argc, char *argv[])
{
FILE *fl_m1, *fl_m2;
if (argc != 3) {
printf ("Usage : insert_any <New Merge File> <Old Merge File>\n\r");
printf
("Both files must use # numbering system, and terminate with $~\n\r");
exit (0);
}
if (!(fl_m1 = fopen (argv[1], "rb"))) {
printf ("Could not open the builders file.\n\r");
exit (1);
}
if (!(fl_m2 = fopen (argv[2], "rb"))) {
printf ("Could not open 'old' file.\n\r");
exit (1);
}
merge (fl_m1, fl_m2);
fclose (fl_m1);
fclose (fl_m2);
return 0;
}