mirror of
https://github.com/kichikuou/system3-sdl2.git
synced 2026-10-01 03:18:07 +03:00
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:
+9
-5
@@ -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
@@ -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
@@ -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
@@ -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++) {
|
||||
|
||||
@@ -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
@@ -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
@@ -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();
|
||||
|
||||
@@ -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++) {
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user