#----------------------------------------------------------------------------- # 「華和梨」イベント処理用簡易スクリプト # (Kawari Easy Event Programmed Script) #  *イベント制御プログラム辞書* # # Phase 2.05 (2001/07/12) # # 前提 :「華和梨」Phase 5.4 及び上位互換版を使用。 # # 使い方:この辞書ファイルと、同梱の「Ghost-KEEPS.txt」「Dict-KEEPSs.txt」 #     を「kawari.ini」に登録。「Ghost-KEEPS.txt」のスクリプトを必要に #     応じて書き替える。 # # 製作者:こやま☆あきら ( akira-k@blue.interq.or.jp ) #              ( http://www.interq.or.jp/blue/akira-k/keeps/ ) # # 備考 :パブリックドメインとして自由に改変、再配布可。 #     改変、再配布の際、作者に連絡の必要なし。 # # Secial Thanks : # Main Application 「何か。(仮)」: 閑馬永空 & 佐川豊秋 #                       ( http://sakura.mikage.to/ ) # SHIORI Module 「華和梨」 : Meister #                   ( http://meister-d-i.hoops.ne.jp/ ) # Script Editer「だぶるている」 : pipe().vqf #       ( http://www.geocities.co.jp/SiliconValley-Cupertino/4430/ ) # Shell「AAさくらZwei」(for private test) : 都沢成明 #                   ( http://www.din.or.jp/~sentence/ ) # Ghost「なつ&ぴんすけ」(for private test) : 駿河かすね #              ( http://www.kit.hi-ho.ne.jp/xhiroz/ichigo/ ) # Ghost「花ちゃん」(for private test) : うめきち #                 ( http://www4.osk.3web.ne.jp/~umekiti/ ) # # Debug Support (for "KEEPS" Phase 2) : みずひら # Programming Idea & Support : nakajiso、夢蛍、偽Meister、さとー & sky #----------------------------------------------------------------------------- #セーブパラメータ(「Dict-KEEPSs.txt」で定義する。) #----------------------------------------------------------------------------- ##トーク(0:する / 1:トークしない / 2:見切れ、重なりでも喋らない。) #silence : 0 ##トーク頻度(秒単位:実際には+1秒された時間が経過するとトークする。) #interval : 56 #----------------------------------------------------------------------------- #固定パラメータ #----------------------------------------------------------------------------- ##起動時間内容(0:OS / 1:ゴースト / 注:起動中は変更しない事。) parawork : 1 ##ヌル null : "" #----------------------------------------------------------------------------- #表示用パラメータ #----------------------------------------------------------------------------- ##起動時間(単位:時間) timework : 0 #----------------------------------------------------------------------------- ##使用変数 #----------------------------------------------------------------------------- #時間帯:${HourZone}で更新(Earlymornig/Morning/Day/Evening/Night/Midnight) timezone : Day #トーク用カウンタ cnttalk : 0 #見切れ用カウンタ cntmikire : 55 #見切れ用フラグ(1:「見切れた」トークをしている) flagmikire : 0 #重なり用カウンタ cntkasanari : 0 #頭撫で用カウンタ cnthead : 0 #胸触り用カウンタ cntbust : 0 #胸触り用フラグ(0:前半/1:後半) flagbust : 0 #活動時間カウンタ(分単位) cntwork : 0 #起動時間処理を最初の1分間はしないようにするためのフラグ。 flagmin : 0 #ヘッドラインセンサーURL flagurl : 0 #----------------------------------------------------------------------------- ##作業用変数 #----------------------------------------------------------------------------- #汎用 temp : 0 temp1 : 0 temp2 : 0 temp3 : 0 temp4 : 0 answer : NoAnswer #お喋り中止フラグ(2:お喋り中止[1ではないので注意]) freeze : 0 #触り反応用カウンタ cntmouse : 0 #触り反応キャンセル用カウンタ cntcancel : 0 #----------------------------------------------------------------------------- ##カウンタ関係変数表示(デバッグ用・COMMUNCATE使用) #----------------------------------------------------------------------------- [ "para" ] : \_q\hトーク:${cnttalk}/${interval}\n見切れ:${cntmikire}:${flagmikire}\n重なり:${cntkasanari}\e #----------------------------------------------------------------------------- ##共通サブルーチン #----------------------------------------------------------------------------- ##カウンタリセット countzero : $(set freeze 0 ; set cnttalk 0 ; set cnthead 0 ; set cntbust 0 ; set cntcancel 0) #------------------------------------- ##カウンタフリーズ countfreeze : $(set freeze 2 ; set cnttalk 0 ; set cnthead 0 ; set cntbust 0) #------------------------------------- ##セーブ CallSave : $(save Dict-KEEPSs.txt silence interval) #------------------------------------- ##時間帯判定 (HourZone) #入力パラメータ #(なし) #戻りパラメータ #timezone : Earlymornig / Morning / Day / Evening / Night / Midnight #処理変数 #temp : 現在の「時」 HourZone : $(set temp $(date %H))$(set timezone $(if $([ ${temp} < "05" ]) "Midnight" $(if $([ ${temp} < "07" ]) "Earlymorning" $(if $([ ${temp} < "10" ]) "Morning" $(if $([ ${temp} < "17" ]) "Day" $(if $([ ${temp} < "19" ]) "Evening" $(if $([ ${temp} < "23" ]) "Night" "Midnight"))))))) #------------------------------------- ##時計合わせ用時刻表示 (TimeDisplay) #入力パラメータ #param0 :返答変数名 #param1 : 時刻 #戻りパラメータ #${param0} : 変換した時刻 #処理変数 #temp : 返答文章 #temp1 : param1の文字数 #temp2 : 文字位置 #temp3 : substr用開始位置 #temp4 : substr用文字数 TimeDisplay : ${TimeDisplay1}${TimeDisplay2}${TimeDisplay3}${TimeDisplay4}${TimeDisplay5}${TimeDisplay6}${TimeDisplay7} TimeDisplay1 : $(set temp1 $(expr length ${param1}) ; set temp3 0 ; set temp4 0) TimeDisplay2 : ${SerchComma}$(set temp $(expr substr ${param1} ${temp3} ${temp4})年) TimeDisplay3 : ${SerchComma}$(set temp ${temp}$(expr substr ${param1} ${temp3} ${temp4})月) TimeDisplay4 : ${SerchComma}$(set temp ${temp}$(expr substr ${param1} ${temp3} ${temp4})日) TimeDisplay5 : ${SerchComma}$(set temp ${temp}$(expr substr ${param1} ${temp3} ${temp4})時) TimeDisplay6 : ${SerchComma}$(set temp ${temp}$(expr substr ${param1} ${temp3} ${temp4})分) TimeDisplay7 : ${SerchComma}$(set ${param0} ${temp}$(expr substr ${param1} ${temp3} ${temp4})秒) #------------------------------------- ##カンマ位置検索 (SerchComma) #入力パラメータ #param1 : 検索対象文字列 #temp3 + temp4 : 開始位置から1を引いた数 (0 〜) #戻りパラメータ #temp1 : param1の文字数 #temp3 : substr用開始位置 #temp4 : substr用文字数 #処理変数 #temp1 : param1の文字数 #temp2 : 文字位置 #temp3 : substr用開始位置 #temp4 : substr用文字数 SerchComma : ${SerchComma1}${SerchComma2} SerchComma1 : $(set temp2 $(expr ${temp3} + ${temp4}) ; set temp3 $(expr ${temp2} + 1) ; set temp4 0) SerchComma2 : $(until $([ ${temp1} -eq ${temp2} ]) $(inc temp2 ; if $([ $(expr substr ${param1} ${temp2} 1) == "," ]) $(set temp2 ${temp1}) $(inc temp4))) #------------------------------------- ##データ検索 (SerchDataBase) #入力パラメータ #param0 : 返答変数名 #param1 : 検索対象文字 #param2 : 検索用エントリ #戻りパラメータ #${param0} : エントリに該当文字列があれば、pirocall用エントリ/該当文字列が無ければ、ヌル #処理変数 #temp : foreach処理 SerchDataBase : $(set ${param0} ${null} ; set answer ${null} ; foreach temp ${param2} $(if $([ ${param1} == ${temp} ]) $(set answer ${temp})) ; if ${answer} $(set ${param0} "#"${param2}"@"${answer})) #----------------------------------------------------------------------------- ##イベント処理ルーチン #----------------------------------------------------------------------------- ##分単位処理 event.OnMinuteChange : $(if $([ $(expr ${freeze} | ${silence}) -lt 2 ]) ${CallOclock}${CallWorktime}) #------------------------------------- ##時報 CallOclock : $(if $([ $(date %M) -eq 0 ]) ${countzero}$(eval "${TalkTime"$(date %H)"}")) #------------------------------------- ##経過時間 CallWorktime : $(if $([ ${flagmin} -eq 0 ]) $(set flagmin 1) $(if $([ ${parawork} -eq 0 ]) ${CallWorktimeA} ${CallWorktimeB})) CallWorktimeA : $(if $([ ${system.Reference0} -ne ${timework} ]) $(set timework ${system.Reference0})${CallWorktimeX}) CallWorktimeB : $(inc cntwork 1)$(if $([ 60 -le ${cntwork} ]) $(set cntwork 0 ; inc timework)${CallWorktimeX}) CallWorktimeX : ${countzero}$(if $([ 20 -le ${timework} ]) ${TalkWorktimeVerylong} $(if $([ 11 -le ${timework} ]) ${TalkWorktimeLong} $(if $([ 8 -le ${timework} ]) ${TalkWorktimeMiddle} $(if $([ 5 -le ${timework} ]) ${TalkWorktimeShort} ${TalkWorktimeVeryshort})))) #------------------------------------- ##秒単位処理 #event.OnSecondChange : $(if $([ $(expr ${freeze} | ${silence}) -lt 2 ]) ${CallKasanari}${CallMikire}${Calltalk}) event.OnSecondChange : $(set timetemp1 ${randTalk})$(if $([ ${timetemp1} == ${interval} ]) \a\e ${CallKasanari}${CallMikire}) interval : 21 randTalk : ${rand15s} , ${rand30s} , ${rand60s} , ${rand90s} , ${rand120s} #こういうのは窮余の一策というのか? rand15s : a , b , c rand30s : 0 , 1 , 2 , 3 , 4 , 5 , 6 rand60s : 10 , 11 , 12 , 13 , 14 , 15 , 16 , 17 , 18 , 19 , 20 , 21 rand90s : 30 , 31 , 32 , 33 , 34 , 35 , 36 , 37 , 38 , 39 , 40 , 41 , 42 , 43 , 44 , 45 , 46 , 47 rand120s : 60 , 61 , 62 , 63 , 64 , 65 , 66 , 67 , 68 , 69 , 70 , 71 , 72 , 73 , 74 , 75 , 76 , 77 , 78 , 79 , 80 , 81 , 82 , 83 #------------------------------------- ##トーク Calltalk : $(if $([ ${silence} -eq 0 ]) $(inc cnttalk 1)$(if $([ ${interval} -lt ${cnttalk} ]) ${countzero}\a)) #------------------------------------- ##見切れ CallMikire : $(if $([ ${system.Reference1} -eq 1 ]) ${CallMikire1} ${CallMikire2}) CallMikire1 :$(inc cntmikire 1 ; if $([ 60 -lt ${cntmikire} ]) $(set flagmikire 1)$(set cntmikire 0)${countzero}${TalkMikire}) CallMikire2 : $(set cntmikire 55 ; if $([ ${flagmikire} -eq 1 ]) $(set flagmikire 0)${countzero}${TalkMikirez}) #------------------------------------- ##重なり CallKasanari : $(if $([ ${system.Reference2} -eq 1 ]) ${CallKasanari1} $(set cntkasanari 52)) CallKasanari1 :$(inc cntkasanari 1 60 ; if $([ 60 -lt ${cntkasanari} ]) $(set cntkasanari 0)${countzero}${TalkKasanari}) #------------------------------------- ##頭撫で・胸触り event.OnMouseMove : $(if $([ ${system.Reference3} -eq 1 ]) $(set temp "Unyu") $(set temp "Sakura"))${CallHead} CallHead : $(if $([ ${system.Reference4} == "Head" ]) ${CallHead1} ${CallBust}) CallHead1 : $(inc cnthead 1 50)$(if $([ 49 -lt ${cnthead} ]) $(eval ${countzero}"${Talk"${temp}"HeadPat}")) CallBust : $(if $([ ${system.Reference4} == "Bust" ]) ${CallBust1} ${CallMovecancel}) CallBust1 : $(inc cntbust 1 50 ; if ${flagbust} ${CallBust2} ${CallBust3}) CallBust2 : $(if $([ 49 -lt ${cntbust} ]) ${countzero}$(set flagbust 0 ; eval "${Talk"${temp}"BustPatFull}")) CallBust3 : $(if $([ 39 -lt ${cntbust} ]) ${countzero}$(set flagbust 1 ; eval "${Talk"${temp}"BustPatHalf}")) CallMovecancel : $(inc cntcancel 1 100 ; if $([ 99 -lt ${cntcancel} ]) $(set cntcancel 0 ; set flagbust 0 ; set cnthead 0 ; set cntbust 0)) #------------------------------------- ##ダブルクリック event.OnMouseDoubleClick : $(if $([ ${system.Reference3} -eq 1 ]) $(set temp "Unyu") $(set temp "Sakura"))${countzero}$(eval "${Talk"${temp}${system.Reference4}"Click}") #------------------------------------- ##選択肢 event.OnChoiceSelect : ${countzero}$(if $([ ${system.Reference0} == "#cancel" ]) ${countzero}${Select.Cancel} $(if $(expr find ${system.Reference0} "http:") $(eval "\j["${system.Reference0}"]\_e\e") ${countzero}$(set temp ${Select.${system.Reference0}} ; eval ${temp}))) #------------------------------------- ##選択肢タイムアウト event.OnChoiceTimeout : ${countzero}${TalkTimeout} #------------------------------------- ##サーフェイス復帰 event.OnSurfaceRestore : $(if $([ ${system.Reference1} -eq 10 ]) $(eval "${TalkReturn"${system.Reference0}"}") $(eval "${TalkReturn"${system.Reference1}"}")) #------------------------------------- ##メールチェック event.OnBIFFBegin : ${countfreeze}${TalkMailstart} event.OnBIFFComplete : ${countzero}$(if $([ ${system.Reference0} -eq 0 ]) ${TalkNomail} ${TalkGottaMail}) event.OnBIFFFailure : ${countzero}$(set temp1 1 ; foreach temp dataBIFFerror $(if $(expr find ${system.Reference0} ${temp}) $(eval "${TalkMail"${temp}"}" ; set temp1 0)) ; if ${temp1} "\h\s[2]「"${system.Reference0}"」エラー発生。\e") dataBIFFerror : timeout , kick , defect #------------------------------------- ##ヘッドラインセンス event.OnHeadlinesenseBegin : $(set JumpURL "\j["${system.Reference1}"]\_e")${countfreeze}${TalkHeadlineBegin} event.OnHeadlinesenseComplete : ${CallHeadlineFail} event.OnHeadlinesenseFailure : ${CallHeadlineFail} CallHeadlineFail : ${countzero}$(if $([ "no update" == ${system.Reference0} ]) ${TalkHeadlineNoupdate} $(if $([ "can't download" == ${system.Reference0} ]) ${TalkHeadlineFailed} $(if $([ "can't analyze" == ${system.Reference0} ]) ${TalkHeadlineMiss} "\h\s[2]「"${system.Reference0}"」エラー発生\e"))) event.OnHeadlinesense.OnFind : \t${CallHeadlineRead1}\n\n${system.Reference3}\n${CallHeadlineRead2} CallHeadlineRead1 : $(if $([ $(expr find ${system.Reference2} "First") == "First" ]) ${TalkHeadlineFirst} ${TalkHeadlineNext}) CallHeadlineRead2 : $(if $([ $(expr find ${system.Reference2} "Last") == "Last" ]) ${TalkHeadlineChoiceEnd} ${TalkHeadlineChoice}) #------------------------------------- ##初回起動 event.OnFirstBoot : \t${countfreeze}${TalkFirstboot}${countzero} #------------------------------------- ##起動 event.OnBoot : \t${countzero}${HourZone}$(eval "${TalkBootup"${timezone}"}") #------------------------------------- ##終了 event.OnClose : \t${countfreeze}${HourZone}${CallSave}$(eval "${TalkClose"${timezone}"}")\w9\w9\- #------------------------------------- ##最小化 event.OnWindowStateMinimize : \t${countfreeze}${CallSave} #------------------------------------- ##最小化から復帰 event.OnWindowStateRestore : \t$(set flagmin 0)${countzero}${TalkRestore} #------------------------------------- ##他のゴーストへ変更 event.OnGhostChanging : ${countfreeze}${CallSave}${TalkGhostchanging} #------------------------------------- ##他のゴーストからの変更 event.OnGhostChanged : ${countzero}${TalkGhostchanged} #------------------------------------- ##サーフェイスセット切り替え event.OnSurfaceSetChanging : ${countfreeze}${TalkSurfacechanging} event.OnSurfaceSetChanged : ${countzero}${TalkSurfacechanged} #------------------------------------- ##シェル切り替え event.OnShellChanging : ${countfreeze}${TalkShellchanging} event.OnShellChanged : ${countzero}${TalkShellchanged} #------------------------------------- ##うた event.OnMusicPlay : $(if $([ $(expr ${freeze} | ${silence}) -eq 0 ]) ${CallWinamp}${countzero}${TalkWinampplay}) CallWinamp : $(set param1 ${system.Reference0} ; set Wartist ${null} ; if $([ $(expr substr ${param1} 1 2) == "- " ]) $(set temp $(expr length ${param1}) ; dec temp 2 ; set Wtitle $(expr substr ${param1} 3 ${temp})) ${CallWinamp1}) CallWinamp1 : $(if $(expr find ${param1} " - ") ${CallWinamp2} $(set Wtitle ${param1})) CallWinamp2 : ${CallWinamp3}${CallWinamp4}${CallWinamp5}${CallWinamp6} CallWinamp3 : $(set temp 1 ; set temp1 $(expr length " - ") ; set temp2 $(expr length ${param1}) ; set temp2 $(expr ${temp2} - ${temp1}) ; set temp3 ${temp2} ; set param2 ${temp1} ; inc temp1) CallWinamp4 : $(until $([ ${temp3} -eq 0 ]) $(dec temp3 ; if $([ $(expr substr ${param1} ${temp} ${param2}) == " - " ]) $(set temp3 0 ; dec temp) $(inc temp ; inc temp1 ; dec temp2))) CallWinamp5 : $(set Wartist $(expr substr ${param1} 1 ${temp})) CallWinamp6 : $(set Wtitle $(expr substr ${param1} ${temp1} ${temp2})) #------------------------------------- ##時計合わせ event.OnSNTPBegin : ${countfreeze}${TalkNTPstart} event.OnSNTPCompare : ${CallSntpCompare1}${CallSntpCompare2}${CallSntpCompare3} CallSntpCompare1 : $(set param0 "TimeSNTP")$(set param1 ${system.Reference1})${TimeDisplay} CallSntpCompare2 : $(set param0 "TimeLOCAL")$(set param1 ${system.Reference2})${TimeDisplay} CallSntpCompare3 : \t${countzero}${TalkNTPcompare} event.OnSNTPFailure : ${countzero}${TalkNTPfailed} #------------------------------------- ##ネットワーク更新 event.OnUpdateBegin : ${countfreeze}${TalkUpdatebegin} event.OnUpdateComplete : ${countzero}$(if $([ ${system.Reference0} == "none" ]) ${TalkUpdatenoupdate} ${TalkUpdatecomplete}) event.OnUpdateFailure : ${countzero}$(set temp1 1 ; foreach temp dataupdateerror $(if $(expr find ${system.Reference0} ${temp}) $(eval "${TalkUpdatefail"${temp}"}" ; set temp1 0)) ; if ${temp1} ${TalkUpdatefailetc}) dataupdateerror : timeout , md5 , 404 , 403 event.OnUpdate.OnDownloadBegin : ${TalkDownloadbegin} event.OnUpdate.OnMD5CompareBegin : ${TalkMD5Begin} event.OnUpdate.OnMD5CompareComplete : ${TalkMD5Complete} event.OnUpdate.OnMD5CompareFailure : ${TalkMD5Fail} #------------------------------------- ##ネットワーク event.OnNetworkHeavy : ${TalkNetworkheavy} #------------------------------------- ##インストール event.OnInstallBegin : ${countfreeze}\t${TalkInstallbegin} event.OnInstallComplete : ${callInstallComplete1}${callInstallComplete2} callInstallComplete1 : $(if $(expr find ${system.Reference1} ",") ${callInstallComplete3} $(set installname ${system.Reference1})) callInstallComplete2 : ${count zero}$(set temp1 "TalkInstall" ; foreach temp datainst $(if $(expr find ${system.Reference0} ${temp}) $(set temp1 ${temp1}${temp})) ; eval "${"${temp1}"}") callInstallComplete3 : ${callInstallComplete4}${callInstallComplete5}${callInstallComplete6} callInstallComplete4 : $(set param1 ${system.Reference1} ; set temp1 $(expr length ${param1}) ; set temp3 0 ;set temp4 0) callInstallComplete5 : ${SerchComma}$(set installname $(expr substr ${param1} ${temp3} ${temp4})) callInstallComplete6 : ${SerchComma}$(set installname1 $(expr substr ${param1} ${temp3} ${temp4})) event.OnInstallFailure : ${countzero}${TalkInstallfail} event.OnInstallRefuse : ${countzero}${TalkInstallrefuse} #------------------------------------- ##壁紙変更 event.OnWallpaperChange : ${countzero}${TalkWallpaper} #------------------------------------- ##SSTPブレーク event.OnSSTPBreak : ${countzero}${TalkSSTPbreak} #------------------------------------- ##SSTPブラックリスティング event.OnSSTPBlacklisting : ${countzero}\t${TalkBlacklist} #------------------------------------- ##スケジュール (SSP) event.OnSchedule5MinutesToGo : $(set param0 "DataIconType" ; set param1 ${system.Reference0} ; set param2 "dataicon")${SerchDataBase}${countzero}${TalkSchedule5Min.ToGo} event.OnScheduleRead : $(set param0 "DataIconType" ; set param1 ${system.Reference0} ; set param2 "dataicon")${SerchDataBase}${countzero}${TalkScheduleRead} event.OnSchedulesenseBegin : ${countfreeze}${TalkScheduleSenseBegin} event.OnSchedulesenseComplete : ${countzero}${TalkScheduleSenseComplete} event.OnSchedulesenseFailure : ${countzero}$(if $([ "no update" == ${system.Reference0} ]) ${TalkScheduleSenseNoupdate} $(if $([ "can't download" == ${system.Reference0} ]) ${TalkScheduleSenseFailed} $(if $([ "can't analyze" == ${system.Reference0} ]) ${TalkSchedualSenceMiss} "\h\s[2]「"${system.Reference0}"」エラー発生\e"))) event.OnSchedulepostBegin : ${countfreeze}${TalkSchedulePostBegin} event.OnSchedulepostComplete : ${countzero}${TalkSchedulePostComplete} #------------------------------------- ##ファイルドロップ event.OnFileDropping : ${countzero}$(set param1 ${system.Reference0})${CallFileType}$(if ${answer} $(eval "${TalkFileDrop."${answer}"}")) CallFileType : $(set answer ${null} ; set temp1 $(expr length ${param1}) ; until $([ ${temp1} -eq 0 ]) $(set temp2 $(expr substr ${param1} ${temp1} 1) ; dec temp1 ; if $([ ${temp2} == "." ]) $(set temp1 0) $(if $([ ${temp2} == "\\" ]) $(set temp1 0 ; set answer ${null}) $(if $(pirocall "#."${temp2}) $(set answer $(pirocall "#."${temp2})${answer}) $(set answer ${temp2}${answer}))))) #----------------------------------------------------------------------------- ##だぶるている event-OnDoubleTailScriptSend : ${system.Reference0} #----------------------------------------------------------------------------- ##以下、未対応 #----------------------------------------------------------------------------- #event.OnMouseWheel : \_q\u\s[10](栞)マウスホイールが動かされました。${DataResult}\_q\e #event.OnMouseClick : \_q\u\s[10](栞)マウスがクリックされました。${DataResult}\_q\e #event.OnSNTPCorrect : \_q\u\s[10](栞)時刻を修正しました。${DataResult}\_q\e #event.OnFileDrop : \_q\u\s[10](栞)ファイルがドロップされました。${DataResult}\_q\e #event.OnDirectoryDrop : \_q\u\s[10](栞)ディレクトリがドロップされました。${DataResult}\_q\e #event.OnDisplayChange : \_q\u\s[10](栞)デスクトップが変更されました。${DataResult}\_q\e #event.OnSurfaceChange : \_q\u現在のサーフェス情報が通知されました。\_q\e #DataResult : \h\s[0]0:${system.Reference0}\n1:${system.Reference1}\n2:${system.Reference2}\n3:${system.Reference3}\n4:${system.Reference4}\n5:${system.Reference5}\n6:${system.Reference6}\n7:${system.Reference7} #----------------------------------------------------------------------------- ##汎用文字列検索 (matchwords) #入力パラメータ #param0 : 解答変数名 #param1 : 検索される文字列 #param2 : 検索する文字列 #param3 : 検索を開始する位置(1〜) #戻りパラメータ #${param0} : 一致した文字の位置(0は、一致する文字列無し) #処理変数 #temp : ループ用 #temp1 : param1の文字数 #temp2 : param2の文字数 #temp3 : 検索中の位置 matchwords : $(set ${param0} 0)${matchwords1}${matchwords2}${matchwords3} matchwords1 : $(set temp1 $(expr length ${param1}) ; set temp2 $(expr length ${param2}) ; set temp3 $(expr ${param3} - 1)) matchwords2 : $(set temp $(expr 2 + ${temp1}) ; set temp $(expr ${temp} - ${temp2}) ; set temp $(expr ${temp} - ${param3})) matchwords3 : $(until $([ ${temp} -eq 0 ]) $(dec temp ; inc temp3 ; if $([ $(expr substr ${param1} ${temp3} ${temp2}) == ${param2} ]) $(set ${param0} ${temp3} ; set temp 0))) #-----------------------------------------------------------------------------