From bb4fbe70d6a101c39e113208401f7b3cc428b7e6 Mon Sep 17 00:00:00 2001 From: Eric Fischer Date: Fri, 28 Dec 2012 22:32:11 -0800 Subject: [PATCH] Convert AppleWorks word processor to HTML, not plain text --- awp.c | 111 +++++++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 82 insertions(+), 29 deletions(-) diff --git a/awp.c b/awp.c index 3fcfaf0..983d9e6 100644 --- a/awp.c +++ b/awp.c @@ -17,6 +17,9 @@ process (FILE *f, char *name) unsigned char header[300]; unsigned char rec[2]; + printf("\n"); + printf("
\n");
+
 	int bold = 0, under = 0, sub = 0, super = 0;
 
 	if (fread (header, sizeof (unsigned char), 300, f) != 300) {
@@ -56,40 +59,70 @@ process (FILE *f, char *name)
 				printf (" ");
 
 			for (i = 2; i < (line[1] & 0x7f) + 2; i++) {
-				if (line[i] == 1)
-					bold = 1;
-				else if (line[i] == 2)
-					bold = 0;
-				else if (line[i] == 3)
-					super = 1;
-				else if (line[i] == 4)
-					super = 0;
-				else if (line[i] == 5)
-					sub = 1;
-				else if (line[i] == 6)
-					sub = 0;
-				else if (line[i] == 7)
-					under = 1;
-				else if (line[i] == 8)
-					under = 0;
-				else if (line[i] == 11)
-					printf (" ");  /* sticky space */
-				else if (line[i] == 0x16)
-					printf (" ");  /* tab */
-				else if (line[i] == 0x17)
-					printf (" ");  /* tab spacer */
-				else if (line[i] >= 32) {
-					if (bold)
-						printf ("%c\b", line[i]);
-					if (under)
-						printf ("_\b");
-
-					printf ("%c", line[i]);
+				if (line[i] == 1 && bold == 0) {
+					printf("");
+					bold++;
+				} else if (line[i] == 2 && bold > 0) {
+					printf("");
+					bold--;
+				} else if (line[i] == 3 && super == 0) {
+					printf("");
+					super++;
+				} else if (line[i] == 4 && super > 0) {
+					printf("");
+					super--;
+				} else if (line[i] == 5 && sub == 0) {
+					printf("");
+					sub++;
+				} else if (line[i] == 6 && sub > 0) {
+					printf("");
+					sub--;
+				} else if (line[i] == 7 && under == 0) {
+					printf("");
+					under++;
+				} else if (line[i] == 8 && under > 0) {
+					printf("");
+					under--;
+				} else if (line[i] == 11) {
+					printf (" ");  /* sticky space */
+				} else if (line[i] == 0x16) {
+					printf (" ");  /* tab */
+				} else if (line[i] == 0x17) {
+					printf (" ");  /* tab spacer */
+				} else if (line[i] >= 32) {
+					if (line[i] == '&') {
+						printf("&");
+					} else if (line[i] == '<') {
+						printf("<");
+					} else if (line[i] == '>') {
+						printf(">");
+					} else {
+						printf ("%c", line[i]);
+					}
 				}
 			}
 
 			free (line);
 			printf ("\n");
+
+			if (line[1] & 0x80) {
+				while (bold > 0) {
+					printf("");
+					bold--;
+				}
+				while (under > 0) {
+					printf("");
+					under--;
+				}
+				while (super > 0) {
+					printf("");
+					super--;
+				}
+				while (sub > 0) {
+					printf("");
+					sub--;
+				}
+			}
 		} else if (rec[1] = 0xd0) {
 			int i;
 
@@ -98,9 +131,29 @@ process (FILE *f, char *name)
 
 			printf ("\n");
 
+			while (bold > 0) {
+				printf("");
+				bold--;
+			}
+			while (under > 0) {
+				printf("");
+				under--;
+			}
+			while (super > 0) {
+				printf("");
+				super--;
+			}
+			while (sub > 0) {
+				printf("");
+				sub--;
+			}
+
 			bold = under = super = sub = 0;
 		}
 	}
+
+	printf("
"); + printf(""); } int