Aoi32(0, 0, 5, 3/Osaki #56) -読み込んだファイルの改行コードをエディットコントロールへの表示用に変換する.

ファイルを開いた時、改行コードをラジオボタンに反映できたが、エディットコントロールに表示した時に、ファイルの改行コードがそのまま表示されてしまっている。
エディットコントロール上では、UnicodeのCRLFで表示しなければならないので、これに変換する必要がある。

cpp_string_utility.hに、

tstringのマクロと、replaceメンバ関数を追加。
cpp_string_utility.cppでは、

replaceメンバ関数の定義を書く。
TextFile.hは、

ConvertNewLineを追加。
TextFile.cppは、

改行コードを変換するConvertNewLineの定義を書き、

CheckNewLineの後に、m_NewLineに改行コードが指定されていれば、ConvertNewLineで指定された改行コードから、CRLFに変換する。
これで、エディットコントロールで改行がおかしなことにはならない。

起動時の文字コード
起動時の文字コード

起動時の文字コードShift_JISで、

起動時の改行コード
起動時の改行コード

起動時の改行コードはCRLF。

開く
開く

[開く]で、

CR
CR

改行コードがCRのファイルを開く。

ちゃんと改行されてる
ちゃんと改行されてる

ちゃんと改行されてる。
エディットコントロール上では、CRLFに変換しているため。

LF
LF

改行コードがLFのファイルを開いても、

ちゃんと改行されてる
ちゃんと改行されてる

ちゃんと改行されてる。

CRLF
CRLF

改行コードがCRLFの場合は、

そのまま
そのまま

そのまま表示できる。

-読み込んだファイルの改行コードをエディットコントロールへの表示用に変換する. · bg1bgst333/Aoi32@5517832 · GitHub

Aoi32(0, 0, 5, 2/Osaki #55) -テキストファイルを開いた時に改行コードをラジオボタンに反映させる.

ファイルを開いたら、そのファイルの改行コードの種類を、メニューの改行コードのラジオボタンに反映させる。

TextFile.hに、

CheckNewLineを追加。
TextFile.cppで、

CheckNewLineの定義。これはObjeqtNote32から持ってきた。

CheckBomと、文字コードのデコードの後に、CheckNewLineを呼び、その後にTRUEを返すように変更。
MainWindow.cppは、

文字コードラジオボタン処理の後に、改行コードのラジオボタン処理をする。

改行コードの違うファイル3つ
改行コードの違うファイル3つ

改行コードの違うファイル3つを用意。
最初に起動したときは、

Shift_JIS
Shift_JIS

Shift_JISの、

CRLF
CRLF

CRLFにしてる。

開く
開く

開くを選択して、

LF
LF

改行コードがLFのファイルを選択すると、

改行コードLF
改行コードLF

こうなり、

ラジオボタンLF
ラジオボタンLF

ラジオボタンはLFになっている。

CR
CR

改行コードがCRのファイルを選択すると、

改行コードCR
改行コードCR

こうなり、

ラジオボタンCR
ラジオボタンCR

ラジオボタンはCR。

CRLF
CRLF

改行コードがCRLFのファイルを選択すると、

改行コードCRLF
改行コードCRLF

こうなり、

ラジオボタンCRLF
ラジオボタンCRLF

ラジオボタンはCRLF。

-テキストファイルを開いた時に改行コードをラジオボタンに反映させる. · bg1bgst333/Aoi32@9837802 · GitHub

Aoi32(0, 0, 5, 1/Osaki #54) -起動時デフォルトの改行コードのラジオボタンはCRLFにセット.

Aoi32の開発を再開。
随分前にいじっていたので、すっかり忘れてしまっているけれども。

ObjeqtNote32とAoi32を比較すると、ObjeqtNote32は改行コードの切り替えができるのに対して、Aoi32はまだ出来てない。
なので、ひとまず最初の課題は改行コード切り替え対応。

前回のコミットまでで改行コードのメニューアイテムを追加したとこまではやっている模様。
今回は、起動時デフォルトで、メニューのラジオボタンがCRLFにセットされている状態にする。

まず、TextFile.hで、

列挙型TAG_NEW_LINEと、NEW_LINEメンバオブジェクトm_NewLineを追加。
TextFile.cppは、

コンストラクタで、m_NewLineをNEW_LINE_NONEで初期化。
MainWindow.cppでは、

OnCreateで、デフォルトはm_pTextFile->m_NewLineをNEW_LINE_CRLFにし、ラジオボタンもID_LINE_CRLFにする。
実行すると、

デフォルトはCRLF
デフォルトはCRLF

デフォルトの改行コードはCRLFとなる。

-起動時デフォルトの改行コードのラジオボタンはCRLFにセット. · bg1bgst333/Aoi32@3975408 · GitHub

AppCompatActivity

新カテゴリ、もう一つ・・・。
Xamarin(Xamarin.Android)をやる。

ダウンロード | IDE、Code、Team Foundation Server | Visual Studio

VisualStudioをダウンロード。

.NETモバイル
.NETモバイル

.NETモバイルの方にチェックを付けてインストール。
(ユニバーサルWindowsと間違えたので、やり直し。)

新規作成
新規作成

メニューから新規作成。

Androidアプリ(Xamarin)
Androidアプリ(Xamarin)

[Androidアプリ(Xamarin)]を選ぶ。

空のアプリ
空のアプリ

空のアプリで、Android5.0をMinumumに。

AppCompatActivity
AppCompatActivity

デフォルトでAppCompatActivityになるので、今回はAppCompatActivity。

MainActivity.csは、

こうで、activity_main.axmlは、

RelativeLayoutの中身は空。

ビルド
ビルド

ビルドすると、

できるのはDLL
できるのはDLL

できるのはDLLだけ。

エミュレータ起動
エミュレータ起動

Debugはこのままエミュレータ起動で、

起動
起動

こうやってAndroidが立ち上がり、

アプリも起動
アプリも起動

アプリも起動する。

Releaseは配置エラー
Releaseは配置エラー

Releaseは配置エラーになってしまう。

Visual Studio Emulator for Android
Visual Studio Emulator for Android

なんかおかしいなともう一度チェックしてたら、Visual Studio Emulator for Androidが入ってなかったので、入れてみる。(Android Studioエミュレータ(?)でDebugは動いたのに・・・。)

ハイパーバイザー
ハイパーバイザー

ハイパーバイザーというので、

ON
ON

ONにし、再起動が必要なので再起動。

プラットフォームツール
プラットフォームツール

今度はプラットフォームツール更新を要求されたので、

AndroidSDKとツール
AndroidSDKとツール

更新を押し、

インストール
インストール

インストール。

それでも、

Releaseはダメ
Releaseはダメ

Releaseはダメ・・・。

エミュレータはあきらめた。
考えてみれば、ビルドエラーではなく配置エラーなので、ReleaseフォルダにACA.ACA-Signed.apkがあった。
ReleaseのACA.ACA.apkは、実機にインストールできるが、起動してすぐ停止となった。
ReleaseのACA.ACA-Signed.apkは、実機にインストール成功し、

起動成功
起動成功

起動成功した。

一方、Debugは、ACA.ACA.apk、ACA.ACA-Signed.apk、ともにファイルが破損していると出た。

AppCompatActivityについては、Androidカテゴリでもやるので、そこで・・・。

Activity Class - Xamarin

というか、XamarinってSupport系のAPIのリファレンスが見当たらない・・・。どういうこと・・・。

Sample/xamarin/AppCompatActivity/ACA at master · bg1bgst333/Sample · GitHub

main

Rustが新カテゴリのラストと言ったが、あれはウソだ・・・。
というわけで、Kotlinをやる。

JavaプログラマのためのKotlin入門 - Qiita
Kotlinとは――読み方、メリット、「Java」とのコード比較、実行までのチュートリアル (1/3):Android Studioで始めるKotlin入門(1) - @IT
Release 1.3.11 · JetBrains/kotlin · GitHub

Androidプロジェクトでも出来るが、main関数はコマンドラインじゃないと出来ないので、コマンドラインでまずはやる。

当初、

experimental-kotlin-compiler-windows-x64.zip

こちらをダウンロードして、

環境変数
環境変数

こんな感じでパスを通したが、コンパイルすると、

C:\Project\Cloud\github.com\Sample\kotlin\main\main\src\main>kotlinc-jvm main.kt -include-runtime -d main.jar
WARN: Failed to load filesystem access layer: Windows 10, 1.8.0_181, nio2=true
java.lang.reflect.InvocationTargetException
        at com.intellij.openapi.util.io.FileSystemUtil$Nio2MediatorImpl.getAttributes(Unknown Source)
        at com.intellij.openapi.util.io.FileSystemUtil.check(Unknown Source)
        at com.intellij.openapi.util.io.FileSystemUtil.getMediator(Unknown Source)
        at com.intellij.openapi.util.io.FileSystemUtil.<clinit>(Unknown Source)
        at com.intellij.openapi.util.io.FileSystemUtil.getAttributes(Unknown Source)
        at com.intellij.openapi.vfs.impl.ZipHandler.setFileAttributes(Unknown Source)
        at com.intellij.openapi.vfs.impl.ZipHandler$1.createAccessor(Unknown Source)
        at com.intellij.openapi.vfs.impl.ZipHandler$1.createAccessor(Unknown Source)
        at com.intellij.util.io.FileAccessorCache.createHandle(Unknown Source)
        at com.intellij.util.io.FileAccessorCache.get(Unknown Source)
        at com.intellij.openapi.vfs.impl.ZipHandler.getCachedZipFileHandle(Unknown Source)
        at com.intellij.openapi.vfs.impl.ZipHandler.acquireZipHandle(Unknown Source)
        at com.intellij.openapi.vfs.impl.ZipHandlerBase.createEntriesMap(Unknown Source)
        at com.intellij.openapi.vfs.impl.ArchiveHandler.getEntriesMap(Unknown Source)
        at com.intellij.openapi.vfs.impl.jar.CoreJarHandler.<init>(Unknown Source)
        at com.intellij.openapi.vfs.impl.jar.CoreJarFileSystem.lambda$new$0(Unknown Source)
        at com.intellij.openapi.vfs.impl.jar.CoreJarFileSystem$$Lambda$52.fun(Unknown Source)
        at com.intellij.util.containers.ConcurrentFactoryMap$3.create(Unknown Source)
        at com.intellij.util.containers.ConcurrentFactoryMap.get(Unknown Source)
        at com.intellij.openapi.vfs.impl.jar.CoreJarFileSystem.findFileByPath(Unknown Source)
        at org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment.findJarRoot(Unknown Source)
        at org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment.contentRootToVirtualFile(Unknown Source)
        at org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment.access$contentRootToVirtualFile(Unknown Source)
        at org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment$6.invoke(Unknown Source)
        at org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment$6.invoke(Unknown Source)
        at org.jetbrains.kotlin.cli.jvm.compiler.ClasspathRootsResolver.convertClasspathRoots(Unknown Source)
        at org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment.<init>(Unknown Source)
        at org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment.<unknown>(Unknown Source)
        at org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment$Companion.createForProduction(Unknown Source)
        at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.createCoreEnvironment(Unknown Source)
        at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.doExecute(Unknown Source)
        at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.doExecute(Unknown Source)
        at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(Unknown Source)
        at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(Unknown Source)
        at org.jetbrains.kotlin.cli.common.CLITool.exec(Unknown Source)
        at org.jetbrains.kotlin.cli.common.CLITool.exec(Unknown Source)
        at org.jetbrains.kotlin.cli.common.CLITool.exec(Unknown Source)
        at org.jetbrains.kotlin.cli.common.CLITool$Companion.doMainNoExit(Unknown Source)
        at org.jetbrains.kotlin.cli.common.CLITool$Companion.doMain(Unknown Source)
        at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler$Companion.main(Unknown Source)
        at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.main(Unknown Source)
Caused by: java.lang.ExceptionInInitializerError
        at sun.nio.fs.Util.split(Unknown Source)
        at sun.nio.fs.WindowsFileSystem.<init>(Unknown Source)
        at sun.nio.fs.WindowsFileSystemProvider.<init>(Unknown Source)
        at sun.reflect.NativeConstructorAccessorImpl.<unknown>(Unknown Source)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
        at java.lang.reflect.Constructor.newInstance(Unknown Source)
        at java.lang.Class.newInstance(Unknown Source)
        at sun.nio.fs.DefaultFileSystemProvider.<unknown>(Unknown Source)
        at java.nio.file.FileSystems$DefaultFileSystemHolder.getDefaultProvider(Unknown Source)
        at java.nio.file.FileSystems$DefaultFileSystemHolder.access$000(Unknown Source)
        at java.nio.file.FileSystems$DefaultFileSystemHolder$1.<unknown>(Unknown Source)
        at java.nio.file.FileSystems$DefaultFileSystemHolder$1.<unknown>(Unknown Source)
        at java.security.AccessController.<unknown>(Unknown Source)
        at java.nio.file.FileSystems$DefaultFileSystemHolder.defaultFileSystem(Unknown Source)
        at java.nio.file.FileSystems$DefaultFileSystemHolder.<clinit>(Unknown Source)
        at java.nio.file.FileSystems.getDefault(Unknown Source)
        at java.nio.file.Paths.get(Unknown Source)
        ... 41 more
Caused by: java.nio.charset.UnsupportedCharsetException: MS932
        at java.nio.charset.Charset.forName(Unknown Source)
        at sun.nio.fs.Util.<clinit>(Unknown Source)
        ... 59 more

C:\Project\Cloud\github.com\Sample\kotlin\main\main\src\main>

こうやってエラーが出てしまう。

kotlin-compiler-1.3.11.zip

こっちをダウンロードする。
Cドライブ直下に展開して、

環境変数
環境変数

パスを通す。
(それより前にJDK入れたりJAVA_HOME設定したりいろいろやったけど、不要だったかな・・・。)

main.ktに、

こんな風に書いて、

C:\Project\Cloud\github.com\Sample\kotlin\main\main\src\main>kotlinc main.kt -include-runtime -d main.jar
C:\Project\Cloud\github.com\Sample\kotlin\main\main\src\main>kotlin main.jar
ABCDE

C:\Project\Cloud\github.com\Sample\kotlin\main\main\src\main>

コンパイル、そして実行できた。
funの後に関数名、そして、引数をArrayにしているのはいいね。
そうMainClassが必要ない、そして、printlnもSystem.outが必要ない、こういうのが特徴。

Sample/kotlin/main/main/src/main at master · bg1bgst333/Sample · GitHub

main

この新年から始まった持ち回りシリーズ、最後の新カテゴリは、Rust。

Rust programming language

プログラミング言語Rustのススメ - Qiita
Install - Rust programming language

凄く簡単に導入できるということだが・・・。

まずダウンロードだが、

$ curl https://sh.rustup.rs -sSf | sh
info: downloading installer

Welcome to Rust!

This will download and install the official compiler for the Rust programming 
language, and its package manager, Cargo.

It will add the cargo, rustc, rustup and other commands to Cargo's bin 
directory, located at:

  /home/xxx/.cargo/bin

This path will then be added to your PATH environment variable by modifying the
profile files located at:

  /home/xxx/.profile
  /home/xxx/.bash_profile

You can uninstall at any time with rustup self uninstall and these changes will
be reverted.

Current installation options:

   default host triple: x86_64-unknown-linux-gnu
     default toolchain: stable
  modify PATH variable: yes

1) Proceed with installation (default)
2) Customize installation
3) Cancel installation
>1

info: syncing channel updates for 'stable-x86_64-unknown-linux-gnu'
info: latest update on 2019-01-17, rust version 1.32.0 (9fda7c223 2019-01-16)
info: downloading component 'rustc'
 79.5 MiB /  79.5 MiB (100 %)   2.5 MiB/s ETA:   0 s                
info: downloading component 'rust-std'
 54.3 MiB /  54.3 MiB (100 %)   2.3 MiB/s ETA:   0 s                
info: downloading component 'cargo'
  4.4 MiB /   4.4 MiB (100 %)   2.7 MiB/s ETA:   0 s                
info: downloading component 'rust-docs'
  8.5 MiB /   8.5 MiB (100 %)   2.3 MiB/s ETA:   0 s                
info: installing component 'rustc'
info: installing component 'rust-std'
info: installing component 'cargo'
info: installing component 'rust-docs'
info: default toolchain set to 'stable'

  stable installed - rustc 1.32.0 (9fda7c223 2019-01-16)


Rust is installed now. Great!

To get started you need Cargo's bin directory ($HOME/.cargo/bin) in your PATH 
environment variable. Next time you log in this will be done automatically.

To configure your current shell run source $HOME/.cargo/env
$

こうする。

で、Cargoを使うという意味でも、rustcを使うという意味でも、

$ source $HOME/.cargo/env

これは一応やっといたほうがいいかな。(もしかしたらいらないかもだけど、確認の意味で。)

で、確かに、

$ cargo new main

このようにしてmainプロジェクトを作成し、

$ cargo run

でそのままビルドと実行をしてくれるが、".git"や".gitignore"がある辺り、レポジトリを作ってしまってるっぽい。
なので、

Rust触ってみたらかなり良かった話 | ブログ :: Web notes.log

ここではrustcコマンドでコンパイルし、実行するような流れとする。

$ vi main.rs

でmain.rsを開き、

と書く。

rust コーディングルール メモ - Qiita

今度はfnの後にmain()・・・。
インデントはスペース4つ・・・。
また違う・・・。

$ vi main.rs
$ cat main.rs 
fn main(){
    println!("ABCDE");
}
$ source $HOME/.cargo/env
$ rustc --version
rustc 1.32.0 (9fda7c223 2019-01-16)
$ rustc main.rs 
$ ls
main  main.rs
$ ./main 
ABCDE
$

sourceであったり、mainバイナリが出来てるかなど、ひととおり確認しつつ、ビルドから実行までを行い、"ABCDE"の出力を確認。
println!もこれまでにない書き方なので気になるが、その辺は後で・・・。

Sample/rust/main/main/src/main at master · bg1bgst333/Sample · GitHub

main

続いての新カテゴリは、Go。

The Go Programming Language

まず、ダウンロードだが、

Downloads - The Go Programming Language

から、

$ wget https://dl.google.com/go/go1.11.4.linux-amd64.tar.gz

ダウンロード。

$ tar vzfx go1.11.4.linux-amd64.tar.gz

で解凍したら、goフォルダが出来てるので、

$ sudo mv go /usr/local/

goフォルダを/usr/localへ移動。

$ export PATH=$PATH:/usr/local/go/bin

パスを通す。
パッケージマネージャとかインストーラLinux用にはなくて、アナログだけど、これはこれでわかりやすい・・・。

このプログラムのパッケージ名はmainとする。
fmtモジュールをインポート。
funcのあとにmain()が続くJavaScript形式。
ちなみにインデントはタブ(スペース8文字)らしい。

Goプログラミング言語のチュートリアル - golang.jp
他言語プログラマがgolangの基本を押さえる為のまとめ - Qiita

fmt.Printlnメソッドで"ABCDE"を出力。

$ vi main.go
$ cat main.go 
// パッケージ宣言
package main    // mainパッケージ

// モジュールのインポート
import "fmt"    // fmt

// main関数
func main(){    // funcの後ろに関数名main.
    fmt.Println("ABCDE")    // fmt.Printlnで"ABCDE"を出力.
}
$ go build main.go 
$ ls
main  main.go
$ ./main 
ABCDE
$

このようになる。

Sample/go/main/main/src/main at master · bg1bgst333/Sample · GitHub