00104 98/11/04 10:01 RE:00098 パスワードを表示しないで下さ
投稿者 : 秀まるお   コメントを投稿する

 えっと、%%付きの変数の仕様を変えてしまうとちょっとまずいので、新たに%%%付
きの変数で保護するという風にしようかなぁと…。

 send文以外では使えない特殊な変数という風にしてしまえば大丈夫だと思います。

 (まぁ、この場合でもパソコンを2台直結すれば見えてしまいますが)


00105 98/11/04 17:39 RE:00104 パスワードを表示しないで下さ
投稿者 : となりのニャンコ   コメントを投稿する

> えっと、%%付きの変数の仕様を変えてしまうとちょっとまずいので、新たに%%%付
>きの変数で保護するという風にしようかなぁと…。
>
> send文以外では使えない特殊な変数という風にしてしまえば大丈夫だと思います。
>
> (まぁ、この場合でもパソコンを2台直結すれば見えてしまいますが)
>
%%%変数なら出来ると言うことですが
以前のバージョンと互換性を持たせるとしたら

getversion ##ver
if(value( ##ver )=>437)
%%%PASS=%%PASS
%%PASS=""
endif

中略

  wait "LOGIN"
      send %ID + "^M"
  wait "PASSWORD"
if(value( ##ver )<437)send %%PASS + "^M"
if(value( ##ver )=>437)send %%%PASS + "^M"

となりのニャンコのスクリプトのように
こんな程度で済むスクリプトならいいかもしれませんが
パスワードを保存するかどうかを聞いてくるスクリプトとか
いろいろ複雑なのがありますもんね。

%%%変数にしたら、スクリプト作者からブーイングの嵐間違いなし。
となりのニャンコも捨て猫になってしまうのではないかな。

やっぱり ばらさないのが 一番 いちばん
   明日93番削除しちゃおーっと


00106 98/11/04 18:41 RE:00095 ddewaitadviceコマンドについて
投稿者 : となりのニャンコ   コメントを投稿する

よこしまさんへ
いろいろ実験してみました。

>timeout 60
>loopswitch
> case "選択して下さい"
> 処理
> case "リターンキーを押して下さい"
> 処理
> case "メッセージを編集しますか"
> 処理
> case "メッセージを登録しますか"
> 処理
> case postmilliidle(1) ""    ; ここを書き換えた
> 処理
> case timeout
> breakloop
>endloop

上のスクリプトで、case postmilliidle(1) ""のところにすべてが
集中するのではないかと心配したのですがその心配はないことが
確認できました。
 しかし、テキスト送信の再現という目的であれば
「処理」はすべて breakloop になりますので、
:選択して下さい
:リターンキーを押して下さい
:メッセージを編集しますか
:メッセージを登録しますか
のcaseはすべて不要と言うことになります。
それらがなければ、case postmilliidle(1) ""のところへ行きますから
それでエラーのcaseだけ書いておけばいいのではないでしょうか


timeout 6
       #lb = "true"
loopswitch
 case "コマンドが違います"
       #lb = "false"
 breakloop
 case postmilliidle(1)""    ; 「なんにもない」をwaitする
 breakloop
 case timeout
       #lb = "false"
 breakloop
endloop
if( #lb == "false" ) 
send"^M"
goto Ijyoshuuryou   ;異常終了処理サブルーチンへ
endif


もっと簡単なスクリプトにすると
wait postmilliidle(1)""    ; 「なんにもない」をwaitする
この1行だけですべてOKということになりますね。


00107 98/11/04 22:07 RE:00100 ddewaitadviceコマンドについて
投稿者 : よこしま   コメントを投稿する


こんにちは、となりのニャンコさん。
月曜日から出かけておりまして, 今日かえって
きました. コメントが遅くなりどうもすみません.


>このスクリプト間違ってるんじゃないですか
>そもそもcaseやwait命令で
>case ""    ; 「なんにもない」をwaitする
>なんてこと自体最初から無理なんじゃないですか。


もうほかの方からコメントがついていますが, 
確かに postimiliidle(n) がないとだめみたいですね.

いいわけをさせていただくと, 「loopswitch 文は
こんな風に使う」というつもりでかいたのであって
「この書き方がいい」というつもりで
かいたのではなかったのです.

「case timeout -> breakloop」
というのを入れておいたのも, 
「case には timeout を入れられるし, loopswitch を
ぬけるときは breakloop を使う」という程度のつもりで
書いていました. 

誤解を与えてしまったようでどうもすみません.

(かずやさんフォローありがとうございました.)

よこしま

Send 98/11/04


00108 98/11/04 22:27 RE:00106 ddewaitadviceコマンドについて
投稿者 : よこしま   コメントを投稿する

こんにちは、となりのニャンコさん。
ふたたびよこしまです.

>timeout 6
>       #lb = "true"
>loopswitch
> case "コマンドが違います"
>       #lb = "false"
> breakloop
> case postmilliidle(1)""    ; 「なんにもない」をwaitする
> breakloop
> case timeout
>       #lb = "false"
> breakloop
>endloop
>if( #lb == "false" ) 
>send"^M"
>goto Ijyoshuuryou   ;異常終了処理サブルーチンへ
>endif

場合が2つかないのであれば, switch 文で十分です.

---------------

timeout 6
switch
        case "コマンドが違います", timeout
                send"^M"
                goto Ijyoshuuryou   ;異常終了処理サブルーチンへ
        case postmilliidle(100) ""
                ; 何もしない
endswitch

----------------

loopswitch は受信する文字列がそのときに
よって違う場合に使います.

ちなみに文字列変数は処理が遅くなる場合があるので
可能な限り数値を使うのがいいと思います.




------------

##init = 0
timeout 6
switch
        case "コマンドが違います"
                ##init = -1
        case timeout
                send"^M"
        case postmilliidle(100) ""
                ##init = 1
endswitch

if(##init = -1)
        message "処理がおかしいです."
elseif(##init = 1)
        message "あなたの処理は正しいです."
else
        question "次の操作を処理をしますか?"
        if(no) 
                exit
        ensif
endif

次の処理
----------

よこしま

Send 98/11/04


新規に投稿する