[Scummvm-git-logs] scummvm master -> 7e86a21a6a188ecfdea1d36291533492b1031814
aquadran
noreply at scummvm.org
Sat Jan 1 14:25:33 UTC 2022
This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
7e86a21a6a DEVTOOLS: Avoid global constructor
Commit: 7e86a21a6a188ecfdea1d36291533492b1031814
https://github.com/scummvm/scummvm/commit/7e86a21a6a188ecfdea1d36291533492b1031814
Author: PaweÅ KoÅodziejski (aquadran at gmail.com)
Date: 2022-01-01T15:25:28+01:00
Commit Message:
DEVTOOLS: Avoid global constructor
Changed paths:
devtools/create_access/create_access_dat.cpp
diff --git a/devtools/create_access/create_access_dat.cpp b/devtools/create_access/create_access_dat.cpp
index b27ad194938..7c66c38cc57 100644
--- a/devtools/create_access/create_access_dat.cpp
+++ b/devtools/create_access/create_access_dat.cpp
@@ -45,7 +45,7 @@
* 4 bytes - File offset for the data for the game
*/
-File outputFile;
+File *outputFile;
void writeHeader(int numExecutables);
void writeAmazonCommonData();
@@ -66,7 +66,8 @@ int main(int argc, char *argv[]) {
}
// Create the new data file for output
- outputFile.open(argv[1], kFileWriteMode);
+ outputFile = new File;
+ outputFile->open(argv[1], kFileWriteMode);
writeHeader(argc - 2 + NUM_COMMON_ENTRIES);
// Write out entries containing common data for the games
@@ -74,82 +75,83 @@ int main(int argc, char *argv[]) {
writeMartianCommonData(argc, argv);
// Iterate through processing each specified executable
- outputFile.seek(0, SEEK_END);
+ outputFile->seek(0, SEEK_END);
for (int idx = 2; idx < argc; ++idx) {
if (!processExecutable(idx - 2 + NUM_COMMON_ENTRIES, argv[idx]))
break;
}
// Close the output file
- outputFile.close();
+ outputFile->close();
+ delete outputFile;
}
void writeHeader(int numExecutables) {
// Write out magic string
const char *MAGIC_STR = "SVMA";
- outputFile.write(MAGIC_STR, 4);
+ outputFile->write(MAGIC_STR, 4);
// Write out version number
- outputFile.writeWord(VERSION_NUMBER);
+ outputFile->writeWord(VERSION_NUMBER);
// Write out the number of entries the data file will contain
- outputFile.writeWord(numExecutables);
+ outputFile->writeWord(numExecutables);
// Write out padding for index entries that will be written
- outputFile.writeByte(0, 8 * numExecutables);
+ outputFile->writeByte(0, 8 * numExecutables);
}
void writeAmazonCommonData() {
// Write out the header entry
- outputFile.seek(8);
- outputFile.writeByte(1); // Amazon
- outputFile.writeByte(2); // Common data
- outputFile.writeByte(0);
- outputFile.writeByte(0);
- outputFile.writeLong(outputFile.size());
+ outputFile->seek(8);
+ outputFile->writeByte(1); // Amazon
+ outputFile->writeByte(2); // Common data
+ outputFile->writeByte(0);
+ outputFile->writeByte(0);
+ outputFile->writeLong(outputFile->size());
// Write out cursor list
- outputFile.seek(0, SEEK_END);
- outputFile.writeWord(AMAZON_NUM_CURSORS);
+ outputFile->seek(0, SEEK_END);
+ outputFile->writeWord(AMAZON_NUM_CURSORS);
for (uint idx = 0; idx < AMAZON_NUM_CURSORS; ++idx) {
- outputFile.writeWord(Amazon::CURSOR_SIZES[idx]);
- outputFile.write(Amazon::CURSORS[idx], Amazon::CURSOR_SIZES[idx]);
+ outputFile->writeWord(Amazon::CURSOR_SIZES[idx]);
+ outputFile->write(Amazon::CURSORS[idx], Amazon::CURSOR_SIZES[idx]);
}
// Write out font data
- outputFile.writeWord(Amazon::FONT2_INDEX_SIZE);
+ outputFile->writeWord(Amazon::FONT2_INDEX_SIZE);
for (uint idx = 0; idx < Amazon::FONT2_INDEX_SIZE; ++idx)
- outputFile.writeWord(Amazon::FONT2_INDEX[idx]);
+ outputFile->writeWord(Amazon::FONT2_INDEX[idx]);
- outputFile.writeWord(Amazon::FONT2_DATA_SIZE);
- outputFile.write(Amazon::FONT2_DATA, Amazon::FONT2_DATA_SIZE);
+ outputFile->writeWord(Amazon::FONT2_DATA_SIZE);
+ outputFile->write(Amazon::FONT2_DATA, Amazon::FONT2_DATA_SIZE);
- outputFile.writeWord(Amazon::FONT6x6_INDEX_SIZE);
+ outputFile->writeWord(Amazon::FONT6x6_INDEX_SIZE);
for (uint idx = 0; idx < Amazon::FONT6x6_INDEX_SIZE; ++idx)
- outputFile.writeWord(Amazon::FONT6x6_INDEX[idx]);
+ outputFile->writeWord(Amazon::FONT6x6_INDEX[idx]);
- outputFile.writeWord(Amazon::FONT6x6_DATA_SIZE);
- outputFile.write(Amazon::FONT2_DATA, Amazon::FONT6x6_DATA_SIZE);
+ outputFile->writeWord(Amazon::FONT6x6_DATA_SIZE);
+ outputFile->write(Amazon::FONT2_DATA, Amazon::FONT6x6_DATA_SIZE);
}
void writeMartianCommonData(int argc, char *argv[]) {
// Write out the header entry
- outputFile.seek(16);
- outputFile.writeByte(2); // Martian
- outputFile.writeByte(2); // Common data
- outputFile.writeByte(0);
- outputFile.writeByte(0);
- outputFile.writeLong(outputFile.size());
+ outputFile->seek(16);
+ outputFile->writeByte(2); // Martian
+ outputFile->writeByte(2); // Common data
+ outputFile->writeByte(0);
+ outputFile->writeByte(0);
+ outputFile->writeLong(outputFile->size());
// Write out cursor list
- outputFile.seek(0, SEEK_END);
- outputFile.writeWord(MARTIAN_NUM_CURSORS);
+ outputFile->seek(0, SEEK_END);
+ outputFile->writeWord(MARTIAN_NUM_CURSORS);
for (uint idx = 0; idx < MARTIAN_NUM_CURSORS; ++idx) {
- outputFile.writeWord(Martian::CURSOR_SIZES[idx]);
- outputFile.write(Martian::CURSORS[idx], Martian::CURSOR_SIZES[idx]);
+ outputFile->writeWord(Martian::CURSOR_SIZES[idx]);
+ outputFile->write(Martian::CURSORS[idx], Martian::CURSOR_SIZES[idx]);
}
// Check for the presence of a Martian Memorandum executable
@@ -174,12 +176,12 @@ void writeMartianCommonData(int argc, char *argv[]) {
for (int fontNum = 0; fontNum < 2; ++fontNum) {
// Write out sizes
- outputFile.writeWord(FONT_COUNT);
- outputFile.writeWord(FONT_DATA_SIZE[fontNum]);
+ outputFile->writeWord(FONT_COUNT);
+ outputFile->writeWord(FONT_DATA_SIZE[fontNum]);
// Write out character widths
exeFile.seek(DATA_SEGMENT + FONT_WIDTHS[fontNum]);
- outputFile.write(exeFile, FONT_COUNT);
+ outputFile->write(exeFile, FONT_COUNT);
// Write out character offsets
uint offsets[FONT_COUNT];
@@ -191,12 +193,12 @@ void writeMartianCommonData(int argc, char *argv[]) {
offsets[i] -= dataOffset;
assert(offsets[i] < FONT_DATA_SIZE[fontNum]);
- outputFile.writeWord(offsets[i]);
+ outputFile->writeWord(offsets[i]);
}
// Write out character data
exeFile.seek(DATA_SEGMENT + dataOffset);
- outputFile.write(exeFile, FONT_DATA_SIZE[fontNum]);
+ outputFile->write(exeFile, FONT_DATA_SIZE[fontNum]);
}
return;
@@ -204,10 +206,10 @@ void writeMartianCommonData(int argc, char *argv[]) {
}
// No executable found, so store 0 size fonts
- outputFile.writeWord(0);
- outputFile.writeWord(0);
- outputFile.writeWord(0);
- outputFile.writeWord(0);
+ outputFile->writeWord(0);
+ outputFile->writeWord(0);
+ outputFile->writeWord(0);
+ outputFile->writeWord(0);
}
bool processExecutable(int exeIdx, const char *name) {
@@ -362,23 +364,23 @@ bool processExecutable(int exeIdx, const char *name) {
}
// Write out header entry
- uint outputOffset = outputFile.size();
- outputFile.seek(8 + exeIdx * 8);
- outputFile.writeByte(gameId);
- outputFile.writeByte(discType);
- outputFile.writeByte(demoType);
- outputFile.writeByte(language);
- outputFile.writeLong(outputOffset);
- outputFile.seek(0, SEEK_END);
+ uint outputOffset = outputFile->size();
+ outputFile->seek(8 + exeIdx * 8);
+ outputFile->writeByte(gameId);
+ outputFile->writeByte(discType);
+ outputFile->writeByte(demoType);
+ outputFile->writeByte(language);
+ outputFile->writeLong(outputOffset);
+ outputFile->seek(0, SEEK_END);
// Write out list of AP filenames
- outputFile.writeWord(numFilenames);
+ outputFile->writeWord(numFilenames);
for (uint idx = 0; idx < numFilenames; ++idx) {
exeFile.seek(filenamesOffset + idx * 2);
uint nameOffset = exeFile.readWord();
exeFile.seek(dataSegmentOffset + nameOffset);
- outputFile.writeString(exeFile);
+ outputFile->writeString(exeFile);
}
// Write out the character list
@@ -390,11 +392,11 @@ bool processExecutable(int exeIdx, const char *name) {
while (exeFile.pos() < (dataSegmentOffset + charOffsets[0]))
charOffsets.push_back(exeFile.readWord());
- outputFile.writeWord(charOffsets.size());
+ outputFile->writeWord(charOffsets.size());
charOffsets.push_back(charsEnd);
for (uint idx = 0; idx < charOffsets.size() - 1; ++idx) {
if (charOffsets[idx] == 0) {
- outputFile.writeWord(0);
+ outputFile->writeWord(0);
} else {
uint nextOffset = 0xffff;
for (uint idx2 = 0; idx2 < charOffsets.size(); ++idx2) {
@@ -404,8 +406,8 @@ bool processExecutable(int exeIdx, const char *name) {
uint size = nextOffset - charOffsets[idx];
exeFile.seek(dataSegmentOffset + charOffsets[idx]);
- outputFile.writeWord(size);
- outputFile.write(exeFile, size);
+ outputFile->writeWord(size);
+ outputFile->write(exeFile, size);
}
}
@@ -425,7 +427,7 @@ bool processExecutable(int exeIdx, const char *name) {
travelPos.push_back(Common::Point(xp, yp));
}
- outputFile.writeWord(numRooms);
+ outputFile->writeWord(numRooms);
for (uint idx = 0; idx < numRooms; ++idx) {
uint dataSize = 0;
@@ -441,60 +443,60 @@ bool processExecutable(int exeIdx, const char *name) {
}
// Write out the room description (used only by the debugger)
- outputFile.writeString(roomDescs[idx]);
+ outputFile->writeString(roomDescs[idx]);
// Write out travel position
- outputFile.writeWord((uint16)travelPos[idx].x);
- outputFile.writeWord((uint16)travelPos[idx].y);
+ outputFile->writeWord((uint16)travelPos[idx].x);
+ outputFile->writeWord((uint16)travelPos[idx].y);
// Write out the data for the room
- outputFile.writeWord(dataSize);
+ outputFile->writeWord(dataSize);
if (dataSize > 0)
- outputFile.write(exeFile, dataSize);
+ outputFile->write(exeFile, dataSize);
}
// Write out the deaths list
- outputFile.writeWord(numDeaths);
+ outputFile->writeWord(numDeaths);
for (uint idx = 0; idx < numDeaths; ++idx) {
// Write out the screen number and text
- outputFile.writeByte(deathScreens[idx]);
- outputFile.writeString(deathText[idx]);
+ outputFile->writeByte(deathScreens[idx]);
+ outputFile->writeString(deathText[idx]);
}
// Write out inventory data
- outputFile.writeWord(numItems);
+ outputFile->writeWord(numItems);
for (uint idx = 0; idx < numItems; ++idx) {
- outputFile.writeString(itemNames[idx]);
+ outputFile->writeString(itemNames[idx]);
if (comboTable == nullptr) {
for (uint cIdx = 0; cIdx < 4; ++cIdx)
- outputFile.writeWord(0);
+ outputFile->writeWord(0);
} else {
for (uint cIdx = 0; cIdx < 4; ++cIdx, ++comboTable)
- outputFile.writeWord((uint16)*comboTable);
+ outputFile->writeWord((uint16)*comboTable);
}
}
// Write out game specific strings and other data
if (gameId == 1) {
// Write out miscellaneous strings
- outputFile.writeString(Amazon::NO_HELP_MESSAGE_ENG);
- outputFile.writeString(Amazon::NO_HINTS_MESSAGE_ENG);
- outputFile.writeString(Amazon::RIVER_HIT1_ENG);
- outputFile.writeString(Amazon::RIVER_HIT2_ENG);
- outputFile.writeString(Amazon::BAR_MESSAGE_ENG);
+ outputFile->writeString(Amazon::NO_HELP_MESSAGE_ENG);
+ outputFile->writeString(Amazon::NO_HINTS_MESSAGE_ENG);
+ outputFile->writeString(Amazon::RIVER_HIT1_ENG);
+ outputFile->writeString(Amazon::RIVER_HIT2_ENG);
+ outputFile->writeString(Amazon::BAR_MESSAGE_ENG);
for (int idx = 0; idx < 3; ++idx)
- outputFile.writeString(Amazon::HELPLVLTXT_ENG[idx]);
+ outputFile->writeString(Amazon::HELPLVLTXT_ENG[idx]);
for (int idx = 0; idx < 9; ++idx)
- outputFile.writeString(Amazon::IQLABELS_ENG[idx]);
+ outputFile->writeString(Amazon::IQLABELS_ENG[idx]);
- outputFile.writeString(Amazon::CANT_GET_THERE_ENG);
+ outputFile->writeString(Amazon::CANT_GET_THERE_ENG);
}
// Do final padding to the next paragraph boundary
- if ((outputFile.size() % 16) != 0)
- outputFile.writeByte(0, 16 - (outputFile.size() % 16));
+ if ((outputFile->size() % 16) != 0)
+ outputFile->writeByte(0, 16 - (outputFile->size() % 16));
// Close the executable and signal that it was processed successfully
exeFile.close();
More information about the Scummvm-git-logs
mailing list