全然更新しないブログ
HSPメモ帳
OpenHSP
- OpenHSP
- OpenHSPプロジェクト・ポータル(次期版HSPの開発サイト)
- スクリプト言語HSPに関する開発をオープンに行なっています。
次期バージョンとなるHSP本体や、関連ツール、ドキュメント、サンプル等を共に開発する人に向けたサイトです。
(上記サイトより引用)
- 数値表記 メモ
- 0x0011
- 16進数表記。「0x」は「$」に変換される。10進数では、「17」。
- 0b0011
- 2進数表記。「0b」は「%」に変換される。10進数では、「3」。
- $0011
- 16進数表記。10進数では、「17」。
- %0011
- 2進数表記。10進数では、「3」。
- $00_11_22 %00_01_11
- 「_」は、無視される。
「$00_11_22」は、「$001122」と同じ。10進数では、「4386」。
「%00_01_11」は、「%000111」と同じ。10進数では、「7」。 - 1234f
- doubleに変換。「1234f」は、「1234.000000」。
- 1234d
- doubleに変換。「1234d」は、「1234.000000」。
- 1.234e10
- doubleに変換。指数表記。「1.234e10」は、「12340000000.000000」。
コメント ( 0 ) | Trackback ( 0 )
ブックマーク追加
Let's HSP! Kpan様
HSP3のスクリプトを垂れ流すブログ eller様
HSP3のスクリプトを垂れ流すブログ eller様
コメント ( 0 ) | Trackback ( 0 )
コンパイル制御 其の参
#ifdef _debug #ifndef NO_HSPUNIT_ #ifndef HSPUNIT_ #define global HSPUNIT_ #module HspUnit HUID,HUtxt,HUfilename,HUdate,HUtime,HUline,HUgettime #ifndef HSPUNIT_ID@HspUnit #define HSPUNIT_ID@HspUnit 31 #endif #ifndef HSPUNIT_TITLE@HspUnit #define HSPUNIT_TITLE@HspUnit "HspUnit" #endif #ifndef RICHEDIT_MAXLENGTH@HspUnit #define RICHEDIT_MAXLENGTH@HspUnit (1024*1024) #endif #ifndef RICHEDIT_FONTNAME@HspUnit #define RICHEDIT_FONTNAME@HspUnit "MS ゴシック" #endif #ifndef RICHEDIT_SIZE@HspUnit #define RICHEDIT_SIZE@HspUnit 10 #endif #ifndef RICHEDIT_COLOR@HspUnit #define RICHEDIT_COLOR@HspUnit 0xFFFFFF // BGR #endif #ifndef RICHEDIT_BKCOLOR@HspUnit #define RICHEDIT_BKCOLOR@HspUnit 0x333333 // BGR #endif #define RICHEDIT_DLL "Riched20.dll" #define TITLE_(%1) SetWindowText hWndHU,%1 #define CreateRichEdit CreateWindowEx(0x80,"RichEdit20A",¥ "",0x563009C4,0,0,500,200,hwnd,¥ 0,hinstance,0) #define global HspUnit_BEGIN(%1,%2) ¥ HU_Begin ""+%1,%2,__file__,__date__,__time__,__line__ #define global HspUnit_END(%1,%2) ¥ HU_End ""+%1,%2,__file__,__date__,__time__,__line__ #define global HspUnit_Print(%1) ¥ HU_Print ""+%1,__file__,__date__,__time__,__line__ #define global HspUnit_Assert(%1,%2) ¥ HU_Assert ""+%1,__file__,__date__,__time__,__line__,%2,"%2" #uselib "kernel32.dll" #cfunc LoadLibrary "LoadLibraryA" str #func FreeLibrary "FreeLibrary" int #uselib "user32.dll" #func SetWindowText "SetWindowTextA" int,str #cfunc CreateWindowEx "CreateWindowExA" int,str,str,int,int,int,¥ int,int,int,int,int,int #func MoveWindow "MoveWindow" int,int,int,int,int,int #uselib "winmm.dll" #cfunc timeGetTime "timeGetTime" #modinit int id,str txt,str f,str d,str t,int l HUID = id : HUtxt = txt : HUfilename = f HUdate = d : HUtime = t : HUline = l HUgettime = timeGetTime() return #modfunc HU_GetID return HUID #deffunc HU_Init bStop = 0 : cntOk = 0 : cntFailed = 0 newmod modHU,HspUnit,0,"","","","",0 : delmod modHU if(hEdit == 0 ){ modRichEdit = LoadLibrary(RICHEDIT_DLL) if(modRichEdit){ screen HSPUNIT_ID,ginfo_dispx,ginfo_dispy,8,0,0,500,200 hWndHU = hwnd : TITLE_ HSPUNIT_TITLE hEdit = CreateRichEdit dim cf, 15 : sdim fname,32 cf(0) = 60,0xE0000000 : cf(3) = RICHEDIT_SIZE * 20 cf(5) = RICHEDIT_COLOR dupptr fname,varptr(cf)+26,32,2 fname = RICHEDIT_FONTNAME sendmsg hEdit,0x444,4,varptr(cf) sendmsg hEdit,0x443,0,RICHEDIT_BKCOLOR sendmsg hEdit,0x435,0,RICHEDIT_MAXLENGTH oncmd gosub *WM_SIZE_@HspUnit,0x05 oncmd gosub *WM_CLOSE_@HspUnit,0x10 oncmd gosub *WM_COMMAND_@HspUnit,0x0111 } } return #defcfunc HU_GetLastMod ret = -1 : foreach modHU:ret=cnt:loop return ret #deffunc HU_AddString str s reStr = s+"¥n" sendmsg hEdit,0xB1,-1,-1 sendmsg hEdit,0xC2,0,varptr(reStr) return #deffunc HU_SETTITLE cntTotal = cntOk + cntFailed if( bStop == 0 ) : reStr = "[ 実行中 ] " if( bStop == 1 ) : reStr = "[ 停止待機中 ] " if( bStop == 2 ) : reStr = "[ 停止中 ] " reStr += ""+HSPUNIT_TITLE+" : 合計:"+cntTotal reStr += " 失敗:"+cntFailed TITLE_ reStr return #deffunc HU_Stop if( bStop == 0 ) : return HU_AddString "-------- 停止 --------" bStop = 2 : HU_SETTITLE *Label_HU_Stop if( bStop == 0 ) : return wait 10 goto *Label_HU_Stop return #modfunc HU_AddBegin int x if(x){ HUgettime = timeGetTime() - HUgettime cntOk++ reStr="[Begin] 正常 time:"+HUgettime+"ms" } else{ cntFailed++ reStr="[Begin] 失敗" } HU_AddString reStr reStr = ""+HUfilename+" ("+HUline+"行) : [Begin("+HUID+")] " reStr +=HUtxt HU_AddString reStr : HU_Stop : HU_SETTITLE return #modfunc HU_AddEnd int x,int id,str txt,str f,int l reStr = ""+f+" ("+l+"行) : [End ("+id+")] "+txt HU_AddString reStr : HU_Stop : HU_SETTITLE return #modfunc HU_DeleteStr if(HUID){ cntFailed++ reStr = HUfilename reStr+= " ("+HUline+"行) : [Begin("+HUID+")] "+HUtxt } else{ reStr = "[Delete]¥n"+HUfilename+" ("+HUline+"行) : "+HUtxt } HU_AddString reStr : HU_Stop : HU_SETTITLE return #deffunc HU_Delete str txt,str f,int l foreach modHU HU_DeleteStr modHU(cnt) delmod modHU(cnt) loop reStr = ""+f+" ("+l+"行) : "+txt : HU_AddString reStr return #deffunc HU_Begin str txt,int id,str f,str d,str t,int l newmod modHU, HspUnit,id,txt,f,d,t,l return #deffunc HU_End str txt,int id,str f,str d,str t,int l if( id == 0 ) : HU_Delete txt,f,l : HU_Stop : return repeat endCnt = HU_GetLastMod() : if( endCnt == -1 ) : break foreach modHU HU_GetID modHU(cnt) if( id == stat ){ bBegin = (endCnt == cnt) HU_AddBegin modHU(endCnt),bBegin HU_AddEnd modHU(cnt),bBegin,id,txt,f,l delmod modHU(endCnt) break } loop if( bBegin ) : break loop HU_Stop return #deffunc HU_Print str txt,str f,str d,str t,int l reStr = "[Print]¥n"+f+" ("+l+"行) : "+txt HU_AddString reStr : HU_Stop return #deffunc HU_Assert str txt,str f,str d,str t,int l,int b,str bStr reStr = "[Assert]¥n"+f+" ("+l+"行) : ["+bStr+"] "+txt if( b ):cntOk++:else:cntFailed++:bStop=2:HU_AddString reStr HU_Stop return *WM_SIZE_ MoveWindow hEdit,0,0,lparam&0xffff,(lparam>>16)&0xffff,1 return *WM_CLOSE_ if( bStop ) : bStop = 0 : else : bStop = 1 HU_SETTITLE return 0 *WM_COMMAND_ if( ((wparam>>16)&0xffff) == 0x0501 ){ ret = RICHEDIT_MAXLENGTH / 3 sendmsg hEdit,0xB1,0,ret : reStr = "" sendmsg hEdit,0xC2,0,varptr(reStr) } return #global HU_Init : gsel 0 #endif // HSPUNIT_ #endif // NO_HSPUNIT_ #endif // _debug #ifndef HSPUNIT_ #define global HspUnit_BEGIN(%1,%2) /* %1 %2 */ #define global HspUnit_END(%1,%2) /* %1 %2 */ #define global HspUnit_Print(%1) /* %1 */ #define global HspUnit_Assert(%1,%2) /* %1 %2 */ #endif |
コメント ( 0 ) | Trackback ( 0 )
コンパイル制御 其の弐
# 使いどころが微妙なモジュールメモ
モジュール「HspUnit」
「HspUnit」は、コンパイル制御を使ったモジュールです。
デバッグ中のプログラムの変数の表示、診断、停止などが可能。
使用例
![](https://blogimg.goo.ne.jp/user_image/53/5f/5e2cb67d66d2170f2c1a82e93baee0e7.jpg)
モジュール「HspUnit」
「HspUnit」は、コンパイル制御を使ったモジュールです。
デバッグ中のプログラムの変数の表示、診断、停止などが可能。
- 「_debug」が定義されている時のみ動作します。 実行ファイル作成時や、「#undef _debug」、「#define NO_HSPUNIT_」を指定した時は、以下マクロはコメント化されます。
- モジュール動作時、下記「HSPUNIT_ID@HspUnit」のIDのツールウィンドウを作成します。下記マクロの出力はここに表示されます。ツールウィンドウの「終了ボタン(×)」を押すことでプログラムを停止することが可能。最初は「実行中」ですが、「終了ボタン」を押すと「停止待機中」となり次のマクロが実行された時に「停止」します。また、「停止待機中」時にもう一度「終了ボタン」を押すことで「実行中」に戻ります。マクロから「停止」させることも可能。
- 変更可能な定義
#define global NO_HSPUNIT_ // 定義するとHspUnitを使用しません #define HSPUNIT_ID@HspUnit 31 // 使用するウィンドウID #define HSPUNIT_TITLE@HspUnit "HspUnit" // ウィンドウタイトルに表示される文字列 #define RICHEDIT_MAXLENGTH@HspUnit (1024*1024) // エディタの最大Byte数を指定 #define RICHEDIT_FONTNAME@HspUnit "MS ゴシック" // エディタのフォント #define RICHEDIT_SIZE@HspUnit 10 // エディタのフォントサイズ #define RICHEDIT_COLOR@HspUnit 0x000000 // エディタの文字色(BGR) #define RICHEDIT_BKCOLOR@HspUnit 0x333333 // エディタの背景色(BGR)
- 使用可能マクロ
HspUnit_Begin arg1, arg2 arg1 : 画面に表示する変数または定数を指定。 arg2 : HspUnit_BeginとHspUnit_End共通の数値。 0を指定した場合、HspUnit_Endで情報を全削除します。 HspUnit_BeginからHspUnit_Endの時間(適当)を表示します。 また、対のHspUnit_Endで終了しなかった場合は失敗となります。 例)HspUnit_Begin "関数A 開始", 0x0001 // 関数A HspUnit_End "関数A 終了", 0x0001 HspUnit_End arg1, arg2 HspUnit_Beginを参照。 HspUnit_Print arg1 arg1 : 画面に表示する変数または定数を指定。 表示専用のマクロです。 例) HspUnit_Print "a="+a+" b="+b 上記例の場合、変数aとbを出力します。 HspUnit_Assert arg1, arg2 arg1 : 画面に表示する変数または定数を指定。 arg2 : 0の場合、プログラムを停止させます。 arg2が0の時にプログラムを停止させます。 例) HspUnit_Assert "statが0", stat 上記例の場合、statが0の時は停止します。
使用例
![](https://blogimg.goo.ne.jp/user_image/53/5f/5e2cb67d66d2170f2c1a82e93baee0e7.jpg)
※「HspUnit.hsp」は、「コンパイル制御 其の参」にあります |
#include "HspUnit.hsp" #module Test #deffunc Func1 return 1 #deffunc Func2 return 0 //エラーを示す「0」を返す #deffunc Func3 HspUnit_Begin "Func3 Start", 1000 return 0 //エラーを示す「0」を返す HspUnit_End "FUnc3 End", 1000 return 1 #global HspUnit_Begin "Main Start",0 repeat 5 X = rnd(10) : Y = rnd(100) : Z = rnd(1000) HspUnit_Print "X = "+X+" Y = "+Y+" Z = "+Z loop Func1 HspUnit_Assert "Func1",stat Func2 HspUnit_Assert "Func2",stat HspUnit_Begin "処理 A Start", 1 // 処理 A Start // Func3 (処理 A内) Func3 // 処理 A End HspUnit_End "処理 A End",1 // Func3 Func3 HspUnit_End "Main End",0 |
コメント ( 0 ) | Trackback ( 0 )
« 前ページ |