ugBASIC 1.18
An isomorphic BASIC language compiler for retrocomputers
Loading...
Searching...
No Matches
put_image.c
Go to the documentation of this file.
1/*****************************************************************************
2 * ugBASIC - an isomorphic BASIC language compiler for retrocomputers *
3 *****************************************************************************
4 * Copyright 2021-2026 Marco Spedaletti (asimov@mclink.it)
5 *
6 * Licensed under the Apache License, Version 2.0 (the "License");
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
9 *
10 * http://www.apache.org/licenses/LICENSE-2.0
11 *
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
17 *----------------------------------------------------------------------------
18 * Concesso in licenza secondo i termini della Licenza Apache, versione 2.0
19 * (la "Licenza"); è proibito usare questo file se non in conformità alla
20 * Licenza. Una copia della Licenza è disponibile all'indirizzo:
21 *
22 * http://www.apache.org/licenses/LICENSE-2.0
23 *
24 * Se non richiesto dalla legislazione vigente o concordato per iscritto,
25 * il software distribuito nei termini della Licenza è distribuito
26 * "COSÌ COM'È", SENZA GARANZIE O CONDIZIONI DI ALCUN TIPO, esplicite o
27 * implicite. Consultare la Licenza per il testo specifico che regola le
28 * autorizzazioni e le limitazioni previste dalla medesima.
29 ****************************************************************************/
30
31/****************************************************************************
32 * INCLUDE SECTION
33 ****************************************************************************/
34
35#include "../../ugbc.h"
36
37/****************************************************************************
38 * CODE SECTION
39 ****************************************************************************/
40
41extern char DATATYPE_AS_STRING[][16];
42
53
54 void put_image_vars_original( Environment * _environment, char * _image, char * _x1, char * _y1, char * _x2, char * _y2, char * _frame, char * _sequence, char * _flags ) {
55
56 if ( _environment->emptyProcedure ) {
57 return;
58 }
59
61
62 Variable * image = variable_retrieve( _environment, _image );
63
64 Resource * resource = build_resource_for_sequence( _environment, _image, _frame, _sequence );
65
66 Variable * realFrame = NULL;
67 Variable * frame = NULL;
68 if ( _frame) {
69 frame = variable_retrieve_or_define( _environment, _frame, VT_BYTE, 0 );
70 realFrame = frame;
71 }
72 Variable * sequence = NULL;
73 if ( _sequence) {
74 sequence = variable_retrieve_or_define( _environment, _sequence, VT_BYTE, 0 );
75 realFrame = frame;
76 }
77
78 switch( resource->type ) {
79 case VT_SEQUENCE:
80 if ( image->bankAssigned != -1 ) {
81
82 char alreadyLoadedLabel[MAX_TEMPORARY_STORAGE];
83 sprintf(alreadyLoadedLabel, "%salready", label );
84
85 char bankWindowId[MAX_TEMPORARY_STORAGE];
86 sprintf( bankWindowId, "(BANKWINDOW%2.2x-2)", image->residentAssigned );
87
88 char bankWindowName[MAX_TEMPORARY_STORAGE];
89 sprintf( bankWindowName, "BANKWINDOW%2.2x", image->residentAssigned );
90
91 deploy_preferred( duff, src_hw_6809_duff_asm );
92 deploy_preferred( msc1, src_hw_6809_msc1_asm );
93 deploy_preferred( bank, src_hw_mo5_bank_asm );
94
95 // cpu_compare_and_branch_16bit_const( _environment, bankWindowId, image->variableUniqueId, alreadyLoadedLabel, 1 );
96 // if ( image->uncompressedSize ) {
97 // bank_uncompress_semi_var( _environment, image->bankAssigned, image->absoluteAddress, bankWindowName );
98 // } else {
99 // bank_read_semi_var( _environment, image->bankAssigned, image->absoluteAddress, bankWindowName, image->size );
100 // }
101 // cpu_store_16bit(_environment, bankWindowId, image->variableUniqueId );
102 // cpu_label( _environment, alreadyLoadedLabel );
103
104 // Variable * frameSize = variable_temporary( _environment, VT_WORD, "(temporary)");
105 // variable_store( _environment, frameSize->name, image->frameSize );
106 // Variable * bank = variable_temporary( _environment, VT_BYTE, "(temporary)");
107 // variable_store( _environment, bank->name, image->bankAssigned );
108 Variable * offset = variable_temporary( _environment, VT_ADDRESS, "(temporary)");
109
110 if ( !sequence ) {
111 if ( !frame ) {
112 ef936x_calculate_sequence_frame_offset(_environment, offset->realName, "", "", image->frameSize, image->frameCount );
113 } else {
114 ef936x_calculate_sequence_frame_offset(_environment, offset->realName, "", frame->realName, image->frameSize, image->frameCount );
115 }
116 } else {
117 if ( !frame ) {
118 ef936x_calculate_sequence_frame_offset(_environment, offset->realName, sequence->realName, "", image->frameSize, image->frameCount );
119 } else {
120 ef936x_calculate_sequence_frame_offset(_environment, offset->realName, sequence->realName, frame->realName, image->frameSize, image->frameCount );
121 }
122 }
123
124 // Variable * address = variable_temporary( _environment, VT_ADDRESS, "(temporary)");
125 // variable_store( _environment, address->name, image->absoluteAddress );
126 // variable_add_inplace_vars( _environment, address->name, offset->name );
127 // bank_read_vars_direct( _environment, bank->name, address->name, bankWindowName, frameSize->name );
128 cpu_math_add_16bit_const( _environment, offset->realName, image->absoluteAddress, offset->realName );
129
130 // bank_read_vars_bank_direct_size_vars( _environment, image->bankAssigned, offset->name, bankWindowName, image->frameSize );
131 outline1("LDY %s", offset->realName );
132 outline1("LDU #$%4.4x", image->frameSize );
133 if ( banks_get_default_resident( _environment, image->bankAssigned ) == image->residentAssigned ) {
134 outline1("JSR BANKREADBANK%2.2xXSDR", image->bankAssigned );
135 _environment->bankAccessOptimization.readn = 1;
136 } else {
137 outline1("LDX #%s", bankWindowName );
138 outline1("JSR BANKREADBANK%2.2xXS", image->bankAssigned );
139 _environment->bankAccessOptimization.readn = 1;
140 };
141
142 // Optimization: D = $FFFF at the end of any BANKREAD
143 outline1( "STD %s", bankWindowId );
144
145 Resource resource;
146 resource.realName = strdup( bankWindowName );
147 resource.isAddress = 0;
148
149 ef936x_put_image( _environment, &resource, _x1, _y1, NULL, NULL, image->frameSize, 0, _flags );
150
151 } else {
152 if ( !sequence ) {
153 if ( !frame ) {
154 ef936x_put_image( _environment, resource, _x1, _y1, "", "", image->frameSize, image->frameCount, _flags );
155 } else {
156 ef936x_put_image( _environment, resource, _x1, _y1, frame->name, "", image->frameSize, image->frameCount, _flags );
157 }
158 } else {
159 if ( !frame ) {
160 ef936x_put_image( _environment, resource, _x1, _y1, "", sequence->name, image->frameSize, image->frameCount, _flags );
161 } else {
162 ef936x_put_image( _environment, resource, _x1, _y1, frame->name, sequence->name, image->frameSize, image->frameCount, _flags );
163 }
164 }
165 }
166 break;
167 case VT_IMAGES:
168 if ( image->bankAssigned != -1 ) {
169
170 char alreadyLoadedLabel[MAX_TEMPORARY_STORAGE];
171 sprintf(alreadyLoadedLabel, "%salready", label );
172
173 char bankWindowId[MAX_TEMPORARY_STORAGE];
174 sprintf( bankWindowId, "BANKWINDOWID%2.2x", image->residentAssigned );
175
176 char bankWindowName[MAX_TEMPORARY_STORAGE];
177 sprintf( bankWindowName, "BANKWINDOW%2.2x", image->residentAssigned );
178
179 deploy_preferred( duff, src_hw_6809_duff_asm );
180 deploy_preferred( msc1, src_hw_6809_msc1_asm );
181 deploy_preferred( bank, src_hw_mo5_bank_asm );
182
183 // cpu_compare_and_branch_16bit_const( _environment, bankWindowId, image->variableUniqueId, alreadyLoadedLabel, 1 );
184 // if ( image->uncompressedSize ) {
185 // bank_uncompress_semi_var( _environment, image->bankAssigned, image->absoluteAddress, bankWindowName );
186 // } else {
187 // bank_read_semi_var( _environment, image->bankAssigned, image->absoluteAddress, bankWindowName, image->size );
188 // }
189 // cpu_store_16bit(_environment, bankWindowId, image->variableUniqueId );
190 // cpu_label( _environment, alreadyLoadedLabel );
191
192 // Variable * frameSize = variable_temporary( _environment, VT_WORD, "(temporary)");
193 // variable_store( _environment, frameSize->name, image->frameSize );
194 // Variable * bank = variable_temporary( _environment, VT_BYTE, "(temporary)");
195 // variable_store( _environment, bank->name, image->bankAssigned );
196 Variable * offset = variable_temporary( _environment, VT_ADDRESS, "(temporary)");
197
198 if ( sequence ) {
199 if ( image->strips ) {
200 realFrame = variable_temporary( _environment, VT_BYTE, "(real frame)" );
201 outline0("PSHS Y,D");
202 outline1("LDY #%sstrip", image->realName );
203 outline1("LDA %s", sequence->realName );
204 outline0("LSLA" );
205 outline0("LDY A, Y");
206 outline1("LDA %s", frame->realName );
207 outline0("LDB A, Y" );
208 outline1("STB %s", realFrame->realName );
209 outline0("PULS Y,D");
210 } else {
212 }
213 }
214
215 if ( !frame ) {
216 ef936x_calculate_sequence_frame_offset(_environment, offset->realName, NULL, "", image->frameSize, 0 );
217 } else {
218 ef936x_calculate_sequence_frame_offset(_environment, offset->realName, NULL, realFrame->realName, image->frameSize, 0 );
219 }
220
221 // Variable * address = variable_temporary( _environment, VT_ADDRESS, "(temporary)");
222 // variable_store( _environment, address->name, image->absoluteAddress );
223 // variable_add_inplace_vars( _environment, address->name, offset->name );
224 cpu_math_add_16bit_const( _environment, offset->realName, image->absoluteAddress, offset->realName );
225
226 // bank_read_vars_bank_direct_size_vars( _environment, image->bankAssigned, offset->name, bankWindowName, image->frameSize );
227 outline1("LDY %s", offset->realName );
228 outline1("LDU #$%4.4x", image->frameSize );
229 if ( banks_get_default_resident( _environment, image->bankAssigned ) == image->residentAssigned ) {
230 outline1("JSR BANKREADBANK%2.2xXSDR", image->bankAssigned );
231 _environment->bankAccessOptimization.readn = 1;
232 } else {
233 outline1("LDX #%s", bankWindowName );
234 outline1("JSR BANKREADBANK%2.2xXS", image->bankAssigned );
235 _environment->bankAccessOptimization.readn = 1;
236 };
237
238 // Optimization: D = $FFFF at the end of any BANKREAD
239 outline1( "STD %s", bankWindowId );
240
241 Resource resource;
242 resource.realName = strdup( bankWindowName );
243 resource.isAddress = 0;
244
245 ef936x_put_image( _environment, &resource, _x1, _y1, NULL, NULL, image->frameSize, 0, _flags );
246
247 } else {
248
249 if ( sequence ) {
250 if ( image->strips ) {
251 realFrame = variable_temporary( _environment, VT_BYTE, "(real frame)" );
252 outline0("PSHS Y,D");
253 outline1("LDY #%sstrip", image->realName );
254 outline1("LDA %s", sequence->realName );
255 outline0("LSLA" );
256 outline0("LDY A, Y");
257 outline1("LDA %s", frame->realName );
258 outline0("LDB A, Y" );
259 outline1("STB %s", realFrame->realName );
260 outline0("PULS Y,D");
261 } else {
263 }
264 }
265
266 if ( !frame ) {
267 ef936x_put_image( _environment, resource, _x1, _y1, "", NULL, image->frameSize, 0, _flags );
268 } else {
269 ef936x_put_image( _environment, resource, _x1, _y1, frame->name, NULL, image->frameSize, 0, _flags );
270 }
271 }
272 break;
273 case VT_IMAGE:
274 case VT_TARRAY:
275 if ( image->bankAssigned != -1 ) {
276
277 char alreadyLoadedLabel[MAX_TEMPORARY_STORAGE];
278 sprintf(alreadyLoadedLabel, "%salready", label );
279
280 char bankWindowId[MAX_TEMPORARY_STORAGE];
281 sprintf( bankWindowId, "BANKWINDOWID%2.2x", image->residentAssigned );
282
283 char bankWindowName[MAX_TEMPORARY_STORAGE];
284 sprintf( bankWindowName, "BANKWINDOW%2.2x", image->residentAssigned );
285
286 deploy_preferred( duff, src_hw_6809_duff_asm );
287 deploy_preferred( msc1, src_hw_6809_msc1_asm );
288 deploy_preferred( bank, src_hw_mo5_bank_asm );
289
290 cpu_compare_and_branch_16bit_const( _environment, bankWindowId, image->variableUniqueId, alreadyLoadedLabel, 1 );
291 if ( image->uncompressedSize ) {
292 bank_uncompress_semi_var( _environment, image->bankAssigned, image->absoluteAddress, bankWindowName );
293 } else {
294 bank_read_semi_var( _environment, image->bankAssigned, image->absoluteAddress, bankWindowName, image->size );
295 }
296 cpu_store_16bit(_environment, bankWindowId, image->variableUniqueId );
297 cpu_label( _environment, alreadyLoadedLabel );
298
299 Resource resource;
300 resource.realName = strdup( bankWindowName );
301 resource.isAddress = 0;
302
303 ef936x_put_image( _environment, &resource, _x1, _y1, NULL, NULL, 1, 0, _flags );
304 } else {
305 ef936x_put_image( _environment, resource, _x1, _y1, NULL, NULL, 1, 0, _flags );
306 }
307 break;
308 default:
310 }
311
312
313}
314
315void put_image_vars_imageref( Environment * _environment, char * _image, char * _x1, char * _y1, char * _x2, char * _y2, char * _frame, char * _sequence, char * _flags ) {
316
318
319 char labelNoBank[MAX_TEMPORARY_STORAGE]; sprintf( labelNoBank, "%snobank", label );
320 char labelNoBankCompressed[MAX_TEMPORARY_STORAGE]; sprintf( labelNoBankCompressed, "%snocompressed", label );
321 char labelDecompressionDone[MAX_TEMPORARY_STORAGE]; sprintf( labelDecompressionDone, "%sdecompression", label );
322 char labelDone[MAX_TEMPORARY_STORAGE]; sprintf( labelDone, "%sdone", label );
323
324 Variable * image = variable_retrieve( _environment, _image );
325
326 Variable * frame = NULL;
327 if ( _frame) {
328 frame = variable_retrieve_or_define( _environment, _frame, VT_BYTE, 0 );
329 }
330 Variable * sequence = NULL;
331 if ( _sequence) {
332 sequence = variable_retrieve_or_define( _environment, _sequence, VT_BYTE, 0 );
333 }
334
335 // Y = OFFSET
336
337 if ( _sequence ) {
338 outline0("LDY #$3" );
339 if ( strlen(_sequence) == 0 ) {
340 } else {
341 outline1("LDB %s", sequence->realName );
342 outline1("JSR [%s+10]", image->realName );
343 }
344 if ( _frame ) {
345 if ( strlen(_frame) == 0 ) {
346 } else {
347 outline1("LDB %s", frame->realName );
348 outline1("JSR [%s+8]", image->realName );
349 }
350 }
351 } else {
352 if ( _frame ) {
353 outline0("LDY #$3" );
354 if ( strlen(_frame) == 0 ) {
355 } else {
356 outline1("LDB %s", frame->realName );
357 outline1("JSR [%s+8]", image->realName );
358 }
359 } else {
360 outline0("LDY #$0" );
361 }
362 }
363
364 // Y = BASE + OFFSET
365 outline0( "TFR Y, D" );
366 outline1( "ADDD %s", image->realName );
367 outline0( "TFR D, Y" );
368
369 // Bank assigned?
370 outline1( "LDA %s+5", image->realName );
371 outline0( "ANDA #$04" );
372 outline1( "BEQ %s", labelNoBank );
373
374 // Image compressed?
375 outline1( "LDA %s+5", image->realName );
376 outline0( "ANDA #$40" );
377 outline1( "BEQ %s", labelNoBankCompressed );
378
379 // ; U : number of bank
380 // ; Y : address on bank
381 // ; D : size to read
382 // ; X : address on memory
383
384 deploy_preferred( duff, src_hw_6809_duff_asm );
385 deploy_preferred( msc1, src_hw_6809_msc1_asm );
386 deploy_preferred( bank, src_hw_mo5_bank_asm );
387
388 outline1("LDB %s+4", image->realName );
389 outline0("CLRA" );
390 outline0("TFR D, U" );
391 outline0("TFR Y, X" );
392 outline1("LDY %s+6", image->realName );
393 outline0("JSR BANKUNCOMPRESS");
394 _environment->bankAccessOptimization.readn = 1;
395
396 cpu_jump( _environment, labelDecompressionDone );
397
398 cpu_label( _environment, labelNoBankCompressed );
399
400 outline1("LDB %s+4", image->realName );
401 outline1("LDX %s+6", image->realName );
402 outline1("LDU %s+2", image->realName );
403 outline0("JSR BANKREAD");
404 _environment->bankAccessOptimization.readn = 1;
405
406 cpu_label( _environment, labelDecompressionDone );
407
408 Variable * address = variable_temporary( _environment, VT_ADDRESS, "(stub)" );
409
410 if ( !_environment->putImageRefUnsafe ) {
411 outline1("LDA %s", address_displacement( _environment, image->realName, "5") );
412 outline1("LBEQ %sskip", label );
413 }
414
415 outline1("LDY %s+6", image->realName );
416 outline1("STY %s", address->realName );
417 outline0("LEAY -2, Y");
418 outline0("LDD #$FFFF");
419 outline0("STD , Y");
420 outline0("LEAY 2, Y");
421
422 Resource resource;
423 resource.realName = strdup( address->realName );
424 resource.isAddress = 1;
425
426 ef936x_put_image( _environment, &resource, _x1, _y1, NULL, NULL, 0, 0, _flags );
427
428 cpu_jump( _environment, labelDone );
429
430 cpu_label( _environment, labelNoBank );
431
432 outline1("STY %s", address->realName );
433
434 resource.realName = strdup( address->realName );
435 resource.isAddress = 1;
436
437 ef936x_put_image( _environment, &resource, _x1, _y1, NULL, NULL, 0, 0, _flags );
438
439 cpu_label( _environment, labelDone );
440
441 if ( !_environment->putImageRefUnsafe ) {
442 outhead1("%sskip", label );
443 }
444
445}
446
447void put_image_vars( Environment * _environment, char * _image, char * _x1, char * _y1, char * _x2, char * _y2, char * _frame, char * _sequence, char * _flags ) {
448
449 if ( _environment->emptyProcedure ) {
450 return;
451 }
452
453 Variable * image = variable_retrieve( _environment, _image );
454
455 switch( image->type ) {
456 case VT_IMAGE:
457 case VT_IMAGES:
458 case VT_SEQUENCE:
459 case VT_ADDRESS:
460 put_image_vars_original( _environment, _image, _x1, _y1, _x2, _y2, _frame, _sequence, _flags );
461 break;
462 case VT_IMAGEREF:
463 put_image_vars_imageref( _environment, _image, _x1, _y1, _x2, _y2, _frame, _sequence, _flags );
464 break;
465 default:
467 }
468
469}
470
471void put_image_vars_flags( Environment * _environment, char * _image, char * _x1, char * _y1, char * _x2, char * _y2, char * _frame, char * _sequence, int _flags ) {
472
473 _flags = _flags & ( ( FLAG_DOUBLE_Y << 8 ) | FLAG_TRANSPARENCY );
474
475 char flagsConstantName[MAX_TEMPORARY_STORAGE]; sprintf( flagsConstantName, "PUTIMAGEFLAGS%4.4x", _flags );
476 char flagsConstantParameter[MAX_TEMPORARY_STORAGE]; sprintf( flagsConstantParameter, "#PUTIMAGEFLAGS%4.4x", _flags );
477
478 Constant * flagsConstant = constant_find( _environment, flagsConstantName );
479
480 if ( !flagsConstant ) {
481 flagsConstant = malloc( sizeof( Constant ) );
482 memset( flagsConstant, 0, sizeof( Constant ) );
483 flagsConstant->name = strdup( flagsConstantName );
484 flagsConstant->realName = strdup( flagsConstantName );
485 flagsConstant->value = _flags;
486 flagsConstant->type = CT_INTEGER;
487 flagsConstant->next = _environment->constants;
488 _environment->constants = flagsConstant;
489 }
490
491 put_image_vars( _environment, _image, _x1, _y1, _x2, _y2, _frame, _sequence, flagsConstantParameter );
492}
493
void cpu_store_16bit(Environment *_environment, char *_destination, int _value)
CPU 6309: emit code to store 16 bit
Definition 6309.c:1503
void cpu_math_add_16bit_const(Environment *_environment, char *_source, int _destination, char *_other)
Definition 6309.c:1674
void cpu_compare_and_branch_16bit_const(Environment *_environment, char *_source, int _destination, char *_label, int _positive)
CPU 6309: emit code to compare two 8 bit values and jump if they are equal/different
Definition 6309.c:1578
void cpu_label(Environment *_environment, char *_label)
Definition 6309.c:356
void cpu_jump(Environment *_environment, char *_label)
Definition 6309.c:3739
Variable * variable_retrieve(Environment *_environment, char *_name)
Variable * variable_retrieve_or_define(Environment *_environment, char *_name, VariableType _type, int _value)
Resource * build_resource_for_sequence(Environment *_environment, char *_image, char *_frame, char *_sequence)
Variable * variable_temporary(Environment *_environment, VariableType _type, char *_meaning)
Define a temporary variable.
char * address_displacement(Environment *_environment, char *_address, char *_displacement)
Constant * constant_find(Environment *_environment, char *_name)
int offset
Definition _optimizer.c:681
void put_image_vars_original(Environment *_environment, char *_image, char *_x1, char *_y1, char *_x2, char *_y2, char *_frame, char *_sequence, char *_flags)
Emit ASM code for PUT IMAGE [image] AT [int],[int].
Definition put_image.c:53
void put_image_vars_imageref(Environment *_environment, char *_image, char *_x1, char *_y1, char *_x2, char *_y2, char *_frame, char *_sequence, char *_flags)
Definition put_image.c:289
void put_image_vars_flags(Environment *_environment, char *_image, char *_x1, char *_y1, char *_x2, char *_y2, char *_frame, char *_sequence, int _flags)
Definition put_image.c:430
void put_image_vars(Environment *_environment, char *_image, char *_x1, char *_y1, char *_x2, char *_y2, char *_frame, char *_sequence, char *_flags)
Definition put_image.c:406
void bank_read_semi_var(Environment *_environment, int _bank, int _address1, char *_address2, int _size)
Emit ASM code for instruction BANK READ ....
Definition bank_read.c:50
void bank_uncompress_semi_var(Environment *_environment, int _bank, int _address1, char *_address2)
Emit ASM code for instruction BANK UNCOMPRESS ....
int banks_get_default_resident(Environment *_environment, int _bank)
Definition _banks.c:107
void ef936x_put_image(Environment *_environment, Resource *_image, char *_x, char *_y, char *_frame, char *_sequence, int _frame_size, int _frame_count, char *_flags)
Definition ef936x.c:1920
void ef936x_calculate_sequence_frame_offset(Environment *_environment, char *_offset, char *_sequence, char *_frame, int _frame_size, int _frame_count)
Definition ef936x.c:2285
char * name
Definition ugbc.h:800
int value
Definition ugbc.h:815
ConstantType type
Definition ugbc.h:805
struct _Constant * next
Definition ugbc.h:832
char * realName
Definition ugbc.h:803
BankAccessOptimization bankAccessOptimization
Definition ugbc.h:3269
int putImageRefUnsafe
Definition ugbc.h:3271
Constant * constants
Definition ugbc.h:2611
int emptyProcedure
Definition ugbc.h:2932
int isAddress
Definition ugbc.h:557
VariableType type
Definition ugbc.h:559
char * realName
Definition ugbc.h:555
char * name
Definition ugbc.h:979
VariableType type
Definition ugbc.h:988
char * realName
Definition ugbc.h:982
void * malloc(YYSIZE_T)
struct _Resource Resource
#define MAX_TEMPORARY_STORAGE
Definition ugbc.h:563
#define FLAG_TRANSPARENCY
Definition ugbc.h:4567
@ CT_INTEGER
Definition ugbc.h:788
struct _Variable Variable
Structure of a single variable.
struct _Environment Environment
Structure of compilation environment.
@ VT_TARRAY
Definition ugbc.h:480
@ VT_BYTE
Definition ugbc.h:450
@ VT_IMAGEREF
Definition ugbc.h:537
@ VT_IMAGES
Definition ugbc.h:495
@ VT_ADDRESS
Definition ugbc.h:465
@ VT_IMAGE
Definition ugbc.h:489
@ VT_SEQUENCE
Definition ugbc.h:513
#define deploy_preferred(s, e)
Definition ugbc.h:4299
struct _Constant Constant
Structure of a single constant.
#define CRITICAL_CANNOT_PUT_IMAGE_WITHOUT_STRIP(s)
Definition ugbc.h:3855
#define outline0(s)
Definition ugbc.h:4252
#define CRITICAL_PUT_IMAGE_UNSUPPORTED(v, t)
Definition ugbc.h:3532
#define outline1(s, a)
Definition ugbc.h:4253
#define FLAG_DOUBLE_Y
Definition ugbc.h:4568
#define MAKE_LABEL
Definition ugbc.h:3351
#define outhead1(s, a)
Definition ugbc.h:4247
char DATATYPE_AS_STRING[][16]