aboutsummaryrefslogtreecommitdiff
path: root/devtools/create_teenagent/create_teenagent.cpp
diff options
context:
space:
mode:
authorD G Turner2012-07-09 15:46:41 +0100
committerD G Turner2012-07-09 15:49:07 +0100
commit78312544a612a3ff339a96ae00eeb15363e031e3 (patch)
treee8a74e4e8b84d0005d6faed6d3396114a8e521cb /devtools/create_teenagent/create_teenagent.cpp
parentf85f8c806d0610197baac7edbeb78c731befa756 (diff)
downloadscummvm-rg350-78312544a612a3ff339a96ae00eeb15363e031e3.tar.gz
scummvm-rg350-78312544a612a3ff339a96ae00eeb15363e031e3.tar.bz2
scummvm-rg350-78312544a612a3ff339a96ae00eeb15363e031e3.zip
DEVTOOLS: Fix create_teenagent to use dialog string tables.
This removes the extended data segment blob and replaces it with a set of dialog string tables. Have checked that the teenagent.dat output file produced is identical.
Diffstat (limited to 'devtools/create_teenagent/create_teenagent.cpp')
-rw-r--r--devtools/create_teenagent/create_teenagent.cpp104
1 files changed, 31 insertions, 73 deletions
diff --git a/devtools/create_teenagent/create_teenagent.cpp b/devtools/create_teenagent/create_teenagent.cpp
index ee0e9ca0dc..40241eee7e 100644
--- a/devtools/create_teenagent/create_teenagent.cpp
+++ b/devtools/create_teenagent/create_teenagent.cpp
@@ -36,7 +36,6 @@
#include "static_tables.h"
int main(int argc, char *argv[]) {
-/*
const char *dat_name = "teenagent.dat";
FILE *fout = fopen(dat_name, "wb");
@@ -55,85 +54,44 @@ int main(int argc, char *argv[]) {
exit(1);
}
- if (fwrite(eseg, ESEG_SIZE, 1, fout) != 1) {
- perror("Writing second data segment");
- exit(1);
- }
-
- fclose(fout);
-
- fprintf(stderr, "please run \"gzip -n %s\"\n", dat_name);
-*/
-
- printf("#define ANIM_WAIT \"\\xff\"\n");
- printf("#define NEW_LINE \"\\n\"\n");
- printf("#define DISPLAY_MESSAGE \"\\n\\n\"\n");
- printf("#define CHANGE_CHARACTER \"\\n\\n\\n\"\n");
- printf("#define END_DIALOG \"\\n\\n\\n\\n\"\n");
- printf("\n");
- int dialog_num = 0;
- printf("const static char* dialog_%d[] = {\n", dialog_num);
- int n = 0;
- uint8 last = 0xff;
- for (int i = 0; i < ESEG_SIZE; i++) {
- if ((eseg[i] != 0x00 && last == 0x00) || n == 4) {
- switch (n) {
- case 1:
- printf("\tNEW_LINE,\n");
- break;
- case 2:
- printf("\tDISPLAY_MESSAGE,\n");
- break;
- case 3:
- printf("\tCHANGE_CHARACTER,\n");
- break;
- case 4:
- dialog_num++;
- printf("\tEND_DIALOG\n};\n\n");
- printf("const static char* dialog_%d[] = {\n", dialog_num);
- break;
- default:
- fprintf(stderr, "ERROR: %d is too many nulls\n", n);
- break;
+ // Write out dialog string block
+ static const char nulls[6] = "\0\0\0\0\0";
+ for (uint i = 0; i < (sizeof(dialogs)/sizeof(char**)); i++) {
+ //printf("Writing Dialog #%d\n", i);
+ bool dialogEnd = false;
+ uint j = 0;
+ while (!dialogEnd) {
+ uint nullCount = 0;
+ if (strcmp(dialogs[i][j], NEW_LINE) == 0) {
+ nullCount = 1;
+ } else if (strcmp(dialogs[i][j], DISPLAY_MESSAGE) == 0) {
+ nullCount = 2;
+ } else if (strcmp(dialogs[i][j], CHANGE_CHARACTER) == 0) {
+ nullCount = 3;
+ } else if (strcmp(dialogs[i][j], END_DIALOG) == 0) {
+ nullCount = 4;
+ dialogEnd = true;
+ } else { // Deals with normal dialogue and ANIM_WAIT cases
+ if (fwrite(dialogs[i][j], 1, strlen(dialogs[i][j]), fout) != strlen(dialogs[i][j])) {
+ perror("Writing dialog string");
+ exit(1);
+ }
}
- n = 0;
- }
- switch (eseg[i]) {
- case 0x00:
- n++;
- if (!(last == 0x00 || last == 0xff))
- printf("\",\n");
- break;
- case 0xff:
- if (!(last == 0x00 || last == 0xff))
- printf("\",\n");
- printf("\tANIM_WAIT,\n");
- break;
- default:
- if ((last == 0x00 || last == 0xff))
- printf("\t\"");
+ if (nullCount != 0 && nullCount < 5) {
+ if (fwrite(nulls, 1, nullCount, fout) != nullCount) {
+ perror("Writing dialog string nulls");
+ exit(1);
+ }
+ }
- if (eseg[i] >= 32 && eseg[i] <= 126) {
- if (eseg[i] == '\"')
- printf("\\");
- printf("%c", eseg[i]);
- } else fprintf(stderr, "ERROR: eseg[%d]:0x%02x is outside range\n", i, eseg[i]);
- break;
+ j++;
}
-
- last = eseg[i];
}
- if (n == 4) {
- dialog_num++;
- printf("\tEND_DIALOG\n};\n");
- } else fprintf(stderr, "ERROR: premature end of data\n");
+ fclose(fout);
- printf("\nconst static char** dialogs[] = {\n");
- for (int i = 0; i < dialog_num; i++)
- printf("\tdialog_%d%s\n", i, (i == dialog_num-1) ? "" : ",");
- printf("};\n");
+ fprintf(stderr, "please run \"gzip -n %s\"\n", dat_name);
return 0;
}