y.tack製作(主にHSP)なmoduleを管理するwiki

ちょデタ用module


この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
タグ

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Menu

メニューサンプル1

メニューサンプル2

開くメニュー

閉じるメニュー

  • アイテム
  • アイテム
  • アイテム
【メニュー編集】

管理人/副管理人のみ編集できます