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 }
00067 }
00068 }
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 }
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 }