From svnnotify @ sourceforge.jp Tue Jan 3 18:47:15 2012 From: svnnotify @ sourceforge.jp (svnnotify @ sourceforge.jp) Date: Tue, 03 Jan 2012 18:47:15 +0900 Subject: [Ttssh2-commit] =?utf-8?b?WzQ3ODddICDoi7HoqLM=?= Message-ID: <1325584035.438968.13748.nullmailer@users.sourceforge.jp> Revision: 4787 http://sourceforge.jp/projects/ttssh2/svn/view?view=rev&revision=4787 Author: yutakapon Date: 2012-01-03 18:47:15 +0900 (Tue, 03 Jan 2012) Log Message: ----------- 英訳 Modified Paths: -------------- trunk/doc/en/html/about/history.html trunk/doc/en/html/setup/teraterm-misc.html trunk/doc/en/html/setup/teraterm.html -------------- next part -------------- Modified: trunk/doc/en/html/about/history.html =================================================================== --- trunk/doc/en/html/about/history.html 2011-12-29 12:29:38 UTC (rev 4786) +++ trunk/doc/en/html/about/history.html 2012-01-03 09:47:15 UTC (rev 4787) @@ -46,16 +46,16 @@
  • OSC 116 (Reset TEK window text foreground color)
  • added support for reading the Clipboard by using the OSC 52(clipboard accessing) control sequence.
  • - +
  • added the LogLockExclusive entry in the teraterm.ini file. The default value is on. +
  • Bug fixes
  • Modified: trunk/doc/en/html/setup/teraterm-misc.html =================================================================== --- trunk/doc/en/html/setup/teraterm-misc.html 2011-12-29 12:29:38 UTC (rev 4786) +++ trunk/doc/en/html/setup/teraterm-misc.html 2012-01-03 09:47:15 UTC (rev 4787) @@ -244,11 +244,11 @@ - + Modified: trunk/doc/en/html/setup/teraterm.html =================================================================== --- trunk/doc/en/html/setup/teraterm.html 2011-12-29 12:29:38 UTC (rev 4786) +++ trunk/doc/en/html/setup/teraterm.html 2012-01-03 09:47:15 UTC (rev 4787) @@ -128,7 +128,7 @@
  • Clear the screen when disconnected
  • Disable accelerator key of Duplicate session
  • A browser by using Clickable URL
  • - +
  • Exclusive-lock log file
  • From svnnotify @ sourceforge.jp Tue Jan 3 19:13:28 2012 From: svnnotify @ sourceforge.jp (svnnotify @ sourceforge.jp) Date: Tue, 03 Jan 2012 19:13:28 +0900 Subject: [Ttssh2-commit] [4788] Copyright updated to 2012. Message-ID: <1325585608.772696.14929.nullmailer@users.sourceforge.jp> Revision: 4788 http://sourceforge.jp/projects/ttssh2/svn/view?view=rev&revision=4788 Author: yutakapon Date: 2012-01-03 19:13:28 +0900 (Tue, 03 Jan 2012) Log Message: ----------- Copyright updated to 2012. - Tera Term - TTSSH - HTML help index Modified Paths: -------------- trunk/doc/en/html/index.html trunk/doc/en/html/macro/index.html trunk/doc/ja/html/index.html trunk/doc/ja/html/macro/index.html trunk/teraterm/common/tt_res.h trunk/teraterm/teraterm/ttermpro.rc trunk/teraterm/ttpdlg/ttpdlg.rc trunk/ttssh2/ttxssh/ttxssh.rc -------------- next part -------------- Modified: trunk/doc/en/html/index.html =================================================================== --- trunk/doc/en/html/index.html 2012-01-03 09:47:15 UTC (rev 4787) +++ trunk/doc/en/html/index.html 2012-01-03 10:13:28 UTC (rev 4788) @@ -13,7 +13,7 @@

    Copyright (C) 1994-1998 T. Teranishi
    -Copyright (C) 2004-2011 TeraTerm Project
    +Copyright (C) 2004-2012 TeraTerm Project
    All Rights Reserved.

    Modified: trunk/doc/en/html/macro/index.html =================================================================== --- trunk/doc/en/html/macro/index.html 2012-01-03 09:47:15 UTC (rev 4787) +++ trunk/doc/en/html/macro/index.html 2012-01-03 10:13:28 UTC (rev 4788) @@ -13,7 +13,7 @@

    Copyright (C) 1994-1998 T. Teranishi
    -Copyright (C) 2004-2011 TeraTerm Project
    +Copyright (C) 2004-2012 TeraTerm Project
    All Rights Reserved.

    Modified: trunk/doc/ja/html/index.html =================================================================== --- trunk/doc/ja/html/index.html 2012-01-03 09:47:15 UTC (rev 4787) +++ trunk/doc/ja/html/index.html 2012-01-03 10:13:28 UTC (rev 4788) @@ -13,7 +13,7 @@

    Copyright (C) 1994-1998 T. Teranishi
    -Copyright (C) 2004-2011 TeraTerm Project
    +Copyright (C) 2004-2012 TeraTerm Project
    All Rights Reserved.

    Modified: trunk/doc/ja/html/macro/index.html =================================================================== --- trunk/doc/ja/html/macro/index.html 2012-01-03 09:47:15 UTC (rev 4787) +++ trunk/doc/ja/html/macro/index.html 2012-01-03 10:13:28 UTC (rev 4788) @@ -13,7 +13,7 @@

    Copyright (C) 1994-1998 T. Teranishi
    -Copyright (C) 2004-2011 TeraTerm Project
    +Copyright (C) 2004-2012 TeraTerm Project
    All Rights Reserved.

    Modified: trunk/teraterm/common/tt_res.h =================================================================== --- trunk/teraterm/common/tt_res.h 2012-01-03 09:47:15 UTC (rev 4787) +++ trunk/teraterm/common/tt_res.h 2012-01-03 10:13:28 UTC (rev 4788) @@ -1,6 +1,6 @@ //{{NO_DEPENDENCIES}} // Microsoft Visual C++ generated include file. -// Used by t:\ttssh2\teraterm\teraterm\ttermpro.rc +// Used by c:\usr\ttssh2\teraterm\teraterm\ttermpro.rc // #define IDI_TTERM 100 #define IDR_ACC 100 Modified: trunk/teraterm/teraterm/ttermpro.rc =================================================================== --- trunk/teraterm/teraterm/ttermpro.rc 2012-01-03 09:47:15 UTC (rev 4787) +++ trunk/teraterm/teraterm/ttermpro.rc 2012-01-03 10:13:28 UTC (rev 4788) @@ -396,7 +396,7 @@ VALUE "FileDescription", "Tera Term" VALUE "FileVersion", "4, 72, 0, 0" VALUE "InternalName", "TTERMPRO" - VALUE "LegalCopyright", "(C)TeraTerm Project 2004-2011, (C)T. Teranishi 1994-1998" + VALUE "LegalCopyright", "(C)TeraTerm Project 2004-2012, (C)T. Teranishi 1994-1998" VALUE "OriginalFilename", "TTERMPRO.EXE" VALUE "ProductName", "Tera Term" VALUE "ProductVersion", "4, 72, 0, 0" Modified: trunk/teraterm/ttpdlg/ttpdlg.rc =================================================================== --- trunk/teraterm/ttpdlg/ttpdlg.rc 2012-01-03 09:47:15 UTC (rev 4787) +++ trunk/teraterm/ttpdlg/ttpdlg.rc 2012-01-03 10:13:28 UTC (rev 4788) @@ -238,7 +238,7 @@ "Static",SS_LEFTNOWORDWRAP | WS_GROUP,38,59,134,8 DEFPUSHBUTTON "OK",IDOK,145,6,32,16,WS_GROUP CONTROL "All Rights Reserved.",IDC_RIGHTS_LABEL,"Static",SS_LEFTNOWORDWRAP | WS_GROUP,38,75,76,8 - CONTROL "(C) 2004-2011 Tera Term Project",IDC_PROJECT_LABEL, + CONTROL "(C) 2004-2012 Tera Term Project",IDC_PROJECT_LABEL, "Static",SS_LEFTNOWORDWRAP | WS_GROUP,38,67,122,9 LTEXT "Includes:",IDC_INLUCDE_LABEL,38,26,31,8 LTEXT "Version",IDC_TT_VERSION,38,10,101,8 Modified: trunk/ttssh2/ttxssh/ttxssh.rc =================================================================== --- trunk/ttssh2/ttxssh/ttxssh.rc 2012-01-03 09:47:15 UTC (rev 4787) +++ trunk/ttssh2/ttxssh/ttxssh.rc 2012-01-03 10:13:28 UTC (rev 4788) @@ -58,9 +58,9 @@ FONT 8, "Tahoma", 0, 0, 0x0 BEGIN LTEXT "Tera Term Secure Shell extension, ",IDC_TTSSH_VERSION,6,7,220,15 - ICON "",IDC_TTSSH_ICON,234,7,21,20 + ICON "",IDC_TTSSH_ICON,234,7,20,20 LTEXT "Compatible with SSH protocol version 1.5 and 2.0",IDC_SSHVERSIONS,6,23,206,11 - LTEXT "Includes:\r\nTTSSH 1.5.4 (Robert O'Callahan roc+tt @ cs.cmu.edu), 1998-2001\r\nIPv6 extention version 0.81 (kato @ win6.jp), 2000-2003\r\nSSH2 support (Tera Term Project), 2004-2011",IDC_INCLUDES,6,36,248,34 + LTEXT "Includes:\r\nTTSSH 1.5.4 (Robert O'Callahan roc+tt @ cs.cmu.edu), 1998-2001\r\nIPv6 extention version 0.81 (kato @ win6.jp), 2000-2003\r\nSSH2 support (Tera Term Project), 2004-2012",IDC_INCLUDES,6,36,248,34 LTEXT "OpenSSL:",IDC_OPENSSL_VERSION,6,69,175,8 LTEXT "zlib:",IDC_ZLIB_VERSION,6,78,181,8 LTEXT "PuTTY:",IDC_PUTTY_VERSION,6,87,207,8 @@ -572,7 +572,7 @@ VALUE "FileDescription", "TTXSSH" VALUE "FileVersion", "2, 59, 0, 0" VALUE "InternalName", "TTXSSH" - VALUE "LegalCopyright", "(C)2004-2011 TeraTerm Project, (C)1998-1999 Robert O'Callahan" + VALUE "LegalCopyright", "(C)2004-2012 TeraTerm Project, (C)1998-1999 Robert O'Callahan" VALUE "OriginalFilename", "TTXSSH.dll" VALUE "ProductName", "TTSSH" VALUE "ProductVersion", "2, 59, 0, 0" From svnnotify @ sourceforge.jp Tue Jan 3 19:22:37 2012 From: svnnotify @ sourceforge.jp (svnnotify @ sourceforge.jp) Date: Tue, 03 Jan 2012 19:22:37 +0900 Subject: [Ttssh2-commit] =?utf-8?b?WzQ3ODldIFB1VFRZIDAuIDYyIOOBuOOCog==?= =?utf-8?b?44OD44OX44OH44O844OI?= Message-ID: <1325586157.948445.24596.nullmailer@users.sourceforge.jp> Revision: 4789 http://sourceforge.jp/projects/ttssh2/svn/view?view=rev&revision=4789 Author: yutakapon Date: 2012-01-03 19:22:37 +0900 (Tue, 03 Jan 2012) Log Message: ----------- PuTTY 0.62 へアップデート Modified Paths: -------------- trunk/doc/en/html/about/history.html trunk/doc/ja/html/about/history.html -------------- next part -------------- Modified: trunk/doc/en/html/about/history.html =================================================================== --- trunk/doc/en/html/about/history.html 2012-01-03 10:13:28 UTC (rev 4788) +++ trunk/doc/en/html/about/history.html 2012-01-03 10:22:37 UTC (rev 4789) @@ -1806,6 +1806,27 @@

    TTSSH

    +

    2012.xx.xx (Ver 2.60)

    + + + +

    2011.12.04 (Ver 2.59)

    Modified: trunk/teraterm/ttpfile/xmodem.c =================================================================== --- trunk/teraterm/ttpfile/xmodem.c 2012-01-03 10:37:26 UTC (rev 4790) +++ trunk/teraterm/ttpfile/xmodem.c 2012-01-04 16:15:03 UTC (rev 4791) @@ -499,11 +499,15 @@ } if (xv->PktBufCount == 0) { - SetDlgNum(fv->HWin, IDC_PROTOPKTNUM, - xv->PktNumOffset + xv->PktNumSent); + if (xv->PktNumSent == 0) { + SetDlgNum(fv->HWin, IDC_PROTOPKTNUM, xv->PktNumOffset + 256); + } + else { + SetDlgNum(fv->HWin, IDC_PROTOPKTNUM, xv->PktNumOffset + xv->PktNumSent); + } SetDlgNum(fv->HWin, IDC_PROTOBYTECOUNT, fv->ByteCount); SetDlgPercent(fv->HWin, IDC_PROTOPERCENT, IDC_PROTOPROGRESS, - fv->ByteCount, fv->FileSize, &fv->ProgStat); + fv->ByteCount, fv->FileSize, &fv->ProgStat); SetDlgTime(fv->HWin, IDC_PROTOELAPSEDTIME, fv->StartTime, fv->ByteCount); } Modified: trunk/teraterm/ttpfile/ymodem.c =================================================================== --- trunk/teraterm/ttpfile/ymodem.c 2012-01-03 10:37:26 UTC (rev 4790) +++ trunk/teraterm/ttpfile/ymodem.c 2012-01-04 16:15:03 UTC (rev 4791) @@ -822,11 +822,15 @@ if (yv->PktBufCount==0) { - SetDlgNum(fv->HWin, IDC_PROTOPKTNUM, - yv->PktNumOffset+yv->PktNumSent); + if (yv->PktNumSent == 0) { + SetDlgNum(fv->HWin, IDC_PROTOPKTNUM, yv->PktNumOffset + 256); + } + else { + SetDlgNum(fv->HWin, IDC_PROTOPKTNUM, yv->PktNumOffset + yv->PktNumSent); + } SetDlgNum(fv->HWin, IDC_PROTOBYTECOUNT, fv->ByteCount); SetDlgPercent(fv->HWin, IDC_PROTOPERCENT, IDC_PROTOPROGRESS, - fv->ByteCount, fv->FileSize, &fv->ProgStat); + fv->ByteCount, fv->FileSize, &fv->ProgStat); SetDlgTime(fv->HWin, IDC_PROTOELAPSEDTIME, fv->StartTime, fv->ByteCount); } From svnnotify @ sourceforge.jp Mon Jan 9 01:32:15 2012 From: svnnotify @ sourceforge.jp (svnnotify @ sourceforge.jp) Date: Mon, 09 Jan 2012 01:32:15 +0900 Subject: [Ttssh2-commit] =?utf-8?b?WzQ3OTJdIE9wZW5TU0wgMS4wLiAwZiDjgas=?= =?utf-8?b?44Ki44OD44OX44OH44O844OI?= Message-ID: <1326040335.172235.18513.nullmailer@users.sourceforge.jp> Revision: 4792 http://sourceforge.jp/projects/ttssh2/svn/view?view=rev&revision=4792 Author: maya Date: 2012-01-09 01:32:14 +0900 (Mon, 09 Jan 2012) Log Message: ----------- OpenSSL 1.0.0f にアップデート Modified Paths: -------------- trunk/doc/en/html/about/history.html trunk/doc/en/html/reference/develop.txt trunk/doc/ja/html/about/history.html trunk/doc/ja/html/reference/develop.txt -------------- next part -------------- Modified: trunk/doc/en/html/about/history.html =================================================================== --- trunk/doc/en/html/about/history.html 2012-01-04 16:15:03 UTC (rev 4791) +++ trunk/doc/en/html/about/history.html 2012-01-08 16:32:14 UTC (rev 4792) @@ -1822,12 +1822,11 @@
  • Misc
  • - -

    2011.12.04 (Ver 2.59)

    -

    2011.12.04 (Ver 2.59)

    @@ -58,6 +57,7 @@ Modified: trunk/doc/ja/html/about/history.html =================================================================== --- trunk/doc/ja/html/about/history.html 2012-01-08 16:32:37 UTC (rev 4793) +++ trunk/doc/ja/html/about/history.html 2012-01-11 12:17:16 UTC (rev 4794) @@ -50,7 +50,6 @@ -
  • XMODEM, YMODEM \x82ő\x97\x90M\x92\x86\x82?\\x8E\xA6\x82\xB3\x82\xEA\x82\xE9\x83p\x83P\x83b\x83g\x94?\x86\x82\xAA\x90\xB3\x82\xB5\x82\xAD\x82?\xA2\x8F?\x82\xAA\x82\xA0\x82\xE9\x96\xE2\x91\xE8\x82\xF0\x8FC\x90\xB3
  • @@ -58,6 +57,7 @@ From svnnotify @ sourceforge.jp Sat Jan 21 02:16:40 2012 From: svnnotify @ sourceforge.jp (svnnotify @ sourceforge.jp) Date: Sat, 21 Jan 2012 02:16:40 +0900 Subject: [Ttssh2-commit] =?utf-8?b?WzQ3OTVdIGtlcm1pdC4gbG9nIOOCkjE26YCy?= =?utf-8?b?44OA44Oz44OX5Ye65Yqb44GZ44KL44KI44GG44Gr44GX44Gf44CC?= Message-ID: <1327079800.205356.27840.nullmailer@users.sourceforge.jp> Revision: 4795 http://sourceforge.jp/projects/ttssh2/svn/view?view=rev&revision=4795 Author: yutakapon Date: 2012-01-21 02:16:40 +0900 (Sat, 21 Jan 2012) Log Message: ----------- kermit.log を16進ダンプ出力するようにした。 Modified Paths: -------------- trunk/teraterm/ttpfile/kermit.c -------------- next part -------------- Modified: trunk/teraterm/ttpfile/kermit.c =================================================================== --- trunk/teraterm/ttpfile/kermit.c 2012-01-11 12:17:16 UTC (rev 4794) +++ trunk/teraterm/ttpfile/kermit.c 2012-01-20 17:16:40 UTC (rev 4795) @@ -6,6 +6,8 @@ #include "teraterm.h" #include "tttypes.h" #include "ttftypes.h" +#include +#include #include #include "tt_res.h" @@ -30,6 +32,51 @@ #define DefCHKT 1 #define MyREPT '~' + +static void KmtReadLog(PFileVar fv, BYTE *buf, int len) +{ + int j; + + if (fv->LogFlag && (len>0)) + { + if (fv->LogState == 0) + { + // \x8Ec\x82\xE8\x82\xCCASCII\x95\\x8E\xA6\x82\xF0\x8Ds\x82\xA4 + fv->FlushLogLineBuf = 1; + FTLog1Byte(fv,0); + fv->FlushLogLineBuf = 0; + + fv->LogState = 1; + fv->LogCount = 0; + _lwrite(fv->LogFile,"\015\012<<<\015\012",7); + } + for (j=0 ; j <= len-1 ; j++) + FTLog1Byte(fv, buf[j]); + } +} + +static void KmtWriteLog(PFileVar fv, BYTE *buf, int len) +{ + int j; + + if (fv->LogFlag && (len>0)) + { + if (fv->LogState != 0) + { + // \x8Ec\x82\xE8\x82\xCCASCII\x95\\x8E\xA6\x82\xF0\x8Ds\x82\xA4 + fv->FlushLogLineBuf = 1; + FTLog1Byte(fv,0); + fv->FlushLogLineBuf = 0; + + fv->LogState = 0; + fv->LogCount = 0; + _lwrite(fv->LogFile,"\015\012>>>\015\012",7); + } + for (j=0 ; j <= len-1 ; j++) + FTLog1Byte(fv, buf[j]); + } +} + BYTE KmtNum(BYTE b) { return (b - 32); @@ -68,9 +115,13 @@ if (fv->LogFlag) { +#if 0 _lwrite(fv->LogFile,"> ",2); _lwrite(fv->LogFile,&(kv->PktOut[1]),C-1); _lwrite(fv->LogFile,"\015\012",2); +#else + KmtWriteLog(fv,&(kv->PktOut[1]),C-1); +#endif } /* end-of-line character */ @@ -652,8 +703,22 @@ kv->PktNum = 0; fv->LogFlag = ((ts->LogFlag & LOG_KMT)!=0); - if (fv->LogFlag) + if (fv->LogFlag) { + char buf[128]; + time_t tm = time(NULL); + fv->LogFile = _lcreat("KERMIT.LOG",0); + fv->LogCount = 0; + fv->LogState = 0; + fv->FlushLogLineBuf = 0; + _snprintf_s(buf, sizeof(buf), _TRUNCATE, "KERMIT %s start: %s\n", + kv->KmtMode == IdKmtSend ? "Send" : + kv->KmtMode == IdKmtReceive ? "Receive" : + kv->KmtMode == IdKmtGet ? "Get" : "Finish", + ctime(&tm) + ); + _lwrite(fv->LogFile, buf, strlen(buf)); + } switch (kv->KmtMode) { case IdKmtSend: @@ -755,9 +820,13 @@ if (fv->LogFlag) { +#if 0 _lwrite(fv->LogFile,"< ",2); _lwrite(fv->LogFile,&(kv->PktIn[1]),kv->PktInLen+1); _lwrite(fv->LogFile,"\015\012",2); +#else + KmtReadLog(fv,&(kv->PktIn[1]),kv->PktInLen+1); +#endif } PktNumNew = KmtCalcPktNum(kv,kv->PktIn[2]); From svnnotify @ sourceforge.jp Sat Jan 21 18:44:20 2012 From: svnnotify @ sourceforge.jp (svnnotify @ sourceforge.jp) Date: Sat, 21 Jan 2012 18:44:20 +0900 Subject: [Ttssh2-commit] =?utf-8?b?WzQ3OTZdICDjgqTjg7Pjg4fjg7Pjg4jjgpI=?= =?utf-8?b?5o+D44GI44Gf44CC?= Message-ID: <1327139060.936813.15984.nullmailer@users.sourceforge.jp> Revision: 4796 http://sourceforge.jp/projects/ttssh2/svn/view?view=rev&revision=4796 Author: yutakapon Date: 2012-01-21 18:44:20 +0900 (Sat, 21 Jan 2012) Log Message: ----------- インデントを揃えた。 Modified Paths: -------------- trunk/teraterm/ttpfile/kermit.c -------------- next part -------------- Modified: trunk/teraterm/ttpfile/kermit.c =================================================================== --- trunk/teraterm/ttpfile/kermit.c 2012-01-20 17:16:40 UTC (rev 4795) +++ trunk/teraterm/ttpfile/kermit.c 2012-01-21 09:44:20 UTC (rev 4796) @@ -1,6 +1,6 @@ /* Tera Term - Copyright(C) 1994-1998 T. Teranishi - All rights reserved. */ +Copyright(C) 1994-1998 T. Teranishi +All rights reserved. */ /* TTFILE.DLL, Kermit protocol */ #include "teraterm.h" @@ -16,7 +16,7 @@ #include "dlglib.h" #include "ftlib.h" - /* kermit parameters */ +/* kermit parameters */ #define MaxNum 94 #define MinMAXL 10 @@ -79,940 +79,940 @@ BYTE KmtNum(BYTE b) { - return (b - 32); + return (b - 32); } BYTE KmtChar(BYTE b) { - return (b+32); + return (b+32); } void KmtCalcCheck(WORD Sum, BYTE CHKT, PCHAR Check) { - switch (CHKT) { - case 1: - Check[0] = KmtChar((BYTE)((Sum + (Sum & 0xC0) / 0x40) & 0x3F)); - break; - case 2: - Check[0] = KmtChar((BYTE)((Sum / 0x40) & 0x3F)); - Check[1] = KmtChar((BYTE)(Sum & 0x3F)); - break; - case 3: break; - } + switch (CHKT) { + case 1: + Check[0] = KmtChar((BYTE)((Sum + (Sum & 0xC0) / 0x40) & 0x3F)); + break; + case 2: + Check[0] = KmtChar((BYTE)((Sum / 0x40) & 0x3F)); + Check[1] = KmtChar((BYTE)(Sum & 0x3F)); + break; + case 3: break; + } } void KmtSendPacket(PFileVar fv, PKmtVar kv, PComVar cv) { - int C; + int C; - /* padding characters */ - for (C = 1 ; C <= kv->KmtYour.NPAD ; C++) - CommBinaryOut(cv,&(kv->KmtYour.PADC), 1); + /* padding characters */ + for (C = 1 ; C <= kv->KmtYour.NPAD ; C++) + CommBinaryOut(cv,&(kv->KmtYour.PADC), 1); - /* packet */ - C = KmtNum(kv->PktOut[1]) + 2; - CommBinaryOut(cv,&kv->PktOut[0], C); + /* packet */ + C = KmtNum(kv->PktOut[1]) + 2; + CommBinaryOut(cv,&kv->PktOut[0], C); - if (fv->LogFlag) - { + if (fv->LogFlag) + { #if 0 - _lwrite(fv->LogFile,"> ",2); - _lwrite(fv->LogFile,&(kv->PktOut[1]),C-1); - _lwrite(fv->LogFile,"\015\012",2); + _lwrite(fv->LogFile,"> ",2); + _lwrite(fv->LogFile,&(kv->PktOut[1]),C-1); + _lwrite(fv->LogFile,"\015\012",2); #else - KmtWriteLog(fv,&(kv->PktOut[1]),C-1); + KmtWriteLog(fv,&(kv->PktOut[1]),C-1); #endif - } + } - /* end-of-line character */ - if (kv->KmtYour.EOL > 0) - CommBinaryOut(cv,&(kv->KmtYour.EOL), 1); + /* end-of-line character */ + if (kv->KmtYour.EOL > 0) + CommBinaryOut(cv,&(kv->KmtYour.EOL), 1); - FTSetTimeOut(fv,kv->KmtYour.TIME); + FTSetTimeOut(fv,kv->KmtYour.TIME); } void KmtMakePacket(PFileVar fv, PKmtVar kv, BYTE SeqNum, BYTE PktType, int DataLen) { - int i; - WORD Sum; + int i; + WORD Sum; - kv->PktOut[0] = 1; /* MARK */ - kv->PktOut[1] = KmtChar((BYTE)(DataLen + kv->KmtMy.CHKT + 2)); /* LEN */ - kv->PktOut[2] = KmtChar(SeqNum); /* SEQ */ - kv->PktOut[3] = PktType; /* TYPE */ + kv->PktOut[0] = 1; /* MARK */ + kv->PktOut[1] = KmtChar((BYTE)(DataLen + kv->KmtMy.CHKT + 2)); /* LEN */ + kv->PktOut[2] = KmtChar(SeqNum); /* SEQ */ + kv->PktOut[3] = PktType; /* TYPE */ - /* check sum */ - Sum = 0; - for (i = 1 ; i <= DataLen+3 ; i++) - Sum = Sum + kv->PktOut[i]; - KmtCalcCheck(Sum, kv->KmtMy.CHKT, &(kv->PktOut[DataLen+4])); + /* check sum */ + Sum = 0; + for (i = 1 ; i <= DataLen+3 ; i++) + Sum = Sum + kv->PktOut[i]; + KmtCalcCheck(Sum, kv->KmtMy.CHKT, &(kv->PktOut[DataLen+4])); } void KmtSendInitPkt(PFileVar fv, PKmtVar kv, PComVar cv, BYTE PktType) { - int NParam; + int NParam; - kv->PktNumOffset = 0; - kv->PktNum = 0; + kv->PktNumOffset = 0; + kv->PktNum = 0; - NParam = 9; /* num of parameters in Send-init packet */ + NParam = 9; /* num of parameters in Send-init packet */ - /* parameters */ + /* parameters */ - kv->PktOut[4] = KmtChar(kv->KmtMy.MAXL); - kv->PktOut[5] = KmtChar(kv->KmtMy.TIME); - kv->PktOut[6] = KmtChar(kv->KmtMy.NPAD); - kv->PktOut[7] = kv->KmtMy.PADC ^ 0x40; - kv->PktOut[8] = KmtChar(kv->KmtMy.EOL); - kv->PktOut[9] = kv->KmtMy.QCTL; - kv->PktOut[10] = kv->KmtMy.QBIN; - kv->PktOut[11] = kv->KmtMy.CHKT + 0x30; - kv->PktOut[12] = kv->KmtMy.REPT; + kv->PktOut[4] = KmtChar(kv->KmtMy.MAXL); + kv->PktOut[5] = KmtChar(kv->KmtMy.TIME); + kv->PktOut[6] = KmtChar(kv->KmtMy.NPAD); + kv->PktOut[7] = kv->KmtMy.PADC ^ 0x40; + kv->PktOut[8] = KmtChar(kv->KmtMy.EOL); + kv->PktOut[9] = kv->KmtMy.QCTL; + kv->PktOut[10] = kv->KmtMy.QBIN; + kv->PktOut[11] = kv->KmtMy.CHKT + 0x30; + kv->PktOut[12] = kv->KmtMy.REPT; - KmtMakePacket(fv,kv,(BYTE)(kv->PktNum - kv->PktNumOffset),PktType,NParam); - KmtSendPacket(fv,kv,cv); + KmtMakePacket(fv,kv,(BYTE)(kv->PktNum - kv->PktNumOffset),PktType,NParam); + KmtSendPacket(fv,kv,cv); - switch (PktType) { - case 'S': kv->KmtState = SendInit; break; - case 'I': kv->KmtState = ServerInit; break; - } + switch (PktType) { + case 'S': kv->KmtState = SendInit; break; + case 'I': kv->KmtState = ServerInit; break; + } } void KmtSendNack(PFileVar fv, PKmtVar kv, PComVar cv, BYTE SeqChar) { - KmtMakePacket(fv,kv,KmtNum(SeqChar),'N',0); - KmtSendPacket(fv,kv,cv); + KmtMakePacket(fv,kv,KmtNum(SeqChar),'N',0); + KmtSendPacket(fv,kv,cv); } int KmtCalcPktNum(PKmtVar kv, BYTE b) { - int n; + int n; - n = KmtNum(b) + kv->PktNumOffset; - if (n>kv->PktNum+31) n = n - 64; - else if (nPktNum-32) n = n + 64; - return n; + n = KmtNum(b) + kv->PktNumOffset; + if (n>kv->PktNum+31) n = n - 64; + else if (nPktNum-32) n = n + 64; + return n; } BOOL KmtCheckPacket(PKmtVar kv) { - int i; - WORD Sum; - BYTE Check[3]; + int i; + WORD Sum; + BYTE Check[3]; - /* Calc sum */ - Sum = 0; - for (i = 1 ; i <= kv->PktInLen+1-kv->KmtMy.CHKT ; i++) - Sum = Sum + kv->PktIn[i]; + /* Calc sum */ + Sum = 0; + for (i = 1 ; i <= kv->PktInLen+1-kv->KmtMy.CHKT ; i++) + Sum = Sum + kv->PktIn[i]; - /* Calc CHECK */ - KmtCalcCheck(Sum, kv->KmtMy.CHKT, &Check[0]); + /* Calc CHECK */ + KmtCalcCheck(Sum, kv->KmtMy.CHKT, &Check[0]); - for (i = 1 ; i <= kv->KmtMy.CHKT ; i++) - if (Check[i-1] != - kv->PktIn[ kv->PktInLen +1- kv->KmtMy.CHKT +i ]) - return FALSE; - return TRUE; + for (i = 1 ; i <= kv->KmtMy.CHKT ; i++) + if (Check[i-1] != + kv->PktIn[ kv->PktInLen +1- kv->KmtMy.CHKT +i ]) + return FALSE; + return TRUE; } - BOOL KmtCheckQuote(BYTE b) - { - return (((b>0x20) && (b<0x3f)) || - ((b>0x5F) && (b<0x7f))); - } +BOOL KmtCheckQuote(BYTE b) +{ + return (((b>0x20) && (b<0x3f)) || + ((b>0x5F) && (b<0x7f))); +} void KmtParseInit(PKmtVar kv, BOOL AckFlag) { - int i, NParam; - BYTE b, n; + int i, NParam; + BYTE b, n; - NParam = kv->PktInLen - 2 - kv->KmtMy.CHKT; + NParam = kv->PktInLen - 2 - kv->KmtMy.CHKT; - for (i=1 ; i <= NParam ; i++) - { - b = kv->PktIn[i+3]; - n = KmtNum(b); - switch (i) { - case 1: - if ((MinMAXLKmtYour.MAXL = n; - break; - case 2: - if ((MinTIMEKmtYour.TIME = n; - break; - case 3: - if (nKmtYour.NPAD = n; - break; - case 4: - kv->KmtYour.PADC = b ^ 0x40; - break; - case 5: - if (n<0x20) - kv->KmtYour.EOL = n; - break; - case 6: - if (KmtCheckQuote(b)) - kv->KmtYour.QCTL = b; - break; - case 7: - if (AckFlag) /* Ack packet from remote host */ - { - if ((b=='Y') && - KmtCheckQuote(kv->KmtMy.QBIN)) - kv->Quote8 = TRUE; - else if (KmtCheckQuote(b) && - ((b==kv->KmtMy.QBIN) || - (kv->KmtMy.QBIN=='Y'))) - { - kv->KmtMy.QBIN = b; - kv->Quote8 = TRUE; - } - } - else /* S-packet from remote host */ - if ((b=='Y') && KmtCheckQuote(kv->KmtMy.QBIN)) - kv->Quote8 = TRUE; - else if (KmtCheckQuote(b)) - { - kv->KmtMy.QBIN = b; - kv->Quote8 = TRUE; - } + for (i=1 ; i <= NParam ; i++) + { + b = kv->PktIn[i+3]; + n = KmtNum(b); + switch (i) { + case 1: + if ((MinMAXLKmtYour.MAXL = n; + break; + case 2: + if ((MinTIMEKmtYour.TIME = n; + break; + case 3: + if (nKmtYour.NPAD = n; + break; + case 4: + kv->KmtYour.PADC = b ^ 0x40; + break; + case 5: + if (n<0x20) + kv->KmtYour.EOL = n; + break; + case 6: + if (KmtCheckQuote(b)) + kv->KmtYour.QCTL = b; + break; + case 7: + if (AckFlag) /* Ack packet from remote host */ + { + if ((b=='Y') && + KmtCheckQuote(kv->KmtMy.QBIN)) + kv->Quote8 = TRUE; + else if (KmtCheckQuote(b) && + ((b==kv->KmtMy.QBIN) || + (kv->KmtMy.QBIN=='Y'))) + { + kv->KmtMy.QBIN = b; + kv->Quote8 = TRUE; + } + } + else /* S-packet from remote host */ + if ((b=='Y') && KmtCheckQuote(kv->KmtMy.QBIN)) + kv->Quote8 = TRUE; + else if (KmtCheckQuote(b)) + { + kv->KmtMy.QBIN = b; + kv->Quote8 = TRUE; + } - if (! kv->Quote8) kv->KmtMy.QBIN = 'N'; - kv->KmtYour.QBIN = kv->KmtMy.QBIN; - break; + if (! kv->Quote8) kv->KmtMy.QBIN = 'N'; + kv->KmtYour.QBIN = kv->KmtMy.QBIN; + break; - case 8: - kv->KmtYour.CHKT = b - 0x30; - if (AckFlag) - { - if (kv->KmtYour.CHKT!=kv->KmtMy.CHKT) - kv->KmtYour.CHKT = DefCHKT; - } - else - if ((kv->KmtYour.CHKT<1) || - (kv->KmtYour.CHKT>2)) - kv->KmtYour.CHKT = DefCHKT; + case 8: + kv->KmtYour.CHKT = b - 0x30; + if (AckFlag) + { + if (kv->KmtYour.CHKT!=kv->KmtMy.CHKT) + kv->KmtYour.CHKT = DefCHKT; + } + else + if ((kv->KmtYour.CHKT<1) || + (kv->KmtYour.CHKT>2)) + kv->KmtYour.CHKT = DefCHKT; - kv->KmtMy.CHKT = kv->KmtYour.CHKT; - break; + kv->KmtMy.CHKT = kv->KmtYour.CHKT; + break; - case 9: - kv->KmtYour.REPT = b; - if (! AckFlag && - (kv->KmtYour.REPT>0x20) && - (kv->KmtYour.REPT<0x7F)) - kv->KmtMy.REPT = kv->KmtYour.REPT; - /* - Very old bug: - Kermit fails to properly negotiate to NOT use "repeat" - compression when talking to a primitive partner (a - prominent example of a kermit implementation that does - not support repeat is the bootloader "U-Boot"). + case 9: + kv->KmtYour.REPT = b; + if (! AckFlag && + (kv->KmtYour.REPT>0x20) && + (kv->KmtYour.REPT<0x7F)) + kv->KmtMy.REPT = kv->KmtYour.REPT; + /* + Very old bug: + Kermit fails to properly negotiate to NOT use "repeat" + compression when talking to a primitive partner (a + prominent example of a kermit implementation that does + not support repeat is the bootloader "U-Boot"). - by Anders Larsen (2007/9/11 yutaka) - */ - kv->RepeatFlag = kv->KmtMy.REPT == kv->KmtYour.REPT; - break; - } - } + by Anders Larsen (2007/9/11 yutaka) + */ + kv->RepeatFlag = kv->KmtMy.REPT == kv->KmtYour.REPT; + break; + } + } } void KmtSendAck(PFileVar fv, PKmtVar kv, PComVar cv) { - if (kv->PktIn[3]=='S') /* Send-Init packet */ - { - KmtParseInit(kv,FALSE); - KmtSendInitPkt(fv,kv,cv,'Y'); - } - else { - KmtMakePacket(fv,kv,KmtNum(kv->PktIn[2]),(BYTE)'Y',0); - KmtSendPacket(fv,kv,cv); - } + if (kv->PktIn[3]=='S') /* Send-Init packet */ + { + KmtParseInit(kv,FALSE); + KmtSendInitPkt(fv,kv,cv,'Y'); + } + else { + KmtMakePacket(fv,kv,KmtNum(kv->PktIn[2]),(BYTE)'Y',0); + KmtSendPacket(fv,kv,cv); + } } void KmtDecode(PFileVar fv, PKmtVar kv, PCHAR Buff, int *BuffLen) { - int i, j, DataLen, BuffPtr; - BYTE b, b2; - BOOL CTLflag,BINflag,REPTflag,OutFlag; + int i, j, DataLen, BuffPtr; + BYTE b, b2; + BOOL CTLflag,BINflag,REPTflag,OutFlag; - BuffPtr = 0; - DataLen = kv->PktInLen - kv->KmtMy.CHKT - 2; + BuffPtr = 0; + DataLen = kv->PktInLen - kv->KmtMy.CHKT - 2; - OutFlag = FALSE; - kv->RepeatCount = 1; - CTLflag = FALSE; - BINflag = FALSE; - REPTflag = FALSE; - for (i = 1 ; i <= DataLen ; i++) - { - b = kv->PktIn[3+i]; - b2 = b & 0x7f; - if (CTLflag) - { - if ((b2 != kv->KmtYour.QCTL) && - (! kv->Quote8 || (b2 != kv->KmtYour.QBIN)) && - (! kv->RepeatFlag || (b2 != kv->KmtYour.REPT))) - b = b ^ 0x40; - CTLflag = FALSE; - OutFlag = TRUE; - } - else if (kv->RepeatFlag && REPTflag) - { - kv->RepeatCount = KmtNum(b); - REPTflag = FALSE; - } - else if (b==kv->KmtYour.QCTL) CTLflag = TRUE; - else if (kv->Quote8 && (b==kv->KmtYour.QBIN)) - BINflag = TRUE; - else if (kv->RepeatFlag && (b==kv->KmtYour.REPT)) - REPTflag = TRUE; - else OutFlag = TRUE; + OutFlag = FALSE; + kv->RepeatCount = 1; + CTLflag = FALSE; + BINflag = FALSE; + REPTflag = FALSE; + for (i = 1 ; i <= DataLen ; i++) + { + b = kv->PktIn[3+i]; + b2 = b & 0x7f; + if (CTLflag) + { + if ((b2 != kv->KmtYour.QCTL) && + (! kv->Quote8 || (b2 != kv->KmtYour.QBIN)) && + (! kv->RepeatFlag || (b2 != kv->KmtYour.REPT))) + b = b ^ 0x40; + CTLflag = FALSE; + OutFlag = TRUE; + } + else if (kv->RepeatFlag && REPTflag) + { + kv->RepeatCount = KmtNum(b); + REPTflag = FALSE; + } + else if (b==kv->KmtYour.QCTL) CTLflag = TRUE; + else if (kv->Quote8 && (b==kv->KmtYour.QBIN)) + BINflag = TRUE; + else if (kv->RepeatFlag && (b==kv->KmtYour.REPT)) + REPTflag = TRUE; + else OutFlag = TRUE; - if (OutFlag) - { - if (kv->Quote8 && BINflag) b = b ^ 0x80; - for (j = 1 ; j <= kv->RepeatCount ; j++) - { - if (Buff==NULL) /* write to file */ - _lwrite(fv->FileHandle,&b,1); - else /* write to buffer */ - if (BuffPtr < *BuffLen) - { - Buff[BuffPtr] = b; - BuffPtr++; - } - } - fv->ByteCount = fv->ByteCount + kv->RepeatCount; - OutFlag = FALSE; - kv->RepeatCount = 1; - CTLflag = FALSE; - BINflag = FALSE; - REPTflag = FALSE; - } - } + if (OutFlag) + { + if (kv->Quote8 && BINflag) b = b ^ 0x80; + for (j = 1 ; j <= kv->RepeatCount ; j++) + { + if (Buff==NULL) /* write to file */ + _lwrite(fv->FileHandle,&b,1); + else /* write to buffer */ + if (BuffPtr < *BuffLen) + { + Buff[BuffPtr] = b; + BuffPtr++; + } + } + fv->ByteCount = fv->ByteCount + kv->RepeatCount; + OutFlag = FALSE; + kv->RepeatCount = 1; + CTLflag = FALSE; + BINflag = FALSE; + REPTflag = FALSE; + } + } - if (Buff==NULL) - SetDlgNum(fv->HWin, IDC_PROTOBYTECOUNT, fv->ByteCount); - *BuffLen = BuffPtr; - SetDlgTime(fv->HWin, IDC_PROTOELAPSEDTIME, fv->StartTime, fv->ByteCount); + if (Buff==NULL) + SetDlgNum(fv->HWin, IDC_PROTOBYTECOUNT, fv->ByteCount); + *BuffLen = BuffPtr; + SetDlgTime(fv->HWin, IDC_PROTOELAPSEDTIME, fv->StartTime, fv->ByteCount); } BOOL KmtEncode(PFileVar fv, PKmtVar kv) { - BYTE b, b2, b7; - int Len; - char TempStr[4]; + BYTE b, b2, b7; + int Len; + char TempStr[4]; - if ((kv->RepeatCount>0) && (strlen(kv->ByteStr)>0)) - { - kv->RepeatCount--; - return TRUE; - } + if ((kv->RepeatCount>0) && (strlen(kv->ByteStr)>0)) + { + kv->RepeatCount--; + return TRUE; + } - if (kv->NextByteFlag) - { - b = kv->NextByte; - kv->NextByteFlag = FALSE; - } - else if (_lread(fv->FileHandle,&b,1)==0) - return FALSE; - else fv->ByteCount++; + if (kv->NextByteFlag) + { + b = kv->NextByte; + kv->NextByteFlag = FALSE; + } + else if (_lread(fv->FileHandle,&b,1)==0) + return FALSE; + else fv->ByteCount++; - Len = 0; + Len = 0; - b7 = b & 0x7f; + b7 = b & 0x7f; - /* 8 bit quoting */ - if (kv->Quote8 && (b != b7)) - { - TempStr[Len] = kv->KmtMy.QBIN; - Len++; - b2 = b7; - } - else b2 = b; + /* 8 bit quoting */ + if (kv->Quote8 && (b != b7)) + { + TempStr[Len] = kv->KmtMy.QBIN; + Len++; + b2 = b7; + } + else b2 = b; - if ((b7<0x20) || (b7==0x7F)) - { - TempStr[Len] = kv->KmtMy.QCTL; - Len++; - b2 = b2 ^ 0x40; - } - else if ((b7==kv->KmtMy.QCTL) || - (kv->Quote8 && (b7==kv->KmtMy.QBIN)) || - (kv->RepeatFlag && (b7==kv->KmtMy.REPT))) - { - TempStr[Len] = kv->KmtMy.QCTL; - Len++; - } + if ((b7<0x20) || (b7==0x7F)) + { + TempStr[Len] = kv->KmtMy.QCTL; + Len++; + b2 = b2 ^ 0x40; + } + else if ((b7==kv->KmtMy.QCTL) || + (kv->Quote8 && (b7==kv->KmtMy.QBIN)) || + (kv->RepeatFlag && (b7==kv->KmtMy.REPT))) + { + TempStr[Len] = kv->KmtMy.QCTL; + Len++; + } - TempStr[Len] = b2; - Len++; + TempStr[Len] = b2; + Len++; - TempStr[Len] = 0; + TempStr[Len] = 0; - kv->RepeatCount = 1; - if (_lread(fv->FileHandle,&(kv->NextByte),1)==1) - { - fv->ByteCount++; - kv->NextByteFlag = TRUE; - } + kv->RepeatCount = 1; + if (_lread(fv->FileHandle,&(kv->NextByte),1)==1) + { + fv->ByteCount++; + kv->NextByteFlag = TRUE; + } - while (kv->RepeatFlag && kv->NextByteFlag && - (kv->NextByte==b) && (kv->RepeatCount<94)) - { - kv->RepeatCount++; - if (_lread(fv->FileHandle,&(kv->NextByte),1)==0) - kv->NextByteFlag = FALSE; - else fv->ByteCount++; - } + while (kv->RepeatFlag && kv->NextByteFlag && + (kv->NextByte==b) && (kv->RepeatCount<94)) + { + kv->RepeatCount++; + if (_lread(fv->FileHandle,&(kv->NextByte),1)==0) + kv->NextByteFlag = FALSE; + else fv->ByteCount++; + } - if (Len*kv->RepeatCount > Len+2) - { - kv->ByteStr[0] = kv->KmtMy.REPT; - kv->ByteStr[1] = KmtChar((BYTE)(kv->RepeatCount)); - kv->ByteStr[2] = 0; - strncat_s(kv->ByteStr,sizeof(kv->ByteStr),TempStr,_TRUNCATE); - kv->RepeatCount = 1; - } - else - strncpy_s(kv->ByteStr, sizeof(kv->ByteStr),TempStr, _TRUNCATE); + if (Len*kv->RepeatCount > Len+2) + { + kv->ByteStr[0] = kv->KmtMy.REPT; + kv->ByteStr[1] = KmtChar((BYTE)(kv->RepeatCount)); + kv->ByteStr[2] = 0; + strncat_s(kv->ByteStr,sizeof(kv->ByteStr),TempStr,_TRUNCATE); + kv->RepeatCount = 1; + } + else + strncpy_s(kv->ByteStr, sizeof(kv->ByteStr),TempStr, _TRUNCATE); - kv->RepeatCount--; - return TRUE; + kv->RepeatCount--; + return TRUE; } void KmtIncPacketNum(PKmtVar kv) { - kv->PktNum++; - if (kv->PktNum >= kv->PktNumOffset+64) - kv->PktNumOffset = kv->PktNumOffset + 64; + kv->PktNum++; + if (kv->PktNum >= kv->PktNumOffset+64) + kv->PktNumOffset = kv->PktNumOffset + 64; } void KmtSendEOFPacket(PFileVar fv, PKmtVar kv, PComVar cv) { - /* close file */ - if (fv->FileOpen) - _lclose(fv->FileHandle); - fv->FileOpen = FALSE; + /* close file */ + if (fv->FileOpen) + _lclose(fv->FileHandle); + fv->FileOpen = FALSE; - KmtIncPacketNum(kv); + KmtIncPacketNum(kv); - KmtMakePacket(fv,kv,(BYTE)(kv->PktNum-kv->PktNumOffset),(BYTE)'Z',0); - KmtSendPacket(fv,kv,cv); + KmtMakePacket(fv,kv,(BYTE)(kv->PktNum-kv->PktNumOffset),(BYTE)'Z',0); + KmtSendPacket(fv,kv,cv); - kv->KmtState = SendEOF; + kv->KmtState = SendEOF; } void KmtSendNextData(PFileVar fv, PKmtVar kv, PComVar cv) { - int DataLen, DataLenNew; - BOOL NextFlag; + int DataLen, DataLenNew; + BOOL NextFlag; - SetDlgNum(fv->HWin, IDC_PROTOBYTECOUNT, fv->ByteCount); - SetDlgPercent(fv->HWin, IDC_PROTOPERCENT, IDC_PROTOPROGRESS, - fv->ByteCount, fv->FileSize, &fv->ProgStat); - SetDlgTime(fv->HWin, IDC_PROTOELAPSEDTIME, fv->StartTime, fv->ByteCount); - DataLen = 0; - DataLenNew = 0; + SetDlgNum(fv->HWin, IDC_PROTOBYTECOUNT, fv->ByteCount); + SetDlgPercent(fv->HWin, IDC_PROTOPERCENT, IDC_PROTOPROGRESS, + fv->ByteCount, fv->FileSize, &fv->ProgStat); + SetDlgTime(fv->HWin, IDC_PROTOELAPSEDTIME, fv->StartTime, fv->ByteCount); + DataLen = 0; + DataLenNew = 0; - NextFlag = KmtEncode(fv,kv); - if (NextFlag) DataLenNew = DataLen + strlen(kv->ByteStr); - while (NextFlag && - (DataLenNew < kv->KmtYour.MAXL-kv->KmtMy.CHKT-4)) - { - strncpy_s(&(kv->PktOut[4+DataLen]),sizeof(kv->PktOut) - (4+DataLen),kv->ByteStr,_TRUNCATE); - DataLen = DataLenNew; - NextFlag = KmtEncode(fv,kv); - if (NextFlag) DataLenNew = DataLen + strlen(kv->ByteStr); - } - if (NextFlag) kv->RepeatCount++; + NextFlag = KmtEncode(fv,kv); + if (NextFlag) DataLenNew = DataLen + strlen(kv->ByteStr); + while (NextFlag && + (DataLenNew < kv->KmtYour.MAXL-kv->KmtMy.CHKT-4)) + { + strncpy_s(&(kv->PktOut[4+DataLen]),sizeof(kv->PktOut) - (4+DataLen),kv->ByteStr,_TRUNCATE); + DataLen = DataLenNew; + NextFlag = KmtEncode(fv,kv); + if (NextFlag) DataLenNew = DataLen + strlen(kv->ByteStr); + } + if (NextFlag) kv->RepeatCount++; - if (DataLen==0) - { - SetDlgNum(fv->HWin, IDC_PROTOBYTECOUNT, fv->ByteCount); - SetDlgPercent(fv->HWin, IDC_PROTOPERCENT, IDC_PROTOPROGRESS, - fv->ByteCount, fv->FileSize, &fv->ProgStat); - SetDlgTime(fv->HWin, IDC_PROTOELAPSEDTIME, fv->StartTime, fv->ByteCount); - KmtSendEOFPacket(fv,kv,cv); - } - else { - KmtIncPacketNum(kv); + if (DataLen==0) + { + SetDlgNum(fv->HWin, IDC_PROTOBYTECOUNT, fv->ByteCount); + SetDlgPercent(fv->HWin, IDC_PROTOPERCENT, IDC_PROTOPROGRESS, + fv->ByteCount, fv->FileSize, &fv->ProgStat); + SetDlgTime(fv->HWin, IDC_PROTOELAPSEDTIME, fv->StartTime, fv->ByteCount); + KmtSendEOFPacket(fv,kv,cv); + } + else { + KmtIncPacketNum(kv); - KmtMakePacket(fv,kv,(BYTE)(kv->PktNum-kv->PktNumOffset),(BYTE)'D',DataLen); - KmtSendPacket(fv,kv,cv); + KmtMakePacket(fv,kv,(BYTE)(kv->PktNum-kv->PktNumOffset),(BYTE)'D',DataLen); + KmtSendPacket(fv,kv,cv); - kv->KmtState = SendData; - } + kv->KmtState = SendData; + } } void KmtSendEOTPacket(PFileVar fv, PKmtVar kv, PComVar cv) { - KmtIncPacketNum(kv); - KmtMakePacket(fv,kv,(BYTE)(kv->PktNum-kv->PktNumOffset),(BYTE)'B',0); - KmtSendPacket(fv,kv,cv); + KmtIncPacketNum(kv); + KmtMakePacket(fv,kv,(BYTE)(kv->PktNum-kv->PktNumOffset),(BYTE)'B',0); + KmtSendPacket(fv,kv,cv); - kv->KmtState = SendEOT; + kv->KmtState = SendEOT; } BOOL KmtSendNextFile(PFileVar fv, PKmtVar kv, PComVar cv) { - char uimsg[MAX_UIMSG], uimsg2[MAX_UIMSG]; + char uimsg[MAX_UIMSG], uimsg2[MAX_UIMSG]; - if (! GetNextFname(fv)) - { - KmtSendEOTPacket(fv,kv,cv); - return TRUE; - } + if (! GetNextFname(fv)) + { + KmtSendEOTPacket(fv,kv,cv); + return TRUE; + } - /* file open */ - fv->FileHandle = _lopen(fv->FullName,OF_READ); - fv->FileOpen = fv->FileHandle>0; - if (! fv->FileOpen) - { - if (! fv->NoMsg) - { - get_lang_msg("MSG_TT_ERROR", uimsg2, sizeof(uimsg2), "Tera Term: Error", UILanguageFile); - get_lang_msg("MSG_CANTOEPN_FILE_ERROR", uimsg, sizeof(uimsg), "Cannot open file", UILanguageFile); - MessageBox(fv->HWin,uimsg,uimsg,MB_ICONEXCLAMATION); - } - return FALSE; - } - else - fv->FileSize = GetFSize(fv->FullName); + /* file open */ + fv->FileHandle = _lopen(fv->FullName,OF_READ); + fv->FileOpen = fv->FileHandle>0; + if (! fv->FileOpen) + { + if (! fv->NoMsg) + { + get_lang_msg("MSG_TT_ERROR", uimsg2, sizeof(uimsg2), "Tera Term: Error", UILanguageFile); + get_lang_msg("MSG_CANTOEPN_FILE_ERROR", uimsg, sizeof(uimsg), "Cannot open file", UILanguageFile); + MessageBox(fv->HWin,uimsg,uimsg,MB_ICONEXCLAMATION); + } + return FALSE; + } + else + fv->FileSize = GetFSize(fv->FullName); - fv->ByteCount = 0; - fv->ProgStat = 0; - fv->StartTime = GetTickCount(); + fv->ByteCount = 0; + fv->ProgStat = 0; + fv->StartTime = GetTickCount(); - SetDlgItemText(fv->HWin, IDC_PROTOFNAME, &(fv->FullName[fv->DirLen])); - SetDlgNum(fv->HWin, IDC_PROTOBYTECOUNT, fv->ByteCount); - SetDlgPercent(fv->HWin, IDC_PROTOPERCENT, IDC_PROTOPROGRESS, - fv->ByteCount, fv->FileSize, &fv->ProgStat); - SetDlgTime(fv->HWin, IDC_PROTOELAPSEDTIME, fv->StartTime, fv->ByteCount); + SetDlgItemText(fv->HWin, IDC_PROTOFNAME, &(fv->FullName[fv->DirLen])); + SetDlgNum(fv->HWin, IDC_PROTOBYTECOUNT, fv->ByteCount); + SetDlgPercent(fv->HWin, IDC_PROTOPERCENT, IDC_PROTOPROGRESS, + fv->ByteCount, fv->FileSize, &fv->ProgStat); + SetDlgTime(fv->HWin, IDC_PROTOELAPSEDTIME, fv->StartTime, fv->ByteCount); - KmtIncPacketNum(kv); - strncpy_s(&(kv->PktOut[4]),sizeof(kv->PktOut)-4,&(fv->FullName[fv->DirLen]),_TRUNCATE); // put FName - FTConvFName(&(kv->PktOut[4])); // replace ' ' by '_' in FName - KmtMakePacket(fv,kv,(BYTE)(kv->PktNum-kv->PktNumOffset),(BYTE)'F', - strlen(&(fv->FullName[fv->DirLen]))); - KmtSendPacket(fv,kv,cv); + KmtIncPacketNum(kv); + strncpy_s(&(kv->PktOut[4]),sizeof(kv->PktOut)-4,&(fv->FullName[fv->DirLen]),_TRUNCATE); // put FName + FTConvFName(&(kv->PktOut[4])); // replace ' ' by '_' in FName + KmtMakePacket(fv,kv,(BYTE)(kv->PktNum-kv->PktNumOffset),(BYTE)'F', + strlen(&(fv->FullName[fv->DirLen]))); + KmtSendPacket(fv,kv,cv); - kv->RepeatCount = 0; - kv->NextByteFlag = FALSE; - kv->KmtState = SendFile; - return TRUE; + kv->RepeatCount = 0; + kv->NextByteFlag = FALSE; + kv->KmtState = SendFile; + return TRUE; } void KmtSendReceiveInit(PFileVar fv, PKmtVar kv, PComVar cv) { - kv->PktNum = 0; - kv->PktNumOffset = 0; + kv->PktNum = 0; + kv->PktNumOffset = 0; - if ((signed int)strlen(&(fv->FullName[fv->DirLen])) >= - kv->KmtYour.MAXL - kv->KmtMy.CHKT - 4) - fv->FullName[fv->DirLen+kv->KmtYour.MAXL-kv->KmtMy.CHKT-4] = 0; + if ((signed int)strlen(&(fv->FullName[fv->DirLen])) >= + kv->KmtYour.MAXL - kv->KmtMy.CHKT - 4) + fv->FullName[fv->DirLen+kv->KmtYour.MAXL-kv->KmtMy.CHKT-4] = 0; - strncpy_s(&(kv->PktOut[4]),sizeof(kv->PktOut)-4,&(fv->FullName[fv->DirLen]),_TRUNCATE); - KmtMakePacket(fv,kv,(BYTE)(kv->PktNum-kv->PktNumOffset),(BYTE)'R', - strlen(&(fv->FullName[fv->DirLen]))); - KmtSendPacket(fv,kv,cv); + strncpy_s(&(kv->PktOut[4]),sizeof(kv->PktOut)-4,&(fv->FullName[fv->DirLen]),_TRUNCATE); + KmtMakePacket(fv,kv,(BYTE)(kv->PktNum-kv->PktNumOffset),(BYTE)'R', + strlen(&(fv->FullName[fv->DirLen]))); + KmtSendPacket(fv,kv,cv); - kv->KmtState = GetInit; + kv->KmtState = GetInit; } void KmtSendFinish(PFileVar fv, PKmtVar kv, PComVar cv) { - kv->PktNum = 0; - kv->PktNumOffset = 0; + kv->PktNum = 0; + kv->PktNumOffset = 0; - kv->PktOut[4] = 'F'; /* Finish */ - KmtMakePacket(fv,kv,(BYTE)(kv->PktNum-kv->PktNumOffset),(BYTE)'G',1); - KmtSendPacket(fv,kv,cv); + kv->PktOut[4] = 'F'; /* Finish */ + KmtMakePacket(fv,kv,(BYTE)(kv->PktNum-kv->PktNumOffset),(BYTE)'G',1); + KmtSendPacket(fv,kv,cv); - kv->KmtState = Finish; + kv->KmtState = Finish; } void KmtInit - (PFileVar fv, PKmtVar kv, PComVar cv, PTTSet ts) +(PFileVar fv, PKmtVar kv, PComVar cv, PTTSet ts) { - char uimsg[MAX_UIMSG]; + char uimsg[MAX_UIMSG]; - strncpy_s(fv->DlgCaption,sizeof(fv->DlgCaption),"Tera Term: Kermit ",_TRUNCATE); - switch (kv->KmtMode) { - case IdKmtSend: - get_lang_msg("FILEDLG_TRANS_TITLE_KMTSEND", uimsg, sizeof(uimsg), TitKmtSend, UILanguageFile); - strncat_s(fv->DlgCaption, sizeof(fv->DlgCaption), uimsg, _TRUNCATE); - break; - case IdKmtReceive: - get_lang_msg("FILEDLG_TRANS_TITLE_KMTRCV", uimsg, sizeof(uimsg), TitKmtRcv, UILanguageFile); - strncat_s(fv->DlgCaption, sizeof(fv->DlgCaption), uimsg, _TRUNCATE); - break; - case IdKmtGet: - get_lang_msg("FILEDLG_TRANS_TITLE_KMTGET", uimsg, sizeof(uimsg), TitKmtGet, UILanguageFile); - strncat_s(fv->DlgCaption, sizeof(fv->DlgCaption), uimsg, _TRUNCATE); - break; - case IdKmtFinish: - get_lang_msg("FILEDLG_TRANS_TITLE_KMTFIN", uimsg, sizeof(uimsg), TitKmtFin, UILanguageFile); - strncat_s(fv->DlgCaption, sizeof(fv->DlgCaption), uimsg, _TRUNCATE); - break; - } + strncpy_s(fv->DlgCaption,sizeof(fv->DlgCaption),"Tera Term: Kermit ",_TRUNCATE); + switch (kv->KmtMode) { + case IdKmtSend: + get_lang_msg("FILEDLG_TRANS_TITLE_KMTSEND", uimsg, sizeof(uimsg), TitKmtSend, UILanguageFile); + strncat_s(fv->DlgCaption, sizeof(fv->DlgCaption), uimsg, _TRUNCATE); + break; + case IdKmtReceive: + get_lang_msg("FILEDLG_TRANS_TITLE_KMTRCV", uimsg, sizeof(uimsg), TitKmtRcv, UILanguageFile); + strncat_s(fv->DlgCaption, sizeof(fv->DlgCaption), uimsg, _TRUNCATE); + break; + case IdKmtGet: + get_lang_msg("FILEDLG_TRANS_TITLE_KMTGET", uimsg, sizeof(uimsg), TitKmtGet, UILanguageFile); + strncat_s(fv->DlgCaption, sizeof(fv->DlgCaption), uimsg, _TRUNCATE); + break; + case IdKmtFinish: + get_lang_msg("FILEDLG_TRANS_TITLE_KMTFIN", uimsg, sizeof(uimsg), TitKmtFin, UILanguageFile); + strncat_s(fv->DlgCaption, sizeof(fv->DlgCaption), uimsg, _TRUNCATE); + break; + } - SetWindowText(fv->HWin,fv->DlgCaption); - SetDlgItemText(fv->HWin, IDC_PROTOPROT, "Kermit"); + SetWindowText(fv->HWin,fv->DlgCaption); + SetDlgItemText(fv->HWin, IDC_PROTOPROT, "Kermit"); - if (kv->KmtMode == IdKmtSend) { - InitDlgProgress(fv->HWin, IDC_PROTOPROGRESS, &fv->ProgStat); - fv->StartTime = GetTickCount(); - } - else { - fv->ProgStat = -1; - fv->StartTime = 0; - } + if (kv->KmtMode == IdKmtSend) { + InitDlgProgress(fv->HWin, IDC_PROTOPROGRESS, &fv->ProgStat); + fv->StartTime = GetTickCount(); + } + else { + fv->ProgStat = -1; + fv->StartTime = 0; + } - fv->FileOpen = FALSE; + fv->FileOpen = FALSE; - kv->KmtState = Unknown; + kv->KmtState = Unknown; - /* default my parameters */ - kv->KmtMy.MAXL = DefMAXL; - kv->KmtMy.TIME = DefTIME; - kv->KmtMy.NPAD = DefNPAD; - kv->KmtMy.PADC = DefPADC; - kv->KmtMy.EOL = DefEOL; - kv->KmtMy.QCTL = DefQCTL; - if ((cv->PortType==IdSerial) && - (ts->DataBit==IdDataBit7)) - kv->KmtMy.QBIN = '&'; - else - kv->KmtMy.QBIN = MyQBIN; - kv->KmtMy.CHKT = DefCHKT; - kv->KmtMy.REPT = MyREPT; + /* default my parameters */ + kv->KmtMy.MAXL = DefMAXL; + kv->KmtMy.TIME = DefTIME; + kv->KmtMy.NPAD = DefNPAD; + kv->KmtMy.PADC = DefPADC; + kv->KmtMy.EOL = DefEOL; + kv->KmtMy.QCTL = DefQCTL; + if ((cv->PortType==IdSerial) && + (ts->DataBit==IdDataBit7)) + kv->KmtMy.QBIN = '&'; + else + kv->KmtMy.QBIN = MyQBIN; + kv->KmtMy.CHKT = DefCHKT; + kv->KmtMy.REPT = MyREPT; - /* default your parameters */ - kv->KmtYour = kv->KmtMy; + /* default your parameters */ + kv->KmtYour = kv->KmtMy; - kv->Quote8 = FALSE; - kv->RepeatFlag = FALSE; + kv->Quote8 = FALSE; + kv->RepeatFlag = FALSE; - kv->PktNumOffset = 0; - kv->PktNum = 0; + kv->PktNumOffset = 0; + kv->PktNum = 0; - fv->LogFlag = ((ts->LogFlag & LOG_KMT)!=0); - if (fv->LogFlag) { - char buf[128]; - time_t tm = time(NULL); + fv->LogFlag = ((ts->LogFlag & LOG_KMT)!=0); + if (fv->LogFlag) { + char buf[128]; + time_t tm = time(NULL); - fv->LogFile = _lcreat("KERMIT.LOG",0); - fv->LogCount = 0; - fv->LogState = 0; - fv->FlushLogLineBuf = 0; - _snprintf_s(buf, sizeof(buf), _TRUNCATE, "KERMIT %s start: %s\n", - kv->KmtMode == IdKmtSend ? "Send" : - kv->KmtMode == IdKmtReceive ? "Receive" : - kv->KmtMode == IdKmtGet ? "Get" : "Finish", - ctime(&tm) - ); - _lwrite(fv->LogFile, buf, strlen(buf)); - } + fv->LogFile = _lcreat("KERMIT.LOG",0); + fv->LogCount = 0; + fv->LogState = 0; + fv->FlushLogLineBuf = 0; + _snprintf_s(buf, sizeof(buf), _TRUNCATE, "KERMIT %s start: %s\n", + kv->KmtMode == IdKmtSend ? "Send" : + kv->KmtMode == IdKmtReceive ? "Receive" : + kv->KmtMode == IdKmtGet ? "Get" : "Finish", + ctime(&tm) + ); + _lwrite(fv->LogFile, buf, strlen(buf)); + } - switch (kv->KmtMode) { - case IdKmtSend: - KmtSendInitPkt(fv,kv,cv,'S'); - break; - case IdKmtReceive: - kv->KmtState = ReceiveInit; - FTSetTimeOut(fv,kv->KmtYour.TIME); - break; - case IdKmtGet: - KmtSendInitPkt(fv,kv,cv,'I'); - break; - case IdKmtFinish: - KmtSendInitPkt(fv,kv,cv,'I'); - break; - } + switch (kv->KmtMode) { + case IdKmtSend: + KmtSendInitPkt(fv,kv,cv,'S'); + break; + case IdKmtReceive: + kv->KmtState = ReceiveInit; + FTSetTimeOut(fv,kv->KmtYour.TIME); + break; + case IdKmtGet: + KmtSendInitPkt(fv,kv,cv,'I'); + break; + case IdKmtFinish: + KmtSendInitPkt(fv,kv,cv,'I'); + break; + } } void KmtTimeOutProc(PFileVar fv, PKmtVar kv, PComVar cv) { - switch (kv->KmtState) { - case SendInit: - KmtSendPacket(fv,kv,cv); - break; - case SendFile: - KmtSendPacket(fv,kv,cv); - break; - case SendData: - KmtSendPacket(fv,kv,cv); - break; - case SendEOF: - KmtSendPacket(fv,kv,cv); - break; - case SendEOT: - KmtSendPacket(fv,kv,cv); - break; - case ReceiveInit: - KmtSendNack(fv,kv,cv,KmtChar(0)); - break; - case ReceiveFile: - KmtSendNack(fv,kv,cv,kv->NextSeq); - break; - case ReceiveData: - KmtSendNack(fv,kv,cv,kv->NextSeq); - break; - case ServerInit: - KmtSendPacket(fv,kv,cv); - break; - case GetInit: - KmtSendPacket(fv,kv,cv); - break; - case Finish: - KmtSendPacket(fv,kv,cv); - break; - } + switch (kv->KmtState) { + case SendInit: + KmtSendPacket(fv,kv,cv); + break; + case SendFile: + KmtSendPacket(fv,kv,cv); + break; + case SendData: + KmtSendPacket(fv,kv,cv); + break; + case SendEOF: + KmtSendPacket(fv,kv,cv); + break; + case SendEOT: + KmtSendPacket(fv,kv,cv); + break; + case ReceiveInit: + KmtSendNack(fv,kv,cv,KmtChar(0)); + break; + case ReceiveFile: + KmtSendNack(fv,kv,cv,kv->NextSeq); + break; + case ReceiveData: + KmtSendNack(fv,kv,cv,kv->NextSeq); + break; + case ServerInit: + KmtSendPacket(fv,kv,cv); + break; + case GetInit: + KmtSendPacket(fv,kv,cv); + break; + case Finish: + KmtSendPacket(fv,kv,cv); + break; + } } BOOL KmtReadPacket(PFileVar fv, PKmtVar kv, PComVar cv) { - BYTE b; - int c, PktNumNew; - BOOL GetPkt; - char FNBuff[50]; - int i, j, Len; + BYTE b; + int c, PktNumNew; + BOOL GetPkt; + char FNBuff[50]; + int i, j, Len; - c = CommRead1Byte(cv,&b); + c = CommRead1Byte(cv,&b); - GetPkt = FALSE; + GetPkt = FALSE; - while ((c>0) && (! GetPkt)) - { - if (b==1) - { - kv->PktReadMode = WaitLen; - kv->PktIn[0] = b; - } - else - switch (kv->PktReadMode) { - case WaitLen: - kv->PktIn[1] = b; - kv->PktInLen = KmtNum(b); - kv->PktInCount = kv->PktInLen; - kv->PktInPtr = 2; - kv->PktReadMode = WaitCheck; - break; - case WaitCheck: - kv->PktIn[kv->PktInPtr] = b; - kv->PktInPtr++; - kv->PktInCount--; - GetPkt = (kv->PktInCount==0); - if (GetPkt) kv->PktReadMode = WaitMark; - break; - } + while ((c>0) && (! GetPkt)) + { + if (b==1) + { + kv->PktReadMode = WaitLen; + kv->PktIn[0] = b; + } + else + switch (kv->PktReadMode) { + case WaitLen: + kv->PktIn[1] = b; + kv->PktInLen = KmtNum(b); + kv->PktInCount = kv->PktInLen; + kv->PktInPtr = 2; + kv->PktReadMode = WaitCheck; + break; + case WaitCheck: + kv->PktIn[kv->PktInPtr] = b; + kv->PktInPtr++; + kv->PktInCount--; + GetPkt = (kv->PktInCount==0); + if (GetPkt) kv->PktReadMode = WaitMark; + break; + } - if (! GetPkt) c = CommRead1Byte(cv,&b); - } + if (! GetPkt) c = CommRead1Byte(cv,&b); + } - if (! GetPkt) return TRUE; + if (! GetPkt) return TRUE; - if (fv->LogFlag) - { + if (fv->LogFlag) + { #if 0 - _lwrite(fv->LogFile,"< ",2); - _lwrite(fv->LogFile,&(kv->PktIn[1]),kv->PktInLen+1); - _lwrite(fv->LogFile,"\015\012",2); + _lwrite(fv->LogFile,"< ",2); + _lwrite(fv->LogFile,&(kv->PktIn[1]),kv->PktInLen+1); + _lwrite(fv->LogFile,"\015\012",2); #else - KmtReadLog(fv,&(kv->PktIn[1]),kv->PktInLen+1); + KmtReadLog(fv,&(kv->PktIn[1]),kv->PktInLen+1); #endif - } + } - PktNumNew = KmtCalcPktNum(kv,kv->PktIn[2]); + PktNumNew = KmtCalcPktNum(kv,kv->PktIn[2]); - GetPkt = KmtCheckPacket(kv); + GetPkt = KmtCheckPacket(kv); - /* Ack or Nack */ - if ((kv->PktIn[3]!='Y') && - (kv->PktIn[3]!='N')) - { - if (GetPkt) KmtSendAck(fv,kv,cv); - else KmtSendNack(fv,kv,cv,kv->PktIn[2]); - } + /* Ack or Nack */ + if ((kv->PktIn[3]!='Y') && + (kv->PktIn[3]!='N')) + { + if (GetPkt) KmtSendAck(fv,kv,cv); + else KmtSendNack(fv,kv,cv,kv->PktIn[2]); + } - if (! GetPkt) return TRUE; + if (! GetPkt) return TRUE; - switch (kv->PktIn[3]) { - case 'B': - if (kv->KmtState == ReceiveFile) - { - fv->Success = TRUE; - return FALSE; - } - case 'D': - if ((kv->KmtState == ReceiveData) && - (PktNumNew > kv->PktNum)) - KmtDecode(fv,kv,NULL,&Len); - break; - case 'E': return FALSE; - case 'F': - if ((kv->KmtState==ReceiveFile) || - (kv->KmtState==GetInit)) - { - kv->KmtMode = IdKmtReceive; + switch (kv->PktIn[3]) { + case 'B': + if (kv->KmtState == ReceiveFile) + { + fv->Success = TRUE; + return FALSE; + } + case 'D': + if ((kv->KmtState == ReceiveData) && + (PktNumNew > kv->PktNum)) + KmtDecode(fv,kv,NULL,&Len); + break; + case 'E': return FALSE; + case 'F': + if ((kv->KmtState==ReceiveFile) || + (kv->KmtState==GetInit)) + { + kv->KmtMode = IdKmtReceive; - Len = sizeof(FNBuff); - KmtDecode(fv,kv,FNBuff,&Len); - FNBuff[Len] = 0; - GetFileNamePos(FNBuff,&i,&j); - strncpy_s(&(fv->FullName[fv->DirLen]),sizeof(fv->FullName) - fv->DirLen,&FNBuff[j],_TRUNCATE); - /* file open */ - if (! FTCreateFile(fv)) return FALSE; - kv->KmtState = ReceiveData; - } - break; + Len = sizeof(FNBuff); + KmtDecode(fv,kv,FNBuff,&Len); + FNBuff[Len] = 0; + GetFileNamePos(FNBuff,&i,&j); + strncpy_s(&(fv->FullName[fv->DirLen]),sizeof(fv->FullName) - fv->DirLen,&FNBuff[j],_TRUNCATE); + /* file open */ + if (! FTCreateFile(fv)) return FALSE; + kv->KmtState = ReceiveData; + } + break; - case 'S': - if ((kv->KmtState == ReceiveInit) || - (kv->KmtState == GetInit)) - { - kv->KmtMode = IdKmtReceive; - kv->KmtState = ReceiveFile; - } - break; + case 'S': + if ((kv->KmtState == ReceiveInit) || + (kv->KmtState == GetInit)) + { + kv->KmtMode = IdKmtReceive; + kv->KmtState = ReceiveFile; + } + break; - case 'N': - switch (kv->KmtState) { - case SendInit: - if (PktNumNew==kv->PktNum) - KmtSendPacket(fv,kv,cv); - break; - case SendFile: - if (PktNumNew==kv->PktNum) - KmtSendPacket(fv,kv,cv); - else if (PktNumNew==kv->PktNum+1) - KmtSendNextData(fv,kv,cv); - break; - case SendData: - if (PktNumNew==kv->PktNum) - KmtSendPacket(fv,kv,cv); - else if (PktNumNew==kv->PktNum+1) - KmtSendNextData(fv,kv,cv); - break; - case SendEOF: - if (PktNumNew==kv->PktNum) - KmtSendPacket(fv,kv,cv); - else if (PktNumNew==kv->PktNum+1) - { - if (! KmtSendNextFile(fv,kv,cv)) - return FALSE; - } - break; - case SendEOT: - if (PktNumNew==kv->PktNum) - KmtSendPacket(fv,kv,cv); - break; - case ServerInit: - if (PktNumNew==kv->PktNum) - KmtSendPacket(fv,kv,cv); - break; - case GetInit: - if (PktNumNew==kv->PktNum) - KmtSendPacket(fv,kv,cv); - break; - case Finish: - if (PktNumNew==kv->PktNum) - KmtSendPacket(fv,kv,cv); - break; - } - break; + case 'N': + switch (kv->KmtState) { + case SendInit: + if (PktNumNew==kv->PktNum) + KmtSendPacket(fv,kv,cv); + break; + case SendFile: + if (PktNumNew==kv->PktNum) + KmtSendPacket(fv,kv,cv); + else if (PktNumNew==kv->PktNum+1) + KmtSendNextData(fv,kv,cv); + break; + case SendData: + if (PktNumNew==kv->PktNum) + KmtSendPacket(fv,kv,cv); + else if (PktNumNew==kv->PktNum+1) + KmtSendNextData(fv,kv,cv); + break; + case SendEOF: + if (PktNumNew==kv->PktNum) + KmtSendPacket(fv,kv,cv); + else if (PktNumNew==kv->PktNum+1) + { + if (! KmtSendNextFile(fv,kv,cv)) + return FALSE; + } + break; + case SendEOT: + if (PktNumNew==kv->PktNum) + KmtSendPacket(fv,kv,cv); + break; + case ServerInit: + if (PktNumNew==kv->PktNum) + KmtSendPacket(fv,kv,cv); + break; + case GetInit: + if (PktNumNew==kv->PktNum) + KmtSendPacket(fv,kv,cv); + break; + case Finish: + if (PktNumNew==kv->PktNum) + KmtSendPacket(fv,kv,cv); + break; + } + break; - case 'Y': - switch (kv->KmtState) { - case SendInit: - if (PktNumNew==kv->PktNum) - { - KmtParseInit(kv,TRUE); - if (! KmtSendNextFile(fv,kv,cv)) - return FALSE; - } - break; - case SendFile: - if (PktNumNew==kv->PktNum) - KmtSendNextData(fv,kv,cv); - break; - case SendData: - if (PktNumNew==kv->PktNum) - KmtSendNextData(fv,kv,cv); - else if (PktNumNew+1==kv->PktNum) - KmtSendPacket(fv,kv,cv); - break; - case SendEOF: - if (PktNumNew==kv->PktNum) - { - if (! KmtSendNextFile(fv,kv,cv)) - return FALSE; - } - break; - case SendEOT: - if (PktNumNew==kv->PktNum) - { - fv->Success = TRUE; - return FALSE; - } - break; - case ServerInit: - if (PktNumNew==kv->PktNum) - { - KmtParseInit(kv,TRUE); - switch (kv->KmtMode) { - case IdKmtGet: - KmtSendReceiveInit(fv,kv,cv); - break; - case IdKmtFinish: - KmtSendFinish(fv,kv,cv); - break; - } - } - break; - case Finish: - if (PktNumNew==kv->PktNum) - { - fv->Success = TRUE; - return FALSE; - } - break; - } - break; + case 'Y': + switch (kv->KmtState) { + case SendInit: + if (PktNumNew==kv->PktNum) + { + KmtParseInit(kv,TRUE); + if (! KmtSendNextFile(fv,kv,cv)) + return FALSE; + } + break; + case SendFile: + if (PktNumNew==kv->PktNum) + KmtSendNextData(fv,kv,cv); + break; + case SendData: + if (PktNumNew==kv->PktNum) + KmtSendNextData(fv,kv,cv); + else if (PktNumNew+1==kv->PktNum) + KmtSendPacket(fv,kv,cv); + break; + case SendEOF: + if (PktNumNew==kv->PktNum) + { + if (! KmtSendNextFile(fv,kv,cv)) + return FALSE; + } + break; + case SendEOT: + if (PktNumNew==kv->PktNum) + { + fv->Success = TRUE; + return FALSE; + } + break; + case ServerInit: + if (PktNumNew==kv->PktNum) + { + KmtParseInit(kv,TRUE); + switch (kv->KmtMode) { + case IdKmtGet: + KmtSendReceiveInit(fv,kv,cv); + break; + case IdKmtFinish: + KmtSendFinish(fv,kv,cv); + break; + } + } + break; + case Finish: + if (PktNumNew==kv->PktNum) + { + fv->Success = TRUE; + return FALSE; + } + break; + } + break; - case 'Z': - if (kv->KmtState == ReceiveData) - { - if (fv->FileOpen) _lclose(fv->FileHandle); - fv->FileOpen = FALSE; - kv->KmtState = ReceiveFile; - } - } + case 'Z': + if (kv->KmtState == ReceiveData) + { + if (fv->FileOpen) _lclose(fv->FileHandle); + fv->FileOpen = FALSE; + kv->KmtState = ReceiveFile; + } + } - if (kv->KmtMode == IdKmtReceive) - { - kv->NextSeq = KmtChar((BYTE)((KmtNum(kv->PktIn[2])+1) % 64)); - kv->PktNum = PktNumNew; - if (kv->PktNum > kv->PktNumOffset+63) - kv->PktNumOffset = kv->PktNumOffset + 64; - } + if (kv->KmtMode == IdKmtReceive) + { + kv->NextSeq = KmtChar((BYTE)((KmtNum(kv->PktIn[2])+1) % 64)); + kv->PktNum = PktNumNew; + if (kv->PktNum > kv->PktNumOffset+63) + kv->PktNumOffset = kv->PktNumOffset + 64; + } - SetDlgNum(fv->HWin, IDC_PROTOPKTNUM, kv->PktNum); + SetDlgNum(fv->HWin, IDC_PROTOPKTNUM, kv->PktNum); - return TRUE; + return TRUE; } void KmtCancel(PFileVar fv, PKmtVar kv, PComVar cv) { - KmtIncPacketNum(kv); - strncpy_s(&(kv->PktOut[4]),sizeof(kv->PktOut)-4,"Cancel",_TRUNCATE); - KmtMakePacket(fv,kv,(BYTE)(kv->PktNum-kv->PktNumOffset),(BYTE)'E', - strlen(&(kv->PktOut[4]))); - KmtSendPacket(fv,kv,cv); + KmtIncPacketNum(kv); + strncpy_s(&(kv->PktOut[4]),sizeof(kv->PktOut)-4,"Cancel",_TRUNCATE); + KmtMakePacket(fv,kv,(BYTE)(kv->PktNum-kv->PktNumOffset),(BYTE)'E', + strlen(&(kv->PktOut[4]))); + KmtSendPacket(fv,kv,cv); } From svnnotify @ sourceforge.jp Sat Jan 21 19:12:28 2012 From: svnnotify @ sourceforge.jp (svnnotify @ sourceforge.jp) Date: Sat, 21 Jan 2012 19:12:28 +0900 Subject: [Ttssh2-commit] [4797] kermit.log Message-ID: <1327140748.668850.23350.nullmailer@users.sourceforge.jp> Revision: 4797 http://sourceforge.jp/projects/ttssh2/svn/view?view=rev&revision=4797 Author: yutakapon Date: 2012-01-21 19:12:28 +0900 (Sat, 21 Jan 2012) Log Message: ----------- kermit.log - 末尾の16進ダンプが正しく表示できるようにした。 - packet formatのMARK(CTRL-A) も表示するようにした。 Modified Paths: -------------- trunk/teraterm/ttpfile/kermit.c -------------- next part -------------- Modified: trunk/teraterm/ttpfile/kermit.c =================================================================== --- trunk/teraterm/ttpfile/kermit.c 2012-01-21 09:44:20 UTC (rev 4796) +++ trunk/teraterm/ttpfile/kermit.c 2012-01-21 10:12:28 UTC (rev 4797) @@ -33,47 +33,34 @@ #define MyREPT '~' -static void KmtReadLog(PFileVar fv, BYTE *buf, int len) +static void KmtOutputCommonLog(PFileVar fv, BYTE *buf, int len) { - int j; + int i; + for (i = 0 ; i < len ; i++) + FTLog1Byte(fv, buf[i]); + + // \x8Ec\x82\xE8\x82\xCCASCII\x95\\x8E\xA6\x82\xF0\x8Ds\x82\xA4 + fv->FlushLogLineBuf = 1; + FTLog1Byte(fv, 0); + fv->FlushLogLineBuf = 0; +} + +static void KmtReadLog(PFileVar fv, BYTE *buf, int len) +{ if (fv->LogFlag && (len>0)) { - if (fv->LogState == 0) - { - // \x8Ec\x82\xE8\x82\xCCASCII\x95\\x8E\xA6\x82\xF0\x8Ds\x82\xA4 - fv->FlushLogLineBuf = 1; - FTLog1Byte(fv,0); - fv->FlushLogLineBuf = 0; - - fv->LogState = 1; - fv->LogCount = 0; - _lwrite(fv->LogFile,"\015\012<<<\015\012",7); - } - for (j=0 ; j <= len-1 ; j++) - FTLog1Byte(fv, buf[j]); + _lwrite(fv->LogFile,"\015\012<<<\015\012",7); + KmtOutputCommonLog(fv, buf, len); } } static void KmtWriteLog(PFileVar fv, BYTE *buf, int len) { - int j; - if (fv->LogFlag && (len>0)) { - if (fv->LogState != 0) - { - // \x8Ec\x82\xE8\x82\xCCASCII\x95\\x8E\xA6\x82\xF0\x8Ds\x82\xA4 - fv->FlushLogLineBuf = 1; - FTLog1Byte(fv,0); - fv->FlushLogLineBuf = 0; - - fv->LogState = 0; - fv->LogCount = 0; - _lwrite(fv->LogFile,"\015\012>>>\015\012",7); - } - for (j=0 ; j <= len-1 ; j++) - FTLog1Byte(fv, buf[j]); + _lwrite(fv->LogFile,"\015\012>>>\015\012",7); + KmtOutputCommonLog(fv, buf, len); } } @@ -120,7 +107,7 @@ _lwrite(fv->LogFile,&(kv->PktOut[1]),C-1); _lwrite(fv->LogFile,"\015\012",2); #else - KmtWriteLog(fv,&(kv->PktOut[1]),C-1); + KmtWriteLog(fv, &(kv->PktOut[0]), C); #endif } @@ -825,7 +812,7 @@ _lwrite(fv->LogFile,&(kv->PktIn[1]),kv->PktInLen+1); _lwrite(fv->LogFile,"\015\012",2); #else - KmtReadLog(fv,&(kv->PktIn[1]),kv->PktInLen+1); + KmtReadLog(fv,&(kv->PktIn[0]),kv->PktInLen); #endif } From svnnotify @ sourceforge.jp Sat Jan 21 19:22:13 2012 From: svnnotify @ sourceforge.jp (svnnotify @ sourceforge.jp) Date: Sat, 21 Jan 2012 19:22:13 +0900 Subject: [Ttssh2-commit] =?utf-8?b?WzQ3OThdIE9wZW5TU0wgMS4wLiAwZyDjgas=?= =?utf-8?b?5beu44GX5pu/44GI44Gf44CC?= Message-ID: <1327141333.532161.2139.nullmailer@users.sourceforge.jp> Revision: 4798 http://sourceforge.jp/projects/ttssh2/svn/view?view=rev&revision=4798 Author: yutakapon Date: 2012-01-21 19:22:13 +0900 (Sat, 21 Jan 2012) Log Message: ----------- OpenSSL 1.0.0g に差し替えた。 Modified Paths: -------------- trunk/doc/en/html/about/history.html trunk/doc/en/html/reference/develop.txt trunk/doc/ja/html/about/history.html trunk/doc/ja/html/reference/develop.txt -------------- next part -------------- Modified: trunk/doc/en/html/about/history.html =================================================================== --- trunk/doc/en/html/about/history.html 2012-01-21 10:12:28 UTC (rev 4797) +++ trunk/doc/en/html/about/history.html 2012-01-21 10:22:13 UTC (rev 4798) @@ -50,6 +50,7 @@
    • added the LogLockExclusive entry in the teraterm.ini file. The default value is on.
    +
  • Improved the KERMIT.LOG more easily.
  • @@ -61,11 +62,12 @@ - +

    2011.12.04 (Ver 4.72)

    @@ -1822,7 +1824,7 @@
  • Misc
    • upgraded PuTTY to 0.62
    • -
    • upgraded OpenSSL to 1.0.0f
    • +
    • upgraded OpenSSL to 1.0.0g
  • Modified: trunk/doc/en/html/reference/develop.txt =================================================================== --- trunk/doc/en/html/reference/develop.txt 2012-01-21 10:12:28 UTC (rev 4797) +++ trunk/doc/en/html/reference/develop.txt 2012-01-21 10:22:13 UTC (rev 4798) @@ -20,7 +20,7 @@ * Libraries - Oniguruma 5.9.2 (http://www.geocities.jp/kosako3/oniguruma/) -- OpenSSL 1.0.0f (http://www.openssl.org/) +- OpenSSL 1.0.0g (http://www.openssl.org/) - zlib 1.2.5 (http://www.zlib.net/) - PuTTY 0.62 (http://www.chiark.greenend.org.uk/~sgtatham/putty/) @@ -100,7 +100,7 @@ 3. OpenSSL (used by TTSSH and TTProxy) (1) Extract openssl source into libs/openssl directory. - (2) Delete the libs/openssl/Makefile.bak file manually on the OpenSSL 1.0.0e or later. + (2) When the libs/openssl/Makefile.bak file exists on the OpenSSL 1.0.0e or later, delete the file only once (3) Launch 'Visual Studio 2005 Command Prompt' batch file from start menu. (4) Move 'libs' directory on the command prompt. And run buildopenssl.bat. Modified: trunk/doc/ja/html/about/history.html =================================================================== --- trunk/doc/ja/html/about/history.html 2012-01-21 10:12:28 UTC (rev 4797) +++ trunk/doc/ja/html/about/history.html 2012-01-21 10:22:13 UTC (rev 4798) @@ -50,6 +50,7 @@
    • teraterm.ini \x82\xC9 LogLockExclusive \x83G\x83\x93\x83g\x83\x8A\x82\xF0\x92?\xC1\x82\xB5\x82\xBD\x81B\x83f\x83t\x83H\x83\x8B\x83g\x82\xCD on\x81B
    +
  • KERMIT.LOG \x82\xF0\x93???\x82\xAD\x89\xFC\x91P\x82\xB5\x82\xBD\x81B
  • @@ -61,11 +62,12 @@ - +

    2011.12.04 (Ver 4.72)

    @@ -1823,7 +1825,7 @@
  • \x82\xBB\x82?\xBC
    • \x8Eg\x97p\x82\xB7\x82\xE9 PuTTY \x82\xF0 0.62 \x82?\xB7\x82\xB5\x91?\xA6\x82\xBD
    • -
    • OpenSSL 1.0.0f\x82?\xB7\x82\xB5\x91?\xA6\x82\xBD
    • +
    • OpenSSL 1.0.0g\x82?\xB7\x82\xB5\x91?\xA6\x82\xBD
  • Modified: trunk/doc/ja/html/reference/develop.txt =================================================================== --- trunk/doc/ja/html/reference/develop.txt 2012-01-21 10:12:28 UTC (rev 4797) +++ trunk/doc/ja/html/reference/develop.txt 2012-01-21 10:22:13 UTC (rev 4798) @@ -22,7 +22,7 @@ \x81\xA1 \x83\x89\x83C\x83u\x83\x89\x83\x8A - Oniguruma 5.9.2 (http://www.geocities.jp/kosako3/oniguruma/) -- OpenSSL 1.0.0f (http://www.openssl.org/) +- OpenSSL 1.0.0g (http://www.openssl.org/) - zlib 1.2.5 (http://www.zlib.net/) - PuTTY 0.62 (http://www.chiark.greenend.org.uk/~sgtatham/putty/) @@ -106,7 +106,7 @@ 3. OpenSSL (used by TTSSH and TTProxy) (1) openssl \x82?\\x81[\x83X\x82\xF0 libs/openssl \x82?\x86\x82?W\x8AJ\x82\xB7\x82\xE9\x81B - (2) OpenSSL 1.0.0e \x88?~\x82ł?A\x8E蓮\x82\xC5 libs/openssl/Makefile.bak \x82\xF0\x8D?\x82\xB5\x82Ă\xAD\x82\xBE\x82\xB3\x82\xA2\x81B + (2) OpenSSL 1.0.0e \x88?~\x82ŁAlibs/openssl/Makefile.bak \x82\xAA\x8D?\x89\x82\xA9\x82瑶\x8D?\xB7\x82\xE9\x8F?\x82?A\x88\xEA\x93x\x82\xBE\x82\xAF\x8E蓮\x82ō?\x82\xB5\x82Ă\xAD\x82\xBE\x82\xB3\x82\xA2\x81B (3) \x83X\x83^\x81[\x83g\x83\x81\x83j\x83\x85\x81[\x82\xA9\x82\xE7\x81uVisual Studio 2005 \x83R\x83}\x83\x93\x83h \x83v\x83\x8D\x83\x93\x83v\x83g\x81v\x82\xF0\x8BN\x93\xAE\x82\xB7\x82\xE9\x81B (4) \x83R\x83}\x83\x93\x83h\x83v\x83\x8D\x83\x93\x83v\x83g\x8Fォ\x82\xE7 libs \x83f\x83B\x83\x8C\x83N\x83g\x83\x8A\x82??\xAE\x82\xB5\x81Abuildopenssl.bat \x82\xF0\x8E\xC0\x8Ds\x82\xB7\x82\xE9\x81B From svnnotify @ sourceforge.jp Sat Jan 21 20:53:32 2012 From: svnnotify @ sourceforge.jp (svnnotify @ sourceforge.jp) Date: Sat, 21 Jan 2012 20:53:32 +0900 Subject: [Ttssh2-commit] =?utf-8?b?WzQ3OTldICAtIENvcHlyaWdodOi/veWKoA==?= Message-ID: <1327146812.032368.30000.nullmailer@users.sourceforge.jp> Revision: 4799 http://sourceforge.jp/projects/ttssh2/svn/view?view=rev&revision=4799 Author: yutakapon Date: 2012-01-21 20:53:31 +0900 (Sat, 21 Jan 2012) Log Message: ----------- - Copyright追加 - インデント修正 Modified Paths: -------------- trunk/teraterm/ttpfile/kermit.c -------------- next part -------------- Modified: trunk/teraterm/ttpfile/kermit.c =================================================================== --- trunk/teraterm/ttpfile/kermit.c 2012-01-21 10:22:13 UTC (rev 4798) +++ trunk/teraterm/ttpfile/kermit.c 2012-01-21 11:53:31 UTC (rev 4799) @@ -1,7 +1,12 @@ /* Tera Term Copyright(C) 1994-1998 T. Teranishi -All rights reserved. */ +All rights reserved. +Copyright(C) 2004-2012 Tera Term Project +All rights reserved. + Kermit specification: http://www.kermitproject.org/ + */ + /* TTFILE.DLL, Kermit protocol */ #include "teraterm.h" #include "tttypes.h" @@ -221,88 +226,88 @@ b = kv->PktIn[i+3]; n = KmtNum(b); switch (i) { - case 1: - if ((MinMAXLKmtYour.MAXL = n; - break; - case 2: - if ((MinTIMEKmtYour.TIME = n; - break; - case 3: - if (nKmtYour.NPAD = n; - break; - case 4: - kv->KmtYour.PADC = b ^ 0x40; - break; - case 5: - if (n<0x20) - kv->KmtYour.EOL = n; - break; - case 6: - if (KmtCheckQuote(b)) - kv->KmtYour.QCTL = b; - break; - case 7: - if (AckFlag) /* Ack packet from remote host */ - { - if ((b=='Y') && - KmtCheckQuote(kv->KmtMy.QBIN)) - kv->Quote8 = TRUE; - else if (KmtCheckQuote(b) && - ((b==kv->KmtMy.QBIN) || - (kv->KmtMy.QBIN=='Y'))) + case 1: + if ((MinMAXLKmtYour.MAXL = n; + break; + case 2: + if ((MinTIMEKmtYour.TIME = n; + break; + case 3: + if (nKmtYour.NPAD = n; + break; + case 4: + kv->KmtYour.PADC = b ^ 0x40; + break; + case 5: + if (n<0x20) + kv->KmtYour.EOL = n; + break; + case 6: + if (KmtCheckQuote(b)) + kv->KmtYour.QCTL = b; + break; + case 7: + if (AckFlag) /* Ack packet from remote host */ { - kv->KmtMy.QBIN = b; - kv->Quote8 = TRUE; + if ((b=='Y') && + KmtCheckQuote(kv->KmtMy.QBIN)) + kv->Quote8 = TRUE; + else if (KmtCheckQuote(b) && + ((b==kv->KmtMy.QBIN) || + (kv->KmtMy.QBIN=='Y'))) + { + kv->KmtMy.QBIN = b; + kv->Quote8 = TRUE; + } } - } - else /* S-packet from remote host */ - if ((b=='Y') && KmtCheckQuote(kv->KmtMy.QBIN)) - kv->Quote8 = TRUE; - else if (KmtCheckQuote(b)) + else /* S-packet from remote host */ + if ((b=='Y') && KmtCheckQuote(kv->KmtMy.QBIN)) + kv->Quote8 = TRUE; + else if (KmtCheckQuote(b)) + { + kv->KmtMy.QBIN = b; + kv->Quote8 = TRUE; + } + + if (! kv->Quote8) kv->KmtMy.QBIN = 'N'; + kv->KmtYour.QBIN = kv->KmtMy.QBIN; + break; + + case 8: + kv->KmtYour.CHKT = b - 0x30; + if (AckFlag) { - kv->KmtMy.QBIN = b; - kv->Quote8 = TRUE; + if (kv->KmtYour.CHKT!=kv->KmtMy.CHKT) + kv->KmtYour.CHKT = DefCHKT; } + else + if ((kv->KmtYour.CHKT<1) || + (kv->KmtYour.CHKT>2)) + kv->KmtYour.CHKT = DefCHKT; - if (! kv->Quote8) kv->KmtMy.QBIN = 'N'; - kv->KmtYour.QBIN = kv->KmtMy.QBIN; + kv->KmtMy.CHKT = kv->KmtYour.CHKT; break; - case 8: - kv->KmtYour.CHKT = b - 0x30; - if (AckFlag) - { - if (kv->KmtYour.CHKT!=kv->KmtMy.CHKT) - kv->KmtYour.CHKT = DefCHKT; - } - else - if ((kv->KmtYour.CHKT<1) || - (kv->KmtYour.CHKT>2)) - kv->KmtYour.CHKT = DefCHKT; + case 9: + kv->KmtYour.REPT = b; + if (! AckFlag && + (kv->KmtYour.REPT>0x20) && + (kv->KmtYour.REPT<0x7F)) + kv->KmtMy.REPT = kv->KmtYour.REPT; + /* + Very old bug: + Kermit fails to properly negotiate to NOT use "repeat" + compression when talking to a primitive partner (a + prominent example of a kermit implementation that does + not support repeat is the bootloader "U-Boot"). - kv->KmtMy.CHKT = kv->KmtYour.CHKT; - break; - - case 9: - kv->KmtYour.REPT = b; - if (! AckFlag && - (kv->KmtYour.REPT>0x20) && - (kv->KmtYour.REPT<0x7F)) - kv->KmtMy.REPT = kv->KmtYour.REPT; - /* - Very old bug: - Kermit fails to properly negotiate to NOT use "repeat" - compression when talking to a primitive partner (a - prominent example of a kermit implementation that does - not support repeat is the bootloader "U-Boot"). - - by Anders Larsen (2007/9/11 yutaka) - */ - kv->RepeatFlag = kv->KmtMy.REPT == kv->KmtYour.REPT; - break; + by Anders Larsen (2007/9/11 yutaka) + */ + kv->RepeatFlag = kv->KmtMy.REPT == kv->KmtYour.REPT; + break; } } @@ -871,107 +876,107 @@ case 'N': switch (kv->KmtState) { - case SendInit: - if (PktNumNew==kv->PktNum) - KmtSendPacket(fv,kv,cv); - break; - case SendFile: - if (PktNumNew==kv->PktNum) - KmtSendPacket(fv,kv,cv); - else if (PktNumNew==kv->PktNum+1) - KmtSendNextData(fv,kv,cv); - break; - case SendData: - if (PktNumNew==kv->PktNum) - KmtSendPacket(fv,kv,cv); - else if (PktNumNew==kv->PktNum+1) - KmtSendNextData(fv,kv,cv); - break; - case SendEOF: - if (PktNumNew==kv->PktNum) - KmtSendPacket(fv,kv,cv); - else if (PktNumNew==kv->PktNum+1) - { - if (! KmtSendNextFile(fv,kv,cv)) - return FALSE; + case SendInit: + if (PktNumNew==kv->PktNum) + KmtSendPacket(fv,kv,cv); + break; + case SendFile: + if (PktNumNew==kv->PktNum) + KmtSendPacket(fv,kv,cv); + else if (PktNumNew==kv->PktNum+1) + KmtSendNextData(fv,kv,cv); + break; + case SendData: + if (PktNumNew==kv->PktNum) + KmtSendPacket(fv,kv,cv); + else if (PktNumNew==kv->PktNum+1) + KmtSendNextData(fv,kv,cv); + break; + case SendEOF: + if (PktNumNew==kv->PktNum) + KmtSendPacket(fv,kv,cv); + else if (PktNumNew==kv->PktNum+1) + { + if (! KmtSendNextFile(fv,kv,cv)) + return FALSE; + } + break; + case SendEOT: + if (PktNumNew==kv->PktNum) + KmtSendPacket(fv,kv,cv); + break; + case ServerInit: + if (PktNumNew==kv->PktNum) + KmtSendPacket(fv,kv,cv); + break; + case GetInit: + if (PktNumNew==kv->PktNum) + KmtSendPacket(fv,kv,cv); + break; + case Finish: + if (PktNumNew==kv->PktNum) + KmtSendPacket(fv,kv,cv); + break; } break; - case SendEOT: - if (PktNumNew==kv->PktNum) - KmtSendPacket(fv,kv,cv); - break; - case ServerInit: - if (PktNumNew==kv->PktNum) - KmtSendPacket(fv,kv,cv); - break; - case GetInit: - if (PktNumNew==kv->PktNum) - KmtSendPacket(fv,kv,cv); - break; - case Finish: - if (PktNumNew==kv->PktNum) - KmtSendPacket(fv,kv,cv); - break; - } - break; case 'Y': switch (kv->KmtState) { - case SendInit: - if (PktNumNew==kv->PktNum) - { - KmtParseInit(kv,TRUE); - if (! KmtSendNextFile(fv,kv,cv)) + case SendInit: + if (PktNumNew==kv->PktNum) + { + KmtParseInit(kv,TRUE); + if (! KmtSendNextFile(fv,kv,cv)) + return FALSE; + } + break; + case SendFile: + if (PktNumNew==kv->PktNum) + KmtSendNextData(fv,kv,cv); + break; + case SendData: + if (PktNumNew==kv->PktNum) + KmtSendNextData(fv,kv,cv); + else if (PktNumNew+1==kv->PktNum) + KmtSendPacket(fv,kv,cv); + break; + case SendEOF: + if (PktNumNew==kv->PktNum) + { + if (! KmtSendNextFile(fv,kv,cv)) + return FALSE; + } + break; + case SendEOT: + if (PktNumNew==kv->PktNum) + { + fv->Success = TRUE; return FALSE; - } - break; - case SendFile: - if (PktNumNew==kv->PktNum) - KmtSendNextData(fv,kv,cv); - break; - case SendData: - if (PktNumNew==kv->PktNum) - KmtSendNextData(fv,kv,cv); - else if (PktNumNew+1==kv->PktNum) - KmtSendPacket(fv,kv,cv); - break; - case SendEOF: - if (PktNumNew==kv->PktNum) - { - if (! KmtSendNextFile(fv,kv,cv)) + } + break; + case ServerInit: + if (PktNumNew==kv->PktNum) + { + KmtParseInit(kv,TRUE); + switch (kv->KmtMode) { + case IdKmtGet: + KmtSendReceiveInit(fv,kv,cv); + break; + case IdKmtFinish: + KmtSendFinish(fv,kv,cv); + break; + } + } + break; + case Finish: + if (PktNumNew==kv->PktNum) + { + fv->Success = TRUE; return FALSE; - } - break; - case SendEOT: - if (PktNumNew==kv->PktNum) - { - fv->Success = TRUE; - return FALSE; - } - break; - case ServerInit: - if (PktNumNew==kv->PktNum) - { - KmtParseInit(kv,TRUE); - switch (kv->KmtMode) { - case IdKmtGet: - KmtSendReceiveInit(fv,kv,cv); - break; - case IdKmtFinish: - KmtSendFinish(fv,kv,cv); - break; } + break; } break; - case Finish: - if (PktNumNew==kv->PktNum) - { - fv->Success = TRUE; - return FALSE; - } - break; - } - break; case 'Z': if (kv->KmtState == ReceiveData) From svnnotify @ sourceforge.jp Sat Jan 21 23:15:29 2012 From: svnnotify @ sourceforge.jp (svnnotify @ sourceforge.jp) Date: Sat, 21 Jan 2012 23:15:29 +0900 Subject: [Ttssh2-commit] [4800] kermit.log Message-ID: <1327155329.884392.29356.nullmailer@users.sourceforge.jp> Revision: 4800 http://sourceforge.jp/projects/ttssh2/svn/view?view=rev&revision=4800 Author: yutakapon Date: 2012-01-21 23:15:29 +0900 (Sat, 21 Jan 2012) Log Message: ----------- kermit.log - 人に分かりやすい表示を追加した。 Modified Paths: -------------- trunk/teraterm/ttpfile/kermit.c -------------- next part -------------- Modified: trunk/teraterm/ttpfile/kermit.c =================================================================== --- trunk/teraterm/ttpfile/kermit.c 2012-01-21 11:53:31 UTC (rev 4799) +++ trunk/teraterm/ttpfile/kermit.c 2012-01-21 14:15:29 UTC (rev 4800) @@ -38,9 +38,14 @@ #define MyREPT '~' -static void KmtOutputCommonLog(PFileVar fv, BYTE *buf, int len) +BYTE KmtNum(BYTE b); + + +static void KmtOutputCommonLog(PFileVar fv, PKmtVar kv, BYTE *buf, int len) { - int i; + int i, datalen; + char str[128]; + char type, *s; for (i = 0 ; i < len ; i++) FTLog1Byte(fv, buf[i]); @@ -49,23 +54,102 @@ fv->FlushLogLineBuf = 1; FTLog1Byte(fv, 0); fv->FlushLogLineBuf = 0; + + /* \x83p\x83P\x83b\x83g\x82\xF0\x90l\x8A??\xAA\x82\xA9\x82\xE8\x82?\x82\xAD\x95\\x8E\xA6\x82\xB7\x82\xE9\x81B + Packet Format + +------+-------------+-------------+------+------------+-------+ + | MARK | tochar(LEN) | tochar(SEQ) | TYPE | DATA | CHECK | + +------+-------------+-------------+------+------------+-------+ + */ + if (len >= 4) { + type = buf[3]; + switch (type) { + case 'D': s = "Data"; break; + case 'Y': s = "ACK"; break; + case 'N': s = "NAK"; break; + case 'S': s = "SendInitiate"; break; + case 'B': s = "EOT"; break; + case 'F': s = "FileHeader"; break; + case 'Z': s = "EOF"; break; + case 'E': s = "Error"; break; + case 'Q': s = "BlockCheckErrorPsuedoPacket"; break; + case 'T': s = "TimeoutPsuedoPacket"; break; + case 'I': s = "Initialize"; break; + case 'X': s = "Text Header"; break; + case 'A': s = "FileAttributes"; break; + case 'C': s = "HostCommand"; break; + case 'K': s = "KermitCommand"; break; + case 'G': s = "GenericKermitCommand"; break; + default: s = "UNKNOWN"; break; + } + datalen = KmtNum(buf[1]) - 2 - kv->KmtMy.CHKT; + + _snprintf_s(str, sizeof(str), _TRUNCATE, "MARK=%x LEN=%d SEQ#=%d TYPE=%s DATA_LEN=%d\n", + buf[0], KmtNum(buf[1]), KmtNum(buf[2]), s, datalen); + _lwrite(fv->LogFile, str, strlen(str)); + + // Initial Connection + if (type == 'S' && datalen >= 6) { + char *p = &buf[4]; + char t[32]; + + _snprintf_s(str, sizeof(str), _TRUNCATE, + " Data: MAXL=%d TIME=%d NPAD=%d PADC=%x EOL=%x QCTL=%c ", + KmtNum(p[0]), KmtNum(p[1]), KmtNum(p[2]), p[3]^0x40, p[4], p[5] + ); + + // QBIN \x88?~\x82?I\x83v\x83V\x83\x87\x83\x93\x88\xB5\x82\xA2\x81B + if (datalen >= 7) { + _snprintf_s(t, sizeof(t), _TRUNCATE, "QBIN=%c ", p[6]); + strncat_s(str, sizeof(str), t, _TRUNCATE); + } + if (datalen >= 8) { + _snprintf_s(t, sizeof(t), _TRUNCATE, "CHKT=%c ", p[7]); + strncat_s(str, sizeof(str), t, _TRUNCATE); + } + if (datalen >= 9) { + _snprintf_s(t, sizeof(t), _TRUNCATE, "REPT=%c ", p[8]); + strncat_s(str, sizeof(str), t, _TRUNCATE); + } + if (datalen >= 10) { + _snprintf_s(t, sizeof(t), _TRUNCATE, "CAPAS=%x ", p[9]); + strncat_s(str, sizeof(str), t, _TRUNCATE); + } + if (datalen >= 11) { + _snprintf_s(t, sizeof(t), _TRUNCATE, "WINDO=%x ", p[10]); + strncat_s(str, sizeof(str), t, _TRUNCATE); + } + if (datalen >= 12) { + _snprintf_s(t, sizeof(t), _TRUNCATE, "MAXLX1=%x ", p[11]); + strncat_s(str, sizeof(str), t, _TRUNCATE); + } + if (datalen >= 13) { + _snprintf_s(t, sizeof(t), _TRUNCATE, "MAXLX2=%x ", p[12]); + strncat_s(str, sizeof(str), t, _TRUNCATE); + } + + _lwrite(fv->LogFile, str, strlen(str)); + _lwrite(fv->LogFile, "\015\012", 2); + + } + } } -static void KmtReadLog(PFileVar fv, BYTE *buf, int len) +static void KmtReadLog(PFileVar fv, PKmtVar kv, BYTE *buf, int len) { if (fv->LogFlag && (len>0)) { _lwrite(fv->LogFile,"\015\012<<<\015\012",7); - KmtOutputCommonLog(fv, buf, len); + KmtOutputCommonLog(fv, kv, buf, len); } } -static void KmtWriteLog(PFileVar fv, BYTE *buf, int len) +static void KmtWriteLog(PFileVar fv, PKmtVar kv, BYTE *buf, int len) { if (fv->LogFlag && (len>0)) { _lwrite(fv->LogFile,"\015\012>>>\015\012",7); - KmtOutputCommonLog(fv, buf, len); + KmtOutputCommonLog(fv, kv, buf, len); } } @@ -112,7 +196,7 @@ _lwrite(fv->LogFile,&(kv->PktOut[1]),C-1); _lwrite(fv->LogFile,"\015\012",2); #else - KmtWriteLog(fv, &(kv->PktOut[0]), C); + KmtWriteLog(fv, kv, &(kv->PktOut[0]), C+1); #endif } @@ -789,21 +873,21 @@ } else switch (kv->PktReadMode) { - case WaitLen: - kv->PktIn[1] = b; - kv->PktInLen = KmtNum(b); - kv->PktInCount = kv->PktInLen; - kv->PktInPtr = 2; - kv->PktReadMode = WaitCheck; - break; - case WaitCheck: - kv->PktIn[kv->PktInPtr] = b; - kv->PktInPtr++; - kv->PktInCount--; - GetPkt = (kv->PktInCount==0); - if (GetPkt) kv->PktReadMode = WaitMark; - break; - } + case WaitLen: + kv->PktIn[1] = b; + kv->PktInLen = KmtNum(b); + kv->PktInCount = kv->PktInLen; + kv->PktInPtr = 2; + kv->PktReadMode = WaitCheck; + break; + case WaitCheck: + kv->PktIn[kv->PktInPtr] = b; + kv->PktInPtr++; + kv->PktInCount--; + GetPkt = (kv->PktInCount==0); + if (GetPkt) kv->PktReadMode = WaitMark; + break; + } if (! GetPkt) c = CommRead1Byte(cv,&b); } @@ -817,7 +901,7 @@ _lwrite(fv->LogFile,&(kv->PktIn[1]),kv->PktInLen+1); _lwrite(fv->LogFile,"\015\012",2); #else - KmtReadLog(fv,&(kv->PktIn[0]),kv->PktInLen); + KmtReadLog(fv, kv, &(kv->PktIn[0]), kv->PktInLen+2); #endif } From svnnotify @ sourceforge.jp Sun Jan 22 18:44:59 2012 From: svnnotify @ sourceforge.jp (svnnotify @ sourceforge.jp) Date: Sun, 22 Jan 2012 18:44:59 +0900 Subject: [Ttssh2-commit] =?utf-8?b?WzQ4MDFdICDjgrXjg7Pjg5fjg6vjg57jgq8=?= =?utf-8?b?44Ot44KS6L+95Yqg44GX44Gf44CC?= Message-ID: <1327225499.801115.7774.nullmailer@users.sourceforge.jp> Revision: 4801 http://sourceforge.jp/projects/ttssh2/svn/view?view=rev&revision=4801 Author: yutakapon Date: 2012-01-22 18:44:59 +0900 (Sun, 22 Jan 2012) Log Message: ----------- サンプルマクロを追加した。 cf. http://www.j-oosk.com/teraterm/file-transfer/601/ Modified Paths: -------------- trunk/doc/en/html/macro/command/scpsend.html trunk/doc/ja/html/macro/command/scpsend.html -------------- next part -------------- Modified: trunk/doc/en/html/macro/command/scpsend.html =================================================================== --- trunk/doc/en/html/macro/command/scpsend.html 2012-01-21 14:15:29 UTC (rev 4800) +++ trunk/doc/en/html/macro/command/scpsend.html 2012-01-22 09:44:59 UTC (rev 4801) @@ -38,5 +38,26 @@ scpsend 'C:\usr\cvs\doc\en\teraterm.chm' 'tmp/foo.chm' +
    +; Confirm finishing a file sending.
    +SOURFILE = 'C:\usr\ttssh2\doc\en\teraterm.chm'
    +DESTFILE = '~'
    +
    +;; Send a file.
    +scpsend SOURFILE DESTFILE
    +;; Confirm a scp process.
    +do
    +  mpause 5000
    +  sprintf2 str 'ps -ef |grep -v grep |grep -c scp'
    +  sendln str
    +  waitln '0' '1'
    +loop while result != 1
    +;; Do next macro after finishing the file sending.
    +sendln 'echo SCP finish'
    +;; Exit this macro script.
    +end
    +
    + + Modified: trunk/doc/ja/html/macro/command/scpsend.html =================================================================== --- trunk/doc/ja/html/macro/command/scpsend.html 2012-01-21 14:15:29 UTC (rev 4800) +++ trunk/doc/ja/html/macro/command/scpsend.html 2012-01-22 09:44:59 UTC (rev 4801) @@ -38,5 +38,26 @@ scpsend 'C:\usr\cvs\doc\en\teraterm.chm' 'tmp/foo.chm' +
    +; \x83t\x83@\x83C\x83\x8B\x91\x97\x90M\x8A\xAE\x97\xB9\x82\xF0\x8Am\x94F\x82\xB7\x82\xE9
    +SOURFILE = 'C:\usr\ttssh2\doc\en\teraterm.chm'
    +DESTFILE = '~'
    +
    +;; \x83t\x83@\x83C\x83\x8B\x91\x97\x90M
    +scpsend SOURFILE DESTFILE
    +;; \x83t\x83@\x83C\x83\x8B\x91\x97\x90M\x83v\x83\x8D\x83Z\x83X\x8Am\x94F
    +do
    +  mpause 5000
    +  sprintf2 str 'ps -ef |grep -v grep |grep -c scp'
    +  sendln str
    +  waitln '0' '1'
    +loop while result != 1
    +;; \x83t\x83@\x83C\x83\x8B\x91\x97\x90M\x82\xAA\x8A\xAE\x97\xB9\x82\xB7\x82\xE9\x82?\x9F\x82?}\x83N\x83\x8D\x82\xF0\x8E\xC0\x8Ds
    +sendln 'echo SCP finish'
    +;; \x83}\x83N\x83\x8D\x8FI\x97\xB9
    +end
    +
    + + From svnnotify @ sourceforge.jp Sun Jan 22 19:49:21 2012 From: svnnotify @ sourceforge.jp (svnnotify @ sourceforge.jp) Date: Sun, 22 Jan 2012 19:49:21 +0900 Subject: [Ttssh2-commit] =?utf-8?b?WzQ4MDJdICBLZXJtaXTjga7jg5HjgrHjg4M=?= =?utf-8?b?44OI5pyA5aSn6ZW344KSOTDjgYvjgok5NOOBq+WkieabtA==?= Message-ID: <1327229361.551214.3599.nullmailer@users.sourceforge.jp> Revision: 4802 http://sourceforge.jp/projects/ttssh2/svn/view?view=rev&revision=4802 Author: maya Date: 2012-01-22 19:49:21 +0900 (Sun, 22 Jan 2012) Log Message: ----------- Kermitのパケット最大長を90から94に変更 http://www.freeml.com/teraterm/1126/latest Modified Paths: -------------- trunk/teraterm/ttpfile/kermit.c -------------- next part -------------- Modified: trunk/teraterm/ttpfile/kermit.c =================================================================== --- trunk/teraterm/ttpfile/kermit.c 2012-01-22 09:44:59 UTC (rev 4801) +++ trunk/teraterm/ttpfile/kermit.c 2012-01-22 10:49:21 UTC (rev 4802) @@ -25,8 +25,8 @@ #define MaxNum 94 #define MinMAXL 10 -#define MaxMAXL 94 -#define DefMAXL 90 +#define MaxMAXL 94 +#define DefMAXL 94 #define MinTIME 1 #define DefTIME 10 #define DefNPAD 0 From svnnotify @ sourceforge.jp Sun Jan 22 20:07:58 2012 From: svnnotify @ sourceforge.jp (svnnotify @ sourceforge.jp) Date: Sun, 22 Jan 2012 20:07:58 +0900 Subject: [Ttssh2-commit] =?utf-8?b?WzQ4MDNdICBLZXJtaXTpgIHkv6Hjg63jgrA=?= =?utf-8?b?44KSMeODkOOCpOODiOWkmuOBj+iomOmMsuOBmeOCi+WVj+mhjOOCkuS/rg==?= =?utf-8?b?5q2j?= Message-ID: <1327230478.932194.27845.nullmailer@users.sourceforge.jp> Revision: 4803 http://sourceforge.jp/projects/ttssh2/svn/view?view=rev&revision=4803 Author: maya Date: 2012-01-22 20:07:58 +0900 (Sun, 22 Jan 2012) Log Message: ----------- Kermit送信ログを1バイト多く記録する問題を修正 送信自体は正しく動作している模様 Modified Paths: -------------- trunk/teraterm/ttpfile/kermit.c -------------- next part -------------- Modified: trunk/teraterm/ttpfile/kermit.c =================================================================== --- trunk/teraterm/ttpfile/kermit.c 2012-01-22 10:49:21 UTC (rev 4802) +++ trunk/teraterm/ttpfile/kermit.c 2012-01-22 11:07:58 UTC (rev 4803) @@ -60,7 +60,7 @@ +------+-------------+-------------+------+------------+-------+ | MARK | tochar(LEN) | tochar(SEQ) | TYPE | DATA | CHECK | +------+-------------+-------------+------+------------+-------+ - */ + */ if (len >= 4) { type = buf[3]; switch (type) { @@ -196,7 +196,7 @@ _lwrite(fv->LogFile,&(kv->PktOut[1]),C-1); _lwrite(fv->LogFile,"\015\012",2); #else - KmtWriteLog(fv, kv, &(kv->PktOut[0]), C+1); + KmtWriteLog(fv, kv, &(kv->PktOut[0]), C); #endif } From svnnotify @ sourceforge.jp Tue Jan 24 22:48:25 2012 From: svnnotify @ sourceforge.jp (svnnotify @ sourceforge.jp) Date: Tue, 24 Jan 2012 22:48:25 +0900 Subject: [Ttssh2-commit] =?utf-8?b?WzQ4MDRdICDlpInmm7TlsaXmrbQ=?= Message-ID: <1327412905.681037.20045.nullmailer@users.sourceforge.jp> Revision: 4804 http://sourceforge.jp/projects/ttssh2/svn/view?view=rev&revision=4804 Author: maya Date: 2012-01-24 22:48:25 +0900 (Tue, 24 Jan 2012) Log Message: ----------- 変更履歴 r4802 Revision Links: -------------- http://sourceforge.jp/projects/ttssh2/svn/view?view=rev&revision=4802 Modified Paths: -------------- trunk/doc/en/html/about/history.html trunk/doc/ja/html/about/history.html -------------- next part -------------- Modified: trunk/doc/en/html/about/history.html =================================================================== --- trunk/doc/en/html/about/history.html 2012-01-22 11:07:58 UTC (rev 4803) +++ trunk/doc/en/html/about/history.html 2012-01-24 13:48:25 UTC (rev 4804) @@ -50,6 +50,7 @@
    • added the LogLockExclusive entry in the teraterm.ini file. The default value is on.
    +
  • Improved the KERMIT.LOG more easily.
  • Modified: trunk/doc/ja/html/about/history.html =================================================================== --- trunk/doc/ja/html/about/history.html 2012-01-22 11:07:58 UTC (rev 4803) +++ trunk/doc/ja/html/about/history.html 2012-01-24 13:48:25 UTC (rev 4804) @@ -50,6 +50,7 @@
    • teraterm.ini \x82\xC9 LogLockExclusive \x83G\x83\x93\x83g\x83\x8A\x82\xF0\x92?\xC1\x82\xB5\x82\xBD\x81B\x83f\x83t\x83H\x83\x8B\x83g\x82\xCD on\x81B
    +
  • Kermit \x82?ő\xE5\x83p\x83P\x83b\x83g\x92\xB7\x82\xF0 90 \x82\xA9\x82\xE7 94 \x82?ύX\x82\xB5\x82\xBD\x81B
  • KERMIT.LOG \x82\xF0\x93???\x82\xAD\x89\xFC\x91P\x82\xB5\x82\xBD\x81B
  • From svnnotify @ sourceforge.jp Thu Jan 26 00:45:37 2012 From: svnnotify @ sourceforge.jp (svnnotify @ sourceforge.jp) Date: Thu, 26 Jan 2012 00:45:37 +0900 Subject: [Ttssh2-commit] =?utf-8?b?WzQ4MDVdICDoi7HoqLM=?= Message-ID: <1327506337.416099.24944.nullmailer@users.sourceforge.jp> Revision: 4805 http://sourceforge.jp/projects/ttssh2/svn/view?view=rev&revision=4805 Author: yutakapon Date: 2012-01-26 00:45:37 +0900 (Thu, 26 Jan 2012) Log Message: ----------- 英訳 Modified Paths: -------------- trunk/doc/en/html/about/history.html trunk/doc/ja/html/about/history.html -------------- next part -------------- Modified: trunk/doc/en/html/about/history.html =================================================================== --- trunk/doc/en/html/about/history.html 2012-01-24 13:48:25 UTC (rev 4804) +++ trunk/doc/en/html/about/history.html 2012-01-25 15:45:37 UTC (rev 4805) @@ -50,8 +50,8 @@
    • added the LogLockExclusive entry in the teraterm.ini file. The default value is on.
    - -
  • Improved the KERMIT.LOG more easily.
  • +
  • Kermit: Changed the MAXL from 90 to 94. Workaround for failing to communicate against NT-4S(Hitachi VoIP gateway).
  • +
  • Kermit: Improved the KERMIT.LOG more easily.
  • Modified: trunk/doc/ja/html/about/history.html =================================================================== --- trunk/doc/ja/html/about/history.html 2012-01-24 13:48:25 UTC (rev 4804) +++ trunk/doc/ja/html/about/history.html 2012-01-25 15:45:37 UTC (rev 4805) @@ -50,8 +50,8 @@
    • teraterm.ini \x82\xC9 LogLockExclusive \x83G\x83\x93\x83g\x83\x8A\x82\xF0\x92?\xC1\x82\xB5\x82\xBD\x81B\x83f\x83t\x83H\x83\x8B\x83g\x82\xCD on\x81B
    -
  • Kermit \x82?ő\xE5\x83p\x83P\x83b\x83g\x92\xB7\x82\xF0 90 \x82\xA9\x82\xE7 94 \x82?ύX\x82\xB5\x82\xBD\x81B
  • -
  • KERMIT.LOG \x82\xF0\x93???\x82\xAD\x89\xFC\x91P\x82\xB5\x82\xBD\x81B
  • +
  • Kermit: \x8Dő\xE5\x83p\x83P\x83b\x83g\x92\xB7(MAXL)\x82\xF0 90 \x82\xA9\x82\xE7 94 \x82?ύX\x82\xB5\x82\xBD\x81BNT-4S(\x93\x{25E743B}VoIP\x83Q\x81[\x83g\x83E\x83F\x83C)\x82??\xB5\x82Ē?M\x82\xAA\x82ł\xAB\x82?\xA2\x96\xE2\x91\xE8\x82??Ώ\x88\x81B
  • +
  • Kermit: KERMIT.LOG \x82\xF0\x93???\x82\xAD\x89\xFC\x91P\x82\xB5\x82\xBD\x81B
  • From svnnotify @ sourceforge.jp Thu Jan 26 20:39:13 2012 From: svnnotify @ sourceforge.jp (svnnotify @ sourceforge.jp) Date: Thu, 26 Jan 2012 20:39:13 +0900 Subject: [Ttssh2-commit] =?utf-8?b?WzQ4MDZdICDlpInmm7TlsaXmrbTmm7TmlrAg?= =?utf-8?b?KCByNDc3MywgcjQ3Nzcp?= Message-ID: <1327577953.592955.4675.nullmailer@users.sourceforge.jp> Revision: 4806 http://sourceforge.jp/projects/ttssh2/svn/view?view=rev&revision=4806 Author: doda Date: 2012-01-26 20:39:13 +0900 (Thu, 26 Jan 2012) Log Message: ----------- 変更履歴更新 (r4773, r4777) Revision Links: -------------- http://sourceforge.jp/projects/ttssh2/svn/view?view=rev&revision=4773 http://sourceforge.jp/projects/ttssh2/svn/view?view=rev&revision=4777 Modified Paths: -------------- trunk/doc/en/html/about/history.html trunk/doc/ja/html/about/history.html -------------- next part -------------- Modified: trunk/doc/en/html/about/history.html =================================================================== --- trunk/doc/en/html/about/history.html 2012-01-25 15:45:37 UTC (rev 4805) +++ trunk/doc/en/html/about/history.html 2012-01-26 11:39:13 UTC (rev 4806) @@ -50,6 +50,8 @@
    • added the LogLockExclusive entry in the teraterm.ini file. The default value is on.
    + +
  • Kermit: Changed the MAXL from 90 to 94. Workaround for failing to communicate against NT-4S(Hitachi VoIP gateway).
  • Kermit: Improved the KERMIT.LOG more easily.
  • Modified: trunk/doc/ja/html/about/history.html =================================================================== --- trunk/doc/ja/html/about/history.html 2012-01-25 15:45:37 UTC (rev 4805) +++ trunk/doc/ja/html/about/history.html 2012-01-26 11:39:13 UTC (rev 4806) @@ -50,6 +50,8 @@
    • teraterm.ini \x82\xC9 LogLockExclusive \x83G\x83\x93\x83g\x83\x8A\x82\xF0\x92?\xC1\x82\xB5\x82\xBD\x81B\x83f\x83t\x83H\x83\x8B\x83g\x82\xCD on\x81B
    +
  • \x83t\x83@\x83C\x83\x8B\x93]\x91\x97\x82?\xF3\x90M\x83t\x83@\x83C\x83\x8B\x96\xBC\x82\xAA\x8B?\x9A\x97?\xC1\x82\xBD\x8E\x9E\x81A\x83t\x83@\x83C\x83\x8B\x96\xBC\x82\xF0 noname \x82?\xB7\x82\xE9\x82悤\x82?\xB5\x82\xBD\x81B
  • +
  • \x83t\x83@\x83C\x83\x8B\x93]\x91\x97\x82?\xF3\x90M\x83t\x83@\x83C\x83\x8B\x96\xBC\x82?g\x82\xA6\x82?\xA2\x95\xB6\x8E\x9A\x82\xAA\x8A??\xEA\x82Ă\xA2\x82\xBD\x8E\x9E\x81A\x82\xBB\x82?\xB6\x8E\x9A\x82\xF0 _ \x82?u\x82\xAB\x8A\xB7\x82\xA6\x82\xE9\x82悤\x82?\xB5\x82\xBD\x81B
  • Kermit: \x8Dő\xE5\x83p\x83P\x83b\x83g\x92\xB7(MAXL)\x82\xF0 90 \x82\xA9\x82\xE7 94 \x82?ύX\x82\xB5\x82\xBD\x81BNT-4S(\x93\x{25E743B}VoIP\x83Q\x81[\x83g\x83E\x83F\x83C)\x82??\xB5\x82Ē?M\x82\xAA\x82ł\xAB\x82?\xA2\x96\xE2\x91\xE8\x82??Ώ\x88\x81B
  • Kermit: KERMIT.LOG \x82\xF0\x93???\x82\xAD\x89\xFC\x91P\x82\xB5\x82\xBD\x81B
  • From svnnotify @ sourceforge.jp Thu Jan 26 21:06:45 2012 From: svnnotify @ sourceforge.jp (svnnotify @ sourceforge.jp) Date: Thu, 26 Jan 2012 21:06:45 +0900 Subject: [Ttssh2-commit] =?utf-8?b?WzQ4MDddICDjg57jgq/jg63jgrPjg57jg7M=?= =?utf-8?b?44OJIGxvZ2luZm8g44KS6L+95Yqg?= Message-ID: <1327579605.483986.10347.nullmailer@users.sourceforge.jp> Revision: 4807 http://sourceforge.jp/projects/ttssh2/svn/view?view=rev&revision=4807 Author: doda Date: 2012-01-26 21:06:45 +0900 (Thu, 26 Jan 2012) Log Message: ----------- マクロコマンド loginfo を追加 Modified Paths: -------------- trunk/doc/en/html/about/history.html trunk/doc/en/html/macro/command/index.html trunk/doc/en/teraterm.hhc trunk/doc/en/teraterm.hhp trunk/doc/ja/html/about/history.html trunk/doc/ja/html/macro/command/index.html trunk/doc/ja/teraterm.hhc trunk/doc/ja/teraterm.hhp trunk/teraterm/common/helpid.h trunk/teraterm/teraterm/ttdde.c trunk/teraterm/ttpmacro/ttl.c trunk/teraterm/ttpmacro/ttmdde.h trunk/teraterm/ttpmacro/ttmparse.c trunk/teraterm/ttpmacro/ttmparse.h Added Paths: ----------- trunk/doc/en/html/macro/command/loginfo.html trunk/doc/ja/html/macro/command/loginfo.html -------------- next part -------------- Modified: trunk/doc/en/html/about/history.html =================================================================== --- trunk/doc/en/html/about/history.html 2012-01-26 11:39:13 UTC (rev 4806) +++ trunk/doc/en/html/about/history.html 2012-01-26 12:06:45 UTC (rev 4807) @@ -54,6 +54,7 @@
  • Kermit: Changed the MAXL from 90 to 94. Workaround for failing to communicate against NT-4S(Hitachi VoIP gateway).
  • Kermit: Improved the KERMIT.LOG more easily.
  • +
  • added the "loginfo" macro command.
  • Modified: trunk/doc/en/html/macro/command/index.html =================================================================== --- trunk/doc/en/html/macro/command/index.html 2012-01-26 11:39:13 UTC (rev 4806) +++ trunk/doc/en/html/macro/command/index.html 2012-01-26 12:06:45 UTC (rev 4807) @@ -39,6 +39,7 @@
  • kmtsend
  • loadkeymap
  • logclose +
  • loginfo (version 4.73 or later)
  • logopen
  • logpause
  • logstart Added: trunk/doc/en/html/macro/command/loginfo.html =================================================================== --- trunk/doc/en/html/macro/command/loginfo.html (rev 0) +++ trunk/doc/en/html/macro/command/loginfo.html 2012-01-26 12:06:45 UTC (rev 4807) @@ -0,0 +1,85 @@ + + + + + logopen + + + + + + + +

    loginfo

    + +

    +Tera Term \x82?\x8D\x83O\x8E擾\x8F\xF3\x91??\xE9 +

    + +
    +loginfo <strvar>
    +
    + +

    Remarks

    + +

    +\x83\x8D\x83O\x82\xF0\x8E擾\x82\xB5\x82Ă\xA2\x82\xE9\x8F?\x81Astrvar \x82?\x8D\x83O\x83t\x83@\x83C\x83\x8B\x96\xBC\x82\xAA\x8Ai\x94[\x82\xB3\x82\xEA\x81A\x83\x8D\x83O\x8E擾\x8E\x9E\x82?t\x83\x89\x83O\x82?\xF3\x91?\xAA result \x82?i\x94[\x82\xB3\x82\xEA\x82\xE9\x81B
    +\x83\x8D\x83O\x82\xF0\x8E擾\x82\xB5\x82Ă\xA2\x82?\xA2\x8F?\x82\xCD result \x82\xC9 -1 \x82\xAA\x8Ai\x94[\x82\xB3\x82\xEA\x82\xE9\x81B +

    +

    +\x83\x8D\x83O\x8E擾\x8E\x9E\x82\xC9 result \x82?i\x94[\x82\xB3\x82\xEA\x82\xE9\x92l\x82?A\x88?\xBA\x82?\xE0 on \x82??\xC1\x82Ă\xA2\x82\xE9\x83t\x83\x89\x83O\x82?Ή\x9E\x82\xB7\x82\xE9\x92l\x82?\x87\x8Cv\x82??\xE9\x81B +

    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    \x92l\x88?\xA1
    1\x83o\x83C\x83i\x83\x8A\x83t\x83\x89\x83O
    2\x83A\x83y\x83\x93\x83h\x83t\x83\x89\x83O
    4\x83v\x83\x8C\x83C\x83\x93\x83e\x83L\x83X\x83g\x83t\x83\x89\x83O
    8\x83^\x83C\x83\x80\x83X\x83^\x83\x93\x83v\x83t\x83\x89\x83O
    16\x83_\x83C\x83A\x83\x8D\x83O\x94\xF1\x95\\x8E\xA6\x83t\x83\x89\x83O
    + + +

    Example

    + +
    +loginfo logfile
    +
    +if result == -1 then
    +	; \x83\x8D\x83O\x82\xF0\x8E擾\x82\xB5\x82Ă\xA2\x82?\xA2\x82?ŁA\x90V\x82\xBD\x82?\x8D\x83O\x8E擾\x82\xF0\x8AJ\x8En\x82\xB7\x82\xE9
    +	logopen "test.log" 0 0 0 1
    +
    +elseif result & 8 == 0 then
    +	flags = result
    +	; \x83^\x83C\x83\x80\x83X\x83^\x83\x93\x83v\x82\xAA\x96\xB3\x8C\xF8\x82??ŁA\x83^\x83C\x83\x80\x83X\x83^\x83\x93\x83v\x82\xF0\x97L\x8C\xF8\x82?\xB5\x82ĊJ\x82\xAB\x82?\xA8\x82\xB7\x81B
    +	logclose
    +	logopen logfile 0 1 flags&4 1 flags&16
    +endif
    +
    + + +

    Reference

    + +logwrite
    + + + Modified: trunk/doc/en/teraterm.hhc =================================================================== --- trunk/doc/en/teraterm.hhc 2012-01-26 11:39:13 UTC (rev 4806) +++ trunk/doc/en/teraterm.hhc 2012-01-26 12:06:45 UTC (rev 4807) @@ -717,6 +717,11 @@
  • + + + + +
  • Modified: trunk/doc/en/teraterm.hhp =================================================================== --- trunk/doc/en/teraterm.hhp 2012-01-26 11:39:13 UTC (rev 4806) +++ trunk/doc/en/teraterm.hhp 2012-01-26 12:06:45 UTC (rev 4807) @@ -231,6 +231,7 @@ HlpMacroCommandKmtsend=html\macro\command\kmtsend.html HlpMacroCommandLoadkeymap=html\macro\command\loadkeymap.html HlpMacroCommandLogclose=html\macro\command\logclose.html +HlpMacroCommandLoginfo=html\macro\command\loginfo.html HlpMacroCommandLogopen=html\macro\command\logopen.html HlpMacroCommandLogpause=html\macro\command\logpause.html HlpMacroCommandLogstart=html\macro\command\logstart.html Modified: trunk/doc/ja/html/about/history.html =================================================================== --- trunk/doc/ja/html/about/history.html 2012-01-26 11:39:13 UTC (rev 4806) +++ trunk/doc/ja/html/about/history.html 2012-01-26 12:06:45 UTC (rev 4807) @@ -54,6 +54,7 @@
  • \x83t\x83@\x83C\x83\x8B\x93]\x91\x97\x82?\xF3\x90M\x83t\x83@\x83C\x83\x8B\x96\xBC\x82?g\x82\xA6\x82?\xA2\x95\xB6\x8E\x9A\x82\xAA\x8A??\xEA\x82Ă\xA2\x82\xBD\x8E\x9E\x81A\x82\xBB\x82?\xB6\x8E\x9A\x82\xF0 _ \x82?u\x82\xAB\x8A\xB7\x82\xA6\x82\xE9\x82悤\x82?\xB5\x82\xBD\x81B
  • Kermit: \x8Dő\xE5\x83p\x83P\x83b\x83g\x92\xB7(MAXL)\x82\xF0 90 \x82\xA9\x82\xE7 94 \x82?ύX\x82\xB5\x82\xBD\x81BNT-4S(\x93\x{25E743B}VoIP\x83Q\x81[\x83g\x83E\x83F\x83C)\x82??\xB5\x82Ē?M\x82\xAA\x82ł\xAB\x82?\xA2\x96\xE2\x91\xE8\x82??Ώ\x88\x81B
  • Kermit: KERMIT.LOG \x82\xF0\x93???\x82\xAD\x89\xFC\x91P\x82\xB5\x82\xBD\x81B
  • +
  • \x83}\x83N\x83\x8D\x83R\x83}\x83\x93\x83h "loginfo" \x82\xF0\x92?\xC1\x82\xB5\x82\xBD\x81B
  • Modified: trunk/doc/ja/html/macro/command/index.html =================================================================== --- trunk/doc/ja/html/macro/command/index.html 2012-01-26 11:39:13 UTC (rev 4806) +++ trunk/doc/ja/html/macro/command/index.html 2012-01-26 12:06:45 UTC (rev 4807) @@ -39,6 +39,7 @@
  • kmtsend
  • loadkeymap
  • logclose +
  • loginfo (\x83o\x81[\x83W\x83\x87\x83\x93 4.73\x88?~)
  • logopen
  • logpause
  • logstart Added: trunk/doc/ja/html/macro/command/loginfo.html =================================================================== --- trunk/doc/ja/html/macro/command/loginfo.html (rev 0) +++ trunk/doc/ja/html/macro/command/loginfo.html 2012-01-26 12:06:45 UTC (rev 4807) @@ -0,0 +1,85 @@ + + + + + logopen + + + + + + + +

    loginfo

    + +

    +Tera Term \x82?\x8D\x83O\x8E擾\x8F\xF3\x91??\xE9 +

    + +
    +loginfo <strvar>
    +
    + +

    \x89\xF0\x90\xE0

    + +

    +\x83\x8D\x83O\x82\xF0\x8E擾\x82\xB5\x82Ă\xA2\x82\xE9\x8F?\x81Astrvar \x82?\x8D\x83O\x83t\x83@\x83C\x83\x8B\x96\xBC\x82\xAA\x8Ai\x94[\x82\xB3\x82\xEA\x81A\x83\x8D\x83O\x8E擾\x8E\x9E\x82?t\x83\x89\x83O\x82?\xF3\x91?\xAA result \x82?i\x94[\x82\xB3\x82\xEA\x82\xE9\x81B
    +\x83\x8D\x83O\x82\xF0\x8E擾\x82\xB5\x82Ă\xA2\x82?\xA2\x8F?\x82\xCD result \x82\xC9 -1 \x82\xAA\x8Ai\x94[\x82\xB3\x82\xEA\x82\xE9\x81B +

    +

    +\x83\x8D\x83O\x8E擾\x8E\x9E\x82\xC9 result \x82?i\x94[\x82\xB3\x82\xEA\x82\xE9\x92l\x82?A\x88?\xBA\x82?\xE0 on \x82??\xC1\x82Ă\xA2\x82\xE9\x83t\x83\x89\x83O\x82?Ή\x9E\x82\xB7\x82\xE9\x92l\x82?\x87\x8Cv\x82??\xE9\x81B +

    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    \x92l\x88?\xA1
    1\x83o\x83C\x83i\x83\x8A\x83t\x83\x89\x83O
    2\x83A\x83y\x83\x93\x83h\x83t\x83\x89\x83O
    4\x83v\x83\x8C\x83C\x83\x93\x83e\x83L\x83X\x83g\x83t\x83\x89\x83O
    8\x83^\x83C\x83\x80\x83X\x83^\x83\x93\x83v\x83t\x83\x89\x83O
    16\x83_\x83C\x83A\x83\x8D\x83O\x94\xF1\x95\\x8E\xA6\x83t\x83\x89\x83O
    + + +

    \x97\xE1

    + +
    +loginfo logfile
    +
    +if result == -1 then
    +	; \x83\x8D\x83O\x82\xF0\x8E擾\x82\xB5\x82Ă\xA2\x82?\xA2\x82?ŁA\x90V\x82\xBD\x82?\x8D\x83O\x8E擾\x82\xF0\x8AJ\x8En\x82\xB7\x82\xE9
    +	logopen "test.log" 0 0 0 1
    +
    +elseif result & 8 == 0 then
    +	flags = result
    +	; \x83^\x83C\x83\x80\x83X\x83^\x83\x93\x83v\x82\xAA\x96\xB3\x8C\xF8\x82??ŁA\x83^\x83C\x83\x80\x83X\x83^\x83\x93\x83v\x82\xF0\x97L\x8C\xF8\x82?\xB5\x82ĊJ\x82\xAB\x82?\xA8\x82\xB7\x81B
    +	logclose
    +	logopen logfile 0 1 flags&4 1 flags&16
    +endif
    +
    + + +

    \x8EQ\x8F\xC6

    + +logwrite
    + + + Modified: trunk/doc/ja/teraterm.hhc =================================================================== --- trunk/doc/ja/teraterm.hhc 2012-01-26 11:39:13 UTC (rev 4806) +++ trunk/doc/ja/teraterm.hhc 2012-01-26 12:06:45 UTC (rev 4807) @@ -730,6 +730,11 @@
  • + + + + +
  • Modified: trunk/doc/ja/teraterm.hhp =================================================================== --- trunk/doc/ja/teraterm.hhp 2012-01-26 11:39:13 UTC (rev 4806) +++ trunk/doc/ja/teraterm.hhp 2012-01-26 12:06:45 UTC (rev 4807) @@ -241,6 +241,7 @@ HlpMacroCommandKmtsend=html\macro\command\kmtsend.html HlpMacroCommandLoadkeymap=html\macro\command\loadkeymap.html HlpMacroCommandLogclose=html\macro\command\logclose.html +HlpMacroCommandLoginfo=html\macro\command\loginfo.html HlpMacroCommandLogopen=html\macro\command\logopen.html HlpMacroCommandLogpause=html\macro\command\logpause.html HlpMacroCommandLogstart=html\macro\command\logstart.html Modified: trunk/teraterm/common/helpid.h =================================================================== --- trunk/teraterm/common/helpid.h 2012-01-26 11:39:13 UTC (rev 4806) +++ trunk/teraterm/common/helpid.h 2012-01-26 12:06:45 UTC (rev 4807) @@ -239,6 +239,7 @@ #define HlpMacroCommandKmtsend 92057 #define HlpMacroCommandLoadkeymap 92058 #define HlpMacroCommandLogclose 92059 +#define HlpMacroCommandLoginfo 92152 #define HlpMacroCommandLogopen 92060 #define HlpMacroCommandLogpause 92061 #define HlpMacroCommandLogstart 92062 Modified: trunk/teraterm/teraterm/ttdde.c =================================================================== --- trunk/teraterm/teraterm/ttdde.c 2012-01-26 11:39:13 UTC (rev 4806) +++ trunk/teraterm/teraterm/ttdde.c 2012-01-26 12:06:45 UTC (rev 4807) @@ -334,6 +334,7 @@ #define CmdYmodemSend 'S' #define CmdYmodemRecv 'T' #define CmdDispStr 'U' +#define CmdLogInfo 'V' HDDEDATA AcceptExecute(HSZ TopicHSz, HDDEDATA Data) { @@ -890,6 +891,22 @@ CBStartEcho(ParamFileName, sizeof(ParamFileName)); break; + case CmdLogInfo: + if (LogVar) { + ParamFileName[0] = '0' + + (ts.LogBinary != 0) + + ((ts.Append != 0) << 1) + + ((ts.LogTypePlainText != 0) << 2) + + ((ts.LogTimestamp != 0) << 3) + + ((ts.LogHideDialog != 0) << 4); + strncpy_s(ParamFileName+1, sizeof(ParamFileName)-1, LogVar->FullName, _TRUNCATE); + } + else { + ParamFileName[0] = '0' - 1; + ParamFileName[1] = 0; + } + break; + default: return DDE_FNOTPROCESSED; } Modified: trunk/teraterm/ttpmacro/ttl.c =================================================================== --- trunk/teraterm/ttpmacro/ttl.c 2012-01-26 11:39:13 UTC (rev 4806) +++ trunk/teraterm/ttpmacro/ttl.c 2012-01-26 12:06:45 UTC (rev 4807) @@ -2489,6 +2489,28 @@ return Err; } +WORD TTLLogInfo() +{ + WORD Err; + TVarId VarId; + char Str[MaxStrLen]; + + Err = 0; + GetStrVar(&VarId, &Err); + if ((Err==0) && (GetFirstChar()!=0)) + Err = ErrSyntax; + if ((Err==0) && (! Linked)) + Err = ErrLinkFirst; + if (Err!=0) return Err; + + Err = GetTTParam(CmdLogInfo, Str, sizeof(Str)); + if (Err==0) { + SetResult(Str[0] - '0'); + SetStrVal(VarId, Str+1); + } + return Err; +} + WORD TTLLogOpen() { TStrVal Str; @@ -4950,6 +4972,8 @@ Err = TTLCommCmdFile(CmdLoadKeyMap,0); break; case RsvLogClose: Err = TTLCommCmd(CmdLogClose,0); break; + case RsvLogInfo: + Err = TTLLogInfo(); break; case RsvLogOpen: Err = TTLLogOpen(); break; case RsvLogPause: Modified: trunk/teraterm/ttpmacro/ttmdde.h =================================================================== --- trunk/teraterm/ttpmacro/ttmdde.h 2012-01-26 11:39:13 UTC (rev 4806) +++ trunk/teraterm/ttpmacro/ttmdde.h 2012-01-26 12:06:45 UTC (rev 4807) @@ -59,6 +59,7 @@ #define CmdYmodemSend 'S' #define CmdYmodemRecv 'T' #define CmdDispStr 'U' +#define CmdLogInfo 'V' #ifdef __cplusplus extern "C" { Modified: trunk/teraterm/ttpmacro/ttmparse.c =================================================================== --- trunk/teraterm/ttpmacro/ttmparse.c 2012-01-26 11:39:13 UTC (rev 4806) +++ trunk/teraterm/ttpmacro/ttmparse.c 2012-01-26 12:06:45 UTC (rev 4807) @@ -247,6 +247,7 @@ case 'l': if (_stricmp(Str,"loadkeymap")==0) *WordId = RsvLoadKeyMap; else if (_stricmp(Str,"logclose")==0) *WordId = RsvLogClose; + else if (_stricmp(Str,"loginfo")==0) *WordId = RsvLogInfo; else if (_stricmp(Str,"logopen")==0) *WordId = RsvLogOpen; else if (_stricmp(Str,"logpause")==0) *WordId = RsvLogPause; else if (_stricmp(Str,"logstart")==0) *WordId = RsvLogStart; Modified: trunk/teraterm/ttpmacro/ttmparse.h =================================================================== --- trunk/teraterm/ttpmacro/ttmparse.h 2012-01-26 11:39:13 UTC (rev 4806) +++ trunk/teraterm/ttpmacro/ttmparse.h 2012-01-26 12:06:45 UTC (rev 4807) @@ -197,6 +197,7 @@ #define RsvDispStr 149 #define RsvIntDim 150 #define RsvStrDim 151 +#define RsvLogInfo 152 #define RsvSetDebug 175 #define RsvYmodemRecv 176 #define RsvYmodemSend 177 From svnnotify @ sourceforge.jp Thu Jan 26 21:11:13 2012 From: svnnotify @ sourceforge.jp (svnnotify @ sourceforge.jp) Date: Thu, 26 Jan 2012 21:11:13 +0900 Subject: [Ttssh2-commit] [4808] typo fix. Message-ID: <1327579873.742377.15377.nullmailer@users.sourceforge.jp> Revision: 4808 http://sourceforge.jp/projects/ttssh2/svn/view?view=rev&revision=4808 Author: doda Date: 2012-01-26 21:11:13 +0900 (Thu, 26 Jan 2012) Log Message: ----------- typo fix. Modified Paths: -------------- trunk/doc/en/html/macro/command/loginfo.html trunk/doc/ja/html/macro/command/loginfo.html -------------- next part -------------- Modified: trunk/doc/en/html/macro/command/loginfo.html =================================================================== --- trunk/doc/en/html/macro/command/loginfo.html 2012-01-26 12:06:45 UTC (rev 4807) +++ trunk/doc/en/html/macro/command/loginfo.html 2012-01-26 12:11:13 UTC (rev 4808) @@ -79,7 +79,7 @@

    Reference

    -logwrite
    +logopen
    Modified: trunk/doc/ja/html/macro/command/loginfo.html =================================================================== --- trunk/doc/ja/html/macro/command/loginfo.html 2012-01-26 12:06:45 UTC (rev 4807) +++ trunk/doc/ja/html/macro/command/loginfo.html 2012-01-26 12:11:13 UTC (rev 4808) @@ -79,7 +79,7 @@

    \x8EQ\x8F\xC6

    -logwrite
    +logopen
    From svnnotify @ sourceforge.jp Thu Jan 26 21:28:44 2012 From: svnnotify @ sourceforge.jp (svnnotify @ sourceforge.jp) Date: Thu, 26 Jan 2012 21:28:44 +0900 Subject: [Ttssh2-commit] =?utf-8?q?=5B4809=5D_HTML_4=2E_01_Strict_?= =?utf-8?b?44Gr?= Message-ID: <1327580924.850511.7253.nullmailer@users.sourceforge.jp> Revision: 4809 http://sourceforge.jp/projects/ttssh2/svn/view?view=rev&revision=4809 Author: doda Date: 2012-01-26 21:28:44 +0900 (Thu, 26 Jan 2012) Log Message: ----------- HTML 4.01 Strict に Modified Paths: -------------- trunk/doc/en/html/macro/command/loginfo.html trunk/doc/ja/html/macro/command/loginfo.html -------------- next part -------------- Modified: trunk/doc/en/html/macro/command/loginfo.html =================================================================== --- trunk/doc/en/html/macro/command/loginfo.html 2012-01-26 12:11:13 UTC (rev 4808) +++ trunk/doc/en/html/macro/command/loginfo.html 2012-01-26 12:28:44 UTC (rev 4809) @@ -79,7 +79,9 @@

    Reference

    -logopen
    +

    +logopen +

    Modified: trunk/doc/ja/html/macro/command/loginfo.html =================================================================== --- trunk/doc/ja/html/macro/command/loginfo.html 2012-01-26 12:11:13 UTC (rev 4808) +++ trunk/doc/ja/html/macro/command/loginfo.html 2012-01-26 12:28:44 UTC (rev 4809) @@ -78,8 +78,9 @@

    \x8EQ\x8F\xC6

    +

    +logopen +

    -logopen
    - From svnnotify @ sourceforge.jp Sun Jan 29 22:04:13 2012 From: svnnotify @ sourceforge.jp (svnnotify @ sourceforge.jp) Date: Sun, 29 Jan 2012 22:04:13 +0900 Subject: [Ttssh2-commit] [4810] KERMIT: Message-ID: <1327842253.396315.8061.nullmailer@users.sourceforge.jp> Revision: 4810 http://sourceforge.jp/projects/ttssh2/svn/view?view=rev&revision=4810 Author: yutakapon Date: 2012-01-29 22:04:12 +0900 (Sun, 29 Jan 2012) Log Message: ----------- KERMIT: - CAPAS(Long Packet, File Attribute)の機能追加。ただし、穴あけが完了していないため、 条件コンパイル文(#ifdef KERMIT_CAPAS)で無効化してある。 - teraterm.ini に KmtLongPacket, KmtFileAttr エントリを追加。ただし、現状 on にしても 有効化できない。 - 受信バッファが MAXL バイトを超えたら、BOF回避のため、受信処理を終了させるようにした。 Modified Paths: -------------- trunk/installer/release/TERATERM.INI trunk/teraterm/common/ttftypes.h trunk/teraterm/common/tttypes.h trunk/teraterm/ttpfile/kermit.c trunk/teraterm/ttpset/ttset.c -------------- next part -------------- Modified: trunk/installer/release/TERATERM.INI =================================================================== --- trunk/installer/release/TERATERM.INI 2012-01-26 12:28:44 UTC (rev 4809) +++ trunk/installer/release/TERATERM.INI 2012-01-29 13:04:12 UTC (rev 4810) @@ -442,6 +442,10 @@ ; Kermit log KmtLog=off +; Kermit CAPAS: Ability to transmit and receive extended-length packets +KmtLongPacket=off +; Kermit CAPAS: Ability to accept "A" packets (file attributes) +KmtFileAttr=off ; Language selection LanguageSelection=on Modified: trunk/teraterm/common/ttftypes.h =================================================================== --- trunk/teraterm/common/ttftypes.h 2012-01-26 12:28:44 UTC (rev 4809) +++ trunk/teraterm/common/ttftypes.h 2012-01-29 13:04:12 UTC (rev 4810) @@ -103,11 +103,16 @@ typedef TFileVar far *PFileVar; typedef struct { - BYTE MAXL,TIME,NPAD,PADC,EOL,QCTL,QBIN,CHKT,REPT; + int MAXL; + BYTE TIME,NPAD,PADC,EOL,QCTL,QBIN,CHKT,REPT,CAPAS,WINDO,MAXLX1,MAXLX2; } KermitParam; +#define KMT_DATAMAX 4000 +#define KMT_PKTMAX (KMT_DATAMAX + 32) +#define KMT_PKTQUE 4 + typedef struct { - BYTE PktIn[96], PktOut[96]; + BYTE PktIn[KMT_PKTMAX], PktOut[KMT_PKTMAX]; int PktInPtr; int PktInLen, PktInCount; int PktNum, PktNumOffset; @@ -120,6 +125,12 @@ BYTE NextSeq; BYTE NextByte; KermitParam KmtMy, KmtYour; + int PktOutCount, PktInLongPacketLen; + int FileAttrFlag; + BOOL FileType; + time_t FileTime; + int FileMode; + LONGLONG FileSize; } TKmtVar; typedef TKmtVar far *PKmtVar; @@ -134,6 +145,7 @@ #define SendData 3 #define SendEOF 4 #define SendEOT 5 +#define SendFileAttr 6 #define ReceiveInit 6 #define ReceiveFile 7 Modified: trunk/teraterm/common/tttypes.h =================================================================== --- trunk/teraterm/common/tttypes.h 2012-01-26 12:28:44 UTC (rev 4809) +++ trunk/teraterm/common/tttypes.h 2012-01-29 13:04:12 UTC (rev 4810) @@ -169,6 +169,11 @@ #define YoptG 2 #define YoptSingle 3 + /* KERMIT option */ +#define KmtOptLongPacket 1 +#define KmtOptFileAttr 2 +#define KmtOptSlideWin 4 + /* Language */ #define IdEnglish 1 #define IdJapanese 2 @@ -547,6 +552,7 @@ char ClickableUrlBrowser[MAX_PATH]; char ClickableUrlBrowserArg[MAX_PATH]; WORD LogLockExclusive; + WORD KermitOpt; }; typedef struct tttset TTTSet, *PTTSet; @@ -994,6 +1000,7 @@ * * - At version 4.73, ttset_memfilemap was replaced with ttset_memfilemap_18. * added tttset.LogLockExclusive + * added tttset.KermitOpt * * - At version 4.72, ttset_memfilemap was replaced with ttset_memfilemap_17. * added tttset.TabStopFlag. Modified: trunk/teraterm/ttpfile/kermit.c =================================================================== --- trunk/teraterm/ttpfile/kermit.c 2012-01-26 12:28:44 UTC (rev 4809) +++ trunk/teraterm/ttpfile/kermit.c 2012-01-29 13:04:12 UTC (rev 4810) @@ -14,6 +14,7 @@ #include #include #include +#include #include "tt_res.h" #include "ttcommon.h" @@ -37,7 +38,15 @@ #define DefCHKT 1 #define MyREPT '~' +#define KMT_CAP_LONGPKT 2 +#define KMT_CAP_SLIDWIN 4 +#define KMT_CAP_FILATTR 8 +#define KMT_ATTR_TIME 001 +#define KMT_ATTR_MODE 002 +#define KMT_ATTR_SIZE 003 +#define KMT_ATTR_TYPE 004 + BYTE KmtNum(BYTE b); @@ -177,6 +186,21 @@ } } +// a single-character type 1 checksum \x82\xF0\x8Cv\x8EZ\x82\xB7\x82\xE9 +static int KmtCheckSumType1(BYTE *buf, int len) +{ + WORD Sum; + BYTE check; + int i; + + Sum = 0; + for (i = 0 ; i < len ; i++) { + Sum = Sum + buf[i]; + } + KmtCalcCheck(Sum, 1, &check); + return (check); +} + void KmtSendPacket(PFileVar fv, PKmtVar kv, PComVar cv) { int C; @@ -186,7 +210,11 @@ CommBinaryOut(cv,&(kv->KmtYour.PADC), 1); /* packet */ +#ifdef KERMIT_CAPAS + C = kv->PktOutCount; +#else C = KmtNum(kv->PktOut[1]) + 2; +#endif CommBinaryOut(cv,&kv->PktOut[0], C); if (fv->LogFlag) @@ -209,19 +237,44 @@ void KmtMakePacket(PFileVar fv, PKmtVar kv, BYTE SeqNum, BYTE PktType, int DataLen) { - int i; + int i, nlen, headnum; WORD Sum; + // SEQ\x82\xA9\x82\xE7CHECK\x82?ł?\xB7\x82\xB3\x81BMARK\x82\xC6LEN\x82????\xA2\x81B + nlen = DataLen + kv->KmtMy.CHKT + 2; + kv->PktOut[0] = 1; /* MARK */ - kv->PktOut[1] = KmtChar((BYTE)(DataLen + kv->KmtMy.CHKT + 2)); /* LEN */ + kv->PktOut[1] = KmtChar((BYTE)(nlen)); /* LEN */ kv->PktOut[2] = KmtChar(SeqNum); /* SEQ */ kv->PktOut[3] = PktType; /* TYPE */ + /* Long Packet\x82?? */ + if (nlen > MaxNum) { + int k; + memmove_s(&kv->PktOut[7], KMT_PKTMAX-7, &kv->PktOut[4], DataLen); + kv->PktOut[1] = KmtChar(0); /* LEN=0 */ + k = DataLen + kv->KmtMy.CHKT; + kv->PktOut[4] = KmtChar(k / 95); + kv->PktOut[5] = KmtChar(k % 95); + Sum = KmtCheckSumType1(&kv->PktOut[1], 5); + kv->PktOut[6] = KmtChar((BYTE)Sum); /* HCHECK */ + + /* LEN+SEQ+TYPE+LENX1+LENX2+HCHECK */ + headnum = 6; + + } else { + /* LEN+SEQ+TYPE */ + headnum = 3; + } + /* check sum */ Sum = 0; - for (i = 1 ; i <= DataLen+3 ; i++) + for (i = 1 ; i <= DataLen + headnum ; i++) Sum = Sum + kv->PktOut[i]; - KmtCalcCheck(Sum, kv->KmtMy.CHKT, &(kv->PktOut[DataLen+4])); + KmtCalcCheck(Sum, kv->KmtMy.CHKT, &(kv->PktOut[DataLen + headnum + 1])); + + /* \x83o\x83b\x83t\x83@\x82?S\x91?T\x83C\x83Y */ + kv->PktOutCount = 1 + headnum + DataLen + kv->KmtMy.CHKT; } @@ -246,6 +299,19 @@ kv->PktOut[11] = kv->KmtMy.CHKT + 0x30; kv->PktOut[12] = kv->KmtMy.REPT; +#ifdef KERMIT_CAPAS + if (kv->KmtMy.CAPAS > 0) { + kv->PktOut[13] = KmtChar(kv->KmtMy.CAPAS); + NParam++; + if (kv->KmtMy.CAPAS & KMT_CAP_LONGPKT) { + kv->PktOut[14] = KmtChar(1); + kv->PktOut[15] = KmtChar(KMT_DATAMAX / 95); + kv->PktOut[16] = KmtChar(KMT_DATAMAX % 95); + NParam += 3; + } + } +#endif + KmtMakePacket(fv,kv,(BYTE)(kv->PktNum - kv->PktNumOffset),PktType,NParam); KmtSendPacket(fv,kv,cv); @@ -273,13 +339,25 @@ BOOL KmtCheckPacket(PKmtVar kv) { - int i; + int i, len; WORD Sum; BYTE Check[3]; + /* Long Packet \x82??\x81A\x82?\xB8 HCHECK \x82\xF0\x8C\x9F\x8F?\xB7\x82\xE9\x81B */ + if (kv->PktInLen == 0) { + Sum = KmtCheckSumType1(&kv->PktIn[1], 5); + if ((BYTE)Sum != kv->PktIn[6]) + return FALSE; + len = kv->PktInCount - 1 - kv->KmtMy.CHKT; + + } else { + len = kv->PktInLen+1-kv->KmtMy.CHKT; + + } + /* Calc sum */ Sum = 0; - for (i = 1 ; i <= kv->PktInLen+1-kv->KmtMy.CHKT ; i++) + for (i = 1 ; i <= len ; i++) Sum = Sum + kv->PktIn[i]; /* Calc CHECK */ @@ -287,7 +365,7 @@ for (i = 1 ; i <= kv->KmtMy.CHKT ; i++) if (Check[i-1] != - kv->PktIn[ kv->PktInLen +1- kv->KmtMy.CHKT +i ]) + kv->PktIn[ len + i ]) return FALSE; return TRUE; } @@ -300,14 +378,21 @@ void KmtParseInit(PKmtVar kv, BOOL AckFlag) { - int i, NParam; + int i, NParam, off, cap; BYTE b, n; - NParam = kv->PktInLen - 2 - kv->KmtMy.CHKT; + if (kv->PktInLen == 0) { /* Long Packet */ + NParam = kv->PktInLongPacketLen - kv->KmtMy.CHKT; + off = 7; + } else { + NParam = kv->PktInLen - 2 - kv->KmtMy.CHKT; + off = 3; + } + for (i=1 ; i <= NParam ; i++) { - b = kv->PktIn[i+3]; + b = kv->PktIn[i + off]; n = KmtNum(b); switch (i) { case 1: @@ -392,9 +477,40 @@ */ kv->RepeatFlag = kv->KmtMy.REPT == kv->KmtYour.REPT; break; + + case 10: /* CAPAS */ + kv->KmtYour.CAPAS = n; + + // Tera Term\x82?T\x81[\x83o\x82\xCC capabilities \x82\xCCAND\x82\xF0\x8E\xE6\x82\xE9\x81B + cap = 0; + if (n & kv->KmtMy.CAPAS & KMT_CAP_LONGPKT) { + cap |= KMT_CAP_LONGPKT; + } + if (n & kv->KmtMy.CAPAS & KMT_CAP_SLIDWIN) { + cap |= KMT_CAP_SLIDWIN; + } + if (n & kv->KmtMy.CAPAS & KMT_CAP_FILATTR) { + cap |= KMT_CAP_FILATTR; + } + kv->KmtMy.CAPAS = cap; + break; } } + /* Long Packet \x82??\x81AMAXL \x82\xF0\x8DX\x90V\x82\xB7\x82\xE9\x81B*/ + if (kv->KmtMy.CAPAS & KMT_CAP_LONGPKT) { + kv->KmtMy.MAXL = kv->PktInLongPacketLen; + if (kv->KmtMy.MAXL < 10) + kv->KmtMy.MAXL = 80; + else if (kv->KmtMy.MAXL > KMT_DATAMAX) + kv->KmtMy.MAXL = KMT_DATAMAX; + + } else { + /* Capabilities \x82\xAA\x97\x8E\x82\xBF\x82Ă\xA2\x82\xE9\x82??ALEN=0 \x82??\x82?AMAXL \x82\xCD DefMAXL \x82????\xB7\x82\xE9\x81B + * TODO: \x96{\x97\x88\x82?G\x83\x89\x81[\x82?\xB7\x82?\xAB\x81H + */ + + } } void KmtSendAck(PFileVar fv, PKmtVar kv, PComVar cv) @@ -412,13 +528,20 @@ void KmtDecode(PFileVar fv, PKmtVar kv, PCHAR Buff, int *BuffLen) { - int i, j, DataLen, BuffPtr; + int i, j, DataLen, BuffPtr, off; BYTE b, b2; BOOL CTLflag,BINflag,REPTflag,OutFlag; BuffPtr = 0; - DataLen = kv->PktInLen - kv->KmtMy.CHKT - 2; + if (kv->PktInLen == 0) { /* Long Packet */ + DataLen = kv->PktInLongPacketLen - kv->KmtMy.CHKT; + off = 7; + } else { + DataLen = kv->PktInLen - kv->KmtMy.CHKT - 2; + off = 3; + } + OutFlag = FALSE; kv->RepeatCount = 1; CTLflag = FALSE; @@ -426,7 +549,7 @@ REPTflag = FALSE; for (i = 1 ; i <= DataLen ; i++) { - b = kv->PktIn[3+i]; + b = kv->PktIn[off + i]; b2 = b & 0x7f; if (CTLflag) { @@ -478,6 +601,24 @@ SetDlgTime(fv->HWin, IDC_PROTOELAPSEDTIME, fv->StartTime, fv->ByteCount); } +static void KmtRecvFileAttr(PFileVar fv, PKmtVar kv, PCHAR Buff, int *BuffLen) +{ + int DataLen, BuffPtr, off; + BYTE *p; + + BuffPtr = 0; + + if (kv->PktInLen == 0) { /* Long Packet */ + DataLen = kv->PktInLongPacketLen - kv->KmtMy.CHKT; + off = 7; + } else { + DataLen = kv->PktInLen - kv->KmtMy.CHKT - 2; + off = 3; + } + + p = &kv->PktIn[off]; +} + BOOL KmtEncode(PFileVar fv, PKmtVar kv) { BYTE b, b2, b7; @@ -638,6 +779,7 @@ BOOL KmtSendNextFile(PFileVar fv, PKmtVar kv, PComVar cv) { char uimsg[MAX_UIMSG], uimsg2[MAX_UIMSG]; + struct _stati64 st; if (! GetNextFname(fv)) { @@ -645,6 +787,16 @@ return TRUE; } + if (_stati64(fv->FullName, &st) == 0) { + kv->FileAttrFlag = KMT_ATTR_TIME | KMT_ATTR_MODE | KMT_ATTR_SIZE | KMT_ATTR_TYPE; + kv->FileType = TRUE; + kv->FileTime = st.st_ctime; + kv->FileMode = st.st_mode; + kv->FileSize = st.st_size; + } else { + kv->FileAttrFlag = 0; + } + /* file open */ fv->FileHandle = _lopen(fv->FullName,OF_READ); fv->FileOpen = fv->FileHandle>0; @@ -684,6 +836,46 @@ return TRUE; } +BOOL KmtSendNextFileAttr(PFileVar fv, PKmtVar kv, PComVar cv) +{ + char buf[512], s[128]; + char t[64]; + + buf[0] = '\0'; + if ( (kv->FileAttrFlag & KMT_ATTR_TYPE) != 0 ) { + _snprintf_s(s, sizeof(s), _TRUNCATE, "\"%c%s8", KmtChar(2), kv->FileType ? "A" : "B"); + strncat_s(buf, sizeof(buf), s, _TRUNCATE); + } + if ( (kv->FileAttrFlag & KMT_ATTR_TIME) != 0 ) { + struct tm *date = localtime(&kv->FileTime); + int len; + len = strftime(t, sizeof(t), "%Y%m%d %H:%M:%S", date); + _snprintf_s(s, sizeof(s), _TRUNCATE, "#%d%s", len, t); + strncat_s(buf, sizeof(buf), s, _TRUNCATE); + } + if ( (kv->FileAttrFlag & KMT_ATTR_MODE) != 0 ) { + _snprintf_s(t, sizeof(t), _TRUNCATE, "%03o", kv->FileMode & 0777); + _snprintf_s(s, sizeof(s), _TRUNCATE, ",%d%s", strlen(t), t); + strncat_s(buf, sizeof(buf), s, _TRUNCATE); + } + if ( (kv->FileAttrFlag & KMT_ATTR_SIZE) != 0 ) { + _snprintf_s(t, sizeof(t), _TRUNCATE, "%I64d", kv->FileSize); + _snprintf_s(s, sizeof(s), _TRUNCATE, "1%d%s", strlen(t), t); + strncat_s(buf, sizeof(buf), s, _TRUNCATE); + } + + KmtIncPacketNum(kv); + strncpy_s(&(kv->PktOut[4]),sizeof(kv->PktOut)-4, buf, _TRUNCATE); + KmtMakePacket(fv,kv,(BYTE)(kv->PktNum-kv->PktNumOffset),(BYTE)'A', + strlen(buf)); + KmtSendPacket(fv,kv,cv); + + kv->RepeatCount = 0; + kv->NextByteFlag = FALSE; + kv->KmtState = SendFileAttr; + return TRUE; +} + void KmtSendReceiveInit(PFileVar fv, PKmtVar kv, PComVar cv) { kv->PktNum = 0; @@ -769,6 +961,17 @@ kv->KmtMy.CHKT = DefCHKT; kv->KmtMy.REPT = MyREPT; + /* CAPAS: a capability of Kermit + * (2012/1/22 yutaka) + */ + kv->KmtMy.CAPAS = 0x00; +#ifdef KERMIT_CAPAS + if (ts->KermitOpt & KmtOptLongPacket) + kv->KmtMy.CAPAS |= KMT_CAP_LONGPKT; + if (ts->KermitOpt & KmtOptFileAttr) + kv->KmtMy.CAPAS |= KMT_CAP_FILATTR; +#endif + /* default your parameters */ kv->KmtYour = kv->KmtMy; @@ -876,15 +1079,48 @@ case WaitLen: kv->PktIn[1] = b; kv->PktInLen = KmtNum(b); +#ifdef KERMIT_CAPAS + if (kv->PktInLen == 0) { /* Long Packet */ + kv->PktInCount = 0; + } else if (kv->PktInLen >= 3) { /* Normal Packet */ + kv->PktInCount = kv->PktInLen + 2; + } else { + /* If unchar(LEN) = 1 or 2, the packet is invalid and should cause an Error. */ + GetPkt = FALSE; + goto read_end; + } +#else kv->PktInCount = kv->PktInLen; +#endif kv->PktInPtr = 2; kv->PktReadMode = WaitCheck; break; case WaitCheck: + // \x83o\x83b\x83t\x83@\x82\xAA\x88\xEC\x82?\x82\xE7\x81A\x88?\xED\x8FI\x97\xB9\x82\xB7\x82\xE9\x81B + // Tera Term\x91\xA4\x82\xAALong Packet\x82\xF0\x83T\x83|\x81[\x83g\x82\xB5\x82Ă\xA2\x82?\xA2\x8F?\x82?A\x83T\x81[\x83o\x91\xA4\x82\xA9\x82\xE7\x95s\x90\xB3\x82\xC9 + // Long Packet\x82\xAA\x91\x97\x82\xE7\x82\xEA\x82Ă\xAB\x82\xBD\x8F?\x82\xE0\x8B~\x8Dςł\xAB\x82\xE9\x81B + if (kv->PktInPtr > kv->KmtMy.MAXL) { + GetPkt = FALSE; + goto read_end; + } kv->PktIn[kv->PktInPtr] = b; kv->PktInPtr++; +#ifdef KERMIT_CAPAS + // Long Packet + if (kv->PktInCount == 0 && kv->PktInPtr == 6) { + kv->PktInLongPacketLen = KmtNum(kv->PktIn[4])*95 + KmtNum(kv->PktIn[5]); + kv->PktInCount = kv->PktInLongPacketLen + 7; + } + + // \x8A\xFA\x91?\xB5\x82\xBD\x83o\x83b\x83t\x83@\x83T\x83C\x83Y\x82??\xC1\x82\xBD\x82\xE7\x8FI\x82\xED\x82\xE9\x81B + if (kv->PktInCount != 0 && kv->PktInPtr >= kv->PktInCount) { + GetPkt = TRUE; + break; + } +#else kv->PktInCount--; GetPkt = (kv->PktInCount==0); +#endif if (GetPkt) kv->PktReadMode = WaitMark; break; } @@ -892,14 +1128,13 @@ if (! GetPkt) c = CommRead1Byte(cv,&b); } +read_end: if (! GetPkt) return TRUE; if (fv->LogFlag) { -#if 0 - _lwrite(fv->LogFile,"< ",2); - _lwrite(fv->LogFile,&(kv->PktIn[1]),kv->PktInLen+1); - _lwrite(fv->LogFile,"\015\012",2); +#ifdef KERMIT_CAPAS + KmtReadLog(fv, kv, &(kv->PktIn[0]), kv->PktInCount); #else KmtReadLog(fv, kv, &(kv->PktIn[0]), kv->PktInLen+2); #endif @@ -949,6 +1184,13 @@ } break; + case 'A': /* File Attribute(Optional) */ + if ((kv->KmtState == ReceiveData) && + (PktNumNew > kv->PktNum)) { + KmtRecvFileAttr(fv,kv,NULL,&Len); + } + break; + case 'S': if ((kv->KmtState == ReceiveInit) || (kv->KmtState == GetInit)) @@ -967,8 +1209,12 @@ case SendFile: if (PktNumNew==kv->PktNum) KmtSendPacket(fv,kv,cv); - else if (PktNumNew==kv->PktNum+1) - KmtSendNextData(fv,kv,cv); + else if (PktNumNew==kv->PktNum+1) { + if (kv->KmtMy.CAPAS & KMT_CAP_FILATTR) + KmtSendNextData(fv,kv,cv); + else + KmtSendNextData(fv,kv,cv); + } break; case SendData: if (PktNumNew==kv->PktNum) @@ -1015,8 +1261,17 @@ } break; case SendFile: - if (PktNumNew==kv->PktNum) + if (PktNumNew==kv->PktNum) { + if (kv->KmtMy.CAPAS & KMT_CAP_FILATTR) + KmtSendNextFileAttr(fv,kv,cv); + else + KmtSendNextData(fv,kv,cv); + } + break; + case SendFileAttr: + if (PktNumNew==kv->PktNum) { KmtSendNextData(fv,kv,cv); + } break; case SendData: if (PktNumNew==kv->PktNum) Modified: trunk/teraterm/ttpset/ttset.c =================================================================== --- trunk/teraterm/ttpset/ttset.c 2012-01-26 12:28:44 UTC (rev 4809) +++ trunk/teraterm/ttpset/ttset.c 2012-01-29 13:04:12 UTC (rev 4810) @@ -900,6 +900,10 @@ /* Kermit log -- special option */ if (GetOnOff(Section, "KmtLog", FName, FALSE)) ts->LogFlag |= LOG_KMT; + if (GetOnOff(Section, "KmtLongPacket", FName, FALSE)) + ts->KermitOpt |= KmtOptLongPacket; + if (GetOnOff(Section, "KmtFileAttr", FName, FALSE)) + ts->KermitOpt |= KmtOptFileAttr; // Enable language selection -- special option if (!GetOnOff(Section, "LanguageSelection", FName, TRUE)) @@ -2159,6 +2163,8 @@ /* Kermit log -- special option */ WriteOnOff(Section, "KmtLog", FName, (WORD) (ts->LogFlag & LOG_KMT)); + WriteOnOff(Section, "KmtLongPacket", FName, (WORD) (ts->KermitOpt & KmtOptLongPacket)); + WriteOnOff(Section, "KmtFileAttr", FName, (WORD) (ts->KermitOpt & KmtOptFileAttr)); // Enable language selection -- special option if ((ts->MenuFlag & MF_NOLANGUAGE) == 0) From svnnotify @ sourceforge.jp Sun Jan 29 22:21:16 2012 From: svnnotify @ sourceforge.jp (svnnotify @ sourceforge.jp) Date: Sun, 29 Jan 2012 22:21:16 +0900 Subject: [Ttssh2-commit] =?utf-8?b?WzQ4MTFdICDoi7HoqLM=?= Message-ID: <1327843276.033073.28361.nullmailer@users.sourceforge.jp> Revision: 4811 http://sourceforge.jp/projects/ttssh2/svn/view?view=rev&revision=4811 Author: yutakapon Date: 2012-01-29 22:21:15 +0900 (Sun, 29 Jan 2012) Log Message: ----------- 英訳 Modified Paths: -------------- trunk/doc/en/html/about/history.html trunk/doc/en/html/macro/command/loginfo.html -------------- next part -------------- Modified: trunk/doc/en/html/about/history.html =================================================================== --- trunk/doc/en/html/about/history.html 2012-01-29 13:04:12 UTC (rev 4810) +++ trunk/doc/en/html/about/history.html 2012-01-29 13:21:15 UTC (rev 4811) @@ -50,8 +50,8 @@
    • added the LogLockExclusive entry in the teraterm.ini file. The default value is on.
    - - +
  • When the receiving file is empty, the file name is assigned to noname.
  • +
  • When the receiving file name contains banned characters, these characters are replaced to _.
  • Kermit: Changed the MAXL from 90 to 94. Workaround for failing to communicate against NT-4S(Hitachi VoIP gateway).
  • Kermit: Improved the KERMIT.LOG more easily.
  • added the "loginfo" macro command.
  • Modified: trunk/doc/en/html/macro/command/loginfo.html =================================================================== --- trunk/doc/en/html/macro/command/loginfo.html 2012-01-29 13:04:12 UTC (rev 4810) +++ trunk/doc/en/html/macro/command/loginfo.html 2012-01-29 13:21:15 UTC (rev 4811) @@ -14,7 +14,7 @@

    loginfo

    -Tera Term \x82?\x8D\x83O\x8E擾\x8F\xF3\x91??\xE9 +Retrieves Tera Term log status.

    @@ -24,37 +24,37 @@
     

    Remarks

    -\x83\x8D\x83O\x82\xF0\x8E擾\x82\xB5\x82Ă\xA2\x82\xE9\x8F?\x81Astrvar \x82?\x8D\x83O\x83t\x83@\x83C\x83\x8B\x96\xBC\x82\xAA\x8Ai\x94[\x82\xB3\x82\xEA\x81A\x83\x8D\x83O\x8E擾\x8E\x9E\x82?t\x83\x89\x83O\x82?\xF3\x91?\xAA result \x82?i\x94[\x82\xB3\x82\xEA\x82\xE9\x81B
    -\x83\x8D\x83O\x82\xF0\x8E擾\x82\xB5\x82Ă\xA2\x82?\xA2\x8F?\x82\xCD result \x82\xC9 -1 \x82\xAA\x8Ai\x94[\x82\xB3\x82\xEA\x82\xE9\x81B +When Tera Term is logging, the file name stores in the strvar variable and the flag status of log starting is stored in the result variable.
    +On the contrary, when Tera Term is not logging, the result variable is -1.

    -\x83\x8D\x83O\x8E擾\x8E\x9E\x82\xC9 result \x82?i\x94[\x82\xB3\x82\xEA\x82\xE9\x92l\x82?A\x88?\xBA\x82?\xE0 on \x82??\xC1\x82Ă\xA2\x82\xE9\x83t\x83\x89\x83O\x82?Ή\x9E\x82\xB7\x82\xE9\x92l\x82?\x87\x8Cv\x82??\xE9\x81B +The result variable is bitwise OR in the following value:

    - - + + - + - + - + - + - +
    \x92l\x88?\xA1ValueMeaning
    1\x83o\x83C\x83i\x83\x8A\x83t\x83\x89\x83OBinary flag
    2\x83A\x83y\x83\x93\x83h\x83t\x83\x89\x83OAppend flag
    4\x83v\x83\x8C\x83C\x83\x93\x83e\x83L\x83X\x83g\x83t\x83\x89\x83OPlain text flag
    8\x83^\x83C\x83\x80\x83X\x83^\x83\x93\x83v\x83t\x83\x89\x83OTimestamp flag
    16\x83_\x83C\x83A\x83\x8D\x83O\x94\xF1\x95\\x8E\xA6\x83t\x83\x89\x83OHide dialog flag
    @@ -65,12 +65,12 @@ loginfo logfile if result == -1 then - ; \x83\x8D\x83O\x82\xF0\x8E擾\x82\xB5\x82Ă\xA2\x82?\xA2\x82?ŁA\x90V\x82\xBD\x82?\x8D\x83O\x8E擾\x82\xF0\x8AJ\x8En\x82\xB7\x82\xE9 + ; When Tera Term is not logging, a new log is started. logopen "test.log" 0 0 0 1 elseif result & 8 == 0 then flags = result - ; \x83^\x83C\x83\x80\x83X\x83^\x83\x93\x83v\x82\xAA\x96\xB3\x8C\xF8\x82??ŁA\x83^\x83C\x83\x80\x83X\x83^\x83\x93\x83v\x82\xF0\x97L\x8C\xF8\x82?\xB5\x82ĊJ\x82\xAB\x82?\xA8\x82\xB7\x81B + ; When the log timestamp is disabled, a new log with timestamp is re-opend. logclose logopen logfile 0 1 flags&4 1 flags&16 endif From svnnotify @ sourceforge.jp Mon Jan 30 00:39:59 2012 From: svnnotify @ sourceforge.jp (svnnotify @ sourceforge.jp) Date: Mon, 30 Jan 2012 00:39:59 +0900 Subject: [Ttssh2-commit] [4812] KERMIT: Message-ID: <1327851599.246004.31053.nullmailer@users.sourceforge.jp> Revision: 4812 http://sourceforge.jp/projects/ttssh2/svn/view?view=rev&revision=4812 Author: yutakapon Date: 2012-01-30 00:39:58 +0900 (Mon, 30 Jan 2012) Log Message: ----------- KERMIT: - 可変長引数デバッグプリント KmtStringLog 関数の追加 - File Attribute の実装 Modified Paths: -------------- trunk/teraterm/ttpfile/kermit.c -------------- next part -------------- Modified: trunk/teraterm/ttpfile/kermit.c =================================================================== --- trunk/teraterm/ttpfile/kermit.c 2012-01-29 13:21:15 UTC (rev 4811) +++ trunk/teraterm/ttpfile/kermit.c 2012-01-29 15:39:58 UTC (rev 4812) @@ -15,6 +15,7 @@ #include #include #include +#include #include "tt_res.h" #include "ttcommon.h" @@ -22,6 +23,8 @@ #include "dlglib.h" #include "ftlib.h" +//#define KERMIT_CAPAS + /* kermit parameters */ #define MaxNum 94 @@ -162,6 +165,21 @@ } } +static void KmtStringLog(PFileVar fv, PKmtVar kv, char *fmt, ...) +{ + char tmp[1024]; + int len; + va_list arg; + + if (fv->LogFlag) { + va_start(arg, fmt); + len = _vsnprintf(tmp, sizeof(tmp), fmt, arg); + va_end(arg); + _lwrite(fv->LogFile, tmp, len); + _lwrite(fv->LogFile,"\015\012",2); + } +} + BYTE KmtNum(BYTE b) { return (b - 32); @@ -383,7 +401,7 @@ if (kv->PktInLen == 0) { /* Long Packet */ NParam = kv->PktInLongPacketLen - kv->KmtMy.CHKT; - off = 7; + off = 6; } else { NParam = kv->PktInLen - 2 - kv->KmtMy.CHKT; @@ -536,7 +554,7 @@ if (kv->PktInLen == 0) { /* Long Packet */ DataLen = kv->PktInLongPacketLen - kv->KmtMy.CHKT; - off = 7; + off = 6; } else { DataLen = kv->PktInLen - kv->KmtMy.CHKT - 2; off = 3; @@ -603,20 +621,71 @@ static void KmtRecvFileAttr(PFileVar fv, PKmtVar kv, PCHAR Buff, int *BuffLen) { - int DataLen, BuffPtr, off; - BYTE *p; + int DataLen, BuffPtr, off, c, n, j; + BYTE *p, *q; + char str[256]; + struct tm tm; BuffPtr = 0; if (kv->PktInLen == 0) { /* Long Packet */ DataLen = kv->PktInLongPacketLen - kv->KmtMy.CHKT; - off = 7; + off = 6; } else { DataLen = kv->PktInLen - kv->KmtMy.CHKT - 2; off = 3; } - p = &kv->PktIn[off]; + kv->FileAttrFlag = 0; + p = q = &kv->PktIn[1 + off]; + while ((p - q) < DataLen) { + c = *p++; + + n = KmtNum(*p); /* 0-255 */ + p++; + for (j = 0 ; j < n ; j++) { + str[j] = *p++; + } + str[j] = 0; + + switch(c) { + case '.': // System ID + case '*': // Encoding + case '!': // File length in K byte + case '-': // Generic "world" protection code + case '/': // Record format + case '(': // File Block Size + case '+': // Disposition + case '0': // System-dependent parameters + break; + case '"': // File type + kv->FileAttrFlag |= KMT_ATTR_TYPE; + kv->FileType = (str[0] == 'A' ? TRUE : FALSE); + break; + case '#': // File creation date "20100226 12:23:45" + kv->FileAttrFlag |= KMT_ATTR_TIME; + memset(&tm, 0, sizeof(tm)); + if ( sscanf(str, "%04d%02d%02d %02d:%02d:%02d", + &tm.tm_year, &tm.tm_mon, &tm.tm_mday, &tm.tm_hour, &tm.tm_min, &tm.tm_sec) < 6 ) { + kv->FileTime = time(NULL); + + } else { + tm.tm_year -= 1900; // 1900- + tm.tm_mon -= 1; // 0 - 11 + kv->FileTime = mktime(&tm); + } + break; + case ',': // File attribute "664" + kv->FileAttrFlag |= KMT_ATTR_MODE; + sscanf(str, "%03o", &kv->FileMode); + break; + case '1': // File length in bytes + kv->FileAttrFlag |= KMT_ATTR_SIZE; + kv->FileSize = _atoi64(str); + break; + } + } + } BOOL KmtEncode(PFileVar fv, PKmtVar kv) @@ -1086,7 +1155,9 @@ kv->PktInCount = kv->PktInLen + 2; } else { /* If unchar(LEN) = 1 or 2, the packet is invalid and should cause an Error. */ + KmtStringLog(fv, kv, "If unchar(LEN) = %d is 1 or 2, the packet is invalid.", kv->PktInLen); GetPkt = FALSE; + kv->PktReadMode = WaitMark; goto read_end; } #else @@ -1100,7 +1171,9 @@ // Tera Term\x91\xA4\x82\xAALong Packet\x82\xF0\x83T\x83|\x81[\x83g\x82\xB5\x82Ă\xA2\x82?\xA2\x8F?\x82?A\x83T\x81[\x83o\x91\xA4\x82\xA9\x82\xE7\x95s\x90\xB3\x82\xC9 // Long Packet\x82\xAA\x91\x97\x82\xE7\x82\xEA\x82Ă\xAB\x82\xBD\x8F?\x82\xE0\x8B~\x8Dςł\xAB\x82\xE9\x81B if (kv->PktInPtr > kv->KmtMy.MAXL) { + KmtStringLog(fv, kv, "Read buffer overflow(%d > %d).", kv->PktInPtr, kv->KmtMy.MAXL); GetPkt = FALSE; + kv->PktReadMode = WaitMark; goto read_end; } kv->PktIn[kv->PktInPtr] = b; @@ -1115,7 +1188,6 @@ // \x8A\xFA\x91?\xB5\x82\xBD\x83o\x83b\x83t\x83@\x83T\x83C\x83Y\x82??\xC1\x82\xBD\x82\xE7\x8FI\x82\xED\x82\xE9\x81B if (kv->PktInCount != 0 && kv->PktInPtr >= kv->PktInCount) { GetPkt = TRUE; - break; } #else kv->PktInCount--; @@ -1323,6 +1395,15 @@ if (fv->FileOpen) _lclose(fv->FileHandle); fv->FileOpen = FALSE; kv->KmtState = ReceiveFile; + + /* \x83t\x83@\x83C\x83\x8B\x91\xAE\x90\xAB\x82\xF0\x90??\x82\xE9\x81B*/ + if (kv->FileAttrFlag & KMT_ATTR_TIME) { + struct _utimbuf utm; + memset(&utm, 0, sizeof(utm)); + utm.actime = kv->FileTime; + utm.modtime = kv->FileTime; + _utime(fv->FullName, &utm); + } } }