Revision: 7344 http://sourceforge.jp/projects/ttssh2/scm/svn/commits/7344 Author: zmatsuo Date: 2018-12-23 02:30:03 +0900 (Sun, 23 Dec 2018) Log Message: ----------- utf8対応、次のコマンドをテスト、修正 fileopen fileconcat filecreate filedelete filerename filetruncate filesearch filestat findfirst findnext findclose foldercreate folderdelete foldersearch setfileattr getfileattr setpassword getpassword ispassword delpassword Modified Paths: -------------- branches/cmake/teraterm/ttpmacro/ttl.cpp branches/cmake/teraterm/ttpmacro/ttl_gui.cpp branches/cmake/teraterm/ttpmacro/ttmbuff.c branches/cmake/tests/gui_commands_test_utf8.ttl Added Paths: ----------- branches/cmake/tests/test_file.ttl -------------- next part -------------- Modified: branches/cmake/teraterm/ttpmacro/ttl.cpp =================================================================== --- branches/cmake/teraterm/ttpmacro/ttl.cpp 2018-12-22 17:29:42 UTC (rev 7343) +++ branches/cmake/teraterm/ttpmacro/ttl.cpp 2018-12-22 17:30:03 UTC (rev 7344) @@ -99,6 +99,15 @@ static HANDLE FHandle[NumFHandle]; static long FPointer[NumFHandle]; +#if 0 +#define _lcreat(p1,p2) x_win16_lcreat(p1,p2) +#define _lopen(p1,p2) x_win16_lopen(p1,p2) +#define _lclose(p1) x_win16_lclose(p1) +#define _lread(p1,p2,p3) x_win16_lread(p1,p2,p3) +#define _lwrite(p1,p2,p3) x_win16_lwrite(p1,p2,p3) +#define _llseek(p1,p2,p3) x_win16_llseek(p1,p2,p3) +#endif + // forward declaration int ExecCmnd(); @@ -972,11 +981,12 @@ if (Str[0]==0) return Err; GetAbsPath(Str,sizeof(Str)); - if (! DoesFileExist(Str)) return Err; + tc StrU8 = tc::fromUtf8(Str); + if (_taccess(StrU8, 0) != 0) return Err; if (Str2[0]==0) // delete all password - WritePrivateProfileString(_T("Password"),NULL,NULL,(tc)Str); + WritePrivateProfileString(_T("Password"),NULL,NULL,StrU8); else // delete password specified by Str2 - WritePrivateProfileString(_T("Password"),(tc)Str2,NULL,(tc)Str); + WritePrivateProfileString(_T("Password"),(tc)Str2,NULL,StrU8); return Err; } @@ -1340,7 +1350,7 @@ if ((Err==0) && (GetFirstChar()!=0)) Err = ErrSyntax; if (Err!=0) return Err; - _lclose(FH); + CloseHandle(FH); HandleFree(fhi); return Err; } @@ -1351,7 +1361,6 @@ HANDLE FH1, FH2; int c; TStrVal FName1, FName2; - BYTE buf[1024]; Err = 0; GetStrVal(FName1,&Err); @@ -1379,9 +1388,13 @@ return Err; } - FH1 = _lopen(FName1,OF_WRITE); + FH1 = CreateFile(tc::fromUtf8(FName1), + GENERIC_WRITE, FILE_SHARE_WRITE, NULL, + OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if (FH1 == INVALID_HANDLE_VALUE) - FH1 = _lcreat(FName1,0); + FH1 = CreateFile(tc::fromUtf8(FName1), + GENERIC_WRITE, FILE_SHARE_WRITE, NULL, + CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); if (FH1 == INVALID_HANDLE_VALUE) { SetResult(3); return Err; @@ -1388,17 +1401,20 @@ } _llseek(FH1,0,2); - FH2 = _lopen(FName2,OF_READ); + FH2 = CreateFile(tc::fromUtf8(FName2), + GENERIC_READ, FILE_SHARE_READ, NULL, + OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if (FH2 != INVALID_HANDLE_VALUE) { + BYTE buf[1024]; do { c = _lread(FH2,&(buf[0]),sizeof(buf)); if (c>0) _lwrite(FH1,&(buf[0]),c); } while (c >= sizeof(buf)); - _lclose(FH2); + CloseHandle(FH2); } - _lclose(FH1); + CloseHandle(FH1); SetResult(0); return Err; @@ -1432,7 +1448,7 @@ } if (_stricmp(FName1,FName2)==0) return Err; - CopyFile((tc)FName1,(tc)FName2,FALSE); + CopyFile(tc::fromUtf8(FName1),tc::fromUtf8(FName2),FALSE); SetResult(0); return Err; } @@ -1461,7 +1477,9 @@ SetResult(-1); return Err; } - FH = _lcreat(FName,0); + FH = CreateFile(tc::fromUtf8(FName), + GENERIC_WRITE, FILE_SHARE_WRITE, NULL, + CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); if (FH == INVALID_HANDLE_VALUE) { SetResult(2); } @@ -1471,7 +1489,7 @@ fhi = HandlePut(FH); SetIntVal(VarId, fhi); if (fhi == -1) { - _lclose(FH); + CloseHandle(FH); } return Err; } @@ -1495,8 +1513,8 @@ SetResult(-1); return Err; } - - if (remove(FName) != 0) { + + if (_tremove(tc::fromUtf8(FName)) != 0) { SetResult(-1); } else { @@ -1616,14 +1634,21 @@ return Err; } + tc FNameT = tc::fromUtf8(FName); if (ReadonlyFlag) { - FH = _lopen(FName,OF_READ); + FH = CreateFile(FNameT, + GENERIC_READ, FILE_SHARE_READ, NULL, + OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); } else { - FH = _lopen(FName,OF_READWRITE); + FH = CreateFile(FNameT, + GENERIC_WRITE|GENERIC_READ, FILE_SHARE_WRITE, NULL, + OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); } if (FH == INVALID_HANDLE_VALUE) - FH = _lcreat(FName,0); + FH = CreateFile(FNameT, + GENERIC_WRITE, FILE_SHARE_WRITE, NULL, + CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); if (FH == INVALID_HANDLE_VALUE) { SetIntVal(VarId, -1); return ErrCantOpen; @@ -1679,7 +1704,7 @@ return Err; } -// Format: fileunlock <file handle> +// Format: fileunlock <file handle> // (2012.4.19 yutaka) WORD TTLFileUnLock() { @@ -1797,7 +1822,7 @@ { Str[i] = b; } - } + } if (EndFile) SetResult(1); @@ -1840,8 +1865,8 @@ SetResult(-2); return Err; } - if (rename(FName1,FName2) != 0) { - // リネームに失敗したら、エラーで返す。 + if (_trename(tc::fromUtf8(FName1), tc::fromUtf8(FName2)) != 0) { + // リネームに失敗したら、エラーで返す。 SetResult(-3); return Err; } @@ -1863,7 +1888,7 @@ if (Err!=0) return Err; GetAbsPath(FName,sizeof(FName)); - if (DoesFileExist(FName)) + if (_taccess(tc::fromUtf8(FName), 0) == 0) SetResult(1); else SetResult(0); @@ -1927,18 +1952,18 @@ goto end; } - ret = _stat(FName, &st); + ret = _tstat(tc::fromUtf8(FName), &st); if (ret != 0) { goto end; } - if (CheckParameterGiven()) { + if (CheckParameterGiven()) { GetIntVar(&SizeVarId,&Err); if (Err!=0) return Err; SetIntVal(SizeVarId, st.st_size); } - if (CheckParameterGiven()) { + if (CheckParameterGiven()) { GetStrVar(&TimeVarId,&Err); if (Err!=0) return Err; tmp = localtime(&st.st_mtime); @@ -1946,7 +1971,7 @@ SetStrVal(TimeVarId, TimeStr); } - if (CheckParameterGiven()) { + if (CheckParameterGiven()) { GetStrVar(&DrvVarId,&Err); if (Err!=0) return Err; _snprintf_s(DrvStr, sizeof(DrvStr), _TRUNCATE, "%c", st.st_dev + 'A'); @@ -2050,7 +2075,7 @@ // ファイルの1バイト目がヒットすると、ファイルポインタが突き破って // INVALID_SET_FILE_POINTER になるので、 // ゼロオフセットになるように調整する。(2008.10.10 yutaka) - if (pos == INVALID_SET_FILE_POINTER) + if (pos == INVALID_SET_FILE_POINTER) _llseek(FH, 0, 0); SetResult(1); } else { @@ -2080,7 +2105,7 @@ goto end; } - if (CheckParameterGiven()) { + if (CheckParameterGiven()) { GetIntVal(&TruncByte,&Err); if (Err!=0) return Err; } else { @@ -2089,16 +2114,16 @@ } // ファイルを指定したサイズで切り詰める。 - ret = _sopen_s( &fh, FName, _O_RDWR | _O_CREAT, _SH_DENYNO, _S_IREAD | _S_IWRITE ); - if (ret != 0) { + ret = _tsopen_s( &fh, tc::fromUtf8(FName), _O_RDWR | _O_CREAT, _SH_DENYNO, _S_IREAD | _S_IWRITE ); + if (ret != 0) { Err = ErrCantOpen; goto end; - } - ret = _chsize_s(fh, TruncByte); - if (ret != 0) { + } + ret = _chsize_s(fh, TruncByte); + if (ret != 0) { Err = ErrInvalidCtl; goto end; - } + } result = 0; Err = 0; @@ -2180,7 +2205,7 @@ WORD Err; TStrVal Dir; int i; - struct _finddata_t data; + struct _tfinddata64_t data; Err = 0; GetIntVar(&DH,&Err); @@ -2198,9 +2223,9 @@ i++; if (i<NumDirHandle) { - DirHandle[i] = _findfirst(Dir,&data); + DirHandle[i] = _tfindfirst64(tc::fromUtf8(Dir),&data); if (DirHandle[i]!=-1L) - SetStrVal(Name,data.name); + SetStrVal(Name, (char *)(const char *)(u8)data.name); else i = -1; } @@ -2223,7 +2248,7 @@ TVarId Name; WORD Err; int DH; - struct _finddata_t data; + struct _tfinddata64_t data; Err = 0; GetIntVal(&DH,&Err); @@ -2234,9 +2259,9 @@ if ((DH>=0) && (DH<NumDirHandle) && (DirHandle[DH]!=-1L) && - (_findnext(DirHandle[DH],&data)==0)) + (_tfindnext64(DirHandle[DH],&data)==0)) { - SetStrVal(Name,data.name); + SetStrVal(Name,(char *)(const char *)(u8)data.name); SetResult(1); } else { @@ -2274,7 +2299,7 @@ return Err; } - if (CreateDirectory((tc)FName, NULL) == 0) { + if (CreateDirectory(tc::fromUtf8(FName), NULL) == 0) { SetResult(2); } else { @@ -2303,7 +2328,7 @@ return Err; } - if (RemoveDirectory((tc)FName) == 0) { + if (RemoveDirectory(tc::fromUtf8(FName)) == 0) { SetResult(2); } else { @@ -2325,7 +2350,7 @@ if (Err!=0) return Err; GetAbsPath(FName,sizeof(FName)); - if (DoesFolderExist(FName)) { + if (_taccess(tc::fromUtf8(FName), 0) == 0) { SetResult(1); } else { @@ -2423,7 +2448,8 @@ Err = ErrSyntax; if (Err!=0) return Err; - SetResult(GetFileAttributes((tc)Filename)); + GetAbsPath(Filename, sizeof(Filename)); // @@ TODO + SetResult(GetFileAttributes(tc::fromUtf8(Filename))); return Err; } @@ -2485,7 +2511,7 @@ if (WSAIoctl(sock, SIO_GET_INTERFACE_LIST, NULL, 0, info, sizeof(info), &socknum, NULL, NULL) != SOCKET_ERROR) { n = socknum / sizeof(info[0]); for (i = 0 ; i < n ; i++) { - if ((info[i].iiFlags & IFF_UP) == 0) + if ((info[i].iiFlags & IFF_UP) == 0) continue; if ((info[i].iiFlags & IFF_LOOPBACK) != 0) continue; @@ -2662,7 +2688,7 @@ if (Err!=0) return Err; // 文字列が空の場合はエラーとする。 - if (FileNameStr[0]==0 || + if (FileNameStr[0]==0 || KeyStr[0]==0 || VarStr[0]==0) // "getpassword"同様、空パスワードも許可しない。 Err = ErrSyntax; @@ -2673,7 +2699,7 @@ // パスワードを暗号化する。 Encrypt(VarStr, Temp); - if (WritePrivateProfileString(_T("Password"), (tc)KeyStr, (tc)Temp, (tc)FileNameStr) != 0) + if (WritePrivateProfileString(_T("Password"), (tc)KeyStr, (tc)Temp, tc::fromUtf8(FileNameStr)) != 0) result = 1; /* success */ SetResult(result); // 成功可否を設定する。 @@ -2686,7 +2712,7 @@ TStrVal FileNameStr, KeyStr; TCHAR Temp[512]; WORD Err; - int result = 0; + int result = 0; Err = 0; GetStrVal(FileNameStr, &Err); // ファイル名 @@ -2696,7 +2722,7 @@ if (Err!=0) return Err; // 文字列が空の場合はエラーとする。 - if (FileNameStr[0]==0 || + if (FileNameStr[0]==0 || KeyStr[0]==0) Err = ErrSyntax; if (Err!=0) return Err; @@ -2705,11 +2731,11 @@ Temp[0] = 0; GetPrivateProfileString(_T("Password"), (tc)KeyStr, _T(""), - Temp, _countof(Temp), (tc)FileNameStr); + Temp, _countof(Temp), tc::fromUtf8(FileNameStr)); if (Temp[0] == 0) { // password not exist - result = 0; + result = 0; } else { - result = 1; + result = 1; } SetResult(result); // 成功可否を設定する。 @@ -2750,7 +2776,7 @@ char *format; BOOL set_result; const char *tz = NULL; - char tz_copy[128]; + char tz_copy[128]; // Save timezone tz = getenv("TZ"); @@ -3135,7 +3161,7 @@ // logrotate rotate num // logrotate halt // -WORD TTLLogRotate() +WORD TTLLogRotate() { WORD Err; char Str[MaxStrLen]; @@ -3191,7 +3217,7 @@ } else if (strcmp(Str, "halt") == 0) { Err = 0; _snprintf_s(buf, sizeof(buf), _TRUNCATE, "%s", Str); - } + } if (Err!=0) return Err; SetFile(buf); @@ -3200,7 +3226,7 @@ return Err; } -WORD TTLLogInfo() +WORD TTLLogInfo() { WORD Err; TVarId VarId; @@ -3545,7 +3571,7 @@ return -1; } - // return + // return // 0以上: 選択項目 // -1: キャンセル // -2: close @@ -3640,7 +3666,7 @@ // add 'random' command // SYNOPSIS: random <intvar> <value> -// DESCRIPTION: +// DESCRIPTION: // This command generates the random value from 0 to <value> and // stores the value to <intvar>. // (2006.2.11 yutaka) @@ -4160,7 +4186,7 @@ } strncat_s(buff, bufflen, tmp, _TRUNCATE); break; - case TypString: + case TypString: AddBroadcastString(buff, bufflen, StrVarPtr((TVarId)Val)); break; default: @@ -4388,6 +4414,7 @@ Err = ErrSyntax; if (Err!=0) return Err; + GetAbsPath(Filename, sizeof(Filename)); // @@ TODO if (SetFileAttributes(tc::fromUtf8(Filename), attributes) == 0) { SetResult(0); } @@ -4936,7 +4963,7 @@ ret = FindRegexStringOne(Str2, strlen(Str2), Str1, strlen(Str1)); if (ret > 0) { // matched - result = ret; + result = ret; } else { result = 0; } @@ -5048,7 +5075,7 @@ <-->len XXXXXX****YYY ^index(np) - ^np+len + ^np+len <-->srclen - len - index ↓ XXXXXXYYY @@ -5220,16 +5247,16 @@ // 文字列の先頭から検索する for (i = 0 ; i < srclen ; i++) { - if (table[srcptr[i]] == 0) + if (table[srcptr[i]] == 0) break; } // 削除されない有効な文字列の始まり。 // すべて削除対象となる場合は、start == srclen 。 - start = i; + start = i; // 文字列の末尾から検索する for (i = srclen - 1 ; i >= 0 ; i--) { - if (table[srcptr[i]] == 0) + if (table[srcptr[i]] == 0) break; } // 削除されない有効な文字列の終わり。 @@ -5303,7 +5330,7 @@ tok[i] = strtok_s(NULL, delimchars, &last); if (tok[i] == NULL) break; - } + } #else /* strtokを使うと、連続した区切りが1つに丸められるため、自前でポインタを * たどる。ただし、区切り文字は1つのみとする。 @@ -5314,7 +5341,7 @@ if (i >= maxvar) goto end; } - + for (p = strtok_s(p, delimchars, &last); p != NULL ; p = strtok_s(NULL, delimchars, &last) ) { tok[i++] = p; if (i >= maxvar) @@ -5617,7 +5644,7 @@ // 'waitregex'(wait regular expression): wait command with regular expression // -// This command has almost same function of 'wait' command. Additionally 'waitregex' can search +// This command has almost same function of 'wait' command. Additionally 'waitregex' can search // the keyword with regular expression. Tera Term uses a regex library that is called 'Oniguruma'. // cf. http://www.geocities.jp/kosako3/oniguruma/ // @@ -5881,7 +5908,7 @@ return SendCmnd(CmdYmodemSend,IdTTLWaitCmndResult); } -// SYNOPSIS: +// SYNOPSIS: // scpsend "c:\usr\sample.chm" "doc/sample.chm" // scpsend "c:\usr\sample.chm" WORD TTLScpSend() @@ -5913,7 +5940,7 @@ return SendCmnd(CmdScpSend, 0); } -// SYNOPSIS: +// SYNOPSIS: // scprecv "foo.txt" // scprecv "src/foo.txt" "c:\foo.txt" WORD TTLScpRecv() @@ -6040,7 +6067,7 @@ return Err; } - if (Result) + if (Result) switch (WId) { case RsvBasename: Err = TTLBasename(); break; @@ -6499,7 +6526,7 @@ else E = NewStrVar(Cmnd,StrVarPtr((TVarId)Val)); break; - default: + default: E = FALSE; } if (! E) Err = ErrTooManyVar; Modified: branches/cmake/teraterm/ttpmacro/ttl_gui.cpp =================================================================== --- branches/cmake/teraterm/ttpmacro/ttl_gui.cpp 2018-12-22 17:29:42 UTC (rev 7343) +++ branches/cmake/teraterm/ttpmacro/ttl_gui.cpp 2018-12-22 17:30:03 UTC (rev 7344) @@ -505,7 +505,7 @@ WORD TTLGetPassword() { TStrVal Str, Str2, Temp2; - char Temp[512]; + TCHAR Temp[512]; WORD Err; TVarId VarId; int result = 0; /* failure */ @@ -523,8 +523,8 @@ GetAbsPath(Str,sizeof(Str)); - GetPrivateProfileStringA("Password",Str2,"", - Temp,sizeof(Temp), Str); + GetPrivateProfileString(_T("Password"),(tc)Str2,_T(""), + Temp,_countof(Temp), tc::fromUtf8(Str)); if (Temp[0]==0) // password not exist { #if defined(UNICODE) @@ -538,14 +538,16 @@ OpenInpDlg(Temp2, Str2, _T("Enter password"), _T(""), TRUE); #endif if (Temp2[0]!=0) { - Encrypt(Temp2,Temp); - if (WritePrivateProfileStringA("Password",Str2,Temp, Str) != 0) { + char TempA[512]; + Encrypt(Temp2, TempA); + if (WritePrivateProfileString(_T("Password"), (tc)Str2, (tc)TempA, tc::fromUtf8(Str)) != 0) { result = 1; /* success */ } } } else {// password exist - Decrypt(Temp,Temp2); + u8 TempU8 = Temp; + Decrypt((PCHAR)(const char *)TempU8,Temp2); result = 1; /* success */ } Modified: branches/cmake/teraterm/ttpmacro/ttmbuff.c =================================================================== --- branches/cmake/teraterm/ttpmacro/ttmbuff.c 2018-12-22 17:29:42 UTC (rev 7343) +++ branches/cmake/teraterm/ttpmacro/ttmbuff.c 2018-12-22 17:30:03 UTC (rev 7344) @@ -36,7 +36,6 @@ #include "ttmparse.h" #include "ttlib.h" #include "fileread.h" -#include "fileread.h" #include "ttmbuff.h" Modified: branches/cmake/tests/gui_commands_test_utf8.ttl =================================================================== --- branches/cmake/tests/gui_commands_test_utf8.ttl 2018-12-22 17:29:42 UTC (rev 7343) +++ branches/cmake/tests/gui_commands_test_utf8.ttl 2018-12-22 17:30:03 UTC (rev 7344) @@ -2,15 +2,15 @@ ;;; test gui commands ;;; ; -;call test_messagebox -;call test_errordialogbox -;call test_yesnobox -;call test_inputbox -;call test_passwordbox -;call test_statusbox -;call test_macrodialogbox -;call test_listbox -;call test_filenamebox +call test_messagebox +call test_errordialogbox +call test_yesnobox +call test_inputbox +call test_passwordbox +call test_statusbox +call test_macrodialogbox +call test_listbox +call test_filenamebox call test_dirnamebox messagebox "finish all tests" "test" end Added: branches/cmake/tests/test_file.ttl =================================================================== --- branches/cmake/tests/test_file.ttl (rev 0) +++ branches/cmake/tests/test_file.ttl 2018-12-22 17:30:03 UTC (rev 7344) @@ -0,0 +1,198 @@ +;;; +;;; file commands +;;; +;call test_macrodir +;call test_open +;call test_filecommands +;call test_filesearch +;call test_filestat +;call test_find +;call test_folder +call test_password +messagebox "finish all tests" "test_file.ttl" +end + + +;;; +;;; test folder +;;; +:test_macrodir +:retry +getdir macro_dir +dirnamebox "test_file.ttl folder for test/テストで使用するフォルダ" macro_dir +s = "folder for test:\nテストで使用するフォルダ:\n" +strspecial s +strconcat s macro_dir +yesnobox s "test_file.ttl" +if result == 0 goto retry +setdir macro_dir +return + +;;; +;;; test fileopen +;;; +:test_open +filenamebox '書き込みファイル' 1 +if result == 0 goto test_open +fname = inputstr +fileopen fh fname 1 +filewrite fh "testこんにちは안녕하세요"#13#10 +filewriteln fh "testこんにちは안녕하세요"#13#10 +fileclose fh +return + +;;; +;;; fileopen (create) +;;; filewrite +;;; filewriteln +;;; fileclose +;;; filerename +;;; filecreate +;;; filedelete +;;; filecopy +;;; fileconcat +;;; +:test_filecommands +fname_1 = "00こんにちは.txt" +fileopen fh fname_1 1 +filewrite fh "test1 こんにちは안녕하세요"#13#10 +fileclose fh +fname_2 = "00مرحبا هناك.txt" +filerename fname_1 fname_2 +if result <> 0 messagebox "filerename error" "test_file.ttl" +filecreate fh fname_1 +filewriteln fh "test2 こんにちは안녕하세요" +fileclose fh +messagebox "checkfiles 1" "test_file.ttl" +fileconcat fname_1 fname_2 +messagebox "checkfiles 2" "test_file.ttl" + +if result <> 0 messagebox "fileconcat error" "test_file.ttl" +fname_3 = "00привет там.txt" +filecopy fname_1 fname_3 +if result <> 0 messagebox "filecopy error" "test_file.ttl" +filetruncate fname_1 1024 +if result <> 0 messagebox "filetruncate error" "test_file.ttl" +messagebox "checkfiles 3" "test_file.ttl" +filedelete fname_1 +if result <> 0 messagebox "filedelete error" "test_file.ttl" +filedelete fname_2 +if result <> 0 messagebox "filedelete error" "test_file.ttl" +filedelete fname_3 +if result <> 0 messagebox "filedelete error" "test_file.ttl" +messagebox "checkfiles 4" "test_file.ttl" + +;;; +;;; filesearch +;;; +:test_filesearch +fname = "hello ワールド.bin" +filesearch fname +if result = 1 messagebox "check filesearch 1" "test_file.ttl" +;;fileopen fh fname 1 1 ;@@@@ TODO read only でファイルが生成できてしまう +fileopen fh fname 1 +filewriteln fh "this is hello world" +fileclose fh +filesearch fname +if result = 0 messagebox "check filesearch 2" "test_file.ttl" +filedelete fname +filesearch fname +if result = 1 messagebox "check filesearch 3" "test_file.ttl" +return + +;;; +;;; filestat +;;; +:test_filestat +fname = "statテスト.bin" +filetruncate fname 10240 +filestat fname size +if result = -1 messagebox "check filestat 1" "test_file.ttl" +if size <> 10240 messagebox "check filestat 2" "test_file.ttl" +filedelete fname +return + +;;; +;;; findfirst +;;; findnext +;;; findclose +;;; +:test_find +n = 0 +filelist = "" +findfirst dh "*.ttl" filename +if result = 1 then + while result + strconcat filelist filename + strconcat filelist "\n" + n = n + 1 + findnext dh filename + endwhile +endif +findclose dh +strspecial filelist +messagebox filelist "test_file.ttl" +return + +;;; +;;; foldercreate +;;; folderdelete +;;; foldersearch +;;; setfileattr +;;; getfileattr +;;; +:test_folder +dname = "フォルダمجلدaa" +foldersearch dname +if result == 1 messagebox "check foldersearch 1" "test_file.ttl" +foldercreate "フォルダمجلدaa" +fname = "フォルダمجلدaa/test.txt" +filecreate fh fname +filewriteln fh "こんにちは" +fileclose fh +getfileattr fname +if result == -1 messagebox "check getfileattr" "test_file.ttl" +foldersearch dname +if result == 0 messagebox "check foldersearch 2" "test_file.ttl" +folderdelete dname +if result == 0 messagebox "check folderdelete 1" "test_file.ttl" +setfileattr fname $1 +if result == 0 messagebox "check setfileattr 1" "test_file.ttl" +setfileattr fname $80 +if result == 0 messagebox "check setfileattr 2" "test_file.ttl" +filedelete fname +folderdelete dname +if result <> 0 messagebox "check folderdelete 2" "test_file.ttl" +foldersearch dname +if result == 1 messagebox "check foldersearch 3" "test_file.ttl" +return + +;;; +;;; setpassword +;;; getpassword +;;; ispassword +;;; delpassword +;;; +:test_password +pwfile = "パスワード.txt" +filedelete pwfile +pw1 = "password" +setpassword pwfile "password1" pw1 +if result == 0 messagebox "check setpassword 1" "test_file.ttl" +getpassword pwfile "password1" pw2 +if result == 0 messagebox "check getpassword 2" "test_file.ttl" +strcompare pw1 pw2 +if result <> 0 messagebox "check setpassword 3" "test_file.ttl" +getpassword pwfile "password2" pw1 +if result == 0 messagebox "check getpassword 4" "test_file.ttl" +getpassword pwfile "password2" pw2 +if result == 0 messagebox "check getpassword 5" "test_file.ttl" +strcompare pw1 pw2 +if result <> 0 messagebox "check setpassword 6" "test_file.ttl" +ispassword pwfile "password2" +if result <> 1 messagebox "check ispassword 7" "test_file.ttl" +delpassword pwfile "password2" +ispassword pwfile "password2" +if result <> 0 messagebox "check ispassword 8" "test_file.ttl" +filedelete pwfile +return