#include "hspsock.as" #include "hspext.as" #include "Srexstr.as" ;「任意たんくりっぷ」ver1.05 by カーリア(2001/4/20) ; ;外部プラグイン「Srexstr.dll」に依存しています。 ;http://www.silkroad.ne.jp/Sakura/で入手できます。 ; ;------------------------------------------------ ;クリップボードの文字列を取得 ;------------------------------------------------ ;文字数が多いと長くなるので200バイトに制限しています。 *clipboard alloc clip,300 : clip="" : clipmax=0 alloc haruna,300 : haruna="" alloc last,300 : last="" alloc top,300 : top="" ;バッファを指定しないとヤバイ模様。多めに300バイト確保。 clipget clip,200 ;クリップボードの内容を取得(200バイトまで) strlen clipmax,clip ;clipmaxにclipの長さを代入(後で使用) if clipmax=200 : full=1 ;---------------- ;200バイト目が全角の文字の前半だった場合は化けてしまうため、判定の上削除。 ;strbyte,strdelは外部プラグイン「Srexstr.dll」に依存しています。 clipmax2=clipmax-1 strbyte a,clip,clipmax2,0 ;199バイト目の「文字数」を取得 strbyte b,clip,clipmax,0 ;200バイト目の「文字数」を取得 if a!b : strdel clip,clip,200,1 ;違ったら最後を削除。 ;------------------------------------------------ ;文字列置き換え&制御文字の削除。 ;------------------------------------------------ ;改行は削除します。 ;strdelchは外部プラグイン「Srexstr.dll」に依存しています。 strdelch clip,clip,13 ;変数clipにある改行コードを削除して元に戻す strdelch clip,clip,10 ;変数clipにある復帰コードを削除して同上。 ;---------------- ;%は\%(これで任意は%と表示する)と出力します。 ;ssouce,starget,strrepは外部プラグイン「Srexstr.dll」に依存しています。 target="" target="%" ;変数target → ターゲットキー(%を探す) ssource clip ;変換元文字列ソースを dll内部バッファに設定 starget target ;ターゲットキー文字列をdll内部バッファに設定 strrep clip,"\\%",0 ;すべてを変換(\\%と書く→\%と送信→%と表示) ;---------------- ;MKさんがタブ置換の方法を教えて下さいました。 ;ありがとうございます! ;------------------------------------ ; TAB to SPASE x4 Tips Script ; 2000/10/16 MK ;------------------------------------ ;タブを検索 repeat 200 ;200回(バイト)繰り返す。 strmid iftab,clip,cnt,1 ;1文字ずつ取りだし、iftabに代入 if iftab="\t" : gosub deltab ;その文字がタブだったらdeltabへ loop ; ;\を検索 repeat 200 ;200回(バイト)繰り返す。 strmid ifyen,clip,cnt,1 ;1文字ずつ取りだし、ifyenに代入 if ifyen="\\" : gosub delyen ;その文字がタブだったらdelyenへ loop ;------------------------------------------------ ;SSTP通信部 ;------------------------------------------------ ;送信文の下ごしらえ if full=1 : clip=clip+"\\n\\n\\w8(以下略)" ;200バイトでギリギリの場合は付加 haruna="\\t\\h\\s[0]クリップボードの内容は、\\n\\n\\w8『"+clip+"』\\n\\n\\w8だって。\\e" ;送信用にデータを整形 ;---------------- ;「あれ以外の何か」にSSTPスクリプトを送りつける port=9801 *niseharuna sockopen 0,"127.0.0.1",port ;初期化して接続 if stat : goto *error1 ;失敗したら*error1へ sockput "SEND SSTP/1.1\n",0 ;データを送信(SENDリクエスト) sockput "Sender: 任意たんくりっぷ\n",0 sockput "Script: "+haruna+"\n",0 sockput "Option: notranslate\n",0 sockput "Charset: Shift_JIS\n",0 sockput "\n",0 ;データを送信(終了を示す空行) if stat : goto *error1 ;---------------- ;2秒以内に返るハズのステータスコードを受信 repeat 100 ;ループ(100回) wait 20 ;待ち時間(20ミリ秒) sockcheck 0 ;受信チェック if stat=0 : break loop sstp="" sockget sstp,64,0 ;データを受信、変数SSTPに代入 sockclose 0 ;ソケットを閉じる if sstp="SSTP/1.0 503 Service Unavailable\n\n" : goto *error2 ;SSTP設定オフorブラックリスト入りの時は*error2へ if sstp="SSTP/1.0 409 Conflict\n\n" : goto *error3 ;タイムクリティカルセッション中は*error3へ end ;プログラムを終了します。 ;------------------------------------------------ ;送信できなかった場合 ;------------------------------------------------ *error1 if port=9801 : port=9821 : goto *niseharuna dialog "送信に失敗しました。\nSSTPサーバーが起動しているか確認して下さい。\n\n再送信しますか?",3,"任意たんくりっぷ" if stat=6 : goto *clipboard end ;------------------------------------------------ ;「SSTP/1.0 503 Service Unavailable」 ;------------------------------------------------ *error2 dialog "送信に失敗しました。\nSSTP設定を確認して下さい。\n\n再送信しますか?",3,"任意たんくりっぷ" if stat=6 : goto *clipboard end ;------------------------------------------------ ;タイムクリティカルセッション ;------------------------------------------------ *error3 dialog "送信に失敗しました。\n他の処理が終わるまで待ってください。\n\n再送信しますか?",3,"任意たんくりっぷ" if stat=6 : goto *clipboard end ;------------------------------------------------ ;TABをスペースに変換‥‥のサブルーチン部 ;------------------------------------------------ *deltab strlen max,clip ;maxにclipの長さを代入 strmid top,clip,0,cnt ;タブまでの文字をtopに代入 strmid last,clip,cnt+1,max-cnt+1 ;タブより後の文字をbackに代入 clip=top+" "+last ;top、置き換え後、backの順で元に戻す return ;------------------------------------------------ ;\を¥に変換‥‥のサブルーチン部 ;------------------------------------------------ *delyen strlen max,clip ;maxにclipの長さを代入 strmid top,clip,0,cnt ;タブまでの文字をtopに代入 strmid last,clip,cnt+1,max-cnt+1 ;タブより後の文字をbackに代入 clip=top+"¥"+last ;top、置き換え後、backの順で元に戻す return ;------------------------------------------------ ;Copyright 2001 karia All rights reserved.