diff --git a/src/fileio.cpp b/src/fileio.cpp index 8c2e86f..4bb0e6c 100644 --- a/src/fileio.cpp +++ b/src/fileio.cpp @@ -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(); + } } } } diff --git a/src/fileio.h b/src/fileio.h index 99e71cf..aedd4a9 100644 --- a/src/fileio.h +++ b/src/fileio.h @@ -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); }; diff --git a/src/sys/ags.h b/src/sys/ags.h index fa3adb8..4f1f298 100644 --- a/src/sys/ags.h +++ b/src/sys/ags.h @@ -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[]); diff --git a/src/sys/ags_bmp.cpp b/src/sys/ags_bmp.cpp index bf41448..ab1bbc9 100644 --- a/src/sys/ags_bmp.cpp +++ b/src/sys/ags_bmp.cpp @@ -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++) { diff --git a/src/sys/ags_draw.cpp b/src/sys/ags_draw.cpp index 1ed1963..d8dd8c4 100644 --- a/src/sys/ags_draw.cpp +++ b/src/sys/ags_draw.cpp @@ -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; } } diff --git a/src/sys/dri.cpp b/src/sys/dri.cpp index 4edb682..4197a2e 100644 --- a/src/sys/dri.cpp +++ b/src/sys/dri.cpp @@ -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; } diff --git a/src/sys/nact.cpp b/src/sys/nact.cpp index bfc43c1..d49c167 100644 --- a/src/sys/nact.cpp +++ b/src/sys/nact.cpp @@ -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(); diff --git a/src/sys/nact_crc32.cpp b/src/sys/nact_crc32.cpp index a2ed177..3826b79 100644 --- a/src/sys/nact_crc32.cpp +++ b/src/sys/nact_crc32.cpp @@ -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++) { diff --git a/src/sys/nact_sys1.cpp b/src/sys/nact_sys1.cpp index 7f4301a..69616d8 100644 --- a/src/sys/nact_sys1.cpp +++ b/src/sys/nact_sys1.cpp @@ -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; diff --git a/src/sys/nact_sys2.cpp b/src/sys/nact_sys2.cpp index 5ab52b5..a9e2034 100644 --- a/src/sys/nact_sys2.cpp +++ b/src/sys/nact_sys2.cpp @@ -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; diff --git a/src/sys/nact_sys3.cpp b/src/sys/nact_sys3.cpp index a69f6d7..1a2999f 100644 --- a/src/sys/nact_sys3.cpp +++ b/src/sys/nact_sys3.cpp @@ -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;