1 loopwrapper
= function(fn
, ...)
2 local routine
= coroutine
.create(fn
);
3 local resume
= function(...)
4 if coroutine
.status(routine
) ~= "dead" then
6 x
, y
= coroutine
.resume(routine
, ...);
12 local yield
= function()
13 return coroutine
.yield(routine
);
21 render_queue_function
=function(rq
)
27 string.byteU
=_lsnes_string_byteU
;
28 string.charU
=_lsnes_string_charU
;
30 local _lookup_class
= lookup_class
;
31 local _all_classes
= all_classes
;
32 local classes_meta
= {
33 ["__newindex"] = function() error("Classes table is not writable"); end,
34 ["__index"] = function(a
, b
) return _lookup_class(b
); end
37 setmetatable(classes
, classes_meta
);
39 local register_in
= function(table, class
)
40 local methods
= {classes
[class
]._static_methods()};
43 _G
[table] = _G
[table] or {};
51 utable
[m
] = classes
[class
][m
];
55 --Register all classes that have special names at top level.
56 local classes_list
= {_all_classes()};
58 for idx
=1,#classes_list
do
59 local c
= classes_list
[idx
];
60 if string.byte(c
) == 42 then
61 _G
[string.sub(c
, 2)] = classes
[c
];
66 memory
.mmap
= classes
.MMAP_STRUCT
;
67 zip
.writer
= classes
.ZIPWRITER
;
68 gui
.tiled_bitmap
= classes
.TILEMAP
;
69 gui
.renderctx
= classes
.RENDERCTX
;
70 gui
.palette
= classes
.PALETTE
;
71 gui
.bitmap
= classes
.BITMAP
;
72 gui
.dbitmap
= classes
.DBITMAP
;
73 gui
.image
= classes
.IMAGELOADER
;
74 gui
.font
= classes
.CUSTOMFONT
;
75 iconv
= classes
.ICONV
;
76 filereader
= classes
.FILEREADER
;
79 memory2
=classes
.VMALIST
.new();
80 callback
=classes
.CALLBACKS_LIST
.new();
81 memory
.map_structure
=classes
.MMAP_STRUCT
.new
;
82 zip
.create
=classes
.ZIPWRITER
.new
;
83 gui
.tilemap
=classes
.TILEMAP
.new
;
84 gui
.renderq_new
=classes
.RENDERCTX
.new
;
85 gui
.palette_new
=classes
.PALETTE
.new
;
86 gui
.font_new
= classes
.CUSTOMFONT
.new
;
87 gui
.loadfont
= classes
.CUSTOMFONT
.load
;
88 iconv_new
= classes
.ICONV
.new
;
89 create_ibind
= classes
.INVERSEBIND
.new
;
90 create_command
= classes
.COMMANDBIND
.new
;
91 open_file
= classes
.FILEREADER
.open
;
93 local do_arg_err
= function(what
, n
, name
)
94 error("Expected "..what
.." as argument #"..n
.." of "..name
);
97 local normal_method
= {}
99 local normal_method
= function(class
, method
, name
, parent
)
100 if type(class
) == "string" then
101 normal_method
[name
] = normal_method
[name
] or {};
102 normal_method
[name
][class
] = method
;
104 normal_method
[name
] = normal_method
[name
] or {};
106 for k
, v
in pairs(class
) do
107 normal_method
[name
][v
] = method
;
110 parent
[name
] = function(o
, ...)
111 local m
= normal_method
[name
];
112 local c
= identify_class(o
);
114 return o
[m
[c]]
(o
, ...);
118 for k
, v
in pairs(m
) do
120 what
= what
.. " or " .. k
;
125 do_arg_err(what
, 1, name
);
130 gui
.renderq_set
=function(o
, ...)
131 if type(o
) == "nil" then
132 return classes
.RENDERCTX
.setnull();
133 elseif identify_class(o
) == "RENDERCTX" then
136 do_arg_err("RENDERCTX or nil", 1, "gui.renderq_set");
140 normal_method("RENDERCTX", "run", "renderq_run", gui
);
141 normal_method("RENDERCTX", "synchronous_repaint", "synchronous_repaint", gui
);
142 normal_method("RENDERCTX", "clear", "renderq_clear", gui
);
144 gui
.bitmap_new
=function(w
, h
, type, ...)
146 return classes
.DBITMAP
.new(w
,h
,...);
147 elseif type==false then
148 return classes
.BITMAP
.new(w
,h
,...);
150 do_arg_err("boolean", 3, "gui.bitmap_new");
154 gui
.bitmap_draw
=function(x
, y
, o
, ...)
155 if identify_class(o
) == "BITMAP" then
156 return o
:draw(x
, y
, ...);
157 elseif identify_class(o
) == "DBITMAP" then
158 return o
:draw(x
, y
, ...);
160 do_arg_err("BITMAP or DBITMAP", 3, "gui.bitmap_draw");
164 gui
.bitmap_save_png
=function(...)
170 if type(x
[j
]) ~= "string" then
171 obj
= table.remove(x
, j
);
176 if identify_class(obj
) == "BITMAP" then
177 return obj
:save_png(unpack(x
));
178 elseif identify_class(obj
) == "DBITMAP" then
179 return obj
:save_png(unpack(x
));
181 do_arg_err("BITMAP or DBITMAP", i
, "gui.bitmap_save_png");
185 gui
.bitmap_load
=classes
.IMAGELOADER
.load
;
186 gui
.bitmap_load_str
=classes
.IMAGELOADER
.load_str
;
187 gui
.bitmap_load_png
=classes
.IMAGELOADER
.load_png
;
188 gui
.bitmap_load_png_str
=classes
.IMAGELOADER
.load_png_str
;
190 normal_method("PALETTE", "set", "palette_set", gui
);
191 normal_method("PALETTE", "hash", "palette_hash", gui
);
192 normal_method("PALETTE", "debug", "palette_debug", gui
);
193 normal_method({"BITMAP", "DBITMAP"}, "pset", "bitmap_pset", gui
);
194 normal_method({"BITMAP", "DBITMAP"}, "pget", "bitmap_pget", gui
);
195 normal_method({"BITMAP", "DBITMAP"}, "size", "bitmap_size", gui
);
196 normal_method({"BITMAP", "DBITMAP"}, "hash", "bitmap_hash", gui
);
197 normal_method({"BITMAP", "DBITMAP"}, "blit", "bitmap_blit", gui
);
198 normal_method({"BITMAP", "DBITMAP"}, "blit_scaled", "bitmap_blit_scaled", gui
);
199 normal_method({"BITMAP", "DBITMAP"}, "blit_porterduff", "bitmap_blit_porterduff", gui
);
200 normal_method({"BITMAP", "DBITMAP"}, "blit_scaled_porterduff", "bitmap_blit_scaled_porterduff", gui
);
201 normal_method("BITMAP", "blit_priority", "bitmap_blit_priority", gui
);
202 normal_method("BITMAP", "blit_scaled_priority", "bitmap_blit_scaled_priority", gui
);
203 normal_method({"DBITMAP", "PALETTE"}, "adjust_transparency", "adjust_transparency", gui
);