c21c9224c1682b5fc71aa85380744e61a1ee4c3e
[projects/chimara/chimara.git] / babel / magscrolls.c
1 /* magscrolls.c  Treaty of Babel module for Z-code files\r
2  * 2006 By L. Ross Raszewski\r
3  *\r
4  * This file depends on treaty_builder.h\r
5  *\r
6  * This file is public domain, but note that any changes to this file\r
7  * may render it noncompliant with the Treaty of Babel\r
8  */\r
9 \r
10 #define FORMAT magscrolls\r
11 #define HOME_PAGE "http://www.if-legends.org/~msmemorial/memorial.htm"\r
12 #define FORMAT_EXT ".mag"\r
13 #define NO_COVER\r
14 #define NO_METADATA\r
15 \r
16 #include "treaty_builder.h"\r
17 #include <ctype.h>\r
18 #include <stdio.h>\r
19 \r
20 struct maginfo\r
21 {\r
22   int gv;\r
23   char header[21];\r
24   char *title;\r
25   int bafn;\r
26   int year;\r
27   char *ifid;\r
28   char *author;\r
29   char *meta;\r
30 };\r
31 \r
32 \r
33 static struct maginfo manifest[] = {\r
34         { 0, "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000",\r
35           "The Pawn",\r
36           0,\r
37           1985,\r
38           "MAGNETIC-1",\r
39           "Rob Steggles",\r
40         },\r
41         { 1, "\000\004\000\001\007\370\000\000\340\000\000\000\041\064\000\000\040\160\000\000",\r
42           "Guild of Thieves",\r
43           0,\r
44           1987,\r
45           "MAGNETIC-2",\r
46           "Rob Steggles",\r
47         },\r
48         { 2, "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000",\r
49           "Jinxter",\r
50           0,\r
51           1987,\r
52           "MAGNETIC-3",\r
53           "Georgina Sinclair and Michael Bywater",\r
54         },\r
55         { 4, "\000\004\000\001\045\140\000\001\000\000\000\000\161\017\000\000\035\210\000\001",\r
56           "Corruption",\r
57           0,\r
58           1988,\r
59           "MAGNETIC-4",\r
60           "Rob Steggles and Hugh Steers",\r
61         },\r
62         { 4, "\000\004\000\001\044\304\000\001\000\000\000\000\134\137\000\000\040\230\000\001",\r
63           "Fish!",\r
64           0,\r
65           1988,\r
66           "MAGNETIC-5",\r
67           "John Molloy, Pete Kemp, Phil South, Rob Steggles",\r
68         },\r
69         { 4, "\000\003\000\000\377\000\000\000\340\000\000\000\221\000\000\000\036\000\000\001",\r
70           "Corruption",\r
71           0,\r
72           1988,\r
73           "MAGNETIC-4",\r
74           "Rob Steggles and Hugh Steers",\r
75         },\r
76         { 4, "\000\003\000\001\000\000\000\000\340\000\000\000\175\000\000\000\037\000\000\001",\r
77           "Fish!",\r
78           0,\r
79           1988,\r
80           "MAGNETIC-5",\r
81           "John Molloy, Pete Kemp, Phil South, Rob Steggles",\r
82         },\r
83         { 4, "\000\003\000\000\335\000\000\000\140\000\000\000\064\000\000\000\023\000\000\000",\r
84           "Myth",\r
85           0,\r
86           1989,\r
87           "MAGNETIC-6",\r
88           "Paul Findley",\r
89         },\r
90         { 4, "\000\004\000\001\122\074\000\001\000\000\000\000\114\146\000\000\057\240\000\001",\r
91           "Wonderland",\r
92           0,\r
93           1990,\r
94           "MAGNETIC-7",\r
95           "David Bishop",\r
96         },\r
97         { 0, "0", NULL, 0, 0, NULL, NULL }\r
98         };\r
99 \r
100 static int32 get_story_file_IFID(void *story_file, int32 extent, char *output, int32 output_extent)\r
101 {\r
102  int i;\r
103  unsigned char *sf=(unsigned char *)story_file;\r
104  if (extent < 42) return INVALID_STORY_FILE_RV;\r
105 \r
106  for(i=0;manifest[i].title;i++)\r
107   if ((sf[13]<3 && manifest[i].gv==sf[13]) || memcmp(manifest[i].header,sf+12,20)==0)\r
108    {\r
109     ASSERT_OUTPUT_SIZE(((int32) strlen(manifest[i].ifid)+1));\r
110     strcpy(output,manifest[i].ifid);\r
111     return 1;\r
112    }\r
113  strcpy(output,"MAGNETIC-");\r
114  return INCOMPLETE_REPLY_RV;\r
115 }\r
116 \r
117 static int32 claim_story_file(void *story_file, int32 extent)\r
118 {\r
119  if (extent<42 ||\r
120      memcmp(story_file,"MaSc",4)\r
121     ) return INVALID_STORY_FILE_RV;\r
122  return VALID_STORY_FILE_RV;\r
123 }\r
124 \r