HSP
#module mod x #modinit str _x x = _x:return #modfunc func mes x:return #global dimtype a, 5, 3, 3 newmod a, mod, "hoge" func a.1.1 // => hoge func a.1.2 // OpenHSP 3.2だと落ちるこれの対処は newmod で二次元以上だとエラーにするのでいいんだろ…
きっと任意の式を許すと文字列のコピーが必要になって処理速度が低下するから。 後ろのパラメータの値を取得するときに同じ領域に書き込まれてしまう。 うーん、なんだかなぁ。 - 実際、後ろにパラメータが続く文字列パラメータの取得にはstrncpyを使って文…
if 1:mes "a":mes "b"{ mes "c" } else : mes "d" { mes "e" }
主にだるだるのfさん、begriffさん、GENKIさん、Asさんたちと。 なかなか面白かったです。 HSPについて思うことについて話したり、HSP対応版kmyaccをちょっぴり宣伝したりしました。 - ちょっと抜粋。 22:54 f_the_darudaru ところで、PF-Xは、表示時に文字…
http://www.fujidig.com/2008/03/kmyacc-hsp.html HSP 対応版 kmyacc ダウンロード ぜひお使いください。
ここ何日かで挙げれるだけ挙げてみた。 スタックサイズの上限が128とか少なすぎる プリプロセス文きもい。モジュールや関数定義までプリプロセス文とか意味不明 関数の定義より前にその関数の呼び出しができない 明示的な指定をしなければ関数内の変数も全部…
if のブレースの後のコロンは省略できる $を使うことでスペースを削れることがある(mes 0はmes$に) 関数呼び出しや配列の要素取り出しは . を使える場合は使うべし。ただし使えるのは単純な変数と単純な負の数以外の整数リテラルぐらい。括弧でくくれば式…
たとえば、 varptr や dupptr で C レベルのメモリアドレスにアクセスできたり HSP 内部で使われている構造体(HSPCTXやHSPEXINFOなど)にアクセスできたり 機械語を埋め込んでそれを実行できたり
どう書くに投稿した以下のスクリプト。 http://ja.doukaku.org/comment/6009/ #include "d3m.hsp" xs = -1, 1, 1,-1 ys = -1,-1, 1, 1 repeat redraw 0 color 255, 255, 255 : boxf d3setcam 1500, 0, 500 color d3initlineto rad = 0.05 * cnt repeat 5 x =…
二分木画像化レシピ - 日記を書く [・w・] はやみずさんを自分でもやってみよう、と思ったのだけど、座標や線の太さにはどういう式を使っているのかは書かれていなかったので、HSPで試作。 #module #deffunc draw_tree double left_x, double right_x, doubl…
#module #deffunc hoge local x x = "hoge" dup a, x mes x mes a return #deffunc huga mes a a = "huga" mes a return #global hoge huga問題なく動いているようだけど、開放済みのメモリにアクセスとかされてないか問題ないのか。 OpenHSPのソースを読ん…
HSPでは関数呼び出しのスタックと式の計算用スタックが共有。 mes (0+(0+(0+(0+(0+(0+(0+(0+(0+(0+(0+(0+(0+(0+(0+(0+(0+(0+(0+(0+(0+(0+(0+(0+(0+(0+(0+(0+(0+(0+(0+(0+(0+(0+(0+(0+(0+(0+(0+(0+(0+(0+(0+(0+(0+(0+(0+(0+(0+(0+(0+(0+(0+(0+(0+(0+(0+(0+(0+…
#module #deffunc func repeat return "hoge" loop #global repeat 1 func mes refstr loopできないというか、挙動がおかしくなる? これってなんでなの。
http://dev.onionsoft.net/trac/changeset/49 ふむふむ。 文字列のポインタから文字列を得るのに便利だったんだけど、安全面を優先した方がいいよね。 ところで、strf関数の引数が一つだけしか指定できないのが不便なんだけど可変長引数なんかは今のHSPの仕…
大きな実数をstr関数に渡したり、mes命令に渡したりするとオーバーフローしたり。 strfの結果が長いとオーバーフローしたり。 returnに長い文字列を渡すとオーバーフローしたり><
HSPEXINFOにHspFunc_varnameとHspFunc_seekvarというのがあったのでこれを使ってみました。 変数IDから変数名を得たり、変数名から変数IDを探したりする処理をやってくれます。 変数名からその変数のクローンを作る - fujidigの雑記ではそういう処理を自前で…
色々試してみた。 #module m0 x, y, z #modinit int #modterm #defcfunc func1 str, int, local, double, var, array, label #modfunc func2 #global #uselib "hoge" #func hoge1 "hoge1" int, var, str, wstr, sptr, wptr #cfunc hoge2 "hoge2" double, flo…
パラメータタイプの一覧と関数の場合はカッコを出すようにできた。 #include "d3m.hsp" mref hspctx, 68 dupptr hsphed, hspctx.0, 96 // hspctx.hsphed / sizeof HSPHED ds_ptr = lpeek( hspctx, 12 ) // hspctx.mem_mds max_ds = lpeek( hsphed, 28 ) // h…
#include "d3m.hsp" mref hspctx, 68 dupptr hsphed, hspctx.0, 96 // hspctx.hsphed / sizeof HSPHED ds_ptr = lpeek( hspctx, 12 ) // hspctx.mem_mds max_ds = lpeek( hsphed, 28 ) // hsphed.max_ds dupptr ds, ds_ptr, max_ds linfo_ptr = lpeek( hspct…
コピペして使う用に。 mref hspctx, 68 dupptr hsphed, hspctx.0, 96 // hspctx.hsphed / sizeof HSPHED cs_ptr = lpeek( hspctx, 8 ) // hspctx.mem_mcs max_cs = lpeek( hsphed, 20 ) // hsphed.max_cs dupptr cs, cs_ptr, max_cs ds_ptr = lpeek( hspctx,…
#module #deffunc init_getvn if inited : return inited = 1 mref hspctx, 68 dupptr hsphed, hspctx.0, 96 // hspctx.hsphed / sizeof HSPHED max_val = lpeek( hsphed, 8 ) // hsphed.max_val ds_ptr = lpeek( hspctx, 12 ) // hspctx.mem_mds dinfo_ptr …
#module #deffunc init_getvn if inited : return inited = 1 exist "obj" if strsize < 0 : end sdim axbuf, strsize bload "obj", axbuf max_val = lpeek( axbuf, 8 ) pt_ds = lpeek( axbuf, 24 ) max_ds = lpeek( axbuf, 28 ) pt_dinfo = lpeek( axbuf, 4…
オブジェクトファイルと戯れてみる。 exist "obj" if strsize < 0 : end sdim axbuf, strsize bload "obj", axbuf pt_ds = lpeek( axbuf, 24 ) max_ds = lpeek( axbuf, 28 ) pt_dinfo = lpeek( axbuf, 40 ) max_dinfo = lpeek( axbuf, 44 ) ;mes pt_dinfo ;m…
a = "hello" ptr = varptr( a ) // strf %s を使う // 長い文字列では注意が必要 b = strf("%s",ptr) mes b // dupptr を使う // これはクローンであることに注意 // 参照だけでなく破壊的な操作を行う場合はコピーすること dupptr c, ptr, 1, 2 mes c // ls…
作ってみた! といっても変更したのは一行だけだけど これは2008年2月8日19時52分現在公開されているOpenHSP ver.3.2beta1 に対するパッチです。 OpenHSP ver.3.2beta1 のライセンスは以下の通りです。 OpenHSP Copyright (C) 1997-2008, Onion Software/oni…
これは2008年2月7日19時48分現在公開されているOpenHSP ver.3.2beta1 に対するパッチです。 OpenHSP ver.3.2beta1 のライセンスは以下の通りです。 OpenHSP Copyright (C) 1997-2008, Onion Software/onitama, all rights reserved. This software is provid…
ただの線形検索だからコンパイル遅くなっちゃうかな?と思ったけれど、体感的にはあまり変わった気がしない。 ソースはOpenHSPのライセンスとか確認した後ほどにでも公開したいと思います。 まあそこそこ大きいソースかな?と思うHDLで#cmpopt optinfo 1をつ…
OpenHSPのソースこそ読んでいるものの、一度もコンパイルしていないことに気づいたのでhspcmpをVC++でコンパイルしてみた。 warningこそそれなりに出るけど何のエラーもなくコンパイルできた。 ほんと、vcprojをダブルクリックして開いてメニューからビルド…
同じ文字列の最適化は CToken::PutDS で追加したデータのオフセットとサイズを記憶して、追加するたびに既に同じ内容を登録していないか確認する、っていうのでいけそうだねー。 まあでも、ただの線形検索じゃ間違いなく重いだろうけど。
mes "hello" mes "ello" mes "llo"このスクリプトに相当するaxファイルも短くできます。 48 53 50 33 01 03 00 00 00 00 00 00 90 00 00 00 60 00 00 00 24 00 00 00 84 00 00 00 06 00 00 00 8a 00 00 00 04 00 00 00 8e 00 00 00 02 00 00 00 90 00 00 00 …