ugBASIC 1.18
An isomorphic BASIC language compiler for retrocomputers
Loading...
Searching...
No Matches
_build.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#include <errno.h>
38#include <sys/stat.h>
39#include <sys/types.h>
40
41/****************************************************************************
42 * CODE SECTION
43 ****************************************************************************/
44
45extern char OUTPUT_FILE_TYPE_AS_STRING[][16];
46
47// This version of target linkage should be used in presence of an unpatched
48// z88dk, like the one we have actually on 1.15.2 and below. Note that this
49// version is unable to manage STORAGE keyword -- so we must stop if this keyword
50// is used.
52
53 if ( _environment->storage ) {
55 }
56
57 char commandLine[8*MAX_TEMPORARY_STORAGE];
58 char executableName[MAX_TEMPORARY_STORAGE];
59 char binaryName[MAX_TEMPORARY_STORAGE];
60 char diskName[MAX_TEMPORARY_STORAGE];
61 char listingFileName[MAX_TEMPORARY_STORAGE];
62 char binaryName2[MAX_TEMPORARY_STORAGE];
63
65
66 BUILD_SAFE_REMOVE( _environment, _environment->exeFileName );
67
68 BUILD_TOOLCHAIN_Z88DK_GET_EXECUTABLE_Z80ASM( _environment, executableName );
69
70 BUILD_TOOLCHAIN_Z88DK_GET_LISTING_FILE( _environment, listingFileName );
71
72 BUILD_TOOLCHAIN_Z88DK_EXEC( _environment, "cpc", executableName, listingFileName, "z80" );
73
74 char * p;
75
76 if ( _environment->listingFileName ) {
77 strcopy( binaryName, _environment->asmFileName );
78 p = strstr( binaryName, ".asm" );
79 if ( p ) {
80 *(p+1) = 'l';
81 *(p+2) = 'i';
82 *(p+3) = 's';
83 *(p+4) = 0;
84 }
85 TRACE2( " renaming %s to %s", binaryName, _environment->listingFileName );
86 BUILD_SAFE_MOVE( _environment, binaryName, _environment->listingFileName );
87 }
88
89 strcopy( binaryName, _environment->asmFileName );
90 p = strstr( binaryName, ".asm" );
91 if ( p ) {
92 *(p+1) = 'o';
93 *(p+2) = 0;
94 }
95 system_remove_safe( _environment, binaryName );
96
97 BUILD_TOOLCHAIN_Z88DK_GET_EXECUTABLE_APPMAKE( _environment, executableName );
98
99 char pipes[256];
100
101 #ifdef _WIN32
102 strcopy( pipes, ">nul 2>nul");
103 #else
104 strcopy( pipes, ">/dev/null 2>/dev/null");
105 #endif
106
107 strcopy( binaryName, _environment->asmFileName );
108 p = strstr( binaryName, ".asm" );
109 if ( p ) {
110 *(p+1) = 'b';
111 *(p+2) = 'i';
112 *(p+3) = 'n';
113 *(p+4) = 0;
114 }
115
116 strcopy( binaryName2, _environment->asmFileName );
117 p = strrchr( binaryName2, '/' );
118 if ( !p ) {
119 p = strrchr( binaryName2, '\\' );
120 }
121 if ( p ) {
122 strcopy( p+1, "main.bin" );
123 } else {
124 strcopy( binaryName2, "main.bin" );
125 }
126
127 strcopy( binaryName, _environment->asmFileName );
128 p = strstr( binaryName, ".asm" );
129 if ( p ) {
130 *(p+1) = 'b';
131 *(p+2) = 'i';
132 *(p+3) = 'n';
133 *(p+4) = 0;
134 }
135
136 system_remove_safe( _environment, binaryName2 );
137
138 TRACE2( " renaming %s to %s", binaryName, binaryName2 );
139
140 BUILD_SAFE_MOVE( _environment, binaryName, binaryName2 );
141
142 strcopy( binaryName, _environment->asmFileName );
143 p = strrchr( binaryName, '/' );
144 if ( !p ) {
145 p = strrchr( binaryName, '\\' );
146 }
147 if ( p ) {
148 strcopy( p+1, "main.bin" );
149 } else {
150 strcopy( binaryName, "main.bin" );
151 }
152
153 system_remove_safe( _environment, _environment->exeFileName );
154
155 strcopy( diskName, _environment->exeFileName );
156 p = strrchr( diskName, '/' );
157 if ( !p ) {
158 p = strrchr( diskName, '\\' );
159 }
160 if ( p ) {
161 strcopy( p+1, "main." );
162 } else {
163 strcopy( diskName, "main." );
164 }
165
166 TRACE1( "exeFileName = %s", _environment->exeFileName );
167 TRACE1( "diskName = %s", diskName );
168
169 sprintf( commandLine, "\"%s\" +cpc --org %d --exec %d --disk -b \"%s\" -o \"%s\" %s",
170 executableName,
171 _environment->program.startingAddress,
172 _environment->program.startingAddress,
173 binaryName,
174 diskName,
175 pipes );
176
177 if ( system_call( _environment, commandLine ) ) {
178 printf("The compilation of assembly program failed.\n\n");
179 printf("Please use option '-I' to install chain tool.\n\n");
180 return;
181 };
182
183 system_remove_safe( _environment, diskName );
184
185 strcopy( diskName, _environment->asmFileName );
186 p = strrchr( diskName, '/' );
187 if ( !p ) {
188 p = strrchr( diskName, '\\' );
189 }
190 if ( p ) {
191 strcopy( p+1, "main.dsk" );
192 } else {
193 strcopy( diskName, "main.dsk" );
194 }
195
196 BUILD_SAFE_MOVE( _environment, diskName, _environment->exeFileName );
197
198 strcopy( binaryName, _environment->asmFileName );
199 p = strstr( binaryName, ".asm" );
200 if ( p ) {
201 strcopy( p, ".");
202 } else {
203 strcopy( binaryName, "main." );
204 }
205
206 system_remove_safe( _environment, binaryName );
207
208}
209
211
212 Storage * storage = _environment->storage;
213
214 char temporaryPath[MAX_TEMPORARY_STORAGE];
215 strcopy( temporaryPath, _environment->temporaryPath );
216 strcat( temporaryPath, " " );
217 temporaryPath[strlen(temporaryPath)-1] = PATH_SEPARATOR;
218 strcat( temporaryPath, "dsk" );
219#ifdef _WIN32
220 mkdir( temporaryPath );
221#else
222 mkdir( temporaryPath, 0777 );
223#endif
224 strcat( temporaryPath, " " );
225 temporaryPath[strlen(temporaryPath)-1] = PATH_SEPARATOR;
226
227 char commandLine[8*MAX_TEMPORARY_STORAGE];
228 char executableName[MAX_TEMPORARY_STORAGE];
229 char binaryName[MAX_TEMPORARY_STORAGE];
230 char diskName[MAX_TEMPORARY_STORAGE];
231 char listingFileName[MAX_TEMPORARY_STORAGE];
232 char binaryName2[MAX_TEMPORARY_STORAGE];
233
235
236 BUILD_SAFE_REMOVE( _environment, _environment->exeFileName );
237
238 BUILD_TOOLCHAIN_Z88DK_GET_EXECUTABLE_Z80ASM( _environment, executableName );
239
240 BUILD_TOOLCHAIN_Z88DK_GET_LISTING_FILE( _environment, listingFileName );
241
242 BUILD_TOOLCHAIN_Z88DK_EXEC( _environment, "cpc", executableName, listingFileName, "z80" );
243
244 char * p;
245
246 if ( _environment->listingFileName ) {
247 strcopy( binaryName, _environment->asmFileName );
248 p = strstr( binaryName, ".asm" );
249 if ( p ) {
250 *(p+1) = 'l';
251 *(p+2) = 'i';
252 *(p+3) = 's';
253 *(p+4) = 0;
254 }
255 TRACE2( " renaming %s to %s", binaryName, _environment->listingFileName );
256 BUILD_SAFE_MOVE( _environment, binaryName, _environment->listingFileName );
257 }
258
259 strcopy( binaryName, _environment->asmFileName );
260 p = strstr( binaryName, ".asm" );
261 if ( p ) {
262 *(p+1) = 'o';
263 *(p+2) = 0;
264 }
265 system_remove_safe( _environment, binaryName );
266
267 BUILD_TOOLCHAIN_Z88DK_GET_EXECUTABLE_APPMAKE( _environment, executableName );
268
269 char pipes[256];
270
271 #ifdef _WIN32
272 strcopy( pipes, ">nul 2>nul");
273 #else
274 strcopy( pipes, ">/dev/null 2>/dev/null");
275 #endif
276
277 strcopy( binaryName, _environment->asmFileName );
278 p = strstr( binaryName, ".asm" );
279 if ( p ) {
280 *(p+1) = 'b';
281 *(p+2) = 'i';
282 *(p+3) = 'n';
283 *(p+4) = 0;
284 }
285
286 strcopy( binaryName2, _environment->asmFileName );
287 p = strrchr( binaryName2, '/' );
288 if ( !p ) {
289 p = strrchr( binaryName2, '\\' );
290 }
291 if ( p ) {
292 strcopy( p+1, "main.bin" );
293 } else {
294 strcopy( binaryName2, "main.bin" );
295 }
296
297 strcopy( binaryName, _environment->asmFileName );
298 p = strstr( binaryName, ".asm" );
299 if ( p ) {
300 *(p+1) = 'b';
301 *(p+2) = 'i';
302 *(p+3) = 'n';
303 *(p+4) = 0;
304 }
305
306 system_remove_safe( _environment, binaryName2 );
307
308 TRACE2( " renaming %s to %s", binaryName, binaryName2 );
309
310 BUILD_SAFE_MOVE( _environment, binaryName, binaryName2 );
311
312 strcopy( binaryName, _environment->asmFileName );
313 p = strrchr( binaryName, '/' );
314 if ( !p ) {
315 p = strrchr( binaryName, '\\' );
316 }
317 if ( p ) {
318 strcopy( p+1, "main.bin" );
319 } else {
320 strcopy( binaryName, "main.bin" );
321 }
322
323 system_remove_safe( _environment, _environment->exeFileName );
324
325 char buffer[MAX_TEMPORARY_STORAGE];
326 if ( storage ) {
327 char filemask[MAX_TEMPORARY_STORAGE];
328 strcopy( filemask, _environment->exeFileName );
329 char * basePath = find_last_path_separator( filemask );
330 if ( basePath ) {
331 ++basePath;
332 *basePath = 0;
333 if ( storage->fileName ) {
334 strcat( basePath, storage->fileName );
335 } else {
336 strcat( basePath, "disk%d.dsk" );
337 }
338 } else {
339 if ( storage->fileName ) {
340 strcopy( filemask, storage->fileName );
341 } else {
342 strcopy( filemask, "disk%d.dsk" );
343 }
344 }
345 sprintf( diskName, filemask, 0 );
346 // if ( !strstr( diskName, ".dsk" ) ) {
347 // strcat( diskName, ".dsk" );
348 // }
349 if ( !strstr( diskName, ".dsk" ) ) {
350 strcat( diskName, ".dsk" );
351 }
352 } else {
353 strcopy( diskName, _environment->exeFileName );
354 if ( !strstr( diskName, ".dsk") ) {
355 strcat( diskName, ".dsk" );
356 }
357 }
358
359 TRACE1( "exeFileName = %s", _environment->exeFileName );
360 TRACE1( "diskName = %s", diskName );
361
362 if ( !storage ) {
363
364 sprintf( commandLine, "\"%s\" +cpc --org %d --exec %d --disk --blockname \"%s\" -b \"%s\" -o \"%s\" %s",
365 executableName,
366 _environment->program.startingAddress,
367 _environment->program.startingAddress,
368 basename(binaryName),
369 binaryName,
370 diskName,
371 pipes );
372
373 if ( system_call( _environment, commandLine ) ) {
374 printf("The compilation of assembly program failed.\n\n");
375 printf("Please use option '-I' to install chain tool.\n\n");
376 return;
377 };
378
379 BUILD_SAFE_MOVE( _environment, diskName, _environment->exeFileName );
380 if ( _environment->outputGeneratedFiles ) {
381 printf( "%s\n", _environment->exeFileName );
382 }
383 } else {
384 int i=0;
385 char * additionalFiles = NULL;
386 while( storage ) {
387 additionalFiles = NULL;
388 FileStorage * fileStorage = storage->files;
389 while( fileStorage ) {
390 int size;
391 char * buffer;
392
393 if ( fileStorage->content && fileStorage->size ) {
394 size = fileStorage->size + 2;
395 buffer = malloc( size );
396 memset( buffer, 0, size );
397 memcpy( buffer, fileStorage->content, fileStorage->size );
398 } else {
399 FILE * file = fopen( fileStorage->sourceName, "rb" );
400 if ( !file ) {
402 }
403 fseek( file, 0, SEEK_END );
404 size = ftell( file );
405 fseek( file, 0, SEEK_SET );
406 buffer = malloc( size );
407 memset( buffer, 0, size );
408 (void)!fread( buffer, size, 1, file );
409 fclose( file );
410 }
411 char dataFilename[MAX_TEMPORARY_STORAGE];
412 sprintf( dataFilename, "%s%s", temporaryPath, fileStorage->targetName );
413 FILE * fileOut = fopen( dataFilename, "wb" );
414 if ( fileOut ) {
415 fwrite( buffer, 1, size, fileOut );
416 fclose(fileOut );
417 }
418 if ( additionalFiles ) {
419 additionalFiles = realloc( additionalFiles, strlen(additionalFiles) + strlen( dataFilename ) + 3 );
420 strcat( additionalFiles, "," );
421 strcat( additionalFiles, dataFilename );
422 } else {
423 additionalFiles = strdup( dataFilename );
424 }
425 fileStorage = fileStorage->next;
426 }
427
428 sprintf( commandLine, "\"%s\" +cpc --afile %s --org %d --exec %d --disk --blockname \"%s\" -b \"%s\" -o \"%s\" %s",
429 executableName,
430 additionalFiles,
431 _environment->program.startingAddress,
432 _environment->program.startingAddress,
433 basename( binaryName ),
434 binaryName,
435 diskName,
436 pipes );
437
438 if ( system_call( _environment, commandLine ) ) {
439 printf("The compilation of assembly program failed.\n\n");
440 printf("Please use option '-I' to install chain tool.\n\n");
441 return;
442 };
443
444 storage = storage->next;
445 ++i;
446
447 if ( _environment->outputGeneratedFiles ) {
448 printf( "%s\n", diskName );
449 }
450
451 if ( storage ) {
452 char buffer[MAX_TEMPORARY_STORAGE];
453 char filemask[MAX_TEMPORARY_STORAGE];
454 strcopy( filemask, _environment->exeFileName );
455 char * basePath = find_last_path_separator( filemask );
456 if ( basePath ) {
457 ++basePath;
458 *basePath = 0;
459 if ( storage->fileName ) {
460 strcat( basePath, storage->fileName );
461 } else {
462 strcat( basePath, "disk%d.dsk" );
463 }
464 } else {
465 if ( storage->fileName ) {
466 strcopy( filemask, storage->fileName );
467 } else {
468 strcopy( filemask, "disk%d.dsk" );
469 }
470 }
471 sprintf( diskName, filemask, i );
472 if ( !strstr( diskName, ".dsk" ) ) {
473 strcat( diskName, ".dsk" );
474 }
475
476 #ifdef _WIN32
477 sprintf( commandLine, "del /f /q %s*.* %s", temporaryPath, pipes );
478 #else
479 sprintf( commandLine, "rm %s* %s", temporaryPath, pipes );
480 #endif
481 // system_call( _environment, commandLine );
482
483 }
484
485 }
486 }
487
488 // strcopy( diskName, _environment->asmFileName );
489 // p = strrchr( diskName, '/' );
490 // if ( !p ) {
491 // p = strrchr( diskName, '\\' );
492 // }
493 // if ( p ) {
494 // strcopy( p+1, "main.dsk" );
495 // } else {
496 // strcopy( diskName, "main.dsk" );
497 // }
498
499
500 // strcopy( binaryName, _environment->asmFileName );
501 // p = strstr( binaryName, ".asm" );
502 // if ( p ) {
503 // strcopy( p, ".");
504 // } else {
505 // strcopy( binaryName, "main." );
506 // }
507
508 // system_remove_safe( _environment, binaryName );
509
510}
511
512static void generate_bin( Environment * _environment ) {
513
514 Storage * storage = _environment->storage;
515
516 char temporaryPath[MAX_TEMPORARY_STORAGE];
517 strcopy( temporaryPath, _environment->temporaryPath );
518 strcat( temporaryPath, " " );
519 temporaryPath[strlen(temporaryPath)-1] = PATH_SEPARATOR;
520 strcat( temporaryPath, "dsk" );
521#ifdef _WIN32
522 mkdir( temporaryPath );
523#else
524 mkdir( temporaryPath, 0777 );
525#endif
526 strcat( temporaryPath, " " );
527 temporaryPath[strlen(temporaryPath)-1] = PATH_SEPARATOR;
528
529 char commandLine[8*MAX_TEMPORARY_STORAGE];
530 char executableName[MAX_TEMPORARY_STORAGE];
531 char binaryName[MAX_TEMPORARY_STORAGE];
532 char diskName[MAX_TEMPORARY_STORAGE];
533 char listingFileName[MAX_TEMPORARY_STORAGE];
534 char binaryName2[MAX_TEMPORARY_STORAGE];
535
537
538 BUILD_SAFE_REMOVE( _environment, _environment->exeFileName );
539
540 BUILD_TOOLCHAIN_Z88DK_GET_EXECUTABLE_Z80ASM( _environment, executableName );
541
542 BUILD_TOOLCHAIN_Z88DK_GET_LISTING_FILE( _environment, listingFileName );
543
544 BUILD_TOOLCHAIN_Z88DK_EXEC( _environment, "cpc", executableName, listingFileName, "z80" );
545
546 char * p;
547
548 if ( _environment->listingFileName ) {
549 strcopy( binaryName, _environment->asmFileName );
550 p = strstr( binaryName, ".asm" );
551 if ( p ) {
552 *(p+1) = 'l';
553 *(p+2) = 'i';
554 *(p+3) = 's';
555 *(p+4) = 0;
556 }
557 TRACE2( " renaming %s to %s", binaryName, _environment->listingFileName );
558 BUILD_SAFE_MOVE( _environment, binaryName, _environment->listingFileName );
559 }
560
561 strcopy( binaryName, _environment->asmFileName );
562 p = strstr( binaryName, ".asm" );
563 if ( p ) {
564 *(p+1) = 'o';
565 *(p+2) = 0;
566 }
567 system_remove_safe( _environment, binaryName );
568
569 strcopy( binaryName, _environment->asmFileName );
570 p = strstr( binaryName, ".asm" );
571 if ( p ) {
572 *(p+1) = 'b';
573 *(p+2) = 'i';
574 *(p+3) = 'n';
575 *(p+43) = 0;
576 }
577 BUILD_SAFE_MOVE( _environment, binaryName, _environment->exeFileName );
578
579}
580
581static void generate_dsk( Environment * _environment ) {
582
583 char commandLine[2*MAX_TEMPORARY_STORAGE];
584 char executableName[MAX_TEMPORARY_STORAGE];
586 BUILD_TOOLCHAIN_Z88DK_GET_EXECUTABLE_APPMAKE( _environment, executableName );
587
588 char pipes[256];
589
590 #ifdef _WIN32
591 strcopy( pipes, "2>nul");
592 #else
593 strcopy( pipes, "2>/dev/null");
594 #endif
595
596 sprintf( commandLine, "\"%s\" +cpc %s", executableName, pipes );
597
598 FILE * fp = popen (commandLine, "r" );
599 if ( fp ) {
600 (void)!fgets( version, MAX_ARRAY_DIMENSIONS, fp );
601 pclose(fp);
602
603 if ( strstr( version, "bin2cpc-ugbasic") != NULL ) {
605 } else {
607 }
608 }
609
610}
611
612void target_linkage( Environment * _environment ) {
613
614 switch( _environment->outputFileType ) {
616 generate_bin( _environment );
617 break;
619 generate_dsk( _environment );
620 break;
621 default:
623 }
624
625}
626
627void target_cleanup( Environment * _environment ) {
628
629 if ( _environment->exeFileName ) {
630 char binFileName[MAX_TEMPORARY_STORAGE];
631
632 if ( _environment->outputFileType != OUTPUT_FILE_TYPE_BIN ) {
633 strcopy( binFileName, _environment->exeFileName );
634 char * p = strrchr( binFileName, '.' );
635 memcpy( p, ".bin", 4 );
636 remove( binFileName );
637 }
638
639 remove( _environment->asmFileName );
640
641 if ( _environment->analysis && _environment->listingFileName ) {
642 target_analysis( _environment );
643 }
644
645 }
646
647}
int system_call(Environment *_environment, char *_commandline)
Call an external executable.
char * find_last_path_separator(char *_path)
char * basename(char *_path)
int system_remove_safe(Environment *_environment, char *_filename)
void target_linkage(Environment *_environment)
Convert C64's assembly to executable.
Definition _build.c:327
void target_cleanup(Environment *_environment)
Definition _build.c:343
void target_analysis(Environment *_environment)
Definition _cleanup.c:68
int size
Definition _optimizer.c:678
void generate_dsk(Environment *_environment)
Definition _build.c:100
void generate_bin(Environment *_environment)
Definition _build.c:43
void target_linkage_z88dk_appmake_unpatched(Environment *_environment)
Definition _build.c:51
void target_linkage_z88dk_appmake_patched(Environment *_environment)
Definition _build.c:210
Storage * storage
Definition ugbc.h:2526
char * listingFileName
Definition ugbc.h:2305
char * temporaryPath
Definition ugbc.h:2360
int analysis
Definition ugbc.h:2365
Program program
Definition ugbc.h:3179
OutputFileType outputFileType
Definition ugbc.h:2452
int outputGeneratedFiles
Definition ugbc.h:3173
char * asmFileName
Definition ugbc.h:2285
char * exeFileName
Definition ugbc.h:2290
char * targetName
Definition ugbc.h:201
int size
Definition ugbc.h:204
char * sourceName
Definition ugbc.h:198
char * content
Definition ugbc.h:210
struct _FileStorage * next
Definition ugbc.h:213
int startingAddress
Definition ugbc.h:2217
FileStorage * files
Definition ugbc.h:232
char * fileName
Definition ugbc.h:229
struct _Storage * next
Definition ugbc.h:235
void * malloc(YYSIZE_T)
@ OUTPUT_FILE_TYPE_DSK
Definition ugbc.h:267
@ OUTPUT_FILE_TYPE_BIN
Definition ugbc.h:258
#define BUILD_CHECK_FILETYPE(_environment, _filetype)
Definition ugbc.h:4743
#define BUILD_SAFE_REMOVE(_environment, filename)
Definition ugbc.h:4748
#define MAX_TEMPORARY_STORAGE
Definition ugbc.h:563
#define TRACE1(s, p1)
Definition ugbc.h:87
#define PATH_SEPARATOR
Definition ugbc.h:69
#define CRITICAL_DLOAD_MISSING_FILE(f)
Definition ugbc.h:3578
#define BUILD_TOOLCHAIN_Z88DK_GET_LISTING_FILE(_environment, listingFileName)
Definition ugbc.h:4810
#define MAX_ARRAY_DIMENSIONS
Definition ugbc.h:566
struct _Environment Environment
Structure of compilation environment.
#define BUILD_TOOLCHAIN_Z88DK_GET_EXECUTABLE_Z80ASM(_environment, executableName)
Definition ugbc.h:4795
struct _Storage Storage
Structure of a single storage.
#define CRITICAL_STORAGE_NOT_AVAILABLE()
Definition ugbc.h:3693
struct _FileStorage FileStorage
Structure of a single file inside a storage.
#define BUILD_SAFE_MOVE(_environment, source, destination)
Definition ugbc.h:4751
#define TRACE2(s, p1, p2)
Definition ugbc.h:88
#define BUILD_TOOLCHAIN_Z88DK_EXEC(_environment, target, executableName, listingFileName, cpu)
Definition ugbc.h:4818
#define CRITICAL_UNSUPPORTED_OUTPUT_FILE_TYPE(t)
Definition ugbc.h:3537
#define BUILD_TOOLCHAIN_Z88DK_GET_EXECUTABLE_APPMAKE(_environment, executableName)
Definition ugbc.h:4840
char OUTPUT_FILE_TYPE_AS_STRING[][16]
char version[MAX_TEMPORARY_STORAGE]
Definition ugbc.tab.c:53835
char * strcopy(char *_dest, char *_source)