HSP

モジュール変数型の二次元配列でバグ?

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 で二次元以上だとエラーにするのでいいんだろ…

strmidやinstrの第一引数が変数固定なのは

HSP

きっと任意の式を許すと文字列のコピーが必要になって処理速度が低下するから。 後ろのパラメータの値を取得するときに同じ領域に書き込まれてしまう。 うーん、なんだかなぁ。 - 実際、後ろにパラメータが続く文字列パラメータの取得にはstrncpyを使って文…

if や else の直後でなくてもブレース使えるのかよよよ

HSP

if 1:mes "a":mes "b"{ mes "c" } else : mes "d" { mes "e" }

HSP開発WikiのIRCチャットで少し話してきました

HSP

主にだるだるのfさん、begriffさん、GENKIさん、Asさんたちと。 なかなか面白かったです。 HSPについて思うことについて話したり、HSP対応版kmyaccをちょっぴり宣伝したりしました。 - ちょっと抜粋。 22:54 f_the_darudaru ところで、PF-Xは、表示時に文字…

HSP 対応版 kmyacc を公開しました

HSP

http://www.fujidig.com/2008/03/kmyacc-hsp.html HSP 対応版 kmyacc ダウンロード ぜひお使いください。

HSPのダサいところ

HSP

ここ何日かで挙げれるだけ挙げてみた。 スタックサイズの上限が128とか少なすぎる プリプロセス文きもい。モジュールや関数定義までプリプロセス文とか意味不明 関数の定義より前にその関数の呼び出しができない 明示的な指定をしなければ関数内の変数も全部…

HSPでワンライナするときのポイント

HSP

if のブレースの後のコロンは省略できる $を使うことでスペースを削れることがある(mes 0はmes$に) 関数呼び出しや配列の要素取り出しは . を使える場合は使うべし。ただし使えるのは単純な変数と単純な負の数以外の整数リテラルぐらい。括弧でくくれば式…

HSPの大きな特徴の一つは低レベルなところにアクセスできるところだと思う

HSP

たとえば、 varptr や dupptr で C レベルのメモリアドレスにアクセスできたり HSP 内部で使われている構造体(HSPCTXやHSPEXINFOなど)にアクセスできたり 機械語を埋め込んでそれを実行できたり

回転する八面体が一瞬おかしく見える

HSP

どう書くに投稿した以下のスクリプト。 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 =…

木の描画

HSP

二分木画像化レシピ - 日記を書く [・w・] はやみずさんを自分でもやってみよう、と思ったのだけど、座標や線の太さにはどういう式を使っているのかは書かれていなかったので、HSPで試作。 #module #deffunc draw_tree double left_x, double right_x, doubl…

localをdup

HSP

#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

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+…

repeat〜loop内でreturnやgotoできないのが不便な件

HSP

#module #deffunc func repeat return "hoge" loop #global repeat 1 func mes refstr loopできないというか、挙動がおかしくなる? これってなんでなの。

strf関数で%sが使えないようになった

http://dev.onionsoft.net/trac/changeset/49 ふむふむ。 文字列のポインタから文字列を得るのに便利だったんだけど、安全面を優先した方がいいよね。 ところで、strf関数の引数が一つだけしか指定できないのが不便なんだけど可変長引数なんかは今のHSPの仕…

HSP 3.2ではバッファオーバーフローの可能性のある部分を少しでもつぶしてほしいなあ

大きな実数をstr関数に渡したり、mes命令に渡したりするとオーバーフローしたり。 strfの結果が長いとオーバーフローしたり。 returnに長い文字列を渡すとオーバーフローしたり><

変数名からその変数のクローンを作る・改

HSP

HSPEXINFOにHspFunc_varnameとHspFunc_seekvarというのがあったのでこれを使ってみました。 変数IDから変数名を得たり、変数名から変数IDを探したりする処理をやってくれます。 変数名からその変数のクローンを作る - fujidigの雑記ではそういう処理を自前で…

関数一覧3

HSP

色々試してみた。 #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…

関数一覧2

HSP

パラメータタイプの一覧と関数の場合はカッコを出すようにできた。 #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…

関数一覧

HSP

#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…

HSPCTXからオブジェクトファイルの各データにアクセス

HSP

コピペして使う用に。 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,…

変数名からその変数のクローンを作る

HSP

#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 …

変数名取得

HSP

#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…

変数一覧

HSP

オブジェクトファイルと戯れてみる。 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…

文字列のポインタから文字列を得る

HSP

a = "hello" ptr = varptr( a ) // strf %s を使う // 長い文字列では注意が必要 b = strf("%s",ptr) mes b // dupptr を使う // これはクローンであることに注意 // 参照だけでなく破壊的な操作を行う場合はコピーすること dupptr c, ptr, 1, 2 mes c // ls…

HSPBT#198を修正するパッチ

作ってみた! といっても変更したのは一行だけだけど これは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をコンパイルしてみた

OpenHSPのソースこそ読んでいるものの、一度もコンパイルしていないことに気づいたのでhspcmpをVC++でコンパイルしてみた。 warningこそそれなりに出るけど何のエラーもなくコンパイルできた。 ほんと、vcprojをダブルクリックして開いてメニューからビルド…

OpenHSP が少しずつ読めるようになってきた

同じ文字列の最適化は CToken::PutDS で追加したデータのオフセットとサイズを記憶して、追加するたびに既に同じ内容を登録していないか確認する、っていうのでいけそうだねー。 まあでも、ただの線形検索じゃ間違いなく重いだろうけど。

HSPのオブジェクトファイルを編集してみる。(hello ello llo)

HSP

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 …