tags.
+#
+ my $text = shift;
+
+ #
+ # First, handle reference-style labeled images: ![alt text][id]
+ #
+ $text =~ s{
+ ( # wrap whole match in $1
+ !\[
+ (.*?) # alt text = $2
+ \]
+
+ [ ]? # one optional space
+ (?:\n[ ]*)? # one optional newline followed by spaces
+
+ \[
+ (.*?) # id = $3
+ \]
+
+ )
+ }{
+ my $result;
+ my $whole_match = $1;
+ my $alt_text = $2;
+ my $link_id = lc $3;
+
+ if ($link_id eq "") {
+ $link_id = lc $alt_text; # for shortcut links like ![this][].
+ }
+
+ $alt_text =~ s/"/"/g;
+ if (defined $g_urls{$link_id}) {
+ my $url = $g_urls{$link_id};
+ $url =~ s! \* !$g_escape_table{'*'}!gx; # We've got to encode these to avoid
+ $url =~ s! _ !$g_escape_table{'_'}!gx; # conflicting with italics/bold.
+ $result = " ? # src url = $3
+ [ \t]*
+ ( # $4
+ (['"]) # quote char = $5
+ (.*?) # title = $6
+ \5 # matching quote
+ [ \t]*
+ )? # title is optional
+ \)
+ )
+ }{
+ my $result;
+ my $whole_match = $1;
+ my $alt_text = $2;
+ my $url = $3;
+ my $title = '';
+ if (defined($6)) {
+ $title = $6;
+ }
+
+ $alt_text =~ s/"/"/g;
+ $title =~ s/"/"/g;
+ $url =~ s! \* !$g_escape_table{'*'}!gx; # We've got to encode these to avoid
+ $url =~ s! _ !$g_escape_table{'_'}!gx; # conflicting with italics/bold.
+ $result = " " . _RunSpanGamut($1) . "\n\n";
+ }egmx;
+
+ $text =~ s{ ^(.+)[ \t]*\n-+[ \t]*\n+ }{
+ "" . _RunSpanGamut($1) . " \n\n";
+ }egmx;
+
+
+ # atx-style headers:
+ # # Header 1
+ # ## Header 2
+ # ## Header 2 with closing hashes ##
+ # ...
+ # ###### Header 6
+ #
+ $text =~ s{
+ ^(\#{1,6}) # $1 = string of #'s
+ [ \t]*
+ (.+?) # $2 = Header text
+ [ \t]*
+ \#* # optional closing #'s (not counted)
+ \n+
+ }{
+ my $h_level = length($1);
+ "" . _RunSpanGamut($2) . " \n\n";
+ }egmx;
+
+ return $text;
+}
+
+
+sub _DoLists {
+#
+# Form HTML ordered (numbered) and unordered (bulleted) lists.
+#
+ my $text = shift;
+ my $less_than_tab = $g_tab_width - 1;
+
+ # Re-usable patterns to match list item bullets and number markers:
+ my $marker_ul = qr/[*+-]/;
+ my $marker_ol = qr/\d+[.]/;
+ my $marker_any = qr/(?:$marker_ul|$marker_ol)/;
+
+ # Re-usable pattern to match any entirel ul or ol list:
+ my $whole_list = qr{
+ ( # $1 = whole list
+ ( # $2
+ [ ]{0,$less_than_tab}
+ (${marker_any}) # $3 = first list item marker
+ [ \t]+
+ )
+ (?s:.+?)
+ ( # $4
+ \z
+ |
+ \n{2,}
+ (?=\S)
+ (?! # Negative lookahead for another list item marker
+ [ \t]*
+ ${marker_any}[ \t]+
+ )
+ )
+ )
+ }mx;
+
+ # We use a different prefix before nested lists than top-level lists.
+ # See extended comment in _ProcessListItems().
+ #
+ # Note: There's a bit of duplication here. My original implementation
+ # created a scalar regex pattern as the conditional result of the test on
+ # $g_list_level, and then only ran the $text =~ s{...}{...}egmx
+ # substitution once, using the scalar as the pattern. This worked,
+ # everywhere except when running under MT on my hosting account at Pair
+ # Networks. There, this caused all rebuilds to be killed by the reaper (or
+ # perhaps they crashed, but that seems incredibly unlikely given that the
+ # same script on the same server ran fine *except* under MT. I've spent
+ # more time trying to figure out why this is happening than I'd like to
+ # admit. My only guess, backed up by the fact that this workaround works,
+ # is that Perl optimizes the substition when it can figure out that the
+ # pattern will never change, and when this optimization isn't on, we run
+ # afoul of the reaper. Thus, the slightly redundant code to that uses two
+ # static s/// patterns rather than one conditional pattern.
+
+ if ($g_list_level) {
+ $text =~ s{
+ ^
+ $whole_list
+ }{
+ my $list = $1;
+ my $list_type = ($3 =~ m/$marker_ul/) ? "ul" : "ol";
+ # Turn double returns into triple returns, so that we can make a
+ # paragraph for the last item in a list, if necessary:
+ $list =~ s/\n{2,}/\n\n\n/g;
+ my $result = _ProcessListItems($list, $marker_any);
+ $result = "<$list_type>\n" . $result . "$list_type>\n";
+ $result;
+ }egmx;
+ }
+ else {
+ $text =~ s{
+ (?:(?<=\n\n)|\A\n?)
+ $whole_list
+ }{
+ my $list = $1;
+ my $list_type = ($3 =~ m/$marker_ul/) ? "ul" : "ol";
+ # Turn double returns into triple returns, so that we can make a
+ # paragraph for the last item in a list, if necessary:
+ $list =~ s/\n{2,}/\n\n\n/g;
+ my $result = _ProcessListItems($list, $marker_any);
+ $result = "<$list_type>\n" . $result . "$list_type>\n";
+ $result;
+ }egmx;
+ }
+
+
+ return $text;
+}
+
+
+sub _ProcessListItems {
+#
+# Process the contents of a single ordered or unordered list, splitting it
+# into individual list items.
+#
+
+ my $list_str = shift;
+ my $marker_any = shift;
+
+
+ # The $g_list_level global keeps track of when we're inside a list.
+ # Each time we enter a list, we increment it; when we leave a list,
+ # we decrement. If it's zero, we're not in a list anymore.
+ #
+ # We do this because when we're not inside a list, we want to treat
+ # something like this:
+ #
+ # I recommend upgrading to version
+ # 8. Oops, now this line is treated
+ # as a sub-list.
+ #
+ # As a single paragraph, despite the fact that the second line starts
+ # with a digit-period-space sequence.
+ #
+ # Whereas when we're inside a list (or sub-list), that line will be
+ # treated as the start of a sub-list. What a kludge, huh? This is
+ # an aspect of Markdown's syntax that's hard to parse perfectly
+ # without resorting to mind-reading. Perhaps the solution is to
+ # change the syntax rules such that sub-lists must start with a
+ # starting cardinal number; e.g. "1." or "a.".
+
+ $g_list_level++;
+
+ # trim trailing blank lines:
+ $list_str =~ s/\n{2,}\z/\n/;
+
+
+ $list_str =~ s{
+ (\n)? # leading line = $1
+ (^[ \t]*) # leading whitespace = $2
+ ($marker_any) [ \t]+ # list marker = $3
+ ((?s:.+?) # list item text = $4
+ (\n{1,2}))
+ (?= \n* (\z | \2 ($marker_any) [ \t]+))
+ }{
+ my $item = $4;
+ my $leading_line = $1;
+ my $leading_space = $2;
+
+ if ($leading_line or ($item =~ m/\n{2,}/)) {
+ $item = _RunBlockGamut(_Outdent($item));
+ }
+ else {
+ # Recursion for sub-lists:
+ $item = _DoLists(_Outdent($item));
+ chomp $item;
+ $item = _RunSpanGamut($item);
+ }
+
+ "" . $item . " \n";
+ }egmx;
+
+ $g_list_level--;
+ return $list_str;
+}
+
+
+
+sub _DoCodeBlocks {
+#
+# Process Markdown `` blocks.
+#
+
+ my $text = shift;
+
+ $text =~ s{
+ (?:\n\n|\A)
+ ( # $1 = the code block -- one or more lines, starting with a space/tab
+ (?:
+ (?:[ ]{$g_tab_width} | \t) # Lines must start with a tab or a tab-width of spaces
+ .*\n+
+ )+
+ )
+ ((?=^[ ]{0,$g_tab_width}\S)|\Z) # Lookahead for non-space at line-start, or end of doc
+ }{
+ my $codeblock = $1;
+ my $result; # return value
+
+ $codeblock = _EncodeCode(_Outdent($codeblock));
+ $codeblock = _Detab($codeblock);
+ $codeblock =~ s/\A\n+//; # trim leading newlines
+ $codeblock =~ s/\s+\z//; # trim trailing whitespace
+
+ $result = "\n\n" . $codeblock . "\n
\n\n";
+
+ $result;
+ }egmx;
+
+ return $text;
+}
+
+
+sub _DoCodeSpans {
+#
+# * Backtick quotes are used for
spans.
+#
+# * You can use multiple backticks as the delimiters if you want to
+# include literal backticks in the code span. So, this input:
+#
+# Just type ``foo `bar` baz`` at the prompt.
+#
+# Will translate to:
+#
+# Just type foo `bar` baz
at the prompt.
+#
+# There's no arbitrary limit to the number of backticks you
+# can use as delimters. If you need three consecutive backticks
+# in your code, use four for delimiters, etc.
+#
+# * You can use spaces to get literal backticks at the edges:
+#
+# ... type `` `bar` `` ...
+#
+# Turns to:
+#
+# ... type `bar`
...
+#
+
+ my $text = shift;
+
+ $text =~ s@
+ (`+) # $1 = Opening run of `
+ (.+?) # $2 = The code block
+ (?$c
";
+ @egsx;
+
+ return $text;
+}
+
+
+sub _EncodeCode {
+#
+# Encode/escape certain characters inside Markdown code runs.
+# The point is that in code, these characters are literals,
+# and lose their special Markdown meanings.
+#
+ local $_ = shift;
+
+ # Encode all ampersands; HTML entities are not
+ # entities within a Markdown code span.
+ s/&/&/g;
+
+ # Encode $'s, but only if we're running under Blosxom.
+ # (Blosxom interpolates Perl variables in article bodies.)
+ {
+ no warnings 'once';
+ if (defined($blosxom::version)) {
+ s/\$/$/g;
+ }
+ }
+
+
+ # Do the angle bracket song and dance:
+ s! < !<!gx;
+ s! > !>!gx;
+
+ # Now, escape characters that are magic in Markdown:
+ s! \* !$g_escape_table{'*'}!gx;
+ s! _ !$g_escape_table{'_'}!gx;
+ s! { !$g_escape_table{'{'}!gx;
+ s! } !$g_escape_table{'}'}!gx;
+ s! \[ !$g_escape_table{'['}!gx;
+ s! \] !$g_escape_table{']'}!gx;
+ s! \\ !$g_escape_table{'\\'}!gx;
+
+ return $_;
+}
+
+
+sub _DoItalicsAndBold {
+ my $text = shift;
+
+ # must go first:
+ $text =~ s{ (\*\*|__) (?=\S) (.+?[*_]*) (?<=\S) \1 }
+ {$2 }gsx;
+
+ $text =~ s{ (\*|_) (?=\S) (.+?) (?<=\S) \1 }
+ {$2 }gsx;
+
+ return $text;
+}
+
+
+sub _DoBlockQuotes {
+ my $text = shift;
+
+ $text =~ s{
+ ( # Wrap whole match in $1
+ (
+ ^[ \t]*>[ \t]? # '>' at the start of a line
+ .+\n # rest of the first line
+ (.+\n)* # subsequent consecutive lines
+ \n* # blanks
+ )+
+ )
+ }{
+ my $bq = $1;
+ $bq =~ s/^[ \t]*>[ \t]?//gm; # trim one level of quoting
+ $bq =~ s/^[ \t]+$//mg; # trim whitespace-only lines
+ $bq = _RunBlockGamut($bq); # recurse
+
+ $bq =~ s/^/ /g;
+ # These leading spaces screw with content, so we need to fix that:
+ $bq =~ s{
+ (\s*.+? )
+ }{
+ my $pre = $1;
+ $pre =~ s/^ //mg;
+ $pre;
+ }egsx;
+
+ "\n$bq\n \n\n";
+ }egmx;
+
+
+ return $text;
+}
+
+
+sub _FormParagraphs {
+#
+# Params:
+# $text - string to process with html tags
+#
+ my $text = shift;
+
+ # Strip leading and trailing lines:
+ $text =~ s/\A\n+//;
+ $text =~ s/\n+\z//;
+
+ my @grafs = split(/\n{2,}/, $text);
+
+ #
+ # Wrap
tags.
+ #
+ foreach (@grafs) {
+ unless (defined( $g_html_blocks{$_} )) {
+ $_ = _RunSpanGamut($_);
+ s/^([ \t]*)/
/;
+ $_ .= "
";
+ }
+ }
+
+ #
+ # Unhashify HTML blocks
+ #
+ foreach (@grafs) {
+ if (defined( $g_html_blocks{$_} )) {
+ $_ = $g_html_blocks{$_};
+ }
+ }
+
+ return join "\n\n", @grafs;
+}
+
+
+sub _EncodeAmpsAndAngles {
+# Smart processing for ampersands and angle brackets that need to be encoded.
+
+ my $text = shift;
+
+ # Ampersand-encoding based entirely on Nat Irons's Amputator MT plugin:
+ # http://bumppo.net/projects/amputator/
+ $text =~ s/&(?!#?[xX]?(?:[0-9a-fA-F]+|\w+);)/&/g;
+
+ # Encode naked <'s
+ $text =~ s{<(?![a-z/?\$!])}{<}gi;
+
+ return $text;
+}
+
+
+sub _EncodeBackslashEscapes {
+#
+# Parameter: String.
+# Returns: The string, with after processing the following backslash
+# escape sequences.
+#
+ local $_ = shift;
+
+ s! \\\\ !$g_escape_table{'\\'}!gx; # Must process escaped backslashes first.
+ s! \\` !$g_escape_table{'`'}!gx;
+ s! \\\* !$g_escape_table{'*'}!gx;
+ s! \\_ !$g_escape_table{'_'}!gx;
+ s! \\\{ !$g_escape_table{'{'}!gx;
+ s! \\\} !$g_escape_table{'}'}!gx;
+ s! \\\[ !$g_escape_table{'['}!gx;
+ s! \\\] !$g_escape_table{']'}!gx;
+ s! \\\( !$g_escape_table{'('}!gx;
+ s! \\\) !$g_escape_table{')'}!gx;
+ s! \\> !$g_escape_table{'>'}!gx;
+ s! \\\# !$g_escape_table{'#'}!gx;
+ s! \\\+ !$g_escape_table{'+'}!gx;
+ s! \\\- !$g_escape_table{'-'}!gx;
+ s! \\\. !$g_escape_table{'.'}!gx;
+ s{ \\! }{$g_escape_table{'!'}}gx;
+
+ return $_;
+}
+
+
+sub _DoAutoLinks {
+ my $text = shift;
+
+ $text =~ s{<((https?|ftp):[^'">\s]+)>}{$1 }gi;
+
+ # Email addresses:
+ $text =~ s{
+ <
+ (?:mailto:)?
+ (
+ [-.\w]+
+ \@
+ [-a-z0-9]+(\.[-a-z0-9]+)*\.[a-z]+
+ )
+ >
+ }{
+ _EncodeEmailAddress( _UnescapeSpecialChars($1) );
+ }egix;
+
+ return $text;
+}
+
+
+sub _EncodeEmailAddress {
+#
+# Input: an email address, e.g. "foo @ example.com"
+#
+# Output: the email address as a mailto link, with each character
+# of the address encoded as either a decimal or hex entity, in
+# the hopes of foiling most address harvesting spam bots. E.g.:
+#
+# foo
+# @example.com
+#
+# Based on a filter by Matthew Wickline, posted to the BBEdit-Talk
+# mailing list:
+#
+
+ my $addr = shift;
+
+ srand;
+ my @encode = (
+ sub { '' . ord(shift) . ';' },
+ sub { '' . sprintf( "%X", ord(shift) ) . ';' },
+ sub { shift },
+ );
+
+ $addr = "mailto:" . $addr;
+
+ $addr =~ s{(.)}{
+ my $char = $1;
+ if ( $char eq '@' ) {
+ # this *must* be encoded. I insist.
+ $char = $encode[int rand 1]->($char);
+ } elsif ( $char ne ':' ) {
+ # leave ':' alone (to spot mailto: later)
+ my $r = rand;
+ # roughly 10% raw, 45% hex, 45% dec
+ $char = (
+ $r > .9 ? $encode[2]->($char) :
+ $r < .45 ? $encode[1]->($char) :
+ $encode[0]->($char)
+ );
+ }
+ $char;
+ }gex;
+
+ $addr = qq{$addr };
+ $addr =~ s{">.+?:}{">}; # strip the mailto: from the visible part
+
+ return $addr;
+}
+
+
+sub _UnescapeSpecialChars {
+#
+# Swap back in all the special characters we've hidden.
+#
+ my $text = shift;
+
+ while( my($char, $hash) = each(%g_escape_table) ) {
+ $text =~ s/$hash/$char/g;
+ }
+ return $text;
+}
+
+
+sub _TokenizeHTML {
+#
+# Parameter: String containing HTML markup.
+# Returns: Reference to an array of the tokens comprising the input
+# string. Each token is either a tag (possibly with nested,
+# tags contained therein, such as , or a
+# run of text between tags. Each element of the array is a
+# two-element array; the first is either 'tag' or 'text';
+# the second is the actual value.
+#
+#
+# Derived from the _tokenize() subroutine from Brad Choate's MTRegex plugin.
+#
+#
+
+ my $str = shift;
+ my $pos = 0;
+ my $len = length $str;
+ my @tokens;
+
+ my $depth = 6;
+ my $nested_tags = join('|', ('(?:<[a-z/!$](?:[^<>]') x $depth) . (')*>)' x $depth);
+ my $match = qr/(?s: ) | # comment
+ (?s: <\? .*? \?> ) | # processing instruction
+ $nested_tags/ix; # nested tags
+
+ while ($str =~ m/($match)/g) {
+ my $whole_tag = $1;
+ my $sec_start = pos $str;
+ my $tag_start = $sec_start - length $whole_tag;
+ if ($pos < $tag_start) {
+ push @tokens, ['text', substr($str, $pos, $tag_start - $pos)];
+ }
+ push @tokens, ['tag', $whole_tag];
+ $pos = pos $str;
+ }
+ push @tokens, ['text', substr($str, $pos, $len - $pos)] if $pos < $len;
+ \@tokens;
+}
+
+
+sub _Outdent {
+#
+# Remove one level of line-leading tabs or spaces
+#
+ my $text = shift;
+
+ $text =~ s/^(\t|[ ]{1,$g_tab_width})//gm;
+ return $text;
+}
+
+
+sub _Detab {
+#
+# Cribbed from a post by Bart Lateur:
+#
+#
+ my $text = shift;
+
+ $text =~ s{(.*?)\t}{$1.(' ' x ($g_tab_width - length($1) % $g_tab_width))}ge;
+ return $text;
+}
+
+
+1;
+
+__END__
+
+
+=pod
+
+=head1 NAME
+
+B
+
+
+=head1 SYNOPSIS
+
+B [ B<--html4tags> ] [ B<--version> ] [ B<-shortversion> ]
+ [ I ... ]
+
+
+=head1 DESCRIPTION
+
+Markdown is a text-to-HTML filter; it translates an easy-to-read /
+easy-to-write structured text format into HTML. Markdown's text format
+is most similar to that of plain text email, and supports features such
+as headers, *emphasis*, code blocks, blockquotes, and links.
+
+Markdown's syntax is designed not as a generic markup language, but
+specifically to serve as a front-end to (X)HTML. You can use span-level
+HTML tags anywhere in a Markdown document, and you can use block level
+HTML tags (like and
as well).
+
+For more information about Markdown's syntax, see:
+
+ http://daringfireball.net/projects/markdown/
+
+
+=head1 OPTIONS
+
+Use "--" to end switch parsing. For example, to open a file named "-z", use:
+
+ Markdown.pl -- -z
+
+=over 4
+
+
+=item B<--html4tags>
+
+Use HTML 4 style for empty element tags, e.g.:
+
+
+
+instead of Markdown's default XHTML style tags, e.g.:
+
+
+
+
+=item B<-v>, B<--version>
+
+Display Markdown's version number and copyright information.
+
+
+=item B<-s>, B<--shortversion>
+
+Display the short-form version number.
+
+
+=back
+
+
+
+=head1 BUGS
+
+To file bug reports or feature requests (other than topics listed in the
+Caveats section above) please send email to:
+
+ support @ daringfireball.net
+
+Please include with your report: (1) the example input; (2) the output
+you expected; (3) the output Markdown actually produced.
+
+
+=head1 VERSION HISTORY
+
+See the readme file for detailed release notes for this version.
+
+1.0.1 - 14 Dec 2004
+
+1.0 - 28 Aug 2004
+
+
+=head1 AUTHOR
+
+ John Gruber
+ http://daringfireball.net
+
+ PHP port and other contributions by Michel Fortin
+ http://michelf.com
+
+
+=head1 COPYRIGHT AND LICENSE
+
+Copyright (c) 2003-2004 John Gruber
+
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+* Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+* Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+
+* Neither the name "Markdown" nor the names of its contributors may
+ be used to endorse or promote products derived from this software
+ without specific prior written permission.
+
+This software is provided by the copyright holders and contributors "as
+is" and any express or implied warranties, including, but not limited
+to, the implied warranties of merchantability and fitness for a
+particular purpose are disclaimed. In no event shall the copyright owner
+or contributors be liable for any direct, indirect, incidental, special,
+exemplary, or consequential damages (including, but not limited to,
+procurement of substitute goods or services; loss of use, data, or
+profits; or business interruption) however caused and on any theory of
+liability, whether in contract, strict liability, or tort (including
+negligence or otherwise) arising in any way out of the use of this
+software, even if advised of the possibility of such damage.
+
+=cut
Modified: trunk/doc/convtext.bat
===================================================================
--- trunk/doc/convtext.bat 2019-03-01 10:20:20 UTC (rev 7455)
+++ trunk/doc/convtext.bat 2019-03-02 16:18:47 UTC (rev 7456)
@@ -16,3 +16,7 @@
%TOSJIS% -i ..\cygterm\COPYING -o %REF_J%\CygTerm+-LICENSE.txt -l unix
%ZLIBCP% -i ..\libs\zlib\README -o %REF_E%\zlib-LICENSE.txt -l unix
%ZLIBCP% -i ..\libs\zlib\README -o %REF_J%\zlib-LICENSE.txt -l unix
+
+sed -e '1s/^\xef\xbb\xbf//' < ja/html/reference/build_with_cmake.md > ja/html/reference/build_with_cmake_without_bom.md
+perl Markdown_1.0.1/Markdown.pl ja/html/reference/build_with_cmake_without_bom.md > ja/html/reference/build_with_cmake_utf8.html
+%TOSJIS% -i ja/html/reference/build_with_cmake_utf8.html -o ja/html/reference/build_with_cmake.html -c utf8
Added: trunk/doc/ja/html/reference/build_with_cmake.md
===================================================================
--- trunk/doc/ja/html/reference/build_with_cmake.md (rev 0)
+++ trunk/doc/ja/html/reference/build_with_cmake.md 2019-03-02 16:18:47 UTC (rev 7456)
@@ -0,0 +1,32 @@
+# cmakeを使ったビルド
+
+- 実験的に cmake を使用してビルドすることができます
+- cmake https://cmake.org/
+
+## cmakeのバージョン
+
+- Visual Studio 2005 をサポートしている cmake の最後のバージョンは 3.11.4 です
+- 2005 以外の Visual Studio を使用する場合は特に制限はありません
+- Visual Studio 2017 インストーラーで、オプションを選べば cmake をインストールできます
+
+## ライブラリのビルド
+
+- teraterm が使用するライブラリをビルドして準備しておきます
+- `lib/build_library_with_cmake.md` を参照してください
+- ライブラリは `develop.txt` を参照してください
+
+## teratermのビルド
+
+- ソースツリーのトップから、次のようにコマンドを実行します
+ ```
+ mkdir build_vs2005
+ cd build_vs2005
+ "c:\Program Files (x86)\CMake-3.11.4\bin\cmake.exe" .. -G "Visual Studio 8 2005"
+ ```
+ - パスが通っていれば cmake はフルパスで書く必要はありません
+ - `-G` オプションの後ろは使用する Visual Studio のバージョンに合わせて調整します
+- sln ファイルが生成されるので Visual Studio で開くことができます
+- cmakeを使ってビルドする場合は次のコマンドを実行します
+ ```
+ cmake --build . --config release
+ ```
Added: trunk/libs/.gitignore
===================================================================
--- trunk/libs/.gitignore (rev 0)
+++ trunk/libs/.gitignore 2019-03-02 16:18:47 UTC (rev 7456)
@@ -0,0 +1 @@
+*/
Added: trunk/libs/SFMT.cmake
===================================================================
--- trunk/libs/SFMT.cmake (rev 0)
+++ trunk/libs/SFMT.cmake 2019-03-02 16:18:47 UTC (rev 7456)
@@ -0,0 +1,171 @@
+# cmake -DCMAKE_GENERATOR="Visual Studio 15 2017" -P SFMT.cmake
+# cmake -DCMAKE_GENERATOR="Visual Studio 15 2017" -DCMAKE_CONFIGURATION_TYPE=Release -P SFMT.cmake
+
+####
+if(("${CMAKE_BUILD_TYPE}" STREQUAL "") AND ("${CMAKE_CONFIGURATION_TYPE}" STREQUAL ""))
+ if("${CMAKE_GENERATOR}" MATCHES "Visual Studio")
+ # multi-configuration
+ execute_process(
+ COMMAND ${CMAKE_COMMAND}
+ -DCMAKE_GENERATOR=${CMAKE_GENERATOR}
+ -DCMAKE_CONFIGURATION_TYPE=Release
+ -DCMAKE_TOOLCHAIN_FILE=${CMAKE_SOURCE_DIR}/VSToolchain.cmake
+ -P SFMT.cmake
+ )
+ execute_process(
+ COMMAND ${CMAKE_COMMAND}
+ -DCMAKE_GENERATOR=${CMAKE_GENERATOR}
+ -DCMAKE_CONFIGURATION_TYPE=Debug
+ -DCMAKE_TOOLCHAIN_FILE=${CMAKE_SOURCE_DIR}/VSToolchain.cmake
+ -P SFMT.cmake
+ )
+ return()
+ elseif("$ENV{MSYSTEM}" MATCHES "MINGW")
+ # mingw on msys2
+ if("${CMAKE_BUILD_TYPE}" STREQUAL "")
+ set(CMAKE_BUILD_TYPE Release)
+ endif()
+ elseif("${CMAKE_GENERATOR}" MATCHES "Unix Makefiles")
+ # mingw
+ # single-configuration
+ if("${CMAKE_TOOLCHAIN_FILE}" STREQUAL "")
+ set(CMAKE_TOOLCHAIN_FILE "${CMAKE_SOURCE_DIR}/../mingw.toolchain.cmake")
+ endif()
+ if("${CMAKE_BUILD_TYPE}" STREQUAL "")
+ set(CMAKE_BUILD_TYPE Release)
+ endif()
+ elseif("${CMAKE_GENERATOR}" MATCHES "NMake Makefiles")
+ # VS nmake
+ # single-configuration
+ if("${CMAKE_TOOLCHAIN_FILE}" STREQUAL "")
+ set(CMAKE_TOOLCHAIN_FILE "${CMAKE_SOURCE_DIR}/VSToolchain.cmake")
+ endif()
+ if("${CMAKE_BUILD_TYPE}" STREQUAL "")
+ set(CMAKE_BUILD_TYPE Release)
+ endif()
+ else()
+ # single-configuration
+ if("${CMAKE_BUILD_TYPE}" STREQUAL "")
+ set(CMAKE_BUILD_TYPE Release)
+ endif()
+ endif()
+endif()
+
+include(script_support.cmake)
+
+set(SRC_DIR_BASE "SFMT-src-1.5.1")
+set(SRC_ARC "SFMT-1.5.1.zip")
+set(SRC_URL "http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/SFMT/SFMT-src-1.5.1.zip")
+set(SRC_ARC_HASH_SHA256 630d1dfa6b690c30472f75fa97ca90ba62f9c13c5add6c264fdac2c1d3a878f4)
+
+set(DOWN_DIR "${CMAKE_SOURCE_DIR}/download/SFMT")
+set(EXTRACT_DIR "${CMAKE_SOURCE_DIR}/build/SFMT/src")
+set(SRC_DIR "${CMAKE_SOURCE_DIR}/build/SFMT/src/${SRC_DIR_BASE}")
+set(BUILD_DIR "${CMAKE_SOURCE_DIR}/build/SFMT/build_${TOOLSET}")
+set(INSTALL_DIR "${CMAKE_SOURCE_DIR}/SFMT_${TOOLSET}")
+if(("${CMAKE_GENERATOR}" MATCHES "Win64") OR ("$ENV{MSYSTEM_CHOST}" STREQUAL "x86_64-w64-mingw32"))
+ set(BUILD_DIR "${BUILD_DIR}_x64")
+ set(INSTALL_DIR "${INSTALL_DIR}_x64")
+endif()
+
+########################################
+
+if(NOT EXISTS ${SRC_DIR}/README.txt)
+
+ file(DOWNLOAD
+ ${SRC_URL}
+ ${DOWN_DIR}/${SRC_ARC}
+ EXPECTED_HASH SHA256=${SRC_ARC_HASH_SHA256}
+ SHOW_PROGRESS
+ )
+
+ file(MAKE_DIRECTORY ${EXTRACT_DIR})
+
+ execute_process(
+ COMMAND ${CMAKE_COMMAND} -E tar "xvf" ${DOWN_DIR}/${SRC_ARC}
+ WORKING_DIRECTORY ${EXTRACT_DIR}
+ )
+
+endif()
+
+########################################
+
+if(NOT EXISTS ${SRC_DIR}/CMakeLists.txt)
+ file(WRITE "${SRC_DIR}/CMakeLists.txt"
+ "cmake_minimum_required(VERSION 2.4.4)\n"
+ "project(SFMT C)\n"
+ "\n"
+ "if(MSVC)\n"
+ " set(CMAKE_DEBUG_POSTFIX \"d\")\n"
+ "endif()\n"
+ "\n"
+ "add_library(\n"
+ " sfmt STATIC\n"
+ " SFMT.c\n"
+ " )\n"
+ "\n"
+ "install(\n"
+ " TARGETS sfmt\n"
+ " ARCHIVE DESTINATION \${CMAKE_INSTALL_PREFIX}/lib\n"
+ " )\n"
+ "install(\n"
+ " FILES SFMT.h SFMT-params.h SFMT-params19937.h\n"
+ " DESTINATION \${CMAKE_INSTALL_PREFIX}/include\n"
+ " )\n"
+ )
+endif()
+
+########################################
+
+file(MAKE_DIRECTORY "${BUILD_DIR}")
+
+if("${CMAKE_GENERATOR}" MATCHES "Visual Studio")
+
+ ######################################## multi configuration
+
+ execute_process(
+ COMMAND ${CMAKE_COMMAND} ${SRC_DIR} -G ${CMAKE_GENERATOR}
+ -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}
+ -DCMAKE_INSTALL_PREFIX=${INSTALL_DIR}
+ ${TOOLCHAINFILE}
+ WORKING_DIRECTORY ${BUILD_DIR}
+ RESULT_VARIABLE rv
+ )
+ if(NOT rv STREQUAL "0")
+ message(FATAL_ERROR "cmake generate fail ${rv}")
+ endif()
+
+ execute_process(
+ COMMAND ${CMAKE_COMMAND} --build . --config ${CMAKE_CONFIGURATION_TYPE} --target install
+ WORKING_DIRECTORY ${BUILD_DIR}
+ RESULT_VARIABLE rv
+ )
+ if(NOT rv STREQUAL "0")
+ message(FATAL_ERROR "cmake install fail ${rv}")
+ endif()
+
+else()
+ ######################################## single configuration
+
+ execute_process(
+ COMMAND ${CMAKE_COMMAND} ${SRC_DIR} -G ${CMAKE_GENERATOR}
+ -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
+ -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}
+ -DCMAKE_INSTALL_PREFIX=${INSTALL_DIR}
+ WORKING_DIRECTORY ${BUILD_DIR}
+ RESULT_VARIABLE rv
+ )
+ if(NOT rv STREQUAL "0")
+ message(FATAL_ERROR "cmake build fail ${rv}")
+ endif()
+
+ execute_process(
+ COMMAND ${CMAKE_COMMAND} --build . --target install
+ WORKING_DIRECTORY ${BUILD_DIR}
+ RESULT_VARIABLE rv
+ )
+ if(NOT rv STREQUAL "0")
+ message(FATAL_ERROR "cmake install fail ${rv}")
+ endif()
+
+endif()
Added: trunk/libs/VSToolchain.cmake
===================================================================
--- trunk/libs/VSToolchain.cmake (rev 0)
+++ trunk/libs/VSToolchain.cmake 2019-03-02 16:18:47 UTC (rev 7456)
@@ -0,0 +1,5 @@
+# write to CMakeCache.txt
+set(CMAKE_C_FLAGS_DEBUG "/DWIN32 /D_WINDOWS /W3 /MTd /Zi /Ob0 /Od /RTC1" CACHE STRING "" FORCE)
+set(CMAKE_CXX_FLAGS_DEBUG "/DWIN32 /D_WINDOWS /W3 /MTd /Zi /Ob0 /Od /RTC1" CACHE STRING "" FORCE)
+set(CMAKE_C_FLAGS_RELEASE "/DWIN32 /D_WINDOWS /W3 /MT /O2 /Ob2 /DNDEBUG" CACHE STRING "" FORCE)
+set(CMAKE_CXX_FLAGS_RELEASE "/DWIN32 /D_WINDOWS /W3 /MT /O2 /Ob2 /DNDEBUG" CACHE STRING "" FORCE)
Added: trunk/libs/build_library_with_cmake.md
===================================================================
--- trunk/libs/build_library_with_cmake.md (rev 0)
+++ trunk/libs/build_library_with_cmake.md 2019-03-02 16:18:47 UTC (rev 7456)
@@ -0,0 +1,76 @@
+
+# libフォルダ
+
+- teratermが利用する外部のライブラリをビルドするためのフォルダ
+- コンパイラ向けに各々ビルド
+- 1度ビルドしてライブラリを生成しておく
+
+# 準備
+
+## Visual Studio
+
+- cmake
+ - PATHが通してあればok
+ - cygwinのcmakeはつかえない(Visual Studioをサポートしていない)
+ - Visual Studio 2005 を使う場合は cmake 3.11.4 を使用する必要がある
+- perl
+ - OpenSSL のコンパイル、ドキュメントファイルの文字コード・改行コード変換に必要
+ - ActivePerl 5.8 以上、または cygwin perl
+ - PATHが通っていなければ自動で探す
+
+## MinGW 共通 (experimental)
+
+- Cygwin,MSYS2,linux(wsl)上のMinGWでビルド可能
+- 各環境で動作するcmake,make,(MinGW)gcc,perlが必要
+
+# ビルド手順
+
+必要なアーカイブを自動的にダウンロードするので、
+インターネットが利用できる環境でビルドする必要がある
+
+## Visual Studioの場合
+
+### batファイルを使用する場合
+
+- 自動的にビルド
+- buildall_cmake.bat を実行
+- コンパイルに使用する Visual Studioを選ぶ
+- VS2005の場合はcmake 3.11.4 をダウンロードして
+ libs\cmake-3.11.4-win32-x86 にインストールする
+
+### cmakeを使用する場合
+
+- cmakeを使える状態にしてcmakeを実行
+ - `cmake -DCMAKE_GENERATOR="Visual Studio 15 2017" -P buildall.cmake`
+ - `cmake -DCMAKE_GENERATOR="Visual Studio 15 2017 Win64" -P buildall.cmake`
+- Visual Studio 2005の場合は、cmakeのバージョン3.11.4以前を使用する
+ - cmake が libs\cmake-3.11.4-win32-x86 にインストールしてある場合
+ `"libs\cmake-3.11.4-win32-x86\bin\cmake.exe" -DCMAKE_GENERATOR="Visual Studio 8 2005" -P buildall.cmake`
+
+## MinGW 共通
+
+- 各々の環境のcmakeを使って
+ `cmake -DCMAKE_GENERATOR="Unix Makefiles" -P buildall.cmake` を実行
+
+# 各フォルダについて
+
+## 生成されるライブラリフォルダ
+
+- 次のフォルダにライブラリの`*.h`,`*.lib`が生成される
+ - oniguruma_{compiler}
+ - openssl_{compiler}
+ - putty
+ - SFMT_{compiler}
+ - zlib_{compiler}
+
+## download アーカイブダウンロードフォルダ
+
+- ダウンロードしたアーカイブファイルが置かれる
+- 自動でダウンロードされる
+- ダウンロードされていると再利用する
+- ビルド後、参照する必要がなければ削除できる
+
+## build ビルドフォルダ
+
+- build/oniguruma_{compiler}/ などの下でビルドされる
+- ビルド後、参照する必要がなければ削除できる
Added: trunk/libs/buildall.cmake
===================================================================
--- trunk/libs/buildall.cmake (rev 0)
+++ trunk/libs/buildall.cmake 2019-03-02 16:18:47 UTC (rev 7456)
@@ -0,0 +1,23 @@
+# cmake -DCMAKE_GENERATOR="Vsual Studio 15 2017" -P buildall.cmake
+# cmake -DCMAKE_GENERATOR="Unix Makefiles" -P buildall.cmake -DCMAKE_TOOLCHAIN_FILE=../mingw.toolchain.cmake
+
+if("${CMAKE_GENERATOR}" STREQUAL "")
+ message(FATAL_ERROR "set CMAKE_GENERATOR!")
+endif()
+
+# build
+execute_process(
+ COMMAND ${CMAKE_COMMAND} -DCMAKE_GENERATOR=${CMAKE_GENERATOR} -P oniguruma.cmake
+ )
+execute_process(
+ COMMAND ${CMAKE_COMMAND} -DCMAKE_GENERATOR=${CMAKE_GENERATOR} -P zlib.cmake
+ )
+execute_process(
+ COMMAND ${CMAKE_COMMAND} -P putty.cmake
+ )
+execute_process(
+ COMMAND ${CMAKE_COMMAND} -DCMAKE_GENERATOR=${CMAKE_GENERATOR} -P SFMT.cmake
+ )
+execute_process(
+ COMMAND ${CMAKE_COMMAND} -DCMAKE_GENERATOR=${CMAKE_GENERATOR} -P openssl.cmake
+ )
Added: trunk/libs/buildall_cmake.bat
===================================================================
--- trunk/libs/buildall_cmake.bat (rev 0)
+++ trunk/libs/buildall_cmake.bat 2019-03-02 16:18:47 UTC (rev 7456)
@@ -0,0 +1,75 @@
+ @ echo off
+setlocal
+cd /d %~dp0
+
+set CMAKE="cmake.exe2"
+set opt=
+
+:retry_vs
+echo 1. Visual Studio 15 2017
+echo 2. Visual Studio 14 2015
+echo 3. Visual Studio 12 2013
+echo 4. Visual Studio 11 2012
+echo 5. Visual Studio 10 2010
+echo 6. Visual Studio 9 2008
+echo 7. Visual Studio 8 2005
+rem echo 9. Visual Studio NMake (experimental)
+rem echo z. Cygwin MinGW Release + Unix Makefiles (experimental)
+set /p no="select no "
+
+echo %no%
+if "%no%" == "1" set GENERATOR="Visual Studio 15 2017" & goto build_all
+if "%no%" == "2" set GENERATOR="Visual Studio 14 2015" & goto build_all
+if "%no%" == "3" set GENERATOR="Visual Studio 12 2013" & goto build_all
+if "%no%" == "4" set GENERATOR="Visual Studio 11 2012" & goto build_all
+if "%no%" == "5" set GENERATOR="Visual Studio 10 2010" & goto build_all
+if "%no%" == "6" set GENERATOR="Visual Studio 9 2008" & goto build_all
+if "%no%" == "7" set GENERATOR="Visual Studio 8 2005" & call :cmake_3_11_4 & goto build_all_2
+if "%no%" == "9" set GENERATOR="NMake Makefiles" & set OPT=-DCMAKE_BUILD_TYPE=Release & goto build_all
+if "%no%" == "z" set GENERATOR="Unix Makefiles" & set OPT=-DCMAKE_TOOLCHAIN_FILE=../mingw.toolchain.cmake & goto build_all
+echo ? retry
+goto retry_vs
+
+:build_all
+where %CMAKE%
+if %errorlevel% == 0 goto build_all_2
+set CMAKE="C:\Program Files\CMake\bin\cmake.exe"
+if exist %CMAKE% echo %CMAKE% \x82\xF0\x8Eg\x97p & goto build_all_2
+echo cmake\x82\xAA\x8C\xA9\x82\xA9\x82\xE8\x82܂\xB9\x82\xF1
+pause
+exit
+
+:build_all_2
+set C=%CMAKE% -DCMAKE_GENERATOR=%GENERATOR% %OPT% -P buildall.cmake
+echo %C%
+title %C%
+pause
+%C%
+
+:finish
+echo build complete
+endlocal
+pause
+exit
+
+:cmake_3_11_4
+set CMAKE=%~dp0cmake-3.11.4-win32-x86\bin\cmake.exe
+echo 1. \x8E\xA9\x95\xAA\x82\xCCcmake.exe\x82\xF0\x8Eg\x97p\x82\xB7\x82\xE9(PATH\x82\xF0\x92ʂ\xB5\x82Ă\xA0\x82\xE9)
+echo 2. VS2005\x82ł\xE0\x8Eg\x97p\x82ł\xAB\x82\xE9cmake\x8Eg\x97p\x82\xB7\x82\xE9
+echo (\x95K\x97v\x82Ȃ玩\x93\xAE\x82Ń_\x83E\x83\x93\x83\x8D\x81[\x83h\x82\xB5\x82āA\x82\xB1\x82̃t\x83H\x83\x8B\x83_\x82ɃC\x83\x93\x83X\x83g\x81[\x83\x8B\x82\xB7\x82\xE9)
+if exist %CMAKE% echo \x83C\x83\x93\x83X\x83g\x81[\x83\x8B\x8Dς\xDD(%CMAKE%)
+
+set /p no="select no "
+echo %no%
+if "%no%" == "2" goto download
+
+set CMAKE="cmake.exe"
+where %CMAKE%
+goto finish_cmake
+
+:download
+if exist %CMAKE% goto finish_cmake
+call getcmake.bat
+
+:finish_cmake
+exit /b
Added: trunk/libs/getcmake.bat
===================================================================
--- trunk/libs/getcmake.bat (rev 0)
+++ trunk/libs/getcmake.bat 2019-03-02 16:18:47 UTC (rev 7456)
@@ -0,0 +1,8 @@
+ @ echo off
+setlocal
+cd /d %~dp0
+echo cmake\x82\xF0\x83_\x83E\x83\x93\x83\x8D\x81[\x83h\x82\xB5\x82\xC4lib/cmake\x82ɓW\x8AJ\x82\xB5\x82܂\xB7
+pause
+powershell -NoProfile -ExecutionPolicy Unrestricted .\getcmake.ps1
+endlocal
+pause
Added: trunk/libs/getcmake.ps1
===================================================================
--- trunk/libs/getcmake.ps1 (rev 0)
+++ trunk/libs/getcmake.ps1 2019-03-02 16:18:47 UTC (rev 7456)
@@ -0,0 +1,33 @@
+$CMAKE_URL = "https://cmake.org/files/v3.11/cmake-3.11.4-win32-x86.zip"
+$CMAKE_ZIP = ($CMAKE_URL -split "/")[-1]
+$CMAKE_DIR = [System.IO.Path]::GetFileNameWithoutExtension($CMAKE_ZIP)
+
+$CMAKE_ZIP = "download\cmake\" + $CMAKE_ZIP
+
+echo $CMAKE_URL
+echo $CMAKE_ZIP
+echo $CMAKE_DIR
+
+# TLS1.2 \x82\xF0\x97L\x8C\xF8\x82ɂ\xB7\x82\xE9 (cmake.org\x82\xCD TLS1.2)
+# [Net.ServicePointManager]::SecurityProtocol
+# \x82\xF0\x8E\xC0\x8Ds\x82\xB5\x82\xC4 "Ssl3, Tls" \x82Əo\x82\xBD\x8Fꍇ\x81ATLS1.2\x82͖\xB3\x8C\xF8\x82ƂȂ\xC1\x82Ă\xA2\x82\xE9
+[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::Tls12;
+
+# \x93W\x8AJ\x8Dς݃t\x83H\x83\x8B\x83_\x82\xAA\x82\xA0\x82\xE9?
+if((Test-Path $CMAKE_DIR) -eq $true) {
+ # \x8D폜\x82\xB7\x82\xE9
+ Remove-Item -Recurse -Force $CMAKE_DIR
+ # \x8FI\x97\xB9\x82\xB7\x82\xE9
+ #exit
+}
+
+# \x83_\x83E\x83\x93\x83\x8D\x81[\x83h\x82\xB7\x82\xE9
+if((Test-Path $CMAKE_ZIP) -eq $false) {
+ if((Test-Path "download\cmake") -ne $true) {
+ mkdir "download\cmake"
+ }
+ wget $CMAKE_URL -Outfile $CMAKE_ZIP
+}
+
+# \x93W\x8AJ\x82\xB7\x82\xE9
+Expand-Archive $CMAKE_ZIP -DestinationPath .
Added: trunk/libs/lib_SFMT.cmake
===================================================================
--- trunk/libs/lib_SFMT.cmake (rev 0)
+++ trunk/libs/lib_SFMT.cmake 2019-03-02 16:18:47 UTC (rev 7456)
@@ -0,0 +1,15 @@
+
+include(${CMAKE_CURRENT_LIST_DIR}/script_support.cmake)
+
+set(SFMT_ROOT ${CMAKE_CURRENT_LIST_DIR}/SFMT_${TOOLSET})
+if(CMAKE_SIZEOF_VOID_P EQUAL 8)
+ set(SFMT_ROOT "${SFMT_ROOT}_x64")
+endif()
+
+set(SFMT_INCLUDE_DIRS
+ "${SFMT_ROOT}/include"
+ )
+
+set(SFMT_LIBRARY_DIRS
+ "${SFMT_ROOT}/lib"
+ )
Added: trunk/libs/lib_oniguruma.cmake
===================================================================
--- trunk/libs/lib_oniguruma.cmake (rev 0)
+++ trunk/libs/lib_oniguruma.cmake 2019-03-02 16:18:47 UTC (rev 7456)
@@ -0,0 +1,13 @@
+
+include(${CMAKE_CURRENT_LIST_DIR}/script_support.cmake)
+
+set(ONIGURUMA_ROOT ${CMAKE_CURRENT_LIST_DIR}/oniguruma_${TOOLSET})
+if(CMAKE_SIZEOF_VOID_P EQUAL 8)
+ set(ONIGURUMA_ROOT "${ONIGURUMA_ROOT}_x64")
+endif()
+
+#set(ONIGURUMA_DIR "${ONIGURUMA_ROOT}/lib/cmake/oniguruma")
+#find_package(ONIGURUMA REQUIRED)
+set(ONIGURUMA_INCLUDE_DIRS ${ONIGURUMA_ROOT}/include)
+set(ONIGURUMA_LIBRARY_DIRS ${ONIGURUMA_ROOT}/lib)
+
Added: trunk/libs/lib_openssl.cmake
===================================================================
--- trunk/libs/lib_openssl.cmake (rev 0)
+++ trunk/libs/lib_openssl.cmake 2019-03-02 16:18:47 UTC (rev 7456)
@@ -0,0 +1,27 @@
+
+include(${CMAKE_CURRENT_LIST_DIR}/script_support.cmake)
+
+set(OPENSSL_ROOT ${CMAKE_CURRENT_LIST_DIR}/openssl_${TOOLSET})
+if(CMAKE_SIZEOF_VOID_P EQUAL 8)
+ set(OPENSSL_ROOT "${OPENSSL_ROOT}_x64")
+endif()
+
+if(MINGW)
+ set(OPENSSL_INCLUDE_DIRS
+ ${OPENSSL_ROOT}/include
+ )
+
+ set(OPENSSL_LIB
+ ${OPENSSL_ROOT}/lib/libcrypto.a
+ )
+else()
+ set(OPENSSL_INCLUDE_DIRS
+ "$<$:${OPENSSL_ROOT}_debug/include>"
+ "$<$:${OPENSSL_ROOT}/include>"
+ )
+
+ set(OPENSSL_LIB
+ debug ${OPENSSL_ROOT}_debug/lib/libeay32.lib
+ optimized ${OPENSSL_ROOT}/lib/libeay32.lib
+ )
+endif()
Added: trunk/libs/lib_zlib.cmake
===================================================================
--- trunk/libs/lib_zlib.cmake (rev 0)
+++ trunk/libs/lib_zlib.cmake 2019-03-02 16:18:47 UTC (rev 7456)
@@ -0,0 +1,10 @@
+
+include(${CMAKE_CURRENT_LIST_DIR}/script_support.cmake)
+
+set(ZLIB_ROOT ${CMAKE_CURRENT_LIST_DIR}/zlib_${TOOLSET})
+if(CMAKE_SIZEOF_VOID_P EQUAL 8)
+ set(ZLIB_ROOT "${ZLIB_ROOT}_x64")
+endif()
+
+set(ZLIB_INCLUDE_DIRS ${ZLIB_ROOT}/include)
+set(ZLIB_LIBRARY_DIRS ${ZLIB_ROOT}/lib)
Added: trunk/libs/oniguruma.cmake
===================================================================
--- trunk/libs/oniguruma.cmake (rev 0)
+++ trunk/libs/oniguruma.cmake 2019-03-02 16:18:47 UTC (rev 7456)
@@ -0,0 +1,147 @@
+# cmake -DCMAKE_GENERATOR="Visual Studio 15 2017" -P oniguruma.cmake
+# cmake -DCMAKE_GENERATOR="Visual Studio 15 2017" -DCMAKE_CONFIGURATION_TYPE=Release -P oniguruma.cmake
+
+####
+if(("${CMAKE_BUILD_TYPE}" STREQUAL "") AND ("${CMAKE_CONFIGURATION_TYPE}" STREQUAL ""))
+ if("${CMAKE_GENERATOR}" MATCHES "Visual Studio")
+ # multi-configuration
+ execute_process(
+ COMMAND ${CMAKE_COMMAND}
+ -DCMAKE_GENERATOR=${CMAKE_GENERATOR}
+ -DCMAKE_CONFIGURATION_TYPE=Release
+ -DCMAKE_TOOLCHAIN_FILE=${CMAKE_SOURCE_DIR}/VSToolchain.cmake
+ -P oniguruma.cmake
+ )
+ execute_process(
+ COMMAND ${CMAKE_COMMAND}
+ -DCMAKE_GENERATOR=${CMAKE_GENERATOR}
+ -DCMAKE_CONFIGURATION_TYPE=Debug
+ -DCMAKE_TOOLCHAIN_FILE=${CMAKE_SOURCE_DIR}/VSToolchain.cmake
+ -P oniguruma.cmake
+ )
+ return()
+ elseif("$ENV{MSYSTEM}" MATCHES "MINGW")
+ # mingw on msys2
+ if("${CMAKE_BUILD_TYPE}" STREQUAL "")
+ set(CMAKE_BUILD_TYPE Release)
+ endif()
+ elseif("${CMAKE_GENERATOR}" MATCHES "Unix Makefiles")
+ # mingw
+ # single-configuration
+ if("${CMAKE_TOOLCHAIN_FILE}" STREQUAL "")
+ set(CMAKE_TOOLCHAIN_FILE "${CMAKE_SOURCE_DIR}/../mingw.toolchain.cmake")
+ endif()
+ if("${CMAKE_BUILD_TYPE}" STREQUAL "")
+ set(CMAKE_BUILD_TYPE Release)
+ endif()
+ elseif("${CMAKE_GENERATOR}" MATCHES "NMake Makefiles")
+ # VS nmake
+ # single-configuration
+ if("${CMAKE_TOOLCHAIN_FILE}" STREQUAL "")
+ set(CMAKE_TOOLCHAIN_FILE "${CMAKE_SOURCE_DIR}/VSToolchain.cmake")
+ endif()
+ if("${CMAKE_BUILD_TYPE}" STREQUAL "")
+ set(CMAKE_BUILD_TYPE Release)
+ endif()
+ else()
+ # single-configuration
+ if("${CMAKE_BUILD_TYPE}" STREQUAL "")
+ set(CMAKE_BUILD_TYPE Release)
+ endif()
+ endif()
+endif()
+
+include(script_support.cmake)
+
+set(SRC_DIR_BASE "onig-6.9.0")
+set(SRC_ARC "onig-6.9.0.tar.gz")
+set(SRC_URL "https://github.com/kkos/oniguruma/releases/download/v6.9.0/onig-6.9.0.tar.gz")
+set(SRC_ARC_HASH_SHA1 8e3e39e8e92f040939922ddc367a56c12bd4c4c3)
+
+set(DOWN_DIR "${CMAKE_SOURCE_DIR}/download/oniguruma")
+set(EXTRACT_DIR "${CMAKE_SOURCE_DIR}/build/oniguruma/src")
+set(SRC_DIR "${CMAKE_SOURCE_DIR}/build/oniguruma/src/${SRC_DIR_BASE}")
+set(BUILD_DIR "${CMAKE_SOURCE_DIR}/build/oniguruma/build_${TOOLSET}")
+set(INSTALL_DIR "${CMAKE_SOURCE_DIR}/oniguruma_${TOOLSET}")
+if(("${CMAKE_GENERATOR}" MATCHES "Win64") OR ("$ENV{MSYSTEM_CHOST}" STREQUAL "x86_64-w64-mingw32"))
+ set(BUILD_DIR "${BUILD_DIR}_x64")
+ set(INSTALL_DIR "${INSTALL_DIR}_x64")
+endif()
+
+########################################
+
+if(NOT EXISTS ${SRC_DIR}/README.md)
+
+ file(DOWNLOAD
+ ${SRC_URL}
+ ${DOWN_DIR}/${SRC_ARC}
+ EXPECTED_HASH SHA1=${SRC_ARC_HASH_SHA1}
+ SHOW_PROGRESS
+ )
+
+ file(MAKE_DIRECTORY ${EXTRACT_DIR})
+
+ execute_process(
+ COMMAND ${CMAKE_COMMAND} -E tar "xvf" ${DOWN_DIR}/${SRC_ARC}
+ WORKING_DIRECTORY ${EXTRACT_DIR}
+ )
+
+endif()
+
+########################################
+
+file(MAKE_DIRECTORY "${BUILD_DIR}")
+
+if("${CMAKE_GENERATOR}" MATCHES "Visual Studio")
+
+ ######################################## multi configuration
+
+ execute_process(
+ COMMAND ${CMAKE_COMMAND} ${SRC_DIR} -G ${CMAKE_GENERATOR}
+ -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}
+ -DCMAKE_INSTALL_PREFIX=${INSTALL_DIR}
+ ${TOOLCHAINFILE}
+ -DCMAKE_DEBUG_POSTFIX=d
+ -DBUILD_SHARED_LIBS=OFF
+ WORKING_DIRECTORY ${BUILD_DIR}
+ RESULT_VARIABLE rv
+ )
+ if(NOT rv STREQUAL "0")
+ message(FATAL_ERROR "cmake generate fail ${rv}")
+ endif()
+
+ execute_process(
+ COMMAND ${CMAKE_COMMAND} --build . --config ${CMAKE_CONFIGURATION_TYPE} --target install
+ WORKING_DIRECTORY ${BUILD_DIR}
+ RESULT_VARIABLE rv
+ )
+ if(NOT rv STREQUAL "0")
+ message(FATAL_ERROR "cmake install fail ${rv}")
+ endif()
+
+else()
+ ######################################## single configuration
+
+ execute_process(
+ COMMAND ${CMAKE_COMMAND} ${SRC_DIR} -G ${CMAKE_GENERATOR}
+ -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
+ -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}
+ -DCMAKE_INSTALL_PREFIX=${INSTALL_DIR}
+ -DBUILD_SHARED_LIBS=OFF
+ WORKING_DIRECTORY ${BUILD_DIR}
+ RESULT_VARIABLE rv
+ )
+ if(NOT rv STREQUAL "0")
+ message(FATAL_ERROR "cmake build fail ${rv}")
+ endif()
+
+ execute_process(
+ COMMAND ${CMAKE_COMMAND} --build . --target install
+ WORKING_DIRECTORY ${BUILD_DIR}
+ RESULT_VARIABLE rv
+ )
+ if(NOT rv STREQUAL "0")
+ message(FATAL_ERROR "cmake install fail ${rv}")
+ endif()
+
+endif()
Added: trunk/libs/openssl.cmake
===================================================================
--- trunk/libs/openssl.cmake (rev 0)
+++ trunk/libs/openssl.cmake 2019-03-02 16:18:47 UTC (rev 7456)
@@ -0,0 +1,304 @@
+# cmake -DCMAKE_GENERATOR="Visual Studio 15 2017" -P openssl.cmake
+# cmake -DCMAKE_GENERATOR="Visual Studio 15 2017" -DCMAKE_CONFIGURATION_TYPE=Release -P openssl.cmake
+
+####
+if(("${CMAKE_BUILD_TYPE}" STREQUAL "") AND ("${CMAKE_CONFIGURATION_TYPE}" STREQUAL ""))
+ if("${CMAKE_GENERATOR}" MATCHES "Visual Studio")
+ # multi-configuration
+ execute_process(
+ COMMAND ${CMAKE_COMMAND}
+ -DCMAKE_GENERATOR=${CMAKE_GENERATOR}
+ -DCMAKE_CONFIGURATION_TYPE=Release
+ -DCMAKE_TOOLCHAIN_FILE=${CMAKE_SOURCE_DIR}/VSToolchain.cmake
+ -P openssl.cmake
+ )
+ execute_process(
+ COMMAND ${CMAKE_COMMAND}
+ -DCMAKE_GENERATOR=${CMAKE_GENERATOR}
+ -DCMAKE_CONFIGURATION_TYPE=Debug
+ -DCMAKE_TOOLCHAIN_FILE=${CMAKE_SOURCE_DIR}/VSToolchain.cmake
+ -P openssl.cmake
+ )
+ return()
+ elseif("$ENV{MSYSTEM}" MATCHES "MINGW32")
+ # mingw on msys2
+ # single-configuration
+ if("${CMAKE_BUILD_TYPE}" STREQUAL "")
+ set(CMAKE_BUILD_TYPE Release)
+ endif()
+ elseif("${CMAKE_GENERATOR}" MATCHES "Unix Makefiles")
+ # mingw
+ # single-configuration
+ if("${CMAKE_TOOLCHAIN_FILE}" STREQUAL "")
+ set(CMAKE_TOOLCHAIN_FILE "${CMAKE_SOURCE_DIR}/../mingw.toolchain.cmake")
+ endif()
+ if("${CMAKE_BUILD_TYPE}" STREQUAL "")
+ set(CMAKE_BUILD_TYPE Release)
+ endif()
+ elseif("${CMAKE_GENERATOR}" MATCHES "NMake Makefiles")
+ # VS nmake
+ # single-configuration
+ if("${CMAKE_TOOLCHAIN_FILE}" STREQUAL "")
+ set(CMAKE_TOOLCHAIN_FILE "${CMAKE_SOURCE_DIR}/VSToolchain.cmake")
+ endif()
+ if("${CMAKE_BUILD_TYPE}" STREQUAL "")
+ set(CMAKE_BUILD_TYPE Release)
+ endif()
+ else()
+ # single-configuration
+ if("${CMAKE_BUILD_TYPE}" STREQUAL "")
+ set(CMAKE_BUILD_TYPE Release)
+ endif()
+ endif()
+endif()
+
+include(script_support.cmake)
+
+set(SRC_DIR_BASE "openssl-1.0.2q")
+set(SRC_ARC "openssl-1.0.2q.tar.gz")
+set(SRC_URL "https://www.openssl.org/source/openssl-1.0.2q.tar.gz")
+set(SRC_ARC_HASH_SHA256 5744cfcbcec2b1b48629f7354203bc1e5e9b5466998bbccc5b5fcde3b18eb684)
+
+set(DOWN_DIR "${CMAKE_SOURCE_DIR}/download/openssl")
+
+set(EXTRACT_DIR "${CMAKE_SOURCE_DIR}/build/openssl/src_${TOOLSET}")
+set(INSTALL_DIR "${CMAKE_SOURCE_DIR}/openssl_${TOOLSET}")
+if(("${CMAKE_GENERATOR}" MATCHES "Win64") OR ("$ENV{MSYSTEM_CHOST}" STREQUAL "x86_64-w64-mingw32"))
+ set(EXTRACT_DIR "${EXTRACT_DIR}_x64")
+ set(INSTALL_DIR "${INSTALL_DIR}_x64")
+endif()
+if((${CMAKE_GENERATOR} MATCHES "Visual Studio") AND ("${CMAKE_CONFIGURATION_TYPE}" STREQUAL "Debug"))
+ set(EXTRACT_DIR "${EXTRACT_DIR}_debug")
+ set(INSTALL_DIR "${INSTALL_DIR}_debug")
+endif()
+set(SRC_DIR "${EXTRACT_DIR}/${SRC_DIR_BASE}")
+
+########################################
+
+file(DOWNLOAD
+ ${SRC_URL}
+ ${DOWN_DIR}/${SRC_ARC}
+ EXPECTED_HASH SHA256=${SRC_ARC_HASH_SHA256}
+ SHOW_PROGRESS
+ )
+
+########################################
+
+if(CMAKE_HOST_SYSTEM_NAME MATCHES "Linux")
+ find_program(
+ PERL perl
+ )
+else()
+ # CYGWIN / Active Perl
+ find_program(
+ PERL perl.exe
+ HINTS c:/Perl64/bin
+ HINTS c:/Perl/bin
+ HINTS c:/cygwin/usr/bin
+ HINTS c:/cygwin64/usr/bin
+ )
+endif()
+
+if(${PERL} STREQUAL "PERL-NOTFOUND")
+ message(FATAL_ERROR "perl not found")
+endif()
+
+########################################
+
+if(NOT EXISTS ${SRC_DIR}/README)
+
+ execute_process(
+ COMMAND ${CMAKE_COMMAND} -E make_directory ${EXTRACT_DIR}
+ )
+
+ execute_process(
+ COMMAND ${CMAKE_COMMAND} -E tar "xvf" ${DOWN_DIR}/${SRC_ARC}
+ WORKING_DIRECTORY ${EXTRACT_DIR}
+ )
+
+endif()
+
+########################################
+
+if((${CMAKE_GENERATOR} MATCHES "Visual Studio") OR
+ (${CMAKE_GENERATOR} MATCHES "NMake Makefiles"))
+ ######################################## VS
+ if(${CMAKE_GENERATOR} MATCHES "NMake Makefiles")
+ elseif(${CMAKE_GENERATOR} MATCHES "Visual Studio 15 2017")
+ find_program(
+ VCVARS32 vcvarsall.bat
+ HINTS "C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/VC/Auxiliary/Build"
+ HINTS "C:/Program Files (x86)/Microsoft Visual Studio/2017/Professional/VC/Auxiliary/Build"
+ HINTS "C:/Program Files (x86)/Microsoft Visual Studio/2017/Enterprise/VC/Auxiliary/Build"
+ )
+ elseif(${CMAKE_GENERATOR} MATCHES "Visual Studio 14 2015")
+ find_program(
+ VCVARS32 vcvars32.bat
+ HINTS "C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/bin"
+ )
+ elseif(${CMAKE_GENERATOR} MATCHES "Visual Studio 12 2013")
+ find_program(
+ VCVARS32 vcvars32.bat
+ HINTS "C:/Program Files (x86)/Microsoft Visual Studio 12.0/VC/bin"
+ )
+ elseif(${CMAKE_GENERATOR} MATCHES "Visual Studio 11 2012")
+ find_program(
+ VCVARS32 vcvars32.bat
+ HINTS "C:/Program Files (x86)/Microsoft Visual Studio 11.0/VC/bin"
+ )
+ elseif(${CMAKE_GENERATOR} MATCHES "Visual Studio 10 2010")
+ find_program(
+ VCVARS32 vcvars32.bat
+ HINTS "C:/Program Files (x86)/Microsoft Visual Studio 10.0/VC/bin"
+ )
+ elseif(${CMAKE_GENERATOR} MATCHES "Visual Studio 9 2008")
+ find_program(
+ VCVARS32 vcvars32.bat
+ HINTS "C:/Program Files (x86)/Microsoft Visual Studio 9.0/VC/bin"
+ )
+ elseif(${CMAKE_GENERATOR} MATCHES "Visual Studio 8 2005")
+ find_program(
+ VCVARS32 vcvars32.bat
+ HINTS "C:/Program Files (x86)/Microsoft Visual Studio 8/VC/bin"
+ )
+ else()
+ message(FATAL_ERROR "CMAKE_GENERATOR ${CMAKE_GENERATOR} not supported")
+ endif()
+ if(VCVARS32-NOTFOUND)
+ message(FATAL_ERROR "vcvars32.bat not found")
+ endif()
+
+ if(${CMAKE_GENERATOR} MATCHES "Win64")
+ set(CONFIG_TARGET "VC-WIN64A")
+ set(DO_MS "ms\\do_win64a.bat")
+ else()
+ set(CONFIG_TARGET "VC-WIN32")
+ set(DO_MS "ms\\do_ms.bat")
+ endif()
+ if(("${CMAKE_BUILD_TYPE}" STREQUAL "Release") OR ("${CMAKE_CONFIGURATION_TYPE}" STREQUAL "Release"))
+ else()
+ set(CONFIG_TARGET "debug-${CONFIG_TARGET}")
+ endif()
+
+ file(WRITE "${SRC_DIR}/build_cmake.bat"
+ "cd %~dp0\n"
+ "setlocal\n"
+ )
+ file(TO_NATIVE_PATH ${PERL} PERL_N)
+ file(TO_NATIVE_PATH ${INSTALL_DIR} INSTALL_DIR_N)
+ file(TO_NATIVE_PATH ${VCVARS32} VCVARS32_N)
+ string(REGEX REPLACE [[^(.*)\\.*$]] [[\1]] PERL_N_PATH ${PERL_N})
+ file(APPEND "${SRC_DIR}/build_cmake.bat"
+ "del crypto\\buildinf.h\n"
+ "setlocal\n"
+ "set PATH=${PERL_N_PATH}\n"
+ "perl Configure no-asm ${CONFIG_TARGET} --prefix=${INSTALL_DIR_N}\n"
+ "call ${DO_MS}\n"
+ "endlocal\n"
+ )
+ if(${CMAKE_GENERATOR} MATCHES "Visual Studio 8 2005")
+ ## Visual Studio 2005 特別処理
+ # include,libパスの設定
+ file(APPEND "${SRC_DIR}/build_cmake.bat"
+ "set SDK=C:\\Program Files\\Microsoft SDKs\\Windows\\v7.1\n"
+ "set INCLUDE=%SDK%\\Include;%INCLUDE%\n"
+ "set LIB=%SDK%\\lib;%LIB%\n"
+ )
+ endif()
+ if(${CMAKE_GENERATOR} MATCHES "Visual Studio 15 2017 Win64")
+ file(APPEND "${SRC_DIR}/build_cmake.bat"
+ "call \"${VCVARS32_N}\" x86_amd64 10.0.17134.0\n"
+ )
+ elseif(${CMAKE_GENERATOR} MATCHES "Visual Studio 15 2017")
+ file(APPEND "${SRC_DIR}/build_cmake.bat"
+ "call \"${VCVARS32_N}\" x86 10.0.17134.0\n"
+ )
+ elseif(${CMAKE_GENERATOR} MATCHES "Visual Studio")
+ file(APPEND "${SRC_DIR}/build_cmake.bat"
+ "call \"${VCVARS32_N}\"\n"
+ )
+ endif()
+ file(APPEND "${SRC_DIR}/build_cmake.bat"
+ "set PATH=${PERL_N_PATH};%PATH%\n"
+ "nmake -f ms\\nt.mak install ${NMAKE_OPTION}\n"
+ )
+
+ set(BUILD_CMAKE_BAT "${SRC_DIR}/build_cmake.bat")
+ file(TO_NATIVE_PATH ${BUILD_CMAKE_BAT} BUILD_CMAKE_BAT_N)
+ execute_process(
+ COMMAND cmd /c ${BUILD_CMAKE_BAT_N}
+ WORKING_DIRECTORY ${SRC_DIR}
+ RESULT_VARIABLE rv
+ )
+ if(NOT rv STREQUAL "0")
+ message(FATAL_ERROR "cmake build fail ${rv}")
+ endif()
+else()
+ ######################################## MinGW
+ execute_process(
+ COMMAND "uname" -s
+ OUTPUT_VARIABLE ov)
+ string(REGEX MATCH "[A-Za-z0-9]+" UNAME_S ${ov})
+ if("${UNAME_S}" STREQUAL "CYGWIN")
+ find_program(
+ MAKE make.exe
+ HINTS c:/cygwin/usr/bin
+ HINTS c:/cygwin64/usr/bin
+ )
+ elseif(("${UNAME_S}" STREQUAL "MINGW32") OR ("${UNAME_S}" STREQUAL "MINGW64"))
+ find_program(
+ MAKE make
+ )
+ elseif(CMAKE_HOST_SYSTEM_NAME MATCHES "Linux")
+ find_program(
+ MAKE make
+ )
+ else()
+ message(FATAL_ERROR "unsported")
+ endif()
+ set(ENV{PATH} "/usr/bin;/bin")
+ if("${UNAME_S}" STREQUAL "MINGW32")
+ set(CMAKE_C_COMPILER "cc")
+ set(PATH "/mingw32/bin:/usr/local/bin:/usr/bin:/bin")
+ elseif("${UNAME_S}" STREQUAL "MINGW64")
+ set(CMAKE_C_COMPILER "cc")
+ set(PATH "/mingw64/bin:/usr/local/bin:/usr/bin:/bin")
+ else()
+ include(${CMAKE_SOURCE_DIR}/../mingw.toolchain.cmake)
+ set(ENV{PREFIX} i686-w64-mingw32)
+ set(ENV{CC} ${CMAKE_C_COMPILER})
+ set(ENV{AR} "i686-w64-mingw32-ar")
+ set(ENV{RANLIB} "i686-w64-mingw32-ranlib")
+ set(PATH "/usr/bin:/bin")
+ endif()
+ if("${UNAME_S}" STREQUAL "MINGW64")
+ set(CONFIG_NAME "mingw64")
+ else()
+ set(CONFIG_NAME "mingw")
+ endif()
+ execute_process(
+ COMMAND ${CMAKE_COMMAND} -E env "PATH=/usr/bin:/bin" ${PERL} ./Configure ${CONFIG_NAME} --prefix=${INSTALL_DIR}
+ WORKING_DIRECTORY ${SRC_DIR}
+ RESULT_VARIABLE rv
+ )
+ if(NOT rv STREQUAL "0")
+ message(FATAL_ERROR "cmake configure fail ${rv}")
+ endif()
+ execute_process(
+ COMMAND ${CMAKE_COMMAND} -E env "PATH=${PATH}" ${MAKE} CC=${CMAKE_C_COMPILER}
+ WORKING_DIRECTORY ${SRC_DIR}
+ RESULT_VARIABLE rv
+ )
+ if(NOT rv STREQUAL "0")
+ message(FATAL_ERROR "cmake build fail ${rv}")
+ endif()
+ execute_process(
+ COMMAND ${CMAKE_COMMAND} -E env "PATH=${PATH}" ${MAKE} install
+ WORKING_DIRECTORY ${SRC_DIR}
+ RESULT_VARIABLE rv
+ )
+ if(NOT rv STREQUAL "0")
+ message(FATAL_ERROR "cmake install fail ${rv}")
+ endif()
+endif()
+
Added: trunk/libs/putty.cmake
===================================================================
--- trunk/libs/putty.cmake (rev 0)
+++ trunk/libs/putty.cmake 2019-03-02 16:18:47 UTC (rev 7456)
@@ -0,0 +1,33 @@
+# cmake -P putty.cmake
+
+set(SRC_DIR_BASE "putty-0.70")
+set(SRC_ARC "putty-0.70.tar.gz")
+set(SRC_URL "https://the.earth.li/~sgtatham/putty/0.70/putty-0.70.tar.gz")
+set(SRC_ARC_HASH_SHA256 bb8aa49d6e96c5a8e18a057f3150a1695ed99a24eef699e783651d1f24e7b0be)
+
+set(DOWN_DIR "${CMAKE_SOURCE_DIR}/download/putty")
+set(EXTRACT_DIR "${CMAKE_SOURCE_DIR}/build/putty/src")
+set(SRC_DIR "${CMAKE_SOURCE_DIR}/build/putty/src/${SRC_DIR_BASE}")
+set(INSTALL_DIR "${CMAKE_SOURCE_DIR}/putty")
+
+if(NOT EXISTS ${INSTALL_DIR}/README)
+
+ file(DOWNLOAD
+ ${SRC_URL}
+ ${DOWN_DIR}/${SRC_ARC}
+ EXPECTED_HASH SHA256=${SRC_ARC_HASH_SHA256}
+ SHOW_PROGRESS
+ )
+
+ file(MAKE_DIRECTORY ${EXTRACT_DIR})
+
+ execute_process(
+ COMMAND ${CMAKE_COMMAND} -E tar "xvf" ${DOWN_DIR}/${SRC_ARC}
+ WORKING_DIRECTORY ${EXTRACT_DIR}
+ )
+
+ file(REMOVE_RECURSE ${INSTALL_DIR})
+ file(RENAME ${SRC_DIR} ${INSTALL_DIR})
+ file(REMOVE_RECURSE ${EXTRACT_DIR})
+
+endif()
Added: trunk/libs/script_support.cmake
===================================================================
--- trunk/libs/script_support.cmake (rev 0)
+++ trunk/libs/script_support.cmake 2019-03-02 16:18:47 UTC (rev 7456)
@@ -0,0 +1,31 @@
+# TOOLSET ツールセット名
+if(${CMAKE_GENERATOR} MATCHES "Visual Studio")
+ if(${CMAKE_GENERATOR} MATCHES "Visual Studio 15 2017")
+ set(MSVC_TOOLSET_VERSION 141)
+ elseif(${CMAKE_GENERATOR} MATCHES "Visual Studio 14 2015")
+ set(MSVC_TOOLSET_VERSION 140)
+ elseif(${CMAKE_GENERATOR} MATCHES "Visual Studio 12 2013")
+ set(MSVC_TOOLSET_VERSION 120)
+ elseif(${CMAKE_GENERATOR} MATCHES "Visual Studio 11 2012")
+ set(MSVC_TOOLSET_VERSION 110)
+ elseif(${CMAKE_GENERATOR} MATCHES "Visual Studio 10 2010")
+ set(MSVC_TOOLSET_VERSION 100)
+ elseif(${CMAKE_GENERATOR} MATCHES "Visual Studio 9 2008")
+ set(MSVC_TOOLSET_VERSION 90)
+ elseif(${CMAKE_GENERATOR} MATCHES "Visual Studio 8 2005")
+ set(MSVC_TOOLSET_VERSION 80)
+ else()
+ set(MSVC_TOOLSET_VERSION "Unknown")
+ message(FATAL_ERROR "unknown Visual Studio ${CMAKE_GENERATOR}")
+ endif()
+ set(TOOLSET "VS_${MSVC_TOOLSET_VERSION}")
+elseif((${CMAKE_GENERATOR} MATCHES "Unix Makefiles") OR
+ (${CMAKE_GENERATOR} MATCHES "MSYS Makefiles") OR
+ (${CMAKE_GENERATOR} MATCHES "MinGW Makefiles") OR
+ (${CMAKE_GENERATOR} MATCHES "Ninja"))
+ set(TOOLSET "mingw")
+elseif(${CMAKE_GENERATOR} MATCHES "NMake Makefiles")
+ set(TOOLSET "VS_NMake")
+else()
+ message(FATAL_ERROR "unknown GENERATOR ${CMAKE_GENERATOR}")
+endif()
Added: trunk/libs/zlib.cmake
===================================================================
--- trunk/libs/zlib.cmake (rev 0)
+++ trunk/libs/zlib.cmake 2019-03-02 16:18:47 UTC (rev 7456)
@@ -0,0 +1,144 @@
+# cmake -DCMAKE_GENERATOR="Visual Studio 15 2017" -P zlib.cmake
+# cmake -DCMAKE_GENERATOR="Visual Studio 15 2017" -DCMAKE_CONFIGURATION_TYPE=Release -P zlib.cmake
+
+####
+if(("${CMAKE_BUILD_TYPE}" STREQUAL "") AND ("${CMAKE_CONFIGURATION_TYPE}" STREQUAL ""))
+ if("${CMAKE_GENERATOR}" MATCHES "Visual Studio")
+ # multi-configuration
+ execute_process(
+ COMMAND ${CMAKE_COMMAND}
+ -DCMAKE_GENERATOR=${CMAKE_GENERATOR}
+ -DCMAKE_CONFIGURATION_TYPE=Release
+ -DCMAKE_TOOLCHAIN_FILE=${CMAKE_SOURCE_DIR}/VSToolchain.cmake
+ -P zlib.cmake
+ )
+ execute_process(
+ COMMAND ${CMAKE_COMMAND}
+ -DCMAKE_GENERATOR=${CMAKE_GENERATOR}
+ -DCMAKE_CONFIGURATION_TYPE=Debug
+ -DCMAKE_TOOLCHAIN_FILE=${CMAKE_SOURCE_DIR}/VSToolchain.cmake
+ -P zlib.cmake
+ )
+ return()
+ elseif("$ENV{MSYSTEM}" MATCHES "MINGW")
+ # mingw on msys2
+ if("${CMAKE_BUILD_TYPE}" STREQUAL "")
+ set(CMAKE_BUILD_TYPE Release)
+ endif()
+ elseif("${CMAKE_GENERATOR}" MATCHES "Unix Makefiles")
+ # mingw
+ # single-configuration
+ if("${CMAKE_TOOLCHAIN_FILE}" STREQUAL "")
+ set(CMAKE_TOOLCHAIN_FILE "${CMAKE_SOURCE_DIR}/../mingw.toolchain.cmake")
+ endif()
+ if("${CMAKE_BUILD_TYPE}" STREQUAL "")
+ set(CMAKE_BUILD_TYPE Release)
+ endif()
+ elseif("${CMAKE_GENERATOR}" MATCHES "NMake Makefiles")
+ # VS nmake
+ # single-configuration
+ if("${CMAKE_TOOLCHAIN_FILE}" STREQUAL "")
+ set(CMAKE_TOOLCHAIN_FILE "${CMAKE_SOURCE_DIR}/VSToolchain.cmake")
+ endif()
+ if("${CMAKE_BUILD_TYPE}" STREQUAL "")
+ set(CMAKE_BUILD_TYPE Release)
+ endif()
+ else()
+ # single-configuration
+ if("${CMAKE_BUILD_TYPE}" STREQUAL "")
+ set(CMAKE_BUILD_TYPE Release)
+ endif()
+ endif()
+endif()
+
+include(script_support.cmake)
+
+set(SRC_DIR_BASE "zlib-1.2.11")
+set(SRC_ARC "zlib-1.2.11.tar.xz")
+set(SRC_URL "https://zlib.net/zlib-1.2.11.tar.xz")
+set(SRC_ARC_HASH_SHA256 4ff941449631ace0d4d203e3483be9dbc9da454084111f97ea0a2114e19bf066)
+
+set(DOWN_DIR "${CMAKE_SOURCE_DIR}/download/zlib")
+set(EXTRACT_DIR "${CMAKE_SOURCE_DIR}/build/zlib/src")
+set(SRC_DIR "${CMAKE_SOURCE_DIR}/build/zlib/src/${SRC_DIR_BASE}")
+set(BUILD_DIR "${CMAKE_SOURCE_DIR}/build/zlib/build_${TOOLSET}")
+set(INSTALL_DIR "${CMAKE_SOURCE_DIR}/zlib_${TOOLSET}")
+if(("${CMAKE_GENERATOR}" MATCHES "Win64") OR ("$ENV{MSYSTEM_CHOST}" STREQUAL "x86_64-w64-mingw32"))
+ set(BUILD_DIR "${BUILD_DIR}_x64")
+ set(INSTALL_DIR "${INSTALL_DIR}_x64")
+endif()
+
+########################################
+
+if(NOT EXISTS ${SRC_DIR}/README)
+
+ file(DOWNLOAD
+ ${SRC_URL}
+ ${DOWN_DIR}/${SRC_ARC}
+ EXPECTED_HASH SHA256=${SRC_ARC_HASH_SHA256}
+ SHOW_PROGRESS
+ )
+
+ file(MAKE_DIRECTORY ${EXTRACT_DIR})
+
+ execute_process(
+ COMMAND ${CMAKE_COMMAND} -E tar "xvf" ${DOWN_DIR}/${SRC_ARC}
+ WORKING_DIRECTORY ${EXTRACT_DIR}
+ )
+
+endif()
+
+########################################
+
+file(MAKE_DIRECTORY "${BUILD_DIR}")
+
+if("${CMAKE_GENERATOR}" MATCHES "Visual Studio")
+
+ ######################################## multi configuration
+
+ execute_process(
+ COMMAND ${CMAKE_COMMAND} ${SRC_DIR} -G ${CMAKE_GENERATOR}
+ -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}
+ -DCMAKE_INSTALL_PREFIX=${INSTALL_DIR}
+ ${TOOLCHAINFILE}
+ WORKING_DIRECTORY ${BUILD_DIR}
+ RESULT_VARIABLE rv
+ )
+ if(NOT rv STREQUAL "0")
+ message(FATAL_ERROR "cmake generate fail ${rv}")
+ endif()
+
+ execute_process(
+ COMMAND ${CMAKE_COMMAND} --build . --config ${CMAKE_CONFIGURATION_TYPE} --target install
+ WORKING_DIRECTORY ${BUILD_DIR}
+ RESULT_VARIABLE rv
+ )
+ if(NOT rv STREQUAL "0")
+ message(FATAL_ERROR "cmake install fail ${rv}")
+ endif()
+
+else()
+ ######################################## single configuration
+
+ execute_process(
+ COMMAND ${CMAKE_COMMAND} ${SRC_DIR} -G ${CMAKE_GENERATOR}
+ -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
+ -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}
+ -DCMAKE_INSTALL_PREFIX=${INSTALL_DIR}
+ WORKING_DIRECTORY ${BUILD_DIR}
+ RESULT_VARIABLE rv
+ )
+ if(NOT rv STREQUAL "0")
+ message(FATAL_ERROR "cmake build fail ${rv}")
+ endif()
+
+ execute_process(
+ COMMAND ${CMAKE_COMMAND} --build . --target install
+ WORKING_DIRECTORY ${BUILD_DIR}
+ RESULT_VARIABLE rv
+ )
+ if(NOT rv STREQUAL "0")
+ message(FATAL_ERROR "cmake install fail ${rv}")
+ endif()
+
+endif()
Added: trunk/mingw.toolchain.cmake
===================================================================
--- trunk/mingw.toolchain.cmake (rev 0)
+++ trunk/mingw.toolchain.cmake 2019-03-02 16:18:47 UTC (rev 7456)
@@ -0,0 +1,35 @@
+# how to build:
+# mkdir build; cd build
+# cmake .. -G "Unix Makefiles" -DCMAKE_TOOLCHAIN_FILE=../mingw.toolchain.cmake
+# cmake --build .
+
+# target
+set(CMAKE_SYSTEM_NAME Windows)
+
+# option
+option(USE_CLANG "use clang compiler" OFF)
+
+# mingw on msys
+#set(CMAKE_SYSROOT /mingw32/i686-w64-mingw32)
+#set(CMAKE_FIND_ROOT_PATH /mingw32/i686-w64-mingw32)
+
+# mingw
+set(CMAKE_FIND_ROOT_PATH /usr/i686-w64-mingw32)
+#set(CMAKE_SYSROOT /usr/i686-w64-mingw32)
+
+if(USE_CLANG)
+ set(CMAKE_C_COMPILER i686-w64-mingw32-clang)
+ set(CMAKE_CXX_COMPILER i686-w64-mingw32-clang++)
+else()
+ set(CMAKE_C_COMPILER i686-w64-mingw32-gcc)
+ set(CMAKE_CXX_COMPILER i686-w64-mingw32-g++)
+endif()
+set(CMAKE_RC_COMPILER i686-w64-mingw32-windres)
+
+set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
+set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
+set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
+set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
+
+set(CMAKE_TOOLCHAIN_FILE ${CMAKE_TOOLCHAIN_FILE} CACHE PATH "toolchain file")
+
Added: trunk/teraterm/CMakeLists.txt
===================================================================
--- trunk/teraterm/CMakeLists.txt (rev 0)
+++ trunk/teraterm/CMakeLists.txt 2019-03-02 16:18:47 UTC (rev 7456)
@@ -0,0 +1,43 @@
+
+add_subdirectory(ttpcmn)
+set_target_properties(
+ ttpcmn
+ PROPERTIES FOLDER teraterm)
+
+add_subdirectory(ttpdlg)
+set_target_properties(
+ ttpdlg
+ PROPERTIES FOLDER teraterm)
+
+add_subdirectory(ttpfile)
+set_target_properties(
+ ttpfile
+ PROPERTIES FOLDER teraterm)
+
+add_subdirectory(ttpset)
+set_target_properties(
+ ttpset
+ PROPERTIES FOLDER teraterm)
+
+add_subdirectory(ttpmacro)
+set_target_properties(
+ ttpmacro
+ PROPERTIES FOLDER teraterm)
+
+add_subdirectory(ttptek)
+set_target_properties(
+ ttptek
+ PROPERTIES FOLDER teraterm)
+
+add_subdirectory(teraterm)
+set_target_properties(
+ teraterm
+ PROPERTIES FOLDER teraterm)
+
+add_subdirectory(keycode)
+set_target_properties(
+ keycode
+ PROPERTIES FOLDER teraterm)
+
+# ttpdlg内でconfig時 svnversion.h を生成
+#add_subdirectory(svnrev)
Added: trunk/teraterm/keycode/CMakeLists.txt
===================================================================
--- trunk/teraterm/keycode/CMakeLists.txt (rev 0)
+++ trunk/teraterm/keycode/CMakeLists.txt 2019-03-02 16:18:47 UTC (rev 7456)
@@ -0,0 +1,30 @@
+project(keycode)
+
+if(USE_UNICODE_API)
+ add_definitions(-DUNICODE -D_UNICODE)
+endif()
+
+set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/")
+
+set(SRC
+ keycode.c
+ keycode.ico
+ keycode-version.rc
+ keycode.rc
+ kc_res.h
+ )
+
+include_directories(
+ ../common
+ ../ttpfile
+ .
+ )
+
+add_executable(
+ keycode WIN32
+ ${SRC}
+ )
+
+target_link_libraries(
+ keycode
+ )
Added: trunk/teraterm/svnrev/CMakeLists.txt
===================================================================
--- trunk/teraterm/svnrev/CMakeLists.txt (rev 0)
+++ trunk/teraterm/svnrev/CMakeLists.txt 2019-03-02 16:18:47 UTC (rev 7456)
@@ -0,0 +1,23 @@
+project(svnrev)
+
+set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/")
+
+set(SRC
+ svnrev.cpp
+ svnrev.h
+ )
+
+include_directories(
+ ../common
+ ../ttpfile
+ .
+ )
+
+add_executable(
+ svnrev
+ ${SRC}
+ )
+
+target_link_libraries(
+ svnrev
+ )
Added: trunk/teraterm/teraterm/CMakeLists.txt
===================================================================
--- trunk/teraterm/teraterm/CMakeLists.txt (rev 0)
+++ trunk/teraterm/teraterm/CMakeLists.txt 2019-03-02 16:18:47 UTC (rev 7456)
@@ -0,0 +1,174 @@
+project(teraterm)
+
+include(${CMAKE_CURRENT_SOURCE_DIR}/../../libs/lib_SFMT.cmake)
+include(${CMAKE_CURRENT_SOURCE_DIR}/../../libs/lib_oniguruma.cmake)
+
+if(USE_UNICODE_API)
+ add_definitions(-DUNICODE -D_UNICODE)
+endif()
+set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/")
+
+set(COMMON_SRC
+ ../common/tt_res.h
+ ../common/ttcommon.h
+ ../common/ttddecmnd.h
+ ../common/tttypes.h
+ ../common/tektypes.h
+ ../common/ttftypes.h
+ ../common/ttplugin.h
+ ../common/tt-version.h
+ ../common/teraterm.h
+ ../common/ttlib.c
+ ../common/ttlib.h
+ ../common/dlglib.c
+ ../common/dlglib.h
+ ../common/win16api.h
+ ../common/win16api.c
+ ../common/codemap.h
+ ../common/compat_w95.h
+ ../common/i18n.h
+ ../ttpcmn/language.h
+ )
+
+source_group(
+ "common"
+ FILES
+ ${COMMON_SRC}
+ )
+
+set(SRC
+ addsetting.cpp
+ addsetting.h
+ buffer.c
+ buffer.h
+ clipboar.c
+ clipboar.h
+ commlib.c
+ commlib.h
+ dnddlg.cpp
+ dnddlg.h
+ filesys.cpp
+ filesys.h
+ ftdlg.cpp
+ ftdlg.h
+ keyboard.c
+ keyboard.h
+ prnabort.cpp
+ prnabort.h
+ protodlg.cpp
+ protodlg.h
+ sizetip.c
+ sizetip.h
+ teklib.c
+ teklib.h
+ tekwin.cpp
+ tekwin.h
+ telnet.c
+ telnet.h
+ teraapp.h
+ teraprn.cpp
+ teraprn.h
+ teraterm.cpp
+ ttdde.c
+ ttdde.h
+ ttdialog.c
+ ttdialog.h
+ ttermpro.rc
+ ttfileio.c
+ ttfileio.h
+ ttime.c
+ ttime.h
+ ttplug.c
+ ttplug.h
+ ttsetup.c
+ ttsetup.h
+ tt-version.rc
+ ttwinman.c
+ ttwinman.h
+ ttwsk.c
+ ttwsk.h
+ vtdisp.c
+ vtdisp.h
+ vtterm.c
+ vtterm.h
+ vtwin.cpp
+ vtwin.h
+ winjump.c
+ winjump.h
+ WSAAsyncGetAddrInfo.c
+ WSAAsyncGetAddrInfo.h
+ #
+ uni2sjis.map
+ unisym2decsp.map
+ uni_combining.map
+ #
+ teraterm.manifest
+ #
+ ${COMMON_SRC}
+ )
+
+include_directories(
+ ../common
+ ../ttpfile
+ ${SFMT_INCLUDE_DIRS}
+ ${ONIGURUMA_INCLUDE_DIRS}
+ .
+ ${CMAKE_CURRENT_BINARY_DIR}
+ )
+
+link_directories(
+ ${ONIGURUMA_LIBRARY_DIRS}
+ ${SFMT_LIBRARY_DIRS}
+ )
+
+set(CMAKE_MFC_FLAG 1)
+
+if (MSVC)
+ set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /NODEFAULTLIB:nafxcw.lib /NODEFAULTLIB:LIBCMT.lib")
+ set(CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} /NODEFAULTLIB:nafxcwd.lib /NODEFAULTLIB:LIBCMTD.lib")
+ set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /DELAYLOAD:imagehlp.dll /DELAYLOAD:user32.dll /DELAYLOAD:shell32.dll")
+endif()
+
+add_executable(
+ teraterm WIN32
+ ${SRC}
+ )
+
+set_target_properties(
+ teraterm
+ PROPERTIES
+ OUTPUT_NAME "ttermpro"
+ )
+
+target_link_libraries(
+ teraterm
+ ttpcmn
+ ttpdlg
+ ttpfile
+ ttpset
+ ttptek
+ optimized nafxcw.lib
+ debug nafxcwd.lib
+ optimized LIBCMT.lib
+ debug LIBCMTD.lib
+ optimized onig.lib
+ debug onigd.lib
+ #
+ gdi32
+ comctl32
+ ws2_32
+ imm32
+ imagehlp
+ delayimp
+ oleaut32
+ uuid
+ )
+
+add_dependencies(
+ teraterm
+ ttpcmn
+ ttpdlg
+ ttpfile
+ ttpset
+ ttptek
+ )
Added: trunk/teraterm/ttpcmn/CMakeLists.txt
===================================================================
--- trunk/teraterm/ttpcmn/CMakeLists.txt (rev 0)
+++ trunk/teraterm/ttpcmn/CMakeLists.txt 2019-03-02 16:18:47 UTC (rev 7456)
@@ -0,0 +1,73 @@
+project(ttpcmn)
+
+if(USE_UNICODE_API)
+ add_definitions(-DUNICODE -D_UNICODE)
+endif()
+
+set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/")
+
+set(COMMON_SRC
+ ../common/teraterm.h
+ ../common/tttypes.h
+ ../common/i18n.c
+ ../common/i18n.h
+ ../common/ttlib.c
+ ../common/ttlib.h
+ ../common/servicenames.c
+ ../common/servicenames.h
+ ../common/tt-version.h
+ ../common/ttftypes.h
+ ../common/ttcommon.h
+ ../common/tt_res.h
+ ../common/codeconv.h
+ ../common/codeconv.cpp
+ )
+
+source_group(
+ "common"
+ FILES
+ ${COMMON_SRC}
+ )
+
+set(SRC
+ ttpcmn.def
+ cmn_res.h
+ language.c
+ language.h
+ ttcmn.c
+ ttpcmn-version.rc
+ ttpcmn.rc
+ ${COMMON_SRC}
+ )
+
+include_directories(
+ ../common
+ ../ttpfile
+ .
+ )
+
+if (MSVC)
+ set(CMAKE_SHARED_LINKER_FLAGS
+ "${CMAKE_SHARED_LINKER_FLAGS} /DELAYLOAD:setupapi.dll /DELAYLOAD:user32.dll")
+endif()
+
+add_library(
+ ttpcmn
+ SHARED
+ ${SRC}
+ )
+
+if(MINGW)
+ set_target_properties(
+ ttpcmn
+ PROPERTIES PREFIX ""
+ SUFFIX ".dll"
+ )
+endif()
+
+target_link_libraries(
+ ttpcmn
+ ole32
+ setupapi
+ delayimp
+ )
Added: trunk/teraterm/ttpdlg/CMakeLists.txt
===================================================================
--- trunk/teraterm/ttpdlg/CMakeLists.txt (rev 0)
+++ trunk/teraterm/ttpdlg/CMakeLists.txt 2019-03-02 16:18:47 UTC (rev 7456)
@@ -0,0 +1,78 @@
+project(ttpdlg)
+
+include(${CMAKE_CURRENT_SOURCE_DIR}/../../libs/lib_oniguruma.cmake)
+
+set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/")
+
+if(MINGW)
+ set(CMAKE_RC_FLAGS "${CMAKE_RC_FLAGS} -I ${CMAKE_CURRENT_SOURCE_DIR}/../common")
+else()
+ set(CMAKE_RC_FLAGS "${CMAKE_RC_FLAGS} /i ${CMAKE_CURRENT_SOURCE_DIR}/../common")
+endif()
+
+set(COMMON_SRC
+ ../common/dlglib.c
+ ../common/dlglib.h
+ ../common/ttlib.c
+ ../common/ttlib.h
+ ../common/teraterm.ico
+ )
+
+source_group(
+ "common"
+ FILES
+ ${COMMON_SRC}
+ )
+
+set(SRC
+ dlg_res.h
+ ttdlg.c
+ ttpdlg.def
+ ttpdlg.rc
+ ttpdlg-version.rc
+ ${CMAKE_CURRENT_BINARY_DIR}/svnversion.h
+ ${COMMON_SRC}
+ )
+
+include_directories(
+ ${CMAKE_CURRENT_SOURCE_DIR}/../common
+ ${CMAKE_CURRENT_BINARY_DIR}
+ ${ONIGURUMA_INCLUDE_DIRS}
+ )
+
+link_directories(
+ ${ONIGURUMA_LIBRARY_DIRS}
+ )
+
+add_library(
+ ttpdlg SHARED
+ ${SRC}
+ )
+
+if(MINGW)
+ set_target_properties(
+ ttpdlg
+ PROPERTIES PREFIX ""
+ SUFFIX ".dll"
+ )
+endif()
+
+target_link_libraries(
+ ttpdlg
+ ttpcmn
+ optimized onig.lib
+ debug onigd.lib
+ )
+
+add_dependencies(
+ ttpdlg
+ ttpcmn
+ )
+
+configure_file(
+ svnversion.h.in
+ svnversion.h @ONLY)
+
+if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/svnversion.h")
+ file(REMOVE "${CMAKE_CURRENT_SOURCE_DIR}/svnversion.h")
+endif()
Added: trunk/teraterm/ttpdlg/svnversion.h.in
===================================================================
--- trunk/teraterm/ttpdlg/svnversion.h.in (rev 0)
+++ trunk/teraterm/ttpdlg/svnversion.h.in 2019-03-02 16:18:47 UTC (rev 7456)
@@ -0,0 +1 @@
+#cmakedefine SVNVERSION @SVNVERSION@
Added: trunk/teraterm/ttpfile/CMakeLists.txt
===================================================================
--- trunk/teraterm/ttpfile/CMakeLists.txt (rev 0)
+++ trunk/teraterm/ttpfile/CMakeLists.txt 2019-03-02 16:18:47 UTC (rev 7456)
@@ -0,0 +1,71 @@
+project(ttpfile)
+
+set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/")
+
+set(COMMON_SRC
+ ../common/dlglib.c
+ ../common/dlglib.h
+ ../common/ttlib.c
+ ../common/ttlib.h
+ ../common/win16api.h
+ ../common/win16api.c
+ )
+
+source_group(
+ "common"
+ FILES
+ ${COMMON_SRC}
+ )
+
+set(SRC
+ bplus.c
+ bplus.h
+ ftlib.c
+ ftlib.h
+ kermit.c
+ kermit.h
+ quickvan.c
+ quickvan.h
+ ttfile.c
+ xmodem.c
+ xmodem.h
+ ymodem.c
+ ymodem.h
+ zmodem.c
+ zmodem.h
+ file_res.h
+ ttpfile-version.rc
+ ttpfile.rc
+ ttpfile.def
+ ${COMMON_SRC}
+ )
+
+include_directories(
+ ../common
+ )
+
+add_library(
+ ttpfile SHARED
+ ${SRC}
+ )
+
+if(MINGW)
+ set_target_properties(
+ ttpfile
+ PROPERTIES PREFIX ""
+ SUFFIX ".dll"
+ )
+endif()
+
+target_link_libraries(
+ ttpfile
+ ttpcmn
+ #
+ gdi32
+ comdlg32
+ )
+
+add_dependencies(
+ ttpfile
+ ttpcmn
+ )
Added: trunk/teraterm/ttpmacro/CMakeLists.txt
===================================================================
--- trunk/teraterm/ttpmacro/CMakeLists.txt (rev 0)
+++ trunk/teraterm/ttpmacro/CMakeLists.txt 2019-03-02 16:18:47 UTC (rev 7456)
@@ -0,0 +1,127 @@
+project(ttpmacro)
+
+include(${CMAKE_CURRENT_SOURCE_DIR}/../../libs/lib_oniguruma.cmake)
+include(${CMAKE_CURRENT_SOURCE_DIR}/../../libs/lib_SFMT.cmake)
+
+if(USE_UNICODE_API)
+ add_definitions(-DUNICODE -D_UNICODE)
+endif()
+
+set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/")
+
+set(COMMON_SRC
+ ../common/teraterm.h
+ ../common/ttcommon.h
+ ../common/ttddecmnd.h
+ ../common/tttypes.h
+ ../common/tt-version.h
+ ../common/i18n.c
+ ../common/i18n.h
+ ../common/ttlib.c
+ ../common/ttlib.h
+ ../common/compat_w95.h
+ ../common/win16api.h
+ ../common/win16api.c
+ ../common/codeconv.h
+ ../common/codeconv.cpp
+ )
+
+source_group(
+ "common"
+ FILES
+ ${COMMON_SRC}
+ )
+
+set(SRC
+ ttm_res.h
+ errdlg.cpp
+ errdlg.h
+ inpdlg.cpp
+ inpdlg.h
+ ListDlg.cpp
+ ListDlg.h
+ msgdlg.cpp
+ msgdlg.h
+ statdlg.cpp
+ statdlg.h
+ stdafx.h
+ ttl.c
+ ttl.h
+ ttm_res.h
+ ttmacro.cpp
+ ttmacro.h
+ ttmbuff.c
+ ttmbuff.h
+ ttmdde.c
+ ttmdde.h
+ ttmdef.h
+ ttmdlg.cpp
+ ttmdlg.h
+ ttmenc.c
+ ttmenc.h
+ ttmlib.c
+ ttmlib.h
+ ttmmain.cpp
+ ttmmain.h
+ ttmmsg.h
+ ttmonig.h
+ ttmparse.c
+ ttmparse.h
+ wait4all.c
+ wait4all.h
+
+ ttpmacro.rc
+ ttm-version.rc
+ fileread.h
+ fileread.cpp
+ ${COMMON_SRC}
+ )
+
+include_directories(
+ ${ONIGURUMA_INCLUDE_DIRS}
+ ${SFMT_INCLUDE_DIRS}
+ ${CMAKE_CURRENT_SOURCE_DIR}/../common
+ )
+
+link_directories(
+ ${ONIGURUMA_LIBRARY_DIRS}
+ ${SFMT_LIBRARY_DIRS}
+ )
+
+set(CMAKE_MFC_FLAG 1)
+
+if (MSVC)
+ set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /NODEFAULTLIB:nafxcw.lib /NODEFAULTLIB:LIBCMT.lib")
+ set(CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} /NODEFAULTLIB:nafxcwd.lib /NODEFAULTLIB:LIBCMTD.lib")
+ set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /DELAYLOAD:iphlpapi.dll /DELAYLOAD:user32.dll")
+endif()
+
+add_executable(
+ ttpmacro WIN32
+ ${SRC}
+ )
+
+target_link_libraries(
+ ttpmacro
+ ttpcmn
+ optimized nafxcw.lib
+ debug nafxcwd.lib
+ optimized LIBCMT.lib
+ debug LIBCMTD.lib
+ optimized onig.lib
+ debug onigd.lib
+ optimized sfmt.lib
+ debug sfmtd.lib
+ #
+ iphlpapi
+ delayimp
+ ws2_32
+ comctl32
+ gdi32
+ comdlg32
+ )
+
+add_dependencies(
+ ttpmacro
+ ttpcmn
+ )
Added: trunk/teraterm/ttpset/CMakeLists.txt
===================================================================
--- trunk/teraterm/ttpset/CMakeLists.txt (rev 0)
+++ trunk/teraterm/ttpset/CMakeLists.txt 2019-03-02 16:18:47 UTC (rev 7456)
@@ -0,0 +1,52 @@
+project(ttpset)
+
+set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/")
+
+set(COMMON_SRC
+ ../common/tttypes.h
+ ../common/ttlib.c
+ ../common/ttlib.h
+ ../common/servicenames.h
+ )
+
+source_group(
+ "common"
+ FILES
+ ${COMMON_SRC}
+ )
+
+set(SRC
+ ttset.c
+ ttpset-version.rc
+ ttpset.def
+ ${COMMON_SRC}
+ )
+
+include_directories(
+ ${CMAKE_CURRENT_SOURCE_DIR}/../common
+ )
+
+add_library(
+ ttpset SHARED
+ ${SRC}
+ )
+
+if(MINGW)
+ set_target_properties(
+ ttpset
+ PROPERTIES PREFIX ""
+ SUFFIX ".dll"
+ )
+endif()
+
+target_link_libraries(
+ ttpset
+ ttpcmn
+ #
+ gdi32
+ )
+
+add_dependencies(
+ ttpset
+ ttpcmn
+ )
Added: trunk/teraterm/ttptek/CMakeLists.txt
===================================================================
--- trunk/teraterm/ttptek/CMakeLists.txt (rev 0)
+++ trunk/teraterm/ttptek/CMakeLists.txt 2019-03-02 16:18:47 UTC (rev 7456)
@@ -0,0 +1,69 @@
+project(ttptek)
+
+include(${CMAKE_CURRENT_SOURCE_DIR}/../../libs/lib_oniguruma.cmake)
+include(${CMAKE_CURRENT_SOURCE_DIR}/../../libs/lib_SFMT.cmake)
+
+set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/")
+
+set(COMMON_SRC
+ ../common/tttypes.h
+ ../common/i18n.c
+ ../common/i18n.h
+ ../common/ttlib.c
+ ../common/ttlib.h
+ )
+source_group(
+ "common"
+ FILES
+ ${COMMON_SRC}
+ )
+
+set(SRC
+ tek_res.h
+ tekesc.c
+ tekesc.h
+ ttptek.def
+ ttptek.rc
+ ttptek-version.rc
+# tttek.h
+ tttek.c
+ ${COMMON_SRC}
+ )
+
+include_directories(
+ ${CMAKE_CURRENT_SOURCE_DIR}/../common
+ ${ONIGURUMA_INCLUDE}
+ ${SFMT_INCLUDE_DIR}
+ )
+
+link_directories(
+ ${SFMT_LIBRARY_DIRS}
+ )
+
+add_library(
+ ttptek SHARED
+ ${SRC}
+ )
+
+if(MINGW)
+ set_target_properties(
+ ttptek
+ PROPERTIES PREFIX ""
+ SUFFIX ".dll"
+ )
+endif()
+
+target_link_libraries(
+ ttptek
+ ttpcmn
+ debug sfmtd.lib
+ optimized sfmt.lib
+ #
+ iphlpapi
+ gdi32
+ )
+
+add_dependencies(
+ ttptek
+ ttpcmn
+ )
Added: trunk/ttpmenu/CMakeLists.txt
===================================================================
--- trunk/ttpmenu/CMakeLists.txt (rev 0)
+++ trunk/ttpmenu/CMakeLists.txt 2019-03-02 16:18:47 UTC (rev 7456)
@@ -0,0 +1,50 @@
+project(ttpmenu)
+
+set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/")
+
+set(COMMON_SRC
+ ../teraterm/common/ttlib.c
+ ../teraterm/common/ttlib.h
+ ../teraterm/common/i18n.c
+ ../teraterm/common/i18n.h
+ )
+
+source_group(
+ "common"
+ FILES
+ ${COMMON_SRC}
+ )
+
+set(SRC
+ resource.h
+ registry.cpp
+ ttpmenu.cpp
+ winmisc.cpp
+ left.ico
+ right.ico
+ teraterm.ico
+ ttpmenu.rc
+ )
+
+
+include_directories(
+ ../teraterm/common
+ .
+ )
+
+add_executable(
+ ttpmenu WIN32
+ ${SRC}
+ ${COMMON_SRC}
+ )
+
+target_link_libraries(
+ ttpmenu
+ version
+ comctl32
+ user32
+ gdi32
+ comdlg32
+ )
+
+
Added: trunk/ttssh2/CMakeLists.txt
===================================================================
--- trunk/ttssh2/CMakeLists.txt (rev 0)
+++ trunk/ttssh2/CMakeLists.txt 2019-03-02 16:18:47 UTC (rev 7456)
@@ -0,0 +1,16 @@
+add_subdirectory(ttxssh)
+set_target_properties(ttxssh PROPERTIES FOLDER ttssh2)
+
+add_subdirectory(ttssh)
+set_target_properties(ttssh PROPERTIES FOLDER ttssh2)
+
+add_subdirectory(matcher)
+set_target_properties(matcher PROPERTIES FOLDER ttssh2)
+
+# config時に cmake で puttyversion.h を生成するようにした
+#add_subdirectory(puttyrev)
+#set_target_properties(puttyrev PROPERTIES FOLDER ttssh2)
+
+add_subdirectory(putty)
+set_target_properties(libputty PROPERTIES FOLDER ttssh2)
+
Added: trunk/ttssh2/matcher/CMakeLists.txt
===================================================================
--- trunk/ttssh2/matcher/CMakeLists.txt (rev 0)
+++ trunk/ttssh2/matcher/CMakeLists.txt 2019-03-02 16:18:47 UTC (rev 7456)
@@ -0,0 +1,13 @@
+project(matcher)
+
+set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/")
+
+set(SRC
+ matcher.c
+ test.c
+ )
+
+add_executable(
+ matcher
+ ${SRC}
+ )
Added: trunk/ttssh2/putty/CMakeLists.txt
===================================================================
--- trunk/ttssh2/putty/CMakeLists.txt (rev 0)
+++ trunk/ttssh2/putty/CMakeLists.txt 2019-03-02 16:18:47 UTC (rev 7456)
@@ -0,0 +1,30 @@
+project(libputty)
+
+set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/")
+
+if(MINGW)
+ add_definitions("-D_WINDOWS")
+endif()
+
+set(SRC
+ ../../libs/putty/conf.c
+ ../../libs/putty/misc.c
+ ../../libs/putty/tree234.c
+ ../../libs/putty/version.c
+ ../../libs/putty/windows/winmisc.c
+ ../../libs/putty/windows/winpgntc.c
+ ../../libs/putty/windows/winsecur.c
+ libputty.c
+ libputty.h
+ )
+
+include_directories(
+ ../../libs/putty
+ ../../libs/putty/windows
+ .
+ )
+
+add_library(
+ libputty
+ ${SRC}
+ )
Added: trunk/ttssh2/puttyrev/CMakeLists.txt
===================================================================
--- trunk/ttssh2/puttyrev/CMakeLists.txt (rev 0)
+++ trunk/ttssh2/puttyrev/CMakeLists.txt 2019-03-02 16:18:47 UTC (rev 7456)
@@ -0,0 +1,13 @@
+project(puttyrev)
+
+set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/")
+
+set(SRC
+ puttyrev.h
+ puttyrev.cpp
+ )
+
+add_executable(
+ puttyrev
+ ${SRC}
+ )
Added: trunk/ttssh2/ttssh/CMakeLists.txt
===================================================================
--- trunk/ttssh2/ttssh/CMakeLists.txt (rev 0)
+++ trunk/ttssh2/ttssh/CMakeLists.txt 2019-03-02 16:18:47 UTC (rev 7456)
@@ -0,0 +1,15 @@
+project(ttssh)
+
+set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/")
+
+set(SRC
+ resource.h
+ ttsecure.ico
+ ttssh.c
+ ttssh.rc
+ )
+
+add_executable(
+ ttssh WIN32
+ ${SRC}
+ )
Added: trunk/ttssh2/ttxssh/CMakeLists.txt
===================================================================
--- trunk/ttssh2/ttxssh/CMakeLists.txt (rev 0)
+++ trunk/ttssh2/ttxssh/CMakeLists.txt 2019-03-02 16:18:47 UTC (rev 7456)
@@ -0,0 +1,150 @@
+project(ttxssh)
+
+set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/")
+
+include(${CMAKE_CURRENT_SOURCE_DIR}/../../libs/lib_zlib.cmake)
+include(${CMAKE_CURRENT_SOURCE_DIR}/../../libs/lib_openssl.cmake)
+
+if(USE_UNICODE_API)
+ add_definitions(-DUNICODE -D_UNICODE)
+endif()
+
+set(COMMON_SRC
+ ../../teraterm/teraterm/WSAAsyncGetAddrInfo.c
+ ../../teraterm/common/ttcommon.h
+ ../../teraterm/common/i18n.h
+ ../../teraterm/common/ttlib.h
+ ../../teraterm/common/dlglib.h
+ ../../teraterm/common/servicenames.h
+ ../../teraterm/common/codeconv.cpp
+ ../../teraterm/common/codeconv.h
+ )
+
+source_group(
+ "common"
+ FILES
+ ${COMMON_SRC}
+ )
+
+set(SRC
+ ${CMAKE_CURRENT_BINARY_DIR}/puttyversion.h
+ ../matcher/matcher.c
+ arc4random.c
+ arc4random.h
+ auth.c
+ auth.h
+ buffer.c
+ buffer.h
+ chacha.c
+ chacha.h
+ cipher.h
+ cipher-ctr.c
+ config.h
+ crypt.c
+ crypt.h
+ dns.c
+ dns.h
+ ed25519.c
+ ed25519_bcrypt_pbkdf.c
+ ed25519_blf.h
+ ed25519_blocks.c
+ ed25519_blowfish.c
+ ed25519_crypto_api.h
+ ed25519_fe25519.c
+ ed25519_fe25519.h
+ ed25519_ge25519.c
+ ed25519_ge25519.h
+ ed25519_hash.c
+ ed25519_sc25519.c
+ ed25519_sc25519.h
+ ed25519_verify.c
+ fwd.c
+ fwd.h
+ fwd-socks.c
+ fwd-socks.h
+ fwdui.c
+ fwdui.h
+ hosts.c
+ hosts.h
+ kex.c
+ kex.h
+ key.c
+ key.h
+ keyfiles.c
+ keyfiles.h
+ pkt.c
+ pkt.h
+ resource.h
+ sftp.c
+ sftp.h
+ ssh.c
+ ssh.h
+ ttxssh.c
+ ttxssh.def
+ ttxssh.h
+ ttxssh.rc
+ ttxssh-version.h
+ ttxssh-version.rc
+ util.c
+ util.h
+ x11util.c
+ x11util.h
+ ${COMMON_SRC}
+ )
+
+
+include_directories(
+ ../../teraterm/teraterm
+ ../../teraterm/common
+ ../matcher
+ ../putty
+ ${OPENSSL_INCLUDE_DIRS}
+ ${ZLIB_INCLUDE_DIRS}
+ )
+
+link_directories(
+ ${ZLIB_LIBRARY_DIRS}
+ )
+
+if (MSVC)
+ set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /DELAYLOAD:dnsapi.dll")
+endif()
+
+add_library(
+ ttxssh SHARED
+ ${SRC}
+ )
+
+target_link_libraries(
+ ttxssh
+ libputty
+ ttpcmn
+ debug zlibstaticd
+ optimized zlibstatic
+ ${OPENSSL_LIB}
+ #
+ ws2_32
+ dnsapi
+ gdi32
+ comdlg32
+ delayimp
+ )
+
+### create puttyversion.h
+
+file(READ "${CMAKE_SOURCE_DIR}/libs/putty/windows/putty.iss" iis)
+
+string(REGEX MATCH "VersionInfoTextVersion=([^\n]+)\n" _ ${iis})
+set(version_str ${CMAKE_MATCH_1})
+if("${version_str}" STREQUAL "")
+ string(REGEX MATCH "AppVerName=([^\n]+)\n" _ ${iis})
+ set(version_str ${CMAKE_MATCH_1})
+endif()
+if("${version_str}" STREQUAL "")
+ set(version_str "unknown")
+endif()
+message("putty version=\"${version_str}\"")
+FILE(
+ WRITE ${CMAKE_CURRENT_BINARY_DIR}/puttyversion.h
+ "#define PUTTYVERSION \"${version_str}\"\n"
+ )
Added: trunk/version_info.h.in
===================================================================
--- trunk/version_info.h.in (rev 0)
+++ trunk/version_info.h.in 2019-03-02 16:18:47 UTC (rev 7456)
@@ -0,0 +1,42 @@
+
+#cmakedefine USE_UNICODE_API
+#cmakedefine SVNVERSION @SVNVERSION@
+
+// infos when generated
+#cmakedefine MSVC
+#cmakedefine MINGW
+// CMAKE_GENERATOR
+// @CMAKE_GENERATOR@
+// CMAKE_COMMAND
+// @CMAKE_COMMAND@
+// CMAKE_C_COMPILER
+// @CMAKE_C_COMPILER@
+// CMAKE_CXX_COMPILER
+// @CMAKE_CXX_COMPILER@
+// CMAKE_C_FLAGS
+// @CMAKE_C_FLAGS@
+// CMAKE_C_FLAGS_RELEASE
+// @CMAKE_C_FLAGS_RELEASE@
+// CMAKE_C_FLAGS_DEBUG
+// @CMAKE_C_FLAGS_DEBUG@
+// CMAKE_CXX_FLAGS
+// @CMAKE_CXX_FLAGS@
+// CMAKE_CXX_FLAGS_RELEASE
+// @CMAKE_CXX_FLAGS_RELEASE@
+// CMAKE_CXX_FLAGS_DEBUG
+// @CMAKE_CXX_FLAGS_DEBUG@
+// CMAKE_EXE_LINKER_FLAGS
+// @CMAKE_EXE_LINKER_FLAGS@
+// CMAKE_EXE_LINKER_FLAGS_RELEASE
+// @CMAKE_EXE_LINKER_FLAGS_RELEASE@
+// CMAKE_EXE_LINKER_FLAGS_DEBUG
+// @CMAKE_EXE_LINKER_FLAGS_DEBUG@
+// CMAKE_SHARED_LINKER_FLAGS
+// @CMAKE_SHARED_LINKER_FLAGS@
+// CMAKE_SHARED_LINKER_FLAGS_RELEASE
+// @CMAKE_SHARED_LINKER_FLAGS_RELEASE@
+// CMAKE_SHARED_LINKER_FLAGS_DEBUG
+// @CMAKE_SHARED_LINKER_FLAGS_DEBUG@
+//
+// see CMakeCache.txt for more details
+
From scmnotify @ osdn.net Sun Mar 3 01:19:00 2019
From: scmnotify @ osdn.net (scmnotify @ osdn.net)
Date: Sun, 03 Mar 2019 01:19:00 +0900
Subject: [Ttssh2-commit] =?utf-8?b?Wzc0NTddIHR0ZXJtcHJvLmV4ZSDjgajlkIw=?=
=?utf-8?b?5LiA44OV44Kp44Or44OA44GuIFRTUEVDSUFMMS5UVEYg44KS6Kqt44G/6L68?=
=?utf-8?b?44KB44KL44KI44GG44Gr44GX44Gf?=
Message-ID: <1551543540.852423.116856.nullmailer@users.osdn.me>
Revision: 7457
http://sourceforge.jp/projects/ttssh2/scm/svn/commits/7457
Author: zmatsuo
Date: 2019-03-03 01:19:00 +0900 (Sun, 03 Mar 2019)
Log Message:
-----------
ttermpro.exe と同一フォルダの TSPECIAL1.TTF を読み込めるようにした
GetProcAddress()を一括して行う仕組みを作った(dllutil.cpp,h)
TCHAR考慮
Modified Paths:
--------------
trunk/teraterm/teraterm/CMakeLists.txt
trunk/teraterm/teraterm/teraterm.cpp
trunk/teraterm/teraterm/ttermpro.vcproj
trunk/teraterm/teraterm/vtdisp.c
trunk/teraterm/teraterm/vtwin.cpp
Added Paths:
-----------
trunk/teraterm/common/compat_win.cpp
trunk/teraterm/common/compat_win.h
trunk/teraterm/common/dllutil.cpp
trunk/teraterm/common/dllutil.h
-------------- next part --------------
Added: trunk/teraterm/common/compat_win.cpp
===================================================================
--- trunk/teraterm/common/compat_win.cpp (rev 0)
+++ trunk/teraterm/common/compat_win.cpp 2019-03-02 16:19:00 UTC (rev 7457)
@@ -0,0 +1,81 @@
+/*
+ * (C) 2019 TeraTerm Project
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/* compat_win */
+
+#include
+#include
+#include "compat_win.h"
+
+#include "dllutil.h"
+
+BOOL (WINAPI *pAlphaBlend)(HDC,int,int,int,int,HDC,int,int,int,int,BLENDFUNCTION);
+BOOL (WINAPI *pEnumDisplayMonitors)(HDC,LPCRECT,MONITORENUMPROC,LPARAM);
+DPI_AWARENESS_CONTEXT (WINAPI *pSetThreadDpiAwarenessContext)(DPI_AWARENESS_CONTEXT dpiContext);
+UINT (WINAPI *pGetDpiForWindow)(HWND hwnd);
+BOOL (WINAPI *pSetLayeredWindowAttributes)(HWND hwnd, COLORREF crKey, BYTE bAlpha, DWORD dwFlags);
+int (WINAPI *pAddFontResourceExA)(LPCSTR name, DWORD fl, PVOID res);
+int (WINAPI *pAddFontResourceExW)(LPCWSTR name, DWORD fl, PVOID res);
+BOOL (WINAPI *pRemoveFontResourceExA)(LPCSTR name, DWORD fl, PVOID pdv);
+BOOL (WINAPI *pRemoveFontResourceExW)(LPCWSTR name, DWORD fl, PVOID pdv);
+
+static const APIInfo Lists_user32[] = {
+ { "SetLayeredWindowAttributes", (void **)&pSetLayeredWindowAttributes },
+ { "SetThreadDpiAwarenessContext", (void **)&pSetThreadDpiAwarenessContext },
+ { "GetDpiForWindow", (void **)&pGetDpiForWindow },
+ { NULL },
+};
+
+static const APIInfo Lists_msimg32[] = {
+ { "AlphaBlend", (void **)&pAlphaBlend },
+ { NULL },
+};
+
+static const APIInfo Lists_gdi32[] = {
+ { "AddFontResourceExA", (void **)&pAddFontResourceExA },
+ { "RemoveFontResourceExA", (void **)&pRemoveFontResourceExA },
+ { "AddFontResourceExW", (void **)&pAddFontResourceExW },
+ { "RemoveFontResourceExW", (void **)&pRemoveFontResourceExW },
+ { NULL },
+};
+
+static const DllInfo DllInfos[] = {
+ { _T("user32.dll"), DLL_LOAD_LIBRARY_SYSTEM, DLL_ACCEPT_NOT_EXIST, Lists_user32 },
+ { _T("msimg32.dll"), DLL_LOAD_LIBRARY_SYSTEM, DLL_ACCEPT_NOT_EXIST, Lists_msimg32 },
+ { _T("gdi32.dll"), DLL_LOAD_LIBRARY_SYSTEM, DLL_ACCEPT_NOT_EXIST, Lists_gdi32 },
+ { NULL },
+};
+
+void WinCompatInit()
+{
+ static BOOL done = FALSE;
+ if (done) return;
+ done = TRUE;
+
+ DLLGetApiAddressFromLists(DllInfos);
+}
Added: trunk/teraterm/common/compat_win.h
===================================================================
--- trunk/teraterm/common/compat_win.h (rev 0)
+++ trunk/teraterm/common/compat_win.h 2019-03-02 16:19:00 UTC (rev 7457)
@@ -0,0 +1,72 @@
+/*
+ * (C) 2018 TeraTerm Project
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/* compat_win */
+
+#pragma once
+
+#include
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#if !defined(DPI_AWARENESS_CONTEXT_SYSTEM_AWARE)
+#define DPI_AWARENESS_CONTEXT_SYSTEM_AWARE ((DPI_AWARENESS_CONTEXT)-2)
+#define DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE ((DPI_AWARENESS_CONTEXT)-3)
+#define DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2 ((DPI_AWARENESS_CONTEXT)-4)
+DECLARE_HANDLE(DPI_AWARENESS_CONTEXT);
+#endif
+
+#if !defined(WM_DPICHANGED)
+#define WM_DPICHANGED 0x02E0
+#endif
+
+extern BOOL (WINAPI *pAlphaBlend)(HDC,int,int,int,int,HDC,int,int,int,int,BLENDFUNCTION);
+extern BOOL (WINAPI *pEnumDisplayMonitors)(HDC,LPCRECT,MONITORENUMPROC,LPARAM);
+extern DPI_AWARENESS_CONTEXT (WINAPI *pSetThreadDpiAwarenessContext)(DPI_AWARENESS_CONTEXT dpiContext);
+extern UINT (WINAPI *pGetDpiForWindow)(HWND hwnd);
+extern BOOL (WINAPI *pSetLayeredWindowAttributes)(HWND hwnd, COLORREF crKey, BYTE bAlpha, DWORD dwFlags);
+extern int (WINAPI *pAddFontResourceExA)(LPCSTR name, DWORD fl, PVOID res);
+extern int (WINAPI *pAddFontResourceExW)(LPCWSTR name, DWORD fl, PVOID res);
+extern BOOL (WINAPI *pRemoveFontResourceExA)(LPCSTR name, DWORD fl, PVOID pdv);
+extern BOOL (WINAPI *pRemoveFontResourceExW)(LPCWSTR name, DWORD fl, PVOID pdv);
+
+#ifdef UNICODE
+#define pAddFontResourceEx pAddFontResourceExW
+#define pRemoveFontResourceEx pRemoveFontResourceExW
+#else
+#define pAddFontResourceEx pAddFontResourceExA
+#define pRemoveFontResourceEx pRemoveFontResourceExA
+#endif // !UNICODE
+
+void WinCompatInit();
+
+#ifdef __cplusplus
+}
+#endif
Added: trunk/teraterm/common/dllutil.cpp
===================================================================
--- trunk/teraterm/common/dllutil.cpp (rev 0)
+++ trunk/teraterm/common/dllutil.cpp 2019-03-02 16:19:00 UTC (rev 7457)
@@ -0,0 +1,284 @@
+/*
+ * (C) 2019 TeraTerm Project
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include
+#include
+#include
+#include
+
+#include "dllutil.h"
+
+#ifdef _DEBUG
+#define malloc(l) _malloc_dbg((l), _NORMAL_BLOCK, __FILE__, __LINE__)
+#define free(p) _free_dbg((p), _NORMAL_BLOCK)
+#define _strdup(s) _strdup_dbg((s), _NORMAL_BLOCK, __FILE__, __LINE__)
+#endif
+
+typedef struct {
+ const TCHAR *dllName;
+ DLLLoadFlag LoadFlag;
+ HMODULE handle;
+ int refCount;
+} HandleList_t;
+
+static HandleList_t *HandleList;
+static int HandleListCount;
+
+static HMODULE GetHandle(const TCHAR *dllName, DLLLoadFlag LoadFlag)
+{
+ TCHAR dllPath[MAX_PATH];
+ HMODULE module;
+ int i;
+ HandleList_t *p;
+ int r;
+
+ if (LoadFlag == DLL_GET_MODULE_HANDLE) {
+ module = GetModuleHandle(dllName);
+ assert(module != NULL);
+ return module;
+ }
+
+ // \x88ȑO\x82Ƀ\x8D\x81[\x83h\x82\xB5\x82\xBD?
+ p = HandleList;
+ for (i = 0; i < HandleListCount; i++) {
+ if (_tcscmp(p->dllName, dllName) == 0) {
+ p->refCount++;
+ return p->handle;
+ }
+ p++;
+ }
+
+ // \x90V\x82\xBD\x82Ƀ\x8D\x81[\x83h\x82\xB7\x82\xE9
+ dllPath[0] = 0;
+ switch (LoadFlag) {
+ case DLL_LOAD_LIBRARY_SYSTEM:
+ r = GetSystemDirectory(dllPath, _countof(dllPath));
+ assert(r != 0);
+ if (r == 0) return NULL;
+ break;
+ case DLL_LOAD_LIBRARY_CURRENT:
+ r = GetModuleFileName(NULL, dllPath, _countof(dllPath));
+ assert(r != 0);
+ if (r == 0) return NULL;
+ *_tcsrchr(dllPath, _T('\\')) = 0;
+ break;
+ default:
+ return NULL;
+ }
+ _tcscat_s(dllPath, _countof(dllPath), _T("\\"));
+ _tcscat_s(dllPath, _countof(dllPath), dllName);
+ module = LoadLibrary(dllPath);
+ if (module == NULL) {
+ // \x91\xB6\x8D݂\xB5\x82Ȃ\xA2,dll\x82\xB6\x82\xE1\x82Ȃ\xA2?
+ return NULL;
+ }
+
+ // \x83\x8A\x83X\x83g\x82ɒlj\xC1
+ HandleListCount++;
+ HandleList = (HandleList_t *)realloc(HandleList, sizeof(HandleList_t)*HandleListCount);
+ p = &HandleList[i];
+ p->dllName = _tcsdup(dllName);
+ p->handle = module;
+ p->LoadFlag = LoadFlag;
+ p->refCount = 1;
+ return module;
+}
+
+static void FreeHandle(const TCHAR *dllName, DLLLoadFlag LoadFlag)
+{
+ int i;
+ HandleList_t *p;
+
+ if (LoadFlag == DLL_GET_MODULE_HANDLE) {
+ // \x82\xBB\x82̂܂ܒu\x82\xA2\x82Ă\xA8\x82\xAD
+ return;
+ }
+
+ // \x83\x8A\x83X\x83g\x82\xA9\x82\xE7\x8D폜\x82\xB7\x82\xE9
+ p = HandleList;
+ for (i = 0; i < HandleListCount; i++) {
+ if (_tcscmp(p->dllName, dllName) != 0) {
+ continue;
+ }
+
+ // \x8C\xA9\x82\xA9\x82\xC1\x82\xBD
+ p->refCount--;
+ if (p->refCount > 0) {
+ continue;
+ }
+
+ // free
+ FreeLibrary(p->handle);
+ free((void *)p->dllName);
+ memcpy(p, p+1, sizeof(*p) + (HandleListCount - i - 1));
+ HandleListCount--;
+ HandleList = (HandleList_t *)realloc(HandleList, sizeof(HandleList_t)*HandleListCount);
+ return;
+ }
+ // \x83\x8A\x83X\x83g\x82Ɍ\xA9\x82\xA9\x82\xE7\x82Ȃ\xA9\x82\xC1\x82\xBD
+}
+
+/**
+ * DLL\x93\xE0\x82̊\x94\x82ւ̃A\x83h\x83\x8C\x83X\x82\xF0\x8E擾\x82\xB7\x82\xE9
+ * @param[in,out] pFunc \x8A\x94\x82ւ̃A\x83h\x83\x8C\x83X
+ * \x8C\xA9\x82\xA9\x82\xE7\x82Ȃ\xA2\x8E\x9E\x82\xCDNULL\x82\xAA\x91\xE3\x93\xFC\x82\xB3\x82\xEA\x82\xE9
+ * @param[in] FuncFlag \x8A\x94\x82\xAA\x8C\xA9\x82\xA9\x82\xE7\x82Ȃ\xA2\x82Ƃ\xAB\x82̓\xAE\x8D\xEC
+ * DLL_ACCEPT_NOT_EXIST \x8C\xA9\x82\xA9\x82\xE7\x82Ȃ\xAD\x82Ă\xE0ok
+ * DLL_ERROR_NOT_EXIST \x8C\xA9\x82\xA9\x82\xE7\x82Ȃ\xA2\x8Fꍇ\x83G\x83\x89\x81[
+ * @retval NO_ERROR \x83G\x83\x89\x81[\x82Ȃ\xB5
+ * @retval ERROR_FILE_NOT_FOUND DLL\x82\xAA\x8C\xA9\x82\xA9\x82\xE7\x82Ȃ\xA2(\x95s\x90\xB3\x82ȃt\x83@\x83C\x83\x8B)
+ * @retval ERROR_PROC_NOT_FOUND \x8A\x94\x83G\x83\x93\x83g\x83\x8A\x82\xAA\x8C\xA9\x82\xA9\x82\xE7\x82Ȃ\xA2
+ */
+DWORD DLLGetApiAddress(const TCHAR *dllPath, DLLLoadFlag LoadFlag,
+ const char *ApiName, void **pFunc)
+{
+ HMODULE hDll = GetHandle(dllPath, LoadFlag);
+ if (hDll == NULL) {
+ *pFunc = NULL;
+ return ERROR_FILE_NOT_FOUND;
+ } else {
+ *pFunc = GetProcAddress(hDll, ApiName);
+ if (*pFunc == NULL) {
+ return ERROR_PROC_NOT_FOUND;
+ }
+ return NO_ERROR; // = 0
+ }
+}
+
+/**
+ * DLL\x93\xE0\x82̕\xA1\x90\x94\x82̊\x94\x82ւ̃A\x83h\x83\x8C\x83X\x82\xF0\x8E擾\x82\xB7\x82\xE9
+ * @param[in] FuncFlag \x8A\x94\x82\xAA\x8C\xA9\x82\xA9\x82\xE7\x82Ȃ\xA2\x82Ƃ\xAB\x82̓\xAE\x8D\xEC
+ * DLL_ACCEPT_NOT_EXIST \x8C\xA9\x82\xA9\x82\xE7\x82Ȃ\xAD\x82Ă\xE0ok
+ * DLL_ERROR_NOT_EXIST \x8C\xA9\x82\xA9\x82\xE7\x82Ȃ\xA2\x8Fꍇ\x83G\x83\x89\x81[
+ * @retval NO_ERROR \x83G\x83\x89\x81[\x82Ȃ\xB5
+ * @retval ERROR_FILE_NOT_FOUND DLL\x82\xAA\x8C\xA9\x82\xA9\x82\xE7\x82Ȃ\xA2(\x95s\x90\xB3\x82ȃt\x83@\x83C\x83\x8B)
+ * @retval ERROR_PROC_NOT_FOUND \x8A\x94\x83G\x83\x93\x83g\x83\x8A\x82\xAA\x8C\xA9\x82\xA9\x82\xE7\x82Ȃ\xA2
+ */
+DWORD DLLGetApiAddressFromList(const TCHAR *dllPath, DLLLoadFlag LoadFlag,
+ DLLFuncFlag FuncFlag, const APIInfo *ApiInfo)
+{
+ HMODULE hDll = GetHandle(dllPath, LoadFlag);
+ if (hDll == NULL) {
+ while(ApiInfo->ApiName != NULL) {
+ void **func = ApiInfo->func;
+ *func = NULL;
+ ApiInfo++;
+ }
+ return ERROR_FILE_NOT_FOUND;
+ } else {
+ BOOL exist_all = TRUE;
+ const APIInfo *p = ApiInfo;
+
+ // \x83A\x83h\x83\x8C\x83X\x8E擾
+ while(p->ApiName != NULL) {
+ void **func = p->func;
+ *func = (void *)GetProcAddress(hDll, p->ApiName);
+ if (*func == NULL) {
+ exist_all = FALSE;
+ }
+ p++;
+ }
+
+ // \x82\xB7\x82ׂČ\xA9\x82\xA9\x82\xC1\x82\xBD or \x8C\xA9\x82\xA9\x82\xE7\x82Ȃ\xA2API\x82\xAA\x82\xA0\x82\xC1\x82Ă\xE0ok
+ if (exist_all || FuncFlag == DLL_ACCEPT_NOT_EXIST) {
+ return NO_ERROR;
+ }
+
+ // \x8C\xA9\x82\xA9\x82\xE7\x82Ȃ\xA2API\x82\xAA\x82\xA0\x82\xC1\x82\xBD\x82̂ŃG\x83\x89\x81[
+ p = ApiInfo;
+ while(p->ApiName != NULL) {
+ void **func = p->func;
+ *func = NULL;
+ p++;
+ }
+ FreeHandle(dllPath, LoadFlag);
+ return ERROR_PROC_NOT_FOUND;
+ }
+}
+
+void DLLGetApiAddressFromLists(const DllInfo *dllInfos)
+{
+ while (dllInfos->DllName != NULL) {
+ DLLGetApiAddressFromList(dllInfos->DllName,
+ dllInfos->LoadFlag,
+ dllInfos->FuncFlag,
+ dllInfos->APIInfoPtr);
+ dllInfos++;
+ }
+}
+
+static void SetupLoadLibraryPath(void)
+{
+ BOOL (WINAPI *pSetDefaultDllDirectories)(DWORD);
+ BOOL (WINAPI *pSetDllDirectoryA)(LPCSTR);
+ const TCHAR *kernel32 = _T("kernel32.dll");
+
+#if !defined(LOAD_LIBRARY_SEARCH_SYSTEM32)
+#define LOAD_LIBRARY_SEARCH_SYSTEM32 0x00000800
+#endif
+
+ // SetDefaultDllDirectories() \x82\xAA\x8Eg\x82\xA6\x82\xE9\x8Fꍇ\x82́A
+ // \x8C\x9F\x8D\xF5\x83p\x83X\x82\xF0 %WINDOWS%\system32 \x82݂̂ɐݒ肷\x82\xE9
+ DLLGetApiAddress(kernel32, DLL_GET_MODULE_HANDLE,
+ "SetDefaultDllDirectories", (void **)&pSetDefaultDllDirectories);
+ if (pSetDefaultDllDirectories != NULL) {
+ pSetDefaultDllDirectories(LOAD_LIBRARY_SEARCH_SYSTEM32);
+ return;
+ }
+
+ // SetDefaultDllDirectories() \x82\xAA\x8Eg\x82\xA6\x82Ȃ\xAD\x82Ă\xE0
+ // SetDllDirectory() \x82\xAA\x8Eg\x82\xA6\x82\xE9\x8Fꍇ\x82\xCD
+ // \x83J\x83\x8C\x83\x93\x83g\x83f\x83B\x83\x8C\x83N\x83g\x83\x8A\x82\xBE\x82\xAF\x82ł\xE0\x8C\x9F\x8D\xF5\x83p\x83X\x82\xA9\x82\xE7\x82͂\xB8\x82\xB5\x82Ă\xA8\x82\xAD\x81B
+ DLLGetApiAddress(kernel32, DLL_GET_MODULE_HANDLE,
+ "SetDllDirectoryA", (void **)&pSetDllDirectoryA);
+ if (pSetDllDirectoryA != NULL) {
+ pSetDllDirectoryA("");
+ }
+}
+
+void DLLInit()
+{
+ HandleList = NULL;
+ HandleListCount = 0;
+ SetupLoadLibraryPath();
+}
+
+void DLLExit()
+{
+ int i;
+ for (i = 0; i < HandleListCount; i++) {
+ HandleList_t *p = &HandleList[i];
+ if (p->LoadFlag != DLL_GET_MODULE_HANDLE) {
+ FreeLibrary(p->handle);
+ }
+ free((void *)p->dllName);
+ }
+ free(HandleList);
+ HandleList = NULL;
+ HandleListCount = 0;
+}
Added: trunk/teraterm/common/dllutil.h
===================================================================
--- trunk/teraterm/common/dllutil.h (rev 0)
+++ trunk/teraterm/common/dllutil.h 2019-03-02 16:19:00 UTC (rev 7457)
@@ -0,0 +1,66 @@
+/*
+ * (C) 2019 TeraTerm Project
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef enum {
+ DLL_GET_MODULE_HANDLE,
+ DLL_LOAD_LIBRARY_SYSTEM,
+ DLL_LOAD_LIBRARY_CURRENT,
+} DLLLoadFlag;
+
+typedef enum {
+ DLL_ACCEPT_NOT_EXIST,
+ DLL_ERROR_NOT_EXIST,
+} DLLFuncFlag;
+
+typedef struct {
+ const char *ApiName;
+ void **func;
+} APIInfo;
+
+typedef struct {
+ const TCHAR *DllName;
+ DLLLoadFlag LoadFlag;
+ DLLFuncFlag FuncFlag;
+ const APIInfo *APIInfoPtr;
+} DllInfo;
+
+void DLLInit();
+void DLLExit();
+void DLLGetApiAddressFromLists(const DllInfo *dllInfos);
+DWORD DLLGetApiAddressFromList(const TCHAR *dllPath, DLLLoadFlag LoadFlag,
+ DLLFuncFlag FuncFlag, const APIInfo *ApiInfo);
+DWORD DLLGetApiAddress(const TCHAR *dllPath, DLLLoadFlag LoadFlag,
+ const char *ApiName, void **pFunc);
+
+#ifdef __cplusplus
+}
+#endif
Modified: trunk/teraterm/teraterm/CMakeLists.txt
===================================================================
--- trunk/teraterm/teraterm/CMakeLists.txt 2019-03-02 16:18:47 UTC (rev 7456)
+++ trunk/teraterm/teraterm/CMakeLists.txt 2019-03-02 16:19:00 UTC (rev 7457)
@@ -26,7 +26,11 @@
../common/win16api.c
../common/codemap.h
../common/compat_w95.h
+ ../common/compat_win.h
+ ../common/compat_win.cpp
../common/i18n.h
+ ../common/dllutil.cpp
+ ../common/dllutil.h
../ttpcmn/language.h
)
Modified: trunk/teraterm/teraterm/teraterm.cpp
===================================================================
--- trunk/teraterm/teraterm/teraterm.cpp 2019-03-02 16:18:47 UTC (rev 7456)
+++ trunk/teraterm/teraterm/teraterm.cpp 2019-03-02 16:19:00 UTC (rev 7457)
@@ -45,15 +45,19 @@
#include "tekwin.h"
#include "ttdde.h"
#include "keyboard.h"
+#include "dllutil.h"
+#include "compat_win.h"
#include "teraapp.h"
#include "compat_w95.h"
-#ifdef _DEBUG
-#define new DEBUG_NEW
-#undef THIS_FILE
-static char THIS_FILE[] = __FILE__;
+#if 0
+//#ifdef _DEBUG
+//#define new DEBUG_NEW
+//#undef THIS_FILE
+//static char THIS_FILE[] = __FILE__;
+#define new ::new(_NORMAL_BLOCK, __FILE__, __LINE__)
#endif
BEGIN_MESSAGE_MAP(CTeraApp, CWinApp)
@@ -61,28 +65,95 @@
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
-CTeraApp::CTeraApp()
+typedef struct {
+ const TCHAR *FaceName;
+ bool found;
+} EnumFontInfo;
+
+static int CALLBACK EnumFontExProc(
+ ENUMLOGFONT* lpelf, NEWTEXTMETRIC* lpntm,
+ int nFontType, LPARAM lParam)
{
- typedef BOOL (WINAPI *pSetDllDir)(LPCSTR);
- typedef BOOL (WINAPI *pSetDefDllDir)(DWORD);
+ EnumFontInfo *info = (EnumFontInfo *)lParam;
+ if (nFontType == DEVICE_FONTTYPE) {
+ // \x90ڑ\xB1\x82\xB3\x82ꂽ\x83f\x83o\x83C\x83X(\x83v\x83\x8A\x83\x93\x83^\x82Ȃ\xC7)\x93\xE0\x82̃t\x83H\x83\x93\x83g
+ return 1;
+ }
+ const TCHAR *FaceName = lpelf->elfLogFont.lfFaceName;
+ if (_tcscmp(info->FaceName, FaceName) == 0) {
+ info->found = true;
+ return 0;
+ }
+ return 1;
+}
- HMODULE module;
- pSetDllDir setDllDir;
- pSetDefDllDir setDefDllDir;
+BOOL isExistFont(const TCHAR *FaceName)
+{
+ HDC hDC = GetDC(NULL);
+ LOGFONT lf;
+ memset(&lf, 0, sizeof(lf));
+ lf.lfCharSet = DEFAULT_CHARSET;// SHIFTJIS_CHARSET;
+ lf.lfPitchAndFamily = 0;
- if ((module = GetModuleHandle("kernel32.dll")) != NULL) {
- if ((setDefDllDir = (pSetDefDllDir)GetProcAddress(module, "SetDefaultDllDirectories")) != NULL) {
- // SetDefaultDllDirectories() \x82\xAA\x8Eg\x82\xA6\x82\xE9\x8Fꍇ\x82́A\x8C\x9F\x8D\xF5\x83p\x83X\x82\xF0 %WINDOWS%\system32 \x82݂̂ɐݒ肷\x82\xE9
- (*setDefDllDir)((DWORD)0x00000800); // LOAD_LIBRARY_SEARCH_SYSTEM32
+ EnumFontInfo info;
+ info.FaceName = FaceName;
+ info.found = false;
+ EnumFontFamiliesEx(hDC, &lf, (FONTENUMPROC)EnumFontExProc, (LPARAM)&info, 0);
+ ReleaseDC(NULL, hDC);
+ return info.found;
+}
+
+static BOOL AddFontFlag;
+static TCHAR TSpecialFont[MAX_PATH];
+
+static void LoadSpecialFont()
+{
+ if (!isExistFont(_T("Tera Special"))) {
+ int r;
+
+ if (GetModuleFileName(NULL, TSpecialFont,_countof(TSpecialFont)) == 0) {
+ AddFontFlag = FALSE;
+ return;
}
- else if ((setDllDir = (pSetDllDir)GetProcAddress(module, "SetDllDirectoryA")) != NULL) {
- // SetDefaultDllDirectories() \x82\xAA\x8Eg\x82\xA6\x82Ȃ\xAD\x82Ă\xE0\x81ASetDllDirectory() \x82\xAA\x8Eg\x82\xA6\x82\xE9\x8Fꍇ\x82\xCD
- // \x83J\x83\x8C\x83\x93\x83g\x83f\x83B\x83\x8C\x83N\x83g\x83\x8A\x82\xBE\x82\xAF\x82ł\xE0\x8C\x9F\x8D\xF5\x83p\x83X\x82\xA9\x82\xE7\x82͂\xB8\x82\xB5\x82Ă\xA8\x82\xAD\x81B
- (*setDllDir)("");
+ *_tcsrchr(TSpecialFont, _T('\\')) = 0;
+ _tcscat_s(TSpecialFont, _T("\\TSPECIAL1.TTF"));
+
+ if (pAddFontResourceEx != NULL) {
+ // teraterm.exe\x82݂̂ŗL\x8C\xF8\x82ȃt\x83H\x83\x93\x83g\x82ƂȂ\xE9\x81B
+ // remove\x82\xB5\x82Ȃ\xAD\x82Ă\xE0\x8FI\x97\xB9\x82\xB7\x82\xE9\x82\xC6OS\x82\xA9\x82\xE7\x82Ȃ\xAD\x82Ȃ\xE9
+ r = pAddFontResourceEx(TSpecialFont, FR_PRIVATE, NULL);
+ } else {
+ // \x83V\x83X\x83e\x83\x80\x91S\x91̂Ŏg\x82\xA6\x82\xE9\x83t\x83H\x83\x93\x83g\x82ƂȂ\xE9
+ // remove\x82\xB5\x82Ȃ\xA2\x82\xC6OS\x82\xAA\x92͂܂܂ƂȂ\xE9
+ r = AddFontResource(TSpecialFont);
}
+ if (r != 0) {
+ AddFontFlag = TRUE;
+ }
}
}
+static void UnloadSpecialFont()
+{
+ if (AddFontFlag) {
+ if (pRemoveFontResourceEx != NULL) {
+ pRemoveFontResourceEx(TSpecialFont, FR_PRIVATE, NULL);
+ } else {
+ RemoveFontResource(TSpecialFont);
+ }
+ }
+}
+
+CTeraApp::CTeraApp()
+{
+#ifdef _DEBUG
+ ::_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);
+#endif
+
+ DLLInit();
+ WinCompatInit();
+}
+
// CTeraApp instance
CTeraApp theApp;
@@ -93,6 +164,7 @@
// CTeraApp initialization
BOOL CTeraApp::InitInstance()
{
+ LoadSpecialFont();
hInst = m_hInstance;
m_pMainWnd = new CVTWindow();
pVTWin = m_pMainWnd;
@@ -101,6 +173,8 @@
int CTeraApp::ExitInstance()
{
+ UnloadSpecialFont();
+ DLLExit();
return CWinApp::ExitInstance();
}
Modified: trunk/teraterm/teraterm/ttermpro.vcproj
===================================================================
--- trunk/teraterm/teraterm/ttermpro.vcproj 2019-03-02 16:18:47 UTC (rev 7456)
+++ trunk/teraterm/teraterm/ttermpro.vcproj 2019-03-02 16:19:00 UTC (rev 7457)
@@ -389,6 +389,14 @@
RelativePath="..\common\win16api.c"
>
+
+
+
+
Revision: 7458
http://sourceforge.jp/projects/ttssh2/scm/svn/commits/7458
Author: zmatsuo
Date: 2019-03-03 16:40:17 +0900 (Sun, 03 Mar 2019)
Log Message:
-----------
ticket #39007
キャレットON時IMEに候補ウィンドウ位置を通知するようにした(従来と同様。ただし、IME ON時のみ)
候補ウィンドウ位置設定時に候補ウィンドウのフォントの設定を行わないようにした。
Ticket Links:
------------
http://sourceforge.jp/projects/ttssh2/tracker/detail/39007
Modified Paths:
--------------
trunk/teraterm/teraterm/ttime.c
trunk/teraterm/teraterm/ttime.h
trunk/teraterm/teraterm/vtdisp.c
-------------- next part --------------
Modified: trunk/teraterm/teraterm/ttime.c
===================================================================
--- trunk/teraterm/teraterm/ttime.c 2019-03-02 16:19:00 UTC (rev 7457)
+++ trunk/teraterm/teraterm/ttime.c 2019-03-03 07:40:17 UTC (rev 7458)
@@ -186,15 +186,20 @@
else
cf.dwStyle = CFS_DEFAULT;
(*PImmSetCompositionWindow)(hIMC,&cf);
-
- // Set font for the conversion window
- (*PImmSetCompositionFont)(hIMC,&lfIME);
(*PImmReleaseContext)(HVTWin,hIMC);
}
-void SetConversionLogFont(PLOGFONT lf)
+void SetConversionLogFont(HWND HWin, PLOGFONT lf)
{
+ HIMC hIMC;
+ if (HIMEDLL == NULL) return;
+
memcpy(&lfIME,lf,sizeof(LOGFONT));
+
+ hIMC = (*PImmGetContext)(HVTWin);
+ // Set font for the conversion window
+ (*PImmSetCompositionFont)(hIMC,&lfIME);
+ (*PImmReleaseContext)(HVTWin,hIMC);
}
HGLOBAL GetConvString(UINT wParam, LPARAM lParam)
Modified: trunk/teraterm/teraterm/ttime.h
===================================================================
--- trunk/teraterm/teraterm/ttime.h 2019-03-02 16:19:00 UTC (rev 7457)
+++ trunk/teraterm/teraterm/ttime.h 2019-03-03 07:40:17 UTC (rev 7458)
@@ -38,7 +38,7 @@
void FreeIME();
BOOL CanUseIME();
void SetConversionWindow(HWND HWin, int X, int Y);
-void SetConversionLogFont(PLOGFONT lf);
+void SetConversionLogFont(HWND HWin, PLOGFONT lf);
BOOL GetIMEOpenStatus(void);
void SetIMEOpenStatus(BOOL stat);
Modified: trunk/teraterm/teraterm/vtdisp.c
===================================================================
--- trunk/teraterm/teraterm/vtdisp.c 2019-03-02 16:19:00 UTC (rev 7457)
+++ trunk/teraterm/teraterm/vtdisp.c 2019-03-03 07:40:17 UTC (rev 7458)
@@ -1981,7 +1981,7 @@
VTFont[0] = CreateFontIndirect(&VTlf);
/* set IME font */
- SetConversionLogFont(&VTlf);
+ SetConversionLogFont(HVTWin, &VTlf);
TmpDC = GetDC(HVTWin);
@@ -2063,7 +2063,7 @@
if (ts.UseIME>0)
{
if (ts.IMEInline>0)
- SetConversionLogFont(&VTlf);
+ SetConversionLogFont(HVTWin, &VTlf);
else
SetConversionWindow(HVTWin,-1,0);
}
@@ -2219,6 +2219,15 @@
CaretX = (CursorX-WinOrgX)*FontWidth;
CaretY = (CursorY-WinOrgY)*FontHeight;
+
+ if (IMEstat) {
+ // IME ON \x82̏ꍇ\x82݂̂̏\x88\x97\x9D
+ // \x95\xB6\x8E\x9A\x93\xFC\x97͂\xF0\x8AJ\x8En(\x95ϊ\xB7\x83E\x83B\x83\x93\x83h\x83E\x82\xAA\x95\\x8E\xA6\x82\xB3\x82\xEA\x82Ă\xA2\x82\xE9)\x8F\xF3\x91Ԃ\xC5
+ // \x83z\x83X\x83g\x82\xA9\x82\xE7\x82̃G\x83R\x81[\x82\xF0\x8E\xF3\x90M\x82\xB5\x82\xC4caret\x88ʒu\x82\xAA\x95ω\xBB\x82\xB5\x82\xBD\x8Fꍇ\x81A
+ // \x95ϊ\xB7\x83E\x83B\x83\x93\x83h\x83E\x82̈ʒu\x82\xF0\x8DX\x90V\x82\xB7\x82\xE9\x95K\x97v\x82\xAA\x82\xA0\x82\xE9
+ SetConversionWindow(HVTWin,CaretX,CaretY);
+ }
+
if (ts.CursorShape!=IdVCur) {
if (ts.CursorShape==IdHCur) {
CaretY = CaretY+FontHeight-CurWidth;
From scmnotify @ osdn.net Mon Mar 4 01:03:33 2019
From: scmnotify @ osdn.net (scmnotify @ osdn.net)
Date: Mon, 04 Mar 2019 01:03:33 +0900
Subject: [Ttssh2-commit] =?utf-8?b?Wzc0NTldIElNReOBruWAmeijnOOCpuOCow==?=
=?utf-8?b?44Oz44OJ44Km44Gu5L2N572u6Kit5a6a44KS5pyA5bCP6ZmQ44Gr44GX44Gf?=
Message-ID: <1551629013.415816.17458.nullmailer@users.osdn.me>
Revision: 7459
http://sourceforge.jp/projects/ttssh2/scm/svn/commits/7459
Author: zmatsuo
Date: 2019-03-04 01:03:33 +0900 (Mon, 04 Mar 2019)
Log Message:
-----------
IMEの候補ウィンドウの位置設定を最小限にした
Modified Paths:
--------------
trunk/doc/ja/html/about/history.html
trunk/teraterm/teraterm/vtdisp.c
trunk/teraterm/teraterm/vtdisp.h
trunk/teraterm/teraterm/vtwin.cpp
trunk/teraterm/teraterm/vtwin.h
-------------- next part --------------
Modified: trunk/doc/ja/html/about/history.html
===================================================================
--- trunk/doc/ja/html/about/history.html 2019-03-03 07:40:17 UTC (rev 7458)
+++ trunk/doc/ja/html/about/history.html 2019-03-03 16:03:33 UTC (rev 7459)
@@ -33,6 +33,12 @@
2019.xx.xx (Ver 4.103)
+ \x83o\x83O\x8FC\x90\xB3
+
+ IME\x82̕ϊ\xB7\x8C\xF3\x95\xE2\x83E\x83B\x83\x93\x83h\x83E\x82̕\\x8E\xA6\x88ʒu\x82\xF0\x83J\x81[\x83\\x83\x8B\x88ʒu\x82ɒǏ]\x82\xB7\x82\xE9\x82悤\x82ɂ\xB5\x82\xBD\x81B(4.102\x82̍\x82\x91\xAC\x89\xBB\x82̉e\x8B\xBF)
+
+
+
\x82\xBB\x82̑\xBC
TTSSH(2.89) \x82֍\xB7\x82\xB5\x91ւ\xA6\x82\xBD\x81B
Modified: trunk/teraterm/teraterm/vtdisp.c
===================================================================
--- trunk/teraterm/teraterm/vtdisp.c 2019-03-03 07:40:17 UTC (rev 7458)
+++ trunk/teraterm/teraterm/vtdisp.c 2019-03-03 16:03:33 UTC (rev 7459)
@@ -1,6 +1,6 @@
/*
* Copyright (C) 1994-1998 T. Teranishi
- * (C) 2005-2018 TeraTerm Project
+ * (C) 2005-2019 TeraTerm Project
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -111,7 +111,8 @@
// caret variables
static int CaretStatus;
static BOOL CaretEnabled = TRUE;
-BOOL IMEstat; /* IME Status TRUE=IME ON */
+BOOL IMEstat; /* IME Status TRUE=IME ON */
+BOOL IMEShowingCandidate; /* \x8C\xF3\x95\xE2\x83E\x83B\x83\x93\x83h\x83E\x95\\x8E\xA6\x8F\xF3\x8B\xB5 TRUE=\x95\\x8E\xA6\x92\x86 */
// ---- device context and status flags
static HDC VTDC = NULL; /* Device context for VT window */
@@ -2220,9 +2221,9 @@
CaretX = (CursorX-WinOrgX)*FontWidth;
CaretY = (CursorY-WinOrgY)*FontHeight;
- if (IMEstat) {
- // IME ON \x82̏ꍇ\x82݂̂̏\x88\x97\x9D
- // \x95\xB6\x8E\x9A\x93\xFC\x97͂\xF0\x8AJ\x8En(\x95ϊ\xB7\x83E\x83B\x83\x93\x83h\x83E\x82\xAA\x95\\x8E\xA6\x82\xB3\x82\xEA\x82Ă\xA2\x82\xE9)\x8F\xF3\x91Ԃ\xC5
+ if (IMEstat && IMEShowingCandidate) {
+ // IME ON && \x8C\xF3\x95\xE2\x83E\x83B\x83\x93\x83h\x83E\x95\\x8E\xA6\x92\x86\x82̏ꍇ\x82݂̂̏\x88\x97\x9D
+ // \x8C\xF3\x95\xE2\x83E\x83B\x83\x93\x83h\x83E\x82\xAA\x95\\x8E\xA6\x82\xB3\x82\xEA\x82Ă\xA2\x82\xE9\x8F\xF3\x91Ԃ\xC5
// \x83z\x83X\x83g\x82\xA9\x82\xE7\x82̃G\x83R\x81[\x82\xF0\x8E\xF3\x90M\x82\xB5\x82\xC4caret\x88ʒu\x82\xAA\x95ω\xBB\x82\xB5\x82\xBD\x8Fꍇ\x81A
// \x95ϊ\xB7\x83E\x83B\x83\x93\x83h\x83E\x82̈ʒu\x82\xF0\x8DX\x90V\x82\xB7\x82\xE9\x95K\x97v\x82\xAA\x82\xA0\x82\xE9
SetConversionWindow(HVTWin,CaretX,CaretY);
Modified: trunk/teraterm/teraterm/vtdisp.h
===================================================================
--- trunk/teraterm/teraterm/vtdisp.h 2019-03-03 07:40:17 UTC (rev 7458)
+++ trunk/teraterm/teraterm/vtdisp.h 2019-03-03 16:03:33 UTC (rev 7459)
@@ -1,6 +1,6 @@
/*
* Copyright (C) 1994-1998 T. Teranishi
- * (C) 2008-2017 TeraTerm Project
+ * (C) 2008-2019 TeraTerm Project
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -128,6 +128,7 @@
extern TCharAttr DefCharAttr;
extern BOOL IMEstat;
+extern BOOL IMEShowingCandidate;
#define SCROLL_BOTTOM 1
#define SCROLL_LINEDOWN 2
Modified: trunk/teraterm/teraterm/vtwin.cpp
===================================================================
--- trunk/teraterm/teraterm/vtwin.cpp 2019-03-03 07:40:17 UTC (rev 7458)
+++ trunk/teraterm/teraterm/vtwin.cpp 2019-03-03 16:03:33 UTC (rev 7459)
@@ -161,6 +161,7 @@
ON_WM_VSCROLL()
ON_WM_DEVICECHANGE()
ON_MESSAGE(WM_IME_STARTCOMPOSITION,OnIMEStartComposition)
+ ON_MESSAGE(WM_IME_ENDCOMPOSITION,OnIMEEndComposition)
ON_MESSAGE(WM_IME_COMPOSITION,OnIMEComposition)
ON_MESSAGE(WM_INPUTLANGCHANGE,OnIMEInputChange)
ON_MESSAGE(WM_IME_NOTIFY,OnIMENotify)
@@ -3199,6 +3200,8 @@
LRESULT CVTWindow::OnIMEStartComposition(WPARAM wParam, LPARAM lParam)
{
+ IMEShowingCandidate = TRUE;
+
// \x88ʒu\x82\xF0\x92ʒm\x82\xB7\x82\xE9
int CaretX = (CursorX-WinOrgX)*FontWidth;
int CaretY = (CursorY-WinOrgY)*FontHeight;
@@ -3207,6 +3210,12 @@
return CFrameWnd::DefWindowProc(WM_IME_STARTCOMPOSITION,wParam,lParam);
}
+LRESULT CVTWindow::OnIMEEndComposition(WPARAM wParam, LPARAM lParam)
+{
+ IMEShowingCandidate = FALSE;
+ return CFrameWnd::DefWindowProc(WM_IME_ENDCOMPOSITION,wParam,lParam);
+}
+
LRESULT CVTWindow::OnIMEComposition(WPARAM wParam, LPARAM lParam)
{
HGLOBAL hstr;
@@ -3274,7 +3283,10 @@
LONG CVTWindow::OnIMENotify(UINT wParam, LONG lParam)
{
- if (wParam == IMN_SETOPENSTATUS) {
+ switch (wParam) {
+ case IMN_SETOPENSTATUS: {
+ // \x93\xFC\x97̓R\x83\x93\x83e\x83L\x83X\x83g\x82̊J\x95\xF3\x91Ԃ\xAA\x8DX\x90V\x82\xB3\x82\xEA\x82\xE9(IME On/OFF)
+
// IME\x82\xCCOn/Off\x82\xF0\x8E擾\x82\xB7\x82\xE9
IMEstat = GetIMEOpenStatus();
@@ -3285,8 +3297,32 @@
// \x95`\x89\xE6
ChangeCaret();
+
+ break;
}
+ // \x8C\xF3\x95\xE2\x83E\x83B\x83\x93\x83h\x83E\x82̕\\x8E\xA6\x8Fʒm
+ // IME_OPENCANDIDATE / IMN_CLOSECANDIDATE \x83T\x83|\x81[\x83g\x8F\xF3\x8B\xB5
+ //
+ // IME status
+ // --------------------------------+----------
+ // MS IME \x93\xFA\x96{\x8C\xEA(Windows 10 1809) suport
+ // Google \x93\xFA\x96{\x8C\xEA\x93\xFC\x97\xCD(2.24.3250.0) not support
+ //
+ // WM_IME_STARTCOMPOSITION, WM_IME_ENDCOMPOSITION\x82݂̂Ŕ\xBB\x92\xE8\x89\\x82\xBE\x82\xAA
+ // \x94O\x82ׂ̈\xB1\x82̃\x81\x83b\x83Z\x81[\x83W\x82\xE0\x8F\x88\x97\x9D\x82\xB7\x82\xE9
+ case IMN_OPENCANDIDATE:
+ // \x8C\xF3\x95\xE2\x83E\x83B\x83\x93\x83h\x83E\x82\xF0\x8AJ\x82\xB1\x82\xA4\x82Ƃ\xB5\x82Ă\xA2\x82\xE9
+ IMEShowingCandidate = TRUE;
+ break;
+ case IMN_CLOSECANDIDATE:
+ // \x8C\xF3\x95\xE2\x83E\x83B\x83\x93\x83h\x83E\x82\xF0\x95\xB6\x82悤\x82Ƃ\xB5\x82Ă\xA2\x82\xE9
+ IMEShowingCandidate = FALSE;
+ break;
+ default:
+ break;
+ }
+
return CFrameWnd::DefWindowProc(WM_IME_NOTIFY,wParam,lParam);
}
Modified: trunk/teraterm/teraterm/vtwin.h
===================================================================
--- trunk/teraterm/teraterm/vtwin.h 2019-03-03 07:40:17 UTC (rev 7458)
+++ trunk/teraterm/teraterm/vtwin.h 2019-03-03 16:03:33 UTC (rev 7459)
@@ -136,6 +136,7 @@
afx_msg LONG OnExitSizeMove(UINT wParam, LONG lParam);
//-->
afx_msg LRESULT OnIMEStartComposition(WPARAM wParam, LPARAM lParam);
+ afx_msg LRESULT OnIMEEndComposition(WPARAM wParam, LPARAM lParam);
afx_msg LONG OnIMEComposition(UINT wParam, LONG lParam);
afx_msg LONG OnIMEInputChange(UINT wParam, LONG lParam);
afx_msg LONG OnIMENotify(UINT wParam, LONG lParam);
From scmnotify @ osdn.net Tue Mar 5 16:51:04 2019
From: scmnotify @ osdn.net (scmnotify @ osdn.net)
Date: Tue, 05 Mar 2019 16:51:04 +0900
Subject: [Ttssh2-commit] =?utf-8?b?Wzc0NjBdIOWkieabtOWxpeattOS/ruatow==?=
Message-ID: <1551772264.366219.53802.nullmailer@users.osdn.me>
Revision: 7460
http://sourceforge.jp/projects/ttssh2/scm/svn/commits/7460
Author: maya
Date: 2019-03-05 16:51:03 +0900 (Tue, 05 Mar 2019)
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 2019-03-03 16:03:33 UTC (rev 7459)
+++ trunk/doc/en/html/about/history.html 2019-03-05 07:51:03 UTC (rev 7460)
@@ -33,6 +33,12 @@
2019.xx.xx (Ver 4.103)
+ Bug fixes
+
+ This bus was introduced in 4.102.
+
+
+
Misc
upgraded TTSSH to 2.89 .
Modified: trunk/doc/ja/html/about/history.html
===================================================================
--- trunk/doc/ja/html/about/history.html 2019-03-03 16:03:33 UTC (rev 7459)
+++ trunk/doc/ja/html/about/history.html 2019-03-05 07:51:03 UTC (rev 7460)
@@ -35,7 +35,7 @@
\x83o\x83O\x8FC\x90\xB3
- IME\x82̕ϊ\xB7\x8C\xF3\x95\xE2\x83E\x83B\x83\x93\x83h\x83E\x82̕\\x8E\xA6\x88ʒu\x82\xF0\x83J\x81[\x83\\x83\x8B\x88ʒu\x82ɒǏ]\x82\xB7\x82\xE9\x82悤\x82ɂ\xB5\x82\xBD\x81B(4.102\x82̍\x82\x91\xAC\x89\xBB\x82̉e\x8B\xBF)
+ IME\x82̕ϊ\xB7\x8C\xF3\x95\xE2\x83E\x83B\x83\x93\x83h\x83E\x82̕\\x8E\xA6\x88ʒu\x82\xAA\x83J\x81[\x83\\x83\x8B\x88ʒu\x82ɒǏ]\x82\xB5\x82Ȃ\xA2\x96\xE2\x91\xE8\x82\xF0\x8FC\x90\xB3\x82\xB5\x82\xBD\x81B4.102\x82ł̃G\x83\x93\x83o\x83O\x81B
From scmnotify @ osdn.net Wed Mar 6 01:22:05 2019
From: scmnotify @ osdn.net (scmnotify @ osdn.net)
Date: Wed, 06 Mar 2019 01:22:05 +0900
Subject: [Ttssh2-commit] =?utf-8?b?Wzc0NjFdIOS4gOmDqOOBrnVuaWNvZGXjgYw=?=
=?utf-8?b?44GG44G+44GP6KGo56S644Gn44GN44Gq44GP44Gq44Gj44Gf44Gf44KB5a++?=
=?utf-8?b?562W?=
Message-ID: <1551802925.579787.141888.nullmailer@users.osdn.me>
Revision: 7461
http://sourceforge.jp/projects/ttssh2/scm/svn/commits/7461
Author: zmatsuo
Date: 2019-03-06 01:22:05 +0900 (Wed, 06 Mar 2019)
Log Message:
-----------
一部のunicodeがうまく表示できなくなったため対策
U+2014 EM DASH
U+2016 DOUBLE VERTICAL LINE
U+203E OVERLINE
U+2212 MINUS SIGN
U+301C WAVE DASH
Modified Paths:
--------------
trunk/teraterm/teraterm/vtterm.c
-------------- next part --------------
Modified: trunk/teraterm/teraterm/vtterm.c
===================================================================
--- trunk/teraterm/teraterm/vtterm.c 2019-03-05 07:51:03 UTC (rev 7460)
+++ trunk/teraterm/teraterm/vtterm.c 2019-03-05 16:22:05 UTC (rev 7461)
@@ -5486,6 +5486,10 @@
// Unicode -> \x93\xE0\x95\x94\x83R\x81[\x83h(ts.CodePage)\x82֕ϊ\xB7\x82\xB5\x82ďo\x97\xCD
ret = WideCharToMultiByte(ts.CodePage, 0, &wchar, 1, mbchar, 2, NULL, NULL);
+ if (ret == 1 && mbchar[0] == '?' && code != '?') {
+ // \x95ϊ\xB7\x82ł\xAB\x82Ȃ\xA9\x82\xC1\x82\xBD\x82Ƃ\xAB\x81Aret=1, '?' \x82\xF0\x95Ԃ\xB5\x82Ă\xAD\x82\xE9
+ ret = 0;
+ }
switch (ret) {
case 0:
if (ts.CodePage == 932) {
From scmnotify @ osdn.net Sun Mar 10 02:32:42 2019
From: scmnotify @ osdn.net (scmnotify @ osdn.net)
Date: Sun, 10 Mar 2019 02:32:42 +0900
Subject: [Ttssh2-commit] =?utf-8?b?Wzc0NjJdIHVuaWNvZGXplqLpgKPjgpJjb2Rl?=
=?utf-8?b?Y29udi5j44Gr6ZuG44KB44Gf?=
Message-ID: <1552152762.933780.90560.nullmailer@users.osdn.me>
Revision: 7462
http://sourceforge.jp/projects/ttssh2/scm/svn/commits/7462
Author: zmatsuo
Date: 2019-03-10 02:32:42 +0900 (Sun, 10 Mar 2019)
Log Message:
-----------
unicode関連をcodeconv.cに集めた
CP932へ/からの変換を関数に分離(UTF32ToCP932(), UTF32ToCP932())
unicodeからDEC特殊文字変換を関数に分離(UTF32ToDecSp())
SJIS2UTF8() (内部コードからUTF-8へ出力)を language.c から ttcmn.c に移動
_WideCharToMultiByte(), _MultiByteToWideChar() の変換した文字数の戻り値修正
UTF32ToMBCP()追加
UTF32_CP932()追加
MBCPToUTF32()追加
WideCharToUTF8(), WideCharToCP932() の仕様を変更
変換テーブルとWindows APIをつかったコード変換の優先順位を変更できるようにした
Modified Paths:
--------------
trunk/teraterm/common/codeconv.cpp
trunk/teraterm/common/codeconv.h
trunk/teraterm/teraterm/CMakeLists.txt
trunk/teraterm/teraterm/vtterm.c
trunk/teraterm/ttpcmn/language.c
trunk/teraterm/ttpcmn/language.h
trunk/teraterm/ttpcmn/ttcmn.c
-------------- next part --------------
Modified: trunk/teraterm/common/codeconv.cpp
===================================================================
--- trunk/teraterm/common/codeconv.cpp 2019-03-05 16:22:05 UTC (rev 7461)
+++ trunk/teraterm/common/codeconv.cpp 2019-03-09 17:32:42 UTC (rev 7462)
@@ -26,14 +26,21 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
+/* unicode\x8A֘A\x82̕\xB6\x8E\x9A\x83R\x81[\x83h\x95ϊ\xB7 */
+
#include
#include
+#include
#include
#if (defined(_MSC_VER) && (_MSC_VER >= 1600)) || !defined(_MSC_VER)
#include
#endif
+#include "codemap.h"
#include "codeconv.h"
+// cp932\x95ϊ\xB7\x8E\x9E\x81AWindows API \x82\xE6\x82\xE8 Tera Term \x82̕ϊ\xB7\x83e\x81[\x83u\x83\x8B\x82\xF0\x97D\x90悷\x82\xE9
+//#define PRIORITY_CP932_TABLE
+
#if defined(_MSC_VER) && (_MSC_VER < 1600)
typedef unsigned char uint8_t;
typedef unsigned short uint16_t;
@@ -47,12 +54,158 @@
#define _wcsdup(s) _wcsdup_dbg((s), _NORMAL_BLOCK, __FILE__, __LINE__)
#endif
+/*
+ * \x8C\xA9\x82\xA9\x82\xE7\x82Ȃ\xA2\x8Fꍇ\x82\xCD 0 \x82\xF0\x95Ԃ\xB7
+ */
+static unsigned short _ConvertUnicode(unsigned short code, const codemap_t *table, int tmax)
+{
+ int low, mid, high;
+ unsigned short result;
+
+ low = 0;
+ high = tmax - 1;
+ result = 0; // convert error
+
+ // binary search
+ while (low < high) {
+ mid = (low + high) / 2;
+ if (table[mid].from_code < code) {
+ low = mid + 1;
+ } else {
+ high = mid;
+ }
+ }
+
+ if (table[low].from_code == code) {
+ result = table[low].to_code;
+ }
+
+ return (result);
+}
+
+static int IsHighSurrogate(wchar_t u16)
+{
+ return 0xd800 <= u16 && u16 < 0xdc00;
+}
+
+static int IsLowSurrogate(wchar_t u16)
+{
+ return 0xdc00 <= u16 && u16 < 0xe000;
+}
+
/**
- * UTF-32 \x82\xA9\x82\xE7 UTF-8 \x82֕ϊ\xB7\x82\xB7\x82\xE9
+ * 1\x95\xB6\x8E\x9A\x82Ƃ\xB5\x82Ĉ\xB5\x82\xA4\x82\xBD\x82߂ɁA\x95K\x97v\x82ȃL\x83\x83\x83\x89\x83N\x83^\x90\x94\x82\xE9
+ * @retval 0 \x95\xB6\x8E\x9A\x82Ƃ\xB5\x82Ĉ\xB5\x82\xA6\x82Ȃ\xA2(\x95\xB6\x8E\x9A\x83R\x81[\x83h\x82\xAA\x82\xA8\x82\xA9\x82\xB5\x82\xA2)
+ * @retval 1 1\x83L\x83\x83\x83\x89\x83N\x83^\x82\xC51\x95\xB6\x8E\x9A\x82Ƃ\xB5\x82Ĉ\xB5\x82\xA6\x82\xE9
+ * @retval 2 2\x83L\x83\x83\x83\x89\x83N\x83^\x82\xC51\x95\xB6\x8E\x9A\x82Ƃ\xB5\x82Ĉ\xB5\x82\xA6\x82\xE9
+ */
+#if 0
+static size_t UTF16GetCharCount(const wchar_t *wstr_ptr, size_t wstr_len)
+{
+ wchar_t u16;
+ assert(wstr_ptr != NULL);
+ if (wstr_len == 0) {
+ return 0;
+ }
+ u16 = *wstr_ptr++;
+ if (IsHighSurrogate(u16)) {
+ if (wstr_len >= 2) {
+ const wchar_t u16_lo = *wstr_ptr++;
+ if (IsLowSurrogate(u16_lo)) {
+ return 2;
+ } else {
+ return 0;
+ }
+ } else {
+ return 0;
+ }
+ } else if (IsLowSurrogate(u16)) {
+ return 0;
+ }
+ return 1;
+}
+#endif
+
+/**
+ * code page \x82\xCC mulit byte \x95\xB6\x8E\x9A\x82\xF0 UTF-32\x82֕ϊ\xB7\x82\xB7\x82\xE9
+ * @param KCode \x83}\x83\x8B\x83`\x83o\x83C\x83g\x82̕\xB6\x8E\x9A\x83R\x81[\x83h(0x0000-0xffff)
+ * @param CoePage \x83}\x83\x8B\x83`\x83o\x83C\x83g\x82̃R\x81[\x83h\x83y\x81[\x83W
+ * @retval unicode(UTF-32\x95\xB6\x8E\x9A\x83R\x81[\x83h)
+ */
+unsigned int MBCPToUTF32(unsigned short KCode, int CodePage)
+{
+ unsigned int c;
+
+ if (CodePage == 932) {
+ c = CP932ToUTF32(KCode);
+ } else {
+ char buf[3];
+ wchar_t wchar;
+ int ret;
+ int len = 0;
+ if (KCode < 0x100) {
+ buf[0] = KCode & 0xff;
+ len = 1;
+ } else {
+ buf[0] = KCode >> 8;
+ buf[1] = KCode & 0xff;
+ len = 2;
+ }
+ ret = MultiByteToWideChar(CodePage, MB_ERR_INVALID_CHARS, buf, len, &wchar, 1);
+ if (ret <= 0) {
+ c = 0;
+ } else {
+ c = (unsigned int)wchar;
+ }
+ }
+ return c;
+}
+
+/**
+ * wchar_t\x95\xB6\x8E\x9A\x97\xE7unicode(UTF-32)\x82\xF01\x95\xB6\x8E\x9A\x8E\xE6\x82\xE8\x8Fo\x82\xB7
+ * @retval 0 \x95\xB6\x8E\x9A\x82Ƃ\xB5\x82Ĉ\xB5\x82\xA6\x82Ȃ\xA2(\x95\xB6\x8E\x9A\x83R\x81[\x83h\x82\xAA\x82\xA8\x82\xA9\x82\xB5\x82\xA2)
+ * @retval 1 1\x83L\x83\x83\x83\x89\x83N\x83^\x82\xC51\x95\xB6\x8E\x9A\x82Ƃ\xB5\x82Ĉ\xB5\x82\xA6\x82\xE9
+ * @retval 2 2\x83L\x83\x83\x83\x89\x83N\x83^\x82\xC51\x95\xB6\x8E\x9A\x82Ƃ\xB5\x82Ĉ\xB5\x82\xA6\x82\xE9
+ */
+size_t UTF16ToUTF32(const wchar_t *wstr_ptr, size_t wstr_len, unsigned int *u32)
+{
+ assert(wstr_ptr != NULL);
+ if (wstr_len == 0) {
+ *u32 = 0;
+ return 0;
+ }
+ const wchar_t u16 = *wstr_ptr++;
+ // \x83T\x83\x8D\x83Q\x81[\x83g high?
+ if (IsHighSurrogate(u16)) {
+ if (wstr_len >= 2) {
+ const wchar_t u16_lo = *wstr_ptr++;
+ if (IsLowSurrogate(u16_lo)) {
+ // \x83T\x83\x8D\x83Q\x81[\x83g\x83y\x83A \x83f\x83R\x81[\x83h
+ *u32 = 0x10000 + (u16 - 0xd800) * 0x400 + (u16_lo - 0xdc00);
+ return 2;
+ } else {
+ *u32 = 0;
+ return 0;
+ }
+ } else {
+ *u32 = 0;
+ return 0;
+ }
+ } else if (IsLowSurrogate(u16)) {
+ *u32 = 0;
+ return 0;
+ } else {
+ *u32 = u16;
+ return 1;
+ }
+}
+
+/**
+ * UTF-32\x95\xB6\x8E\x9A \x82\xA9\x82\xE7 UTF-8 \x82֕ϊ\xB7\x82\xB7\x82\xE9
* @param[in] u32 \x95ϊ\xB7\x82\xB7\x82\xE9UTF-32
* @param[in,out] u8_ptr \x95ϊ\xB7\x8C\xE3UTF-8\x95\xB6\x8E\x9A\x97\xF1\x8Fo\x97͐\xE6(NULL\x82̂Ƃ\xAB\x8Fo\x97͂\xB5\x82Ȃ\xA2)
* @param[in] u8_len UTF-8\x8Fo\x97͐敶\x8E\x9A\x90\x94(\x83o\x83b\x83t\x83@\x92\xB7,byte\x90\x94)
- * @retval \x8Eg\x97p\x82\xB5\x82\xBDutf8\x95\xB6\x8E\x9A\x90\x94(byte\x90\x94\x81j
+ * @retval \x8Fo\x97͂\xB5\x82\xBDutf8\x95\xB6\x8E\x9A\x90\x94(byte\x90\x94\x81j
* 0=\x83G\x83\x89\x81[
*/
size_t UTF32ToUTF8(uint32_t u32, char *u8_ptr_, size_t u8_len)
@@ -113,7 +266,7 @@
* @param[in] u8_len UTF-8\x95\xB6\x8E\x9A\x97\xB3
* @param[out] u32 \x95ϊ\xB7\x82\xB5\x82\xBDUTF-32\x95\xB6\x8E\x9A
* @retval \x8Eg\x97p\x82\xB5\x82\xBDUTF-8\x95\xB6\x8E\x9A\x90\x94(byte\x90\x94\x81j
- * 0=\x83G\x83\x89\x81[
+ * 0=\x83G\x83\x89\x81[(\x95ϊ\xB7\x82ł\xAB\x82Ȃ\xA9\x82\xC1\x82\xBD)
*/
size_t UTF8ToUTF32(const char *u8_ptr_, size_t u8_len, uint32_t *u32_)
{
@@ -191,33 +344,286 @@
return u8_in;
}
-// WideCharToMultiByte\x82\xCCUTF8\x93\xC1\x89\xBB\x94\xC5
-int WideCharToUTF8(const wchar_t *wstr_ptr, int wstr_len, char *u8_ptr, int u8_len)
+/**
+ * UTF-32 \x82\xA9\x82\xE7 UTF-16 \x82֕ϊ\xB7\x82\xB7\x82\xE9
+ * @param[in] u32 \x95ϊ\xB7\x82\xB7\x82\xE9UTF-32
+ * @param[in,out] wstr_ptr \x95ϊ\xB7\x8C\xE3UTF-16\x95\xB6\x8E\x9A\x97\xF1\x8Fo\x97͐\xE6(NULL\x82̂Ƃ\xAB\x8Fo\x97͂\xB5\x82Ȃ\xA2)
+ * @param[in] wstr_len UTF-16\x8Fo\x97͐敶\x8E\x9A\x90\x94(\x95\xB6\x8E\x9A\x90\x94,sizeof(wchar_t)*wstr_len bytes)
+ * @retval \x8Fo\x97͂\xB5\x82\xBDUTF-16\x95\xB6\x8E\x9A\x90\x94(sizeof(wchar_t)\x94{\x82\xB7\x82\xE9\x82\xC6byte\x90\x94)
+ * 0=\x83G\x83\x89\x81[(\x95ϊ\xB7\x82ł\xAB\x82Ȃ\xA9\x82\xC1\x82\xBD)
+ */
+size_t UTF32ToUTF16(uint32_t u32, wchar_t *wstr_ptr, size_t wstr_len)
{
- int u8_out_sum = 0;
- if (u8_ptr == NULL) {
- u8_len = 4;
+ size_t u16_out;
+ if (u32 < 0x10000) {
+ if (wstr_len >= 1) {
+ if (wstr_ptr != NULL) {
+ *wstr_ptr++ = (uint16_t)u32;
+ }
+ u16_out = 1;
+ } else {
+ u16_out = 0;
+ }
+ } else if (u32 <= 0x10ffff) {
+ if (wstr_len >= 2) {
+ if (wstr_ptr != NULL) {
+ // \x83T\x83\x8D\x83Q\x81[\x83g \x83G\x83\x93\x83R\x81[\x83h
+ *wstr_ptr++ = uint16_t((u32 - 0x10000) / 0x400) + 0xd800;
+ *wstr_ptr++ = uint16_t((u32 - 0x10000) % 0x400) + 0xdc00;
+ }
+ u16_out = 2;
+ } else {
+ u16_out = 0;
+ }
} else {
- if (u8_len == 0) {
- return 0;
+ u16_out = 0;
+ }
+ return u16_out;
+}
+
+/**
+ * UTF-32\x95\xB6\x8E\x9A\x82\xF0CP932\x95\xB6\x8E\x9A(Shift_JIS) 1\x95\xB6\x8E\x9A\x82֕ϊ\xB7\x82\xB7\x82\xE9
+ * @retval \x8Eg\x97p\x82\xB5\x82\xBDCP932\x95\xB6\x8E\x9A
+ * 0=\x83G\x83\x89\x81[(\x95ϊ\xB7\x82ł\xAB\x82Ȃ\xA9\x82\xC1\x82\xBD)
+ */
+unsigned short UTF32_CP932(unsigned int u32)
+{
+#include "../teraterm/uni2sjis.map" // mapUnicodeToSJIS[]
+ char mbstr[2];
+ unsigned short mb;
+ DWORD mblen;
+ wchar_t u16_str[2];
+ size_t u16_len;
+
+ if (u32 < 0x80) {
+ return (unsigned short)u32;
+ }
+
+#if defined(PRIORITY_CP932_TABLE)
+ if (u32 < 0x10000) {
+ wchar_t u16 = (wchar_t)u32;
+ // Tera Term\x82̕ϊ\xB7\x83e\x81[\x83u\x83\x8B\x82\xC5 Unicode -> Shift_JIS\x82֕ϊ\xB7
+ mb = _ConvertUnicode(u16, mapUnicodeToSJIS, _countof(mapUnicodeToSJIS));
+ if (mb != 0) {
+ // \x95ϊ\xB7\x82ł\xAB\x82\xBD
+ return mb;
}
}
- if (wstr_len < 0) {
+#endif
+ u16_len = UTF32ToUTF16(u32, u16_str, 2);
+ if (u16_len == 0) {
+ return 0;
+ }
+ mblen = WideCharToMultiByte(932, 0, u16_str, (int)u16_len, mbstr, 2, NULL, NULL);
+ switch (mblen) {
+ case 0:
+ case 1:
+ default:
+ if (mblen == 0 || mbstr[0] == '?') {
+ goto next_convert;
+ } else {
+ mb = (unsigned char)mbstr[0];
+ return mb;
+ }
+ case 2:
+ if (mbstr[0] == '?' && mbstr[1] == '?') {
+ // 2byte\x8Fo\x97\xCD && "??" \x82̏ꍇ\x82͕ϊ\xB7\x82ł\xAB\x82Ȃ\xA9\x82\xC1\x82\xBD
+ goto next_convert;
+ }
+ mb = (((unsigned char)mbstr[0]) << 8) | (unsigned char)mbstr[1];
+ return mb;
+ }
+
+next_convert:
+#if !defined(PRIORITY_CP932_TABLE)
+ if (u32 < 0x10000) {
+ wchar_t u16 = (wchar_t)u32;
+ // Tera Term\x82̕ϊ\xB7\x83e\x81[\x83u\x83\x8B\x82\xC5 Unicode -> Shift_JIS\x82֕ϊ\xB7
+ mb = _ConvertUnicode(u16, mapUnicodeToSJIS, _countof(mapUnicodeToSJIS));
+ if (mb != 0) {
+ // \x95ϊ\xB7\x82ł\xAB\x82\xBD
+ return mb;
+ }
+ }
+#endif
+ return 0;
+}
+
+/**
+ * CP932\x95\xB6\x8E\x9A(Shift_JIS) 1\x95\xB6\x8E\x9A\x82\xA9\x82\xE7UTF-32\x82֕ϊ\xB7\x82\xB7\x82\xE9
+ * @param[in] cp932 CP932\x95\xB6\x8E\x9A
+ * @retval \x95ϊ\xB7\x82\xB5\x82\xBDUTF-32\x95\xB6\x8E\x9A\x90\x94
+ * 0=\x83G\x83\x89\x81[(\x95ϊ\xB7\x82ł\xAB\x82Ȃ\xA9\x82\xC1\x82\xBD)
+ */
+unsigned int CP932ToUTF32(unsigned short cp932)
+{
+#include "../ttpcmn/sjis2uni.map" // mapSJISToUnicode[]
+ wchar_t wchar;
+ int ret;
+ unsigned int u32;
+ unsigned char buf[2];
+ int len = 0;
+
+#if defined(PRIORITY_CP932_TABLE)
+ u32 = _ConvertUnicode(cp932, mapSJISToUnicode, sizeof(mapSJISToUnicode)/sizeof(mapSJISToUnicode[0]));
+ if (u32 != 0) {
+ return u32;
+ }
+#endif
+ if (cp932 < 0x100) {
+ buf[0] = cp932 & 0xff;
+ len = 1;
+ } else {
+ buf[0] = cp932 >> 8;
+ buf[1] = cp932 & 0xff;
+ len = 2;
+ }
+ ret = MultiByteToWideChar(932, MB_ERR_INVALID_CHARS, (char *)buf, len, &wchar, 1);
+ if (ret <= 0) {
+ // MultiByteToWideChar()\x82\xAA\x95ϊ\xB7\x8E\xB8\x94s
+#if !defined(PRIORITY_CP932_TABLE)
+ u32 = _ConvertUnicode(cp932, mapSJISToUnicode, sizeof(mapSJISToUnicode)/sizeof(mapSJISToUnicode[0]));
+ // \x83e\x81[\x83u\x83\x8B\x82ɂ\xE0\x82Ȃ\xA9\x82\xC1\x82\xBD\x8Fꍇ c = 0(\x95ϊ\xB7\x8E\xB8\x94s\x8E\x9E)
+#else
+ u32 = 0;
+#endif
+ } else {
+ u32 = (unsigned int)wchar;
+ }
+
+ return u32;
+}
+
+/**
+ * Unicode\x82\xA9\x82\xE7DEC\x93\xC1\x8Eꕶ\x8E\x9A\x82֕ϊ\xB7
+ * @param u32 UTF-32\x95\xB6\x8E\x9A\x83R\x81[\x83h
+ * @return \x89\xBA\x88\xCA8bit DEC\x93\xC1\x8Eꕶ\x8E\x9A\x83R\x81[\x83h
+ * \x8F\xE3\x88\xCA8bit \x95\xB6\x8E\x9A\x83R\x81[\x83h\x8E\xED\x95\xCA (1,2,4)
+ * file://../../doc/ja/html/setup/teraterm-term.html \x8EQ\x8F\xC6
+ * 0 \x95ϊ\xB7\x82ł\xAB\x82Ȃ\xA9\x82\xC1\x82\xBD
+ */
+unsigned short UTF32ToDecSp(unsigned int u32)
+{
+#include "../teraterm/unisym2decsp.map" // mapUnicodeSymbolToDecSp[]
+ unsigned short cset;
+ if (u32 > 0x10000) {
+ cset = 0;
+ } else {
+ const unsigned short u16 = (unsigned short)u32;
+ cset = _ConvertUnicode(u16, mapUnicodeSymbolToDecSp, _countof(mapUnicodeSymbolToDecSp));
+ }
+ return cset;
+}
+
+/**
+ * UTF-32 \x82\xA9\x82\xE7 CP932 \x82֕ϊ\xB7\x82\xB7\x82\xE9
+ * @param[in] u32 \x95ϊ\xB7\x82\xB7\x82\xE9UTF-32
+ * @param[in,out] mb_ptr \x95ϊ\xB7\x8C\xE3CP932\x95\xB6\x8E\x9A\x97\xF1\x8Fo\x97͐\xE6(NULL\x82̂Ƃ\xAB\x8Fo\x97͂\xB5\x82Ȃ\xA2)
+ * @param[in] mb_len CP932\x8Fo\x97͐敶\x8E\x9A\x90\x94(\x95\xB6\x8E\x9A\x90\x94,sizeof(wchar_t)*wstr_len bytes)
+ * @retval \x8Fo\x97͂\xB5\x82\xBDCP932\x95\xB6\x8E\x9A\x90\x94(byte\x90\x94)
+ * 0=\x83G\x83\x89\x81[(\x95ϊ\xB7\x82ł\xAB\x82Ȃ\xA9\x82\xC1\x82\xBD)
+ */
+size_t UTF32ToCP932(uint32_t u32, char *mb_ptr, size_t mb_len)
+{
+ size_t cp932_out;
+ const uint16_t cp932 = UTF32_CP932(u32);
+ if (cp932 == 0 && u32 != 0) {
+ return 0;
+ }
+ if (mb_ptr == NULL) {
+ mb_len = 2;
+ }
+ if (cp932 < 0x100) {
+ if (mb_len >= 1) {
+ if (mb_ptr != NULL) {
+ *mb_ptr = cp932 & 0xff;
+ }
+ cp932_out = 1;
+ } else {
+ cp932_out = 0;
+ }
+ } else {
+ if (mb_len >= 2) {
+ if (mb_ptr != NULL) {
+ mb_ptr[0] = (cp932 >> 8) & 0xff;
+ mb_ptr[1] = cp932 & 0xff;
+ }
+ cp932_out = 2;
+ } else {
+ cp932_out = 0;
+ }
+ }
+ return cp932_out;
+}
+
+size_t UTF32ToMBCP(unsigned int u32, int code_page, char *mb_ptr, size_t mb_len)
+{
+ wchar_t u16_str[2];
+ size_t u16_len;
+ u16_len = UTF32ToUTF16(u32, u16_str, 2);
+ if (u16_len == 0) {
+ return 0;
+ }
+ mb_len = WideCharToMultiByte(code_page, 0, u16_str, u16_len, mb_ptr, mb_len, NULL, NULL);
+ if (mb_len == 1 && mb_ptr[0] == '?' && u32 != '?') {
+ // \x95ϊ\xB7\x82ł\xAB\x82Ȃ\xA9\x82\xC1\x82\xBD\x82Ƃ\xAB\x81A\x96߂\xE8\x92l=1, \x95\xB6\x8E\x9A[0]='?' \x82\xF0\x95Ԃ\xB5\x82Ă\xAD\x82\xE9
+ mb_len = 0;
+ }
+ return mb_len;
+}
+
+/**
+ * wchar_t(UTF-16)\x95\xB6\x8E\x9A\x97\xF1\x82\xF0\x83}\x83\x8B\x83`\x83o\x83C\x83g\x82ɕϊ\xB7\x82\xB7\x82\xE9
+ *
+ * @param[in] *wstr_ptr wchar_t\x95\xB6\x8E\x9A\x97\xF1
+ * @param[in,out] *wstr_len wchar_t\x95\xB6\x8E\x9A\x97\xF1\x92\xB7
+ * NULL\x82܂\xBD\x82\xCD0\x82̂Ƃ\xAB\x8E\xA9\x93\xAE\x81AL'\0'\x82Ń^\x81[\x83~\x83l\x81[\x83g\x82\xB7\x82邱\x82\xC6)
+ * NULL\x88ȊO\x82̂Ƃ\xAB\x93\xFC\x97͂\xB5\x82\xBD\x95\xB6\x8E\x9A\x90\x94\x82\xF0\x95Ԃ\xB7
+ * @param[in] *mb_ptr \x95ϊ\xB7\x82\xB5\x82\xBD\x95\xB6\x8E\x9A\x97\xF1\x82\xF0\x8E\xFB\x94[\x82\xB7\x82\xE9\x83|\x83C\x83\x93\x83^
+ * (NULL\x82̂Ƃ\xAB\x95ϊ\xB7\x82\xB9\x82\xB8\x82ɕ\xB6\x8E\x9A\x90\x94\x82\xF0\x83J\x83E\x83\x93\x83g\x82\xB7\x82\xE9)
+ * @param[in,out] *mb_len \x95ϊ\xB7\x82\xB5\x82\xBD\x95\xB6\x8E\x9A\x97\xF1\x82\xF0\x8E\xFB\x94[\x82ł\xAB\x82\xE9\x83T\x83C\x83Y,byte\x90\x94,
+ * mb_ptr\x82\xAANULL\x82̂Ƃ\xAB\x8Fo\x97͉\\x83T\x83C\x83Y\x82͕s\x97v
+ * \x95ϊ\xB7\x82\xB5\x82\xBD\x83}\x83\x8B\x83`\x83o\x83C\x83g\x95\xB6\x8E\x9A\x97\xF1\x82̒\xB7\x82\xB3\x82\xF0\x95Ԃ\xB7
+ * L'\0'\x82\xF0\x95ϊ\xB7\x82\xB5\x82\xBD\x82\xE7'\0'\x82\xE0\x8A܂\xDE
+ * mb_ptr\x82\xAANULL\x82̂Ƃ\xAB\x82ł\xE0\x92\xB7\x82\xB3\x82͕Ԃ\xB7
+ * @param[in] UTF32ToMB UTF32\x82\xF0\x83}\x83\x8B\x83`\x83o\x83C\x83g\x82ɕϊ\xB7\x82\xB7\x82\xE9\x8A\x94\x82ւ̃|\x83C\x83\x93\x83^
+ */
+static void WideCharToMB(const wchar_t *wstr_ptr, size_t *wstr_len_,
+ char *mb_ptr, size_t *mb_len_,
+ size_t (*UTF32ToMB)(uint32_t u32, char *mb_ptr, size_t mb_len))
+{
+ size_t wstr_len;
+ size_t mb_len;
+ size_t mb_out_sum = 0;
+ size_t wstr_in = 0;
+
+ assert(wstr_ptr != NULL);
+ if (mb_ptr == NULL) {
+ // \x95ϊ\xB7\x95\xB6\x8E\x9A\x97\xF1\x82\xF0\x8F\x91\x82\xAB\x8Fo\x82\xB3\x82Ȃ\xA2
+ mb_len = 4; // 1\x95\xB6\x8E\x9A4byte\x82ɂ͎\xFB\x82܂\xE9\x82͂\xB8
+ } else {
+ mb_len = *mb_len_;
+ }
+ if (wstr_len_ == NULL || *wstr_len_ == 0) {
wstr_len = (int)wcslen(wstr_ptr) + 1;
+ } else {
+ wstr_len = *wstr_len_;
}
- while(u8_len > 0 && wstr_len > 0) {
+ while(mb_len > 0 && wstr_len > 0) {
const wchar_t u16 = *wstr_ptr++;
uint32_t u32 = u16;
- size_t u8_out;
+ size_t mb_out;
wstr_len--;
+ wstr_in++;
// \x83T\x83\x8D\x83Q\x81[\x83g high?
- if (0xd800 <= u16 && u16 < 0xdc00) {
+ if (IsHighSurrogate(u16)) {
if (wstr_len >= 1) {
const wchar_t u16_lo = *wstr_ptr++;
wstr_len--;
+ wstr_in++;
// \x83T\x83\x8D\x83Q\x81[\x83g low?
- if (0xdc00 <= u16_lo && u16_lo < 0xe000) {
+ if (IsLowSurrogate(u16_lo)) {
// \x83T\x83\x8D\x83Q\x81[\x83g\x83y\x83A \x83f\x83R\x81[\x83h
u32 = 0x10000 + (u16 - 0xd800) * 0x400 + (u16_lo - 0xdc00);
} else {
@@ -224,34 +630,75 @@
goto unknown_code;
}
} else {
- unknown_code:
- if (u8_ptr != NULL) {
- *u8_ptr++ = '?';
- }
- u8_out = 1;
- goto loop_next;
+ goto unknown_code;
}
}
- u8_out = UTF32ToUTF8(u32, u8_ptr, u8_len);
- if (u8_out == 0) {
- goto unknown_code;
+ mb_out = UTF32ToMB(u32, mb_ptr, mb_len);
+ if (mb_out == 0) {
+ unknown_code:
+ if (mb_ptr != NULL) {
+ // \x95ϊ\xB7\x82ł\xAB\x82Ȃ\xA9\x82\xC1\x82\xBD\x8Fꍇ
+ *mb_ptr++ = '?';
+ }
+ mb_out = 1;
}
- loop_next:
- u8_out_sum += u8_out;
- if (u8_ptr != NULL) {
- u8_ptr += u8_out;
- u8_len -= u8_out;
+ mb_out_sum += mb_out;
+ if (mb_ptr != NULL) {
+ mb_ptr += mb_out;
+ mb_len -= mb_out;
}
}
- return u8_out_sum;
+
+ if (wstr_len_ != NULL) {
+ *wstr_len_ = wstr_in;
+ }
+ *mb_len_ = mb_out_sum;
}
+// WideCharToMultiByte\x82\xCCUTF8\x93\xC1\x89\xBB\x94\xC5
+void WideCharToUTF8(const wchar_t *wstr_ptr, size_t *wstr_len, char *u8_ptr, size_t *u8_len)
+{
+ WideCharToMB(wstr_ptr, wstr_len, u8_ptr, u8_len, UTF32ToUTF8);
+}
+
+void WideCharToCP932(const wchar_t *wstr_ptr, size_t *wstr_len, char *cp932_ptr, size_t *cp932_len)
+{
+ WideCharToMB(wstr_ptr, wstr_len,
+ cp932_ptr, cp932_len,
+ UTF32ToCP932);
+}
+
+void WideCharToMBCP(const wchar_t *wstr_ptr, size_t *wstr_len, char *mb_ptr, size_t *mb_len,
+ int code_page)
+{
+ size_t (*utf32_to_mb)(uint32_t u32, char *mb_ptr, size_t mb_len);
+ switch (code_page) {
+ case CP_UTF8:
+ utf32_to_mb = UTF32ToUTF8;
+ break;
+ case 932:
+ utf32_to_mb = UTF32ToCP932;
+ break;
+ default:
+ *mb_len = 0;
+ return;
+ }
+
+ WideCharToMB(wstr_ptr, wstr_len,
+ mb_ptr, mb_len,
+ utf32_to_mb);
+}
+
// MultiByteToWideChar\x82\xCCUTF8\x93\xC1\x89\xBB\x94\xC5
-int UTF8ToWideChar(const char *u8_ptr, int u8_len, wchar_t *wstr_ptr, int wstr_len)
+int UTF8ToWideChar(const char *u8_ptr, int u8_len_, wchar_t *wstr_ptr, int wstr_len_)
{
+ size_t u8_len;
+ size_t wstr_len = wstr_len_;
size_t u16_out_sum = 0;
- if (u8_len < 0) {
+ if (u8_len_ < 0) {
u8_len = strlen(u8_ptr) + 1;
+ } else {
+ u8_len = u8_len_;
}
if (wstr_ptr == NULL) {
wstr_len = 1;
@@ -295,16 +742,18 @@
}
u16_out_sum += u16_out;
}
- return u16_out_sum;
+ return (int)u16_out_sum;
}
/**
* wchar_t\x95\xB6\x8E\x9A\x97\xF1\x82\xF0\x83}\x83\x8B\x83`\x83o\x83C\x83g\x95\xB6\x8E\x9A\x97\xF1\x82֕ϊ\xB7
* @param[in] *wstr_ptr wchar_t\x95\xB6\x8E\x9A\x97\xF1
- * @param[in] wstr_len wchar_t\x95\xB6\x8E\x9A\x97\xF1\x92\xB7(0\x82̂Ƃ\xAB\x8E\xA9\x93\xAE)
+ * @param[in] wstr_len wchar_t\x95\xB6\x8E\x9A\x97\xF1\x92\xB7(0\x82̂Ƃ\xAB\x8E\xA9\x93\xAE\x81A\x8E\xA9\x93\xAE\x82̂Ƃ\xAB\x82\xCDL'\0'\x82Ń^\x81[\x83~\x83l\x81[\x83g\x82\xB7\x82邱\x82\xC6)
* @param[in] code_page \x95ϊ\xB7\x90\xE6\x83R\x81[\x83h\x83y\x81[\x83W
- * @param[out] *mb_len_ mb\x95\xB6\x8E\x9A\x97\xF1\x92\xB7(NULL\x82̂Ƃ\xAB\x93\xE0\x95\x94\x83G\x83\x89\x81[)
+ * @param[out] *mb_len_ \x95ϊ\xB7\x82\xB5\x82\xBD\x95\xB6\x8E\x9A\x97\xF1\x92\xB7,byte\x90\x94,L'\0'\x82\xF0\x95ϊ\xB7\x82\xB5\x82\xBD\x82\xE7'\0'\x82\xE0\x8A܂\xDE
+ * (NULL\x82̂Ƃ\xAB\x95\xB6\x8E\x9A\x97\xF0\x95Ԃ\xB3\x82Ȃ\xA2)
* @retval mb\x95\xB6\x8E\x9A\x97\xF1\x82ւ̃|\x83C\x83\x93\x83^(NULL\x82̎\x9E\x95ϊ\xB7\x83G\x83\x89\x81[)
+ * \x8Eg\x97p\x8C\xE3 free() \x82\xB7\x82邱\x82\xC6
*/
char *_WideCharToMultiByte(const wchar_t *wstr_ptr, size_t wstr_len, int code_page, size_t *mb_len_)
{
@@ -317,9 +766,11 @@
wstr_len = wcslen(wstr_ptr) + 1;
}
int len;
- if (code_page == CP_UTF8) {
- len = WideCharToUTF8(wstr_ptr, (DWORD)wstr_len,
- NULL, 0);
+ if (code_page == CP_UTF8 || code_page == 932) {
+ size_t wl = wstr_len;
+ size_t ml;
+ WideCharToMBCP(wstr_ptr, &wl, NULL, &ml, code_page);
+ len = ml;
} else {
len = ::WideCharToMultiByte(code_page, flags,
wstr_ptr, (DWORD)wstr_len,
@@ -333,9 +784,11 @@
if (mb_ptr == NULL) {
return NULL;
}
- if (code_page == CP_UTF8) {
- len = WideCharToUTF8(wstr_ptr, (DWORD)wstr_len,
- mb_ptr, len);
+ if (code_page == CP_UTF8 || code_page == 932) {
+ size_t wl = wstr_len;
+ size_t ml = len;
+ WideCharToMBCP(wstr_ptr, &wl, mb_ptr, &ml, code_page);
+ len = ml;
} else {
len = ::WideCharToMultiByte(code_page, flags,
wstr_ptr, (DWORD)wstr_len,
@@ -347,7 +800,8 @@
return NULL;
}
if (mb_len_ != NULL) {
- *mb_len_ = len - 1;
+ // \x95ϊ\xB7\x82\xB5\x82\xBD\x95\xB6\x8E\x9A\x97\xF1\x90\x94(byte\x90\x94)\x82\xF0\x95Ԃ\xB7
+ *mb_len_ = len;
}
return mb_ptr;
}
@@ -355,10 +809,12 @@
/**
* \x83}\x83\x8B\x83`\x83o\x83C\x83g\x95\xB6\x8E\x9A\x97\xF1\x82\xF0wchar_t\x95\xB6\x8E\x9A\x97\xF1\x82֕ϊ\xB7
* @param[in] *str_ptr mb(char)\x95\xB6\x8E\x9A\x97\xF1
- * @param[in] str_len mb(char)\x95\xB6\x8E\x9A\x97\xF1\x92\xB7(0\x82̂Ƃ\xAB\x8E\xA9\x93\xAE)
+ * @param[in] str_len mb(char)\x95\xB6\x8E\x9A\x97\xF1\x92\xB7(0\x82̂Ƃ\xAB\x8E\xA9\x93\xAE\x81A\x8E\xA9\x93\xAE\x82̂Ƃ\xAB\x82\xCD'\0'\x82Ń^\x81[\x83~\x83l\x81[\x83g\x82\xB7\x82邱\x82\xC6)
* @param[in] code_page \x95ϊ\xB7\x8C\xB3\x83R\x81[\x83h\x83y\x81[\x83W
- * @param[out] *w_len_ wchar_t\x95\xB6\x8E\x9A\x97\xF1\x92\xB7
- * @retval mb\x95\xB6\x8E\x9A\x97\xF1\x82ւ̃|\x83C\x83\x93\x83^(NULL\x82̎\x9E\x95ϊ\xB7\x83G\x83\x89\x81[)
+ * @param[out] *w_len_ wchar_t\x95\xB6\x8E\x9A\x97\xF1\x92\xB7,wchar_t\x90\x94,'\0'\x82\xF0\x95ϊ\xB7\x82\xB5\x82\xBD\x82\xE7L'\0'\x82\xE0\x8A܂\xDE
+ * (NULL\x82̂Ƃ\xAB\x95\xB6\x8E\x9A\x97\xF0\x95Ԃ\xB3\x82Ȃ\xA2)
+ * @retval wchar_t\x95\xB6\x8E\x9A\x97\xF1\x82ւ̃|\x83C\x83\x93\x83^(NULL\x82̎\x9E\x95ϊ\xB7\x83G\x83\x89\x81[)
+ * \x8Eg\x97p\x8C\xE3 free() \x82\xB7\x82邱\x82\xC6
*/
wchar_t *_MultiByteToWideChar(const char *str_ptr, size_t str_len, int code_page, size_t *w_len_)
{
@@ -402,7 +858,8 @@
return NULL;
}
if (w_len_ != NULL) {
- *w_len_ = len - 1;
+ // \x95ϊ\xB7\x82\xB5\x82\xBD\x95\xB6\x8E\x9A\x97\xF1\x90\x94(wchar_t\x90\x94)\x82\xF0\x95Ԃ\xB7
+ *w_len_ = len;
}
return wstr_ptr;
}
Modified: trunk/teraterm/common/codeconv.h
===================================================================
--- trunk/teraterm/common/codeconv.h 2019-03-05 16:22:05 UTC (rev 7461)
+++ trunk/teraterm/common/codeconv.h 2019-03-09 17:32:42 UTC (rev 7462)
@@ -35,12 +35,24 @@
#endif
-// 1char
+// simple code convert
+unsigned int CP932ToUTF32(unsigned short cp932);
+unsigned short UTF32ToDecSp(unsigned int u32);
+unsigned int MBCPToUTF32(unsigned short KCode, int CodePage);
+unsigned short UTF32_CP932(unsigned int u32);
+
+// 1char ToUTF32
+size_t UTF8ToUTF32(const char *u8_ptr_, size_t u8_len, unsigned int *u32_);
+size_t UTF16ToUTF32(const wchar_t *wstr_ptr, size_t wstr_len, unsigned int *u32);
+// 1char UTF32To
+size_t UTF32ToUTF16(unsigned int u32, wchar_t *wstr_ptr, size_t wstr_len);
size_t UTF32ToUTF8(unsigned int u32, char *u8_ptr, size_t u8_len);
-size_t UTF8ToUTF32(const char *u8_ptr_, size_t u8_len, unsigned int *u32_);
+size_t UTF32ToCP932(unsigned int u32, char *mb_ptr, size_t mb_len);
+size_t UTF32ToMBCP(unsigned int u32, int code_page, char *mb_ptr, size_t mb_len);
// MultiByteToWideChar() wrappers
-int WideCharToUTF8(const wchar_t *wstr_ptr, int wstr_len, char *u8_ptr, int u8_len);
+void WideCharToUTF8(const wchar_t *wstr_ptr, size_t *wstr_len, char *u8_ptr, size_t *u8_len);
+void WideCharToCP932(const wchar_t *wstr_ptr, size_t *wstr_len, char *cp932_ptr, size_t *cp932_len);
int UTF8ToWideChar(const char *u8_ptr, int u8_len, wchar_t *wstr_ptr, int wstr_len);
// API wrappers
Modified: trunk/teraterm/teraterm/CMakeLists.txt
===================================================================
--- trunk/teraterm/teraterm/CMakeLists.txt 2019-03-05 16:22:05 UTC (rev 7461)
+++ trunk/teraterm/teraterm/CMakeLists.txt 2019-03-09 17:32:42 UTC (rev 7462)
@@ -31,7 +31,12 @@
../common/i18n.h
../common/dllutil.cpp
../common/dllutil.h
- ../ttpcmn/language.h
+ ../common/codeconv.h
+ ../common/codeconv.cpp
+ #
+ ../teraterm/unisym2decsp.map
+ ../teraterm/uni2sjis.map
+ ../ttpcmn/sjis2uni.map
)
source_group(
@@ -102,8 +107,6 @@
WSAAsyncGetAddrInfo.c
WSAAsyncGetAddrInfo.h
#
- uni2sjis.map
- unisym2decsp.map
uni_combining.map
#
teraterm.manifest
Modified: trunk/teraterm/teraterm/vtterm.c
===================================================================
--- trunk/teraterm/teraterm/vtterm.c 2019-03-05 16:22:05 UTC (rev 7461)
+++ trunk/teraterm/teraterm/vtterm.c 2019-03-09 17:32:42 UTC (rev 7462)
@@ -52,7 +52,8 @@
#include "telnet.h"
#include "ttime.h"
#include "clipboar.h"
-#include "../ttpcmn/language.h"
+#include "codeconv.h"
+#include "codeconv.h"
#include "vtterm.h"
@@ -5408,13 +5409,6 @@
}
//
-// UTF-8
-//
-#include "uni2sjis.map"
-#include "unisym2decsp.map"
-
-
-//
// Unicode Combining Character Support
//
#include "uni_combining.map"
@@ -5467,17 +5461,22 @@
return (index);
}
-// unicode(UTF-16,wchar_t)\x82\xF0\x83o\x83b\x83t\x83@\x82֏\x91\x82\xAB\x8D\x9E\x82\xDE
+// unicode(UTF-32,wchar_t)\x82\xF0\x83o\x83b\x83t\x83@\x82֏\x91\x82\xAB\x8D\x9E\x82\xDE
static void UnicodeToCP932(unsigned int code)
{
- wchar_t wchar = (wchar_t)code;
+ wchar_t wchar;
int ret;
char mbchar[2];
unsigned short cset;
+ if (code >= 0x10000) {
+ goto unknown;
+ }
+ wchar = (wchar_t)code;
+
// Unicode\x82\xA9\x82\xE7DEC\x93\xC1\x8Eꕶ\x8E\x9A\x82ւ̃}\x83b\x83s\x83\x93\x83O
if (ts.UnicodeDecSpMapping) {
- cset = ConvertUnicode(wchar, mapUnicodeSymbolToDecSp, MAPSIZE(mapUnicodeSymbolToDecSp));
+ cset = UTF32ToDecSp(wchar);
if (((cset >> 8) & ts.UnicodeDecSpMapping) != 0) {
PutDecSp(cset & 0xff);
return;
@@ -5485,7 +5484,24 @@
}
// Unicode -> \x93\xE0\x95\x94\x83R\x81[\x83h(ts.CodePage)\x82֕ϊ\xB7\x82\xB5\x82ďo\x97\xCD
- ret = WideCharToMultiByte(ts.CodePage, 0, &wchar, 1, mbchar, 2, NULL, NULL);
+ if (ts.CodePage == 932) {
+ ret = (int)UTF16ToCP932(&wchar, 1, &cset);
+ if (ret == 0) {
+ // \x95ϊ\xB7\x82ł\xAB\x82Ȃ\xA9\x82\xC1\x82\xBD
+ ;
+ } else if (cset < 0x100) {
+ // 1byte\x95\xB6\x8E\x9A
+ mbchar[0] = (char)cset;
+ ret = 1;
+ } else {
+ // 2byte\x95\xB6\x8E\x9A
+ mbchar[0] = (char)(cset >> 8);
+ mbchar[1] = (char)(cset & 0xff);
+ ret = 2;
+ }
+ } else {
+ ret = WideCharToMultiByte(ts.CodePage, 0, &wchar, 1, mbchar, 2, NULL, NULL);
+ }
if (ret == 1 && mbchar[0] == '?' && code != '?') {
// \x95ϊ\xB7\x82ł\xAB\x82Ȃ\xA9\x82\xC1\x82\xBD\x82Ƃ\xAB\x81Aret=1, '?' \x82\xF0\x95Ԃ\xB5\x82Ă\xAD\x82\xE9
ret = 0;
@@ -5492,17 +5508,7 @@
}
switch (ret) {
case 0:
- if (ts.CodePage == 932) {
- // CP932
- // U+301C\x82Ȃǂ͕ϊ\xB7\x82ł\xAB\x82Ȃ\xA2\x81BUnicode -> Shift_JIS\x82֕ϊ\xB7\x82\xB5\x82Ă݂\xE9\x81B
- cset = ConvertUnicode(code, mapUnicodeToSJIS, MAPSIZE(mapUnicodeToSJIS));
- if (cset != 0) {
- Kanji = cset & 0xff00;
- PutKanji(cset & 0x00ff);
- return;
- }
- }
-
+ unknown:
PutChar('?');
if (ts.UnknownUnicodeCharaAsWide) {
PutChar('?');
Modified: trunk/teraterm/ttpcmn/language.c
===================================================================
--- trunk/teraterm/ttpcmn/language.c 2019-03-05 16:22:05 UTC (rev 7461)
+++ trunk/teraterm/ttpcmn/language.c 2019-03-09 17:32:42 UTC (rev 7462)
@@ -35,9 +35,8 @@
#include
#include "language.h"
-#include "codeconv.h"
-#include "sjis2uni.map"
+// export\x82\xB3\x82\xEA\x82Ă\xA2\x82\xE9
unsigned short ConvertUnicode(unsigned short code, const codemap_t *table, int tmax)
{
int low, mid, high;
@@ -64,69 +63,6 @@
return (result);
}
-// \x93\xE0\x95\x94\x83R\x81[\x83h(CodePage)\x82\xF0UTF8\x82֕ϊ\xB7\x82\xB7\x82\xE9
-unsigned int PASCAL SJIS2UTF8(WORD KCode, int *byte, int CodePage)
-{
- wchar_t wchar;
- int ret;
- unsigned int code;
- unsigned int c, c1, c2, c3;
- unsigned char buf[3];
- unsigned char KCode_h;
- int len = 0;
-
- // \x93\xE0\x95\x94\x83R\x81[\x83h(CodePage)\x82\xA9\x82\xE7UTF-16LE\x82֕ϊ\xB7\x82\xB7\x82\xE9
- KCode_h = (unsigned char)(KCode >> 8);
- if (KCode_h != 0) {
- buf[len++] = KCode_h;
- }
- buf[len++] = KCode & 0xff;
- ret = MultiByteToWideChar(CodePage, MB_ERR_INVALID_CHARS, buf, len, &wchar, 1);
- if (ret <= 0) {
- // \x95ϊ\xB7\x8E\xB8\x94s
- unsigned short cset = 0;
- if (CodePage == 932) {
- // CP932
- cset = ConvertUnicode(KCode, mapSJISToUnicode, sizeof(mapSJISToUnicode)/sizeof(mapSJISToUnicode[0]));
- }
- if (cset == 0) {
- c = 0xfffd; // U+FFFD: Replacement Character
- } else {
- c = cset;
- }
- } else {
- c = (unsigned int)wchar;
- }
-
- // UTF-16LE\x82\xA9\x82\xE7UTF-8\x82֕ϊ\xB7\x82\xB7\x82\xE9
- if (c <= 0x0000007f) {
- // 0x00000000 <= c <= 0x0000007f
- code = (c & 0xff);
- *byte = 1;
-
- } else if (c <= 0x000007ff) {
- // 0x00000080 <= c <= 0x000007ff
- c1 = ((c >> 6) & 0x1f) | 0xc0;
- c2 = (c & 0x3f) | 0x80;
- code = (c1 << 8) | c2;
- *byte = 2;
-
- } else if (c <= 0x0000ffff) {
- // 0x00000800 <= c <= 0x0000ffff
- c1 = ((c >> 12) & 0xf) | 0xe0;
- c2 = ((c >> 6) & 0x3f) | 0x80;
- c3 = ((c) & 0x3f) | 0x80;
- code = (c1 << 16) | (c2 << 8) | c3;
- *byte = 3;
- } else {
- code = KCode;
- *byte = 2;
- }
-
- return (code);
-}
-
-
// Japanese SJIS -> JIS
WORD PASCAL SJIS2JIS(WORD KCode)
{
Modified: trunk/teraterm/ttpcmn/language.h
===================================================================
--- trunk/teraterm/ttpcmn/language.h 2019-03-05 16:22:05 UTC (rev 7461)
+++ trunk/teraterm/ttpcmn/language.h 2019-03-09 17:32:42 UTC (rev 7462)
@@ -35,13 +35,11 @@
#endif
/* proto types */
-unsigned int PASCAL SJIS2UTF8(WORD KCode, int *byte, int CodePage);
WORD PASCAL SJIS2JIS(WORD KCode);
WORD PASCAL SJIS2EUC(WORD KCode);
WORD PASCAL JIS2SJIS(WORD KCode);
BYTE PASCAL RussConv(int cin, int cout, BYTE b);
void PASCAL RussConvStr(int cin, int cout, PCHAR Str, int count);
-unsigned short ConvertUnicode(unsigned short code, const codemap_t *table, int tmax);
#ifdef __cplusplus
}
Modified: trunk/teraterm/ttpcmn/ttcmn.c
===================================================================
--- trunk/teraterm/ttpcmn/ttcmn.c 2019-03-05 16:22:05 UTC (rev 7461)
+++ trunk/teraterm/ttpcmn/ttcmn.c 2019-03-09 17:32:42 UTC (rev 7462)
@@ -1582,25 +1582,52 @@
return i;
}
+// \x93\xE0\x95\x94\x83R\x81[\x83h(CodePage)\x82\xF0UTF-32(UTF-16LE)\x82֕ϊ\xB7\x82\xB7\x82\xE9
+static unsigned int SJIS2UTF32(WORD KCode, int CodePage)
+{
+ unsigned int c;
+
+ // \x93\xE0\x95\x94\x83R\x81[\x83h(CodePage)\x82\xA9\x82\xE7UTF-16LE\x82֕ϊ\xB7\x82\xB7\x82\xE9
+ if (CodePage == 932) {
+ c = CP932ToUTF32(KCode);
+ } else {
+ unsigned char buf[3];
+ wchar_t wchar;
+ int ret;
+ int len = 0;
+ if (KCode < 0x100) {
+ buf[0] = KCode & 0xff;
+ len = 1;
+ } else {
+ buf[0] = KCode >> 8;
+ buf[1] = KCode & 0xff;
+ len = 2;
+ }
+ ret = MultiByteToWideChar(CodePage, MB_ERR_INVALID_CHARS, buf, len, &wchar, 1);
+ if (ret <= 0) {
+ c = 0;
+ } else {
+ c = (unsigned int)wchar;
+ }
+ }
+ if (c <= 0) {
+ // \x95ϊ\xB7\x8E\xB8\x94s
+ c = 0xfffd; // U+FFFD: Replacement Character
+ }
+
+ return c;
+}
+
+// \x93\xE0\x95\x94\x83R\x81[\x83h(CodePage)\x82\xF0UTF-8\x82֏o\x97͂\xB7\x82\xE9
static int OutputTextUTF8(WORD K, char *TempStr, PComVar cv)
{
+ int CodePage = *cv->CodePage;
unsigned int code;
int outlen;
- int TempLen = 0;
- code = SJIS2UTF8(K, &outlen, *cv->CodePage);
- switch (outlen) {
- case 4:
- TempStr[TempLen++] = (code >> 24) & 0xff;
- case 3:
- TempStr[TempLen++] = (code >> 16) & 0xff;
- case 2:
- TempStr[TempLen++] = (code >> 8) & 0xff;
- case 1:
- TempStr[TempLen++] = code & 0xff;
- }
-
- return TempLen;
+ code = SJIS2UTF32(K, CodePage);
+ outlen = UTF32ToUTF8(code, TempStr, 4);
+ return outlen;
}
//
From scmnotify @ osdn.net Sun Mar 10 02:32:55 2019
From: scmnotify @ osdn.net (scmnotify @ osdn.net)
Date: Sun, 10 Mar 2019 02:32:55 +0900
Subject: [Ttssh2-commit] =?utf-8?b?Wzc0NjNdIFVURjMyVG9NQkNQKCnjgYvjgolV?=
=?utf-8?b?VEYzMlRvQ1A5MzIoKeOCkuWRvOOBs+WHuuOBmeOCiOOBhuOBq+OBl+OBnw==?=
Message-ID: <1552152775.665757.90774.nullmailer@users.osdn.me>
Revision: 7463
http://sourceforge.jp/projects/ttssh2/scm/svn/commits/7463
Author: zmatsuo
Date: 2019-03-10 02:32:55 +0900 (Sun, 10 Mar 2019)
Log Message:
-----------
UTF32ToMBCP()からUTF32ToCP932()を呼び出すようにした
Modified Paths:
--------------
trunk/teraterm/common/codeconv.cpp
-------------- next part --------------
Modified: trunk/teraterm/common/codeconv.cpp
===================================================================
--- trunk/teraterm/common/codeconv.cpp 2019-03-09 17:32:42 UTC (rev 7462)
+++ trunk/teraterm/common/codeconv.cpp 2019-03-09 17:32:55 UTC (rev 7463)
@@ -558,18 +558,22 @@
size_t UTF32ToMBCP(unsigned int u32, int code_page, char *mb_ptr, size_t mb_len)
{
- wchar_t u16_str[2];
- size_t u16_len;
- u16_len = UTF32ToUTF16(u32, u16_str, 2);
- if (u16_len == 0) {
- return 0;
+ if (code_page == 932) {
+ return UTF32ToCP932(u32, mb_ptr, mb_len);
+ } else {
+ wchar_t u16_str[2];
+ size_t u16_len;
+ u16_len = UTF32ToUTF16(u32, u16_str, 2);
+ if (u16_len == 0) {
+ return 0;
+ }
+ mb_len = WideCharToMultiByte(code_page, 0, u16_str, u16_len, mb_ptr, mb_len, NULL, NULL);
+ if (u32 != '?' && mb_len == 1 && mb_ptr[0] == '?') {
+ // \x95ϊ\xB7\x82ł\xAB\x82Ȃ\xA9\x82\xC1\x82\xBD\x82Ƃ\xAB\x81A\x96߂\xE8\x92l=1, \x95\xB6\x8E\x9A[0]='?' \x82\xF0\x95Ԃ\xB5\x82Ă\xAD\x82\xE9
+ mb_len = 0;
+ }
+ return mb_len;
}
- mb_len = WideCharToMultiByte(code_page, 0, u16_str, u16_len, mb_ptr, mb_len, NULL, NULL);
- if (mb_len == 1 && mb_ptr[0] == '?' && u32 != '?') {
- // \x95ϊ\xB7\x82ł\xAB\x82Ȃ\xA9\x82\xC1\x82\xBD\x82Ƃ\xAB\x81A\x96߂\xE8\x92l=1, \x95\xB6\x8E\x9A[0]='?' \x82\xF0\x95Ԃ\xB5\x82Ă\xAD\x82\xE9
- mb_len = 0;
- }
- return mb_len;
}
/**
From scmnotify @ osdn.net Sun Mar 10 02:33:06 2019
From: scmnotify @ osdn.net (scmnotify @ osdn.net)
Date: Sun, 10 Mar 2019 02:33:06 +0900
Subject: [Ttssh2-commit] =?utf-8?q?=5B7464=5D_UTF32ToMBCP=28=29=2C_MBCPToU?=
=?utf-8?b?VEYzMigp44KS5L2/55So44GZ44KL44KI44GG6Kq/5pW0?=
Message-ID: <1552152786.538730.91057.nullmailer@users.osdn.me>
Revision: 7464
http://sourceforge.jp/projects/ttssh2/scm/svn/commits/7464
Author: zmatsuo
Date: 2019-03-10 02:33:06 +0900 (Sun, 10 Mar 2019)
Log Message:
-----------
UTF32ToMBCP(), MBCPToUTF32()を使用するよう調整
Modified Paths:
--------------
trunk/teraterm/teraterm/vtterm.c
trunk/teraterm/ttpcmn/ttcmn.c
-------------- next part --------------
Modified: trunk/teraterm/teraterm/vtterm.c
===================================================================
--- trunk/teraterm/teraterm/vtterm.c 2019-03-09 17:32:55 UTC (rev 7463)
+++ trunk/teraterm/teraterm/vtterm.c 2019-03-09 17:33:06 UTC (rev 7464)
@@ -5461,22 +5461,16 @@
return (index);
}
-// unicode(UTF-32,wchar_t)\x82\xF0\x83o\x83b\x83t\x83@\x82֏\x91\x82\xAB\x8D\x9E\x82\xDE
+// unicode(UTF-32)\x82\xF0\x83o\x83b\x83t\x83@(t.CodePage)\x82֏\x91\x82\xAB\x8D\x9E\x82\xDE
static void UnicodeToCP932(unsigned int code)
{
- wchar_t wchar;
- int ret;
+ size_t mblen;
char mbchar[2];
- unsigned short cset;
- if (code >= 0x10000) {
- goto unknown;
- }
- wchar = (wchar_t)code;
-
// Unicode\x82\xA9\x82\xE7DEC\x93\xC1\x8Eꕶ\x8E\x9A\x82ւ̃}\x83b\x83s\x83\x93\x83O
if (ts.UnicodeDecSpMapping) {
- cset = UTF32ToDecSp(wchar);
+ unsigned short cset;
+ cset = UTF32ToDecSp(code);
if (((cset >> 8) & ts.UnicodeDecSpMapping) != 0) {
PutDecSp(cset & 0xff);
return;
@@ -5484,31 +5478,18 @@
}
// Unicode -> \x93\xE0\x95\x94\x83R\x81[\x83h(ts.CodePage)\x82֕ϊ\xB7\x82\xB5\x82ďo\x97\xCD
- if (ts.CodePage == 932) {
- ret = (int)UTF16ToCP932(&wchar, 1, &cset);
- if (ret == 0) {
- // \x95ϊ\xB7\x82ł\xAB\x82Ȃ\xA9\x82\xC1\x82\xBD
- ;
- } else if (cset < 0x100) {
- // 1byte\x95\xB6\x8E\x9A
- mbchar[0] = (char)cset;
- ret = 1;
- } else {
- // 2byte\x95\xB6\x8E\x9A
- mbchar[0] = (char)(cset >> 8);
- mbchar[1] = (char)(cset & 0xff);
- ret = 2;
- }
- } else {
- ret = WideCharToMultiByte(ts.CodePage, 0, &wchar, 1, mbchar, 2, NULL, NULL);
+ mblen = UTF32ToMBCP(code, ts.CodePage, mbchar, 2);
+#if 1 // U+203e OVERLINE \x93\xC1\x95ʏ\x88\x97\x9D
+ if (code == 0x203e && ts.CodePage == 932) {
+ // U+203e\x82\xCD0x7e'~'\x82ɕϊ\xB7\x82\xB3\x82\xEA\x82\xE9
+ // \x96\xB3\x97\x9D\x82\xE2\x82芿\x8E\x9A\x8Fo\x97͂\xB7\x82\xE9
+ mbchar[0] = 0; // \x82\xB1\x82\xCC0\x82̂\xBD\x82߁A\x83N\x83\x8A\x83b\x83v\x83{\x81[\x83h\x82ɕ\xB6\x8E\x9A\x97\xA4\x82܂\xAD\x93\xFC\x82\xE7\x82Ȃ\xA2
+ mbchar[1] = 0x7e;
+ mblen = 2;
}
- if (ret == 1 && mbchar[0] == '?' && code != '?') {
- // \x95ϊ\xB7\x82ł\xAB\x82Ȃ\xA9\x82\xC1\x82\xBD\x82Ƃ\xAB\x81Aret=1, '?' \x82\xF0\x95Ԃ\xB5\x82Ă\xAD\x82\xE9
- ret = 0;
- }
- switch (ret) {
+#endif
+ switch (mblen) {
case 0:
- unknown:
PutChar('?');
if (ts.UnknownUnicodeCharaAsWide) {
PutChar('?');
Modified: trunk/teraterm/ttpcmn/ttcmn.c
===================================================================
--- trunk/teraterm/ttpcmn/ttcmn.c 2019-03-09 17:32:55 UTC (rev 7463)
+++ trunk/teraterm/ttpcmn/ttcmn.c 2019-03-09 17:33:06 UTC (rev 7464)
@@ -1582,42 +1582,6 @@
return i;
}
-// \x93\xE0\x95\x94\x83R\x81[\x83h(CodePage)\x82\xF0UTF-32(UTF-16LE)\x82֕ϊ\xB7\x82\xB7\x82\xE9
-static unsigned int SJIS2UTF32(WORD KCode, int CodePage)
-{
- unsigned int c;
-
- // \x93\xE0\x95\x94\x83R\x81[\x83h(CodePage)\x82\xA9\x82\xE7UTF-16LE\x82֕ϊ\xB7\x82\xB7\x82\xE9
- if (CodePage == 932) {
- c = CP932ToUTF32(KCode);
- } else {
- unsigned char buf[3];
- wchar_t wchar;
- int ret;
- int len = 0;
- if (KCode < 0x100) {
- buf[0] = KCode & 0xff;
- len = 1;
- } else {
- buf[0] = KCode >> 8;
- buf[1] = KCode & 0xff;
- len = 2;
- }
- ret = MultiByteToWideChar(CodePage, MB_ERR_INVALID_CHARS, buf, len, &wchar, 1);
- if (ret <= 0) {
- c = 0;
- } else {
- c = (unsigned int)wchar;
- }
- }
- if (c <= 0) {
- // \x95ϊ\xB7\x8E\xB8\x94s
- c = 0xfffd; // U+FFFD: Replacement Character
- }
-
- return c;
-}
-
// \x93\xE0\x95\x94\x83R\x81[\x83h(CodePage)\x82\xF0UTF-8\x82֏o\x97͂\xB7\x82\xE9
static int OutputTextUTF8(WORD K, char *TempStr, PComVar cv)
{
@@ -1625,7 +1589,11 @@
unsigned int code;
int outlen;
- code = SJIS2UTF32(K, CodePage);
+ code = MBCPToUTF32(K, CodePage);
+ if (code == 0) {
+ // \x95ϊ\xB7\x8E\xB8\x94s
+ code = 0xfffd; // U+FFFD: Replacement Character
+ }
outlen = UTF32ToUTF8(code, TempStr, 4);
return outlen;
}
From scmnotify @ osdn.net Sun Mar 10 02:33:17 2019
From: scmnotify @ osdn.net (scmnotify @ osdn.net)
Date: Sun, 10 Mar 2019 02:33:17 +0900
Subject: [Ttssh2-commit] =?utf-8?b?Wzc0NjVdIOacquS9v+eUqOmWouaVsOWJig==?=
=?utf-8?b?6Zmk44CBQ1BfQUNQ6ICD5oWu?=
Message-ID: <1552152797.088658.91347.nullmailer@users.osdn.me>
Revision: 7465
http://sourceforge.jp/projects/ttssh2/scm/svn/commits/7465
Author: zmatsuo
Date: 2019-03-10 02:33:16 +0900 (Sun, 10 Mar 2019)
Log Message:
-----------
未使用関数削除、CP_ACP考慮
Modified Paths:
--------------
trunk/teraterm/common/codeconv.cpp
-------------- next part --------------
Modified: trunk/teraterm/common/codeconv.cpp
===================================================================
--- trunk/teraterm/common/codeconv.cpp 2019-03-09 17:33:06 UTC (rev 7464)
+++ trunk/teraterm/common/codeconv.cpp 2019-03-09 17:33:16 UTC (rev 7465)
@@ -94,39 +94,72 @@
}
/**
- * 1\x95\xB6\x8E\x9A\x82Ƃ\xB5\x82Ĉ\xB5\x82\xA4\x82\xBD\x82߂ɁA\x95K\x97v\x82ȃL\x83\x83\x83\x89\x83N\x83^\x90\x94\x82\xE9
- * @retval 0 \x95\xB6\x8E\x9A\x82Ƃ\xB5\x82Ĉ\xB5\x82\xA6\x82Ȃ\xA2(\x95\xB6\x8E\x9A\x83R\x81[\x83h\x82\xAA\x82\xA8\x82\xA9\x82\xB5\x82\xA2)
- * @retval 1 1\x83L\x83\x83\x83\x89\x83N\x83^\x82\xC51\x95\xB6\x8E\x9A\x82Ƃ\xB5\x82Ĉ\xB5\x82\xA6\x82\xE9
- * @retval 2 2\x83L\x83\x83\x83\x89\x83N\x83^\x82\xC51\x95\xB6\x8E\x9A\x82Ƃ\xB5\x82Ĉ\xB5\x82\xA6\x82\xE9
+ * CP932\x95\xB6\x8E\x9A(Shift_JIS) 1\x95\xB6\x8E\x9A\x82\xA9\x82\xE7UTF-32\x82֕ϊ\xB7\x82\xB7\x82\xE9
+ * @param[in] cp932 CP932\x95\xB6\x8E\x9A
+ * @retval \x95ϊ\xB7\x82\xB5\x82\xBDUTF-32\x95\xB6\x8E\x9A\x90\x94
+ * 0=\x83G\x83\x89\x81[(\x95ϊ\xB7\x82ł\xAB\x82Ȃ\xA9\x82\xC1\x82\xBD)
*/
-#if 0
-static size_t UTF16GetCharCount(const wchar_t *wstr_ptr, size_t wstr_len)
+unsigned int CP932ToUTF32(unsigned short cp932)
{
- wchar_t u16;
- assert(wstr_ptr != NULL);
- if (wstr_len == 0) {
- return 0;
+#include "../ttpcmn/sjis2uni.map" // mapSJISToUnicode[]
+ wchar_t wchar;
+ int ret;
+ unsigned int u32;
+ unsigned char buf[2];
+ int len = 0;
+
+#if defined(PRIORITY_CP932_TABLE)
+ u32 = _ConvertUnicode(cp932, mapSJISToUnicode, sizeof(mapSJISToUnicode)/sizeof(mapSJISToUnicode[0]));
+ if (u32 != 0) {
+ return u32;
}
- u16 = *wstr_ptr++;
- if (IsHighSurrogate(u16)) {
- if (wstr_len >= 2) {
- const wchar_t u16_lo = *wstr_ptr++;
- if (IsLowSurrogate(u16_lo)) {
- return 2;
- } else {
- return 0;
- }
- } else {
- return 0;
- }
- } else if (IsLowSurrogate(u16)) {
- return 0;
+#endif
+ if (cp932 < 0x100) {
+ buf[0] = cp932 & 0xff;
+ len = 1;
+ } else {
+ buf[0] = cp932 >> 8;
+ buf[1] = cp932 & 0xff;
+ len = 2;
}
- return 1;
-}
+ ret = MultiByteToWideChar(932, MB_ERR_INVALID_CHARS, (char *)buf, len, &wchar, 1);
+ if (ret <= 0) {
+ // MultiByteToWideChar()\x82\xAA\x95ϊ\xB7\x8E\xB8\x94s
+#if !defined(PRIORITY_CP932_TABLE)
+ u32 = _ConvertUnicode(cp932, mapSJISToUnicode, sizeof(mapSJISToUnicode)/sizeof(mapSJISToUnicode[0]));
+ // \x83e\x81[\x83u\x83\x8B\x82ɂ\xE0\x82Ȃ\xA9\x82\xC1\x82\xBD\x8Fꍇ c = 0(\x95ϊ\xB7\x8E\xB8\x94s\x8E\x9E)
+#else
+ u32 = 0;
#endif
+ } else {
+ u32 = (unsigned int)wchar;
+ }
+ return u32;
+}
+
/**
+ * Unicode\x82\xA9\x82\xE7DEC\x93\xC1\x8Eꕶ\x8E\x9A\x82֕ϊ\xB7
+ * @param u32 UTF-32\x95\xB6\x8E\x9A\x83R\x81[\x83h
+ * @return \x89\xBA\x88\xCA8bit DEC\x93\xC1\x8Eꕶ\x8E\x9A\x83R\x81[\x83h
+ * \x8F\xE3\x88\xCA8bit \x95\xB6\x8E\x9A\x83R\x81[\x83h\x8E\xED\x95\xCA (1,2,4)
+ * file://../../doc/ja/html/setup/teraterm-term.html \x8EQ\x8F\xC6
+ * 0 \x95ϊ\xB7\x82ł\xAB\x82Ȃ\xA9\x82\xC1\x82\xBD
+ */
+unsigned short UTF32ToDecSp(unsigned int u32)
+{
+#include "../teraterm/unisym2decsp.map" // mapUnicodeSymbolToDecSp[]
+ unsigned short cset;
+ if (u32 > 0x10000) {
+ cset = 0;
+ } else {
+ const unsigned short u16 = (unsigned short)u32;
+ cset = _ConvertUnicode(u16, mapUnicodeSymbolToDecSp, _countof(mapUnicodeSymbolToDecSp));
+ }
+ return cset;
+}
+
+/**
* code page \x82\xCC mulit byte \x95\xB6\x8E\x9A\x82\xF0 UTF-32\x82֕ϊ\xB7\x82\xB7\x82\xE9
* @param KCode \x83}\x83\x8B\x83`\x83o\x83C\x83g\x82̕\xB6\x8E\x9A\x83R\x81[\x83h(0x0000-0xffff)
* @param CoePage \x83}\x83\x8B\x83`\x83o\x83C\x83g\x82̃R\x81[\x83h\x83y\x81[\x83W
@@ -162,6 +195,158 @@
}
/**
+ * UTF-32\x95\xB6\x8E\x9A\x82\xF0CP932\x95\xB6\x8E\x9A(Shift_JIS) 1\x95\xB6\x8E\x9A\x82֕ϊ\xB7\x82\xB7\x82\xE9
+ * @retval \x8Eg\x97p\x82\xB5\x82\xBDCP932\x95\xB6\x8E\x9A
+ * 0=\x83G\x83\x89\x81[(\x95ϊ\xB7\x82ł\xAB\x82Ȃ\xA9\x82\xC1\x82\xBD)
+ */
+unsigned short UTF32_CP932(unsigned int u32)
+{
+#include "../teraterm/uni2sjis.map" // mapUnicodeToSJIS[]
+ char mbstr[2];
+ unsigned short mb;
+ DWORD mblen;
+ wchar_t u16_str[2];
+ size_t u16_len;
+
+ if (u32 < 0x80) {
+ return (unsigned short)u32;
+ }
+
+#if defined(PRIORITY_CP932_TABLE)
+ if (u32 < 0x10000) {
+ wchar_t u16 = (wchar_t)u32;
+ // Tera Term\x82̕ϊ\xB7\x83e\x81[\x83u\x83\x8B\x82\xC5 Unicode -> Shift_JIS\x82֕ϊ\xB7
+ mb = _ConvertUnicode(u16, mapUnicodeToSJIS, _countof(mapUnicodeToSJIS));
+ if (mb != 0) {
+ // \x95ϊ\xB7\x82ł\xAB\x82\xBD
+ return mb;
+ }
+ }
+#endif
+ u16_len = UTF32ToUTF16(u32, u16_str, 2);
+ if (u16_len == 0) {
+ return 0;
+ }
+ mblen = WideCharToMultiByte(932, 0, u16_str, (int)u16_len, mbstr, 2, NULL, NULL);
+ switch (mblen) {
+ case 0:
+ case 1:
+ default:
+ if (mblen == 0 || mbstr[0] == '?') {
+ goto next_convert;
+ } else {
+ mb = (unsigned char)mbstr[0];
+ return mb;
+ }
+ case 2:
+ if (mbstr[0] == '?' && mbstr[1] == '?') {
+ // 2byte\x8Fo\x97\xCD && "??" \x82̏ꍇ\x82͕ϊ\xB7\x82ł\xAB\x82Ȃ\xA9\x82\xC1\x82\xBD
+ goto next_convert;
+ }
+ mb = (((unsigned char)mbstr[0]) << 8) | (unsigned char)mbstr[1];
+ return mb;
+ }
+
+next_convert:
+#if !defined(PRIORITY_CP932_TABLE)
+ if (u32 < 0x10000) {
+ wchar_t u16 = (wchar_t)u32;
+ // Tera Term\x82̕ϊ\xB7\x83e\x81[\x83u\x83\x8B\x82\xC5 Unicode -> Shift_JIS\x82֕ϊ\xB7
+ mb = _ConvertUnicode(u16, mapUnicodeToSJIS, _countof(mapUnicodeToSJIS));
+ if (mb != 0) {
+ // \x95ϊ\xB7\x82ł\xAB\x82\xBD
+ return mb;
+ }
+ }
+#endif
+ return 0;
+}
+
+/**
+ * UTF-8\x95\xB6\x8E\x9A\x97\xE7UTF-32\x82\xF01\x95\xB6\x8E\x9A\x8E\xE6\x82\xE8\x8Fo\x82\xB7
+ * @param[in] u8_ptr UTF-8\x95\xB6\x8E\x9A\x97\xF1\x82ւ̃|\x83C\x83\x93\x83^
+ * @param[in] u8_len UTF-8\x95\xB6\x8E\x9A\x97\xB3
+ * @param[out] u32 \x95ϊ\xB7\x82\xB5\x82\xBDUTF-32\x95\xB6\x8E\x9A
+ * @retval \x8Eg\x97p\x82\xB5\x82\xBDUTF-8\x95\xB6\x8E\x9A\x90\x94(byte\x90\x94\x81j
+ * 0=\x83G\x83\x89\x81[(\x95ϊ\xB7\x82ł\xAB\x82Ȃ\xA9\x82\xC1\x82\xBD)
+ */
+size_t UTF8ToUTF32(const char *u8_ptr_, size_t u8_len, uint32_t *u32_)
+{
+ uint8_t *u8_ptr = (uint8_t *)u8_ptr_;
+ uint32_t u32;
+ size_t u8_in;
+ const uint8_t c1 = *u8_ptr++;
+ if (c1 <= 0x7f) {
+ // 1byte
+ if (u8_len >= 1) {
+ u32 = (uint32_t)c1;
+ u8_in = 1;
+ } else {
+ goto error;
+ }
+ } else if (0xc2 <= c1 && c1 <= 0xdf) {
+ // 2byte
+ if (u8_len >= 2) {
+ const uint8_t c2 = *u8_ptr++;
+ if (((c1 & 0x1e) != 0) &&
+ ((c2 & 0xc0) == 0x80))
+ {
+ u32 = (uint32_t)((c1 & 0x1f) << 6) + (c2 & 0x3f);
+ u8_in = 2;
+ } else {
+ goto error;
+ }
+ } else {
+ goto error;
+ }
+ } else if (0xe0 <= c1 && c1 <= 0xef) {
+ // 3byte
+ if (u8_len >= 3) {
+ const uint8_t c2 = *u8_ptr++;
+ const uint8_t c3 = *u8_ptr++;
+ if ((((c1 & 0x0f) != 0) || ((c2 & 0x20) != 0)) &&
+ ((c2 & 0xc0) == 0x80) &&
+ ((c3 & 0xc0) == 0x80) )
+ {
+ u32 = (uint32_t)((c1 & 0x0f) << 12) + ((c2 & 0x3f) << 6);
+ u32 += (c3 & 0x3f);
+ u8_in = 3;
+ } else {
+ goto error;
+ }
+ } else {
+ goto error;
+ }
+ } else if (0xf0 <= c1 && c1 <= 0xf7 && u8_len >= 4) {
+ // 4byte
+ if (u8_len >= 4) {
+ const uint8_t c2 = *u8_ptr++;
+ const uint8_t c3 = *u8_ptr++;
+ const uint8_t c4 = *u8_ptr++;
+ if ((((c1 & 0x07) != 0) || ((c2 & 0x30) != 0)) &&
+ ((c2 & 0xc0) == 0x80) &&
+ ((c3 & 0xc0) == 0x80) &&
+ ((c4 & 0xc0) == 0x80) )
+ {
+ u32 = (uint32_t)((c1 & 0x07) << 18) + ((c2 & 0x3f) << 12);
+ u32 += ((c3 & 0x3f) << 6) + (c4 & 0x3f);
+ u8_in = 4;
+ } else {
+ goto error;
+ }
+ } else {
+ goto error;
+ }
+ } else {
+ error:
+ u32 = 0;
+ u8_in = 0;
+ }
+ *u32_ = u32;
+ return u8_in;
+}
+
+/**
* wchar_t\x95\xB6\x8E\x9A\x97\xE7unicode(UTF-32)\x82\xF01\x95\xB6\x8E\x9A\x8E\xE6\x82\xE8\x8Fo\x82\xB7
* @retval 0 \x95\xB6\x8E\x9A\x82Ƃ\xB5\x82Ĉ\xB5\x82\xA6\x82Ȃ\xA2(\x95\xB6\x8E\x9A\x83R\x81[\x83h\x82\xAA\x82\xA8\x82\xA9\x82\xB5\x82\xA2)
* @retval 1 1\x83L\x83\x83\x83\x89\x83N\x83^\x82\xC51\x95\xB6\x8E\x9A\x82Ƃ\xB5\x82Ĉ\xB5\x82\xA6\x82\xE9
@@ -261,90 +446,6 @@
}
/**
- * UTF-8\x95\xB6\x8E\x9A\x97\xE7UTF-32\x82\xF01\x95\xB6\x8E\x9A\x8E\xE6\x82\xE8\x8Fo\x82\xB7
- * @param[in] u8_ptr UTF-8\x95\xB6\x8E\x9A\x97\xF1\x82ւ̃|\x83C\x83\x93\x83^
- * @param[in] u8_len UTF-8\x95\xB6\x8E\x9A\x97\xB3
- * @param[out] u32 \x95ϊ\xB7\x82\xB5\x82\xBDUTF-32\x95\xB6\x8E\x9A
- * @retval \x8Eg\x97p\x82\xB5\x82\xBDUTF-8\x95\xB6\x8E\x9A\x90\x94(byte\x90\x94\x81j
- * 0=\x83G\x83\x89\x81[(\x95ϊ\xB7\x82ł\xAB\x82Ȃ\xA9\x82\xC1\x82\xBD)
- */
-size_t UTF8ToUTF32(const char *u8_ptr_, size_t u8_len, uint32_t *u32_)
-{
- uint8_t *u8_ptr = (uint8_t *)u8_ptr_;
- uint32_t u32;
- size_t u8_in;
- const uint8_t c1 = *u8_ptr++;
- if (c1 <= 0x7f) {
- // 1byte
- if (u8_len >= 1) {
- u32 = (uint32_t)c1;
- u8_in = 1;
- } else {
- goto error;
- }
- } else if (0xc2 <= c1 && c1 <= 0xdf) {
- // 2byte
- if (u8_len >= 2) {
- const uint8_t c2 = *u8_ptr++;
- if (((c1 & 0x1e) != 0) &&
- ((c2 & 0xc0) == 0x80))
- {
- u32 = (uint32_t)((c1 & 0x1f) << 6) + (c2 & 0x3f);
- u8_in = 2;
- } else {
- goto error;
- }
- } else {
- goto error;
- }
- } else if (0xe0 <= c1 && c1 <= 0xef) {
- // 3byte
- if (u8_len >= 3) {
- const uint8_t c2 = *u8_ptr++;
- const uint8_t c3 = *u8_ptr++;
- if ((((c1 & 0x0f) != 0) || ((c2 & 0x20) != 0)) &&
- ((c2 & 0xc0) == 0x80) &&
- ((c3 & 0xc0) == 0x80) )
- {
- u32 = (uint32_t)((c1 & 0x0f) << 12) + ((c2 & 0x3f) << 6);
- u32 += (c3 & 0x3f);
- u8_in = 3;
- } else {
- goto error;
- }
- } else {
- goto error;
- }
- } else if (0xf0 <= c1 && c1 <= 0xf7 && u8_len >= 4) {
- // 4byte
- if (u8_len >= 4) {
- const uint8_t c2 = *u8_ptr++;
- const uint8_t c3 = *u8_ptr++;
- const uint8_t c4 = *u8_ptr++;
- if ((((c1 & 0x07) != 0) || ((c2 & 0x30) != 0)) &&
- ((c2 & 0xc0) == 0x80) &&
- ((c3 & 0xc0) == 0x80) &&
- ((c4 & 0xc0) == 0x80) )
- {
- u32 = (uint32_t)((c1 & 0x07) << 18) + ((c2 & 0x3f) << 12);
- u32 += ((c3 & 0x3f) << 6) + (c4 & 0x3f);
- u8_in = 4;
- } else {
- goto error;
- }
- } else {
- goto error;
- }
- } else {
- error:
- u32 = 0;
- u8_in = 0;
- }
- *u32_ = u32;
- return u8_in;
-}
-
-/**
* UTF-32 \x82\xA9\x82\xE7 UTF-16 \x82֕ϊ\xB7\x82\xB7\x82\xE9
* @param[in] u32 \x95ϊ\xB7\x82\xB7\x82\xE9UTF-32
* @param[in,out] wstr_ptr \x95ϊ\xB7\x8C\xE3UTF-16\x95\xB6\x8E\x9A\x97\xF1\x8Fo\x97͐\xE6(NULL\x82̂Ƃ\xAB\x8Fo\x97͂\xB5\x82Ȃ\xA2)
@@ -382,140 +483,6 @@
}
/**
- * UTF-32\x95\xB6\x8E\x9A\x82\xF0CP932\x95\xB6\x8E\x9A(Shift_JIS) 1\x95\xB6\x8E\x9A\x82֕ϊ\xB7\x82\xB7\x82\xE9
- * @retval \x8Eg\x97p\x82\xB5\x82\xBDCP932\x95\xB6\x8E\x9A
- * 0=\x83G\x83\x89\x81[(\x95ϊ\xB7\x82ł\xAB\x82Ȃ\xA9\x82\xC1\x82\xBD)
- */
-unsigned short UTF32_CP932(unsigned int u32)
-{
-#include "../teraterm/uni2sjis.map" // mapUnicodeToSJIS[]
- char mbstr[2];
- unsigned short mb;
- DWORD mblen;
- wchar_t u16_str[2];
- size_t u16_len;
-
- if (u32 < 0x80) {
- return (unsigned short)u32;
- }
-
-#if defined(PRIORITY_CP932_TABLE)
- if (u32 < 0x10000) {
- wchar_t u16 = (wchar_t)u32;
- // Tera Term\x82̕ϊ\xB7\x83e\x81[\x83u\x83\x8B\x82\xC5 Unicode -> Shift_JIS\x82֕ϊ\xB7
- mb = _ConvertUnicode(u16, mapUnicodeToSJIS, _countof(mapUnicodeToSJIS));
- if (mb != 0) {
- // \x95ϊ\xB7\x82ł\xAB\x82\xBD
- return mb;
- }
- }
-#endif
- u16_len = UTF32ToUTF16(u32, u16_str, 2);
- if (u16_len == 0) {
- return 0;
- }
- mblen = WideCharToMultiByte(932, 0, u16_str, (int)u16_len, mbstr, 2, NULL, NULL);
- switch (mblen) {
- case 0:
- case 1:
- default:
- if (mblen == 0 || mbstr[0] == '?') {
- goto next_convert;
- } else {
- mb = (unsigned char)mbstr[0];
- return mb;
- }
- case 2:
- if (mbstr[0] == '?' && mbstr[1] == '?') {
- // 2byte\x8Fo\x97\xCD && "??" \x82̏ꍇ\x82͕ϊ\xB7\x82ł\xAB\x82Ȃ\xA9\x82\xC1\x82\xBD
- goto next_convert;
- }
- mb = (((unsigned char)mbstr[0]) << 8) | (unsigned char)mbstr[1];
- return mb;
- }
-
-next_convert:
-#if !defined(PRIORITY_CP932_TABLE)
- if (u32 < 0x10000) {
- wchar_t u16 = (wchar_t)u32;
- // Tera Term\x82̕ϊ\xB7\x83e\x81[\x83u\x83\x8B\x82\xC5 Unicode -> Shift_JIS\x82֕ϊ\xB7
- mb = _ConvertUnicode(u16, mapUnicodeToSJIS, _countof(mapUnicodeToSJIS));
- if (mb != 0) {
- // \x95ϊ\xB7\x82ł\xAB\x82\xBD
- return mb;
- }
- }
-#endif
- return 0;
-}
-
-/**
- * CP932\x95\xB6\x8E\x9A(Shift_JIS) 1\x95\xB6\x8E\x9A\x82\xA9\x82\xE7UTF-32\x82֕ϊ\xB7\x82\xB7\x82\xE9
- * @param[in] cp932 CP932\x95\xB6\x8E\x9A
- * @retval \x95ϊ\xB7\x82\xB5\x82\xBDUTF-32\x95\xB6\x8E\x9A\x90\x94
- * 0=\x83G\x83\x89\x81[(\x95ϊ\xB7\x82ł\xAB\x82Ȃ\xA9\x82\xC1\x82\xBD)
- */
-unsigned int CP932ToUTF32(unsigned short cp932)
-{
-#include "../ttpcmn/sjis2uni.map" // mapSJISToUnicode[]
- wchar_t wchar;
- int ret;
- unsigned int u32;
- unsigned char buf[2];
- int len = 0;
-
-#if defined(PRIORITY_CP932_TABLE)
- u32 = _ConvertUnicode(cp932, mapSJISToUnicode, sizeof(mapSJISToUnicode)/sizeof(mapSJISToUnicode[0]));
- if (u32 != 0) {
- return u32;
- }
-#endif
- if (cp932 < 0x100) {
- buf[0] = cp932 & 0xff;
- len = 1;
- } else {
- buf[0] = cp932 >> 8;
- buf[1] = cp932 & 0xff;
- len = 2;
- }
- ret = MultiByteToWideChar(932, MB_ERR_INVALID_CHARS, (char *)buf, len, &wchar, 1);
- if (ret <= 0) {
- // MultiByteToWideChar()\x82\xAA\x95ϊ\xB7\x8E\xB8\x94s
-#if !defined(PRIORITY_CP932_TABLE)
- u32 = _ConvertUnicode(cp932, mapSJISToUnicode, sizeof(mapSJISToUnicode)/sizeof(mapSJISToUnicode[0]));
- // \x83e\x81[\x83u\x83\x8B\x82ɂ\xE0\x82Ȃ\xA9\x82\xC1\x82\xBD\x8Fꍇ c = 0(\x95ϊ\xB7\x8E\xB8\x94s\x8E\x9E)
-#else
- u32 = 0;
-#endif
- } else {
- u32 = (unsigned int)wchar;
- }
-
- return u32;
-}
-
-/**
- * Unicode\x82\xA9\x82\xE7DEC\x93\xC1\x8Eꕶ\x8E\x9A\x82֕ϊ\xB7
- * @param u32 UTF-32\x95\xB6\x8E\x9A\x83R\x81[\x83h
- * @return \x89\xBA\x88\xCA8bit DEC\x93\xC1\x8Eꕶ\x8E\x9A\x83R\x81[\x83h
- * \x8F\xE3\x88\xCA8bit \x95\xB6\x8E\x9A\x83R\x81[\x83h\x8E\xED\x95\xCA (1,2,4)
- * file://../../doc/ja/html/setup/teraterm-term.html \x8EQ\x8F\xC6
- * 0 \x95ϊ\xB7\x82ł\xAB\x82Ȃ\xA9\x82\xC1\x82\xBD
- */
-unsigned short UTF32ToDecSp(unsigned int u32)
-{
-#include "../teraterm/unisym2decsp.map" // mapUnicodeSymbolToDecSp[]
- unsigned short cset;
- if (u32 > 0x10000) {
- cset = 0;
- } else {
- const unsigned short u16 = (unsigned short)u32;
- cset = _ConvertUnicode(u16, mapUnicodeSymbolToDecSp, _countof(mapUnicodeSymbolToDecSp));
- }
- return cset;
-}
-
-/**
* UTF-32 \x82\xA9\x82\xE7 CP932 \x82֕ϊ\xB7\x82\xB7\x82\xE9
* @param[in] u32 \x95ϊ\xB7\x82\xB7\x82\xE9UTF-32
* @param[in,out] mb_ptr \x95ϊ\xB7\x8C\xE3CP932\x95\xB6\x8E\x9A\x97\xF1\x8Fo\x97͐\xE6(NULL\x82̂Ƃ\xAB\x8Fo\x97͂\xB5\x82Ȃ\xA2)
@@ -556,8 +523,20 @@
return cp932_out;
}
+/**
+ * UTF-32 \x82\xA9\x82\xE7 MultiByte\x95\xB6\x8E\x9A(code_page) \x82֕ϊ\xB7\x82\xB7\x82\xE9
+ * @param[in] u32 \x95ϊ\xB7\x8C\xB3UTF-32
+ * @param[in] code_page \x95ϊ\xB7\x90\xE6codepage
+ * @param[in,out] mb_ptr \x95ϊ\xB7\x90敶\x8E\x9A\x97\xF1\x8Fo\x97͐\xE6(NULL\x82̂Ƃ\xAB\x8Fo\x97͂\xB5\x82Ȃ\xA2)
+ * @param[in] mb_len CP932\x8Fo\x97͐敶\x8E\x9A\x90\x94(\x95\xB6\x8E\x9A\x90\x94,sizeof(wchar_t)*wstr_len bytes)
+ * @retval \x8Fo\x97͂\xB5\x82\xBDCP932\x95\xB6\x8E\x9A\x90\x94(byte\x90\x94)
+ * 0=\x83G\x83\x89\x81[(\x95ϊ\xB7\x82ł\xAB\x82Ȃ\xA9\x82\xC1\x82\xBD)
+ */
size_t UTF32ToMBCP(unsigned int u32, int code_page, char *mb_ptr, size_t mb_len)
{
+ if (code_page == CP_ACP) {
+ code_page = (int)GetACP();
+ }
if (code_page == 932) {
return UTF32ToCP932(u32, mb_ptr, mb_len);
} else {
@@ -568,7 +547,7 @@
return 0;
}
mb_len = WideCharToMultiByte(code_page, 0, u16_str, u16_len, mb_ptr, mb_len, NULL, NULL);
- if (u32 != '?' && mb_len == 1 && mb_ptr[0] == '?') {
+ if (mb_ptr != NULL && u32 != '?' && mb_len == 1 && mb_ptr[0] == '?') {
// \x95ϊ\xB7\x82ł\xAB\x82Ȃ\xA9\x82\xC1\x82\xBD\x82Ƃ\xAB\x81A\x96߂\xE8\x92l=1, \x95\xB6\x8E\x9A[0]='?' \x82\xF0\x95Ԃ\xB5\x82Ă\xAD\x82\xE9
mb_len = 0;
}
@@ -577,7 +556,7 @@
}
/**
- * wchar_t(UTF-16)\x95\xB6\x8E\x9A\x97\xF1\x82\xF0\x83}\x83\x8B\x83`\x83o\x83C\x83g\x82ɕϊ\xB7\x82\xB7\x82\xE9
+ * wchar_t(UTF-16)\x95\xB6\x8E\x9A\x97\xF1\x82\xF0\x83}\x83\x8B\x83`\x83o\x83C\x83g\x95\xB6\x8E\x9A\x97\xF1\x82ɕϊ\xB7\x82\xB7\x82\xE9
*
* @param[in] *wstr_ptr wchar_t\x95\xB6\x8E\x9A\x97\xF1
* @param[in,out] *wstr_len wchar_t\x95\xB6\x8E\x9A\x97\xF1\x92\xB7
@@ -667,15 +646,16 @@
void WideCharToCP932(const wchar_t *wstr_ptr, size_t *wstr_len, char *cp932_ptr, size_t *cp932_len)
{
- WideCharToMB(wstr_ptr, wstr_len,
- cp932_ptr, cp932_len,
- UTF32ToCP932);
+ WideCharToMB(wstr_ptr, wstr_len, cp932_ptr, cp932_len, UTF32ToCP932);
}
void WideCharToMBCP(const wchar_t *wstr_ptr, size_t *wstr_len, char *mb_ptr, size_t *mb_len,
- int code_page)
+ int code_page)
{
size_t (*utf32_to_mb)(uint32_t u32, char *mb_ptr, size_t mb_len);
+ if (code_page == CP_ACP) {
+ code_page = (int)GetACP();
+ }
switch (code_page) {
case CP_UTF8:
utf32_to_mb = UTF32ToUTF8;
@@ -763,6 +743,9 @@
{
const DWORD flags = 0;
char *mb_ptr;
+ if (code_page == CP_ACP) {
+ code_page = (int)GetACP();
+ }
if (mb_len_ != NULL) {
*mb_len_ = 0;
}
@@ -823,6 +806,9 @@
wchar_t *_MultiByteToWideChar(const char *str_ptr, size_t str_len, int code_page, size_t *w_len_)
{
DWORD flags = MB_ERR_INVALID_CHARS;
+ if (code_page == CP_ACP) {
+ code_page = (int)GetACP();
+ }
if (code_page == CP_UTF8) {
// CP_UTF8 When this is set, dwFlags must be zero.
flags = 0;
From scmnotify @ osdn.net Sun Mar 10 02:33:27 2019
From: scmnotify @ osdn.net (scmnotify @ osdn.net)
Date: Sun, 10 Mar 2019 02:33:27 +0900
Subject: [Ttssh2-commit] =?utf-8?b?Wzc0NjZdIOaWsOOBl+OBhE1CQ1BUb1VURjMy?=
=?utf-8?b?KCnov73liqDjgIHlvpPmnaXjga7plqLmlbDjga8gTUJDUF9VVEYzMigpIA==?=
=?utf-8?b?44Gr44Oq44ON44O844Og?=
Message-ID: <1552152807.542268.91683.nullmailer@users.osdn.me>
Revision: 7466
http://sourceforge.jp/projects/ttssh2/scm/svn/commits/7466
Author: zmatsuo
Date: 2019-03-10 02:33:27 +0900 (Sun, 10 Mar 2019)
Log Message:
-----------
新しいMBCPToUTF32()追加、従来の関数は MBCP_UTF32() にリネーム
Modified Paths:
--------------
trunk/teraterm/common/codeconv.cpp
trunk/teraterm/common/codeconv.h
trunk/teraterm/ttpcmn/ttcmn.c
-------------- next part --------------
Modified: trunk/teraterm/common/codeconv.cpp
===================================================================
--- trunk/teraterm/common/codeconv.cpp 2019-03-09 17:33:16 UTC (rev 7465)
+++ trunk/teraterm/common/codeconv.cpp 2019-03-09 17:33:27 UTC (rev 7466)
@@ -96,7 +96,7 @@
/**
* CP932\x95\xB6\x8E\x9A(Shift_JIS) 1\x95\xB6\x8E\x9A\x82\xA9\x82\xE7UTF-32\x82֕ϊ\xB7\x82\xB7\x82\xE9
* @param[in] cp932 CP932\x95\xB6\x8E\x9A
- * @retval \x95ϊ\xB7\x82\xB5\x82\xBDUTF-32\x95\xB6\x8E\x9A\x90\x94
+ * @retval \x95ϊ\xB7\x82\xB5\x82\xBDUTF-32\x95\xB6\x8E\x9A
* 0=\x83G\x83\x89\x81[(\x95ϊ\xB7\x82ł\xAB\x82Ȃ\xA9\x82\xC1\x82\xBD)
*/
unsigned int CP932ToUTF32(unsigned short cp932)
@@ -161,30 +161,33 @@
/**
* code page \x82\xCC mulit byte \x95\xB6\x8E\x9A\x82\xF0 UTF-32\x82֕ϊ\xB7\x82\xB7\x82\xE9
- * @param KCode \x83}\x83\x8B\x83`\x83o\x83C\x83g\x82̕\xB6\x8E\x9A\x83R\x81[\x83h(0x0000-0xffff)
- * @param CoePage \x83}\x83\x8B\x83`\x83o\x83C\x83g\x82̃R\x81[\x83h\x83y\x81[\x83W
- * @retval unicode(UTF-32\x95\xB6\x8E\x9A\x83R\x81[\x83h)
+ * @param mb_code \x83}\x83\x8B\x83`\x83o\x83C\x83g\x82̕\xB6\x8E\x9A\x83R\x81[\x83h(0x0000-0xffff)
+ * @param code_page \x83}\x83\x8B\x83`\x83o\x83C\x83g\x82̃R\x81[\x83h\x83y\x81[\x83W
+ * @retval unicode(UTF-32\x95\xB6\x8E\x9A\x83R\x81[\x83h)
*/
-unsigned int MBCPToUTF32(unsigned short KCode, int CodePage)
+unsigned int MBCP_UTF32(unsigned short mb_code, int code_page)
{
unsigned int c;
- if (CodePage == 932) {
- c = CP932ToUTF32(KCode);
+ if (code_page == CP_ACP) {
+ code_page = (int)GetACP();
+ }
+ if (code_page == 932) {
+ c = CP932ToUTF32(mb_code);
} else {
- char buf[3];
+ char buf[2];
wchar_t wchar;
int ret;
int len = 0;
- if (KCode < 0x100) {
- buf[0] = KCode & 0xff;
+ if (mb_code < 0x100) {
+ buf[0] = mb_code & 0xff;
len = 1;
} else {
- buf[0] = KCode >> 8;
- buf[1] = KCode & 0xff;
+ buf[0] = mb_code >> 8;
+ buf[1] = mb_code & 0xff;
len = 2;
}
- ret = MultiByteToWideChar(CodePage, MB_ERR_INVALID_CHARS, buf, len, &wchar, 1);
+ ret = MultiByteToWideChar(code_page, MB_ERR_INVALID_CHARS, buf, len, &wchar, 1);
if (ret <= 0) {
c = 0;
} else {
@@ -386,6 +389,51 @@
}
/**
+ * \x83}\x83\x8B\x83`\x83o\x83C\x83g\x95\xB6\x8E\x9A(code_page) \x82\xA9\x82\xE7unicode(UTF-32)\x82\xF01\x95\xB6\x8E\x9A\x8E\xE6\x82\xE8\x8Fo\x82\xB7
+ * @retval 0 \x95\xB6\x8E\x9A\x82Ƃ\xB5\x82Ĉ\xB5\x82\xA6\x82Ȃ\xA2(\x95\xB6\x8E\x9A\x83R\x81[\x83h\x82\xAA\x82\xA8\x82\xA9\x82\xB5\x82\xA2)
+ * @retval 1 1\x83L\x83\x83\x83\x89\x83N\x83^\x82\xC51\x95\xB6\x8E\x9A\x82Ƃ\xB5\x82Ĉ\xB5\x82\xA6\x82\xE9
+ * @retval 2 2\x83L\x83\x83\x83\x89\x83N\x83^\x82\xC51\x95\xB6\x8E\x9A\x82Ƃ\xB5\x82Ĉ\xB5\x82\xA6\x82\xE9
+ */
+size_t MBCPToUTF32(const char *mb_ptr, size_t mb_len, int code_page, unsigned int *u32)
+{
+ size_t input_len;
+ wchar_t u16_str[2];
+ size_t u16_len;
+
+ assert(mb_ptr != NULL);
+ if (mb_len == 0) {
+ *u32 = 0;
+ return 0;
+ }
+ if (code_page == CP_ACP) {
+ code_page = (int)GetACP();
+ }
+
+ input_len = 1;
+ while(1) {
+ u16_len = ::MultiByteToWideChar(code_page, MB_ERR_INVALID_CHARS,
+ mb_ptr, (int)input_len,
+ u16_str, 2);
+ if (u16_len != 0) {
+ size_t r = UTF16ToUTF32(u16_str, u16_len, u32);
+ assert(r != 0);
+ if (r == 0) {
+ // \x82Ȃ\xA2\x82͂\xB8
+ return 0;
+ } else {
+ return input_len;
+ }
+ }
+
+ input_len++;
+ if (input_len > mb_len) {
+ *u32 = 0;
+ return 0;
+ }
+ }
+}
+
+/**
* UTF-32\x95\xB6\x8E\x9A \x82\xA9\x82\xE7 UTF-8 \x82֕ϊ\xB7\x82\xB7\x82\xE9
* @param[in] u32 \x95ϊ\xB7\x82\xB7\x82\xE9UTF-32
* @param[in,out] u8_ptr \x95ϊ\xB7\x8C\xE3UTF-8\x95\xB6\x8E\x9A\x97\xF1\x8Fo\x97͐\xE6(NULL\x82̂Ƃ\xAB\x8Fo\x97͂\xB5\x82Ȃ\xA2)
@@ -397,7 +445,7 @@
{
size_t out_len = 0;
uint8_t *u8_ptr = (uint8_t *)u8_ptr_;
- if (u8_ptr != NULL) {
+ if (u8_ptr == NULL) {
u8_len = 4;
}
Modified: trunk/teraterm/common/codeconv.h
===================================================================
--- trunk/teraterm/common/codeconv.h 2019-03-09 17:33:16 UTC (rev 7465)
+++ trunk/teraterm/common/codeconv.h 2019-03-09 17:33:27 UTC (rev 7466)
@@ -34,16 +34,17 @@
extern "C" {
#endif
-
// simple code convert
unsigned int CP932ToUTF32(unsigned short cp932);
unsigned short UTF32ToDecSp(unsigned int u32);
-unsigned int MBCPToUTF32(unsigned short KCode, int CodePage);
+unsigned int MBCP_UTF32(unsigned short mb_code, int code_page);
unsigned short UTF32_CP932(unsigned int u32);
// 1char ToUTF32
size_t UTF8ToUTF32(const char *u8_ptr_, size_t u8_len, unsigned int *u32_);
size_t UTF16ToUTF32(const wchar_t *wstr_ptr, size_t wstr_len, unsigned int *u32);
+size_t MBCPToUTF32(const char *mb_ptr, size_t mb_len, int code_page, unsigned int *u32);
+
// 1char UTF32To
size_t UTF32ToUTF16(unsigned int u32, wchar_t *wstr_ptr, size_t wstr_len);
size_t UTF32ToUTF8(unsigned int u32, char *u8_ptr, size_t u8_len);
Modified: trunk/teraterm/ttpcmn/ttcmn.c
===================================================================
--- trunk/teraterm/ttpcmn/ttcmn.c 2019-03-09 17:33:16 UTC (rev 7465)
+++ trunk/teraterm/ttpcmn/ttcmn.c 2019-03-09 17:33:27 UTC (rev 7466)
@@ -1589,7 +1589,7 @@
unsigned int code;
int outlen;
- code = MBCPToUTF32(K, CodePage);
+ code = MBCP_UTF32(K, CodePage);
if (code == 0) {
// \x95ϊ\xB7\x8E\xB8\x94s
code = 0xfffd; // U+FFFD: Replacement Character
From scmnotify @ osdn.net Sun Mar 10 02:33:37 2019
From: scmnotify @ osdn.net (scmnotify @ osdn.net)
Date: Sun, 10 Mar 2019 02:33:37 +0900
Subject: [Ttssh2-commit] =?utf-8?b?Wzc0NjddIFZTMjAwNeODl+ODreOCuOOCpw==?=
=?utf-8?b?44Kv44OI44OV44Kh44Kk44Or5L+d5a6I?=
Message-ID: <1552152817.989407.91769.nullmailer@users.osdn.me>
Revision: 7467
http://sourceforge.jp/projects/ttssh2/scm/svn/commits/7467
Author: zmatsuo
Date: 2019-03-10 02:33:37 +0900 (Sun, 10 Mar 2019)
Log Message:
-----------
VS2005プロジェクトファイル保守
Modified Paths:
--------------
trunk/teraterm/teraterm/ttermpro.vcproj
-------------- next part --------------
Modified: trunk/teraterm/teraterm/ttermpro.vcproj
===================================================================
--- trunk/teraterm/teraterm/ttermpro.vcproj 2019-03-09 17:33:27 UTC (rev 7466)
+++ trunk/teraterm/teraterm/ttermpro.vcproj 2019-03-09 17:33:37 UTC (rev 7467)
@@ -397,6 +397,10 @@
RelativePath="..\common\dllutil.cpp"
>
+
+
Revision: 7468
http://sourceforge.jp/projects/ttssh2/scm/svn/commits/7468
Author: zmatsuo
Date: 2019-03-10 23:32:02 +0900 (Sun, 10 Mar 2019)
Log Message:
-----------
Merge branch 'trunk' into cmake
# Conflicts:
# installer/release/lang/Japanese.lng
# teraterm/teraterm/addsetting.cpp
# teraterm/teraterm/vtwin.cpp
# teraterm/teraterm/vtwin.h
# teraterm/ttpdlg/ttdlg.c
# teraterm/ttpdlg/ttpdlg.rc
# ttssh2/ttxssh/ttxssh.c
Modified Paths:
--------------
branches/cmake/doc/en/html/about/copyright.html
branches/cmake/doc/en/html/about/history.html
branches/cmake/doc/en/html/index.html
branches/cmake/doc/en/html/macro/syntax/index.html
branches/cmake/doc/en/html/menu/setup-additional.html
branches/cmake/doc/en/html/menu/setup-sshkeygenerator.html
branches/cmake/doc/en/html/menu/setup-terminal_ja.html
branches/cmake/doc/en/html/menu/setup-terminal_ko.html
branches/cmake/doc/en/html/menu/setup-terminal_utf8.html
branches/cmake/doc/en/html/reference/develop.txt
branches/cmake/doc/en/html/setup/teraterm-ini.html
branches/cmake/doc/en/html/usage/mouse.html
branches/cmake/doc/en/teraterm.hhc
branches/cmake/doc/en/teraterm.hhp
branches/cmake/doc/ja/html/about/copyright.html
branches/cmake/doc/ja/html/about/history.html
branches/cmake/doc/ja/html/index.html
branches/cmake/doc/ja/html/macro/syntax/index.html
branches/cmake/doc/ja/html/menu/setup-additional.html
branches/cmake/doc/ja/html/menu/setup-sshkeygenerator.html
branches/cmake/doc/ja/html/menu/setup-terminal.html
branches/cmake/doc/ja/html/menu/setup-terminal_ko.html
branches/cmake/doc/ja/html/menu/setup-terminal_utf8.html
branches/cmake/doc/ja/html/reference/develop.txt
branches/cmake/doc/ja/html/setup/teraterm-ini.html
branches/cmake/doc/ja/html/usage/mouse.html
branches/cmake/doc/ja/html/usage/unicode.html
branches/cmake/doc/ja/teraterm.hhc
branches/cmake/doc/ja/teraterm.hhp
branches/cmake/installer/release/TERATERM.INI
branches/cmake/installer/release/lang/English.lng
branches/cmake/installer/release/lang/French.lng
branches/cmake/installer/release/lang/German.lng
branches/cmake/installer/release/lang/Japanese.lng
branches/cmake/installer/release/lang/Korean.lng
branches/cmake/installer/release/lang/Russian.lng
branches/cmake/installer/release/lang/Simplified Chinese.lng
branches/cmake/installer/release/lang/Traditional Chinese.lng
branches/cmake/installer/release/license.txt
branches/cmake/installer/teraterm.iss
branches/cmake/teraterm/common/helpid.h
branches/cmake/teraterm/common/tt-version.h
branches/cmake/teraterm/common/ttlib.h
branches/cmake/teraterm/keycode/keycode-version.rc
branches/cmake/teraterm/teraterm/tt-version.rc
branches/cmake/teraterm/teraterm/ttermpro.rc
branches/cmake/teraterm/teraterm/ttime.c
branches/cmake/teraterm/teraterm/vtdisp.c
branches/cmake/teraterm/teraterm/vtdisp.h
branches/cmake/teraterm/teraterm/vtterm.c
branches/cmake/teraterm/teraterm/vtwin.cpp
branches/cmake/teraterm/teraterm/vtwin.h
branches/cmake/teraterm/ttpcmn/ttpcmn-version.rc
branches/cmake/teraterm/ttpdlg/dlg_res.h
branches/cmake/teraterm/ttpdlg/ttdlg.c
branches/cmake/teraterm/ttpdlg/ttpdlg-version.rc
branches/cmake/teraterm/ttpdlg/ttpdlg.rc
branches/cmake/teraterm/ttpfile/ttpfile-version.rc
branches/cmake/teraterm/ttpmacro/ttm-version.rc
branches/cmake/teraterm/ttpmacro/ttpmacro.v10.vcxproj
branches/cmake/teraterm/ttpmacro/ttpmacro.v11.vcxproj
branches/cmake/teraterm/ttpmacro/ttpmacro.v9.vcproj
branches/cmake/teraterm/ttpmacro/ttpmacro.vcproj
branches/cmake/teraterm/ttpset/ttpset-version.rc
branches/cmake/teraterm/ttpset/ttset.c
branches/cmake/teraterm/ttptek/ttptek-version.rc
branches/cmake/ttssh2/ttxssh/ssh.c
branches/cmake/ttssh2/ttxssh/ttxssh-version.h
branches/cmake/ttssh2/ttxssh/ttxssh-version.rc
branches/cmake/ttssh2/ttxssh/ttxssh.c
branches/cmake/ttssh2/ttxssh/ttxssh.h
branches/cmake/ttssh2/ttxssh/ttxssh.rc
Added Paths:
-----------
branches/cmake/doc/en/html/macro/syntax/file.html
branches/cmake/doc/ja/html/macro/syntax/file.html
-------------- next part --------------
Modified: branches/cmake/doc/en/html/about/copyright.html
===================================================================
--- branches/cmake/doc/en/html/about/copyright.html 2019-03-09 17:33:37 UTC (rev 7467)
+++ branches/cmake/doc/en/html/about/copyright.html 2019-03-10 14:32:02 UTC (rev 7468)
@@ -41,7 +41,7 @@
License
Copyright (C) 1994-1998 T. Teranishi
-(C) 2004-2018 TeraTerm Project
+(C) 2004-2019 TeraTerm Project
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
@@ -128,7 +128,7 @@
License
(C)1998-2001 Robert O'Callahan
-(C) 2004-2018 TeraTerm Project
+(C) 2004-2019 TeraTerm Project
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
Modified: branches/cmake/doc/en/html/about/history.html
===================================================================
--- branches/cmake/doc/en/html/about/history.html 2019-03-09 17:33:37 UTC (rev 7467)
+++ branches/cmake/doc/en/html/about/history.html 2019-03-10 14:32:02 UTC (rev 7468)
@@ -31,23 +31,40 @@
Tera Term
-2019.xx.xx (Ver 4.102)
+2019.xx.xx (Ver 4.103)
-
+
+ Bug fixes
+
+ When the AlphaBlend window is enabled, an application fault occurs on Windows 10.
+
+
+
Misc
upgraded TTSSH to 2.88 .
+ upgraded Oniguruma to 6.9.1.
@@ -3084,13 +3101,35 @@
TTSSH
-2019.xx.xx (Ver 2.88)
+2019.xx.xx (Ver 2.89)
+ Bug fixes
+
+ garbage data is added to the CipherOrder and MacOrder settings when saving settings.
+
+
+
+
+2019.02.28 (Ver 2.88)
+
Changes
+
+ Bug fixes
+
+ Can't change password on SSH Change Password dialog when old password is empty string.
+
+
+
+ Misc
+
+ upgraded OpenSSL to 1.0.2r.
+
+
2018.11.30 (Ver 2.87)
Modified: branches/cmake/doc/en/html/index.html
===================================================================
--- branches/cmake/doc/en/html/index.html 2019-03-09 17:33:37 UTC (rev 7467)
+++ branches/cmake/doc/en/html/index.html 2019-03-10 14:32:02 UTC (rev 7468)
@@ -13,7 +13,7 @@
Copyright (C) 1994-1998 T. Teranishi
-(C) 2004-2018 TeraTerm Project
+(C) 2004-2019 TeraTerm Project
All Rights Reserved.
Added: branches/cmake/doc/en/html/macro/syntax/file.html
===================================================================
--- branches/cmake/doc/en/html/macro/syntax/file.html (rev 0)
+++ branches/cmake/doc/en/html/macro/syntax/file.html 2019-03-10 14:32:02 UTC (rev 7468)
@@ -0,0 +1,82 @@
+
+
+
+
+TTL file
+
+
+
+
+
+Encoding
+
+
+The Unicode (UTF-8, UTF-16BE, UTF-16LE) can be supported from Tera Term 4.102.
+
+
+
+The TTL file was processed as ANSI CodePage in previous version.
+
+
+Supporting encoding
+
+
+
+ encoding
+ support
+
+
+ Usually (ANSI CodePage)
+ Support
+
+
+ UTF-8 (with BOM)
+ Support
+
+
+ UTF-8 (without BOM)
+ Support
+
+
+ UTF-16BE (without BOM)
+ Not support
+
+
+ UTF-16LE (without BOM)
+ Not support
+
+
+ UTF-16 (with BE BOM)
+ Support
+
+
+ UTF-16 (with LE BOM)
+ Support
+
+
+ UTF-16 (without BOM = UTF-16BE)
+ Not support
+
+
+
+Encoding determination
+
+
+Tera Term determines the encoding as follows.
+
+
+
+ When BOM exists
+ Tera Term determines one of UTF-8, UTF-16BE and UTF-16LE from BOM type, next reading the file.
+
+ When BOM does not exist
+
+
+ Reading the file as UTF-8.
+ Reading the file as CP_ACP (same as before 4.102) when the file can not be decoded as UTF-8.
+
+
+
+
+
Modified: branches/cmake/doc/en/html/macro/syntax/index.html
===================================================================
--- branches/cmake/doc/en/html/macro/syntax/index.html 2019-03-09 17:33:37 UTC (rev 7467)
+++ branches/cmake/doc/en/html/macro/syntax/index.html 2019-03-10 14:32:02 UTC (rev 7468)
@@ -16,6 +16,7 @@
+ TTL file
Types
Formats of constants
Identifiers and reserved words
Modified: branches/cmake/doc/en/html/menu/setup-additional.html
===================================================================
--- branches/cmake/doc/en/html/menu/setup-additional.html 2019-03-09 17:33:37 UTC (rev 7467)
+++ branches/cmake/doc/en/html/menu/setup-additional.html 2019-03-10 14:32:02 UTC (rev 7468)
@@ -258,10 +258,11 @@
"Visual" tab
- AlphaBlend
+ Window Transparency / Active
+ Window Transparency / Inactive
- You can setup the value of transparency. The range of transparency
- is from 0 to 255. The more transparency reduces the value, the more
+ You can set up the value of transparency when the window is active (on focus) and not active (non-focus).
+ The range of transparency is from 0 to 255. The more transparency reduces the value, the more
window transparency is blinding.
Modified: branches/cmake/doc/en/html/menu/setup-sshkeygenerator.html
===================================================================
--- branches/cmake/doc/en/html/menu/setup-sshkeygenerator.html 2019-03-09 17:33:37 UTC (rev 7467)
+++ branches/cmake/doc/en/html/menu/setup-sshkeygenerator.html 2019-03-10 14:32:02 UTC (rev 7468)
@@ -18,55 +18,55 @@
- Key type
+ Key type
Specify the type of key to generate.
- RSA1
+ RSA1
Generate SSH1 RSA key.
- RSA
+ RSA
Generate SSH2 RSA key.
- DSA
+ DSA
Generate SSH2 DSA key.
The DSA key does not have 1024 bits is invalid, so the key can not be generated because the key will not be used for some servers.
If the key bits is over 1024, the security level can not be stronger. Please use the RSA and ECDSA key algorithm if your security level is higher.
- ECDSA-256
+ ECDSA-256
Generate SSH2 ECDSA(256bit) key.
- ECDSA-384
+ ECDSA-384
Generate SSH2 ECDSA(384bit) key.
- ECDSA-521
+ ECDSA-521
Generate SSH2 ECDSA(521bit) key.
- ED25519
+ ED25519
Generate SSH2 ED25519 key.
- Key Bits
+ Key Bits
Specify the key length to generate.
- bcrypt KDF
+ bcrypt KDF
Specify the bcrypt KDF format of the private key.
- Generate
+ Generate
Generate the key.
- Key passphrase
+ Key passphrase
Specify passphrase of private key.
- Confirm passphrase
+ Confirm passphrase
Confirm passphrase of private key.
Please input the same passphrase as Key passphrase.
- Save public key
+ Save public key
Save public key.
- Save private key
+ Save private key
Save private key
The private key is encrypted by the AES-128 algorithm.
The key is encrypted by the 3DES into the Tera Term 4.76(TTSSH 2.63) before.
Modified: branches/cmake/doc/en/html/menu/setup-terminal_ja.html
===================================================================
--- branches/cmake/doc/en/html/menu/setup-terminal_ja.html 2019-03-09 17:33:37 UTC (rev 7467)
+++ branches/cmake/doc/en/html/menu/setup-terminal_ja.html 2019-03-10 14:32:02 UTC (rev 7468)
@@ -159,11 +159,6 @@
Refer to Unicode for details.
- CodePage
-
- Codepage setting.
- Refer to Unicode for details.
-