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 >
C/C++ Source or Header  |  1991-03-01  |  4KB  |  162 lines

  1. /**************************************************************************
  2. *  File: insert_any.c                                     Part of DikuMud *
  3. *  Usage: Merges DikuMud wld/obj/mob/zon files                            *
  4. *  Copyright (C) 1990, 1991 - see 'license.doc' for complete information. *
  5. ***************************************************************************/
  6.  
  7. #include <stdio.h>
  8. #include <string.h>
  9. #include <ctype.h>
  10. #include <time.h>
  11.  
  12. #define MAX_LINE  256
  13.  
  14. /*************************************************************************
  15. *  Merge routines                                                        *
  16. *********************************************************************** */
  17.  
  18.  
  19.  
  20. void assume(int faktisk, int antal, int place, char *errmsg)
  21. {
  22.     if (antal != faktisk) {
  23.         printf("Error has occured at #%d.\n\r", place);
  24.         printf("Message is : %s\n\r", errmsg);
  25.         printf("Actual number read is %d\n\r", faktisk);
  26.         exit();
  27.     }
  28. }
  29.  
  30. void merge(FILE *fl1, FILE *fl2)
  31. {
  32.     int antal;
  33.     int eof1, eof2;
  34.     int num1, num2;
  35.     char buf1[MAX_LINE], buf2[MAX_LINE];
  36.     char tbuf1[MAX_LINE], tbuf2[MAX_LINE];
  37.  
  38.     eof1 = 0;
  39.     eof2 = 0;
  40.  
  41.     fgets(buf1, MAX_LINE, fl1);
  42.     antal = sscanf(buf1, " #%d ", &num1);
  43.     assume(antal, 1, 0, "No #xxxx found next (old)");
  44.  
  45.     fgets(buf2, MAX_LINE, fl2);
  46.     antal = sscanf(buf2, " #%d ", &num2);
  47.     assume(antal, 1, 0, "No #xxxx found next (new)");
  48.  
  49.  
  50.     fgets(buf1, MAX_LINE, fl1);
  51.     eof1 = (buf1[0] == '$');
  52.  
  53.     fgets(buf2, MAX_LINE, fl2);
  54.     eof2 = (buf2[0] == '$');
  55.  
  56.     for (;;) {
  57.  
  58.         if (eof1) {
  59.             /* Purge file 2 */
  60.  
  61.             printf("#%d\n", num2);
  62.             printf("%s", buf2);
  63.             while (fgets(buf2, MAX_LINE, fl2))
  64.                 printf("%s", buf2);
  65.             return;
  66.         }
  67.  
  68.         if (eof2) {
  69.             /* Purge file 1 */
  70.             printf("#%d\n", num1);
  71.             printf("%s", buf1);
  72.             while (fgets(buf1, MAX_LINE, fl1))
  73.                 printf("%s", buf1);
  74.             return;
  75.         }
  76.             
  77.  
  78.         /* Merge the rooms */
  79.  
  80.         if (num1 < num2) {
  81.             printf("#%d\n", num1);
  82.             printf("%s", buf1);
  83.             do {
  84.                 fgets(buf1, MAX_LINE, fl1);
  85.                 antal = sscanf(buf1, " #%d ", &num1);
  86.                 if (antal!=1)
  87.                     printf("%s", buf1);
  88.             } while (antal != 1);
  89.  
  90.             fgets(buf1, MAX_LINE, fl1);
  91.             eof1 = (buf1[0] == '$');
  92.  
  93.         } else if (num1 == num2) {    /* Replace the room */
  94.  
  95.             printf("#%d\n", num1);
  96.             printf("%s", buf1);
  97.             do { /* Print from "new" file */
  98.                 fgets(buf1, MAX_LINE, fl1);
  99.                 antal = sscanf(buf1, " #%d ", &num1);
  100.                 if (antal!=1)
  101.                     printf("%s", buf1);
  102.             } while (antal != 1);
  103.  
  104.             do { /* Skip the "old" file */
  105.                 fgets(buf2, MAX_LINE, fl2);
  106.                 antal = sscanf(buf2, " #%d ", &num2);
  107.             } while (antal != 1);
  108.  
  109.             fgets(buf1, MAX_LINE, fl1);
  110.             eof1 = (buf1[0] == '$');
  111.  
  112.             fgets(buf2, MAX_LINE, fl2);
  113.             eof2 = (buf2[0] == '$');
  114.  
  115.         } else { /* Print a room from "old" file */
  116.  
  117.             printf("#%d\n", num2);
  118.             printf("%s", buf2);
  119.             do {
  120.                 fgets(buf2, MAX_LINE, fl2);
  121.                 antal = sscanf(buf2, " #%d ", &num2);
  122.                 if (antal!=1)
  123.                     printf("%s", buf2);
  124.             } while (antal != 1);
  125.  
  126.             fgets(buf2, MAX_LINE, fl2);
  127.             eof2 = (buf2[0] == '$');
  128.  
  129.         }
  130.  
  131.     }
  132. }
  133.  
  134.  
  135. int main(int argc, char *argv[])
  136. {
  137.     FILE *fl_m1, *fl_m2;
  138.  
  139.   if (argc != 3) {
  140.         printf("Usage : insert_any <New Merge File> <Old Merge File>\n\r");
  141.         printf("Both files must use # numbering system, and terminate with $~\n\r");
  142.         exit(0);
  143.     }
  144.  
  145.     if (!(fl_m1 = fopen(argv[1], "r")))
  146.     {
  147.         printf("Could not open the builders file.\n\r");
  148.         exit();
  149.     }
  150.  
  151.     if (!(fl_m2 = fopen(argv[2], "r")))
  152.     {
  153.         printf("Could not open 'old' file.\n\r");
  154.         exit();
  155.     }
  156.  
  157.     merge(fl_m1, fl_m2);
  158.  
  159.     fclose(fl_m1);
  160.     fclose(fl_m2);
  161. }
  162.