home *** CD-ROM | disk | FTP | other *** search
/ DOS/V Power Report 1997 March / VPR9703A.ISO / OLS / Win31 / HT219 / HT219.LZH / NIF.SCR < prev    next >
Text File  |  1995-08-25  |  27KB  |  1,040 lines

  1. ; Nifty-Serve Fenics ROAD1 ~ ROAD4 兼用のスクリプトファイル
  2. ; ユーザIDとパスワードは一番最初に接続した時に聞いてきます。
  3. ; その時入力したIDとパスワードは永久的変数に記憶されるので2回目以降
  4. ; はもう聞いてこなくなります。
  5. ; IDとパスワードを書き換えたい場合は、「スクリプト・変数一覧」で、
  6. ; %NifIDと%%NifPasswordを削除してください。
  7.  
  8. ; 自動巡回機能が含まれています。詳しくはJunkai:サブルーチンのコメントを参照
  9. ; してください。
  10. ;  以下の場合は自動巡回は実行されません。
  11. ;  - MYFORUM.TXTが見つからない場合
  12. ;  - 現在の日付が前回自動巡回した時と同じ場合
  13.  
  14. ; その他、詳しくは所々にあるコメントを参照してください。
  15.  
  16.     gethostname #HostName
  17.     if( #HostName == "" ) goto ScriptSetup
  18.     afterhangup Atoshimatsu          ;     ハングアップ後にAtoshimatsu:に
  19.                                   ;     行くように指定します。
  20.     keyboard off
  21.     sleep 2                      ;     うまくログインしない場合はここを大きくする
  22.     readbuffer 1, #a
  23.     if( #a == "HOST NAME?" )
  24.         SEND "C NIF^M"
  25.     else
  26.         timeout 1
  27.         send "."              ;     うまくログインしない場合はここをコメントにする
  28.         wait "."
  29.         if( timeout )
  30.             send " P^M"
  31.         else
  32.             send "00+"
  33.         endif
  34.     endif
  35.     timeout 50
  36.     switch
  37.         case "^M^J*"
  38.             beginloop
  39.                 send "C NIF^M"
  40.                 switch
  41.                     case " Enter Connection-ID  --->"
  42.                         breakloop
  43.                     case "^M^J*"
  44.                         question "センターが接続要求を拒否しました。再試行しますか?"
  45.                         if( no ) hangup
  46.                     case timeout
  47.                         goto エラー
  48.                 endswitch
  49.             endloop
  50.         case " Enter Connection-ID  --->"
  51.             ; 続く
  52.         case timeout
  53.             goto エラー
  54.     endswitch
  55.     send "SVC^M"
  56.     wait " Enter User-ID  --->"
  57.     if( timeout ) goto エラー
  58.     if( %NifID == "" )
  59.         input "ユーザIDを入力してください。", %NifID
  60.         if( cancel )
  61.             hangup
  62.         endif
  63.     endif
  64. EnterUserID:
  65.     send %NifID + "^M"
  66.     switch
  67.         case " Enter Password --->"
  68.             ; 次に進む
  69.         case " User-ID Error"
  70.             #mes = %NifID + "はエラーです。正しいユーザIDを入力してください。"
  71.             input #mes, %NifID
  72.             if( cancel ) hangup
  73.             goto EnterUserID
  74.         case timeout
  75.             goto エラー
  76.     endswitch
  77.     #mes = "パスワードを入力してください。"
  78. EnterPassword:
  79.     if( %%NifPassword == "" )
  80.         secretinput #mes, %%NifPassword
  81.         if( cancel )
  82.             hangup
  83.         endif
  84.     endif
  85.     #temp = %%NifPassword
  86.     if( #temp == "毎回入力する" )
  87.         secretinput #mes, #temp
  88.         if( cancel )
  89.             hangup
  90.         endif
  91.     endif
  92.     send #temp + "^M"
  93.     switch
  94.         case "^M^Jようこそ"
  95.             ; 次に進む
  96.         case " Password ERROR"
  97.             #mes = #temp + "はエラーです。正しいパスワードを入力してください。"
  98.             if( %%NifPassword != "毎回入力する" )
  99.                 %%NifPassword = ""
  100.             endif
  101.             goto EnterPassword
  102.         case timeout
  103.             if( %%NifPassword != "毎回入力する" )
  104.                 %%NifPassword = ""
  105.                 message "入力したパスワードをクリアーしました。"
  106.             endif
  107.             goto エラー
  108.     endswitch
  109.  
  110.     timeout 0
  111.  
  112.     wait "前回"
  113.     getline #lastlog
  114.  
  115. ;************* 未読メールを自動で読みます。
  116. ;************* 必要ない方はコメントにしてください。
  117. ;    switch
  118. ;        case "未読分"
  119. ;            #mailread = "yes"
  120. ;            wait ">"
  121. ;        case ">"
  122. ;            ;
  123. ;    endswitch
  124.  
  125.     keyboard on
  126.  
  127. ;************* NIFTY用のキー割り当てを設定します。
  128. ;************* 必要ない方はコメントにしてください。
  129.     call SetNifKeyAssign
  130.  
  131. ;******************* 自動するかどうかを聞いてきます。
  132. ;******************* うっとおしい方はコメントにしてください。
  133. ;******************* 単に#junkau = "yes"にすると巡回します。
  134. ;    chdir upload
  135. ;    if( existfile( "MYFORUM.TXT" ) )
  136. ;        restoredir
  137. ;        getdate #date
  138. ;        if( #date != %JunkaiDate )
  139. ;            %JunkaiDate = #date
  140. ;            question "自動巡回をしますか?"
  141. ;            if( yes ) #junkai = "yes"
  142. ;        endif
  143. ;    endif
  144. ;    restoredir
  145.  
  146. ;************* 前回ログイン日付・時間をチェックします。
  147. ;************* もし日付・時間が違っていた場合は他人がIDを
  148. ;************* 盗用した可能性も有ります。
  149.     call CheckAccessDate #lastlog
  150.  
  151.     #lastlog = ""
  152.  
  153.     if( #mailread == "yes" ) call AutoMailRead
  154.     if( #junkai == "yes" ) call Junkai
  155.  
  156. ;******************* NIFTY用のログの作成を開始します。
  157.     call BeginLog
  158.  
  159. WaitLogOff:
  160.     timeout 0
  161.     loopswitch
  162.         case "^M^J ご利用誠にありがとうございました。^M^J"
  163.             breakloop
  164.         case "のユーザーからのメッセージです-^M^J"
  165.             readbuffer 1, #line
  166.             timeout 3
  167.             wait "^M^J"
  168.             if( timeout ) goto WaitLogOff
  169.             millitimeout 500
  170.             getchar #ch
  171.             if( not timeout ) goto WaitLogOff
  172.             play "!"
  173.             timeout 0
  174.             ##i = 2
  175.             beginloop
  176.                 readbuffer ##i, #line
  177.                 if( search( #line, "メッセージです" ) != "" )
  178.                     #id = part( search( #line, "-" ), 2, 8 )
  179.                     input #id + "に送り返すメッセージ", #message
  180.                     if( cancel ) breakloop;
  181.                     if( #message == "" ) breakloop;
  182.                     send "SEND " + #id + " " + #message + "^M"
  183.                     breakloop
  184.                 endif
  185.                 ##i = ##i + 1
  186.                 if( ##i > 10 )
  187.                     breakloop
  188.                 endif
  189.             endloop
  190.     endloop
  191.  
  192.     ##c = 0
  193.     timeout 10
  194.     loopswitch
  195.         case "^M^J"
  196.             ##c = ##c + 1
  197.             if( ##c >= 10 ) goto WaitLogOff
  198.         case "--->"
  199.             goto WaitLogOff
  200.         case postmilliidle(500) "+", postmilliidle(500) "*"
  201.             hangup
  202.         case postidle(1) ">", postidle(1) "CCS(N)>"
  203.             goto WaitLogOff
  204.         case timeout
  205.             goto WaitLogOff
  206.     endloop
  207.     hangup
  208.  
  209. エラー:
  210.     afterhangup ErrorHangup
  211.     hangup
  212.  
  213. ErrorHangup:
  214.     message "エラーが発生したので電話を切りました。"
  215.     return
  216.  
  217. ;************** ログを作成するサブルーチンです。
  218. ;************** 好きなように直して使ってください。
  219. BeginLog:
  220.     if( %NifLogStyle == "" )
  221.         menu "ログの作成方法を指定してください。", \
  222.              "&1 NIFTY.LOGというファイルに作成する。500Kバイトごとにバックアップする。", \
  223.              "&2 NIFmmdd.LOGというファイルに作成する。mmは月、ddは日", \
  224.              "&3 NIFyymm.LOGというファイルに作成する。yyは年、mmは月"
  225.         if( result == -1 or result == 0 )
  226.             %NifLogStyle = 0
  227.         else
  228.             %NifLogStyle = result
  229.         endif
  230.     endif
  231.     if( value(%NifLogStyle) == 1 )
  232.         log "NIFTY.LOG", 500    ;  サイズ制限500KBで作成します。
  233.     elseif( value(%NifLogStyle) == 2 )
  234.         getdate #date
  235.         log "NIF" + part( #date, 2, 4 ) + ".LOG"
  236.     else
  237.         getdate #date
  238.         log "NIF" + part( #date, 0, 4 ) + ".LOG"
  239.     endif
  240. return
  241.  
  242. ;***************************************
  243. ;****    パスワード変更処理      **********
  244. ;***************************************
  245. ChangePassword:
  246.     if(%%NifPassword == "毎回入力する")
  247.         secretinput "現在のパスワードを入力して下さい。", %%NifPasswordNow
  248.         if(cancel)
  249.             %%NifPasswordNow = ""
  250.             message "中止します。"
  251.             return
  252.         endif
  253.     else
  254.         %%NifPasswordNow = %%NifPassword
  255.     endif
  256.     message "新しいパスワードを入力して下さい。(合計6~8文字)^M^Jアルファベット (最低1文字以上) と数字か記号 (最低1文字以上)^M^JただしIDと同一の文字列は不可。"
  257.     input "使用可能文字:^M^J A-Z a-z 0-9^M^J ! ^" # $ % & ' ( ) * + , - . / : ; < = > ? @ [ \ ] ^ _ ` { | } ~", %%NifPasswordNew
  258.     if(cancel)
  259.         %%NifPasswordNow = ""
  260.         %%NifPasswordNew = ""
  261.         message "中止します。"
  262.         return
  263.     else
  264.         question "新しいパスワードに変更してよろしいですか?"
  265.         if(no)
  266.             %%NifPasswordNow = ""
  267.             %%NifPasswordNew = ""
  268.             message "中止します。"
  269.             return
  270.         endif
  271.     endif
  272.  
  273.     readbuffer 0,#line
  274.     if( #line != "現パスワードの入力" )
  275.         readbuffer 1,#line
  276.         if( #line != "現パスワードの入力" )
  277.             send "GO PASSWORD^M"
  278.             wait "^M^J:"
  279.         endif
  280.     endif
  281.     send %%NifPasswordNow + "^M"
  282.     loopswitch
  283.         case "^M^J◆パスワードが間違っています◆","^M^J◆パスワードの入力形式が誤っています◆"
  284.             question "現在のパスワードが間違っています。^M^Jもう一度入力しますか?"
  285.             if(yes)
  286.                 input "現在のパスワードを入力して下さい。", %%NifPasswordNow
  287.                 if(cancel)
  288.                     %%NifPasswordNow = ""
  289.                     %%NifPasswordNew = ""
  290.                     message "中止します。"
  291.                     send "^M"
  292.                     return
  293.                 endif
  294.             else
  295.                 %%NifPasswordNow = ""
  296.                 %%NifPasswordNew = ""
  297.                 message "中止します。"
  298.                 send "^M"
  299.                 return
  300.             endif
  301.             send %%NifPasswordNow + "^M"
  302.             loopagain
  303.         case "^M^J新パスワードの入力^M^J:"
  304.             breakloop
  305.     endloop
  306.     send %%NifPasswordNew + "^M"
  307.     loopswitch
  308.         case "^M^J◆パスワードの入力形式が誤っています◆"
  309.             question "新しいパスワードの形式が間違っています。もう一度入力しますか?"
  310.             if(yes)
  311.                 input "新しいパスワードを入力して下さい。", %%NifPasswordNew
  312.                 if(cancel)
  313.                     %%NifPasswordNow = ""
  314.                     %%NifPasswordNew = ""
  315.                     message "中止します。"
  316.                     send "^M"
  317.                     return
  318.                 endif
  319.             else
  320.                 %%NifPasswordNow = ""
  321.                 %%NifPasswordNew = ""
  322.                 message "中止します。"
  323.                 send "^M"
  324.                 return
  325.             endif
  326.             send %%NifPasswordNew + "^M"
  327.         case "^M^J新パスワードの再入力^M^J:"
  328.             send %%NifPasswordNew + "^M"
  329.         case "^M^Jパスワードは変更されました。"
  330.             message "パスワードは正常に変更されました。新しいパスワードは「" + %%NifPasswordNew + "」です。忘れないでください。"
  331.             breakloop
  332.     endloop
  333.     if(%%NifPassword != "")
  334.         question "変更したパスワードを秀Termに記憶させますか?^M^J記憶させない場合はアクセスの際に入力を求めます。"
  335.         if(yes)
  336.             %%NifPassword = %%NifPasswordNew
  337.         else
  338.             %%NifPassword = "毎回入力する"
  339.         endif
  340.     endif
  341.     %%NifPasswordNow = ""
  342.     %%NifPasswordNew = ""
  343. return
  344.  
  345. AutoMailRead2:
  346.     call AutoMailRead
  347.     call AutoMailDelete
  348.     send "BYE^M"
  349.     return
  350.  
  351. ;***************************************
  352. ;****    未読メール処理          **********
  353. ;***************************************
  354. AutoMailRead:
  355.     readbuffer 0,#line
  356.     if( #line != "MAIL>" )
  357.         readbuffer 1,#line
  358.         if( #line != "電子メール(1:受信 2:送信 3:送信簿 0:その他 E:終了)" )
  359.             send "MAIL^M"
  360.             wait "^M^J>", "^M^JMAIL>"
  361.         endif
  362.     endif
  363.     send "READ NEW^M"
  364.     wait "^M^J"
  365.  
  366. ;******************** メール専用のログを作成します。
  367.     log "NIFMAIL.LOG", 500
  368.  
  369.     loopswitch
  370.         case postmilliidle(200) "続き (改行で表示 E:終了)^M^J>" \
  371.            , postmilliidle(200) "続き (改行で次頁 S:次文書 E:終了)^M^J>"
  372.             send "^M"
  373.         case postmilliidle(200) "受信後 (1:削除  2:保存  3:返信  4:返信+削除  5:転送  6:転送+削除  E:終了)" \
  374.            + "^M^J:", \
  375.              postmilliidle(200) "受信後 (1:削除  2:保存  *:返信  *:返信+削除  5:転送  6:転送+削除  E:終了)" \
  376.            + "^M^J:"
  377.             send "2^M"
  378.         case postmilliidle(200) "電子メール(1:受信 2:送信 3:送信簿 0:その他 E:終了)" \
  379.            + "^M^J>"
  380.             breakloop
  381.         case postmilliidle(200) "^M^Jaction:", postidle(2) "action:"
  382.             send "sav^M"
  383.         case postmilliidle(500) "^M^JMAIL>", postidle(2) "MAIL>"
  384.             breakloop
  385.     endloop
  386.  
  387. ;***************** NIFのログに戻ります。
  388.     call BeginLog
  389. return
  390.  
  391. ;***************************************
  392. ;****    メール削除処理          **********
  393. ;***************************************
  394. AutoMailDelete:
  395.     readbuffer 0,#line
  396.     if( #line != "MAIL>" )
  397.         readbuffer 1,#line
  398.         if( #line != "電子メール(1:受信 2:送信 3:送信簿 0:その他 E:終了)" )
  399.             send "MAIL^M"
  400.             wait "^M^J>", "^M^JMAIL>"
  401.         endif
  402.     endif
  403.     send "DEL 1-^M"
  404.     loopswitch
  405.         case "^M^J:"
  406.             readbuffer 2,#line
  407.             if( part( #line, 0, 1 ) == "*" )
  408.                 send "1^M"
  409.             else
  410.                 send "2^M"
  411.             endif
  412.         case postmilliidle(500) ">", postmilliidle(500) "MAIL>"
  413.             breakloop
  414.     endloop
  415. return
  416.  
  417. ;**************************
  418. ;*Download Name の自動拾得*
  419. ;**************************
  420. ;  by 青い雷殿    (のを斉藤秀夫が自分風にしました)
  421. AutoDNSelect:
  422.     ##i = 0
  423.     #name = ""
  424.     while( #name == "" )
  425.         ##i = ##i + 1
  426.         if( ##i > 500 )
  427.             message "ダウンロードデータ名が見つかりませんでした"
  428.             return
  429.         endif
  430.         readbuffer ##i,#buf
  431.         #name = search( #buf,"データ名:" )
  432.     endwhile
  433.     #name = part( #name, 10, 255 )        ; "データ名:"を取り除く
  434.     if( search( drop( #name, " " ), "." ) == "" )
  435.         ; ".LZH"と、その前に空白が入っている場合の処理
  436.         #name = drop( #name, " " ) + drop( search( #name, "." ), " " )
  437.     else
  438.         #name = drop( #name, " " )            ; ファイル名の後ろを取り除く
  439.     endif
  440.     send #name
  441. return
  442.  
  443. ; ファイル名入力(アップロード用)
  444. SendFileName:
  445.     chdir upload
  446.     inputfilename "ファイル名", #name
  447.     restoredir
  448.     if( enter )
  449.         send #name + "^M"
  450.     endif
  451. return
  452.  
  453. ;************ チャットモードにします
  454. ChatMode:
  455.     keyassign f1, "F1", string, ""
  456.     keyassign f2, "F2", string, ""
  457.     keyassign f3, "F3", string, ""
  458.     keyassign f4, "F4", string, ""
  459.     keyassign f5, "F5", string, ""
  460.     keyassign f6, "F6", string, ""
  461.     keyassign f7, "F7", string, ""
  462.     call "CSC.SCR"
  463.     call SetNifKeyAssign
  464. return
  465.  
  466. ;**************** ファイルに入っているIDを全部送信します *******
  467. ; by 秀まるお
  468. ;  第1パラメタでメールのファイル名を指定でき、
  469. ;  第2パラメタでIDの入っているファイル名を指定できます。
  470. ;  ファイルはアップロード用のディレクトリにないといけません。
  471. ;  秀Termの登録ユーザの方にメールを送るために作りました。
  472.  
  473. SendID:
  474.     if( #1 == "" )
  475.         input "メールのファイル名を指定してください。", #1
  476.         if( cancel ) return
  477.     endif
  478.     if( #2 == "" )
  479.         input "ユーザIDの入っているファイル名を指定してください。", #2
  480.         if( cancel ) return
  481.     endif
  482.     input "題名を指定してください。", #title
  483.     if( cancel ) return
  484.     readbuffer 0, #line
  485.     if( #line == "FORUM>" )
  486.         #smail = "yes"
  487.     endif
  488.     if( not #smail )
  489.         send "MAIL^M"
  490.         timeout 20
  491.         switch
  492.             case "電子メール(1:受信 2:送信 3:送信簿 0:その他 E:終了)^M^J>"
  493.                 ;
  494.             case timeout, "番号"
  495.                 message "電子メールに行けませんでした。"
  496.                 return
  497.         endswitch
  498.         timeout 0
  499.     endif
  500.     chdir upload
  501.     openfile #2
  502.     restoredir
  503.     if( no )
  504.         message "ユーザIDファイルのオープンに失敗しました。"
  505.         return
  506.     endif
  507.     ##count = 0
  508.     call GetID #2
  509.     if( #return == "" )
  510.         message #2 + "にはユーザIDがありません。"
  511.         closefile #2
  512.         return
  513.     endif
  514. SendID_ReSend:
  515.     if( #smail )
  516.         send "SMAIL^M"
  517.     else
  518.         send "2^M"
  519.     endif
  520.     wait "本文(300 行まで 終了は行頭で/E)^M^J"
  521.     ##cID = 1
  522.     ##count = ##count + 1
  523.     send "TO:" + #return + "^M"
  524.     while( ##cID < 10 )
  525.         call GetID #2
  526.         if( #return == "" ) breakloop;
  527.         ##count = ##count + 1
  528.         send "TO:" + #return + "^M"
  529.         ##cID = ##cID + 1;
  530.     endwhile
  531.     upload #1, none
  532.     if( no )
  533.         closefile #2
  534.         message "中止します"
  535.         return
  536.     endif
  537.     loopswitch
  538.         case "修正 (1:修正する 2:しない)^M^J:"
  539.             send "2^M"
  540.         case "題名 (漢字で20文字まで)^M^J:"
  541.             send #title + "^M"
  542.             wait "^M^J:"                     ; 確認
  543.             send "1^M"
  544.         case "宛先 (IDか同報グループ名 改行で終了)^M^J:" \
  545.            , "宛先 (IDか同報グループ名又は FAX番号 改行で終了)^M^J:"
  546.             breakloop
  547.         case "-送信完了-^M^J"
  548. ; 高速化
  549. ;            if( #smail )
  550. ;                wait "FORUM>"
  551. ;            else
  552. ;                wait "電子メール(1:受信 2:送信 3:送信簿 0:その他 E:終了)^M^J>"
  553. ;            endif
  554.             call GetID #2
  555.             if( #return != "" )
  556.                 goto SendID_ReSend
  557.             else
  558.                 closefile #2
  559.                 message ##count + "人にメールを送りました。"
  560.                 return;
  561.             endif
  562.     endloop
  563.     beginloop
  564.         ##count = ##count + 1
  565.         send #return + "^M"
  566.         wait "^M^J:"                 ; 確認
  567.         send "1^M"
  568.         switch
  569.             case "宛先 (IDか同報グループ名 改行で終了)^M^J:" \
  570.                , "宛先 (IDか同報グループ名又は FAX番号 改行で終了)^M^J:"
  571.                 call GetID #2
  572.                 if( #return == "" )
  573.                     send "^M"
  574.                     wait "送信 (1:送信する 2:しない)^M^J:"
  575.                     send "1^M"
  576.                     breakloop
  577.                 endif
  578.             case "送信 (1:送信する 2:しない)^M^J:"
  579.                 send "1^M"
  580.                 if( #smail )
  581.                     wait "FORUM>"
  582.                 else
  583.                     wait "電子メール(1:受信 2:送信 3:送信簿 0:その他 E:終了)^M^J>"
  584.                 endif
  585.                 call GetID #2
  586.                 if( #return != "" )
  587.                     goto SendID_ReSend
  588.                 else
  589.                     breakloop
  590.                 endif
  591.             case "-送信完了-"
  592.                 if( #smail )
  593.                     wait "FORUM>"
  594.                 else
  595.                     wait "電子メール(1:受信 2:送信 3:送信簿 0:その他 E:終了)^M^J>"
  596.                 endif
  597.                 call GetID #2
  598.                 if( #return != "" )
  599.                     goto SendID_ReSend
  600.                 else
  601.                     breakloop
  602.                 endif
  603.         endswitch
  604.     endloop
  605.     closefile #2
  606.     message ##count + "人にメールを送りました。"
  607. return
  608.  
  609. ; ファイルからユーザIDを取り出す
  610. ;  call GetID ファイル名 で呼び出すこと。
  611. ;  ファイル名で指定するファイルはあらかじめopenfileされてないといけない
  612. ;
  613. GetID:
  614.     beginloop
  615.         readfile #1, #line
  616.         if( no ) return ""                ; ファイルの最後まで行ったら""を返す
  617.         if( #line == "" ) goto GetID
  618.         ##len = length(#line) - 8
  619.         if( search( #line, "PCV>" ) != "" )
  620.             return part( search( #line, "PCV>" ), 4, 8 );
  621.         endif
  622.         if( search( #line, "INET:" ) != "" )
  623.             #line = search( #line, "INET:" );
  624.             ##i = 5
  625.             beginloop
  626.                 #a = part( #line, ##i, 1 )
  627.                 if( #a <= " " or #a >= "^080" or #a == "," ) breakloop
  628.                 ##i = ##i + 1
  629.             endloop
  630.             return part( #line, 0, ##i );
  631.         endif
  632.         ##i = 0
  633.         while( ##i <= ##len )
  634.             #id = part( #line, ##i, 1 )
  635.             if( #id < "A" or #id > "Z" ) goto GetIDContinue
  636.             #id = part( #line, ##i + 1, 1 )
  637.             if( #id < "A" or #id > "Z" ) goto GetIDContinue
  638.             #id = part( #line, ##i + 2, 1 )
  639.             if( #id < "A" or #id > "Z" ) goto GetIDContinue
  640.             #id = part( #line, ##i + 3, 1 )
  641.             if( #id < "0" or #id > "9" ) goto GetIDContinue
  642.             #id = part( #line, ##i + 4, 1 )
  643.             if( #id < "0" or #id > "9" ) goto GetIDContinue
  644.             #id = part( #line, ##i + 5, 1 )
  645.             if( #id < "0" or #id > "9" ) goto GetIDContinue
  646.             #id = part( #line, ##i + 6, 1 )
  647.             if( #id < "0" or #id > "9" ) goto GetIDContinue
  648.             #id = part( #line, ##i + 7, 1 )
  649.             if( #id < "0" or #id > "9" ) goto GetIDContinue
  650.             return part( #line, ##i, 8 )
  651.         GetIDContinue:
  652.             ##i = ##i + 1
  653.         endwhile
  654.     endloop
  655. return
  656.  
  657. CheckAccessDate:
  658.     if(%%LastLogDate == "")
  659.         writebuffer2 "^M^JNIF.SCR よりのお知らせ:前回アクセスの日付情報は登録されていません。^M^J"
  660.     else
  661.         #a = part(#1, 8, 255)
  662.         ##len = length(#a) - 1
  663.         if(part(#a, ##len, 1) == "^M")
  664.             #a = part(#a, 0, ##len)
  665.         endif
  666.         if(#a == %%LastLogDate)
  667.             writebuffer2 "^M^JNIF.SCR よりのお知らせ:前回アクセスの日付情報チェックはOKでした。^M^J"
  668.         else
  669.             writebuffer2 "^M^JNIF.SCR よりのお知らせ:前回LOG OUT時間が記録内容と違っています。このスクリプトを使わずにアクセスした覚えが無い場合,パスワード漏出など最悪の事態を想定して,パスワードを変更することをお薦めします。^M^J"
  670.         endif
  671.     endif
  672.     %%LastLogDate = ""
  673. return
  674.  
  675. KeepAccessDate:
  676.     beginloop
  677.         readbuffer ##i, #a
  678.         if(search(#a, "LOG OUT --- ") != "")
  679.             breakloop
  680.         endif
  681.         ##i = ##i + 1
  682.         if(##i > 20)
  683.             #a = ""
  684.             breakloop
  685.         endif
  686.     endloop
  687.     if(#a != "")
  688.         %%LastLogDate = part(#a, 23, 255)
  689.     endif
  690. return
  691.  
  692. ;************ 各種キー割当て処理
  693. SetNifKeyAssign:
  694.     keyassign f1, "未読メール", script, AutoMailRead
  695.     keyassign f2, "巡回", script, Junkai
  696.     keyassign f3, "メール削除", script, AutoMailDelete
  697.     keyassign f4, "ファイル名探し", script, AutoDNSelect
  698.     keyassign f5, "ファイル名入力", script, SendFileName
  699.     keyassign f6, "UST2", string, "UST2^M"
  700.     keyassign f7, "ID送信", script, SendID
  701.     keyassign f8, "チャット", script, ChatMode
  702.     keyassign f9, "パスワード変更", script, ChangePassword
  703.     keyassign f10, "セットアップ", script, ScriptSetup2
  704.     keyassign f11, "メール読んで落ち", script, AutoMailRead2
  705. return
  706.  
  707. ;**************** 後始末処理です *******************
  708. Atoshimatsu:
  709.     call KeepAccessDate
  710.     savebuffer
  711. ;    #hour = part( #1, 0, 2 )
  712. ;    #minute = part( #1, 2, 2 )
  713. ;    #second = part( #1, 4, 2 )
  714. ;    #mes = "通話時間は"
  715. ;    if( #hour != "00" )
  716. ;        #mes = #mes + #hour + "時間"
  717. ;    endif
  718.     ; #mes = #mes + #minute + "分" + #second + "秒でした"
  719.     ; message #mes
  720.     ; closehideterm       ・・・ 秀Termを自動終了させる場合はここにclosehideterm
  721.                         ;  コマンドを入れましょう。
  722.     return
  723.  
  724. ;***************************************************************************
  725. ; フォーラムの会議室を自動で読むスクリプトのサブルーチンです。
  726. ; とある方からの要望でつくりました。
  727. ;
  728. ; 機能は、
  729. ;      - 読みたい会議室の名前を複数指定できる
  730. ;      - 各フォーラムごと、または各会議室ごとに別々のログが取れる
  731. ;      - フォーラム内の特定の会議室だけを指定できる
  732. ;      - それらの指定はアップロード用の所の"MYFORUM.TXT"に入れておけばよい
  733. ;
  734. ;  "MYFORUM.TXT"の作り方
  735. ;      - MYFORUM.TXTは、アップロード用のディレクトリに作成してください。
  736. ;        メール編集で編集できます。
  737. ;      - 1行に、「フォーラム名」、「ログのファイル名」、「会議室番号」を
  738. ;        指定してください。指定の方法は、以下のとうりです。
  739. ;
  740. ;             フォーラム名, ログのファイル名, 番号, 番号,・・・
  741. ;
  742. ;          ログのファイル名または(会議室の)番号は省略できます。
  743. ;          ログのファイル名を省略すると、ログは各会議室ごとに、フォーラム名
  744. ;        と会議室番号をくっつけた名前で作成されます。拡張子は".LOG"になりま
  745. ;        す。ファイル名が8+3文字を越えると適当に縮められます。
  746. ;          番号を一つも指定しないでおくと、全ての会議室を読みます。
  747. ;          例:
  748. ;             FPSY
  749. ;             FFMPRO , FFMPRO.LOG
  750. ;             FNEC98 , FNEC98.LOG , 1,2,3,4,5
  751. ;             FIBMPRO,             , 1,3,4,5
  752. ;
  753. ;          同じフォーラムの各会議室ごとにログの名前を指定したい場合は、次の
  754. ;        ように指定してください。
  755. ;
  756. ;            FNEC98, FNECDL.LOG, 1
  757. ;            FNEC98, FNEC.LOG, 9
  758. ;            FNEC98, FNECWS.LOG, 12
  759. ;
  760. ;          普通はMREコマンドを使って会議室を見ていきますが、DOW NEW コマンド
  761. ;        を使ってBPLUSで高速にダウンロードすることもできます。
  762. ;          BPLUSでダウンロードするには、最後にコンマとBPLUSを付けてください。
  763. ;            例:
  764. ;              FMEC98, BPLUS
  765. ;              FIBMPRO, FIBMPRO.LOG, BPLUS
  766. ;              FNEC98, FNECWS.LOG, 12, BPLUS
  767. ;
  768. ;          フォーラムのリストの最後にBYEを入れておくと最後に電話を切ります。
  769. ;            例:
  770. ;              FNEC98
  771. ;              FC
  772. ;              BYE
  773. ;
  774. Junkai:
  775.     #file = "MYFORUM.TXT"
  776.     chdir upload
  777.     openfile #file
  778.     restoredir
  779.     if( no )
  780.         message "MYFORUM.TXTが見つかりません。"
  781.         return
  782.     endif
  783.     beginloop
  784. JunkaiLoop:
  785.         readfile #file, #line
  786.         if( no ) breakloop
  787.     ; #lineの中の空白を除去する
  788.         ##i = 0
  789.         beginloop
  790.             #p = part( #line, ##i, 1 )
  791.             if( #p == "" ) breakloop
  792.             if( #p <= " " )
  793.                 #line = part( #line, 0, ##i ) + part( #line, ##i + 1, 255 )
  794.             else
  795.                 ##i = ##i + 1
  796.             endif
  797.         endloop
  798.         ##i = 0
  799.         beginloop
  800.             #p = part( #line, ##i, 1 )
  801.             if( #p == "" or #p == "," ) breakloop
  802.             ##i = ##i + 1
  803.         endloop
  804.         #forum = part( #line, 0, ##i )
  805.         if( #forum == "" ) goto JunkaiLoop
  806.         if( #forum == "BYE" )
  807.             send "BYE^M"
  808.             goto WaitLogOff
  809.         endif
  810.         #line = part( #line, ##i, 255 )
  811.         if( part( #line, 0, 1 ) == "," )
  812.             #line = part( #line, 1, 255 )
  813.         endif
  814.         if( #line == "" or part( #line, 0, 1 ) == "," )
  815.             #log = ""
  816.             #line = part( #line, 1, 255 )
  817.         else
  818.             ##i = 0
  819.             beginloop
  820.                 #p = part( #line, ##i, 1 )
  821.                 if( #p == "" or #p == "," ) breakloop
  822.                 ##i = ##i + 1
  823.             endloop
  824.             #log = part( #line, 0, ##i )
  825.             #line = part( #line, ##i, 255 )
  826.         endif
  827.         #bplus = "no"
  828.         if( toupper(#log) == "BPLUS" )
  829.             #log = ""
  830.             #bplus = "yes"
  831.         endif
  832.         if( part( #line, 0, 1 ) == "," )
  833.             #line = part( #line, 1, 255 )
  834.         endif
  835.         #meslist = ""
  836.         #line = toupper( #line )
  837.         while( #line != "" )
  838.             if( part( #line, 0, 5 ) == "BPLUS" )
  839.                 #bplus = "yes"
  840.                 breakloop
  841.             endif
  842.             beginloop
  843.                 #p = part( #line, 0, 1 )
  844.                 if( #p < "0" or #p > "9" ) breakloop
  845.                 #meslist = #meslist + #p
  846.                 #line = part( #line, 1, 255 )
  847.             endloop
  848.             if( #line != "" )
  849.                 #meslist = #meslist + ","
  850.                 if( part( #line, 0, 1 ) != "," )
  851.                     message "MYFORUM.TXTの会議室番号がおかしいです。^M" \
  852.                           + "フォーラム名:" + #forum
  853.                     closefile #file
  854.                     return
  855.                 endif
  856.                 #line = part( #line, 1, 255 )
  857.             endif
  858.         endwhile
  859.         if( #forum != #prevforum )
  860.             call GoForumMes #forum
  861.             #yetlist = #return
  862.         endif
  863.         if( #meslist == "" )
  864.             #meslist = "1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30"
  865.         endif
  866.         call Intersect #yetlist, #meslist
  867.         #list = #return
  868.         if( #bplus == "yes" )
  869.             call DownloadMes #list, #log, #forum
  870.         else
  871.             call ReadMes #list, #log, #forum
  872.         endif
  873.         #prevforum = #forum
  874.     endloop
  875.     closefile #file
  876.     call BeginLog
  877. return
  878.  
  879. GoForumMes:
  880.     timeout 60
  881.     send "GO "+#1+"^M"
  882.     loopswitch
  883.         case "続き (改行で表示 E:終了)^M^J>", \
  884.              "more>"
  885.             send "^M"
  886.         case "^M^JFORUM>", postidle(1) "^M^J>"
  887.             breakloop
  888.         case "◆番号又はコマンドを入力して下さい◆", timeout
  889.             message #1 + "に行けませんでした"
  890.             return
  891.     endloop
  892.     send "MES^M"
  893.     wait "^M^J番号 発言 (未読)  最新  会議室名^M^J"
  894.     #list = ""
  895.     beginloop
  896.         getchar #a
  897.         if( #a == ">" )
  898.             breakloop
  899.         elseif( #a == "m" )    ; "more>"
  900.             wait ">"
  901.             send "^M";
  902.             wait "^M^J"
  903.             loopagain;
  904.         endif
  905.         getline #line
  906.         #line = #a + #line
  907.         if( part( #line, 0, 4 ) == "番号" )
  908.             wait ">"
  909.             send "^M"
  910.             wait "^M^J"
  911.             loopagain;
  912.         endif
  913.         if( part( #line, 13, 3 ) != "  0" )
  914.             if( part( #line, 0, 1 ) == " " )
  915.                 #list = #list + part( #line, 1, 1 ) + ","
  916.             else
  917.                 #list = #list + part( #line, 0, 2 ) + ","
  918.             endif
  919.         endif
  920.     endloop
  921. return #list
  922.  
  923. ; #1と#2の共通部分を計算します
  924. Intersect:
  925.     #1 = "," + #1 + ","
  926.     while( #2 != "" )
  927.         #num = drop( #2, "," )
  928.         #2 = part( search( #2, "," ), 1, 255 )
  929.         if( search( #1, "," + #num + "," ) != "" )
  930.             #result = #result + #num + ","
  931.         endif
  932.     endwhile
  933. return #result
  934.  
  935. ; 指定されたフォーラムの特定の会議室の内容を読む。
  936. ; パラメタ1: 会議室のリスト
  937. ; パラメタ2: ログの名前(例:FFMPRO.LOG)
  938. ;                指定なしの場合はログは取られない。
  939. ; パラメタ3: 会議室の番号をコンマで区切る(例:"1,2,3")
  940. ;                パラメタ3が指定されない場合は全ての会議室となる
  941. ;
  942. ;    例:  ReadMes "1,2,3", "FFMPRO.LOG", "FFMPRO"
  943. ;          ReadMes "1,2,3,4", "", "FIBMPRO"
  944. ;          ReadMes "1,10"
  945. ;          ReadMes "1,10", "FFMPRO.LOG"
  946. ;
  947. ReadMes:
  948.     if( #1 == "" ) return
  949.     #3 = part( #3, 0, 6 )
  950.     readbuffer 0, #line0
  951.     readbuffer 1, #line1
  952.     if( #line0 == "CCS(N)>" \
  953.      or ( #line0 == ">" \
  954.       and #line1 == "電子会議 (1:発言 改行のみ: 読む) 通常モード" ) )
  955.         send "MES^M"
  956.         wait postidle(1) ">"
  957.     endif
  958.     if( #2 != "" ) log #2, 500
  959.     while( #1 != "" )
  960.         #room = drop( #1, "," )
  961.         #1 = part( search( #1, "," ), 1, 255 )
  962.         if( #2 == "" )
  963.             log #3 + #room + ".LOG", 500
  964.         endif
  965.         send "MRE ROOM:" + #room + "^M"
  966.         wait postidle(1) "^M^J>"
  967.     endwhile
  968.     log
  969. return
  970.  
  971. DownloadMes:
  972.     if( #1 == "" ) return
  973.     #3 = part( #3, 0, 6 )
  974.     getini "HIDETERM.INI", "HideTerm", "LogPath", #logpath
  975.     if( part( #logpath, length(#logpath) - 1, 1 ) != "\" )
  976.         #logpath = #logpath + "\"
  977.     endif
  978.     port autobplus = off
  979.     while( #1 != "" )
  980.         #room = drop( #1, "," )
  981.         #1 = part( search( #1, "," ), 1, 255 )
  982.         send "MES " + #room + "^M"
  983.         wait "^M^J>", "^M^JCCS(N)>"
  984.         send "DOW NEW PROT:BPL^M"
  985.         switch
  986.             case "^M^J:"
  987.                 ; 続き
  988.             case "^M^JCCS(N)>", "^M^J>"
  989.                 ; ブレーク信号が送信された
  990.                 return
  991.         endswitch
  992.         if( #2 == "" )
  993.             #filename = #logpath + #3 + #room + ".LOG"
  994.         else
  995.             #filename = #logpath + #2
  996.         endif
  997.         send #filename + "^M"
  998.         wait "^E"
  999.         download #filename, bplus, append
  1000.         wait "^M^J>", "^M^JCCS(N)>"
  1001.     endwhile
  1002.     port autobplus = on
  1003. return
  1004.  
  1005. ScriptSetup2:
  1006.     message "NIF.SCRのセットアップは、どことも通信してない状態で「スクリプト・スクリプト実行...」でNIF.SCRを実行することでも行う事ができます。"
  1007.  
  1008. ScriptSetup:
  1009.     menu "NIF.SCRセットアップメニュー(Escで終了)", 0, "ユーザIDの変更", "パスワードの変更", "ログ作成方法の変更"
  1010.     switch result
  1011.         case 0
  1012.             goto ScriptSetup
  1013.         case 1
  1014.             input "新しいユーザIDを入力して下さい。", %NifID
  1015.             if( cancel ) goto ScriptSetup
  1016.             input "新しいパスワードを入力して下さい。ログイン毎に入力したい場合は何も入力せずにOKして下さい。", %%NifPassword
  1017.             if( %%NifPassword == "" )
  1018.                 %%NifPassword = "毎回入力する"
  1019.             endif
  1020.             goto ScriptSetup
  1021.         case 2
  1022.             input "新しいパスワードを入力して下さい。ログイン毎に入力したい場合は何も入力せずにOKして下さい。", %%NifPassword
  1023.             if( %%NifPassword == "" )
  1024.                 %%NifPassword = "毎回入力する"
  1025.             endif
  1026.             goto ScriptSetup
  1027.         case 3
  1028.             menu "ログの作成方法を指定してください。", \
  1029.                  "&1 NIFTY.LOGというファイルに作成する。500Kバイトごとにバックアップする。", \
  1030.                  "&2 NIFmmdd.LOGというファイルに作成する。mmは月、ddは日", \
  1031.                  "&3 NIFyymm.LOGというファイルに作成する。yyは年、mmは月"
  1032.             if( result == -1 or result == 0 )
  1033.                 ; nothing to do
  1034.             else
  1035.                 %NifLogStyle = result
  1036.             endif
  1037.             goto ScriptSetup
  1038.     endswitch
  1039.     exit
  1040.