home *** CD-ROM | disk | FTP | other *** search
/ DOS/V Power Report 1997 March / VPR9703A.ISO / OLS / Winnt / HTNT306 / HTNT306.LZH / NIF.SCR < prev    next >
Text File  |  1996-02-14  |  28KB  |  1,066 lines

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