--- /dev/null
+/* hugo.c Treaty of Babel module for hugo files\r
+ * 2006 By L. Ross Raszewski\r
+ *\r
+ * This file depends on treaty_builder.h\r
+ *\r
+ * This file is public domain, but note that any changes to this file\r
+ * may render it noncompliant with the Treaty of Babel\r
+ */\r
+\r
+#define FORMAT hugo\r
+#define HOME_PAGE "http://www.generalcoffee.com"\r
+#define FORMAT_EXT ".hex"\r
+#define NO_METADATA\r
+#define NO_COVER\r
+\r
+#include "treaty_builder.h"\r
+#include <ctype.h>\r
+#include <stdio.h>\r
+\r
+static int32 get_story_file_IFID(void *s_file, int32 extent, char *output, int32 output_extent)\r
+{\r
+\r
+ int32 i,j;\r
+ char ser[9];\r
+ char buffer[32];\r
+ char *story_file = (char *) s_file;\r
+\r
+\r
+ if (extent<0x0B) return INVALID_STORY_FILE_RV;\r
+\r
+ for(i=0;i<extent;i++) if (memcmp((char *)story_file+i,"UUID://",7)==0) break;\r
+ if (i<extent) /* Found explicit IFID */\r
+ {\r
+ for(j=i+7;j<extent && ((char *)story_file)[j]!='/';j++);\r
+ if (j<extent)\r
+ {\r
+ i+=7;\r
+ ASSERT_OUTPUT_SIZE(j-i);\r
+ memcpy(output,(char *)story_file+i,j-i);\r
+ output[j-i]=0;\r
+ return 1;\r
+ }\r
+ }\r
+ \r
+ memcpy(ser, (char *) story_file+0x03, 8);\r
+ ser[8]=0;\r
+\r
+ for(j=0;j<8;j++)\r
+ if (!isalnum(ser[j])) ser[j]='-';\r
+\r
+\r
+ sprintf(buffer,"HUGO-%d-%02X-%02X-%s",story_file[0],story_file[1], story_file[2],ser);\r
+\r
+ ASSERT_OUTPUT_SIZE((signed) strlen(buffer)+1);\r
+ strcpy((char *)output,buffer);\r
+ return 1;\r
+}\r
+\r
+static int32 read_hugo_addx(unsigned char *from)\r
+{\r
+ return ((unsigned int) from[0])| ((unsigned int)from[1] << 8);\r
+}\r
+\r
+static int32 claim_story_file(void *story_file, int32 extent)\r
+{\r
+ unsigned char *sf=(unsigned char *)story_file;\r
+ int32 i;\r
+ int32 scale;\r
+\r
+ if (!story_file || extent < 0x28) return INVALID_STORY_FILE_RV;\r
+\r
+ if (sf[0]<34) scale=4;\r
+ else scale=16;\r
+ for(i=3;i<0x0B;i++) if (sf[i]<0x20 || sf[i]>0x7e) return INVALID_STORY_FILE_RV;\r
+ for(i=0x0b;i<0x18;i+=2)\r
+ if (read_hugo_addx(sf+i) * scale > extent) return INVALID_STORY_FILE_RV;\r
+\r
+ return VALID_STORY_FILE_RV;\r
+}\r