#author("2020-04-15T22:39:04+09:00","","") #author("2020-04-15T22:41:16+09:00","","") [[Ys TOOLs A]] cmd一覧expand ver 0.1.0~ ~ ・始めに~ このTOOLは一覧からHSP標準命令と拡張命令を検索するTOOLです~ ~ ・特徴~ このTOOLはlistboxから命令を選択し~ その後、button一つでコピペできます~ また、PATHを選択することでクリップボードの中身を引数に~ HDLを起動できます~ ~ ・使い方~ ~ ・・左側のbutton~ ~ そのbuttonを押すと~ 一覧にbuttonの文字から始まる命令を表示します~ ~ ・inputbox 内容 ~ 現在、選択中の命令を表示します~ ~ ・inputbox クリップボード~ 現在のクリップボードの中身を表示します~ ~ ・button コピー~ 内容 inputboxの中身をコピーします~ ~ ・listbox~ 現在の範囲の命令を一覧表示します~ ここのlistboxの項目を選択すると~ その選択項目が、内容 inputboxに表示されます~ ~ ・PATH指定 button~ このbuttonを押すとFILE選択dialogを開きます~ HDLのPATHを選択しましょう~ ~ また、FILE選択dialogっでFILEを選択すると自動的にFILE名が保存されます~ そしてそのFILE名はTOOL起動時に読み込まれます~ ~ ・HDL button~ FILE選択dialogで選択したFILEを実行します~ 引数付きで呼び出すので、引数に対応していないFILEだと上手くいきません~ HDLのPATHを設定した後でこのbuttonを押してHDLを起動することを想定しています~ ~ 作成:高畑ラボ(Y_repeat)~ ~ ・連絡先~ バグなどありましたらご報告ください~ また改造後再配布時配布URLを教えていただけると嬉しいです~ y.tack2010@gmail.com~ #code(C,nooutline){{ #include "hspda.as" #include "hspext.as" #define global push_on_button_set_A %tbt_set_unil_A %i0 #define global get_on_button_set_A %tbt_set_unil_A *%p #define global pop_on_button_set_A %tbt_set_unil_A *%o #define global push_on_button_set_B %tbt_set_unil_B %i0 #define global get_on_button_set_B %tbt_set_unil_B *%p #define global pop_on_button_set_B %tbt_set_unil_B *%o // 特殊マクロについて 詳しくは、HSP Document Libraryの#defineのページにて // buttonを押すと変数に値を代入してからjumpするマクロ // %1:buttonに表示する文字列 // %2:buttonを押すと代入する対象 // %3:代入する値 // %4:buttonを押すと代入をしてからjumpするラベル #define global ctype button_set(%1,%2,%3,%4):push_on_button_set_A:push_on_button_set_B:\ button %1,get_on_button_set_A:goto get_on_button_set_B:pop_on_button_set_A:%2=%3:goto %4:pop_on_button_set_B pos 100,0 // ノートパッド用。cmd一覧のtxtを取得するのに使う sdim s,65000 notesel s noteload "cmd_expand.txt" // 同じ文字から始まる命令名を\nで区切って一要素にする // それを格納する文字列配列 sdim sort_cmd,1000,500 // 命令名格納用配列 // 選択するとここから取り出す sdim t,256,1000 // 命令名は\nで区切っているので\nで分割 split s,"\n",t // 命令が入っているtxtの行数繰り返し repeat notemax tmp="" // ノートパッドより一行取得 noteget tmp,cnt // その一行の先頭の文字を取得 c=peek(tmp,0) // 配列の文字の値番目に加算 sort_cmd.c+=tmp+"\n" loop // 小文字から始まる命令群に大文字から始まる命令群を加算 gosub *add_many_uppercase ss="" u="" flag=0 pos 100,0 mes "内容" mes "クリップボード" pos 200,0 // 選択中の命令を表示するinputbox input ss, 300,20 // クリップボードの中身を表示するinputbox input u,300,20 pos 100,40 // このbuttonを押すと選択中の命令をコピペ button "コピー",*sel objsize 400,400 // 命令一覧表示用listbox listbox flag,0,s objsize 64,20 pos 500,0 // このbuttonを押すとHDL起動 button "HDL",*use_my_HDL // このbuttonを押すとdialogでHDLのPATHを選択 button "PATH指定",*set_HDL_path objsize 30,30 // これらのbuttonを押すとその文字から始まる命令をlistboxに表示 pos 0,0 button_set("#",sel_char,'#',*do_sel) button_set("_",sel_char,'_',*do_sel) button_set("a",sel_char,'a',*do_sel) button_set("b",sel_char,'b',*do_sel) button_set("c",sel_char,'c',*do_sel) button_set("d",sel_char,'d',*do_sel) button_set("e",sel_char,'e',*do_sel) button_set("f",sel_char,'f',*do_sel) button_set("g",sel_char,'g',*do_sel) pos 30,0 button_set("h",sel_char,'h',*do_sel) button_set("i",sel_char,'i',*do_sel) button_set("j",sel_char,'j',*do_sel) button_set("k",sel_char,'k',*do_sel) button_set("l",sel_char,'l',*do_sel) button_set("m",sel_char,'m',*do_sel) button_set("n",sel_char,'n',*do_sel) button_set("o",sel_char,'o',*do_sel) button_set("p",sel_char,'p',*do_sel) pos 60,0 button_set("q",sel_char,'q',*do_sel) button_set("r",sel_char,'r',*do_sel) button_set("s",sel_char,'s',*do_sel) button_set("t",sel_char,'t',*do_sel) button_set("u",sel_char,'u',*do_sel) button_set("v",sel_char,'v',*do_sel) button_set("w",sel_char,'w',*do_sel) button_set("x",sel_char,'x',*do_sel) button_set("y",sel_char,'y',*do_sel) // txt(最初は空)よりPATHを読み込む gosub *set_HDL_PATH_begin // listboxの選択項目とクリップボードの中身を調べるループへ goto *sel_loop // txt(最初は空)よりPATHを読み込む *set_HDL_PATH_begin // HDLのPATH格納用変数 HDL_PATH="" // ノートパッド用変数 for_note="" // ノートパッド指定 notesel for_note // FILE読み込み noteload "HDL_PATH.txt" // FILEの一行目読み込み noteget HDL_PATH,0 // ノートパッド指定解除 noteunsel return // HDL起動 *use_my_HDL tmp_cb="" // クリップボードより文字列取得 clipget tmp_cb // PATHのFILEは存在するか? exist HDL_PATH // 存在すれば if strsize!=-1{ // クリップボードの中身を引数に起動 exec ""+HDL_PATH+" "+tmp_cb }else{ // PATHのFILEが存在しないのでerrorメッセージ dialog {"HDLのPATHが設定されていないか、正しくありません。 PATH設定buttonを押してHDLのPATHを指定してください"} } // listboxの選択項目とクリップボードの中身を調べるループへ goto *sel_loop /**use_hdl tmp_cb="" clipget tmp_cb exec "C:\\Program Files (x86)\\hsp32\\hsphelp\\helpman"+" "+tmp_cb goto *sel_loop*/ // HDLのPATHを設定するサブルーチン *set_HDL_PATH // ノートパッド用 for_note="" // ノートパッド指定 notesel for_note // FILE選択dialog dialog "exe",16,"HDLのPATH" // FILE選択が成功なら if stat==1{ for_note=refstr // FILEの名前を保存 notesave "HDL_PATH.txt" // FILEの名前を代入 noteget HDL_PATH,0 } // ノートパッド指定解除 noteunsel // listboxの選択項目とクリップボードの中身を調べるループへ goto *sel_loop // listboxの選択項目とクリップボードの中身を調べるループ *sel_loop // flagにはlistboxの選択項目が入っている tmp=flag // ループ開始 *hoge // listboxの選択が-1でない // 更にflagとtmpが等しくない場合(listboxの選択項目が変わっている) if flag!=tmp&flag!=-1{ // tは命令名格納用配列 // 選択するとここから取り出す // そのflag番目を取り出すことはlistboxで選択中の項目を取得すること ss=t.flag // 選択中の命令を表示するinputbox更新 objprm 0,ss tmp=flag } // クリップボードの中身代入用 cb_hoge="" clipget cb_hoge // uはクリップボードの中身を表示するinputbox用文字列 if u!=cb_hoge{ u=cb_hoge // クリップボードの中身を表示するinputbox更新 objprm 1,cb_hoge } // 少々待つ await 50 // gotoによるループ goto *hoge // サブルーチン:小文字から始まる命令群に大文字から始まる命令群を加算 *add_many_uppercase add_uppercase "A","a" add_uppercase "B","b" add_uppercase "C","c" add_uppercase "D","d" add_uppercase "E","e" add_uppercase "F","f" add_uppercase "G","g" add_uppercase "H","h" add_uppercase "I","i" add_uppercase "J","j" add_uppercase "K","k" add_uppercase "L","l" add_uppercase "M","m" add_uppercase "N","n" add_uppercase "O","o" add_uppercase "P","p" add_uppercase "Q","q" add_uppercase "R","r" add_uppercase "S","s" add_uppercase "T","t" add_uppercase "U","u" add_uppercase "V","v" add_uppercase "W","w" add_uppercase "X","x" add_uppercase "Y","y" add_uppercase "Z","z" return // 小文字から始まる命令群に大文字から始まる命令群を加算 #deffunc add_uppercase str upper,str lower tmp_upper=upper tmp_lower=lower // 文字の数値表現を取得 upper_hoge=peek(tmp_upper,0) lower_hoge=peek(tmp_lower,0) // sort_cmdは字の数値表現番目の字から始まる命令が\n区切りで入っている // 小文字から始まる命令群の入った文字列に大文字から始まる命令群を加算 sort_cmd.lower_hoge+=sort_cmd.upper_hoge return // 命令名の先頭の文字のbuttonを押した *do_sel // 選択一文字を数値表現で取得 n=peek(sel_char,0) // sort_cmdの数値番目を取得すると // その文字から始まる\nで区切った命令一覧を得られる sss=sort_cmd.n // listbox更新 objprm 3,sss // 命令名格納用配列 // 選択するとここから取り出す sdim t,500,500 // 命令名は\nで区切っているので\nで分割 split sss,"\n",t flag=0 // listboxの選択項目とクリップボードの中身を調べるループへ goto *sel_loop // 選択中の命令をコピペ *sel // listboxが非選択なら選択を0に if flag<0:flag=0 // tは命令名格納用配列 // 選択するとここから取り出す // そのflag番目を取り出すことはlistboxで選択中の項目を取得すること ss=t.flag // クリップボードの中身を表示するinputbox更新 objprm 1,ss // クリップボード更新 clipset ss // listboxの選択項目とクリップボードの中身を調べるループへ goto *sel_loop }}