• R/O
  • SSH
  • HTTPS

Commit

Frequently used words (click to add to your profile)

javac++androidlinuxc#windowsobjective-ccocoa誰得qtpythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

X operations(XOPS)に非常に近いFPSゲームを制作・リメイクし、成果物をオープンソースとして公開することを目的としたプロジェクトです。


Commit MetaInfo

Revision268 (tree)
Zeit2021-03-06 15:35:27
Autorxops-mikan

Log Message

実行ファイルのある場所を常にカレントディレクトリとするように、一部ファイルパス判定を関数化

Ändern Zusammenfassung

Diff

--- trunk/datafile.cpp (revision 267)
+++ trunk/datafile.cpp (revision 268)
@@ -738,7 +738,7 @@
738738
739739 #ifdef ENABLE_AUTOLOADMIF
740740 //ドライブレターから指定されている(=フルパス)ならば
741- if( fname[1] == ':' ){
741+ if( CheckFullPath(fname) == true ){
742742 char path[MAX_PATH];
743743
744744 //mifのディレクトリ取得
@@ -782,7 +782,7 @@
782782
783783 #ifdef ENABLE_AUTOLOADMIF
784784 //ドライブレターから指定されている(=フルパス)ならば
785- if( fname[1] == ':' ){
785+ if( CheckFullPath(fname) == true ){
786786 char path[MAX_PATH];
787787
788788 //mifのディレクトリ取得
@@ -1378,7 +1378,7 @@
13781378 }
13791379
13801380 pstr = strchr(str, '\r');
1381- if (pstr) {
1381+ if( pstr ){
13821382 *pstr = '\0';
13831383 flag = true;
13841384 }
@@ -1389,6 +1389,16 @@
13891389 return 1;
13901390 }
13911391
1392+//! @brief ファイルパスがフルパスか判定する
1393+//! @param path ファイルパス
1394+//! @return フルパスである(絶対パス):true フルパスでない(相対パス):false
1395+//! @warning Windows環境しか想定されていません。
1396+bool CheckFullPath(char *path)
1397+{
1398+ if( path[1] == ':' ){ return true; }
1399+ return false;
1400+}
1401+
13921402 //! @brief ファイルパスからファイル名を取り除く
13931403 //! @param path ファイルパス(ポインタ)
13941404 //! @param dir ディレクトリ名を受け取るポインタ
--- trunk/datafile.h (revision 267)
+++ trunk/datafile.h (revision 268)
@@ -221,6 +221,7 @@
221221 };
222222
223223 int DeleteLinefeed(char str[]);
224+bool CheckFullPath(char *path);
224225 void GetFileDirectory(char *path, char *dir);
225226
226227 #endif
\ No newline at end of file
--- trunk/main.cpp (revision 267)
+++ trunk/main.cpp (revision 268)
@@ -65,21 +65,19 @@
6565 #ifdef ENABLE_AUTOLOADMIF
6666 bool NoBriefingFlag = false;
6767 int gamemode = 0;
68- strcpy(path, "");
6968 #endif
7069
7170 //乱数初期化
7271 InitRand();
7372
73+ //実行ファイルのある場所を、カレントディレクトリにする。
74+ GetFileDirectory(__argv[0], path);
75+ chdir(path);
76+
7477 #ifdef _DEBUG
7578 //メモリリークの検出
7679 _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);
7780
78- //実行ファイルのある場所を、カレントディレクトリにする。
79- GetModuleFileName(NULL, path, MAX_PATH);
80- PathRemoveFileSpec(path);
81- SetCurrentDirectory(path);
82-
8381 char str[255];
8482 strcpy(str, "[Information]\nThe compiler is the Debug mode.\nIf release the software, Switch compiler to Release mode.");
8583 MessageBox(NULL, str, GAMENAME, MB_OK);
@@ -104,6 +102,17 @@
104102 #endif
105103
106104 #ifdef ENABLE_AUTOLOADMIF
105+ //"Dir"が与えられていたら、カレントディレクトリ移動
106+ if( (strcmp(__argv[param], "-Dir") == 0)||(strcmp(__argv[param], "/Dir") == 0)||
107+ (strcmp(__argv[param], "-dir") == 0)||(strcmp(__argv[param], "/dir") == 0)
108+ ){
109+ if( (param+1) < __argc ){
110+ chdir(__argv[param+1]);
111+ param += 1;
112+ }
113+ continue;
114+ }
115+
107116 //"NoBriefing"が与えられていたら、(.mif指定時は)ブリーフィングを省略する
108117 if( (strcmp(__argv[param], "-NoBriefing") == 0)||(strcmp(__argv[param], "/NoBriefing") == 0)||
109118 (strcmp(__argv[param], "-nobriefing") == 0)||(strcmp(__argv[param], "/bobriefing") == 0)
--- trunk/main.h (revision 267)
+++ trunk/main.h (revision 268)
@@ -63,6 +63,7 @@
6363 #include <stdlib.h>
6464 #include <math.h>
6565 #include <string.h>
66+#include <direct.h>
6667
6768 #define ENABLE_BUG_HUMANWEAPON //!< 範囲外の人・武器種類番号を用いたバグを再現する(コメント化で無効)
6869 #define ENABLE_BUG_TEAMID //!< チーム番号を負数に設定した際のバグを再現する(コメント化で無効)