2010年12月1日水曜日

nScript講座 第9回

帰ってきましたnScript講座!!では早速始めましょう。

講座は以下からどうぞ


サンプルを見てください。
//////////////////////////////////////
var user;

Function main() {
login();
loading();
puts("Hello! MobileTerm!!¥n¥n");
Sleep(1);
term();
}

Function loading() {
Sleep(1);
puts ("Loading user acount.....");
Sleep(1);
puts ("done¥n");
puts ("Import user library.....");
Sleep(1);
puts ("done¥n");
puts ("Change root.....");
Sleep(0.9);
puts ("done¥n");
puts ("Loading device driver.....");
Sleep(0.9);
puts ("done¥n");
puts ("Optioning system param.....");
Sleep(0.9);
puts ("done¥n");
puts ("Mount devices.....");
Sleep(1);
puts ("done¥n");
puts ("Install option drivers.....");
Sleep(1);
puts ("done¥n");
puts (".....");
Sleep(0.9);
puts ("done¥n");
puts ("Loading terminal command.....");
Sleep(1);
puts ("done¥n");
puts ("Start X.....¥n");
Sleep(1);
puts ("¥n¥n¥n¥n¥n¥n¥n¥n¥n¥n¥n¥n¥n¥n¥n¥n¥n");
Sleep(1);
}

Function login() {
while (1) {
puts("¥n¥n");
puts(" Login >");
user=gets(15);
if (user==(任意の名前N)) break;
puts("Wrong ID!!!");
continue;
}
}

Function term() {
while(1) {
puts("Shell ~%user% #");
cmd=gets(20);
}
}
//////////////////////////////////////

おお、随分と長くなりましたね。
結構無駄なことしてますからねーww
コピペでファイル作った方が得策です。今回に限っては。
任意の名前Nには、自分のIDでもなんでも好きなのをいれてください。
今回は、関数を続々と紹介していく予定をまたまた取りやめて、
疑似読み込み処理という無意味だけど気に入ってる処理を解説
します。
実行してみましたかー?
途中でログイン処理がありますね?
そこで任意の名前Nを入力してください。

では解説です。
今回は、簡易的なログイン処理と、先ほど言った擬似読み込み処理について
解説をしていきたいと思います。
えっと、今回は関数が4つもありますね。
main()と、loading()と、login()と、term()の4つです。これらはそれぞれ、
・関数を呼び出すコアとなる関数
・擬似読み込み処理だけわけた関数
・ログイン処理を行う関数
・一番使う、コマンド処理を行う関数
となっています。あと、全関数対象にuser変数がグローバルになっています。
ではいつものとおり上から順番に見ていきましょう。

まずmain関数。一番上にある関数なのでこれがコアになり、この関数を
抜けることによりプログラムが終了します。
いろんな関数を呼び出しているだけの関数ですので、まあ、見る必要はないでしょう。

次にloading関数ですね。
これは、待機関数Sleep()と、puts()をうまいこと並べて、超大容量のシェルの
ファイルだかなんかを、あたかも時間をかけて読み込ませているように偽装ができます。
解説といっても、、まあ、使ってみて、ここの感覚はこんな感じにするとそれっぽく
なるんだなあ、と、わけわからんような理解をしていてくれればいいです。
これは実行して眺めてれば勝手に終わってmain()に帰っていきます。

はいお次は今回一番重要なlogin関数です!
こっちはちょこっとわかりやすくチャート式に紐解きます。

while()の無限ループ開始。
文字表示、入力待ちをする。
入力された値をuserに代入。
条件分岐(userが任意の名前Nに一致するか?)
|(true)        |(false)
↓            ↓
breakする。     ログインできないと表示。
_______|
continueでwhileの先頭に戻る。

やじるし使ってわかりやすくがんばりました。
trueは真、falseは偽という意味です。
上図の要領でログイン処理を行います。
この関数からbreakすることで、main()に帰って、次のterm()が実行されます。

最後にterm関数ですね。
これは解説するまでもなく、前回までのコマンド処理の部分と同じです。
その代わり今回めんどうだったんで命令部はすべて省きました。
また、入力待ちの左側にちょっとした工夫がなされています。
実行してみればわかりますね?そのためにuserをグローバルにしておきました。
もしくは引数と返し値の回を参考にして、term関数に値を受け渡してもいいかも
知れませんね。その辺は任せます。

もうできるようになっていると思いますよ。

で、今回のterm()は、入力せど入力せど全部無視されるようになっているので......
ここに自分でswitch文を使ってコマンド処理を組み立てていってください!
前回のを参考にすればそう難しくないはずです。軽い演習です。


解説は以上となります。
今回までは細かめに、一個ずつ組み合わせて解説していきましたが、次回からは
必要なところだけ、適所適所で解説します。

サンプル制度もなくすかもしれません。

そうしたほうが自分で組めるようになると思うんです。

ですから、それまでの間に大体
・自分で知識を取り込む
・自分で書いたものに追加する
・もしくは一から書く
という3つのことをすぐにできるようになってほしいんです。

ずいぶんこっち放置したので、もうみんな完璧になってしまってるかもとかなり怖い
のですが、そんなこと気にしないでちゃーんと順番どおりにやっていきます。

では、がんばってください。

3 コメント:

よつ さんのコメント...

こんにちは、えっとlogin関数のuser変数なのですが
正しいユーザー名を入力してもコンティニューになってしまいます...
その割には0と入力すると認証されるので、多分なにかエラーが...
前回のものも結果がどこかおかしかった気がするので、多分グローバル変数のなにかがおかしくなってるんじゃないかと...
生意気すみませんでしたっ←w

mikan さんのコメント...

急遽検証したところ、おっしゃるとおりでした。
9回文字コードの問題でしょうか?実行したものと記事のものとで若干の誤差がありました。

8.5回は
if (a==10) b=20;

if (a==10) {
b=20;
}
に書き換える必要がありそうです。
{}内でなければ変数はグローバルとして働くっぽいです。
明日には記事の修正と、新しい記事の投稿ができそうです。
もう少々お待ちください.....

あと、間違いがあったら上目目線でじゃんじゃん指摘してください。。。
まだ駆け出しですんで...w

mikan さんのコメント...

9回は文字コードの問題もなにもありませんでした。
任意の文字列Nを""で囲い、ちゃんと文字列にしていますか?
そうしなかった場合、そこは変数として扱われ、初めて使われる変数として0で初期化されるために0を入力すると成功するのだと思います。

いかがでしょうか?

コメントを投稿

Related Posts Plugin for WordPress, Blogger...

 
Design by Free WordPress Themes | Bloggerized by Lasantha - Premium Blogger Themes | Walgreens Printable Coupons