home *** CD-ROM | disk | FTP | other *** search
/ DOS/V Power Report 1996 February / VPR9602A.ISO / ols / winnt / htnt220 / nif.scr < prev    next >
Text File  |  1995-08-29  |  28KB  |  1,050 lines

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