外部ファイルが必要な命令 (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 _here if ( size < 0 ) { error "bload にサイズを指定してください。" } if ( vartype(buf) == 2 ) { memexpand buf, size } repeat size poke buf, cnt, (offset + cnt) \ 255 + 1 loop _strsize@exporter = size return // 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 k if ( dummy != "" ) { data = dummy if ( _size > 0 ) { data = strmid(data, 0, _size) } } else { if ( size < 0 ) { error "noteload にサイズ上限を指定してください。" } sdim data, _size + 1 repeat , 1 if ( n + cnt + 2 > _size ) { break } for k, 0, cnt : poke data, n + k, 'X' : next wpoke data, n + cnt, 0x0A0D n += cnt + 2 loop } _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 _here if ( cx < 0 || cy < 0 ) { error "picload/celload には追加パラメータで画像サイズを与える必要があります。" } if ( mode == 0 || mode == 2 ) { width cx, cy : pos 0, 0 if ( 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_bak id_bak = ginfo_sel if ( _id < 0 ) { buffer ginfo_newid, cx, cy, mode id = ginfo_sel } else { id = _id gsel id } picload_impl fname, 1, cx, cy, _here gsel id_bak return id #global #module exporter // small #deffunc local _init mref ctx, 68 dupptr exinfo, ctx(219), 49 * 4 dupptr _strsize, exinfo(8), 4 return #deffunc AssignToPVal@exporter int ppval, int ptr, int aptr, local pval, local hvp, local prm dupptr pval, ppval, 48 prm = pval(0) & 0xFFFF dupptr hvp, callfunc( prm, exinfo(25), 1 ), 35 * 4 pval(10) = aptr prm = ppval prm(1) = callfunc( prm, hvp(7), 1 ) prm(2) = ptr return callfunc( prm, hvp(18), 3 ) #global _init@exporter randomize 256 #endif