HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2024
0328
ABATBelieverHSP3上で動くインタプリタ言語、変数付き2解決


ABATBeliever

リンク

2024/3/28(Thu) 11:40:54|NO.101463

HSP3上で動くインタプリタ言語という変な概念ですが、そこに変数を実装してみました。
今になって考えたら配列変数使えばこんな頭おかしいコード要らなかったですね。
最適化はいくらでも行けると思うんで、供養してください。
PES(Porable Editable Script)

インタプリタのソース(すごくスパゲティ)

#uselib "gdi32.dll" #uselib "user32.dll" #func SetProcessDPIAware "SetProcessDPIAware" SetProcessDPIAware font "FixedSys" //DPI screen 0,700,600 AppName="Portable Editable Script - 実行環境 HSP.tv版" title AppName #module #deffunc Writelog str p1,int p2 //ログ書き込み if p2=0{Var2@=">>"+p1+"\n"+Var2@} if p2=1{Var2@="@"+p1+"\n"+Var2@} if p2=2{Var2@="@"+p1+"\n"+Var2@:objprm 5,Var2@:dialog p1:return} objprm 5,Var2@ return #deffunc substitution var _p1,str _p2,str _p3 //文字列置換 index=0 str_index=0 message=_p1 repeat str_index=instr(message,index,_p2) if str_index=-1 : break message=strmid(message,0,index+str_index)+_p3+strmid(message,-1,strlen(message)-(index+str_index+strlen(_p2))) index=index+str_index+strlen(_p3) loop sdim _p1 _p1=message return #global Var0=AppName:objsize 700,40:pos 0,0:mesbox Var0,700,40,0 objsize 50,30:pos 0,40:button gosub "読込",*FileLoad Var1="ファイルパス...":objsize 600,30:pos 50,40:mesbox Var1,550,30,0 objsize 50,30:pos 600,40:button "実行",*FileRUN objsize 50,30:pos 650,40:button "停止",*FileStop Var2="":pos 0,70:mesbox Var2,350,530,0 sdim Var3,0x0000FFFF Var3="ここに記述" pos 350,70:mesbox Var3,350,530 notesel buffers stop *FileLoad dialog "pes",16,"PES形式を選択" if stat!=1{return} noteload refstr objprm 2,refstr objprm 6,buffers return *FileStop Writelog "[停止]\n\n\n",0 title AppName objenable 6,1 stop *FileRUN objenable 6,0 Var2="================" buffers=Var3 notesel buffers noteget tmp,0//PESフラグ if tmp!="!PES-Binary!"{Writelog "不正な形式 / 先頭にPESバイナリである宣言がされていません。\n'!PES-Binary!'を書くべきですが、無視もできます。",2:stop} PESVer="":OS="":Go=0:Lines=0 V0x00="":V0x01="":v0x02="":v0x03="":v0x04="":v0x05="":v0x06="":v0x07="":v0x08="":v0x09="":v0x0A="":v0x0B="":v0x0C="":v0x0D="":v0x0E="":v0x0F="" WatchDog=0 tmp="" repeat (notemax-1)//Class Define noteget tmp,(cnt+3) if tmp="}"{break} split tmp,"=",tmp if tmp(0)="Version"{if stat!=2{Writelog "不正な形式 / 無効なバージョン",0}else{if tmp(1)="1"{Writelog "設定:PESのバージョンは 1 で、有効です。",0:PESVer=int(tmp(1)):continue}else{Writelog "不正な形式 / 無効なバージョン",0}}:continue} if tmp(0)="TargetOS"{ if stat!=2{ Writelog "不正な形式 / 無効な記述",0:continue }else{ if tmp(1)="All"{ Writelog "設定:PESの対象OSは 全般 に設定されました。[互換性あり]",0:OS="All":continue }else:if tmp(1)=sysinfo(0){ Writelog "設定:PESの対象OSは "+tmp(1)+" に設定されました。[互換性あり]",0:OS=tmp(1):continue }else:Writelog "All または "+sysinfo(0)+" を記述してください\n\n不正な形式 / 互換性のないOS対象\n>>設定:PESの対象OSは "+tmp(1)+" に設定されました。",2:continue } } split tmp," ",tmp if tmp(0)="Integer"{ if tmp(1)="const"{//Integer const 0x00 定数 中身" if stat!=5{Writelog "不正な形式 / const定数の定義構文が不正。",0:continue} if tmp(2)="0x00"{v0x00="0$"+tmp(3)+"$"+tmp(4):Writelog "const定数を定義成功 \n対象アドレス:"+tmp(2)+"\n与えられた定数名:"+tmp(3)+"\n中身:"+tmp(4)+"\n",0} if tmp(2)="0x01"{v0x01="0$"+tmp(3)+"$"+tmp(4):Writelog "const定数を定義成功 \n対象アドレス:"+tmp(2)+"\n与えられた定数名:"+tmp(3)+"\n中身:"+tmp(4)+"\n",0} if tmp(2)="0x02"{v0x02="0$"+tmp(3)+"$"+tmp(4):Writelog "const定数を定義成功 \n対象アドレス:"+tmp(2)+"\n与えられた定数名:"+tmp(3)+"\n中身:"+tmp(4)+"\n",0} if tmp(2)="0x03"{v0x03="0$"+tmp(3)+"$"+tmp(4):Writelog "const定数を定義成功 \n対象アドレス:"+tmp(2)+"\n与えられた定数名:"+tmp(3)+"\n中身:"+tmp(4)+"\n",0} if tmp(2)="0x04"{v0x04="0$"+tmp(3)+"$"+tmp(4):Writelog "const定数を定義成功 \n対象アドレス:"+tmp(2)+"\n与えられた定数名:"+tmp(3)+"\n中身:"+tmp(4)+"\n",0} if tmp(2)="0x05"{v0x05="0$"+tmp(3)+"$"+tmp(4):Writelog "const定数を定義成功 \n対象アドレス:"+tmp(2)+"\n与えられた定数名:"+tmp(3)+"\n中身:"+tmp(4)+"\n",0} if tmp(2)="0x06"{v0x06="0$"+tmp(3)+"$"+tmp(4):Writelog "const定数を定義成功 \n対象アドレス:"+tmp(2)+"\n与えられた定数名:"+tmp(3)+"\n中身:"+tmp(4)+"\n",0} if tmp(2)="0x07"{v0x07="0$"+tmp(3)+"$"+tmp(4):Writelog "const定数を定義成功 \n対象アドレス:"+tmp(2)+"\n与えられた定数名:"+tmp(3)+"\n中身:"+tmp(4)+"\n",0} if tmp(2)="0x08"{v0x08="0$"+tmp(3)+"$"+tmp(4):Writelog "const定数を定義成功 \n対象アドレス:"+tmp(2)+"\n与えられた定数名:"+tmp(3)+"\n中身:"+tmp(4)+"\n",0} if tmp(2)="0x09"{v0x09="0$"+tmp(3)+"$"+tmp(4):Writelog "const定数を定義成功 \n対象アドレス:"+tmp(2)+"\n与えられた定数名:"+tmp(3)+"\n中身:"+tmp(4)+"\n",0} if tmp(2)="0x0A"{v0x0A="0$"+tmp(3)+"$"+tmp(4):Writelog "const定数を定義成功 \n対象アドレス:"+tmp(2)+"\n与えられた定数名:"+tmp(3)+"\n中身:"+tmp(4)+"\n",0} if tmp(2)="0x0B"{v0x0B="0$"+tmp(3)+"$"+tmp(4):Writelog "const定数を定義成功 \n対象アドレス:"+tmp(2)+"\n与えられた定数名:"+tmp(3)+"\n中身:"+tmp(4)+"\n",0} if tmp(2)="0x0C"{v0x0C="0$"+tmp(3)+"$"+tmp(4):Writelog "const定数を定義成功 \n対象アドレス:"+tmp(2)+"\n与えられた定数名:"+tmp(3)+"\n中身:"+tmp(4)+"\n",0} if tmp(2)="0x0D"{v0x0D="0$"+tmp(3)+"$"+tmp(4):Writelog "const定数を定義成功 \n対象アドレス:"+tmp(2)+"\n与えられた定数名:"+tmp(3)+"\n中身:"+tmp(4)+"\n",0} if tmp(2)="0x0E"{v0x0E="0$"+tmp(3)+"$"+tmp(4):Writelog "const定数を定義成功 \n対象アドレス:"+tmp(2)+"\n与えられた定数名:"+tmp(3)+"\n中身:"+tmp(4)+"\n",0} if tmp(2)="0x0F"{v0x0F="0$"+tmp(3)+"$"+tmp(4):Writelog "const定数を定義成功 \n対象アドレス:"+tmp(2)+"\n与えられた定数名:"+tmp(3)+"\n中身:"+tmp(4)+"\n",0} } if tmp(1)="str"{//Integer str 0x01 if stat!=4{Writelog "不正な形式 / str変数の定義構文が不正。",0:continue} if tmp(2)="0x00"{v0x00="1$"+tmp(3)+"$null":Writelog "str変数を初期化成功 \n対象アドレス:"+tmp(2)+"\n与えられた変数名:"+tmp(3)+"\n初期値:null\n",0} if tmp(2)="0x01"{v0x01="1$"+tmp(3)+"$null":Writelog "str変数を初期化成功 \n対象アドレス:"+tmp(2)+"\n与えられた変数名:"+tmp(3)+"\n初期値:null\n",0} if tmp(2)="0x02"{v0x02="1$"+tmp(3)+"$null":Writelog "str変数を初期化成功 \n対象アドレス:"+tmp(2)+"\n与えられた変数名:"+tmp(3)+"\n初期値:null\n",0} if tmp(2)="0x03"{v0x03="1$"+tmp(3)+"$null":Writelog "str変数を初期化成功 \n対象アドレス:"+tmp(2)+"\n与えられた変数名:"+tmp(3)+"\n初期値:null\n",0} if tmp(2)="0x04"{v0x04="1$"+tmp(3)+"$null":Writelog "str変数を初期化成功 \n対象アドレス:"+tmp(2)+"\n与えられた変数名:"+tmp(3)+"\n初期値:null\n",0} if tmp(2)="0x05"{v0x05="1$"+tmp(3)+"$null":Writelog "str変数を初期化成功 \n対象アドレス:"+tmp(2)+"\n与えられた変数名:"+tmp(3)+"\n初期値:null\n",0} if tmp(2)="0x06"{v0x06="1$"+tmp(3)+"$null":Writelog "str変数を初期化成功 \n対象アドレス:"+tmp(2)+"\n与えられた変数名:"+tmp(3)+"\n初期値:null\n",0} if tmp(2)="0x07"{v0x07="1$"+tmp(3)+"$null":Writelog "str変数を初期化成功 \n対象アドレス:"+tmp(2)+"\n与えられた変数名:"+tmp(3)+"\n初期値:null\n",0} if tmp(2)="0x08"{v0x08="1$"+tmp(3)+"$null":Writelog "str変数を初期化成功 \n対象アドレス:"+tmp(2)+"\n与えられた変数名:"+tmp(3)+"\n初期値:null\n",0} if tmp(2)="0x09"{v0x09="1$"+tmp(3)+"$null":Writelog "str変数を初期化成功 \n対象アドレス:"+tmp(2)+"\n与えられた変数名:"+tmp(3)+"\n初期値:null\n",0} if tmp(2)="0x0A"{v0x0A="1$"+tmp(3)+"$null":Writelog "str変数を初期化成功 \n対象アドレス:"+tmp(2)+"\n与えられた変数名:"+tmp(3)+"\n初期値:null\n",0} if tmp(2)="0x0B"{v0x0B="1$"+tmp(3)+"$null":Writelog "str変数を初期化成功 \n対象アドレス:"+tmp(2)+"\n与えられた変数名:"+tmp(3)+"\n初期値:null\n",0} if tmp(2)="0x0C"{v0x0C="1$"+tmp(3)+"$null":Writelog "str変数を初期化成功 \n対象アドレス:"+tmp(2)+"\n与えられた変数名:"+tmp(3)+"\n初期値:null\n",0} if tmp(2)="0x0D"{v0x0D="1$"+tmp(3)+"$null":Writelog "str変数を初期化成功 \n対象アドレス:"+tmp(2)+"\n与えられた変数名:"+tmp(3)+"\n初期値:null\n",0} if tmp(2)="0x0E"{v0x0E="1$"+tmp(3)+"$null":Writelog "str変数を初期化成功 \n対象アドレス:"+tmp(2)+"\n与えられた変数名:"+tmp(3)+"\n初期値:null\n",0} if tmp(2)="0x0F"{v0x0F="1$"+tmp(3)+"$null":Writelog "str変数を初期化成功 \n対象アドレス:"+tmp(2)+"\n与えられた変数名:"+tmp(3)+"\n初期値:null\n",0} } if tmp(1)="int"{//Integer int 0x0F if stat!=4{Writelog "不正な形式 / int変数の定義構文が不正。",0:continue} if tmp(2)="0x00"{v0x00="2$"+tmp(3)+"$0":Writelog "int変数を初期化成功 \n対象アドレス:"+tmp(2)+"\n与えられた変数名:"+tmp(3)+"\n初期値:0\n",0} if tmp(2)="0x01"{v0x01="2$"+tmp(3)+"$0":Writelog "int変数を初期化成功 \n対象アドレス:"+tmp(2)+"\n与えられた変数名:"+tmp(3)+"\n初期値:0\n",0} if tmp(2)="0x02"{v0x02="2$"+tmp(3)+"$0":Writelog "int変数を初期化成功 \n対象アドレス:"+tmp(2)+"\n与えられた変数名:"+tmp(3)+"\n初期値:0\n",0} if tmp(2)="0x03"{v0x03="2$"+tmp(3)+"$0":Writelog "int変数を初期化成功 \n対象アドレス:"+tmp(2)+"\n与えられた変数名:"+tmp(3)+"\n初期値:0\n",0} if tmp(2)="0x04"{v0x04="2$"+tmp(3)+"$0":Writelog "int変数を初期化成功 \n対象アドレス:"+tmp(2)+"\n与えられた変数名:"+tmp(3)+"\n初期値:0\n",0} if tmp(2)="0x05"{v0x05="2$"+tmp(3)+"$0":Writelog "int変数を初期化成功 \n対象アドレス:"+tmp(2)+"\n与えられた変数名:"+tmp(3)+"\n初期値:0\n",0} if tmp(2)="0x06"{v0x06="2$"+tmp(3)+"$0":Writelog "int変数を初期化成功 \n対象アドレス:"+tmp(2)+"\n与えられた変数名:"+tmp(3)+"\n初期値:0\n",0} if tmp(2)="0x07"{v0x07="2$"+tmp(3)+"$0":Writelog "int変数を初期化成功 \n対象アドレス:"+tmp(2)+"\n与えられた変数名:"+tmp(3)+"\n初期値:0\n",0} if tmp(2)="0x08"{v0x08="2$"+tmp(3)+"$0":Writelog "int変数を初期化成功 \n対象アドレス:"+tmp(2)+"\n与えられた変数名:"+tmp(3)+"\n初期値:0\n",0} if tmp(2)="0x09"{v0x09="2$"+tmp(3)+"$0":Writelog "int変数を初期化成功 \n対象アドレス:"+tmp(2)+"\n与えられた変数名:"+tmp(3)+"\n初期値:0\n",0} if tmp(2)="0x0A"{v0x0A="2$"+tmp(3)+"$0":Writelog "int変数を初期化成功 \n対象アドレス:"+tmp(2)+"\n与えられた変数名:"+tmp(3)+"\n初期値:0\n",0} if tmp(2)="0x0B"{v0x0B="2$"+tmp(3)+"$0":Writelog "int変数を初期化成功 \n対象アドレス:"+tmp(2)+"\n与えられた変数名:"+tmp(3)+"\n初期値:0\n",0} if tmp(2)="0x0C"{v0x0C="2$"+tmp(3)+"$0":Writelog "int変数を初期化成功 \n対象アドレス:"+tmp(2)+"\n与えられた変数名:"+tmp(3)+"\n初期値:0\n",0} if tmp(2)="0x0D"{v0x0D="2$"+tmp(3)+"$0":Writelog "int変数を初期化成功 \n対象アドレス:"+tmp(2)+"\n与えられた変数名:"+tmp(3)+"\n初期値:0\n",0} if tmp(2)="0x0E"{v0x0E="2$"+tmp(3)+"$0":Writelog "int変数を初期化成功 \n対象アドレス:"+tmp(2)+"\n与えられた変数名:"+tmp(3)+"\n初期値:0\n",0} if tmp(2)="0x0F"{v0x0F="2$"+tmp(3)+"$0":Writelog "int変数を初期化成功 \n対象アドレス:"+tmp(2)+"\n与えられた変数名:"+tmp(3)+"\n初期値:0\n",0} } } loop if PESVer!="" and OS!=""{Go=1}else{Writelog "不正な形式 / 「Class Define」の終端時に、必要な情報が定義されていません。",2:goto *FileStop} if Go=0{Writelog "不正な形式 / 「Class Define」の終端がないまま最終行に到達しました。",2:goto *FileStop} BLines=0 repeat notemax noteget tmp,cnt if tmp="Class Main{"{BLines=cnt+1:break} loop Lines=BLines if Lines=0{Writelog "不正な形式 / 「Class Main」の宣言がないまま最終行に到達しました。",2:goto *FileStop}else{Writelog "\n定義完了 メインは"+str(Lines)+" 行目からです\n",0} repeat WatchDog=WatchDog+1 if WatchDog\300=0{dialog ""+str(WatchDog)+"回実行されたみたいです。\n続ける(Y)/終わる(N)",2,"WatchDog":if stat=7{goto *FileStop}} await 1:wait 1 title AppName+" - [実行中] "+Lines+"行目 "+WatchDog+"回目のロード" if Lines>notemax{Writelog "不正な形式 / 終端は '}' でなければなりません",2:goto *FileStop}//オーバーロード対策 noteget tmp,Lines:Lines=Lines+1//取得・次回取得するのを下へ if tmp=""{continue}//改行だけの場合 Writelog tmp,0//ログに表示する repeat 1 //文字の書き換え split v0x00,"$",tmpsub:if stat=3{substitution tmp,"@"+tmpsub(1)+"@",tmpsub(2)} split v0x01,"$",tmpsub:if stat=3{substitution tmp,"@"+tmpsub(1)+"@",tmpsub(2)} split v0x02,"$",tmpsub:if stat=3{substitution tmp,"@"+tmpsub(1)+"@",tmpsub(2)} split v0x03,"$",tmpsub:if stat=3{substitution tmp,"@"+tmpsub(1)+"@",tmpsub(2)} split v0x04,"$",tmpsub:if stat=3{substitution tmp,"@"+tmpsub(1)+"@",tmpsub(2)} split v0x05,"$",tmpsub:if stat=3{substitution tmp,"@"+tmpsub(1)+"@",tmpsub(2)} split v0x06,"$",tmpsub:if stat=3{substitution tmp,"@"+tmpsub(1)+"@",tmpsub(2)} split v0x07,"$",tmpsub:if stat=3{substitution tmp,"@"+tmpsub(1)+"@",tmpsub(2)} split v0x08,"$",tmpsub:if stat=3{substitution tmp,"@"+tmpsub(1)+"@",tmpsub(2)} split v0x09,"$",tmpsub:if stat=3{substitution tmp,"@"+tmpsub(1)+"@",tmpsub(2)} split v0x0A,"$",tmpsub:if stat=3{substitution tmp,"@"+tmpsub(1)+"@",tmpsub(2)} split v0x0B,"$",tmpsub:if stat=3{substitution tmp,"@"+tmpsub(1)+"@",tmpsub(2)} split v0x0C,"$",tmpsub:if stat=3{substitution tmp,"@"+tmpsub(1)+"@",tmpsub(2)} split v0x0D,"$",tmpsub:if stat=3{substitution tmp,"@"+tmpsub(1)+"@",tmpsub(2)} split v0x0E,"$",tmpsub:if stat=3{substitution tmp,"@"+tmpsub(1)+"@",tmpsub(2)} split v0x0F,"$",tmpsub:if stat=3{substitution tmp,"@"+tmpsub(1)+"@",tmpsub(2)} substitution tmp,"@OS@",sysinfo(0)//環境変数 substitution tmp,"@USER@",sysinfo(1) substitution tmp,"@Computer@",sysinfo(2) substitution tmp,"@Folder@",dirinfo(0) substitution tmp,"@EXEFolder@",dirinfo(1) substitution tmp,"@Windows@",dirinfo(2) substitution tmp,"@System32@",dirinfo(3) substitution tmp,"@Desktop@",dir_desktop substitution tmp,"@Documents@",dir_mydoc substitution tmp,"@Year@",str(gettime(0)) substitution tmp,"@Month@",str(gettime(1)) substitution tmp,"@Day@",str(gettime(3)) substitution tmp,"@Hour@",str(gettime(4)) substitution tmp,"@Minute@",str(gettime(5)) substitution tmp,"@Second@",str(gettime(6)) loop split tmp," ",tmp if tmp(0)="exist"{//exist 対象 int変数 if stat!=3{Writelog "不正な形式 / existの引数が不正 "+stat,1:continue} exist tmp(1)//変数は 形式番号$名前$値 2はint Writelog "[exist] / "+strsize if strsize = -1 {//存在しない split v0x00,"$",tmpsub:if tmp(2)=tmpsub(1){if tmpsub(0)="2"{v0x00="2$"+tmpsub(1)+"$0"}} split v0x01,"$",tmpsub:if tmp(2)=tmpsub(1){if tmpsub(0)="2"{v0x01="2$"+tmpsub(1)+"$0"}} split v0x02,"$",tmpsub:if tmp(2)=tmpsub(1){if tmpsub(0)="2"{v0x02="2$"+tmpsub(1)+"$0"}} split v0x03,"$",tmpsub:if tmp(2)=tmpsub(1){if tmpsub(0)="2"{v0x03="2$"+tmpsub(1)+"$0"}} split v0x04,"$",tmpsub:if tmp(2)=tmpsub(1){if tmpsub(0)="2"{v0x04="2$"+tmpsub(1)+"$0"}} split v0x05,"$",tmpsub:if tmp(2)=tmpsub(1){if tmpsub(0)="2"{v0x05="2$"+tmpsub(1)+"$0"}} split v0x06,"$",tmpsub:if tmp(2)=tmpsub(1){if tmpsub(0)="2"{v0x06="2$"+tmpsub(1)+"$0"}} split v0x07,"$",tmpsub:if tmp(2)=tmpsub(1){if tmpsub(0)="2"{v0x07="2$"+tmpsub(1)+"$0"}} split v0x08,"$",tmpsub:if tmp(2)=tmpsub(1){if tmpsub(0)="2"{v0x08="2$"+tmpsub(1)+"$0"}} split v0x09,"$",tmpsub:if tmp(2)=tmpsub(1){if tmpsub(0)="2"{v0x09="2$"+tmpsub(1)+"$0"}} split v0x0A,"$",tmpsub:if tmp(2)=tmpsub(1){if tmpsub(0)="2"{v0x0A="2$"+tmpsub(1)+"$0"}} split v0x0B,"$",tmpsub:if tmp(2)=tmpsub(1){if tmpsub(0)="2"{v0x0B="2$"+tmpsub(1)+"$0"}} split v0x0C,"$",tmpsub:if tmp(2)=tmpsub(1){if tmpsub(0)="2"{v0x0C="2$"+tmpsub(1)+"$0"}} split v0x0D,"$",tmpsub:if tmp(2)=tmpsub(1){if tmpsub(0)="2"{v0x0D="2$"+tmpsub(1)+"$0"}} split v0x0E,"$",tmpsub:if tmp(2)=tmpsub(1){if tmpsub(0)="2"{v0x0E="2$"+tmpsub(1)+"$0"}} split v0x0F,"$",tmpsub:if tmp(2)=tmpsub(1){if tmpsub(0)="2"{v0x0F="2$"+tmpsub(1)+"$0"}} }else{//存在した split v0x00,"$",tmpsub:if tmp(2)=tmpsub(1){if tmpsub(0)="2"{v0x00="2$"+tmpsub(1)+"$1"}} split v0x01,"$",tmpsub:if tmp(2)=tmpsub(1){if tmpsub(0)="2"{v0x01="2$"+tmpsub(1)+"$1"}} split v0x02,"$",tmpsub:if tmp(2)=tmpsub(1){if tmpsub(0)="2"{v0x02="2$"+tmpsub(1)+"$1"}} split v0x03,"$",tmpsub:if tmp(2)=tmpsub(1){if tmpsub(0)="2"{v0x03="2$"+tmpsub(1)+"$1"}} split v0x04,"$",tmpsub:if tmp(2)=tmpsub(1){if tmpsub(0)="2"{v0x04="2$"+tmpsub(1)+"$1"}} split v0x05,"$",tmpsub:if tmp(2)=tmpsub(1){if tmpsub(0)="2"{v0x05="2$"+tmpsub(1)+"$1"}} split v0x06,"$",tmpsub:if tmp(2)=tmpsub(1){if tmpsub(0)="2"{v0x06="2$"+tmpsub(1)+"$1"}} split v0x07,"$",tmpsub:if tmp(2)=tmpsub(1){if tmpsub(0)="2"{v0x07="2$"+tmpsub(1)+"$1"}} split v0x08,"$",tmpsub:if tmp(2)=tmpsub(1){if tmpsub(0)="2"{v0x08="2$"+tmpsub(1)+"$1"}} split v0x09,"$",tmpsub:if tmp(2)=tmpsub(1){if tmpsub(0)="2"{v0x09="2$"+tmpsub(1)+"$1"}} split v0x0A,"$",tmpsub:if tmp(2)=tmpsub(1){if tmpsub(0)="2"{v0x0A="2$"+tmpsub(1)+"$1"}} split v0x0B,"$",tmpsub:if tmp(2)=tmpsub(1){if tmpsub(0)="2"{v0x0B="2$"+tmpsub(1)+"$1"}} split v0x0C,"$",tmpsub:if tmp(2)=tmpsub(1){if tmpsub(0)="2"{v0x0C="2$"+tmpsub(1)+"$1"}} split v0x0D,"$",tmpsub:if tmp(2)=tmpsub(1){if tmpsub(0)="2"{v0x0D="2$"+tmpsub(1)+"$1"}} split v0x0E,"$",tmpsub:if tmp(2)=tmpsub(1){if tmpsub(0)="2"{v0x0E="2$"+tmpsub(1)+"$1"}} split v0x0F,"$",tmpsub:if tmp(2)=tmpsub(1){if tmpsub(0)="2"{v0x0F="2$"+tmpsub(1)+"$1"}} } continue } if tmp(0)="alert"{//alert 文(空白可能) repeat (stat-1) tmp=tmp(cnt+1) loop Writelog "[alert] "+tmp,1 dialog tmp continue } if tmp(0)="copy"{//copy 元 先 if stat!=3{Writelog "不正な形式 / copyの引数が不正 "+stat,1:continue} bcopy tmp(1),tmp(2) Writelog "コピーしました / "+tmp(1)+" "+tmp(2) continue } if tmp(0)="delete"{//delete ファイル if stat!=2{Writelog "不正な形式 / deleteの引数が不正 "+stat,1:continue} dialog "delere命令は以下のファイルの削除をもくろんでいます。許容しますか?\n\n"+tmp(1),3,"警告" if stat=6{delete tmp(1):Writelog "削除しました / "+tmp(1)} continue } if tmp(0)="which"{//which 内容 Yのジャンプ Nのジャンプ if stat!=4{Writelog "不正な形式 / whichの引数が不正 "+stat,1:continue} dialog ""+tmp(1),3,"PES-Which" if stat=6{Lines=int(tmp(2))}else{Lines=int(tmp(3))} continue} if tmp(0)="if"{//if 中身1 中身2 Yのジャンプ Nのジャンプ if stat!=5{Writelog "不正な形式 / ifの引数が不正 "+stat,1:continue} if tmp(1)=tmp(2){Lines=int(tmp(3))}else{Lines=int(tmp(4))} continue} if tmp(0)="wait"{//wait 時間 if stat!=2{Writelog "不正な形式 / Waitの引数が不正 "+stat,1:continue} Writelog "[wait] "+tmp(1)+" 秒停止",1:await int(tmp.1)*1000:continue} if tmp(0)="}"{Writelog "正常にPESは停止しました":goto *FileStop} if tmp(0)="viewvar"{//viewvarのみ、変数表示 Writelog "[viewvar] - 変数を表示しました" dialog "0x00 "+v0x00+"\n0x01 "+v0x01+"\n0x02 "+v0x02+"\n0x03 "+v0x03+"\n0x04 "+v0x04+"\n0x05 "+v0x05+"\n0x06 "+v0x06+"\n0x07 "+v0x07+"\n0x08 "+v0x08+"\n0x09 "+v0x09+"\n0x0A "+v0x0A+"\n0x0B "+v0x0B+"\n0x0C "+v0x0C+"\n0x0D "+v0x0D+"\n0x0E "+v0x0E+"\n0x0F "+v0x0F+"":continue} if tmp(0)="jump"{if stat!=2{Writelog "不正な形式 / jumpの引数が不正 "+stat,1:continue}else{if int(tmp(1))<BLines{Writelog "不正な形式 / メイン以前には移動できません。 ",1:continue}else{Lines=int(tmp(1)):Writelog "[jump] - 移動しました("+tmp(1)+")",0:continue}}} if tmp(0)="let"{//let 名前 数値 if length(tmp)!=3{Writelog "不正な形式 / letの構文が無効",1:continue}// 種類$名前$中身 split v0x00,"$",tmpsub:if tmp(1)=tmpsub(1){if tmpsub(0)="1"{v0x00="1$"+tmpsub(1)+"$"+tmp(2):continue}else{if tmpsub(0)="2"{v0x00="2$"+tmpsub(1)+"$"+str(tmp(2)):continue}else{Writelog "不正な形式 / const形式に代入を試みたか、不正です。 "+stat,1:continue}}} split v0x01,"$",tmpsub:if tmp(1)=tmpsub(1){if tmpsub(0)="1"{v0x01="1$"+tmpsub(1)+"$"+tmp(2):continue}else{if tmpsub(0)="2"{v0x01="2$"+tmpsub(1)+"$"+str(tmp(2)):continue}else{Writelog "不正な形式 / const形式に代入を試みたか、不正です。 "+stat,1:continue}}} split v0x02,"$",tmpsub:if tmp(1)=tmpsub(1){if tmpsub(0)="1"{v0x02="1$"+tmpsub(1)+"$"+tmp(2):continue}else{if tmpsub(0)="2"{v0x02="2$"+tmpsub(1)+"$"+str(tmp(2)):continue}else{Writelog "不正な形式 / const形式に代入を試みたか、不正です。 "+stat,1:continue}}} split v0x03,"$",tmpsub:if tmp(1)=tmpsub(1){if tmpsub(0)="1"{v0x03="1$"+tmpsub(1)+"$"+tmp(2):continue}else{if tmpsub(0)="2"{v0x03="2$"+tmpsub(1)+"$"+str(tmp(2)):continue}else{Writelog "不正な形式 / const形式に代入を試みたか、不正です。 "+stat,1:continue}}} split v0x04,"$",tmpsub:if tmp(1)=tmpsub(1){if tmpsub(0)="1"{v0x04="1$"+tmpsub(1)+"$"+tmp(2):continue}else{if tmpsub(0)="2"{v0x04="2$"+tmpsub(1)+"$"+str(tmp(2)):continue}else{Writelog "不正な形式 / const形式に代入を試みたか、不正です。 "+stat,1:continue}}} split v0x05,"$",tmpsub:if tmp(1)=tmpsub(1){if tmpsub(0)="1"{v0x05="1$"+tmpsub(1)+"$"+tmp(2):continue}else{if tmpsub(0)="2"{v0x05="2$"+tmpsub(1)+"$"+str(tmp(2)):continue}else{Writelog "不正な形式 / const形式に代入を試みたか、不正です。 "+stat,1:continue}}} split v0x06,"$",tmpsub:if tmp(1)=tmpsub(1){if tmpsub(0)="1"{v0x06="1$"+tmpsub(1)+"$"+tmp(2):continue}else{if tmpsub(0)="2"{v0x06="2$"+tmpsub(1)+"$"+str(tmp(2)):continue}else{Writelog "不正な形式 / const形式に代入を試みたか、不正です。 "+stat,1:continue}}} split v0x07,"$",tmpsub:if tmp(1)=tmpsub(1){if tmpsub(0)="1"{v0x07="1$"+tmpsub(1)+"$"+tmp(2):continue}else{if tmpsub(0)="2"{v0x07="2$"+tmpsub(1)+"$"+str(tmp(2)):continue}else{Writelog "不正な形式 / const形式に代入を試みたか、不正です。 "+stat,1:continue}}} split v0x08,"$",tmpsub:if tmp(1)=tmpsub(1){if tmpsub(0)="1"{v0x08="1$"+tmpsub(1)+"$"+tmp(2):continue}else{if tmpsub(0)="2"{v0x08="2$"+tmpsub(1)+"$"+str(tmp(2)):continue}else{Writelog "不正な形式 / const形式に代入を試みたか、不正です。 "+stat,1:continue}}} split v0x09,"$",tmpsub:if tmp(1)=tmpsub(1){if tmpsub(0)="1"{v0x09="1$"+tmpsub(1)+"$"+tmp(2):continue}else{if tmpsub(0)="2"{v0x09="2$"+tmpsub(1)+"$"+str(tmp(2)):continue}else{Writelog "不正な形式 / const形式に代入を試みたか、不正です。 "+stat,1:continue}}} split v0x0A,"$",tmpsub:if tmp(1)=tmpsub(1){if tmpsub(0)="1"{v0x0A="1$"+tmpsub(1)+"$"+tmp(2):continue}else{if tmpsub(0)="2"{v0x0A="2$"+tmpsub(1)+"$"+str(tmp(2)):continue}else{Writelog "不正な形式 / const形式に代入を試みたか、不正です。 "+stat,1:continue}}} split v0x0B,"$",tmpsub:if tmp(1)=tmpsub(1){if tmpsub(0)="1"{v0x0B="1$"+tmpsub(1)+"$"+tmp(2):continue}else{if tmpsub(0)="2"{v0x0B="2$"+tmpsub(1)+"$"+str(tmp(2)):continue}else{Writelog "不正な形式 / const形式に代入を試みたか、不正です。 "+stat,1:continue}}} split v0x0C,"$",tmpsub:if tmp(1)=tmpsub(1){if tmpsub(0)="1"{v0x0C="1$"+tmpsub(1)+"$"+tmp(2):continue}else{if tmpsub(0)="2"{v0x0C="2$"+tmpsub(1)+"$"+str(tmp(2)):continue}else{Writelog "不正な形式 / const形式に代入を試みたか、不正です。 "+stat,1:continue}}} split v0x0D,"$",tmpsub:if tmp(1)=tmpsub(1){if tmpsub(0)="1"{v0x0D="1$"+tmpsub(1)+"$"+tmp(2):continue}else{if tmpsub(0)="2"{v0x0D="2$"+tmpsub(1)+"$"+str(tmp(2)):continue}else{Writelog "不正な形式 / const形式に代入を試みたか、不正です。 "+stat,1:continue}}} split v0x0E,"$",tmpsub:if tmp(1)=tmpsub(1){if tmpsub(0)="1"{v0x0E="1$"+tmpsub(1)+"$"+tmp(2):continue}else{if tmpsub(0)="2"{v0x0E="2$"+tmpsub(1)+"$"+str(tmp(2)):continue}else{Writelog "不正な形式 / const形式に代入を試みたか、不正です。 "+stat,1:continue}}} split v0x0F,"$",tmpsub:if tmp(1)=tmpsub(1){if tmpsub(0)="1"{v0x0F="1$"+tmpsub(1)+"$"+tmp(2):continue}else{if tmpsub(0)="2"{v0x0F="2$"+tmpsub(1)+"$"+str(tmp(2)):continue}else{Writelog "不正な形式 / const形式に代入を試みたか、不正です。 "+stat,1:continue}}} } if tmp(0)="let.random"{//le.random 対象 範囲終了(100->0~100) if length(tmp)!=3{Writelog "不正な形式 / let.randomの構文が無効",1:continue}// 種類$名前$中身 split v0x00,"$",tmpsub:if tmp(1)=tmpsub(1){if tmpsub(0)="2"{v0x00="2$"+tmpsub(1)+"$"+str((rnd(int(tmp(2))))+1):continue}} split v0x01,"$",tmpsub:if tmp(1)=tmpsub(1){if tmpsub(0)="2"{v0x01="2$"+tmpsub(1)+"$"+str((rnd(int(tmp(2))))+1):continue}} split v0x02,"$",tmpsub:if tmp(1)=tmpsub(1){if tmpsub(0)="2"{v0x02="2$"+tmpsub(1)+"$"+str((rnd(int(tmp(2))))+1):continue}} split v0x03,"$",tmpsub:if tmp(1)=tmpsub(1){if tmpsub(0)="2"{v0x03="2$"+tmpsub(1)+"$"+str((rnd(int(tmp(2))))+1):continue}} split v0x04,"$",tmpsub:if tmp(1)=tmpsub(1){if tmpsub(0)="2"{v0x04="2$"+tmpsub(1)+"$"+str((rnd(int(tmp(2))))+1):continue}} split v0x05,"$",tmpsub:if tmp(1)=tmpsub(1){if tmpsub(0)="2"{v0x05="2$"+tmpsub(1)+"$"+str((rnd(int(tmp(2))))+1):continue}} split v0x06,"$",tmpsub:if tmp(1)=tmpsub(1){if tmpsub(0)="2"{v0x06="2$"+tmpsub(1)+"$"+str((rnd(int(tmp(2))))+1):continue}} split v0x07,"$",tmpsub:if tmp(1)=tmpsub(1){if tmpsub(0)="2"{v0x07="2$"+tmpsub(1)+"$"+str((rnd(int(tmp(2))))+1):continue}} split v0x08,"$",tmpsub:if tmp(1)=tmpsub(1){if tmpsub(0)="2"{v0x08="2$"+tmpsub(1)+"$"+str((rnd(int(tmp(2))))+1):continue}} split v0x09,"$",tmpsub:if tmp(1)=tmpsub(1){if tmpsub(0)="2"{v0x09="2$"+tmpsub(1)+"$"+str((rnd(int(tmp(2))))+1):continue}} split v0x0A,"$",tmpsub:if tmp(1)=tmpsub(1){if tmpsub(0)="2"{v0x0A="2$"+tmpsub(1)+"$"+str((rnd(int(tmp(2))))+1):continue}} split v0x0B,"$",tmpsub:if tmp(1)=tmpsub(1){if tmpsub(0)="2"{v0x0B="2$"+tmpsub(1)+"$"+str((rnd(int(tmp(2))))+1):continue}} split v0x0C,"$",tmpsub:if tmp(1)=tmpsub(1){if tmpsub(0)="2"{v0x0C="2$"+tmpsub(1)+"$"+str((rnd(int(tmp(2))))+1):continue}} split v0x0D,"$",tmpsub:if tmp(1)=tmpsub(1){if tmpsub(0)="2"{v0x0D="2$"+tmpsub(1)+"$"+str((rnd(int(tmp(2))))+1):continue}} split v0x0E,"$",tmpsub:if tmp(1)=tmpsub(1){if tmpsub(0)="2"{v0x0E="2$"+tmpsub(1)+"$"+str((rnd(int(tmp(2))))+1):continue}} split v0x0F,"$",tmpsub:if tmp(1)=tmpsub(1){if tmpsub(0)="2"{v0x0F="2$"+tmpsub(1)+"$"+str((rnd(int(tmp(2))))+1):continue}} } Writelog "不正なコマンド: "+tmp(0),1 loop stop



この記事に返信する


ABATBeliever

リンク

2024/3/28(Thu) 11:44:34|NO.101464

スクリプトの書式
!PES-Binary! //先頭にこれを書く

Class Define{ //定義エリア
Version=1 //インタプリタのバージョン
TargetOS=All //対象OS,Allまたはsysinfoの形式で
Integer const 0x00 定数 PESへようこそ!! //0x00~0x0Fまでに、変数の型を定義する。定数型の場合は中身も
Integer str 0x01 文字型変数 //文字型の定義
Integer int 0x02 整数型変数 //整数型の定義
}

Class Main{ //この下にコード

viewvar //変数情報を表示
let.random 整数型変数 50 //代入
alert @整数型変数@ //@で囲んだ内容は置換される,alertはdialogに相当

viewvar
} //終末



ABATBeliever

リンク

2024/3/28(Thu) 11:49:00|NO.101465

サンプルコード
・ランダム

!PES-Binary! Class Define{ Version=1 TargetOS=All Integer int 0x0F 整数型変数 } Class Main{ viewvar let.random 整数型変数 50 alert @整数型変数@ viewvar }

・ファイル削除

!PES-Binary! Class Define{ Version=1 TargetOS=All Integer int 0x0B 整数型変数 } Class Main{ delete hsptmp delete obj delete packfile delete start.ax }

・選択分岐

!PES-Binary! Class Define{ Version=1 TargetOS=All Integer int 0x0B 整数型変数 } Class Main{ which 選択 12 15 alert はい jump 18 alert いいえ jump 18 alert おわり }

・exist

!PES-Binary! Class Define{ Version=1 TargetOS=All Integer int 0x0B 整数型変数 } Class Main{ alert ビフォー viewvar exist 分岐.pes 整数型変数 alert アフター viewvar if @整数型変数@ 1 18 20 alert 存在する jump 22 alert 存在しない alert おわり }



記事削除

記事NO.パスワード
(質問が解決したスレッドは他の利用者に活用してもらうため、削除しないようお願いします)

NO.101463への返信

マスコット

好きなマスコットを選んでください。

名前

e-mail
HOME
  1. 初めて利用する方は、HSP3掲示板の使い方をお読みください。
  2. 不要部分の多い長いスクリプトの投稿は ご遠慮ください。
  3. 書き込みは自動改行されません。適度に改行を入れてください。
  4. スクリプトは小文字の<pre>〜</pre>で囲むと見やすく表示できます。

削除用パスワード

エラー発生時、再送信すると二重送信になることがあります。
回答が得られたら、お礼書き込み時に[解決]チェックしてください。
SPAM防止のためURLから始まる文章は投稿できません。
SPAM防止のため英文字のみの本文を投稿することはできません。

ONION software Copyright 1997-2023(c) All rights reserved.