---------- (2) パソコン教室 バビバ == BaBiBa == http://xaiax.at.infoseek.co.jp/scribble.html since 2007-09-03 ----------
| |
 |
(2) パソコン教室 バビバ == BaBiBa == |  ・・・・・・ |
| Welcome, Sorry this page is japanese only. |
| |
  |
資料 目次 ◆過去のページ |
|
| |
いらっしゃいませ。この教室は無料です。資格も取れませんし書かれていることに責任も持てません。皆様の判断でお楽しみください。
パソコン学習の指導が出来るような立場にない私ですが、私自身のパソコン学習の場として、このページを維持します。
文章に誤解があることも考えられますので参考の程度でご覧ください。独断的と思われる記述がありましたら、お許しください。
不愉快を感じた場合は、このページの存在を忘れてください。善し悪しは別として、何かを感じて頂ければ成功と考えています。
学習中の人間が教室とは、だいそれた試みですが、このページが共通の目的を持つ方々の役に立てば幸いとの気持ちで公開しています。
ご意見、ご感想は、こちらへ
|
▲■ 資料
● 漢字コード表 第一水準漢字・第二水準漢字・第三水準漢字・第四水準漢字
● 第一水準漢字 コード表 (教育漢字と常用漢字および、その他の漢字を色違いで分別します)
◆ JIS X 0208-1990 第一水準漢字と第二水準漢字で表現可能な異体字リスト
● JIS X 0212-1990 字形・字姿のページ JIS補助漢字 異体字リスト
● JIS X 0213-2004 字形・字姿のページ JIS拡張漢字 (第三第四水準)
● GT書体 一覧表 ( GT2000 フォント ) TRONで採用された東大明朝フォント (漢字数 約六万 全ての漢字を閲覧出来ます)
◆ -- ASCII -- コード表
◆ DoCoMo 絵文字コード表
◆ Windows絵文字コード表 (Webdings.ttf) 巨大で美しい Windowsの絵文字のデモはこちら
◆ Windows絵文字コード表 (Wingdings.ttf) Q33MNY
■ Windows絵文字コード表 (Symbol.ttf) 数学用フォントが豊富に存在しています。
◆ HTML色見本 一覧表 (モニターの輝度と配色の関係)
◆ HTMLテーブルコレクション
◆ 色定数 検査表 (xyzzy, doja, java)
◆ 平均12音階表 音階の仕組み ■
◆ マウスキー キーボードでマウス操作を行ないます。
◆ Windows トラブルシューティング
◆ Windows95の制限
■ Windows95で使用可能なアプリケーションの紹介 (祝)PPx Ver.1.00 、(祝)あふ Ver.1.00
◎ 諸橋・大漢和辞典 諸橋コード 字形・字姿のページ (漢字数 50,305 全ての漢字を閲覧出来ます) http://xaiax.ld.infoseek.co.jp/
◎ 京大・康煕辞典 康煕コード 字形・字姿のページ (漢字数 49,188 全ての漢字を閲覧出来ます) http://xaiax.ld.infoseek.co.jp/KOUKI/
◎ JIS X 0221-1995 ユニコード 字形・字姿のページ (漢字数 23,000 全ての漢字を閲覧出来ます) http://xaiax.ld.infoseek.co.jp/JISX0221/
● 日本語プログラミング言語『なでしこ』命令一覧表 Ver.1.50300-2008-05-29
● このページ(scribble.html)への検索キーワード 正しく渡っているか?確認してみましょう。
■ 諸々
■ 一言一行
■ 自己紹介
青色文字で書かれたリンクは、全て、このページ内での移動です。クリックすると該当項目へジャンプするだけです。他のサイトへ移動することはありません。
◆私の過去のページ scribble(1)へ移動します。 ●私が新規に作成したページへ移動します。 ▲目次へ移動します。 ■このページ内だけでの移動です。
|
◆●▲■ w3m対応用 ( w3mでは文字色付けは無視される為 )
▲■ 目次
2008-12-01 OpenOffice
2008-11-16 諸々 『なでしこ』二十四節気報告プログラム
2008-10-26 諸々 回文 怪文ではありません。回文です。
2008-10-22 Cygwin on Windows95_OSR2
2008-10-21 諸々 数学用語について
2008-10-21 諸々 文章題
2008-10-21 Linux SEDスクリプトの基礎 error: no such file or directory.
2008-10-13 Linux Bashスクリプトの基礎 ■Rxvtのメニューを有効にする方法
2008-10-06 (;_;) 右手親指を潰してしまいました。 痛い痛い痛い痛い痛い痛い痛い痛い痛い 〜 ・・・
2008-09-14 諸々 INDEX 問答無用
2008-09-14 UBASIC テキスト音楽 MML ■円周率を演奏する
2008-08-17 (紹介) Windowsファイラー『あふ』
2008-08-16 漢字かな混じり文を読上げる簡単な方法について
2008-08-15 BASICコンパイラ FreeBASIC Ver.0.20.0b(2008-08-10)で遊んでみる?
2008-08-12 DOSバッチファイルについて
2008-08-11 Java利用のノウハウ
2008-06-29 BASICコンパイラ FreeBASICのSOUND命令について
2008-06-22 (紹介) テキストエディタ Apsaly
2008-06-04 UBASIC 円周率の計算(モンテカルロ法) 乱数で円を描画します。
2008-06-02 BASICコンパイラ FreeBASIC Ver.0.18.5b(2008-04-18)で遊んでみる?
2008-06-01 UBASIC Memory allocation error Cannot start COMMAND, exiting
2008-05-12 テキストエディタ xyzzy で SKK を使う
2008-05-06 日本語プログラミング言語『なでしこ』 cnako.exe 利用例
2008-05-03 Linux コンソール環境について (3) FDclone かな漢字変換入力の機能 & 疑似端末の機能
2008-05-03 MSDOSプロンプト(Windows95)フルスクリーンの環境において、テキストエディタ JVim3.0-j2.1bで日本語入力を行なう。
2008-05-01 Linux (仮称)十進 BASIC Windows版をLinuxへ移植したものです。
2008-04-21 Linux コンソール環境について (2) skkfep & jvim-skk
2008-04-06 Windows95で使用可能なアプリケーションの紹介 (祝)PPx Ver.1.00
2008-02-23 情報漏洩について
2007-12-23 Linux コンソール環境について (1) FDclone & uum
2007-10-14 JISX0213:2004 準拠 IPAfont
2007-09-30 JavaScript Punycodeと日本語ドメイン名
2007-09-23 JavaScript JavaScriptで作成された Windowsアプリケーションの紹介
2007-09-16 JISX0213:2004 文字セットの仕様
2007-09-14 JavaScript document.body.appendChild の仕組みについて
2007-09-14 JavaScript 日付と時刻の出力フォーマットを変更するには?
2007-09-09 検索エンジン 検索キーワードの取扱いについて
2007-09-09 UBASIC グラフィックス -- 蠅 -- なんだか ・・・ ハエのようだ。 (^^;
2007-09-08 (紹介) JW_CAD(DOSV) 設計製図用ソフト
2007-09-03 地球の見えかた
2007-09-03 UBASIC テキスト音楽 MML 文字が音に変身する仕組みについて ・・・ ■Z-MUSIC ■MPL2MIDI
2007-09-03 Start scribble(2)
このページで、探している情報が見つからない場合は、私の過去のページ◆scribble(1)も見てください。
────────────────
0123456789ABCDEF
━━━━━━━━━━━━━━━━
▲■ Cygwin on Windows95_OSR2
Xwin Cygwin Ver.1.5.18-1 Bash 3.00.16(11) on Windows95_OSR2
TCM Cygwin Ver.1.5.18-1 Bash 3.00.16(11) on Windows95_OSR2
LessTif Cygwin Ver.1.5.18-1 Bash 3.00.16(11) on Windows95_OSR2
LessTif Cygwin Ver.1.5.18-1 Bash 3.00.16(11) on Windows95_OSR2
LessTif は Motif clone です。MWM(M*tif Window Manager) の上で有効です。
実行するには、充分なDOSコンベンショナルメモリーを必要とするようです。
▲■ SEDスクリプトの基礎
sed is a stream editor. "January 2005" sed version 4.1.3 cygwin
意外と、まだまだ現役だったりします。
行番号付加 SEDスクリプト
行番号付加ならば cat を使用して、次の様に簡単に行なえますが、ここは SEDスクリプトのテストということで ・・・
改行のみの行でも行番号を付加する
cat -n inFileName>outFileName
改行のみの行には行番号を付加しない
cat -b inFileName>outFileName
実行方法
sed -f NUMBER.SED inFileName>outFileName
NUMBER.SED 参考:http://www.gcd.org/sengoku/
-------------------------------------------
1 x
2 1s/.*/ /
3 H
4 y/ 0123456789/11234567890/
5 G
6 s/.*\([^0]0*\)\n\(.*\)\n\(.*\)[^9]9*$/\3\1 \2/
7 h
8 s/\( *[0-9]*\).*/\1/
9 /^9*$/s/^/ /
10 x
-------------------------------------------
スクリプトの説明
説明を読むための注意
line 1行目を読み込んだ時の実体を表現してます。
LINE 2行目を読み込んだ時の実体を表現してます。
1 パターンスペースの内容とホールドスペースの内容を交換します。
x
パターンスペース ""
ホールドスペース "line"
---------------------------- 2行目読み込み時
パターンスペース " 1"
ホールドスペース "LINE"
2 行番号の初期化です。行番号用に三桁確保します。
1s/.*/ / 1行目ならば、パターンスペースの行頭に半角空白を3文字、挿入します。/.*/ は、ゼロ個以上の任意文字ですから、行頭にマッチします。
パターンスペース " "
ホールドスペース "line"
3 パターンスペースの内容をセグメントとしてホールドスペースに追加します。
H
パターンスペース " "
ホールドスペース "line<CR> "
4 パターンスペースの各桁の数字を 1 増やします。
y/ 0123456789/11234567890/
パターンスペース "1 "
ホールドスペース "line<CR> "
5 ホールドスペースから、セグメントとしてパターンスペースへ追加します。
G
パターンスペース "1 <CR>line<CR> "
ホールドスペース "line<CR> "
6 パターンスペースから、有効な行番号を抽出します。
s/.*\([^0]0*\)\n\(.*\)\n\(.*\)[^9]9*$/\3\1 \2/
パターンスペース " 1 line"
ホールドスペース "line<CR> "
7 パターンスペースの内容をホールドスペースに、上書き保存します。
h
パターンスペース " 1 line"
ホールドスペース " 1 line"
8 置換命令で、パターンスペースの内容を行番号のみにします。
s/\( *[0-9]*\).*/\1/
パターンスペース " 1"
ホールドスペース " 1 line"
9 行番号が「999・・・」になったとき桁を一つ増やします。
/^9*$/s/^/ / パターンスペースの内容を見て、行頭に9が連続して存在するならば行頭に半角空白を1つ挿入します。
パターンスペース " 1"
ホールドスペース " 1 line"
10 パターンスペースの内容とホールドスペースの内容を交換します。
x
パターンスペース " 1 line"
ホールドスペース " 1"
スクリプトの終端では、まず、パターンスペースの内容を標準出力へ出力します。
そして、まだ、読み込み行が存在するならば、パターンスペースに読み込んだ後、1へ分岐します。
もし、読み込み行が無いならば、つまり、ファイル終端ならば、スクリプトの実行を終了します。
----------------------------------------------------
# (comments) Common Commands.
: (label) Programming Commands.
= (print line number) Other Commands.
a (append text lines) Other Commands.
b (branch) Programming Commands.
c (change to text lines) Other Commands.
D (delete first line) Other Commands.
d (delete) Common Commands.
e (evaluate) Extended Commands.
G (appending Get) Other Commands.
g (get) Other Commands.
H (append Hold) Other Commands.
h (hold) Other Commands.
i (insert text lines) Other Commands.
L (fLow paragraphs) Extended Commands.
l (list unambiguously) Other Commands.
N (append Next line) Other Commands.
n (next-line) Common Commands.
P (print first line) Other Commands.
p (print) Common Commands.
q (quit) Common Commands.
Q (silent Quit) Extended Commands.
r (read file) Other Commands.
R (read line) Extended Commands.
s command, option flags: The "s" Command.
T (test and branch if failed) Extended Commands.
t (test and branch if successful) Programming Commands.
v (version) Extended Commands.
w (write file) Other Commands.
W (write first line) Extended Commands.
x (eXchange) Other Commands.
y (transliterate) Other Commands.
{ } command grouping: Common Commands.
error: no such file or directory.
SEDソースに誤った改行コードが存在する場合、このエラーが生じます。
たとえば、CRLFをLFに修正すれば解決します。
nkf ならば、オプション -Lu でCRLFをLFに置換してくれます。
iconv には、改行コードを操作するオプションは無いようです。
kconv (FDClone内蔵コマンド)には、改行コードを操作するオプションは無いようです。
SED関連:回文 SEDを理解するポイントについて
▲■ Bashスクリプトの基礎
bash関連ファイル
/etc/bash.bashrc
/etc/profile
/etc/bashrc
~/.bashrc
~/.bash_profile
リダイレクト演算子について (あやふや)
<& および >&
これらのリダイレクト演算子は入出力ファイル・ディスクリプターの複製を定義するためのものです。
n1<&n2 n1入力をn2入力に切替える (n1を省略すると、標準入力を指定したものと見なされます)
例えば、0<&fileName ならば、標準入力をfileNameからの入力に切替えます。通常は、0 を省略して <&fileName と記述します。
n1>&n2 n1出力をn2出力に切替える (n1を省略すると、標準出力を指定したものと見なされます)
例えば、1>&fileName ならば、標準出力をfileNameへの出力に切替えます。 通常は、1 を省略して >&fileName と記述します。
<&0 標準入力を標準入力とします。つまり、変化なく同じということです。
>&1 標準出力を標準出力とします。つまり、変化なく同じということです。
2>&1 標準エラー出力を標準出力とします。
>&2 標準出力を標準エラー出力とします。
&> 標準出力と標準エラー出力の両方を標準出力への出力とします。
&>fileName 標準出力と標準エラー出力の両方を fileNameへの出力とします。
&< NOP
標準出力と標準エラー出力の両方をリダイレクトする方法には2つあります。
&>word
および
>&word
&>word は次のものと同じ意味です
>word 2>&1
>&word は次のものと同じ意味です
2>&1 >word
リダイレクトの順番には意味がある点に注意してください。例えば、次のコマンド
ls >dirlist 2>&1
は標準出力と標準エラー出力を両方ともファイル dirlist に書き込みますが、次のコマンド
ls 2>&1 >dirlist
では標準出力だけがファイル dirlist に書き込まれます。
なぜなら後者の場合には、標準エラー出力は dirlist にリダイレクトされる前の標準出力の複製となるからです。
# ---------------- start of ~/.bashrc ----------------
# ~/.bashrc は ログインシェルではない bash の起動時に毎回実行される
# ~/.bash_profile は ログインシェルで実行される。つまり、ユーザー毎に1回だけ実行されます
# XIM サーバーの名前を定義する (XIM は、language-env だけで使うシェル変数です)
XIM=kinput2
# X Window System 上で走ってるけど X Window System と通信する権限がないとき (su したときなど) への対策
if [ -n "$WINDOWID" -a -x /usr/bin/X11/xprop ] ; then
xprop -id $WINDOWID >& /dev/null || unset WINDOWID
fi
# WINDOWIDが定義済みで、かつ、/usr/bin/X11/xprop が実行可能ファイルとして存在するならば真となります。
# >& の意味は、xpropの実行結果であるところの標準出力を /dev/null に送ります。
if [ -n "$WINDOWID" -a -x /usr/bin/X11/xprop ] ; then
XPROP=`xprop -id $WINDOWID WM_CLASS`
# バッククォート内は実行文です
case $XPROP in
*kterm* | *krxvt* | *kwterm* | *katerm* ) LANG=ja_JP.eucJP ;;
*UXTerm* ) LANG=ja_JP.UTF-8 ;;
*hanterm* ) LANG=ko_KR.eucKR ;;
*caterm* | *crxvt-big5* ) LANG=zh_TW.Big5 ;;
*crxvt-gb* ) LANG=zh_CN.GB2312 ;;
*xterm* | *aterm* ) LANG=C ;;
* ) : ;;
# : は Bashの組み込みコマンドです。引数を展開しリダイレクトを行うだけで何も実行しません
esac
else
if [ "$TERM" = "linux" ] ; then
LANG=C
else
LANG=ja_JP.eucJP
fi
fi
case $LANG in
ja_JP.eucJP) JLESSCHARSET=japanese-euc ; LV=-Oej ;;
ja_JP.UTF-8) JLESSCHARSET=utf-8 ; LV=-Ou8 ;;
*) JLESSCHARSET=latin1 ; LV=-Al1 ;;
esac
export LANG JLESSCHARSET LV
if type lv &>/dev/null ; then
PAGER=lv
elif type jless &>/dev/null ; then
PAGER=jless
elif type less &>/dev/null ; then
PAGER=less
else
PAGER=more
fi
# &>/dev/null は、標準出力と標準エラー出力の両方を /dev/null へ出力します。
export PAGER
# add xaiax
export LESSOPEN='|~/lesspipe "%s"'
export VISUAL='jvim'
# XMODIFIERS を export しないのは、emacs が Segmentation Fault を起こすから
# ただし、この方法だと、Debian メニューシステムからの起動には対応できない。
alias xemacs='XMODIFIERS= xemacs'
# シングルクォート内は文字列定数です
function rxvt {
if /usr/bin/which krxvt &> /dev/null
then
krxvt $*
else
/usr/bin/rxvt-xpm $*
fi
}
# $* すべての 引数 ${*}と記述してもよい
# $@ すべての"引数" ${@}と記述してもよい
# .bash_profile で再度実行されないようにする
BASHRC_DONE=1
# xaiax re-read /etc/bash.bashrc
[ -f /etc/profile ] && . /etc/profile
# add xaiax
PS1="\u@\h[\[\e[33;40;1m\!\e[0m\]]\w\\$ "
# ---------------- end of ~/.bashrc ----------------
Rxvt-xpm Menu on Knoppix3.3-RELEASE:2004-02-16-BETA(2004-02-20JP)
FDCloneと共に利用する場合は注意が必要です。Rxvtのメニューのアクションは、FDCloneに横取りされてしまいます。
この問題は、FDCloneの hコマンドでシェルプロンプトを起してから Rxvtのメニューを操作するようにすると上手く行きます。
Rxvt Menu のセットアップ
/usr/share/doc/rxvt-beta/examples/rxvt.menu.gz を解凍します。
解凍された rxvt.menu を rxvt に改名して、ホームディレクトリに置きます。
Rxvtを起動してから次の様に実行するとメニューが有効に成ります。
$ echo -e -n "\e]10;[read:rxvt]\a"
Rxvtの起動オプションでメニューを有効にすることも可能です。このほうが簡単かもしれません。
メニューが存在するディレクトリをカレントにします。その後、次の様に実行するとメニューが有効に成ります。
~$ rxvt-xpm -menu rxvt
▲■ Windowsファイラー『あふ』の紹介
『あふ』Migemo使用中の図 (Migemoは日本語ファイル名のみならず、アルファベットも検索出来ます)
『あふ』作者のキーボードは 106 ではないようだ。 http://www.h5.dion.ne.jp/~akt/
ファイラーモードで有効なキー (\はバックスラッシュです。\は\です)
----------------------------
z 設定プログラムの起動
. アイコン表示とテキスト表示の切替
> サムネイル表示とテキスト表示の切替。SHIFT+. です。
c Copy
m Move
r Rename and attribute(property)
o 他のウィンドウとonajiにする。小文字の o です。
O 他のウィンドウをアクティブウィンドウとOnajiにする。大文字の O です。つまり、SHIFT+o です。
f ファイルのインクリメンタルサーチ。小文字の f です。
F ファイル検索ダイアログを呼出す。大文字の F です。つまり、SHIFT+f です。
h フォルダー履歴を参照する
j 参照フォルダーへ移動する
\ コンテキストメニュー (エクスプローラの右クリックメニュー)
SHIFT+\ 右D&Dシミュレーション (エクスプローラの右ドロップメニュー)
CTRL+ENTER エクスプローラで実行
TAB 窓切替え(反対窓をアクティブにする)
END アクティブ窓側の情報更新(再読込み)
・・・ 後は自分で調べましょう。
画像ビューアーモードで有効なキー
--------------------------------
HOME 画像サイズをそのまま表示するモードに変更
END 画像サイズを全体を見る事の出来る大きさに縮小するモードに変更
SHIFT+END 画像サイズを画面サイズに合わせるモードに変更
・・・ 後は自分で調べましょう。
テキストビューアーモードで有効なキー
------------------------------------
TAB テキスト・バイナリダンプ表示の切替
f 検索
SPACE 次検索
・・・ 後は自分で調べましょう。
afx.keyの記述例
┏━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━┓
┃afx.key ┃action (self-flattery)┃actionの説明 ┃
┣━━━━━━━━━━━━━━━━━━━╋━━━━━━━━━━━╋━━━━━━━━━━━━━━━━━━━━━┫
┃[KEYCUST] ┃ ┃ ┃
┃ON=1 ┃ ┃ ┃
┃[NORMAL] ┃ ┃ ┃
┃K0000="0078:0086" ┃ n → v ┃ nキーを押したら vキーと解釈する ┃
┃K0001="1078notepad "$P\$F"" ┃ Nnotepad "$P\$F" ┃ Shift+nで notepad を起動します ┃
┃K0002="0096:0074" ┃ 0 → j ┃ テンキーのゼロを押したら jキーと解釈する ┃
┃K0003="0065:0082" ┃ a → r ┃ aキーを押したら rキーと解釈する ┃
┃K0004="0186&MENU $V"afx"\MENU00.AFX" ┃ : → MENU ┃ :キーを押したらMENUを起動します ┃
┃K0005="0191:1190" ┃ / → > ┃ /キーを押したら >キーと解釈する ┃
┃K0006="1190:0191" ┃ > → / ┃ >キーを押したら /キーと解釈する ┃
┃[GVIEW] ┃ ┃ ┃
┃[TVIEW] ┃ ┃ ┃
┃K0000="0081:0013" ┃ q → ENTER ┃ qキーを押したら ENTERキーと解釈する ┃
┗━━━━━━━━━━━━━━━━━━━┻━━━━━━━━━━━┻━━━━━━━━━━━━━━━━━━━━━┛
actionの詳細
n → v
nキーを押したら vキーと解釈する。つまり、nキーでビューアーを起動します。
Nnotepad "$P\$F"
Shift+nで notepad を起動します。
0 → j
テンキーのゼロを押したら jキーと解釈する。つまり、テンキーのゼロでパスメニューを起動します。
a → r
aキーを押したら rキーと解釈する。つまり、aキーで Rename and attribute(property)
: → MENU
:キーを押したらMENUを起動します。実行メニューファイルは MENU00.AFX として『あふ』のディレクトリに用意しておく必要があります。
/ → >
/キーを押したら >キーと解釈する。つまり、/キーで サムネイル表示とテキスト表示の切替を行ないます。
> → /
>キーを押したら /キーと解釈する。つまり、>キーで DLL等のバージョン情報表示を行ないます。
q → ENT
qキーを押したら ENTERキーと解釈する。つまり、qキーで ビューアーを終了します。
MENU00.AFX
-----------------------------------
afx 実行メニュー
"notepadで編集" notepad.exe "$P\$F"
"再読込" &reload
-----------------------------------
migemoを利用するには、まず f でサーチダイアログを呼出します。
その後、通常は CTRL+s であるが、migemoを利用の場合は CTRL+m を入力します。
それぞれの窓に保有の、ステータスラインに Migemo: プロンプトが表示され migemo が有効になります。以後は f のみで migemoが起動するように成ります。
migemo(C/Migemo http://www.kaoriya.net/) は、予めインストールしておく必要が有ります。
『あふ』をプログラムランチャーとして使用するには?
カーソル位置にプログラムが存在するとき、他方の窓においてマークされたファイルを引数としてプログラムを実行します。
あふ設定 → プログラム → ファイルの実行コマンドライン
Xキーを次の様に定義します。
$P\$F $MO
チェックボックスを ON にしてこれを有効にする。
▲■ DOSバッチファイルについて
┏━━━━━━━━━━━━━━━━━━┓
┃パソコン教室バビバへの検索キーワード┃ に答えて ・・・
┗━━━━━━━━━━━━━━━━━━┛
まず、日付と時刻の取り扱いについて
command.com に備わっている date および time は読み出しタイプではなく書き込みタイプのコマンドです。
書き込みタイプのコマンドとは? 設定用のコマンドであるということです。つまり、日付や時刻を設定するためのコマンドなのです。
ゆえに、今日の日付と時刻を知りたいとして 『 command.com に備わっている date および time 』 を利用することは誤りです。
今日の日付と時刻を知るバッチファイルは簡単に作成できます。
バッチファイルの特質として ・・・ コマンドラインで有効なプログラムはバッチファイルに記述できます。
この特質を利用しましょう。つまり、今日の日付と時刻は、外部のプログラムを実行して取得するようにします。
下記のような出力結果を得る、DOSバッチファイルの例を示します。
2008-8-12(Tue) 21:57:28
葉月(はづき) 陰暦八月の異称。?
Press any key to continue . . .
|
REM -------------- ここから
@echo off
perl -e "($sec,$min,$hour,$mday,$mon,$year,$wday)=localtime time;$year+=1900;$mon++;$wday=substr('SunMonTueWedThuFriSat',$wday*3,3);print \"$year-$mon-$mday($wday) $hour:$min:$sec\n\n\";exit $mon;"
if errorlevel 12 goto ER_12
if errorlevel 11 goto ER_11
if errorlevel 10 goto ER_10
if errorlevel 9 goto ER_9
if errorlevel 8 goto ER_8
if errorlevel 7 goto ER_7
if errorlevel 6 goto ER_6
if errorlevel 5 goto ER_5
if errorlevel 4 goto ER_4
if errorlevel 3 goto ER_3
if errorlevel 2 goto ER_2
if errorlevel 1 goto ER_1
if errorlevel 0 goto OK_0
goto EXIT
:ER_1
echo 睦月(むつき) 陰暦正月の称。【襁褓】生まれたばかりの子どもに着せる衣。
goto EXIT
:ER_2
echo 如月(きさらぎ) 陰暦二月の称。【衣更着】寒さのため衣をさらに重ねて着る。
goto EXIT
:ER_3
echo 弥生(やよい) 陰暦三月の異称。いやおい(草木がいよいよ生え茂るさま)の変化語説。
goto EXIT
:ER_4
echo 卯月(うづき) 陰暦四月の異称。【空木】うつぎの花。初夏の代表的風物の一つ。
goto EXIT
:ER_5
echo 皐月(こうげつ・さつき) 陰暦五月の異称。さ月の接頭「さ」は神稲(しんとう)の意?
goto EXIT
:ER_6
echo 水無月(みなづき) 陰暦六月の異称。水の月(田に水を引く必要のある月)の意。
goto EXIT
:ER_7
echo 文月(ふみづき) 陰暦七月の異称。?
goto EXIT
:ER_8
echo 葉月(はづき) 陰暦八月の異称。?
goto EXIT
:ER_9
echo 長月(ながつき) 陰暦九月の異称。?
goto EXIT
:ER_10
echo 神無月(かんなづき) 陰暦十月の称。神の月(「な」は「の」の意で、神祭りの月の意?)
goto EXIT
:ER_11
echo 霜月(しもつき) 陰暦十一月の異称。?
goto EXIT
:ER_12
echo 師走(しわす) 陰暦十二月の異称。語源未詳。師が走るほどに忙しい月?
goto EXIT
:OK_0
echo OK !
goto EXIT
:EXIT
echo.
pause
REM -------------- ここまで (?の部分は貴方自身で調べてください)
バッチファイルの解説
外部のプログラムとしてパールを使用しています。
perlの換わりにmikoを使用する場合は、該当の部分を次のものと差替えてください。ただし、mikoはerrorlevelをセットしてくれません。
miko /! "::GetTime(Y'new!,M'new!,D'new!,W'new!,HH'new!,MM'new!,SS'new!);print Y:\"-\":M:\"-\":D:\"(\":\"SunMonTueWedThuFriSat\"'part(W*3,3):\") \":HH:\":\":MM:\":\":SS;return M;"
今日の日付と時刻の算出と画面への結果表示はパールが担当します。
パールは終了コードを errorlevel に返して終了します。
DOSバッチファイルは errorlevel を解釈して処理を振分けます。
perlスクリプトの説明
この、DOSバッチファイルではperlスクリプトをワンライナーとして実行させています。
DOSコマンドラインでは、長すぎるワンライナーはエラーに成りますが、バッチファイルに記述すれば実行可能になります。
ワンライナーの記述において、ダブルクォートの入れ子が生じる場合、内側のダブルクォートはエスケープする必要があります。
perlの場合、ダブルクォートの入れ子対策にはシングルクォートを併用するという手もあります。
perlはダブルクォートの中の変数やエスケープは評価する。
perlはシングルクォートの中の変数やエスケープは評価しない。文字列などは評価不要なのでこれを利用すると良い。
説明の為、このperlスクリプトを分解して見ることにしましょう。
# --------------------------------------------- ここから
($sec,$min,$hour,$mday,$mon,$year,$wday)=localtime time;
$year+=1900;
$mon++;
$wday=substr('SunMonTueWedThuFriSat',$wday*3,3); # シングルクォートで良い
print "$year-$mon-$mday($wday) $hour:$min:$sec\n\n"; # ダブルクォート必須
exit $mon;
# --------------------------------------------- ここまでを FileName として保存して call FileName としてワンライナーの代りとしても宜しい。
書式付きを利用する場合は、print文を次の様にします。%%はDOSコマンドラインの制限によるものです。
print sprintf("%%04d-%%02d-%%02d(%%s) %%02d:%%02d:%%02d\n\n",$year,$mon,$mday,$wday,$hour,$min,$sec);
perl localtimeの仕様
年 値域は 0〜20xx問題発生までです。1900年を基準としているため、加算1900を要します。
月 値域を 0〜11 としているため、加算1を要します。
日 値域は 1〜31 です。ゼロから始らないことに注目。
曜日 値域は 0〜6 です。日曜日はゼロに対応します。
時 値域は 0〜23 です。
分 値域は 0〜59 です。
秒 値域は 0〜59 です。
『要します』は、よけいな処理をプログラマに課していることに同じです。古い設計と言ってしまえば ・・・
Javaの時計周りの処理にも同様な問題を持ったクラスが存在しています。
素晴らしいのは、何も『要しません』の mikoスクリプトの GetTime や FreeBASICの Format関数 です。
perl substrの仕様
$wdayがゼロを持つときは日曜日(Sanday)です。
$wday*3はゼロです。substrのインデックスはゼロ番目から始ります。一番目では無いことに注意してください。
バッチファイル errorlevelの説明
これは難しいです。自分勝手に解釈すると失敗します。
今、errorlevelが値13を持って次の文に到達した時、どのようにブランチするか考えてみましょう。
if errorlevel 12 goto ER_12
素通りする。と考えるのが普通ではないでしょうか? しかし、それは誤りです。
if errorlevel >= 12 goto ER_12
これならばどうでしょう? ER_12 にブランチしますね。
つまり、隠された演算子 >= が存在します。このことについて考慮する必要があります。
errorlevel を取扱う場合は、最初に大きい値から捕まえてブランチさせることが必要です。
バッチファイル echoの説明
空行を出力するには?
echo
これでは、現在のエコー状態、例えば、『現在のエコーはオフです』などと報告する。ということに成ってしまいます。
空行を出力するには、ピリオドを命令の直後に置きます。
echo.
ピリオド自体を出力するには、当然ですが次の様にします。
echo .
非改行で echo を実行するには?
エスケープシーケンスを利用する? FB.BAT
バッチファイル pauseの説明
Press any key to continue . . .
以上
▲■ Java利用の know-how
携帯電話 i-appliエミュレータ (画像が縦長なので寝かせています)
"C:\Program Files\JavaSoft\JRE\1.3.1_18\bin\java.exe" -jar c:\i-jade\i-jade-n.jar C:\J2MEWSDK4DOJA\apps\Curve\bin\Curve.jam
IMF(Input Method Framework)
上の画像に注目してください。システムメニューの項目に [入力方式の切替え] が表示されています。
[入力方式の切替え]はJRE(Java Runtime Environment) Ver.1.3.1_18以降で有効です。
上の画像が示すとおり Windows JREでは、ウィンドウ上部の左隅にあるシステムメニュー(ALT+SPACE)から [入力方式の切替え] を選択出来ます。
IMF(Input Method Framework)はJavaでのみ有効な仕組みです。
同じ様な仕組みとして Microsoft Global IME というものが有ります。これは、アプリケーション(ブラウザやメーラーなど)に限定して利用可能なものです。
テキストエディタ xyzzy は Microsoft Global IME に対応しています。中国語・韓国語などの入力が可能です。
携帯電話 i-appliエミュレータ
----------------------------
リリース日 アプリケーション名 開発元 特徴
-------------------------------------------------------------------------------------
2000-12-16 ---- J2MEWSDK4DOJA ---- Sun Microsystems ---- KVM(携帯仮想マシン)
2001-09-26 ---- i-jade ---- Zentek Technology ---- JDK1.3を必要とします
2002-11-01 ---- iDKDoJa2.0 ---- NTT docomo ---- 503i用
2003-11-14 ---- iDKDoJa3.5 ---- NTT docomo ---- FOMA用
2008-08-11 ---- ? ---- ? ---- Windows95では利用出来ない。
jdk1.2は C:\WINDOWS\SYSTEMに java.exeをインストールします。
jdk1.3は C:\WINDOWS に java.exeをインストールします。
jdk1.2 も jdk1.3も 'Software\JavaSoft\Java Runtime Environment\CurrentVersion'をセットします。
C:\WINDOWS\java.exe よりも
C:\WINDOWS\SYSTEM\java.exe のほうが PATH設定において優先度が高い場合、こちらの java.exeが参照されます。
現状のPATH設定とjava.exeが存在する場所を確認しておくことが重要です。
ブラウザにおける plug-in 利用の問題点
ieではjvmが競合する為、Sun java-plugin-ControlPanelにて Sun Java plug-inを ieでは利用しないように設定します。
その他のブラウザ、Firefoxなどならば Sun Java plug-in が効きます。
JITコンパイラを有効にする。
Javaで書かれたプログラムは、バイトコード(拡張子 class) と呼ばれる中間言語に変換されます。
ゆえに、Java実行環境(JRE)さえ用意すればどのようなコンピュータ上でも実行できるという長所があります。
しかし、その一方で、バイトコードを実行するコンピュータ上でインタープリットするためのオーバヘッドが問題に成ります。
ジャストインタイムコンパイラ(Just-In-Time, JIT) は、プログラムの実行時にバイトコードを動的に機械語に変換(コンパイル)します。
このことによりプログラムが高速実行されるようになります。
Windows版の Java2SE Ver.1.2.2_017 には、Symantec JITコンパイラが含まれています。
RUN_JavaSound.BAT
--------------------------------------------------------------------------------
c:
cd C:\APPLI\WINDOWS\JAVA_BOX\MIX122
"C:\Program Files\JavaSoft\JRE\1.2\bin\java.exe" -verbose:jni -jar JavaSound.jar
--------------------------------------------------------------------------------
コマンドライン返り値を収集するには?
テキストエディタ xyzzy にて C-x & RUN_JavaSound.BAT
[Dynamic-linking native method java/lang/Object.registerNatives ... JNI]
[Registering JNI native method java/lang/Object.hashCode]
[Registering JNI native method java/lang/Object.wait]
[Registering JNI native method java/lang/Object.notify]
[Registering JNI native method java/lang/Object.notifyAll]
[Registering JNI native method java/lang/Object.clone]
[Dynamic-linking native method java/lang/Thread.registerNatives ... JNI]
[Registering JNI native method java/lang/Thread.start]
[Registering JNI native method java/lang/Thread.stop0]
[Registering JNI native method java/lang/Thread.isAlive]
[Registering JNI native method java/lang/Thread.suspend0]
[Registering JNI native method java/lang/Thread.resume0]
[Registering JNI native method java/lang/Thread.setPriority0]
[Registering JNI native method java/lang/Thread.yield]
[Registering JNI native method java/lang/Thread.sleep]
[Registering JNI native method java/lang/Thread.currentThread]
[Registering JNI native method java/lang/Thread.countStackFrames]
[Registering JNI native method java/lang/Thread.interrupt0]
[Registering JNI native method java/lang/Thread.isInterrupted]
[Dynamic-linking native method java/lang/Class.registerNatives ... JNI]
[Registering JNI native method java/lang/Class.getName]
[Registering JNI native method java/lang/Class.getSuperclass]
[Registering JNI native method java/lang/Class.getInterfaces]
[Registering JNI native method java/lang/Class.getClassLoader0]
[Registering JNI native method java/lang/Class.newInstance0]
[Registering JNI native method java/lang/Class.isInterface]
[Registering JNI native method java/lang/Class.getSigners]
[Registering JNI native method java/lang/Class.setSigners]
[Registering JNI native method java/lang/Class.isArray]
[Registering JNI native method java/lang/Class.isPrimitive]
[Registering JNI native method java/lang/Class.getComponentType]
[Registering JNI native method java/lang/Class.getModifiers]
[Registering JNI native method java/lang/Class.getFields0]
[Registering JNI native method java/lang/Class.getMethods0]
[Registering JNI native method java/lang/Class.getConstructors0]
[Registering JNI native method java/lang/Class.getField0]
[Registering JNI native method java/lang/Class.getMethod0]
[Registering JNI native method java/lang/Class.getConstructor0]
[Registering JNI native method java/lang/Class.getProtectionDomain0]
[Registering JNI native method java/lang/Class.setProtectionDomain0]
[Registering JNI native method java/lang/Class.getDeclaredClasses0]
[Registering JNI native method java/lang/Class.getDeclaringClass]
[Dynamic-linking native method java/lang/System.registerNatives ... JNI]
[Registering JNI native method java/lang/System.currentTimeMillis]
[Registering JNI native method java/lang/System.arraycopy]
[Dynamic-linking native method java/security/AccessController.getStackAccessControlContext ... JNI]
[Dynamic-linking native method java/security/AccessController.getInheritedAccessControlContext ... JNI]
[Dynamic-linking native method java/lang/System.initProperties ... JNI]
[Dynamic-linking native method java/lang/ClassLoader.getCallerClassLoader ... JNI]
[Dynamic-linking native method java/lang/Class.forName0 ... JNI]
[Dynamic-linking native method java/security/AccessController.doPrivileged ... JNI]
[Dynamic-linking native method java/lang/Class.getPrimitiveClass ... JNI]
[Dynamic-linking native method java/lang/String.intern ... JNI]
[Dynamic-linking native method java/io/FileInputStream.initIDs ... JNI]
[Dynamic-linking native method java/io/FileDescriptor.initIDs ... JNI]
[Dynamic-linking native method java/io/FileOutputStream.initIDs ... JNI]
[Dynamic-linking native method java/lang/System.setIn0 ... JNI]
[Dynamic-linking native method java/lang/System.setOut0 ... JNI]
[Dynamic-linking native method java/lang/System.setErr0 ... JNI]
[Dynamic-linking native method java/io/FileSystem.getFileSystem ... JNI]
[Dynamic-linking native method java/io/Win32FileSystem.initIDs ... JNI]
[Dynamic-linking native method java/security/AccessController.doPrivileged ... JNI]
[Dynamic-linking native method java/io/Win32FileSystem.list ... JNI]
[Dynamic-linking native method java/io/Win32FileSystem.canonicalize ... JNI]
[Dynamic-linking native method java/io/Win32FileSystem.getBooleanAttributes ... JNI]
[Dynamic-linking native method java/lang/Compiler.registerNatives ... JNI]
[Registering JNI native method java/lang/Compiler.initialize]
[Registering JNI native method java/lang/Compiler.compileClass]
[Registering JNI native method java/lang/Compiler.compileClasses]
[Registering JNI native method java/lang/Compiler.command]
[Registering JNI native method java/lang/Compiler.enable]
[Registering JNI native method java/lang/Compiler.disable]
[Dynamic-linking native method java/lang/System.getCallerClass ... JNI]
[Dynamic-linking native method java/lang/System.mapLibraryName ... JNI]
[Dynamic-linking native method java/lang/ClassLoader$NativeLibrary.load ... JNI]
[Loaded native library: C:\Program Files\JavaSoft\JRE\1.2\bin\symcjit.dll] ------------------------- JITコンパイラ
[Dynamic-linking native method java/lang/ClassLoader$NativeLibrary.find ... JNI]
[Dynamic-linking native method java/lang/ClassLoader.findLoadedClass ... JNI]
[Dynamic-linking native method java/lang/ClassLoader.findBootstrapClass ... JNI]
[Dynamic-linking native method SymantecJITCompilationThread.DoCompileMethod ... JNI]
[Loaded native library: C:\Program Files\JavaSoft\JRE\1.2\bin\zip.dll] -----------------------------
[Dynamic-linking native method java/util/zip/ZipFile.initIDs ... JNI]
[Dynamic-linking native method java/util/zip/ZipFile.open ... JNI]
[Dynamic-linking native method java/util/zip/ZipFile.getTotal ... JNI]
[Dynamic-linking native method java/util/zip/ZipFile.getEntry ... JNI]
[Dynamic-linking native method java/util/zip/ZipEntry.initIDs ... JNI]
[Dynamic-linking native method java/util/zip/ZipEntry.initFields ... JNI]
[Dynamic-linking native method java/util/zip/ZipFile.getCSize ... JNI]
[Dynamic-linking native method java/util/zip/ZipFile.getMethod ... JNI]
[Dynamic-linking native method java/util/zip/Inflater.initIDs ... JNI]
[Dynamic-linking native method java/util/zip/Inflater.init ... JNI]
[Dynamic-linking native method java/util/zip/Inflater.inflateBytes ... JNI]
[Dynamic-linking native method java/util/zip/ZipFile.read ... JNI]
[Dynamic-linking native method java/security/AccessController.doPrivileged ... JNI]
[Dynamic-linking native method java/util/jar/JarFile.getMetaInfEntryNames ... JNI]
[Dynamic-linking native method java/lang/Throwable.fillInStackTrace ... JNI]
[Dynamic-linking native method java/util/zip/Inflater.reset ... JNI]
[Dynamic-linking native method java/io/FileInputStream.open ... JNI]
[Dynamic-linking native method java/io/FileInputStream.readBytes ... JNI]
[Dynamic-linking native method java/io/FileInputStream.available ... JNI]
[Dynamic-linking native method java/io/FileInputStream.close ... JNI]
[Dynamic-linking native method java/lang/ClassLoader.defineClass0 ... JNI]
[Dynamic-linking native method java/util/ResourceBundle.getClassContext ... JNI]
[Dynamic-linking native method java/lang/Float.floatToIntBits ... JNI]
[Dynamic-linking native method java/lang/Double.longBitsToDouble ... JNI]
[Dynamic-linking native method java/lang/Double.doubleToLongBits ... JNI]
[Dynamic-linking native method java/security/AccessController.doPrivileged ... JNI]
[Loaded native library: C:\Program Files\JavaSoft\JRE\1.2\bin\awt.dll] -----------------------------
[Dynamic-linking native method java/awt/Toolkit.initIDs ... JNI]
[Dynamic-linking native method java/awt/Component.initIDs ... JNI]
[Dynamic-linking native method java/awt/Container.initIDs ... JNI]
[Dynamic-linking native method java/awt/Window.initIDs ... JNI]
[Dynamic-linking native method java/awt/Frame.initIDs ... JNI]
[Dynamic-linking native method java/awt/Cursor.initIDs ... JNI]
[Dynamic-linking native method java/io/Win32FileSystem.checkAccess ... JNI]
[Dynamic-linking native method java/awt/Rectangle.initIDs ... JNI]
[Dynamic-linking native method java/awt/Color.initIDs ... JNI]
[Dynamic-linking native method java/awt/Font.initIDs ... JNI]
[Dynamic-linking native method java/lang/Object.getClass ... JNI]
[Dynamic-linking native method java/lang/ref/Finalizer.invokeFinalizeMethod ... JNI]
[Loaded native library: C:\Program Files\JavaSoft\JRE\1.2\bin\fontmanager.dll] ---------------------
[Dynamic-linking native method sun/awt/font/NativeFontWrapper.getFontPath ... JNI]
[Dynamic-linking native method sun/awt/font/NativeFontWrapper.registerFonts ... JNI]
[Dynamic-linking native method sun/awt/font/NativeFontWrapper.registerCompositeFont ... JNI]
[Dynamic-linking native method sun/awt/font/NativeFontWrapper.initializeFont ... JNI]
[Dynamic-linking native method java/awt/Insets.initIDs ... JNI]
[Dynamic-linking native method java/awt/Dimension.initIDs ... JNI]
[Dynamic-linking native method java/awt/AWTEvent.initIDs ... JNI]
[Dynamic-linking native method java/awt/event/InputEvent.initIDs ... JNI]
[Dynamic-linking native method java/awt/event/KeyEvent.initIDs ... JNI]
[Dynamic-linking native method java/lang/reflect/Field.getInt ... JNI]
[Dynamic-linking native method sun/awt/windows/WToolkit.initIDs ... JNI]
[Dynamic-linking native method sun/awt/windows/WToolkit.init ... JNI]
[Dynamic-linking native method sun/awt/windows/WToolkit.eventLoop ... JNI]
[Dynamic-linking native method sun/awt/windows/WDropTargetContextPeer.Initialize ... JNI]
[Dynamic-linking native method sun/awt/windows/WDragSourceContextPeer.Initialize ... JNI]
[Dynamic-linking native method sun/awt/windows/WCustomCursor.initIDs ... JNI]
[Dynamic-linking native method sun/awt/windows/WObjectPeer.initIDs ... JNI]
[Dynamic-linking native method sun/awt/windows/WPanelPeer.initIDs ... JNI]
[Dynamic-linking native method sun/awt/windows/WFramePeer.create ... JNI]
[Dynamic-linking native method sun/awt/windows/WComponentPeer.setZOrderPosition ... JNI]
[Dynamic-linking native method sun/awt/windows/WWindowPeer.reshapeFrame ... JNI]
[Dynamic-linking native method sun/awt/windows/WComponentPeer.initCursor ... JNI]
[Dynamic-linking native method sun/awt/windows/WColor.getDefaultColor ... JNI]
[Dynamic-linking native method sun/awt/windows/WComponentPeer._setBackground ... JNI]
[Dynamic-linking native method sun/awt/windows/WComponentPeer._setForeground ... JNI]
[Dynamic-linking native method sun/awt/windows/WWindowPeer.updateInsets ... JNI]
[Dynamic-linking native method sun/awt/windows/WComponentPeer.setFont ... JNI]
[Dynamic-linking native method sun/awt/PlatformFont.initIDs ... JNI]
[Dynamic-linking native method sun/awt/windows/WDefaultFontCharset.initIDs ... JNI]
[Dynamic-linking native method sun/awt/FontDescriptor.initIDs ... JNI]
[Dynamic-linking native method sun/awt/windows/WWindowPeer._setTitle ... JNI]
[Dynamic-linking native method sun/awt/windows/WWindowPeer._setResizable ... JNI]
[Dynamic-linking native method sun/awt/windows/WComponentPeer.start ... JNI]
[Dynamic-linking native method sun/awt/windows/WCanvasPeer.create ... JNI]
[Dynamic-linking native method sun/awt/windows/WComponentPeer.show ... JNI]
[Dynamic-linking native method sun/awt/windows/WComponentPeer.reshape ... JNI]
[Dynamic-linking native method sun/awt/windows/WToolkit.makeColorModel ... JNI]
[Dynamic-linking native method java/awt/image/ColorModel.initIDs ... JNI]
[Dynamic-linking native method java/awt/image/IndexColorModel.initIDs ... JNI]
[Dynamic-linking native method java/awt/image/BufferedImage.initIDs ... JNI]
[Dynamic-linking native method java/awt/image/Raster.initIDs ... JNI]
[Dynamic-linking native method java/awt/image/SampleModel.initIDs ... JNI]
[Dynamic-linking native method java/awt/image/ComponentSampleModel.initIDs ... JNI]
[Dynamic-linking native method sun/awt/image/ByteComponentRaster.initIDs ... JNI]
[Dynamic-linking native method sun/java2d/loops/ImageData.initIDs ... JNI]
[Dynamic-linking native method sun/java2d/loops/ImageData.isAllOpaqueGrayICM ... JNI]
[Dynamic-linking native method sun/java2d/loops/RasterOutputManager.getPlatformFontVar ... JNI]
[Dynamic-linking native method java/lang/Math.sqrt ... JNI]
[Dynamic-linking native method java/lang/Package.getSystemPackage0 ... JNI]
[Dynamic-linking native method java/util/zip/CRC32.updateBytes ... JNI]
[Dynamic-linking native method sun/java2d/loops/ByteDiscreteRenderer.devSetRect ... JNI]
[Dynamic-linking native method sun/java2d/loops/ByteDiscreteRenderer.devDrawLine ... JNI]
[Dynamic-linking native method java/util/zip/Inflater.end ... JNI]
[Dynamic-linking native method java/lang/reflect/Method.invoke ... JNI]
[Dynamic-linking native method java/lang/Class.isInstance ... JNI]
[Dynamic-linking native method java/lang/reflect/Constructor.newInstance ... JNI]
[Loaded native library: C:\Program Files\JavaSoft\JRE\1.2\bin\audio.dll] --------------------------- audio.dllはjdk1.3には存在しない。
[Dynamic-linking native method sun/audio/HaeMixer.open ... JNI]
[Dynamic-linking native method sun/audio/HaeMixer.setSoundbank ... JNI]
[Dynamic-linking native method java/lang/Math.pow ... JNI]
[Dynamic-linking native method java/awt/AWTEvent.freeNativeData ... JNI]
[Dynamic-linking native method sun/awt/font/NativeFontWrapper.getFontMetrics ... JNI]
[Dynamic-linking native method java/awt/FontMetrics.initIDs ... JNI]
[Dynamic-linking native method sun/awt/font/NativeFontWrapper.getAdvance ... JNI]
[Dynamic-linking native method sun/awt/windows/WComponentPeer._beginValidate ... JNI]
[Dynamic-linking native method sun/awt/windows/WComponentPeer.endValidate ... JNI]
[Dynamic-linking native method sun/awt/windows/WInputMethod.createNativeContext ... JNI]
[Dynamic-linking native method sun/awt/windows/WInputMethod.getConversionStatus ... JNI]
[Dynamic-linking native method sun/awt/windows/WInputMethod.getOpenStatus ... JNI]
[Dynamic-linking native method sun/awt/windows/WInputMethod.setConversionStatus ... JNI]
[Dynamic-linking native method sun/awt/windows/WInputMethod.setOpenStatus ... JNI]
[Dynamic-linking native method sun/awt/windows/WComponentPeer.nativeHandleEvent ... JNI]
[Dynamic-linking native method sun/awt/windows/WActiveEvent.dispatchImpl ... JNI]
[Dynamic-linking native method sun/awt/windows/WWindowPeer.getContainerElement ... JNI]
[Dynamic-linking native method sun/awt/windows/WComponentPeer.pRequestFocus ... JNI]
[Dynamic-linking native method java/awt/AWTEvent.copyDataFieldInto ... JNI]
[Dynamic-linking native method sun/awt/windows/WInputMethod.enableNativeIME ... JNI]
[Dynamic-linking native method sun/awt/windows/WInputMethod.handleNativeIMEEvent ... JNI]
[Dynamic-linking native method sun/awt/windows/WGraphics.initIDs ... JNI]
[Dynamic-linking native method sun/awt/windows/WGraphics.createFromComponent ... JNI]
[Dynamic-linking native method sun/awt/windows/WGraphics.pSetForeground ... JNI]
[Dynamic-linking native method sun/awt/windows/WGraphics.pSetFont ... JNI]
[Dynamic-linking native method sun/awt/windows/WGraphics.createFromGraphics ... JNI]
[Dynamic-linking native method sun/awt/windows/WGraphics.disposeImpl ... JNI]
[Dynamic-linking native method sun/awt/windows/WToolkit.getScreenWidth ... JNI]
[Dynamic-linking native method sun/awt/windows/WToolkit.getScreenHeight ... JNI]
[Dynamic-linking native method sun/awt/font/NativeFontWrapper.drawStringByteDiscreteRaster ... JNI]
[Dynamic-linking native method sun/awt/windows/WGraphics.W32LockViewResources ... JNI]
[Dynamic-linking native method sun/awt/windows/WGraphics.W32UnLockViewResources ... JNI]
[Dynamic-linking native method sun/java2d/loops/GIFAcceleratorLoops.LUTcopyToIndexed ... JNI]
[Dynamic-linking native method sun/awt/windows/WGraphics.setOrigin ... JNI]
[Dynamic-linking native method sun/awt/windows/WGraphics.changeClip ... JNI]
[Dynamic-linking native method sun/awt/windows/WGraphics.devClearRect ... JNI]
[Dynamic-linking native method sun/java2d/loops/ByteDiscreteRenderer.devDrawRect ... JNI]
[Dynamic-linking native method java/lang/Runtime.exitInternal ... JNI]
プログラムの終了まで、こんなにも多くの参照が有るのです。
▲■ テキストエディタ Apsalyの紹介
Apsaly ver.2.70 (2008-11-06) マルチモニター対応(Windows2000以降が対象) NG Windows95 error USER32.DLL GetMonitorInfoA, MonitorFromWindow
Apsaly ver.2.70 はマルチモニターに対応したことで、Windows95では起動不能に成りました。
∩_∩
(´ー`)
( )
| | |
(___)__)
テキストエディタ Apsaly 慣用語句一覧(顔文字)から入力した、初代モナー (MS 明朝)
MikoScriptはテキストエディタ Apsaly http://www.venus.dti.ne.jp/mw31/apsaly/ で採用しているスクリプト言語です。
MikoScriptは簡単なツールの作成はもちろんのこと、本格的なオブジェクト指向プログラミングも手軽にできる、フリーのスクリプト言語です。
MikoScriptの詳細は http://www.venus.dti.ne.jp/mw31/miko/ に有ります。 コンソール版 MikoScript もダウンロード出来ます。
MikoScriptで記述されたアプリケーションの例としては、下記のものが秀逸です。
数独(すうどく) ナンバープレイス・パズルゲーム
MPL2MIDI 音楽演奏言語(MPL)で書かれたテキストファイルから、SMF(Standard MIDI File)形式のファイルを生成します。
コンソール版 MikoScriptの使用例 (ワンライナーの機能 : MikoScriptには、組み込み済み定数としての円周率は定義されていません)
miko /! "PI=3.1415926535897; print ::Math.sin(PI/6);"
MikoScriptはインタープリタであることを感じさせないほどに高速に動作します。(MikoScriptに比較すると「なでしこ」はバカ重です)
テキストエディタ Apsaly スクリプトのテスト
メニュー → ツール → スクリプトの実行 → 実行コマンド爛に下記内容を記述して実行ボタンを押す。
/! print ::Math.sin(3.14/6);
これで、sin 30度の値が求まります。円周率 3.14 では正しい値 0.5 には成りません。
MikoScript(ver.1.36 2008-04-22)の特徴
・インタプリタ方式の汎用プログラミング言語
・オブジェクト指向プログラミングをサポート
・クラス定義/インスタンス生成
・多重継承
・仮想メンバー、共有メンバー、固有メンバー
・オブジェクトのメンバー構成と継承関係は、動的に可変
・コンストラクタとデストラクタの自動実行
・制御構文( if文, while文, switch文等 )はC言語とほぼ同じ
・構造体が扱える(ビットフィールドも可)
・連想配列、リスト、双方向キュー等が組み込み(各要素のデータ構造は任意)
・通常の多次元データ配列も可(各要素のデータ型は同一)
・参照(リファレンス)が使える(ポインタは不可)
・各種の関数コール形式をサポート(標準型、リレー型、コマンド型、代入型)
・「箱」という概念で、変数、配列、関数、オブジェクト等を統一的に扱う
・マクロ(C言語の #define と #include 相当の機能)が使用可
・文字列リテラル内に、実行文やマクロを埋め込んだ記述が可能
・正規表現は、独自の拡張で、日本語のあいまい検索や、入れ子の検索も可
・各種の組み込み関数やクラスを装備
・テキスト処理
・ファイル操作/バッファ操作
・モジュール管理
・標準入出力/数学関数/その他
・識別名に日本語が使える
・例外処理機構あり
・演算子の多重定義可
・マルチスレッド(ノンプリエンプティブ)での実行可
・各データには入出力書式の指定が可
・バイナリーファイルでの構造体データの入出力も容易
・大抵のDLLは呼び出し可(DLLのコールバック関数も本言語で記述可)
・DLLの使用で、GUI、インターネット、マルチメディア等のプログラムも可
・ソースプログラムは中間コードに変換して実行
・中間コードのセーブ/ロード/ライブラリ化が可能
中間コード(拡張子.mcx)の利点
----------------------------
実行速度の高速化
翻訳時間の節約
中間コードのライブラリー化
次に、テキストエディタ Apsaly用の MikoScriptのサンプルとして、行番号の削除と付加を行なうスクリプトを下記に示します。
(処理対象のテキストは選択されている必要が有ります : 編集 → 全て選択 で良い)
// DL.MC
//
// DEL_LINE.MC
//
// 行番号削除.MC
//
// 'subst リレー型関数による正規表現置換で行番号を除去します。
// 反復 X{n,m} ---- n回以上 m 回以下の正規表現 X に一致
//
'AddScope( ::Apsaly ); //現関数のローカルスコープ内に、::Apsaly オブジェクト内のスコープを追加します。
switch( GetSelType() ) //選択されているテキストのタイプを検査します。
{
case 1:
case 2: eol = ""; break;
case 3: eol = "\r\n"; break;
default: return;
}
text = "";
( MinLi, MaxLi ) = GetSelRange( 0 );
i = 1;
for( Li = MinLi ; Li <= MaxLi ; Li++ )
text += GetSelText( Li )'subst( "^[ 0-9]{1,6}", "" ) + eol;
SetSelText( text );
// ここまで
// AL.MC
//
// ADD_LINE.MC
//
// 行番号付加.MC
//
// 'fmt リレー型関数によるフォーマット(10進数5桁)で行番号を生成します。
// 行番号は10番から始まり10増加で割り付けます。
//
'AddScope( ::Apsaly ); //現関数のローカルスコープ内に、::Apsaly オブジェクト内のスコープを追加します。
switch( GetSelType() ) //選択されているテキストのタイプを検査します。
{
case 1:
case 2: eol = ""; break;
case 3: eol = "\r\n"; break;
default: return;
}
text = "";
( MinLi, MaxLi ) = GetSelRange( 0 );
i = 1;
for( Li = MinLi ; Li <= MaxLi ; Li++ )
text += "%5d "'fmt( 10 * i++ ) + GetSelText( Li ) + eol;
SetSelText( text );
// EOFのみの行にも行番号が付加されてしまうので以降の処理で、これを削除します。
if(GetSelText( Li )'kn < 7)
{
MoveTo( Li'LineNo, 1'Column );
Delete( 'LineLim );
}
// ここまで
テキストエディタ Apsalyには日付と時刻の挿入を行なう機能は既に実装済みですが、スクリプト記述の例として
2008/06/22(Sun) 17:44:29 今月は30日が最終日です。
と出力するスクリプトを下記に示します。
// DATE.MC
//
// 本日の日付けと時刻および今月の最終日を表示します。
//
// 組み込み関数 GetTime の利用方法
// 書式: ::GetTime( 年, 月, 日, 曜, 時, 分, 秒, 千分秒 )
//
// print文の使用方法
// コロン(:)でprint要素の継続。非改行はマイナス記号(-)で指示する。
::GetTime(Y'new!, M'new!, D'new!, W'new!, HH'new!, MM'new!, SS'new!);
print "%04d"'fmt(Y) : "/" : "%02d"'fmt(M) : "/" : "%02d"'fmt(D) : "(" : "SunMonTueWedThuFriSat"'part(W*3,3) : ") " : -;
print "%02d"'fmt(HH) : ":" : "%02d"'fmt(MM) : ":" : "%02d "'fmt(SS) : -;
print "今月は" : DaysPerMonth(Y, M) : "日が最終日です。";
function DaysPerMonth( year, month )
{
switch( month )
{
case 2:
return (( year % 4 == 0 && year % 100 != 0 ) || ( year % 400 == 0 )) ? 29 : 28;
case 4, 6, 9, 11:
return 30;
case 1, 3, 5, 7, 8, 10, 12:
return 31;
}
}
// ここまで
// DATE_W.MC
//
// 本日の日付けと時刻および今月の最終日を Windowsメッセージボックスで表示します。
//
// 組み込み関数 GetTime の利用方法
// 書式: ::GetTime( 年, 月, 日, 曜, 時, 分, 秒, 千分秒 )
//
// Windowsメッセージボックス Inform の利用方法
::GetTime(Y'new!, M'new!, D'new!, W'new!, HH'new!, MM'new!, SS'new!);
::Inform(
"%04d"'fmt(Y) + "/" + "%02d"'fmt(M) + "/" + "%02d"'fmt(D) + "(" + "SunMonTueWedThuFriSat"'part(W*3,3) + ") "
"%02d"'fmt(HH) + ":" + "%02d"'fmt(MM) + ":" + "%02d "'fmt(SS) + "最終日[" + DaysPerMonth(Y, M)'d + "]"
);
function DaysPerMonth( year, month )
{
switch( month )
{
case 2:
return (( year % 4 == 0 && year % 100 != 0 ) || ( year % 400 == 0 )) ? 29 : 28;
case 4, 6, 9, 11:
return 30;
case 1, 3, 5, 7, 8, 10, 12:
return 31;
}
}
// ここまで
MikoScriptで Windowsアプリケーションを作成する。
・大抵のDLLは呼び出し可(DLLのコールバック関数も本言語で記述可)
・DLLの使用で、GUI、インターネット、マルチメディア等のプログラムも可
MikoScriptの特徴として紹介した上記内容についての例を下記に示します。
//---------------------------------------------------------------------------------------
// HelloWin.mc
//
// ウィンドウを表示してその中央に "Hello, MikoScript!" と描画する Windows GUI プログラム
// (参考) Charles Petzold 著 Programming Windows
// (参考) \apsaly\Scripts\Samples\HelloWin.mc
//---------------------------------------------------------------------------------------
#set NULL 0
#set CS_VREDRAW 0x0001
#set CS_HREDRAW 0x0002
#set IDI_APPLICATION 0x7F00
#set IDC_ARROW 0x7F00
#set WHITE_BRUSH 0
#set SW_SHOWNORMAL 1
#set WS_OVERLAPPED 0x00000000
#set WS_CAPTION 0x00C00000
#set WS_SYSMENU 0x00080000
#set WS_THICKFRAME 0x00040000
#set WS_MINIMIZEBOX 0x00020000
#set WS_MAXIMIZEBOX 0x00010000
#set WS_OVERLAPPEDWINDOW #WS_CAPTION | #WS_SYSMENU | #WS_THICKFRAME | #WS_MINIMIZEBOX | #WS_MAXIMIZEBOX
#set CW_USEDEFAULT 0x80000000
^Kernel32 = ::DLL.Link( "KERNEL32" );
^User32 = ::DLL.Link( "USER32" );
^Gdi32 = ::DLL.Link( "GDI32" );
^RegisterClassEx = ^User32.GetEntry( "RegisterClassExA" );
^CreateWindowEx = ^User32.GetEntry( "CreateWindowExA" );
^ShowWindow = ^User32.GetEntry( "ShowWindow" );
^UpdateWindow = ^User32.GetEntry( "UpdateWindow" );
^GetMessage = ^User32.GetEntry( "GetMessageA" );
^TranslateMessage = ^User32.GetEntry( "TranslateMessage" );
^DispatchMessage = ^User32.GetEntry( "DispatchMessageA" );
^BeginPaint = ^User32.GetEntry( "BeginPaint" );
^GetClientRect = ^User32.GetEntry( "GetClientRect" );
^DrawText = ^User32.GetEntry( "DrawTextA" );
^EndPaint = ^User32.GetEntry( "EndPaint" );
^PostQuitMessage = ^User32.GetEntry( "PostQuitMessage" );
^DefWindowProc = ^User32.GetEntry( "DefWindowProcA" );
^LoadIcon = ^User32.GetEntry( "LoadIconA" );
^LoadCursor = ^User32.GetEntry( "LoadCursorA" );
^SetForegroundWindow = ^User32.GetEntry( "SetForegroundWindow" );
^GetStockObject = ^Gdi32.GetEntry( "GetStockObject" );
^GetModuleHandle = ^Kernel32.GetEntry( "GetModuleHandleA" );
::DLL.SetCallback( ^WndProc );
hInstance = ^GetModuleHandle( 0 );
lpClassName = "HelloWindow";
lpWindowTitle = "HelloWin";
POINT ::=
{
.x 'LONG;
.y 'LONG;
}
RECT ::=
{
.left 'LONG;
.top 'LONG;
.right 'LONG;
.bottom 'LONG;
}
MSG ::=
{
.hwnd 'ULONG;
.message 'ULONG;
.wParam 'ULONG;
.lParam 'ULONG;
.time 'ULONG;
.pt = POINT;
}
WNDCLASSEX ::=
{
.cbSize 'ULONG;
.style 'ULONG = #CS_HREDRAW | #CS_VREDRAW;
.lpfnWndProc 'ULONG = WndProc'addr;
.cbClsExtra 'LONG = 0;
.cbWndExtra 'LONG = 0;
.hInstance 'ULONG = hInstance;
.hIcon 'ULONG = ^LoadIcon( 0, #IDI_APPLICATION );
.hCursor 'ULONG = ^LoadCursor( 0, #IDC_ARROW );
.hbrBackground 'ULONG = ^GetStockObject( #WHITE_BRUSH );;
.lpszMenuName 'ULONG = 0;
.lpszClassName 'ULONG = lpClassName'addr;
.hIconSm 'ULONG = ^LoadIcon( 0, #IDI_APPLICATION );
}
WNDCLASSEX.cbSize = WNDCLASSEX'size;
PAINTSTRUCT ::=
{
.hdc 'ULONG;
.fErase 'LONG;
.rcPaint = RECT;
.fRestore 'LONG;
.fIncUpdate 'LONG;
.rgbReserved 'C(32);
}
msg = ::Buffer( MSG'size );
^ps = ::Buffer( PAINTSTRUCT'size );
^rect = ::Buffer( RECT'size );
wndclass = ::Buffer( WNDCLASSEX'size );
wndclass.Write( WNDCLASSEX );
wndclass.Seek(0);
if( ^RegisterClassEx( wndclass ) == 0 )
{
print "ウィンドウクラスの登録失敗!";
goto FIN;
}
hWnd = ^CreateWindowEx(
0, // extended window style
lpClassName, // registered window class name
lpWindowTitle, // window title name
#WS_OVERLAPPEDWINDOW, // window style
#CW_USEDEFAULT, // horizontal position of window
#CW_USEDEFAULT, // vertical position of window
#CW_USEDEFAULT, // window width
#CW_USEDEFAULT, // window height
#NULL, // handle to parent or owner window
#NULL, // handle to menu, or child-window identifier
hInstance, // handle to application instance
#NULL // pointer to window-creation data
);
if( hWnd == 0 )
{
print "ウィンドウの作成失敗!";
goto FIN;
}
^SetForegroundWindow( hWnd );
^ShowWindow( hWnd, #SW_SHOWNORMAL );
^UpdateWindow( hWnd );
while( ^GetMessage( msg, #NULL, 0, 0 ))
{
^TranslateMessage( msg );
^DispatchMessage( msg );
}
FIN:
::DLL.ResetCallback( WndProc );
delete ^Kernel32;
delete ^User32;
delete ^Gdi32;
return;
//-----------------------------------------------------------------------------
// Callback関数の記述
#set WM_CREATE 0x0001
#set WM_DESTROY 0x0002
#set WM_PAINT 0x000F
#set DT_CENTER 0x00000001
#set DT_VCENTER 0x00000004
#set DT_SINGLELINE 0x00000020
function ^WndProc( hWnd, uMsg, wParam, lParam )
{
switch( uMsg )
{
case #WM_CREATE :
return 0;
case #WM_PAINT :
hDC = ^BeginPaint( hWnd, ^ps );
^GetClientRect( hWnd, ^rect );
^DrawText( hDC, "Hello, MikoScript!", -1, ^rect, #DT_SINGLELINE | #DT_CENTER | #DT_VCENTER );
^EndPaint( hWnd, ^ps );
return 0;
case #WM_DESTROY :
^PostQuitMessage(0);
return 0;
}
return ^DefWindowProc( hWnd, uMsg, wParam, lParam );
}
//----------------------------------------------------------------------------- ここまで
Apsaly(ver.2.70 2008-11-06)
マルチモニター対応(Windows2000以降が対象)
NG Windows95 error USER32.DLL GetMonitorInfoA, MonitorFromWindow
Apsaly ver.2.70 はマルチモニターに対応したことで、Windows95では起動不能に成りました。
Apsaly(ver.2.60 2008-08-01)
着色関連を追加 (256色環境では原色のみ有効です。ハーフトーンの色は選択しないこと)
不具合改修:
Alt+マウスドラッグで、矩形選択ができなくなっていたのを改修
正規表現の 反復パターン が、X*Y{n} のような場合、検出ミスがあったのを改修
正規表現の 特別パターン #:{}:、#:():、#:[]: を、C 言語系に限定して、検索対象の括弧の囲い内に、
その囲い文字を含むコメントや文字列リテラルがある場合でも、入れ子構造を正確に扱えるように改修
Apsaly(ver.2.50 2008-06-15)
「読み上げ」および「聞き取り」の機能を追加 (Windows95では利用出来ない)
MikoScriptを ver.1.38 にバージョンアップ
AquesTalkの読み上げエンジン AquesTalkDa.dllをバンドル (こちらは、Windows95でも利用可能)
ツール → スクリプト集 に存在する「読み上げ」および「聞き取り」は環境設定によって無効化することが出来ます。
「読み上げ」および「聞き取り」の機能は Windows95では利用出来ないので Windows95のユーザーは、これを無効にすると良い。
MikoScript(ver.1.38 2008-06-10)では Apsaly オブジェクトにメンバー関数が3つ追加されました。 (Windows95では利用出来ない)
・Speak()
・TraceSpeaking()
・Dictate()
SAPI5対応の英語の音声合成エンジンについて
Windows XP, Vistaでは、SAPI5対応の英語の音声合成エンジンが、標準で搭載されています。
それ以前の Windowsでは、別途インストールする必要があります。但し、Windows 95, NT3.5 では、インストールできません。
SAPI5対応の日本語の音声合成エンジンについて
サードパーティ製のものが利用できるようですが、現状、フリーでは、適当なエンジンが在りません。
SAPI5には未対応ですが、フリーで軽量の日本語音声合成エンジン(AquesTalk)があります。Windows95でも利用可能です。
//--------------------------------------------------------------------- Windows95でも利用可能
// AquesTalkでの発声例 (エラー確認なし) AqTalkS0.mc
//--------------------------------------------------------------------- Apsaly.exeの存在するディレクトリをProgDirに取得する
::File.GetNamePart( ::File.GetProgramPath(), ProgDir'new! );
//--------------------------------------------------------------------- AquesTalk の DLL をリンク
^AquesTalk = ::DLL.Link( ProgDir + "Tools\\AquesTalkDa.dll" );
//--------------------------------------------------------------------- AquesTalk の DLL 内の読み上げ関数を取得
^PlaySync = ^AquesTalk.GetEntry( "AquesTalkDa_PlaySync" );
//--------------------------------------------------------------------- 読み上げ実行
^PlaySync( "はじめま'して。,よろしく,おねがいいたしま'す。" );
//--------------------------------------------------------------------- AquesTalk の DLL を解放
delete ^AquesTalk;
//---------------------------------------------------------------------
漢字かな混じり文を読上げる簡単な方法について
クリップボードの内容を対象として、漢字かな混じり文を読上げます。Apsalyは不要です。
下記 2種類のソフトが必要です。それぞれをセットアップして使用可能な状態にしてください。
漢字かな混じり文を解釈するための茶筌 約10MB
http://chasen.aist-nara.ac.jp/stable/chasen/win/chasen233_031208.exe
日本語プログラミング言語『なでしこ』 約5MB (AquesTalk組み込み済み)
http://nadesi.com/
茶筌
libchasen.dllと
libiconv-2.dllにパスを通すこと。
下記ページに『なでしこ』用のサンプルソースが有ります。
◆ 茶筌を利用して、規則音声合成ライブラリ(AquesTalk)で漢字かな混じり文を読上げます。
この、『なでしこ』用のサンプルソースの一行を次の様に変更します。
『漢字かな混じり文を入力してください。』とメモ記入
の部分を
クリップボード取得
に変更。簡単ですね。ファイル名を clipTalk.nako などとしてデスクトップにでも保存してください。
後は、読上げたい内容をクリップボードにコピーしてから、
上記で変更した『なでしこ』用のサンプルソースを『なでしこ』で実行するだけで、クリップボードの内容を読上げます。
読上げ精度を上げるにはサンプルソースを改良する必要が有ります。色々、弄って楽しんでください。
ちなみに、拡張子 nako は『なでしこ』のセットアップにおいて自動的に『なでしこ』に関連付けされるので、このことについて考える必要は有りません。
クリップボードに、発声(vocalisation)したい文章をコピーしてからデスクトップ上の clipTalk.nako をクリックするだけで音声再生が実行されます。
デスクトップに保存した clipTalk.nako を Apsalyから上手に利用するには次の様にします。
外部実行コマンドとして XcmdList.ctx に clipTalk.nako へのエントリを下記書式で追加書込みします。
clipTalk -T000OO C:\WINDOWS\デスクトップ\clipTalk.nako
Apsalyからならば、いちいち、デスクトップにアクセスする必要も無くなります。
Apsalyのツールバーやメニューへ、上で定義した外部実行コマンドを Apsalyに登録する機能を利用しましょう。
クリップボードに、発声したい文章をコピーしてからツールバー上のボタンをクリックするだけで音声再生が実行されるように成ります。
これで、Apsalyからも常に、クリップボードの内容を音声で、簡単に確認することが可能に成りました。
今、クリップボードに何がストアされているか?何時でも、これを音声で確認出来るように成りました。
・・・ xyzzyでも ・・・ clipTalk.nako 使えるぞ!
以上
外部プログラムの実行
D:\apsaly\XcmdList.ctx
----------------------
ファイル一覧(dir) -C041SR dir /o:gn
選択部を昇順ソート -C120SR sort
選択部を降順ソート -C120SR sort /r
選択部を逆順に並替 -D120SR "$t\RevLines"
選択部先頭に連番付加 -D120SR "$t\SeqNo" "(%d) "
選択部末尾に連番付加 -D120SR "$t\SeqNo" "%p%d"
選択部を関連で開く -T000SR $s
強調部を関連で開く -T000SR $u
選択コマンドを実行 -A000SR $s
現カーソル行を実行 -A000SR $l
現 HTML をブラウズ -D000SR "C:\Program Files\Internet Explorer\iexplore.exe" "$p"
Internet Explorer -D000SR "C:\Program Files\Internet Explorer\iexplore.exe"
Wikipedia 百科事典 -T000SR http://ja.wikipedia.org/wiki/$s
Google 検索 -T000SR http://google.com/search?q=$s
Yahoo! 辞書 -T000SR http://dic.yahoo.co.jp/dsearch?p=$s&stype=1&dtype=2
エクスプローラ -D000SR explorer /e,"$d"
電卓 -D000SR calc
Cコンパイル -D241EL gcc "$p"
現 MikoScript を実行 -C041SR miko "$p"
clipTalk -T000OO C:\WINDOWS\デスクトップ\clipTalk.nako ← 音声読上げ外部プログラムの実行は、ここに追記します。
-T000OO
||||||
|||||+---- 改行コード現状のまま O,R,L,C
||||+----- 文字コード現状のまま O,S,E,J,U,V,T,F,K,8,7
|||+------ 標準エラーなし 0,1,2
||+------- 標準出力なし 0,1,2,3,4
|+-------- 標準入力なし 0,1,2
+--------- ファイルタイプの関連で開く A,D,C,T
外部実行コマンドのモード書式は、必ず6文字で表現されます。
1字目 実行方式 : A 実行形式を自動判別して実行 D 直接実行 C DOS コマンドとして実行 T ファイルタイプの関連で開く
2字目 標準入力 : 0 なし 1 現テキストの選択範囲 2 現テキスト全体
3字目 標準出力 : 0 なし 1 現カーソル位置へ挿入 2 選択範囲と置換 3 現テキストの末尾へ追加 4 別の新規ウィンドウに表示
4字目 標準エラー: 0 なし 1 標準出力に混入 2 別の新規ウィンドウに表示
5字目 文字コード: O 現状のまま S Shift-JIS (標準) E EUC-JP (JIS-X0212) J JIS (ISO-2022-JP-1) U UTF-16 (LE) V UTF-16 (BE)
T Shift-JIS (JIS-X0213) F EUC-JP (JIS-X0213) K JIS (ISO-2022-JP-3) 8 UTF-8 7 UTF-7
6字目 改行コード: O 現状のまま R CR+LF L LF C CR
AquesTalkの読み上げエンジン
音声記号列は、Shift-JIS の全角ひらがな、全角カタカナ、半角英数記号の文字の並びで構成し、NULLで終端します。
規定されている文字コード以外、例えば、Tab・改行コード等を含めることはできません。
『これは、音声記号です。』 → 『これは、おんせいきごうです。』 → 『これわ、おんせーき'ごーです。』
形態素解析システム・茶筌の制限
辞書 ipadic に存在しない語は無視されます。例えば、ホルダーは存在するがフォルダーは無い。ipadic-sjis-2.7.0
望むものと異なる、不適切な読みを返す場合も在ります。辞書 ipadic を編集する必要が有るかもしれません。
辞書 ipadic に存在しない語の例 ダイア、フォルダー
辞書 ipadic に存在する 語の例 ダイヤ、ホルダー
形態素解析システム・茶筌の機能
ipadic2.0 以降の辞書では,単語に新たに「発音」フィールドが追加されました。
こんにちは → コンニチワ
きごう → キゴー
おんせい → オン/セイ
音声 → オンセイ
これは、おんせいきごうです。→ コレ/ワ/、/オン/セイ/キゴー/デス/。/
これは、音声記号です。 → コレ/ワ/、/オンセイ/キゴー/デス/。/
辞書 ipadic に存在しない語(ダイアログボックス)が消失してしまった例
「スクリプトの実行」ダイアログボックスから、引数を指定して、起動する必要があります。 →
「/スクリプト/ノ/ジッコー/」//カラ/、/ヒキスー/ヲ/シテイ/シ/テ/、/キドー/スル/ヒツヨー/ガ/アリ/マス/。/
ダイアログボックスはダイヤログボックスと記述すれば、通ります。
このように、辞書に存在しない語は発声出来無いという問題が残ります。方言などを含む文章の解釈は難題であると思われます。
辞書 ipadic に読みが存在する記号の例
@ アット
$ ドル
〒 ユービンバンゴー
+ タス
辞書 ipadic に存在する語の例
ニッカウヰスキー
紀左ヱ門通
ヴァイオリン
四十八ヵ所越
金ヶ崎
clipTalk.nakoへの参考
好みの場所へ好みの大きさでウィンドウを表示させるには?
!母艦設計=『
母艦について
閉じた時は〜終了
タイトルは「漢字かな混じり文を読上げます。」
可視はオフ
W=1024 //--------------------------------------- ウィンドウの横幅 (これを変更する)
H=16+27
X=0 //------------------------------------------ ウィンドウの x位置 (これを変更する)
Y=0 //------------------------------------------ ウィンドウの y位置 (これを変更する)
最前面表示=1
』
vnako.exeの不具合
なでしこ 『文字表示』には不具合が在ります。
一行が長い文に対してのエラー回避対策がなされていません。
これは、『文字表示』を『文字描画』に変更すると上手く行きます。
・文字表示 (もじひょうじ)・・・[命令]
【引数】{グループ=?}OBJのX,YへSを
【説明】オブジェクトOBJのX,Yへ文字Sを描画する。(アンチエイリアスしない)
・文字描画 (もじびょうが)・・・[命令]
【引数】{グループ=?}OBJのX,YへSを
【説明】オブジェクトOBJのX,Yへ文字Sをアンチエイリアス描画する。
0,0へ「123&&456」を文字表示 //123&456
DrawTextEx(c.Handle, PChar(s), -1, r, DT_HIDEPREFIX or DT_NOCLIP, nil);
書式化方法パラメータが不適切
DT_HIDEPREFIXが機能していない。DT_HIDEPREFIXはDT_NOPREFIXにしたい。
DT_NOCLIPは不要にしたい。これ元凶。実行速度よりも安全性を優先されたい。
0,0へ「123&&456」を文字描画 //123&&456
SuperTextOut(c, x, y+i*hh, c.Font, sl.Strings[i]);
mikoクリップボード操作
SetText 関数
書式: ::Clipboard.SetText([文字列])
説明: 本関数は、引数の [文字列] を、クリップボードに設定します。
この設定に成功した時、本関数は、その文字列のバイト数を返します。
引数が不正等で、設定ができなかった時は、null を返します。
// ClipTalk.mc
// Apsalyのテキスト選択領域を読上げるスクリプトです
// clipTalk.nakoを『なでしこ』で実行するように成っています
'AddScope(::Apsaly);
switch(GetSelType())
{
case 1:
case 2: eol = ""; break;
case 3: eol = "\r\n"; break;
default: return;
}
text = "";
(MinLi, MaxLi) = GetSelRange(0);
for(Li=MinLi; Li<=MaxLi; Li++)
text += GetSelText(Li) + eol;
::Clipboard.SetText(text);
::Execute("vnako.exe C:\\WINDOWS\\デスクトップ\\clipTalk.nako");
// end of ClipTalk.mc
スクリプトの実行
D:\apsaly\ScriptList.ctx
------------------------
全編集テキストから検索 . GrepLocal.mcx
ファイルから置換 . GrepRepl.mc -e -s
略語変換(C++用) . ListAbbr.mcx -m "$i\Dict\C++Abbr.dic"
略語変換(HTML用) . ListAbbr.mcx -m "$i\Dict\HtmlAbbr.dic"
略語変換(Mail用) . ListAbbr.mcx -m "$i\Dict\MailAbbr.dic"
単語補完(現書参照) . ListWord.mcx -m
単語補完(辞書参照) . ListWord.mcx -m "$i\Dict\SampleWords.dic"
クリップボード履歴 . ListHist.mcx -clip
検索文字列履歴 . ListHist.mcx -find
置換文字列履歴 . ListHist.mcx -repl
ファイル履歴 . ListHist.mcx -file
フォルダ履歴 . ListHist.mcx -path
タグファイル作成 . CtagMake.mc
タグ検索ジャンプ . CtagFind.mc
キー機能一覧 . KeyFuncs.mc
キー操作の記録開始 . KeyRecord.mc
キー操作記録の再生 . KeyReplay.mc
キー操作記録の表示 . KeyScript.mc
印刷(プレビュー) . PrintView.mcx
ファイルの比較 . DiffText.mcx -e
ファイルの16進値表示 . HexDump.mcx "$p"
自動スクロール . AutoScroll.mc
計算式 . Calculate.mc
色選択 . ChooseColor.mc
折り返し桁の一時変更 . MaxColumn.mc
タブ桁の一時変更 . TabColumn.mc
引用符付きコピー . QCopy.mc
引用符付き貼り付け . QPaste.mc
選択範囲内の全置換 . ReplaceAll.mc
中央揃え . ToCenter.mc
左端揃え . ToLeft.mc
右端揃え . ToRight.mc
空白行を除去 . DelEmptyLines.mc
空行の統合 . PackEmptyLines.mc
現スクリプトの実行 . "$p"
Hello .\Samples Hello.mc
HelloWin .\Samples HelloWin.mc
RandRect .\Samples RandRect.mc
WelcomeGK .\Samples\GkApp WelcomeGK.mcx
ClipTalk D:\miko\136\My ClipTalk.mc ← 音声読上げスクリプトは、ここに追記します。
音声読上げ対象文章を、いちいち、クリップボードに送るのは面倒ですね。
そこで、上記に示した ClipTalk.mc の出番となるわけです。
発声したい文章をマウスで選択してからツールバー上のボタンをクリックするだけで音声再生が実行されるように成ります。
マウス右ボタンクリックによる、コンテキストメニューに登録すれば、さらに便利に利用出来るように成ります。
「外部プログラムの実行」の機能は、現在のクリップボードの内容を音声で確認するために御利用ください。テキストの選択は不要です。
「スクリプトの実行」の機能は、Apsalyの選択テキストを簡単にスピーディーに読上げさせるために御利用ください。
Apsalyバージョンアップの問題。以前のバージョンの設定を引き継ぐには?
設定 → 環境設定 → インポート機能
を利用します。以前のバージョンの設定は CfgReg.env に保存されています。
Apsaly起動画面サイズの問題。画面 XGA(1024x768)の中央にサイズ SVGA(800x600)で Apsalyを起動するには?
設定 → 環境設定 → 外部インターフェイス → 起動オプション → 起動時のデフォルトコマンドオプションに下記の値を記述します。
/X112 /Y84 /W800 /H600
この設定を保存するには?
操作ボタン → (上書き)保存
として設定を保存する必要が有ります。
ブラウザ(IE5.5sp2)のエディタボタンにApsalyを追加登録するには?
設定 → フォルダオプション → ファイルの種類 → HTML Document → 編集コマンドにApsalyを登録する。
フレームを使用しているページの場合、上記のエディタボタンを追加登録する方法ではインデックスページを開いてしまいます。
そこで、マウスの右クリックによるポップアップメニューに存在する『ソースの表示』を利用することにします。
ブラウザ(IE5.5sp2)の『ソースの表示』に利用するエディタをApsalyにするには?
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\View Source Editor\Editor Name] に値として Apsaly へのパスを設定します。
ただし、レジストリに登録するこの方法には問題があります。ファイル名に空白が含まれる場合、Apsaly はこれを開けません。
この問題は『 メモ帳トラッパー http://www.vector.co.jp/soft/win95/writing/se041174.html 』で解決出来ます。メモ帳トラッパーを利用する場合は、
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\View Source Editor\Editor Name] は規定の notepad へのパスにしておきます。
有ったら便利なスクリプト
選択部を縦計.mc
選択部を横計.mc
スクリプト実行においての不具合?
::Input()実行で入力ダイアログボックスへフォーカスが移動しない。(エディタのステータスラインにはスクリプト実行中!と表示される)
テキストエディタ Apsalyの優位性
mikoスクリプトエンジン
検索着色機能 (xyzzyには無い) (EmEditor freeには有る)
プロポーショナルフォント(非等幅)を使用出来る。 (xyzzyには無い)
視点機能(栞)
オートスクロール機能 (xyzzyにも有る)
IME状況の色付けカーソル機能 (xyzzyにも有る)
編集位置を覚えている。
読上げ聞き取り機能 (xyzzyには無い)
テキストエディタ Apsalyの劣性
多言語入力(Microsoft Global IME など)の機能なし (xyzzyには有る)
ローカル辞書引き機能なし (xyzzyには有る)
ver.2.60 2008-08-01現在、利用ユーザーが少ない。
Windows95では、読上げ・聞き取り機能は利用出来ません。これを採用したことで対応OSを減らしてしまった。
ver.2.70 はマルチモニターに対応したことで、Windows95では起動不能に成りました。
MikoScriptに関係する以降の記述は、MikoScript(ver.1.36 2008-04-22)の詳細 http://www.venus.dti.ne.jp/mw31/miko/ から抜粋しました。
正規表現
参照グループとバックリファレンス
5文字の回文に一致する正規表現 (xaiax)
@(.)@(.).@2@1
7文字の回文に一致する正規表現 (AKASAKA)
@(.)@(.)@(.).@3@2@1
5文字または7文字の回文に一致する正規表現
@(.)@(.).@2@1|@(.)@(.)@(.).@5@4@3
全角7文字の回文に一致する正規表現 (たけやぶやけた)
@(\Z)@(\Z)@(\Z)\Z@3@2@1
全角(記号類を除く)3文字の回文に一致する正規表現 (日曜日、バビバ)
@([\K\H\T])[\K\H\T]@1
構造体
クラスの機能
入出力形式設定 構造体内の各メンバーには、「入出力形式」を設定できます。
構造体設定文 構造体名 ::= { 文の並び }
以下に、構造体を設定する例を示します。
S ::=
{
.A = 1;
.B = 2;
}
この実行によって、デフォールトスコープ(この場合、現実行関数のローカルスコープ)内に、S という名前の構造体が生成され、
そのメンバーに、箱 A と箱 B が登録されます。
これらのメンバーの初期値は、それぞれ、整数値 1, 2 に設定されています。
このように、構造体のメンバーは、代入によって生成します。その際、初期値が設定できます。
なお、代入以外でも、構造体のメンバーが生成できますが、これについては、次節で説明します。
上例の構造体 S と同じ構造の複合箱は、「構造体設定文」を使わずに、以下のように、生成することもできます。
S.A = 1;
S.B = 2;
しかしながら、「構造体設定文」を使わずに生成した複合箱には、構造体としての属性が設定されません。
そのため、次節で説明する各種の入出力に使えません。
また、構造体は、次章で説明する「クラス」の機能を担えますが、構造体の属性が設定されていない複合箱には、その機能はありません。
複合箱を構造体として構築するには通常、「構造体設定文」を実行する必要があります。
::= という記号が、「構造体名」の直後にあります。
これは、一見、演算子のようですが、あくまで構文構成上の記号で、文法的には、演算子ではありません。
本構文は、このような記号を使わないで、struct という予約語を使って、C 言語風の構文にすることも可能でしたが、
諸般の混同を避けるために、敢えてこのような書式にしています。
コメント化マクロ
既に述べましたが、「マクロ定義本体」内にコメントがあっても、その部分は登録されません。
例えば、次のようにして、マクロを定義しても、その定義本体は空になります。
#set cmt //
#comment という組み込みマクロを使うと、このような定義が可能になります。
それには、次のようにします。
#set cmt #comment
これで、cmt というマクロの定義本体には、// の文字列が登録されます。
このマクロを使って、例えば、
#cmt *** 処理開始 ***
とすると、これは、
// *** 処理開始 ***
に展開されます。ところが、これは、コメントなので、コンパイル時には、読み飛ばされます。
システムスコープ
「箱名の並び」の前に、特別な前置演算子を付けるか、あるいは、付けないかによって、規定されます。この関係を、以下に示します。
::P グローバルスコープ
.P メンバースコープ
^P モジュールローカルスコープ
$P スレッドローカルスコープ
@P 関数スタティックスコープ
P デフォールトスコープ
"通常文字列" エスケープ機能有り
$"純粋文字列" エスケープ機能無し \ を常用する正規表現やファイルのパスを表記する時に便利です。
##直記文字列## 式、マクロ、専用のコメント(#- から -# まで)の埋め込み機能 例:##1+2は${1+2}##
直記文字列内専用のコメント部
・#- から -# まで
・#- から改行コードまで
直記文字列の中には、スクリプト式、マクロ、コメントが書けます。スクリプト文は書けません。
a = 1; b = 2; print ## ${a} と ${b} を足すと ${ a + b }#- コメント部 -#になります。##;
を、実行すると、
1 と 2 を足すと 3になります
とプリントされます。
スクリプト式の区切りとしての #- コメント部 -#
#set PI 3.1415926535897
print ## 円周率の値は #PI です。##; // OK 円周率の値は 3.1415926535897 です。
print ## 円周率の値は #PI#- コメント部 -#です。##; // OK 円周率の値は 3.1415926535897です。
print ## 円周率の値は#PIです。##; // NG マクロ #PIです。は存在しません。
整数値は、内部的には 32-bit の2の補数表現の整数データ型になります。
整数の定数値には、10進、16進(0x)、2進(0b)の3種の表記形態があります。
コメントは、C++ 言語等と同じ表記で、// から改行までと、/* から */ までの間の2種類があります。
文字列どうしの連結は、本言語の場合、+ 演算子で行なうことができます。
:= は、参照代入演算子です。箱 X への参照を、箱 R に格納するには、R := X;
:: は、対象の名前の存在場所をグローバルスコープに限定する前置演算子です。
::= は、構造体設定文での struct 代替です。
変数は、事前に宣言しておく必要はありません。生成時に特定のデータ型に固定されてしまうのではなく、動的にどのようなデータ型でも代入できます。
print は、予約語です。
予約語一覧を以下に示します。
back break call case class continue default delete
do else for function goto if null operator
print quit return scope switch this warp while with
本言語の print は、特別な表記(-非改行)がなければ、最後に無条件に改行を付加します。
用例: print "hello, world!";
puts 関数
書式: ::puts( <項目>,... )
概要: 指定項目の文字列を標準出力します。
説明: 本関数は、指定された各項目を文字列にして標準出力します。
標準出力は、デフォールトでは、コンソールになります。
本関数が標準出力する各項目自身の内容は、print 文と同じですが、
print 文のように、各項目の間に「, 」を挿入したり、最後に、改行を付加することはありません。
また、本関数は、あくまで関数なので、print 文のような特別な表記にはなりません。
本関数の返値は、特に意味はありません( null が返ります )。
用例: ::puts( "hello, world!\n" );
MikoScriptは「箱」を操作する言語です。
変数、配列、関数、オブジェクト等、本言語固有の全ては、内部的には「箱」として存在します。
そういう意味で、本言語はいわば「箱」を操作する言語でもあります。
箱操作用システム組み込みリレー型関数
箱入出力形式設定用のリレー型関数
「箱」は単なる入れ物ではなくて、その言葉から連想されるよりももっと深い意味があり、また、おもしろい使い方ができる。
「箱」には、構造的に大きく分けて、「値を入れる箱」と「箱を入れる箱」の2種類があります。
「箱」は、「delete 文」で削除(明示的に破棄)できます。 Delete( 'LineLim ); は文ではなく関数です。
定義済み定数マクロ
現状、本言語では、比較的使用頻度の高い、次のような定数のマクロ定義を、コンパイル開始直前時に、自動的に行なっています。
そのため、これらの定数マクロに関しては、別途定義しておく必要はありません。
#set TRUE (1)
#set FALSE (0)
#set OK (0)
#set NG (-1)
#set NULL (0)
なお、言うまでもなく、予約語の null は、マクロの #NULL とは根本的に違います。
また、MikoScriptには、定義済み定数マクロとしての円周率は定義されていません。
#set PI 3.1415926535897
このように定義されたマクロを使う時は、そのマクロ名の前に # を付けます。
例えば、上例のように定義された PI というマクロを使う時は、
#PI
と書きます。そうすると、コンパイル時に、この部分は、
3.1415926535897
に展開されます。
代入演算子には、 = := <- の3つがあります。各代入演算子の作用の概要は、以下の通りです。
A = B A に B の複製を代入する( 複製代入演算子 = )
A := B A に B の参照を代入する( 参照代入演算子 := )
A <- B A に B の実体を移動する( 移動代入演算子 <- )
関数コールと関数定義
F(); // 関数コール
print "これは関数定義外の実行文です";
function F() // 関数定義
{
print "これは関数定義内の実行文です";
}
関数定義は、入れ子にすることはできません。
つまり、関数定義の中で、別の関数定義を入れることはできません。
但し、「匿名関数」や「do-with 式」内の「ブロック関数」の定義を入れることはできます。
文字定数
C言語では、文字定数は ' で囲みますが、
本言語では ' は別の用途(3桁区切り用および組み込みリレー型関数用)があるので、` で囲みます。
3桁区切り用に使用されるシングルクォートの例
百万 → 1'000'000
組み込みリレー型関数用に使用されるシングルクォートの例
print 3.14'int; // → 3
文字定数用に使用されるバッククォートの例
`1000` OK
`1000000` NG 半角で4文字(32bit)まで
システム組み込みリレー型関数の例
・文字列→数値への変換
T'int(n) → 整数値
T'float → 浮動小数点数値
・数値→文字列への変換
T'd(n) → 10進文字列
T'x(n) → 16進文字列
MikoScriptワンライナー
/! <実行文>
指定された <実行文> を直接実行します。
このオプションを使用する場合、実行対象の <ファイル名> の指定は、無用です。
DOS/コマンドプロンプトから実行する場合:
<実行文> は、二重引用符で囲う必要があります。
この囲いの中で二重引用符を使う時は、その直前に \ を置いてエスケープ表記にする必要があります。
また、/! と <実行文> の間には、半角空白を入れる必要があります。
例: miko /! "print \"hello\";"
アプリケーションに組み込みの MikoScript を実行する場合:
基本的に、そのアプリケーションに依存します。
ちなみに、Apsaly テキストエディタの場合、/! 以降は、本言語の実行文と同等に扱われます。
そのため、<実行文> は、二重引用符では囲いません。
例: /! print "hello";
▲■ BASICコンパイラ FreeBASICの紹介
FreeBASICは BASICコンパイラです。BASIC言語で記述されたソースをコンパイルして実行可能なバイナリファイルを生成します。
DOS と Windows と Linux のバージョンがあります。Windows95でも問題無く利用できます。
FreeBASIC ver.0.18.5b(2008-04-18)を使用してみた感想ですが、Linuxのバージョンが一番安定していて調和が取れているように思われました。
FreeBASICで生成されたバイナリが正常に動作するか否かは実行してみて確認するしかありません。つまり、自己責任で利用することに成ります。
FreeBASIC DOWNLOAD http://www.freebasic.net/
統合開発環境 FBIDE(FreeBasic Integrated Development Environment)などもここでダウンロード出来ます。
FreeBASIC-v0.20.0b-win32.exe 5,737,127byte
FreeBASIC-v0.20.0b-dos32.zip 6,090,031byte 配布ファイルのなかで容量が一番大きいのはDOS用です。機能満載?低効率?疑問ではある。
FreeBASIC-v0.20.0b-linux.tar.gz 2,728,342byte これが動かない時は?
FreeBASIC-v0.20.0b-linux-standalone.tar.gz 4,312,054byte これを試してみると良いかも?
FreeBASIC ver.0.18.5b(2008-04-18) 2008/08/15現在、ダウンロード出来ません。
DOS FreeBASIC Ver.0.20.0b(2008-08-10)
on DOS(Windows95) fullscreen V-Text VGA
\examples\libraries\Allegro\stars.bas
赤い三角錐は宇宙船です。
この宇宙船はカーソルキーでくるくると回転します。
コントロールキーで船首の方向へ前進します。
Linux FreeBASIC ver.0.18.5b(2008-04-18)
on KNOPPIX V3.3(2004-02-16 JAPAN:2004-02-20)

\examples\gfx\rel-juliarings.bas
rel-juliarings.bas は、実際には、動いています。アニメーションしています。
DOS FreeBASIC ver.0.20.0b(2008-08-10)でもDOS窓フルスクリーンの上で走ります。
Windowsの場合は DirectX9を必要とするようです。
Linux FreeBASIC ver.0.18.5b(2008-04-18)
---------------------------------------
jfbtermの上では走りません。TERM=Linux の環境で実行するようにします。
Windows FreeBASIC ver.0.20.0b(2008-08-11)
-----------------------------------------
Screen関連の命令が上手く働いてくれません。『無効な命令を実行しました』となる。
Windows FreeBASIC ver.0.18.5b(2008-04-18)
-----------------------------------------
Windowsバージョンでは、sleepをループ内部で使用すると不具合が生じるようです。FB3D.BAS で確認しました。
時間を積算して、まとめてsleepするように見える。描画の過程を見たい FB3D.BAS などの場合、これではまずい。
ちなみに、Linuxバージョン と DOSバージョンでは FB3D.BAS は問題無く上手く行く。
DOS FreeBASIC ver.0.20.0b(2008-08-10)
-------------------------------------
私の環境(恥ずかしいので内緒であるが間違いなくlegacy)では、Screen関連の命令が上手く働いてくれません。
コンパイルしてバイナリの生成は行われますが、この生成されたバイナリを実行すると・・・お手挙げ。
3D_DEMO for FreeBasic ver.0.18.5b FB3D.BAS などは、ハングアップしてしまいます。
取敢えず、libfb.aをver.0.18.5bのものに差し替えることで FB3D.BASは上手く行きます。
\examples\gfx\rel-juliarings.basなどもコンパイル可能です。
ちなみに、\examples\gfx\rel-juliarings.basはlibfb.aを差し替えなくともコンパイル可能であり、正常に実行されます。
libfb.aを差し替えれば完慟するということは・・・legacyに未対応な方法で画面にアクセスしている。もしくはlibfb.aのバグ。もしくは・・・?
hint 1: DOS窓フルスクリーンではなくMS-DOSモードでは CTRL+z でハングアップからの復帰が可能です。ゆえに、テストはMS-DOSモードで行ないましょう。
hint 2: MS-DOSモードの弱点。ロングファイル名を理解しない。ゆえに、ロングファイル名を持ったライブラリにはアクセス出来ない。
hint 3: ・・・
DOS FreeBASIC ver.0.18.5b(2008-04-18)
-------------------------------------
英語モードで実行しないとフォントが表示されません。
Screen mode 11と12 のパレット参照に食い違いが生じているように思われます。
MSDOSモードおよび PCDOSでは別途 DPMIサーバ(DOS からプロテクトモードメモリを利用するための規格)が必要になります。
DPMIサーバ http://hp.vector.co.jp/authors/VA010446/software/archives/csdpmi5b.zip
Windows DOS窓フルスクリーンの場合、DPMIサーバは実装済みの為、不要です。
FreeBASIC Ver.0.20.0b(2008-08-10)で遊んでみる?
FB.BAT実行のスナップショット
 |
FreeBasic ver.0.18.5b から ver.0.20.0b へのバージョンアップにおいて、オプション -r の意味が変わったようです。
オプション -r の代りに -R を使用すると良いようです。
ちなみに、オプション -r はコンパイルの過程においてアセンブルソースを削除しないようにするものです。
Quick RUN FreeBasic ver.0.20.0b
-------------------------------
手軽に実行してexeを生成しないようにするには?
exeだらけに成るのは勘弁してほしいという方は御利用ください。エコです。省エネです。economical use of energy.
ただし、生成されたバイナリをバッチファイル内から起動すると実行結果が微妙に異なることを確認しています。
ゆえに、生成されたバイナリは、コマンドラインから直に起動してみることも試してください。
FB.BAT
REM -------------------------- ここから ( d:および d:\FB-DOSはFreeBasicをインストールしたディレクトリを対象とすること )
@echo off
call us
echo ---- COMPILE 0.20.0b ----
d:
cd d:\FB-DOS
FBC.EXE %1 -v -R
if "%2"=="" goto PASS_RUN
echo.
echo ---- RUN 0.20.0b ----
del %2.asm
echo % %%1 to
echo % %%2.exe made [ESC[s
if exist %2.exe echo ESC[uESC[1;33mOKESC[m]
if not exist %2.exe echo ESC[uESC[1;41mNGESC[m]
CHOICE /c:yn /N Yes or No ?
if errorlevel 2 goto PASS
%2.exe
:PASS_RUN
pause
:PASS
if not "%2"=="" del %2.exe
call jp
exit
REM -------------------------- ここまで
FB.BATの使い方
実際には、ESC はコントロールコード 0x1b に書換える必要があります。
コントロールコード 0x1b を、このページに直書きした場合、ブラウザが誤動作するかもしれないのです。
Apsalyならば メニュー → 編集 → 慣用語句入力 → 制御コード → 慣用語句一覧ダイアログが現われるのでESC(escape)を選択します。
C-v ESC ・・・ Vim (挿入モードで)
C-q ESC ・・・ xyzzy
C-p ESC ・・・ Vz
DOS Filer KL(K-Launcher) の拡張子関連付け実行の機能を利用しない場合は、FB.BATは次の様に使用してください。
FB.BATへの一番目の引数はソースファイルのフルパスファイル名 (拡張子basを含む)
FB.BATへの二番目の引数はソースファイルのフルパスファイル名 (拡張子basは除く)
二番目の引数は異様に感じるでしょうが、これには理由が有ります。バッチファイル自体(command.com)の機能には文字列分解や整形などは無いのです。
DOS Filer KL(K-Launcher) の拡張子関連付け実行の機能を利用する場合は、次の様にします。
KL.CFGの適切な位置に下記内容(サブメニュー)を追記します。KL.CFGの書き方の知識が必要です。KL(K-Launcher) の拡張子関連付け実行の機能を利用すると、
目的のファイルにカーソルを合わせ、ENTERを入力するだけで FB.BATに、一番目の引数および二番目の引数を渡して実行してくれます。
マクロ %1%\%C はカーソル下の拡張子を含んだフルパスファイル名です。
マクロ %1%\%X はカーソル下の拡張子を除いたフルパスファイル名です。
注意:KL(K-Launcher)の制限により、長過ぎるパスは渡せません。
この問題を回避するには、マクロ %1%\%X のみを使用するように変更する必要が有ります。
; ---------------------------- ここから (FB.BATおよび FB_RUN.BATをパスの通ったディレクトリに準備しておくこと)
; KL(K-Launcher) KL.CFG for FreeBasic NEW=0.20.0b OLD=0.18.5b
0,NEW Quick RUN ,,FB.BAT %1%\%C %1%\%X
1,NEW Compile only,,FB.BAT %1%\%C
2,OLD Quick RUN ,,FB_RUN.BAT %1%\%C %1%\%X
3,OLD Compile only,,FB_RUN.BAT %1%\%C
,,,
; ---------------------------- ここまで
もし、一番目の引数が存在しない場合は、エラーです。
もし、二番目の引数が存在しない場合は、コンパイルのみを行ない、アセンブルソースとバイナリを生成します。生成されたバイナリの起動は行ないません。
もし、二番目の引数が存在する場合は、バイナリを生成し、それを起動します。バイナリの実行終了においてアセンブルソースとバイナリは削除されます。
FB.BATの実行において、made [OK] が表示された場合、無事にバイナリが生成されています。生成されたバイナリの安全性は不明です。
FB.BATの実行において、made [NG] が表示された場合、以降の処理をアボート出来るように、外部コマンド CHOICE を使用しています。
画面の同じ位置に [OK] または [NG] を表示させるために、エスケープシーケンスを利用しています。
echo自体に非改行の機能は有りませんが、エスケープシーケンスを利用することで非改行に同じであるかのように見せることが可能です。
バッチファイルへの引数をバッチファイル内で参照する方法
echo % %%1
echo % %%2.exe
%空白%% は誤記ではありません。空白は必須です。Windows95_OSR2では、これで上手く行きます。
この echo命令がどのように出力されるかは、上のFB.BAT(FreeBASIC)のスナップショットを見てみると分かります。
エスケープシーケンスを除去したもの下記に示しておきます。
ちょっと間抜けですが、動作は前述のものと同じです。
エスケープシーケンスの役目が理解出来ると思います。
REM -------------------------- ここから ( d:および d:\FB-DOSはFreeBasicをインストールしたディレクトリを対象とすること )
@echo off
call us
echo ---- COMPILE 0.20.0b ----
d:
cd d:\FB-DOS
FBC.EXE %1 -v -R
if "%2"=="" goto PASS_RUN
echo.
echo ---- RUN 0.20.0b ----
del %2.asm
echo % %%1 to
echo % %%2.exe made [
if exist %2.exe echo OK]
if not exist %2.exe echo NG]
CHOICE /c:yn /N Yes or No ?
if errorlevel 2 goto PASS
%2.exe
:PASS_RUN
pause
:PASS
if not "%2"=="" del %2.exe
call jp
exit
REM -------------------------- ここまで
FreeBASIC Ver.0.20.0b(2008-08-10) libfb.a差替版 テスト用サンプル
'---------------------------- start of PAL.BAS
Dim x As Integer
Dim Cc(0 To 15) As Integer
Cc(0)=&h000000
Cc(1)=&h0000aa
Cc(2)=&h00aa00
Cc(3)=&h00aaaa
Cc(4)=&haa0000
Cc(5)=&haa00aa
Cc(6)=&haaaa00
Cc(7)=&haaaaaa
Cc(8)=&h777777
Cc(9)=&h0000ff
Cc(10)=&h00ff00
Cc(11)=&h00ffff
Cc(12)=&hff0000
Cc(13)=&hff00ff
Cc(14)=&hffff00
Cc(15)=&hffffff
Screen 18,16
cls
For x=0 To 15
Circle (x*20+180,380),8,Cc(x),,,,F
Next
For X=0 To 15
Circle (X*20+180,380),8,Cc(7)
Next
Bsave "PAL.BMP",0
Sleep
'---------------------------- end of PAL.BAS
PAL.BASの実行結果 (FreeBASIC Ver.0.20.0b(2008-08-10) libfb.a差替版)
FreeBASIC Ver.0.18.5b(2008-04-18)で遊んでみる?
DOS FreeBASIC Ver.0.18.5b(2008-04-18) on DOS(Windows95) fullscreen V-Text VGA
 |
6番目のパレット(暗い黄色)の色調に特徴あり。 数字のゼロに特徴あり(英語フォントにアクセスしている)
Quick RUN FreeBasic ver.0.18.5b
-------------------------------
手軽に実行してexeを生成しないようにするには?
FBIDEにある Quick RUN に似た動作を DOS上で実現します。
DOS Filer KL(K-Launcher) の拡張子関連付け実行の機能を利用して、これを実現しています。
KL.CFG における拡張子 bas 関連付けの例を下記に示します。
KL.CFGの適切な位置に下記内容(サブメニュー)を追記します。KL.CFGの書き方の知識が必要です。
,bas,%M7
;#07 BASIC
0,Free Basic ,,%M43
Q,QBASIC ,,us qbasic.com /RUN%1%\%C %: jp
A,ABASIC ,,start D:\ActiveBasic\ProjectEditor.exe %1%\%C
B,10_BASIC ,,start D:\10_BASIC\BASIC.EXE /NR %1%\%C
F,FBASIC ,,start D:\FBWIN41\Bin\FBASIC.EXE %1%\%C
,,,
;#43 FreeBasic
0,Quick RUN ,,FB_RUN.BAT %1%\%C %1%\%X ;---- FB_RUN.BATをパスの通ったディレクトリに準備しておきます
1,Compile only,,FB_RUN.BAT %1%\%C
,,,
FB_RUN.BAT (---- コメントは削除すること)
REM -------------------------- ここから ( d:および d:\FB-DOSはFreeBasicをインストールしたディレクトリを対象とすること )
@echo off
call us ---------------------------- (重要) フォント表示は英語モードで有効
echo ---- COMPILE 0.18.5b ----
d:
cd d:\FB-DOS
FBC.EXE %1 -v -r ------------------- コンパイル
if "%2"=="" goto PASSRUN
echo ---- RUN 0.18.5b ----
del %2.asm ------------------------- アセンブルファイルを削除する
%2.exe ----------------------------- 実行ファイルの起動
:PASSRUN
pause ------------------------------ (重要) 即終了抑止
call jp ---------------------------- 日本語モードに戻す
if not "%2"=="" del %2.exe --------- 実行ファイルを削除する
REM -------------------------- ここまで
FB_RUN.BATは FreeBasic ver.0.18.5b のためのものです。FreeBasic ver.0.20.0b の場合は、FB.BATを使用してください。
' 3D_DEMO for FreeBasic ver.0.18.5b FB3D.BAS (注意 FreeBasic ver.0.20.0b の場合はハングアップします)
Var TM=Timer '----- 計時スタート
'=============================================================================
Var WAIT_DELAY=000 '実行速度調整用 (WAIT_DELAY>=0)
Var WS=10 '-------- 描画密度 (WS>0)
Var AX=30 '-------- 描画角度
Var SM=12 '-------- スクリーンモード (20:XVGA 19:SVGA 18:VGA 12:VGA16 11:VGA2)
'=============================================================================
Dim YMIN(0 To 639) As Integer, YMAX(0 To 639) As Integer
Dim RD As Double
Dim CX As Double
Dim CY As Double
Dim SX As Double
Dim SY As Double
Dim X As Integer
Dim Y As Double
Dim Z As Integer
Dim SQ As Double
Dim PX As Double
Dim PY As Double
RD=3.1415926535897932/180
CX=Cos(AX*RD)
CY=Cos(-AX*RD)
SX=Sin(AX*RD)
SY=Sin(-AX*RD)
For X=0 To 639
YMIN(X)=399
YMAX(X)=0
Next
Screen SM
cls
For X=0 To 15
Circle (X*20+180,380),8,X,,,,F
Next
For X=0 To 15
Circle (X*20+180,380),8,7
Next
For Z=-200 To 200 Step WS
For X=-200 To 200 Step 1
SQ=Sqr(X*X+Z*Z)*RD
Y=-AX*(Cos(SQ)+Cos(SQ*3))
PX=X*CY+Z*SY+320
PY=Y*CX-(-X*SY+Z*CY)*SX+200
If PY<YMIN(PX) Then
YMIN(PX)=PY
Pset(PX,PY),14
End If
If PY>YMAX(PX) Then
YMAX(PX)=PY
Pset(PX,PY),15
End If
Sleep WAIT_DELAY
If Inkey<>"" Then End
Next
Next
'---------------------------- 描画終了時間の表示
Draw String (10,10), Str(Timer-TM)+" sec.",15
Bsave "FB3D_12.BMP",0
Sleep
'---------------------------- end of 3D_DEMO
Var
Screen
Circle
Pset
Draw String
BSave
Sleep ---- NG Windows version FreeBASIC
The accuracy of Sleep is variable depending on the OS cycle time (Windows NT/2K/XP: 15ms, 9x/Me: 50ms, Linux 10ms, DOS 55ms).
Syntax
------
Var [Shared] symbolname = expression[, symbolname = expression]
Screen mode[,[ depth][,[ num_pages][,[flags][,[refresh_rate]]]]]
Circle [target,] [STEP] (x,y), radius[, [color][, [start][, [end][, [aspect][, F]]]]]
Pset [target ,] [STEP] (x, y)[,color]
Draw String [buffer,] [STEP] (x, y), string [,color [, font [, method [, (alpha|blender) ] ] ] ]
BSave filename, addr [, size]
Sleep [ msecs [, kind]]
┌──┬──────┬─────┬─────────┬──────┬───────────────────────┐
│Mode│ Resolution│ Emulation│Text │ char size │colors on screen │
├──┼──────┼─────┼─────────┼──────┼───────────────────────┤
│ 1 │ 320 x 200 │ CGA │ 40x25 │ 8x8 │ 16 background, 1 of four sets foreground │
│ 2 │ 640 x 200 │ CGA │ 80x25 │ 8x8 │ 16 colors to 2 attributes │
│ 7 │ 320 x 200 │ EGA │ 40x25 │ 8x8 │ 16 colors to 16 attributes │
│ 8 │ 640 x 200 │ EGA │ 40x25 │ 8x8 │ 16 colors to 16 attributes │
│ 9 │ 640 x 350 │ EGA │ 80x25 or 80x 43 │ 8x14 or 8x8│ 16 colors to 16 attributes │
│11 │ 640 x 480 │ VGA │ 80x30 or 80x 60 │ 8x16 or 8x8│256K colors to 2 attributes │
│12 │ 640 x 480 │ VGA │ 80x30 or 80x 60 │ 8x16 or 8x8│256K colors to 16 attributes │
│13 │ 320 x 200 │ MCGA │ 40x25 │ 8X8 │256K colors to 256 attributes │
│14 │ 320 x 240 │ │ 40x30 │ 8x8 │256K colors to 256 attributes or direct color │
│15 │ 400 x 300 │ │ 50x37 │ 8x8 │256K colors to 256 attributes or direct color │
│16 │ 512 x 384 │ │ 64x24 or 64x 48 │ 8x16 or 8x8│256K colors to 256 attributes or direct color │
│17 │ 640 x 400 │ │ 80x25 or 80x 50 │ 8x16 or 8x8│256K colors to 256 attributes or direct color │
│18 │ 640 x 480 │ │ 80x30 or 80x 60 │ 8x16 or 8x8│256K colors to 256 attributes or direct color │
│19 │ 800 x 600 │ │100x37 or 100x 75 │ 8x16 or 8x8│256K colors to 256 attributes or direct color │
│20 │1024 x 768 │ │128x48 or 128x 96 │ 8x16 or 8x8│256K colors to 256 attributes or direct color │
│21 │1280 x 1024 │ │160x64 or 160x128 │ 8x16 or 8x8│256K colors to 256 attributes or direct color │
└──┴──────┴─────┴─────────┴──────┴───────────────────────┘
Mode11 / 640x480 / VGA / 80x30 or 80x60 / 8x16 or 8x8 / 256K colors to 2 attributes : DOS version NG
Mode12 / 640x480 / VGA / 80x30 or 80x60 / 8x16 or 8x8 / 256K colors to 16 attributes : DOS version NG / Linux version OK
FreeBASIC ver.0.18.5b(2008-04-18) には、MS-QBASICにあるような SOUND命令や PLAY命令などはありません。
しかし、下記の様にプログラムすることで、SOUND命令に等価なものを表現出来ます。
注意 : speakersound.bas は DOSV専用です。ハードウェアに特有のシステムスピーカを制御します。
プログラム実行によるいかなる損害についてもその保障はいたしません、各自の判断で実行してください。
'' SpeakerSound.bas
''
'' 参考 : \FreeBASIC\examples\manual\hardware\out.bas
''
'' NOTICE: This file is part of the FreeBASIC Compiler package and can't
'' be included in other distributions without authorization.
'' See Also: http://www.freebasic.net/wiki/wikka.php?wakka=KeyPgOut
'' --------
Sub Sound(ByVal freq As UInteger, dur As UInteger)
Dim t As Double,f1 As Unsigned Short
f1 = 1193181 \ freq
Out &h61,Inp(&h61) Or 3
Out &h43,&hb6
Out &h42,LoByte(f1)
Out &h42,HiByte(f1)
t=Timer
While ((Timer - t) * 1000) < dur
Sleep 0,1
Wend
Out &h61,Inp(&h61) And &hfc
End Sub
Sound( 523, 1000) 'C5
Sound( 587, 1000) 'D5
Sound( 659, 1000) 'E5
Sound( 698, 1000) 'F5
Sound( 783, 1000) 'G5
Sound( 880, 1000) 'A5
Sound( 988, 1000) 'B5
Sound( 1046, 1000) 'C6
Sound(13290, 1000) '---- 休符代用
Sound( 1046, 1000) 'C6
Sound( 988, 1000) 'B5
Sound( 880, 1000) 'A5
Sound( 783, 1000) 'G5
Sound( 698, 1000) 'F5
Sound( 659, 1000) 'E5
Sound( 587, 1000) 'D5
Sound( 523, 1000) 'C5
'' -------------------- end of speakersound.bas
PLAY命令に等価なものについては、テキスト音楽 MML (文字が音に変身する仕組みについて) を参照してください。
平均12音階表 (w3mで閲覧している場合、半角カタカナ(ファ)は全角にされてしまうため表の体裁は崩れます)
┌──┬────────────────────────────────────┐
│ │ ド ド# レ レ# ミ ファ ファ# ソ ソ# ラ ラ# シ │
│ ├────────────────────────────────────┤
│ │ C C# D D# E F F# G G# A A# B │
├──┼────────────────────────────────────┤
│ 0 │ 16 17 18 19 21 22 23 25 26 28 29 31 │
│ 1 │ 33 35 37 39 41 44 46 49 52 55 58 61 │
│ 2 │ 65 69 73 77 82 87 92 97 104 110 116 123 │
│ 3 │ 130 139 147 155 165 174 185 195 208 220 233 247 │
│ 4 │ 261 277 294 311 330 349 370 391 415 440 466 494 │
│ 5 │ 523 554 587 622 659 698 740 783 831 880 932 988 │
│ 6 │ 1046 1109 1175 1244 1319 1396 1480 1567 1661 1760 1864 1976 │
│ 7 │ 2093 2217 2349 2489 2637 2793 2960 3135 3322 3520 3729 3951 │
│ 8 │ 4186 4435 4699 4978 5274 5587 5920 6271 6645 7040 7458 7902 │
│ 9 │ 8372 8870 9397 9956 10548 11175 11840 12543 13290 14080 14917 15804 │
└──┴────────────────────────────────────┘
システムスピーカの特性により、55Hzより小さい値、または 8,000Hz以上は実用ではない。
'' 今日の日付と時刻
#include "vbcompat.bi"
Dim a As Double = Now()
Print Format(a, "yyyy/mm/dd hh:mm:ss "); WeekdayName(Weekday(a))
'' 特定日の日付と時刻 (北京オリンピック開催日の曜日を求める)
#include "vbcompat.bi"
Dim a As Double = DateSerial(2008, 08, 08) + TimeSerial(20, 0, 0)
Print Format(a, "yyyy/mm/dd hh:mm:ss "); WeekdayName(Weekday(a))
■ FreeBASIC ver.0.18.5b(2008-04-18) Alphabetical Keywords List Alphabetical listing of keywords, macros and procedures.
| [Abs] [Access] [Acos] [Add (Graphics Put)] [Alias] [Allocate] [Alpha (Graphics Put)] [And] [And (Graphics Put)] [Any] [Append] [As] [Asc] [Asin] [Asm] [Assert] [AssertWarn] [Atan2] [Atn] [BLoad] [BSave] [Beep] [Bin] [Binary] [Bit] [BitReset] [BitSet] [ByRef] [ByVal] [Byte] [CAllocate] [CByte] [CDbl] [CInt] [CLng] [CLngInt] [CPtr] [CShort] [CSign] [CSng] [CUByte] [CUInt] [CULng] [CULngInt] [CUShort] [CUnsg] [CVD] [CVI] [CVL] [CVLongInt] [CVS] [CVShort] [Call] [Case] [Cast] [Cdecl] [ChDir] [Chain] [Chr] [Circle] [Class] [Clear] [Close] [Cls] [Color] [Command] [Common] [CondBroadcast] [CondCreate] [CondDestroy] [CondSignal] [CondWait ] [Const] [Const (Member)] [Const (Qualifier)] [Constructor] [Constructor (Module)] [Continue] [Cos] [CsrLin] [CurDir] [Custom (Graphics Put)] [Data] [Date] [DateAdd] [DateDiff] [DatePart] [DateSerial] |