setup.c

Go to the documentation of this file.
00001 
00010 #include        <stdio.h>
00011 #include        <stdlib.h>
00012 #include        "advent.h"
00013 
00014 _PROTOTYPE(int main, (void));
00015 _PROTOTYPE(void file_error, (char *));
00016 _PROTOTYPE(void encode, (unsigned char *));
00017 
00018 int main()
00019 {
00020 
00021     FILE *isam, *src, *dest;
00022     char itxt[255];
00023     int cnt, i;
00024     long llen;
00025     char filename[12];
00026     static char *headername[] = {
00027        "idx1[MAXLOC]", "idx2[MAXLOC]", "idx3[MAXOBJ]", "idx4[MAXMSG]",
00028     };
00029 
00030     long x29 = (1L << 29), x30 = (1L << 30);
00031     if (!(x30 / 2 == x29 && 0L < x30 && x29 < x30)) {
00032         fprintf(stderr, "Sorry, advent needs 32-bit `long int's.\n");
00033         exit(EXIT_FAILURE);
00034     }
00035     isam = fopen("advtext.h", "w");
00036     if (!isam) {
00037         fprintf(stderr, "Sorry, I can't open advtext.h...\n");
00038         exit(EXIT_FAILURE);
00039     }
00040     fprintf(isam, "\n/*\theader: ADVTEXT.H\t\t\t\t\t*/\n\n\n");
00041 
00042     for (i = 1; i <= 4; i++) {
00043         cnt = -1;
00044         llen = 0L;
00045         sprintf(filename, "advent%d.txt", i);
00046         src = fopen(filename, "r");
00047         if (!src)
00048             file_error(filename);
00049         sprintf(filename, "advent%d.dat", i);
00050         dest = fopen(filename, "w");
00051         if (!dest)
00052             file_error(filename);
00053         fprintf(isam, "long\t%s = {\n\t", headername[i - 1]);
00054         while (fgets(itxt, 255, src)) {
00055             encode((unsigned char *) itxt);
00056             if (fprintf(dest, "%s\n", itxt) == EOF)
00057                 file_error(filename);
00058             if (itxt[0] == '#') {
00059                 if (llen)
00060                     fprintf(isam, "%ld,%s\t", llen,
00061                             &"\0\0\0\0\0\0\0\n"[++cnt & 7]);
00062                 llen = ftell(dest);
00063                 if (llen <= 0) {
00064                     fprintf(stderr, "ftell err in %s\n", filename);
00065                     exit(EXIT_FAILURE);
00066                 }                       /* if (!llen)    */
00067             }                           /* if (itxt[0])  */
00068         }                               /* while fgets   */
00069         if (fprintf(isam, "%ld\n\t};\n\n", llen) == EOF)
00070             file_error("advtext.h");
00071         fclose(src);
00072         if (fclose(dest) == EOF)
00073             file_error(filename);
00074     }
00075 
00076     if (fclose(isam) == EOF)
00077         file_error("advtext.h");
00078     return EXIT_SUCCESS;
00079 }                                       /* main          */
00080 
00081 void file_error(filename)
00082 char *filename;
00083 {
00084     perror(filename);
00085     exit(EXIT_FAILURE);
00086 }
00087 
00088 _CONST unsigned char key[4] = {'c' | 0x80, 'L' | 0x80, 'y' | 0x80, 'D' | 0x80};
00089 
00090 void encode(msg)
00091 unsigned char *msg;
00092 {
00093     register int i;
00094 
00095     for (i = 1; msg[i]; i++)
00096         msg[i] ^= key[i & 3];
00097     msg[--i] = '\0';
00098     return;
00099 }

Generated on Fri Apr 14 22:56:39 2006 for minix by  doxygen 1.4.6