このmoduleは Y+Y=M.Hさん作、簡単データ管理の「ちょデタ」というTOOLの
管理用モジュールを改造したものです
管理用モジュールは2.61で書かれていて、簡単に管理していたので3.xでも使用したいと思い
3.3に移植しました
その後、データを変数として管理していたので
このままではデータを一つしか扱えない。と思い、変数をモジュール変数とするように変更しました
あと何個か命令を追加しています
punk&peace
→TOOL
Y+Y=M.Hさん運営
ここのTOOLページにちょデタはあります
LIGHT GREPの結果
LINE:8 #module tyodatamodulelight tyoints,tyostrs,tyoarrays,tyoflgs LINE:43 #modfunc set_stt int p LINE:46 #modcfunc get_stt LINE:48 #modfunc set_ref str p_ref LINE:51 #modcfunc get_ref LINE:54 #modcfunc get_num_column LINE:57 #modcfunc get_num_row LINE:60 #modfunc tyoload str FILE_NAME LINE:71 #modfunc tyosel LINE:80 #modfunc tyoinfo array ar LINE:92 #modfunc tyocont var p_r,int c_id LINE:106 #modfunc tyoset str p_ID LINE:120 #modcfunc serch_columns str _p_ID LINE:128 #modfunc tyoset_columns_str LINE:141 #modfunc tyoset_rows_str int n,str _p_ID LINE:159 #modcfunc tyoget_of_str_clumn str _p LINE:177 #modcfunc tyoget_of_str_row str _p LINE:193 #modfunc tyoget array ar_b ,int r_id,int c_id
#define tyoints stt,r_size,r_kz,c_kz,head_p,data_p,add,address,sz,ofs,type,d1,d #define tyostrs ref,object_name,db #define tyoarrays a,column_strs,row_strs #define tyoflgs flg,tyoset_column_success,tyoset_row_success #module tyodatamodulelight tyoints,tyostrs,tyoarrays,tyoflgs #define TYPE_INT 0 #define TYPE_EQ 1 #define TYPE_STR 2 #define TYPE_CHK 3 #define TYPE_DAY 4 #define TYPE_REN 5 // 変数初期化 #modinit // statの代わり stt=0 // refstrの代わり ref="" r_size = 0 r_kz = 0 c_kz = 0 head_p = 0 ;ヘッダの開始ポインタ data_p = 0 ;データの開始ポインタ add = 0 address = 0 sz = 0 ofs = 0 type = 0 d1 = 0 d = 0 flg = 0 dim a ,16 sdim db,4000 sdim object_name,64 sdim column_strs,64,16 sdim row_strs,64,16 tyoset_column_success=0 tyoset_row_success=0 return #modfunc set_stt int p stt=p return #modcfunc get_stt return stt #modfunc set_ref str p_ref ref=p_ref return #modcfunc get_ref return ref // テーブルのcolumnを取得 #modcfunc get_num_column return c_kz // テーブルのrowを取得 #modcfunc get_num_row return r_kz // tdt形式のデータをLOAD #modfunc tyoload str FILE_NAME sdim tmp_str,655360 bload FILE_NAME ,tmp_str ;tdt形式データを取得 sdim db,strsize+2 repeat strsize p=peek(tmp_str,cnt) poke db,cnt,p loop sdim tmp_str,1 return // 変数の計算 #modfunc tyosel c_kz=peek(db ,64) r_size=wpeek(db ,65) memcpy r_kz ,db ,4 ,0 ,67 head_p = 3 * c_kz + 71 data_p = 96 * c_kz + head_p return // テーブル情報を取得。また、refstr にテーブル名を取得します。 #modfunc tyoinfo array ar ar = c_kz ,r_kz ,r_size sdim r,80 repeat 64 p=peek(db,cnt) poke r,cnt,p loop poke r ,64 ,0 set_ref thismod,r object_name=r return get_ref(thismod) // 項目名を refstr に、タイプを stat に取得 #modfunc tyocont var p_r,int c_id sdim r,80 repeat 62 p=peek(db,c_id * 96 + head_p+cnt) poke r,cnt,p loop poke r ,62 ,0 p_r=r set_ref thismod,r d1=peek(db ,c_id * 96 + head_p + 63) set_stt thismod,d1 return get_stt(thismod) // 項目名(文字列型)の設定 // 存在しない項目名だったり、文字列型じゃなければerror(動作は止まりませんw) #modfunc tyoset str p_ID tyoset_columns_str thismod tyoset_column_success=1 flag=serch_columns(thismod,p_ID) if flag!=-1{ tyoset_rows_str thismod,flag,p_ID if stat!=-1{ tyoset_row_success=1 return } } tyoset_row_success=0 return // _p_IDという項目があるか調べる #modcfunc serch_columns str _p_ID repeat length(column_strs) if column_strs.cnt==_p_ID:return cnt loop logmes "search_columns内のerror" logmes "columnに"+_p_ID+"という項目は存在しません" return -1 // columnの名前を代入 #modfunc tyoset_columns_str sdim column_strs,64,get_num_column(thismod) repeat get_num_column(thismod) s="" tyocont thismod,s,cnt column_strs.cnt=s loop logmes object_name+" tyoset_column" repeat length(column_strs) logmes str(cnt)+":"+column_strs.cnt loop return // 指定したcolumnのrowを代入(文字列型じゃないとerror。動作は止まりませんw) #modfunc tyoset_rows_str int n,str _p_ID sdim row_strs,64,get_num_row(thismod) dim ar_tmp,16 tyoget thismod,ar_tmp,0,n if ar_tmp.0!=2{ logmes "tyoset_rows_str内のerror" logmes "columnの"+_p_ID+"という項目は文字列ではありません" return -1 } repeat get_num_row(thismod) tyoget thismod,ar_tmp,cnt,n row_strs.cnt=get_ref(thismod) loop logmes object_name+" tyoset_row" repeat length(row_strs) logmes str(cnt)+":"+row_strs.cnt loop return #modcfunc tyoget_of_str_clumn str _p if tyoset_column_success==0{ logmes "tyoget_of_str_column内のerror" logmes "tyosetが実行されていません" return -1 } // columnの中に_pと等しい文字列があるか調べる // 返すのは文字列じゃなくIDです for i,0,get_num_column(thismod),1 if column_strs.i==_p{ return i } next logmes "tyoget_of_str_column内のerror" logmes "tdtのcolumnに "+_p+" という項目は存在しません" return -1 // tyosetした項目に_pと等しい文字列があるか調べる // 返すのは文字列じゃなくIDです #modcfunc tyoget_of_str_row str _p if tyoset_row_success==0{ logmes "tyoget_of_str_row内のerror" logmes "tyosetが実行されていないか、失敗しています" return -1 } for i,0,get_num_row(thismod),1 if row_strs.i==_p{ return i } next logmes "tyoget_of_str_row内のerror" logmes "tdtのrowに "+_p+" という項目は存在しません" return -1 // データを取得 #modfunc tyoget array ar_b ,int r_id,int c_id if r_id<0{ logmes "rowの値がマイナスです" return -1 } if r_id >=get_num_row(thismod){ logmes "rowの値が大きすぎます" logmes "値:"+r_id+" get_num_row:"+get_num_row(thismod) return -1 } if c_id<0{ logmes "columnの値がマイナスです" return -1 } if c_id >=get_num_column(thismod){ logmes "columnの値が大きすぎます" logmes "値:"+c_id+" get_num_column:"+get_num_column(thismod) return -1 } ar_b.0 = 0 ,0 ,0 ,0 ,0 ,0 ,0 add = wpeek(db ,c_id * 3 + 71) ;指定項目アドレス address = r_id * r_size + add + data_p sz = peek(db ,c_id * 3 + 73) ;指定項目サイズ ofs = c_id * 96 + head_p type = peek(db ,ofs + 63) ar_b.0=type ar_b.1=sz switch type case TYPE_INT d1=peek(db ,ofs + 65) ;負数フラグ poke d,0,0 poke d,1,0 poke d,2,0 poke d,3,0 memcpy d ,db ,sz ,0 ,address if d1 == 1 { switch sz case 1 d -= 128 swbreak case 2 d -= 32768 swbreak case 3 d -= 8388608 swbreak swend } set_stt thismod,d swbreak case TYPE_EQ memcpy d ,db ,sz ,0 ,address set_stt thismod,d swbreak case TYPE_STR sdim r,sz+1 repeat sz p=peek(db,address+cnt) poke r,cnt,p loop poke ref ,sz ,0 set_ref thismod,r swbreak case TYPE_DAY set_ref thismod,"date" swbreak case TYPE_CHK d1=peek(db ,address) set_stt thismod,d1 swbreak case TYPE_REN memcpy d ,db ,sz ,0 ,address set_stt thismod,d swbreak swend return get_stt(thismod) #global // tyodatamodule型のオブジェクトを3つ作成 newmod obj_A,tyodatamodulelight newmod obj_B,tyodatamodulelight newmod obj_C,tyodatamodulelight // FILE選択ダイアログでtdt形式のFILEを求める dialog "tdt" ,16 if stat == 0 :end tyoload obj_A,refstr ;tdt形式データを取得 tyosel obj_A dim aa,16 tyoinfo obj_A,aa ;テーブルの情報を取得 title refstr ;タイトルにテーブル名をつける font "MS ゴシック" ,12 logmes "column:"+str(get_num_column(obj_A)) logmes "row:"+str(get_num_row(obj_A)) repeat get_num_column(obj_A) ;obj_Aの項目名を取得し表示 s="" tyocont obj_A,s,cnt pos 0 ,cnt * 24 mes s + ":" + stat loop repeat get_num_row(obj_A) ;obj_Aのデータをレコード数分、データを表示 i = cnt repeat get_num_column(obj_A) dim a2,16 tyoget obj_A,a2 ,i ,cnt pos i * 96 + 192 ,cnt * 24 switch a2.0 case 0 ;数値型 case 1 ;数式型 case 3 ;チェック型 case 5 ;連結型 mes stat swbreak case 2 ;文字型 case 4 ;日付型 mes get_ref(obj_A) swbreak swend loop loop // FILE選択ダイアログでtdt形式のFILEを求める dialog "tdt" ,16 if stat == 0 :end tyoload obj_B,refstr ;tdt形式データを取得 screen 1,640,480 ;obj_Bはscreen 1を使用 tyosel obj_B dim aa,16 tyoinfo obj_B,aa ;テーブルの情報を取得 title refstr ;タイトルにテーブル名をつける font "MS ゴシック" ,12 logmes "column:"+str(get_num_column(obj_B)) logmes "row:"+str(get_num_row(obj_B)) repeat get_num_column(obj_B) ;obj_Bの項目名を取得し表示 s="" tyocont obj_B,s,cnt pos 0 ,cnt * 24 mes s + ":" + stat loop repeat get_num_row(obj_B) ;obj_Bのデータをレコード数分、データを表示 i = cnt repeat get_num_column(obj_B) dim a2,16 tyoget obj_B,a2 ,i ,cnt pos i * 96 + 192 ,cnt * 24 switch a2.0 case 0 ;数値型 case 1 ;数式型 case 3 ;チェック型 case 5 ;連結型 mes stat swbreak case 2 ;文字型 case 4 ;日付型 mes get_ref(obj_B) swbreak swend loop loop // FILE選択ダイアログでtdt形式のFILEを求める dialog "tdt" ,16 if stat == 0 :end tyoload obj_C,refstr ;tdt形式データを取得 screen 2,640,480 ;obj_Cはscreen 2を使用 tyosel obj_C dim aa,16 tyoinfo obj_C,aa ;テーブルの情報を取得 title refstr ;タイトルにテーブル名をつける font "MS ゴシック" ,12 logmes "column:"+str(get_num_column(obj_C)) logmes "row:"+str(get_num_row(obj_C)) ; tyoset "モンスター名" repeat get_num_column(obj_C) ;obj_Cの項目名を取得し表示 s="" tyocont obj_C,s,cnt pos 0 ,cnt * 24 mes s + ":" + stat loop repeat get_num_row(obj_C) ;obj_Cのデータをレコード数分、データを表示 i = cnt repeat get_num_column(obj_C) dim a2,16 tyoget obj_C,a2 ,i ,cnt pos i * 96 + 192 ,cnt * 24 switch a2.0 case 0 ;数値型 case 1 ;数式型 case 3 ;チェック型 case 5 ;連結型 mes stat swbreak case 2 ;文字型 case 4 ;日付型 mes get_ref(obj_C) swbreak swend loop loop // debug用window screen 3を使用。screen 3はdebug window のログを見ながら操作してください screen 3,300,300 mes "tyoset用inputbox" // 操作対象選択コンボボックス _4combox=0 combox _4combox,100,"obj_A\nobj_B\nobj_C" ID4combox=stat // tyosetしたい文字列を書きこむ sdim _4INPUT_A,64 input _4INPUT_A,100,20 ID4INPUTA=stat button "OK",*input_INPUT_A pos 0,100 mes "数値入力" mes "row" // 取り出したいrowのIDを書きこむ _4INPUT_B=0 input _4INPUT_B,100,20 ID4INPUT_B=stat mes "column" // 取り出したいcolumnのIDを書きこむ _4INPUT_C=0 input _4INPUT_C,100,20 ID4INPUT_C=stat button "OK",*input_INPUT_BC sdim _4INPUT_D,64 // *input_INPUT_Bにjumpするbuttonを押した時の結果。もしくは // *input_INPUT_Cにjumpするbuttonを押した時の結果。を表示する input _4INPUT_D,100,20 ID4INPUT_D=stat pos 120,100 mes "文字列入力" mes "row" // tyosetした項目のIDを取得したい項目(文字列)(row)を書きこむ sdim _4INPUT_E,64 input _4INPUT_E,100,20 ID4INPUT_E=stat button "OK",*input_INPUT_E mes "column" // 取得したい項目(文字列)(column)を書きこむ sdim _4INPUT_F,64 input _4INPUT_F,100,20 ID4INPUT_F=stat button "OK",*input_INPUT_F sdim _4INPUT_G,300 // *input_INPUT_Eにjumpするbuttonを押した時の結果。もしくは // *input_INPUT_Fにjumpするbuttonを押した時の結果。を表示する _4INPUT_G=0 input _4INPUT_G,100,20 ID4INPUT_G=stat stop // コンボボックスに設定されているオブジェクトの // columnの中からINPUT_Aの文字列でtyosetする *input_INPUT_A if _4combox==0{ tyoset obj_A,_4INPUT_A }else{ if _4combox==1{ tyoset obj_B,_4INPUT_A }else{ tyoset obj_C,_4INPUT_A } } stop // コンボボックスに設定されている項目において // 指定したrowとcolumnの項目を取得する *input_INPUT_BC dim b,16 sdim _4input,64 if _4combox==0{ tyoget obj_A,b ,_4INPUT_B,_4INPUT_C }else{ if _4combox==1{ tyoget obj_B,b ,_4INPUT_B,_4INPUT_C }else{ tyoget obj_C,b ,_4INPUT_B,_4INPUT_C } } switch b.0 case 0 ;数値型 case 1 ;数式型 case 3 ;チェック型 case 5 ;連結型 _4input=str(stat) swbreak case 2 ;文字型 case 4 ;連結型 if _4combox==0{ _4input=get_ref(obj_A) }else{ if _4combox==1{ _4input=get_ref(obj_B) }else{ _4input=get_ref(obj_C) } } swbreak swend objprm ID4INPUT_D,_4input stop // コンボボックスに設定されている項目において // tyosetした項目のIDを取得したい項目(文字列)(row)のIDを表示する *input_INPUT_E tmp_on_INPUT_E=0 if _4combox==0{ tmp_on_INPUT_E=tyoget_of_str_row(obj_A,_4INPUT_E) }else{ if _4combox==1{ tmp_on_INPUT_E=tyoget_of_str_row(obj_B,_4INPUT_E) }else{ tmp_on_INPUT_E=tyoget_of_str_row(obj_C,_4INPUT_E) } } objprm ID4INPUT_G,tmp_on_INPUT_E stop // コンボボックスに設定されている項目において // 取得したい項目(文字列)(column)のIDを表示する *input_INPUT_F tmp_on_INPUT_F=0 if _4combox==0{ tmp_on_INPUT_F=tyoget_of_str_clumn(obj_A,_4INPUT_F) }else{ if _4combox==1{ tmp_on_INPUT_F=tyoget_of_str_clumn(obj_B,_4INPUT_F) }else{ tmp_on_INPUT_F=tyoget_of_str_clumn(obj_C,_4INPUT_F) } } objprm ID4INPUT_G,tmp_on_INPUT_F stop
タグ
コメントをかく