[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