始めに†
暫定まとめサイト†里々を120%使い倒すかも知れない場所。(書きかけで力尽きた もくじ†
里々での関数製作の基本†
括弧で呼び出せるもの。†
システム変数について†(R0)†
(A0)†call関数で呼び出されたあらゆる対象に対して付く引数。
(S0)†
(H0)†単語の再呼び出し。 (変数「H0」の存在)で真偽を確かめられる?←要検証 関数呼び出し(call)について†replace.txtに (関数名【タブ】(call,関数名 と書けば関数名だけで呼び出しが可能になる。 単語群「SAORI」に書き込んだら?†未検証。 反則。†replace.txt内 (【タブ】(call, そんなことをすれば海が汚染されるぞ! 引数区切りについて†里々はデフォルトで「、」「、」「,」「,」「バイト値1」が定義されている。 と考えている。 if†基本 ( if ,条件式 ,真の場合表示する文字列 ,偽の場合表示する文字列 ) これを他の一般的なプログラミング言語と混同してはならない。 ( if ,(i)==1 ,(set,i,0) ,(set,i,1) ) 上記のような場合、 if文の評価の後でset関数を使用したい場合下記のように書く必要がある。 ( ( if ,(i)==1 ,set、i、0 ,set、i、1 ) ) このとき、if関数の引数区切りとset関数の引数区切りを違うものにしなければならない。 しかしこの方法ではif関数の中で実行できる関数は常に1つとなってしまう。 ( replace 、( replace 、( if ,(i)==1 ,[set、i、1][set、j、0] ,[set、i、0][set、j、1] ) 、[ 、(han2zen,() ) 、] 、(han2zen,)) ) 仮の括弧を後から置換して実行する方法。 それよりもこっちを推奨。ばらばらになるけど。 ( ( if ,(i)==1 ,処理1 ,処理2 ) ) @処理1 (set,i,1)(set,j,0) @処理2 (set,i,0)(set,j,1) ループ†for†割と便利。 (loop,括弧で呼び出すもの,初期値,終了値,増加量) @括弧で呼び出すもの (ループしたい処理) forの一般形†偽林檎対応?の代用loop関数 (call,for,括弧で呼び出すもの,初期値,終了値,増加量) @for ( ( unless ,(変数「(A0)カウンタ」の存在) ,set ,nop ) ,(A0)カウンタ ,(A1) )( (A0) )( set ,(A0)カウンタ ,( calc ,((A0)カウンタ)+(A3) ) )( ( if ,((A0)カウンタ)<=(A2) ,call ,nop ) ,for ,(A0) ,(A1) ,(A2) ,(A3) )(set,(A0)カウンタ,) while†条件が成り立つ間、再帰する。 whileの一般形†@while ( hoge )( ( if ,条件式 ,call ,nop ) ,while ,付加情報 ) 自作関数ライブラリ†動作は保証しかねます。 FizzBuzz†流行ったときに書いてみたやつ。 変数でカウントするタイプ†基本形。 @FizzBuzz (set,n, (if,(変数「n」の存在),(n)+1,1) )(iflist ,0== ,(n)%3+(n)%5 ,FizzBuzz ,(n)%3 ,Fizz ,(n)%5 ,Buzz ,(n) )\n((if、(n)<100、FizzBuzz、set,n,)) 変数を使わないタイプ†制限を大きめにしないと無限ループに陥る。 *OnKeyPress $呼び出し回数制限 1000 :\_q(call,FizzBuzz,1,100)\_q @FizzBuzz (iflist ,0== ,(A0)%3+(A0)%5 ,FizzBuzz ,(A0)%3 ,Fizz ,(A0)%5 ,Buzz ,(A0) )\n( ( if ,(A0)<(A1) ,call ,nop ) ,FizzBuzz ,(calc,(A0)+1) ,(A1) ) loop関数を使うタイプ†一番楽。 *OnKeyPress :\_q(loop,FizzBuzz,1,100)\_q @FizzBuzz (iflist ,0== ,(FizzBuzzカウンタ)%3+(FizzBuzzカウンタ)%5 ,FizzBuzz ,(FizzBuzzカウンタ)%3 ,Fizz ,(FizzBuzzカウンタ)%5 ,Buzz ,(FizzBuzzカウンタ) )\n 単語群の内容を簡易配列にして返す†(call,単語配列化,区切り文字列,単語群名) (call,単語配列化,@,ドラえもん)→ドラえもん@のび太@しずか@ジャイアン@スネ夫@ @単語配列化 ( set,単語群「(A1)」の重複回避,降順、トーク中 )( loop,単語配列化2,(単語群「(A1)」の数) ) @単語配列化2 ((A1))(A0) @ドラえもん ドラえもん のび太 しずか ジャイアン スネ夫 リファレンス0から続く限りをバイト値1区切りで返す†(リファレンス全表示) (リファレンス全表示)→1t8410 @リファレンス全表示 ( set,引数区切り追加,(sprintf,%c,5) )( call,リファレンス全表示2,0 ) ( set,引数区切り削除,(sprintf,%c,5) ) @リファレンス全表示2 ( (if 、(is_empty(sprintf,%c,5)(R(han2zen,(A0)))) 、A1 、call (sprintf,%c,5)リファレンス全表示2 (sprintf,%c,5)(calc,(A0)+1) (sprintf,%c,5)(A1)(R(han2zen,(A0)))(sprintf,%c,1) ) ) 現在の季節を表示する†(季節) (季節)→冬 @季節 (iflist ,1 ,(現在月)<2,冬 ,(現在月)<4,春 ,(現在月)<7,夏 ,(現在月)<10,秋 ,冬 ) callの引数の数を(強引に)調べる†(call,引数の数,引数1[,引数2[…,引数n]]) (call,引数の数,1,2,3,,,,,8)→8 @引数の数 (set,counter ,(calc ,(if ,(変数「counter」の存在) ,(counter) ,-1 )+1 ) )(set,result, (calc, (if 、(is_empty,(A(counter))) 、(if,(変数「result」の存在),(result),1) 、(counter)+1 ) ) )( (if ,(counter)<(calc,(result)+5) ,引数の数 ,result ) )(set,counter,)(set,result,) 大根2(OnGetValues)への対応†## # # ゴーストの記憶しているキー(ラベル)名付きの変数や定義値を複数、 # SHIORIイベントOnGetValuesで、R1以降に連想配列っぽく格納して返す # # R0:送信元 # R1以降:キー名 # # 呼び出しの例 # \![raiseother,(FMO1name),OnRequestValues,(0name),0LIFE,0STR,0DEX,0AGL,0MIN,0INT,0SEN] # *OnRequestValues \![raiseother,(R0),OnGetValues,(FMO0name)(GetResponseString)] @GetResponseString (loop,GetResponseString2,(calc,(Rの数)-1)) @GetResponseString2 ( if (バイト値、1)(単語群「(R(GetResponseString2カウンタ))」の存在) (バイト値、1),(R(GetResponseString2カウンタ))=((R(GetResponseString2カウンタ))) ) 大根2(OnRequestValues)への対応。†このように格納する $key[n]【タブ】key[n]の値~ $value[n]【タブ】value[n]の値~ ※普通のゴーストさんには必要のないものです。 ## # # OnRequestValuesで要求した連想配列の受け取り # キー名と値を&で繋いだものをReferenceの1以降に格納する。 # # R0:送信元 # R1以降:キー名と値を&で繋いだもの。key=value # *OnGetValues :\b[2](R0)さんのスキャン結果。 (ResetGetValues) (SetGetValues) \_q(ShowGetValues)\_q (ResetGetValues) @SetGetValues (loop,SetGetValues2,(calc,(Rの数)-1)) @SetGetValues2 ( nop ,( split (sprintf,%c,1)(R(SetGetValues2カウンタ)) (sprintf,%c,1)= (sprintf,%c,1)2 ) )( set (sprintf,%c,1)key(SetGetValues2カウンタ) (sprintf,%c,1)(if(sprintf,%c,1)(変数「S0」の存在)(sprintf,%c,1)(S0)) )( set (sprintf,%c,1)value(SetGetValues2カウンタ) (sprintf,%c,1)(if(sprintf,%c,1)(変数「S1」の存在)(sprintf,%c,1)(S1)) ) @ShowGetValues (set,n,1)(ShowGetValues2)(set,n,) @ShowGetValues2 ( ( if ,(変数「key(n)」の存在) ,key(n) ,nop、 ) )\_l[40,]( ( if ,(変数「value(n)」の存在) ,value(n) ,nop、 ) )\n( set ,n ,(calc,(n)+1) )( ( if ,(変数「key(n)」の存在)||(変数「value(n)」の存在) ,ShowGetValues2 ,nop、 ) ) @ResetGetValues (set,n,1)(ResetGetValues2)(set,n,) @ResetGetValues2 ( set ,key(n) , )( set ,value(n) , )( set ,n ,(calc,(n)+1) )( ( if ,(変数「key(n)」の存在)||(変数「value(n)」の存在) ,ResetGetValues2 ,nop、 ) ) 里々でソート†
replace.txt 【タブ】 <ー< ( >ー> ) *wを押した $i $sortう $sortあ $sortい $sortえ $sortお (call,sort,う,あ,い,お,え) @sort \![raise,OnSatoriSort,(loop,sort2,0,(calc,(引数の数)-1)),(han2zen,<-<)calc(sprintf,%c,1)(erase_first,(loop,sort3,0,(calc,(引数の数)-1)),+)(han2zen,>->)] @sort2 (A(han2zen,(sort2カウンタ)))(sprintf,%c,1) @sort3 +(han2zen,<-<)変数「sort(A(han2zen,(sort3カウンタ)))」の存在(han2zen,>->) @引数の数 (set,counter ,(calc ,(if ,(変数「counter」の存在) ,(counter) ,-1 )+1 ) )(set,result, (calc, (if 、(is_empty,(A(counter))) 、(if,(変数「result」の存在),(result),1) 、(counter)+1 ) ) )( (if ,(counter)<(calc,(result)+5) ,引数の数 ,result ) )(set,counter,)(set,result,) *OnSatoriSort $i【タブ】(calc,(split,(R0),(sprintf,%c,1))-1) >OnSatoriSort2 *OnSatoriSort2 $sort(S(han2zen,(i)))【タブ】(R1) >OnSatoriSort3【タブ】(i)==0 $i【タブ】(calc,(i)-1) >OnSatoriSort2 *OnSatoriSort3 $辞書リロード【タブ】実行 \![raise,OnSatoriSort4,(R0)] この時点でのセーブデータ $sortあ <ー<calc<ー<変数「sortう」の存在>ー>+<ー<変数「sortあ」の存在>ー>+<ー<変数「sortい」の存在>ー>+<ー<変数「sortお」の存在>ー>+<ー<変数「sortえ」の存在>ー>>ー> $sortい <ー<calc<ー<変数「sortう」の存在>ー>+<ー<変数「sortあ」の存在>ー>+<ー<変数「sortい」の存在>ー>+<ー<変数「sortお」の存在>ー>+<ー<変数「sortえ」の存在>ー>>ー> $sortう <ー<calc<ー<変数「sortう」の存在>ー>+<ー<変数「sortあ」の存在>ー>+<ー<変数「sortい」の存在>ー>+<ー<変数「sortお」の存在>ー>+<ー<変数「sortえ」の存在>ー>>ー> $sortえ <ー<calc<ー<変数「sortう」の存在>ー>+<ー<変数「sortあ」の存在>ー>+<ー<変数「sortい」の存在>ー>+<ー<変数「sortお」の存在>ー>+<ー<変数「sortえ」の存在>ー>>ー> $sortお <ー<calc<ー<変数「sortう」の存在>ー>+<ー<変数「sortあ」の存在>ー>+<ー<変数「sortい」の存在>ー>+<ー<変数「sortお」の存在>ー>+<ー<変数「sortえ」の存在>ー>>ー> 「辞書リロード」時のれしばのログ ■SATORI::Load on G:\Program\SSP\ghost\scallion2\ghost\master\ 本体の所在: G:\Program\SSP\ OS種別: Windows 2000 モニタ: \\.\DISPLAY1 / (0,0,1280,600) / primary プライマリデスクトップ: (0,0,1280,600) 仮想デスクトップ: (0,0,1280,600) モニタは一つだけと判断、見切れ判定を呼び出し元に任せます。 loading satori_conf.txt... ok. *初期化 return: \1 loading satori_savedata.txt... ok. *セーブデータ (変数「sortう」の存在)→0 (変数「sortあ」の存在)→0 (変数「sortい」の存在)→0 (変数「sortお」の存在)→0 (変数「sortえ」の存在)→0 (calc0+0+0+0+0)→0 $sortあ=0/written. (変数「sortう」の存在)→0 (変数「sortあ」の存在)→1 (変数「sortい」の存在)→0 (変数「sortお」の存在)→0 (変数「sortえ」の存在)→0 (calc0+1+0+0+0)→1 $sortい=1/written. (変数「sortう」の存在)→0 (変数「sortあ」の存在)→1 (変数「sortい」の存在)→1 (変数「sortお」の存在)→0 (変数「sortえ」の存在)→0 (calc0+1+1+0+0)→2 $sortう=2/written. (変数「sortう」の存在)→1 (変数「sortあ」の存在)→1 (変数「sortい」の存在)→1 (変数「sortお」の存在)→0 (変数「sortえ」の存在)→0 (calc1+1+1+0+0)→3 $sortえ=3/written. (変数「sortう」の存在)→1 (変数「sortあ」の存在)→1 (変数「sortい」の存在)→1 (変数「sortお」の存在)→0 (変数「sortえ」の存在)→1 (calc1+1+1+0+1)→4 $sortお=4/written. *OnSatoriSort4
ここで(sortあ)~(sortお)の数の順にならべればソートが成立する。 里々で配列†保存方法†添え字=対応する値がバイト値3区切りで一つの変数に入っている。 $array○○【タブ】value0(sprintf,%c,3)value1(sprintf,%c,3)value2(sprintf,%c,3)
これらの関数はこの変数の中身を切った貼ったする。 代入†
(call,array_set,配列名,添え字,対応する値) #代入 @array_set ( call ,( if ,(変数「array(A0)」の存在)&&(A1)>=0 ,array_set1 ,array_set99 ) ,(A0) ,(A1) ,(A2) ) @array_set1 ( call ,( if ,(count,(array(A0)),(sprintf,%c,3))>(A1) ,array_set2 ,array_set3 ) ,(A0) ,(A1) ,(A2) ,0 , ,(array(A0)) ) @array_set2 ( nop ,( split ,_(A5)_ ,(sprintf,%c,3) ,2 ) )( call ,( if ,(A1)==(A3) ,array_set4 ,array_set2 ) ,(A0) ,(A1) ,(A2) ,(calc,(A3)+1) ,(A4)( if ,(A1)==(A3) ,(A2) ,(erase_first,(S0),_) )(sprintf,%c,3) ,(reverse,(erase_first,(reverse,(S1)),_)) ) @array_set3 ( set ,array(A0) ,(array(A0))( loop ,sprintf、%c、3 ,(calc,(A1)-(count,(array(A0)),(sprintf,%c,3))) )(A2)(sprintf,%c,3) ) @array_set4 ( set ,array(A0) ,(A4)(reverse,(erase_first,(reverse,(S1)),_)) ) @array_set99 ( set ,array(A0) ,( loop ,sprintf、%c、3 ,(A1) )(A2)(sprintf,%c,3) ) 取得†
(call,array_get,配列名,添え字) #取得 @array_get ( ( if ,(変数「array(A0)」の存在) ,call ,nop ) ,array_get1 ,(A0) ,(A1) ,0 ,(array(A0)) ) @array_get1 ( nop ,( split ,_(A3)_ ,(sprintf,%c,3) ,2 ) )( call ,( if ,(A1)==(A2) ,array_get2 ,array_get1 ) ,(A0) ,(A1) ,(calc,(A2)+1) ,(reverse,(erase_first,(reverse,(S1)),_)) ) @array_get2 (erase_first,(S0),_) 削除†
(call,array_del,配列名,添え字)
(call,array_del,配列名) #削除 @array_del ( call ,( if ,(is_empty,(A1)) ,array_del99 ,array_del1 ) ,(A0) ,(A1) ) @array_del1 (call,array_set,Value,(A1),) @array_del99 (set,array(A0),) 里々で連想配列†保存方法†key=valueがバイト値3区切りで一つの変数に入っている。 $hash○○【タブ】key0=value0(sprintf,%c,3)key1=value1(sprintf,%c,3)key2=value2(sprintf,%c,3)
これらの関数はこの変数の中身を切った貼ったする。 代入†
(call,hash_set,連想配列名,キー,対応する値) #代入 @hash_set ( call ,hash_set( if ,(変数「hash(A0)」の存在) ,1 ,99 ) ,(A0) ,(A1) ,(A2) ) @hash_set1 ( nop ,( split ,(hash(A0)) ,(sprintf,%c,3) ) )( call ,hash_set2 ,(A0) ,(A1) ,(A2) ,0 ) @hash_set2 ( call ,hash_set( if ,(変数「S(han2zen,(A3))」の存在) ,( if ,( compare_head ,(S(han2zen,(A3))) ,(A1) ) ,3 ,2 ) ,98 ) ,(A0) ,(A1) ,(A2) ,(calc,(A3)+1) ) @hash_set3 ( set ,hash(A0) ,( replace ,(hash(A0)) ,( if ,( split ,(S(han2zen,(calc,(A3)-1))) ,= ,2 )==2 ,(S0)=(S1) ,(S0)= ) ,(S0)=(A2) ) ) @hash_set98 ( set ,hash(A0) ,(hash(A0))(A1)=(A2)(sprintf,%c,3) ) @hash_set99 ( set ,hash(A0) ,(A1)=(A2)(sprintf,%c,3) ) 取得†
(call,hash_get,連想配列名,キー) #取得 @hash_get ( ( if ,(変数「hash(A0)」の存在) ,call ,nop ) ,hash_get1 ,(A0) ,(A1) ) @hash_get1 ( nop ,(split,(hash(A0)) ,(sprintf,%c,3) ) )( call ,hash_get2 ,(A0) ,(A1) ,0 ) @hash_get2 ( ( if ,(変数「S(han2zen,(A2))」の存在) ,call ,nop ) ,hash_get( if ,( compare_head ,(S(han2zen,(A2))) ,(A1) ) ,3 ,2 ) ,(A0) ,(A1) ,(calc,(A2)+1) ) @hash_get3 ( if ,( split ,(S(han2zen,(calc,(A2)-1))) ,= ,2 )==2 ,(S1) ) 削除†
(call,hash_del,連想配列名,キー2)
(call,hash_del,連想配列名) #削除 @hash_del ( call ,hash_del( if ,(is_empty,(A1)) ,99 ,1 ) ,(A0) ,(A1) ) @hash_del1 ( nop ,( split ,(hash(A0)) ,(sprintf,%c,3) ) )( call ,hash_del2 ,(A0) ,(A1) ,(A2) ,0 ) @hash_del2 ( ( if ,(変数「S(han2zen,(A3))」の存在) ,call ,nop ) ,hash_del( if ,(compare_head,(S(han2zen,(A3))),(A1)) ,3 ,2 ) ,(A0) ,(A1) ,(A2) ,(calc,(A3)+1) ) @hash_del3 ( set ,hash(A0) ,( erase ,(hash(A0)) ,(S(han2zen,(calc,(A3)-1))) ) ) @hash_del99 (set,hash(A0),) replace_end†replaceの一番最後の該当文字だけ置き換える版を自作してみた。 (call,replace_end,文字列,検索語,置換する語) @replace_end ( reverse ,( replace_first ,(reverse,(A0)) ,(reverse,(A1)) ,(reverse,(A2)) ) ) erase_end†eraseの一番最後の該当文字だけ削除する版を自作してみた。 (call,erase_end,文字列,削除する語) @erase_end ( reverse ,( erase_first ,(reverse,(A0)) ,(reverse,(A1)) ) ) split_end†splitのうしろから切っていく版を自作してみた。 (call,split_end,文字列,[分割文字列,[最大分割数]]) @split_end ( split ,(reverse,(A0)) ,(reverse,(A1)) ,(A2) ) (reverse,(S0)) 仕様上、返り値が反転してしまうので元に戻すこと。 ファイル名取得†(call,ファイル名取得,ファイルパス) @ファイル名取得 ( nop ,( split ,(reverse,(A0)) ,\ ,2 )( split ,(S0) ,/ ,2 ) )(reverse,(S0)) 拡張子取得†(call,拡張子取得,ファイルパスorファイル名) @拡張子取得 ( nop ,( split (バイト値,1)(reverse,(A0)) (バイト値,1). (バイト値,1)2 ) )(reverse(バイト値,1)(S0)) タグ消し†(call,タグ消し,文字列,初めの部分,終わりの部分) *htmlのタグ消去 (call(バイト値、1)タグ消し(バイト値、1)(HTML)(バイト値、1)<(バイト値、1)>) @タグ消し ( call (バイト値、1)( if ,(count(バイト値、1)(A0)(バイト値、1)(A1))>1 ,タグ消し ,タグ消し1 )(バイト値、1)( nop ,( split (バイト値、1)(バイト値、3)(A0) (バイト値、1)(A1) (バイト値、1)2 ) )(S0)( nop ,( split (バイト値、1)(S1)(バイト値、3) (バイト値、1)(A2) (バイト値、1)2 ) )(S1) (バイト値、1)(A1) (バイト値、1)(A2) ) @タグ消し1 ( erase (バイト値、1)(A0) (バイト値、1)(バイト値、3) ) 里々で人工無脳みたいなことをする†
* $文章 駄でべろぱの小ネタWikiへようこそ。要するに駄ネタ大歓迎、気軽なネタWiki……ということで、アホなネタをそれとなく仕込んで見た人を吹かせるのを推奨します。 $カタカナ アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヰヱヲンァィゥェォャュョヮッガギグゲゴザジズゼゾダヂヅデドバビブベボパピプペポ $ひらがな あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやゆよらりるれろわゐゑをんぁぃぅぇぉゃゅょゎっがぎぐげござじずぜぞだぢづでどばびぶべぼぱぴぷぺぽ $句読点 。。 $句点 、、 $単語群「文のエレメント」の重複回避 トーク中 (追加単語の全削除、文のエレメント)(追加単語の全削除、文のラストエレメント) (loop,何か,(length,(文章))) (文のエレメント)(文のエレメント)(文のネクストエレメント) (文のエレメント)(文のエレメント)(文のエレメント)(文のラストエレメント) @何か ( set ,文字 ,(han2zen,(substr,(文章),(何かカウンタ)-1,1)) )( ( iflist ,0!= ,(count,(句読点),(文字)) ,文のラストエレメント確定 ,(count,(句点),(文字)) ,文のネクストエレメント確定 ,(is_digit,(文字)) ,ファーストフラグエレメント判定 ,(is_alpha,(文字)) ,ファーストフラグエレメント判定 ,(count,(カタカナ),(文字)) ,ファーストフラグエレメント判定 ,(count,(ひらがな),(文字)) ,エレメント ,ファーストフラグエレメント判定 ) )( set ,一つ前の文字 ,(文字) ) @ファーストフラグエレメント判定 ( ( if ,0!=(count,(ひらがな),(一つ前の文字)) ,文のエレメント確定 ,フラグエレメント ) ) @フラグエレメント ( set ,文節 ,(if,(変数「文節」の存在),(文節))(文字) ) @エレメント ( set ,文節 ,(if,(変数「文節」の存在),(文節))(文字) ) @文のエレメント確定 ( 単語の追加 ,文のエレメント ,(if,(変数「文節」の存在),(文節)) )( set ,文節 ,(文字) ) @文のラストエレメント確定 ( 単語の追加 ,文のラストエレメント ,(if,(変数「文節」の存在),(文節))(文字) )( set ,文節 , ) @文のネクストエレメント確定 ( 単語の追加 ,文のネクストエレメント ,(if,(変数「文節」の存在),(文節))(文字) )( set ,文節 , ) (合成単語群)†(call,合成単語群,[単語群名],...) :野菜と言えば(野菜)。 肉と言えば(肉)。 でも、私の一番の好物は(食べ物)! @野菜 たまねぎ ながねぎ しらがねぎ 万能ねぎ 青ねぎ しろねぎ @肉 鶏肉 鴨肉 家鴨肉 @食べ物 (call,合成単語群,野菜,肉) @合成単語群 ( S( 乱数1~ ( split ,( loop ,call、合成単語群3(loop,合成単語群2,(Aの数)) ,(Aの数) ) ,(バイト値、1) ) ) ) @合成単語群2 、(A(合成単語群2カウンタ)) @合成単語群3 (call,単語配列化,(バイト値,1),(A(合成単語群3カウンタ))) @単語配列化 ( set,単語群「(A1)」の重複回避,降順、トーク中 )( loop,単語配列化2,(単語群「(A1)」の数) ) @単語配列化2 ((A1))(A0) 文字を2分割する†$文字列【タブ】あいうえおかきくけこ 前半φ:(substr,(文字列),0,(length,(文字列))/2) 後半φ:(substr,(文字列),(length,(文字列))/2,(length,(文字列))) 危険なSakuraScriptタグを無効化する。†(call(バイト値、1)KillDangerousTag(バイト値、1)[SakuraScript])→[危険なタグを表示無効化するように変換されたSakuraScript] @KillDangerousTag ( set ,単語群「DangerousTag」の重複回避 ,降順、トーク中 )( set ,n ,(単語群「DangerousTag」の数) )( set ,引数区切り追加 ,(バイト値、2) )( call (バイト値、1)KillDangerousTag2 (バイト値、1)(A0) )( set ,SaveDangerousTag , )( set ,n , )( set ,引数区切り削除 ,(バイト値、2) ) @KillDangerousTag2 ( set ,n ,(calc,(n)-1) )( set (バイト値、1)SaveDangerousTag (バイト値、1)(DangerousTag) )( ( unless (バイト値、1)(n)==-1 (バイト値、1) call (バイト値、2)KillDangerousTag2 (バイト値、2)( replace (バイト値、1)(A0) (バイト値、1)(SaveDangerousTag) (バイト値、1)\(SaveDangerousTag) ) (バイト値、1)A0 ) ) @DangerousTag# 危険なタグリスト \![updatebymyself] \![vanishbymyself] \![raise \![open,browser \![open,mailer \![execute,http \![enter,passive \![enter,induction \![enter,passivemode] \![leave,passivemode] \![lock,repaint] \![unlock,repaint] \![biff] \j[ #以下自由に追加可能 物理エンジンみたいな何か†
SakuraScript除去†$引数区切り追加【タブ】(バイト値、5) (call(バイト値、5)サクラスクリプト除去(バイト値、5)[SakuraScript]) $引数区切り削除【タブ】(バイト値、5) @サクラスクリプト除去 ( set,引数区切り追加,(バイト値、5) )( set(バイト値、5)サクラスクリプト除去変数(バイト値、5)(A0) )( set,単語群「SakuraScriptList」の重複回避,正順、トーク中 )( set,単語群「SakuraScriptList2」の重複回避,正順、トーク中 )( サクラスクリプト除去1 )( set,サクラスクリプト除去変数, )( set,サクラスクリプト除去済変数, )( set,消すべきSakuraScript, )( set,引数区切り削除,(バイト値、5) ) @サクラスクリプト除去1#一文字目調べる ( ( iflist ,1== ,( compare_head (バイト値、5)(サクラスクリプト除去変数) (バイト値、5)\\ ) ,サクラスクリプト除去6 ,( compare_head (バイト値、5)(サクラスクリプト除去変数) (バイト値、5)\ ) ,サクラスクリプト除去3 ,nop、 ) )( サクラスクリプト除去2 )( ( if ,(変数「サクラスクリプト除去変数」の存在) ,サクラスクリプト除去1 ,( if ,(変数「サクラスクリプト除去済変数」の存在) ,サクラスクリプト除去済変数 ,nop、 ) ) ) @サクラスクリプト除去2#一文字削除 ( set (バイト値、5)サクラスクリプト除去済変数 (バイト値、5)( ( if ,(変数「サクラスクリプト除去済変数」の存在) ,サクラスクリプト除去済変数 ,nop、 ) )( substr (バイト値、5)( ( if ,(変数「サクラスクリプト除去変数」の存在) ,サクラスクリプト除去変数 ,nop、 ) ) (バイト値、5)0 (バイト値、5)1 ) )( set (バイト値、5)サクラスクリプト除去変数 (バイト値、5)( erase_first (バイト値、5)( ( if ,(変数「サクラスクリプト除去変数」の存在) ,サクラスクリプト除去変数 ,nop、 ) ) (バイト値、5)( substr (バイト値、5)( ( if ,(変数「サクラスクリプト除去変数」の存在) ,サクラスクリプト除去変数 ,nop、 ) ) (バイト値、5)0 (バイト値、5)1 ) ) ) @サクラスクリプト除去3#一番初めが\だった ( loop ,サクラスクリプト除去4 ,(単語群「SakuraScriptList」の数) )( loop ,サクラスクリプト除去5 ,(単語群「SakuraScriptList2」の数) ) @サクラスクリプト除去4#サクラスクリプト削除 ( set (バイト値、5)サクラスクリプト除去変数 (バイト値、5)( erase_first (バイト値、5)(サクラスクリプト除去変数) (バイト値、5)(SakuraScriptList) ) ) @サクラスクリプト除去5#\*[の探索 ( set ,削除すべきSakuraScript ,(SakuraScriptList2) )( ( if ,( compare_head (バイト値、5)(サクラスクリプト除去変数) (バイト値、5)(削除すべきSakuraScript) ) ,サクラスクリプト除去7 ,nop、 ) ) @サクラスクリプト除去6#一番初めが\\だった ( set (バイト値、5)サクラスクリプト除去済変数 (バイト値、5)( ( if ,(変数「サクラスクリプト除去済変数」の存在) ,サクラスクリプト除去済変数 ,nop、 ) )( substr (バイト値、5)(サクラスクリプト除去変数) (バイト値、5)0 (バイト値、5)2 ) )( set (バイト値、5)サクラスクリプト除去変数 (バイト値、5)( erase_first (バイト値、5)(サクラスクリプト除去変数) (バイト値、5)( substr (バイト値、5)(サクラスクリプト除去変数) (バイト値、5)0 (バイト値、5)2 ) ) ) @サクラスクリプト除去7#\*[の削除 ( set (バイト値、5)サクラスクリプト除去変数 (バイト値、5)( erase_first (バイト値、5)(サクラスクリプト除去変数) (バイト値、5)(削除すべきSakuraScript) ) )(サクラスクリプト除去8) @サクラスクリプト除去8#]までの削除 ( ( if ,( compare_head (バイト値、5)(サクラスクリプト除去変数) (バイト値、5)] )(サクラスクリプト除去9) ,nop、 ,サクラスクリプト除去8 ) ) @サクラスクリプト除去9#]の削除 ( set (バイト値、5)サクラスクリプト除去変数 (バイト値、5)( erase_first (バイト値、5)(サクラスクリプト除去変数) (バイト値、5)( substr (バイト値、5)(サクラスクリプト除去変数) (バイト値、5)0 (バイト値、5)1 ) ) ) @SakuraScriptList \0 \1 \h \u \s0 \s1 \s2 \s3 \s4 \s5 \s6 \s7 \s8 \s9 \n \_n \c \C \_! \_? \w1 \w2 \w3 \w4 \w5 \w6 \w7 \w8 \w9 \x \t \_q \_s \z \* \e \- \4 \5 \6 \7 \+ \_+ \v \_V \__t @SakuraScriptList2 \p[ \s[ \i[ \![ \__w[ \b[ \_b[ \n[ \c[ \_l[ \f[ \_w[ \__w[ \x[ \_s[ \q[ \__q[ \_a[ \8[ \_v[ \j[ \_u[ \_m[ \&[ \m[ その他小技†Tipsともいう OnUserInputの空打ちとOnUserInputCancelの実装†*OnUserInput >(R0)をタイムアウト【タブ】(compare,(R1),timeout) >(R0)を空打ちされた【タブ】(is_empty,(R1)) $(R0)【タブ】(R1) >(R0)を教えてもらった *OnUserInputCancel >(R0)を空打ちされた【タブ】(compare,(R1),close) ユーザ情報の取得†*OnNotifyUserInfo $ユーザ名【タブ】(R0) $フルネーム【タブ】(R1) $誕生日【タブ】(nop,(split(R2),))(S0)年(S1)月(S2)日 ランダムトークを音で知らせる†*OnTalk >(R1)【タブ】(R0) \_v[hoge.wav] () 里々で改行を扱う†
別人格†+-master\ +-template\ +-another\ +-dic*.txt +-satori.dll +-satori_conf.txt $辞書フォルダ【タブ】template\another 実は深い階層のフォルダの辞書も読み込める。 dsaudio.dllの使い方†マウスホイールによる音量調節†*OnMouseWheel ( ( if ,(変数「ボリューム」の存在) ,nop ,set ) ,ボリューム ,5000 )( set ,ボリューム ,( iflist ,1== ,(calc,(ボリューム)+((R2)))>10000 ,10000 ,0>(calc,(ボリューム)+((R2))) ,0 ,(calc,(ボリューム)+((R2))) ) )( volume ,(ボリューム) ):音量φ:(ボリューム) httpc.dllでLingrのログを取得†$URL http://c-kom.homeip.net/lingrtext/url/http://www.lingr.com/room/jyW4aiX5YOC/ $番号 5 $HTML (httpc(バイト値、1)(URL)(バイト値、1)</a><br /><hr />(バイト値、1) <hr /><a href=") $HTML (replace(バイト値、1)(HTML)(バイト値、1)<br />(バイト値、1)(バイト値、3)) $引数区切り追加 (バイト値、3) (nswitch(バイト値、3)(番号)(バイト値、3)(HTML)) $引数区切り削除 (バイト値、3) LingrAPIを使う版†
urlencode.dllを使ってCGIにSHIORIリクエストを投げる。†(送信) @送信 \![execute,http-get,(CGI)?(SSTP)]#←スクリプト版。 #\![open,browser,(CGI)?(SSTP)]#←ブラウザオープン版。 @CGI http://www5.pf-x.net/~legokichi/cgi-bin/kokage/kokage.cgi @SSTP ( replace ,( urlencode , NOTIFY SSTP/1.1 Sender: (Sender) Event: (ID) (Reference*) Charset: (Charset) ) ,%09 ,& ) @Reference* (loop,Reference**,0,(calc,(Rの数)-1)) @Reference** (unless,(is_empty,(R(Reference**カウンタ))),Reference(Reference**カウンタ): (R(Reference**カウンタ)) ) こめんと†
|