Merge upstream changes: Merge FILEIO changes

FILEIO has been updated to resolve relative paths inside FILEIO::Fopen(),
which has been already done in System3-sdl2.

FILEIO::Fgets() now uses a length param.

Callsites for these functions are also updated to reduce the diff from
upstream.
This commit is contained in:
kichikuou
2020-05-22 12:04:36 +09:00
parent 131707f9d8
commit e8d254328a
11 changed files with 73 additions and 71 deletions
+9 -5
View File
@@ -40,13 +40,13 @@ FILEIO::~FILEIO(void)
}
}
bool FILEIO::Fopen(const char *filename, int mode)
bool FILEIO::Fopen(const char *file_name, int mode)
{
mode_ = mode;
char path[_MAX_PATH];
sprintf_s(path, _MAX_PATH, "%s%s",
(g_savedir && mode & FILEIO_SAVEDATA) ? g_savedir : g_root,
filename);
file_name);
mode &= ~FILEIO_SAVEDATA;
@@ -115,7 +115,7 @@ int FILEIO::Fgetw()
return val | (Fgetc() << 8);
}
void FILEIO::Fgets(char dest[])
void FILEIO::Fgets(char *dest, int length)
{
int p = 0;
@@ -125,9 +125,13 @@ void FILEIO::Fgets(char dest[])
break;
}
if(c != 0x0a) {
dest[p++] = c;
if(p < length + 1) {
dest[p++] = c;
}
if((0x81 <= c && c <= 0x9f) || 0xe0 <= c) {
dest[p++] = Fgetc();
if(p < length + 1) {
dest[p++] = Fgetc();
}
}
}
}
+2 -2
View File
@@ -30,7 +30,7 @@ public:
static void SetSaveDir(const char* savedir);
static int StatSavedata(const char* filename, struct stat* buf);
bool Fopen(const char *filename, int mode);
bool Fopen(const char *file_name, int mode);
void Fclose();
uint32 Fseek(long offset, int origin);
uint32 Ftell();
@@ -38,7 +38,7 @@ public:
uint32 Fwrite(void* buffer, uint32 size, uint32 count);
int Fgetc();
int Fgetw();
void Fgets(char dest[]);
void Fgets(char* dest, int length);
void Fputc(int c);
void Fputw(int w);
};
+1 -1
View File
@@ -64,7 +64,7 @@ private:
void load_gm3(uint8* data, int page, int transparent); // Intruder
void load_vsp(uint8* data, int page, int transparent);
void load_pms(uint8* data, int page, int transparent);
void load_bmp(const char *file_path);
void load_bmp(const char* file_name); // あゆみちゃん物語 フルカラー実写版
void draw_char(int dest, int dest_x, int dest_y, uint16 code, int size, uint8 color);
void draw_char_antialias(int dest, int dest_x, int dest_y, uint16 code, int size, uint8 color, uint8 cache[]);
+3 -2
View File
@@ -5,8 +5,9 @@
*/
#include "ags.h"
#include "../fileio.h"
void AGS::load_bmp(const char *file_path)
void AGS::load_bmp(const char* file_name)
{
// ヘッダ取得
int sx = 0, sy = 0;
@@ -23,7 +24,7 @@ void AGS::load_bmp(const char *file_path)
#if 0
// BMP読み込み
WCHAR wszFilePath[_MAX_PATH];
MultiByteToWideChar(CP_ACP, 0, file_path, -1, wszFilePath, _MAX_PATH);
MultiByteToWideChar(CP_ACP, 0, FILEIO::GetFilePath(file_name), -1, wszFilePath, _MAX_PATH);
Gdiplus::Bitmap *pBitmap = Gdiplus::Bitmap::FromFile(wszFilePath);
for(unsigned int y = 0; y < pBitmap->GetHeight(); y++) {
for(unsigned int x = 0; x < pBitmap->GetWidth(); x++) {
+6 -8
View File
@@ -8,21 +8,19 @@
#include "dri.h"
#include "crc32.h"
extern char g_root[_MAX_PATH];
void AGS::load_cg(int page, int transparent)
{
if (nact->sys_ver == 3) {
// あゆみちゃん物語 フルカラー実写版
if(strncmp(acg, "CGA000.BMP", 10) == 0) {
char file_path[_MAX_PATH];
sprintf_s(file_path, _MAX_PATH, "%sCGA%03d.BMP", g_root, page);
load_bmp(file_path);
char file_name[_MAX_PATH];
sprintf_s(file_name, _MAX_PATH, "CGA%03d.BMP", page);
load_bmp(file_name);
return;
} else if(strncmp(acg, "CGB000.BMP", 10) == 0) {
char file_path[_MAX_PATH];
sprintf_s(file_path, _MAX_PATH, "%sCGB%03d.BMP", g_root, page);
load_bmp(file_path);
char file_name[_MAX_PATH];
sprintf_s(file_name, _MAX_PATH, "CGB%03d.BMP", page);
load_bmp(file_name);
return;
}
}
+7 -8
View File
@@ -8,17 +8,16 @@
#include "crc32.h"
#include "../fileio.h"
uint8* DRI::load(const char* path, int page, int* size)
uint8* DRI::load(const char* file_name, int page, int* size)
{
char base_path[_MAX_PATH];
strcpy_s(base_path, _MAX_PATH, path);
char tmp_name[_MAX_PATH];
strcpy_s(tmp_name, _MAX_PATH, file_name);
FILEIO* fio = new FILEIO();
// ページの位置を取得
base_path[0] = 'A';
if(!fio->Fopen(base_path, FILEIO_READ_BINARY)) {
tmp_name[0] = 'A';
if(!fio->Fopen(tmp_name, FILEIO_READ_BINARY)) {
delete fio;
return NULL;
}
@@ -48,9 +47,9 @@ uint8* DRI::load(const char* path, int page, int* size)
// A??.DAT以外にリンクされている場合はファイルを開き直す
if(disk_index != 1) {
base_path[0] = 'A' + disk_index - 1;
tmp_name[0] = 'A' + disk_index - 1;
fio->Fclose();
if(!fio->Fopen(base_path, FILEIO_READ_BINARY)) {
if(!fio->Fopen(tmp_name, FILEIO_READ_BINARY)) {
delete fio;
return NULL;
}
+3 -3
View File
@@ -27,16 +27,16 @@ NACT::NACT(int sys_ver, uint32 crc32, const char* font_file, const char* playlis
if(fio->Fopen("AG00.DAT", FILEIO_READ_BINARY)) {
int d0, d1, d2, d3;
char string[MAX_CAPTION];
fio->Fgets(string);
fio->Fgets(string, MAX_CAPTION);
sscanf_s(string, "%d,%d,%d,%d", &d0, &d1, &d2, &d3);
for(int i = 0; i < d1; i++) {
// 動詞の読み込み
fio->Fgets(string);
fio->Fgets(string, MAX_CAPTION);
memcpy(caption_verb[i], string, sizeof(string));
}
for(int i = 0; i < d2; i++) {
// 目的語の読み込み
fio->Fgets(string);
fio->Fgets(string, MAX_CAPTION);
memcpy(caption_obj[i], string, sizeof(string));
}
fio->Fclose();
+1
View File
@@ -77,6 +77,7 @@ uint32 NACT::calc_crc32(const char* game_id)
uint32 crc = 0;
FILEIO* fio = new FILEIO();
if(fio->Fopen("ADISK.DAT", FILEIO_READ_BINARY)) {
uint32 table[256];
for(int i = 0; i < 256; i++) {
+6 -8
View File
@@ -915,12 +915,11 @@ void NACT_Sys1::cmd_l()
if(1 <= index && index <= 26) {
// ASLEEP_A.DAT - ASLEEP_Z.DAT
char path[_MAX_PATH];
strcpy_s(path, _MAX_PATH, "ASLEEP_A.DAT");
path[7] = 'A' + index - 1;
char file_name[_MAX_PATH];
sprintf_s(file_name, _MAX_PATH, "ASLEEP_%c.DAT", 'A' + index - 1);
FILEIO* fio = new FILEIO();
if(fio->Fopen(path, FILEIO_READ_BINARY)) {
if(fio->Fopen(file_name, FILEIO_READ_BINARY)) {
fio->Fseek(112, FILEIO_SEEK_SET);
int next_page = fio->Fgetw() - 1;
@@ -1064,12 +1063,11 @@ void NACT_Sys1::cmd_q()
if(1 <= index && index <= 26) {
// ASLEEP_A.DAT - ASLEEP_Z.DAT
char path[_MAX_PATH];
strcpy_s(path, _MAX_PATH, "ASLEEP_A.DAT");
path[7] = 'A' + index - 1;
char file_name[_MAX_PATH];
sprintf_s(file_name, _MAX_PATH, "ASLEEP_%c.DAT", 'A' + index - 1);
FILEIO* fio = new FILEIO();
if(fio->Fopen(path, FILEIO_WRITE_BINARY)) {
if(fio->Fopen(file_name, FILEIO_WRITE_BINARY)) {
uint8 buffer[9510];
int p = 0;
+6 -8
View File
@@ -944,12 +944,11 @@ void NACT_Sys2::cmd_l()
if(1 <= index && index <= 26) {
// ASLEEP_A.DAT - ASLEEP_Z.DAT
char path[_MAX_PATH];
strcpy_s(path, _MAX_PATH, "ASLEEP_A.DAT");
path[7] = 'A' + index - 1;
char file_name[_MAX_PATH];
sprintf_s(file_name, _MAX_PATH, "ASLEEP_%c.DAT", 'A' + index - 1);
FILEIO* fio = new FILEIO();
if(fio->Fopen(path, FILEIO_READ_BINARY)) {
if(fio->Fopen(file_name, FILEIO_READ_BINARY)) {
fio->Fseek(112, FILEIO_SEEK_SET);
int next_page = fio->Fgetw() - 1;
@@ -1120,12 +1119,11 @@ void NACT_Sys2::cmd_q()
if(1 <= index && index <= 26) {
// ASLEEP_A.DAT - ASLEEP_Z.DAT
char path[_MAX_PATH];
strcpy_s(path, _MAX_PATH, "ASLEEP_A.DAT");
path[7] = 'A' + index - 1;
char file_name[_MAX_PATH];
sprintf_s(file_name, _MAX_PATH, "ASLEEP_%c.DAT", 'A' + index - 1);
FILEIO* fio = new FILEIO();
if(fio->Fopen(path, FILEIO_WRITE_BINARY)) {
if(fio->Fopen(file_name, FILEIO_WRITE_BINARY)) {
uint8 buffer[9510];
int p = 0;
+29 -26
View File
@@ -700,12 +700,11 @@ void NACT_Sys3::cmd_l()
delete fio;
} else if(1 <= index && index <= 26) {
// ASLEEP_A.DAT - ASLEEP_Z.DAT
char path[_MAX_PATH];
strcpy_s(path, _MAX_PATH, "ASLEEP_A.DAT");
path[7] = 'A' + index - 1;
char file_name[_MAX_PATH];
sprintf_s(file_name, _MAX_PATH, "ASLEEP_%c.DAT", 'A' + index - 1);
FILEIO* fio = new FILEIO();
if(fio->Fopen(path, FILEIO_READ_BINARY | FILEIO_SAVEDATA)) {
if(fio->Fopen(file_name, FILEIO_READ_BINARY | FILEIO_SAVEDATA)) {
fio->Fseek(112, FILEIO_SEEK_SET);
int next_page = fio->Fgetw() - 1;
@@ -793,12 +792,11 @@ void NACT_Sys3::cmd_l()
delete fio;
} else if(101 <= index && index <= 126) {
// ASLEEP_A.DAT - ASLEEP_Z.DAT
char path[_MAX_PATH];
strcpy_s(path, _MAX_PATH, "ASLEEP_A.DAT");
path[7] = 'A' + index - 101;
char file_name[_MAX_PATH];
sprintf_s(file_name, _MAX_PATH, "ASLEEP_%c.DAT", 'A' + index - 101);
FILEIO* fio = new FILEIO();
if(fio->Fopen(path, FILEIO_READ_BINARY | FILEIO_SAVEDATA)) {
if(fio->Fopen(file_name, FILEIO_READ_BINARY | FILEIO_SAVEDATA)) {
fio->Fseek(112 + 16, FILEIO_SEEK_SET);
var[0] = fio->Fgetw();
fio->Fclose();
@@ -963,12 +961,11 @@ void NACT_Sys3::cmd_q()
delete fio;
} else if(1 <= index && index <= 26) {
// ASLEEP_A.DAT - ASLEEP_Z.DAT
char path[_MAX_PATH];
strcpy_s(path, _MAX_PATH, "ASLEEP_A.DAT");
path[7] = 'A' + index - 1;
char file_name[_MAX_PATH];
sprintf_s(file_name, _MAX_PATH, "ASLEEP_%c.DAT", 'A' + index - 1);
FILEIO* fio = new FILEIO();
if(fio->Fopen(path, FILEIO_WRITE_BINARY | FILEIO_SAVEDATA)) {
if(fio->Fopen(file_name, FILEIO_WRITE_BINARY | FILEIO_SAVEDATA)) {
uint8 buffer[9510];
int p = 0;
@@ -1452,13 +1449,12 @@ void NACT_Sys3::cmd_y()
}
break;
case 239:
{
char path[_MAX_PATH];
strcpy_s(path, _MAX_PATH, "ASLEEP_A.DAT");
path[7] = 'A' + param - 1;
if(1 <= param && param <= 26) {
char file_name[_MAX_PATH];
sprintf_s(file_name, _MAX_PATH, "ASLEEP_%c.DAT", 'A' + param - 1);
struct stat statbuf;
if (FILEIO::StatSavedata(path, &statbuf) != -1) {
if (FILEIO::StatSavedata(file_name, &statbuf) != -1) {
struct tm *t = localtime(&statbuf.st_mtime);
D01 = t->tm_year + 1900;
D02 = t->tm_mon + 1;
@@ -1469,6 +1465,9 @@ void NACT_Sys3::cmd_y()
} else {
D01 = D02 = D03 = D04 = D05 = D06 = 0;
}
} else {
// 不正なファイル番号
D01 = D02 = D03 = D04 = D05 = D06 = 0;
}
break;
case 240:
@@ -1477,21 +1476,25 @@ void NACT_Sys3::cmd_y()
case 241:
break;
case 250:
{
#if 0
char path[4];
path[0] = g_root[0];
path[1] = ':';
path[2] = '\\';
path[3] = '\0';
UINT t = GetDriveType(path);
if(FILEIO::GetRootPath()[1] == ':') {␍
_TCHAR root_path[4];
root_path[0] = FILEIO::GetRootPath()[0];
root_path[1] = ':';
root_path[2] = '\\';
root_path[3] = '\0';
UINT t = GetDriveType(root_path);
// フロッピーから起動した場合は0が返る
//RND = (t == DRIVE_REMOVABLE) ? 0 : (t == DRIVE_CDROM) ? 2 : 1;
RND = (t == DRIVE_CDROM) ? 2 : 1;
#else
} else {
// ネットワークドライブ?
RND = 1;
#endif
}
#else
RND = 1;
#endif
break;
case 251:
column = param ? false : true;