外部ファイルが必要な命令 (bload, noteload, picload, celload) を置換して
テキトーな処理に置き換えてしまうモジュール。ただしサイズは指定する必要あり。
それと noteload の対象バッファを取得するために黒魔術を使っている。notesel/noteunsel も置換した方がよかったかも。
外部ファイルが必要な命令 (bload, noteload, picload, celload) を置換して
テキトーな処理に置き換えてしまうモジュール。ただしサイズは指定する必要あり。
それと noteload の対象バッファを取得するために黒魔術を使っている。notesel/noteunsel も置換した方がよかったかも。
// 単独実行モジュール#ifndef IG_RUN_ALONE_AS#define IG_RUN_ALONE_AS#undef bload#undef noteload#undef picload#undef celload#define bload(%1 = "", %2, %3, %4 = 0) bload_impl %1, %2, %3, %4, __HERE__@RunAlone#define noteload(%1 = "", %2, %3 = "") noteload_impl %1, %2, %3, __HERE__@RunAlone#define picload(%1 = "", %2 = 0, %3 = -1, %4 = -1) picload_impl %1, %2, %3, %4, __HERE__@RunAlone#define celload(%1 = "", %2 = -1, %3 = 0) celload_impl %1, %2, %3, %4, __HERE__@RunAlone#module RunAlone#define error(%1, %2 = _here) dialog %1 + "\n" + (%2), 1, "RunAlone" : assert#define ctype RGB(%1,%2,%3) (((%1) & 0xFF) | ((%2) & 0xFF) << 8 | ((%3) & 0xFF) << 16)#define ctype random_cref RGB(rnd(256), rnd(256), rnd(256))#define __HERE__ (__FILE__ + " (#" + __LINE__ + ")")dim ctx@exporter // 警告抑制// bload// 前から順に 1, 2, 3, ..., 255, 1, ... と並んでいることにする#deffunc bload_impl str fname, var buf, int size, int offset, str _hereif ( size < 0 ) { error "bload にサイズを指定してください。" }if ( vartype(buf) == 2 ) { memexpand buf, size }repeat sizepoke buf, cnt, (offset + cnt) \ 255 + 1loop_strsize@exporter = sizereturn// noteload// 各行に (行番号 + 1) * "X" を書き込む (謎)。// @ 対象バッファを操作するために exporter を用いている。#deffunc noteload_impl str fname, int _size, str dummy, str _here, local size, local buf, local pval, local data, local n, local kif ( dummy != "" ) {data = dummyif ( _size > 0 ) { data = strmid(data, 0, _size) }} else {if ( size < 0 ) { error "noteload にサイズ上限を指定してください。" }sdim data, _size + 1repeat , 1if ( n + cnt + 2 > _size ) { break }for k, 0, cnt : poke data, n + k, 'X' : nextwpoke data, n + cnt, 0x0A0Dn += cnt + 2loop}_strsize@exporter = strlen(data)AssignToPVal@exporter ctx@exporter(202), varptr(data), ctx@exporter(203)return#deffunc picload_impl str fname, int mode, int cx, int cy, str _hereif ( cx < 0 || cy < 0 ) { error "picload/celload には追加パラメータで画像サイズを与える必要があります。" }if ( mode == 0 || mode == 2 ) {width cx, cy : pos 0, 0if ( mode == 2 ) { gradf 0, 0, ginfo_winx, ginfo_winy, 0, 0, 0 }}gradf@hsp ginfo_cx, ginfo_cy, cx, cy, rnd(2), random_cref(), random_cref()return#deffunc celload_impl str fname, int _id, int mode, int cx, int cy, str _here, local id, local id_bakid_bak = ginfo_selif ( _id < 0 ) {buffer ginfo_newid, cx, cy, modeid = ginfo_sel} else {id = _idgsel id}picload_impl fname, 1, cx, cy, _heregsel id_bakreturn id#global#module exporter// small#deffunc local _initmref ctx, 68dupptr exinfo, ctx(219), 49 * 4dupptr _strsize, exinfo(8), 4return#deffunc AssignToPVal@exporter int ppval, int ptr, int aptr, local pval, local hvp, local prmdupptr pval, ppval, 48prm = pval(0) & 0xFFFFdupptr hvp, callfunc( prm, exinfo(25), 1 ), 35 * 4pval(10) = aptrprm = ppvalprm(1) = callfunc( prm, hvp(7), 1 )prm(2) = ptrreturn callfunc( prm, hvp(18), 3 )#global_init@exporterrandomize 256#endif