goo

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 )

訂正

CPUの使用率取得」でサンプルソースをコピーして実行しても正常にCPU使用率が取得できない件

原因:コード内の¥が消えてた

結果:¥を追加。また、冗長なコードを書き換え。
コメント ( 0 ) | Trackback ( 0 )

ブックマーク追加

コメント ( 0 ) | Trackback ( 0 )

コンパイル制御 其の参

HspUnit.hsp
#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」は、コンパイル制御を使ったモジュールです。
デバッグ中のプログラムの変数の表示、診断、停止などが可能。

  • 「_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の時は停止します。

使用例


Test.hsp
※「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 )
« 前ページ