単独実行モジュール

外部ファイルが必要な命令 (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
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX