home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The World of Computer Software
/
World_Of_Computer_Software-02-387-Vol-3of3.iso
/
d
/
d-linux.zip
/
dm-dist
/
insert_any.c
< prev
next >
Wrap
C/C++ Source or Header
|
1991-03-01
|
4KB
|
162 lines
/**************************************************************************
* 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 <stdio.h>
#include <string.h>
#include <ctype.h>
#include <time.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();
}
}
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], "r")))
{
printf("Could not open the builders file.\n\r");
exit();
}
if (!(fl_m2 = fopen(argv[2], "r")))
{
printf("Could not open 'old' file.\n\r");
exit();
}
merge(fl_m1, fl_m2);
fclose(fl_m1);
fclose(fl_m2);
}