History

Added v1.03 source code to repo

Olav Sørensen committed 6 years ago

Commit fb28f3f1 parent cd1494f300 files · +157093 −-33Browse files

Showing the changes to src/helpdata/code (1 of 300 files). Show all

Unified · Split

src/helpdata/code/ft2hlp_to_h.c+180−0
@@ -0,0 +1,180 @@
1#include <stdio.h>
2#include <stdint.h>
3#include <stdlib.h>
4#include <string.h>
5
6#define TMP_FILENAME "TMP.HLP"
7#define DATA_LINE_SIZE 12
8
9static void delTmpPackFile(void)
10{
11 char command[256];
12
13#ifdef _WIN32
14 sprintf(command, "del %s 2>NUL", TMP_FILENAME);
15#else
16 sprintf(command, "rm %s &> /dev/null", TMP_FILENAME);
17#endif
18
19 system(command);
20}
21
22int main(int argc, char *argv[])
23{
24 char *helpData, *textPtr2, *textPtr;
25 uint8_t textLenByte;
26 uint32_t textLen, fileSize, currLine, totalCharLen;
27 FILE *fIn, *fOut;
28
29 printf("ft2hlp_to_h - by 8bitbubsy\n");
30
31#ifndef _DEBUG
32 if (argc != 2)
33 {
34 printf("Usage: ft2hlp_to_h <helpfile.hlp>\n");
35 return -1;
36 }
37
38 fIn = fopen(argv[1], "rb");
39#else
40 fIn = fopen("FT2.HLP", "rb");
41#endif
42
43 if (fIn == NULL)
44 {
45 printf("Error: Could not open input file for reading!\n");
46 return 1;
47 }
48
49 fOut = fopen(TMP_FILENAME, "wb");
50 if (fOut == NULL)
51 {
52 printf("Error: Could not open temp file for writing!\n");
53 fclose(fIn);
54
55 return 1;
56 }
57
58 fseek(fIn, 0, SEEK_END);
59 fileSize = ftell(fIn);
60 rewind(fIn);
61
62 helpData = (char *)malloc(fileSize);
63 if (helpData == NULL)
64 {
65 printf("ERROR: Out of memory!\n");
66 fclose(fIn);
67 fclose(fOut);
68 return -1;
69 }
70
71 fread(helpData, 1, fileSize, fIn);
72 fclose(fIn);
73
74 printf("Parsing...\n");
75
76 totalCharLen = 0;
77 currLine = 0;
78
79 textPtr = helpData;
80 while (totalCharLen < fileSize)
81 {
82 if (!strncmp(textPtr, "END", 3) && totalCharLen >= fileSize-(3+2))
83 {
84 /* we reached the final END */
85 fputc(3, fOut);
86 fprintf(fOut, "END");
87 break;
88 }
89
90 textPtr2 = textPtr;
91
92 textLen = 0;
93 while (*textPtr2 != '\r')
94 {
95 textLen++;
96 textPtr2++;
97 }
98
99 if (textLen > 255)
100 {
101 printf("ERROR: Line %d has more than 255 characters!\n", currLine);
102 fclose(fOut);
103 return 1;
104 }
105
106 textLenByte = textLen & 0xFF;
107 fwrite(&textLenByte, 1, 1, fOut);
108 fwrite(textPtr, 1, textLen, fOut);
109
110 totalCharLen += textLen + 2;
111 textPtr += textLen + 2;
112
113 currLine++;
114 }
115
116 printf("Successfully parsed %d lines.\n", currLine - 1);
117 fclose(fOut);
118
119 fIn = fopen(TMP_FILENAME, "rb");
120 if (fIn == NULL)
121 {
122 printf("Error: Could not open temp file for reading!\n");
123 delTmpPackFile();
124 return 1;
125 }
126
127 fOut = fopen("ft2_help_data.h", "w");
128 if (fOut == NULL)
129 {
130 printf("Error: Could not open ft2_help_data.h for writing!\n");
131 fclose(fIn);
132 delTmpPackFile();
133 return 1;
134 }
135
136 // fetch file size
137 fseek(fIn, 0, SEEK_END);
138 fileSize = ftell(fIn);
139 rewind(fIn);
140
141 printf("Converting data to header bytes..\n");
142
143 // put header
144 fprintf(fOut, "#ifndef __FT2_HELP_DATA_H\n");
145 fprintf(fOut, "#define __FT2_HELP_DATA_H\n");
146 fprintf(fOut, "\n");
147 fprintf(fOut, "#include <stdint.h>\n");
148 fprintf(fOut, "\n");
149 fprintf(fOut, "#define HELP_DATA_LEN %d\n", fileSize);
150 fprintf(fOut, "\n");
151 fprintf(fOut, "const uint8_t helpData[%d] =\n", fileSize);
152 fprintf(fOut, "{\n");
153
154 // put data
155 for (uint32_t i = 0; i < fileSize; i++)
156 {
157 if ((i % DATA_LINE_SIZE) == 0) fprintf(fOut, "\t"); // tab
158
159 if (i == fileSize-1)
160 fprintf(fOut, "0x%02X", fgetc(fIn));
161 else
162 fprintf(fOut, "0x%02X,", fgetc(fIn));
163
164 if ((i % DATA_LINE_SIZE) == DATA_LINE_SIZE-1 || i == fileSize-1)
165 fputc(0x0A, fOut); // linefeed
166 }
167
168 // put footer
169 fprintf(fOut, "};\n");
170 fprintf(fOut, "\n");
171 fprintf(fOut, "#endif\n");
172
173 fclose(fOut);
174 fclose(fIn);
175
176 printf("Done! %d bytes sucessfully written to ft2_help_data.h.\n", fileSize);
177 delTmpPackFile();
178
179 return 0;
180}

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t