2008-01-01から1年間の記事一覧

RubiMaVM を JavaScript に移植してみた

JS

VM に興味がわいたので るびま を読んだ。 そして、 RubiMaVM を Javascript に移植してみた。 var RubiMaVM = {}; RubiMaVM.Instruction = function Instruction(code, opts) { this.code = code; this.opts = opts; }; RubiMaVM.Instruction.prototype.toS…

クローン変数で配列の自動拡張が行われない

HSP

a = 1, 2, 3 dup b, a b.5 = 42 ; error!謎仕様

Shift_JIS(CP932)の重複している文字の列挙

参考: Microsoftコードページ932 - Wikipedia 出力結果: http://www.fujidig.com/misc/sjis-duplication.txt なんか自分の区番号の認識が間違ってたぽい。第二バイトが40-7Eだったら奇数で80-FCだったら偶数と思ってたんだけど。正しくはどうなんだろう 区点…

CStrLineIterator クラス てすとけーすつき

CStrLineIterator クラスを導入して listbox を高速化 - fujidigの雑記 で作った CStrLineIterator クラスをてすとけーすつきで。 CStrLineIterator::next メソッドでバッファサイズが足りないときに -1 を返してるんですけど、次に next を呼んだときにはも…

CStrLineIterator クラスを導入して listbox を高速化

2ch プログラム技術スレ「API ┣━┫HSP上級者専用スレッドvol.0x01┣━┫MCI」 >>525 CStrNote で行頭位置をキャッシュするパッチが投稿されていました。 listbox が高速になっていい感じなんですが、 note 系命令を使ったプログラムは逆に遅くなってしまいます。…

Ruby 1.9 SUPPORT_JOKE の bitblt を試してみる

$ cat bitblt.rb def bitblt c = nil 10000.times { a = [1, 1606, 396, 933960, 3775901511, 1044, 244711859] b = a.map {|i| s = '' while i > 0 i, a = (i-1).divmod(26) s << 97 + a end s.reverse } b[3] += ',' c = b.join(' ') } c end p bitblt $ t…

global 指定されたマクロとモジュールローカルなマクロの名前がかぶったときの挙動

HSP

#define global A 111 #module #define A 222 #deffunc f mes A ; >> 111 return #global mes A ; >> 111 f5 行目の A ではモジュールローカルの方の 222 を優先してほしいなあー。 #uselib "USER32.DLL" #func global MessageBoxA "MessageBoxA" sptr,sptr,…

__include_level__ マクロ

Perl の __FILE__ eq $0 、 Ruby の __FILE__ == $0 、 Python の __name__ == "__main__" みたいなものがほしいなーと思った。 Index: token.cpp =================================================================== --- token.cpp (リビジョン 164) +++…

HSPLet あれこれ

HSP

仮引数へ代入が可能 #runtime "hsplet3" #module #deffunc f int a mes a ; >> 123 a = 456 mes a ; >> 456 return #global f 123 仮引数が静的にふるまう #runtime "hsplet3" #module #deffunc f int a if a >= 5 : return mes "" + b + ", " + a b ++ f a …

赤黒木の画像化 canvas バージョン

JS

http://www.fujidig.com/misc/js/treemap.html 元ネタ : 二分木画像化レシピ - 日記を書く [・w・] はやみずさん 以前の Ruby のとき : 二分木の画像化 - fujidigの雑記 以前の Ruby のとき : 赤黒木アニメーション - fujidigの雑記 この前は Ruby で PostSc…

キャンバスで遊び中 - darker 。。。

JS

globalCompositeOperation = 'darker' が Firefox と Opera で使えなくて、 Safari でも自分の期待する動作と違う。 例えば、色180の上に色100でdarkerで描画したとき 期待する動作: 結果の色が 80 になる ( 80 = 180 - 100 ) Safari の動作: 結果の色が 25 …

キャンバスで遊び中 - ベジェ曲線で楕円を描画する関数

JS

function drawEllipse(ctx, x0, y0, x1, y1, fill_p) { var w = (x1 - x0) / 2; var h = (y1 - y0) / 2; var C = 0.5522847498307933; var c_x = C * w; var c_y = C * h; ctx.beginPath(); ctx.moveTo(x1, y0 + h); ctx.bezierCurveTo(x1, y0 + h - c_y, x0…

キャンバスで遊び中 - ベジェ曲線のメソッドで円描けた!

JS

var canvas = document.body.appendChild(document.createElement('canvas')); canvas.width = 400; canvas.height = 400; var ctx = canvas.getContext('2d'); ctx.beginPath(); ctx.moveTo(200, 100); ctx.bezierCurveTo(200, 45, 155, 0, 100, 0); ctx.be…

キャンバスで遊び中 - 線の幅を変えることなく楕円を描画したい

JS

楕円を描画したい。scale を使うと線の幅が変わっちゃうだろうなあと思ったら案の定そうだった。 var canvas = document.body.appendChild(document.createElement('canvas')); canvas.width = 400; canvas.height = 300; var ctx = canvas.getContext('2d')…

キャンバスで遊び中 - 任意の色を透明にしてコピー

JS

getImageData & putImageData ! http://www.fujidig.com/misc/js/canvas/transparent-color-copy.html var Color = function Color(r, g, b, a) { this.r = r & 255; this.g = g & 255; this.b = b & 255; this.a = a; if (typeof (this.a) == 'undefined') …

キャンバスで遊び中 - 描画されている範囲をえる

JS

getImageData!! http://www.fujidig.com/misc/js/canvas/trim.html var canvas = document.body.appendChild(document.createElement('canvas')); canvas.width = 200; canvas.height = 200; var ctx = canvas.getContext('2d'); for(var i = 0; i < 3; i++)…

キャンバスで遊び中 - マウスカーソル下の色を表示

JS

http://www.fujidig.com/misc/js/canvas/additive-color.html getImageData や opera-2dgame の getPixel で色を取得できると知ったのでやったみた。 キャンバスで遊び中 - 光の三原色 - fujidigの雑記を改造。 あと Color クラスとか作った。どうみても車輪…

キャンバスで遊び中 - 虹を表示

JS

http://www.fujidig.com/misc/js/canvas/rainbow.html var canvas = document.body.appendChild(document.createElement('canvas')); canvas.width = 200; canvas.height = 200; var ctx = canvas.getContext('2d'); var radgrad = ctx.createRadialGradient…

キャンバスで遊び中 - 簡易お絵描き

JS

http://www.fujidig.com/misc/js/canvas/oekaki.html mousemoveイベントの発行タイミングとドラッグ - 素人がプログラミングを勉強していたブログの改造。 たしか一番最初にCanvasをいじったプログラム。この記事がCanvasを触るきっかけでした(前からいつか…

キャンバスで遊び中 - ランダム模様

JS

HSP でもこういうのを作ったことを記憶してます。なつかしす。 http://www.fujidig.com/misc/js/canvas/get-image-data.html function rand256() { return Math.floor(Math.random()*256); } var canvas = document.body.appendChild(document.createElement…

キャンバスで遊び中 - 光の三原色

JS

var canvas = document.body.appendChild(document.createElement('canvas')); canvas.width = 480; canvas.height = 480; var ctx = canvas.getContext('2d'); ctx.fillStyle = 'black'; ctx.fillRect(0, 0, canvas.width, canvas.height); ctx.translate(c…

文字テーブル作成

キャンバスで遊び中 - テキスト表示 - fujidigの雑記 でつかった http://www.fujidig.com/2008/06/images/chars.png の画像を作るときに使った。 buffer 1 FAMILY = "VL ゴシック" SIZE = 128 font FAMILY, SIZE pos 32000 : mes " " W = ginfo_mesx H = gin…

ゆの in HSP

ゆの in language (ってキーワード書くと捕捉してもらえるかな>< はてなブックマーク - ゆの in languageに関するcho45のブックマーク ゆの in languageとは - はてなキーワード if 0 { #defcfunc _X if i : s + "×365 " : else : s = "ひだまり" : i+ re…

HDL の「もしかして機能」

賢い!

HSPのrndを(ry

JS

var randomize; var rnd; (function(){ var x = 1; randomize = function(a) { x = (a||+new Date)|0; }; rnd = function(a) { x = (x*214013|0)+2531011|0; return ((x >> 16) & 32767) % a; }; })(); var pre = document.body.appendChild(document.create…

キャンバスで遊び中 - globalCompositeOperation 描画結果一覧

JS

http://www.fujidig.com/misc/js/canvas/composite.html 描画結果 Firefox 3.0 RC2 ( Ubuntu 8.04 ) Opera 9.5 ( Ubuntu 8.04 ) Safari 3.1.1 ( Windows XP Home SP2 ) Google Chrome 2.0.166.1 プログラム <body> <style> body { background-color: #ffc; } canvas { bor</style></body>…

HSP 3.2b1 で 変数型を拡張するプラグインでうまく動作しない件についてのメモ

hsp3.2b1においてコールバック関数実装プラグインが使用できない この問題は Shark++ さんが修正してくれました。 Shark++++原因は DLL を開放した後で DLL 内の関数を呼んでしまう箇所があったから。それは、 DLL で拡張された変数の開放関数。(HspVarProc…

キャンバスで遊び中 - テキスト表示

JS

http://www.fujidig.com/misc/js/canvas/chars.html キャンバスはテキストの表示ができませんが、ASCII文字テーブルの画像を用意して切り貼りすればそれっぽいことができます。 http://www.fujidig.com/2008/06/images/chars.png var run = function() { var…

キャンバスで遊び中 - 砂嵐

JS

キャンバス楽しい! function rand256() { return Math.floor(Math.random() * 256); } function rand_graycolor() { var c = rand256(); return "rgb(" + c + "," + c + "," + c + ")"; } var canvas = document.body.appendChild(document.createElement('…

ファイルの二分割

でかいファイルを二分割して渡そうと思って、 #!/usr/bin/ruby path = ARGV.shift path1 = path + '.1' path2 = path + '.2' size = File.size(path) size1 = size / 2 size2 = size - size1 open(path) do |file| open(path1, 'w') do |file1| size1.times …