Lhogho
0.0.027
|
Defines | |
#define | CHECK(PARAM1, PARAM2, BODY) |
check parameter and execute code if it matches | |
Functions | |
void | init_options (int argc, char *argv[]) |
void | dump_statistics () |
dump statistics | |
void | finit_options () |
finalizes the Options module | |
void | output_compiler_name (int show_help) |
outputs the name of the compier | |
void | set_options (int argc, char *argv[]) |
sets options from command-line parameters | |
void * | alloc (int size) |
allocates dynamic memory | |
void * | reallocate (void *mem, int size) |
void * | xalloc (int size) |
void | dealloc (void *ptr) |
deallocates dynamic memory | |
Variables | |
int | option_turned_on [OPTIONS_COUNT] |
Values for options. | |
atom_t | option_texts [4][OPTIONS_COUNT] |
Texts for short options [0]-short [1]-long [2]-alternative [3]-description. | |
char * | option_source_filename |
ASCII name of current source file. | |
chars_t | option_source_filename_chars |
name of current source file | |
char * | option_compiler_filename |
ASCII name of current compiler. | |
chars_t | option_compiler_filename_chars |
name of current compiler | |
int | standalone |
indicate using of standalone compiler (i.e. -x option) | |
atom_t | standalone_arguments |
list of command-line arguments | |
char * | id_names [MAX_ID] |
array of names for each atom type | |
int | stats_free |
statistics for free atoms (of any type) | |
int | stats_allocs |
statistics for usage of ALLOC and DEALLOC | |
stats_t | stats [MAX_ID] |
statistics for each type of atoms |
if( strcmp(*argv,PARAM1)==0 || strcmp(*argv,PARAM2)==0 ) \
BODY;
void init_options | ( | int | argc, |
char * | argv[] | ||
) |
{ option_turned_on [i] = 0; int j; for( j=0; j<4; j++ ) { #ifdef SAFEMODE assert( IS_NOT_EMPTY(t) ); // too few words in TR_OPTIONS #endif option_texts[j][i] = USE(CAR(t)); t=CDR(t); } } #ifdef SAFEMODE assert( IS_EMPTY(t) ); // too many words in TR_OPTIONS #endif DEUSE( names ); DEUSE( tokens ); }
void dump_statistics | ( | ) |
Dumps statistics of memory usage
{ stats_used += stats[i].allocs-stats[i].deallocs; if( stats[i].allocs ) { PRINT(" %10s %8d %8d %8d %8d\n", id_names[i], stats[i].max, stats[i].allocs, stats[i].deallocs, stats[i].allocs-stats[i].deallocs ); } } PRINT(" %39s\n","----------------"); PRINT(" %30s %8d\n","Used",stats_used); PRINT(" %30s %8d\n","Free",stats_free); PRINT(" %39s\n","----------------"); PRINT(" %30s %8d\n","OS alloc balance",stats_allocs); } #endif
void finit_options | ( | ) |
Dumps statistics if -Zm option was switched on
{ int j; for( j = 0; j<4; j++ ) { DEUSE(option_texts[j][i]); } } DEUSE( standalone_arguments ); DEALLOC( option_compiler_filename ); DEALLOC( option_compiler_filename_chars ); if( option_source_filename_chars ) { DEALLOC( option_source_filename_chars ); } #ifdef ADVANCED int stats_used=0; if( OPTION_DETAILED_MEMORY_STATISTICS ) { dump_statistics(); } if( OPTION_MEMORY_STATISTICS ) { for( i=MIN_ID; i<MAX_ID; i++ ) stats_used += stats[i].allocs-stats[i].deallocs; PRINT("{MEM#%d:%d}\n",stats_used,stats_allocs); } #endif //ADVANCED }
void output_compiler_name | ( | int | show_help | ) |
show_help | if set also output commandline options |
Outputs the name of the compiler, its language, its platform and build date. If show_help
is not zero, output a list of command-line options
{ dump( CAR(t) ); t = CDR(t); // Usage int i; for( i=0; i<OPTIONS_COUNT; i++ ) { int len; if( i==FIRST_ADVANCED_OPTION ) { #ifndef ADVANCED t = CDR(t); #endif dumpln( CAR(t) ); t = CDR(t); // options } // show short version len = LENGTH(option_texts[0][i]); outter( TEXT(" "), -1 ); dump( option_texts[0][i] ); for( ; len<6; len++ ) outter( TEXT(" "), -1 ); // show long version len = LENGTH(option_texts[2][i]); if( len ) { dump( option_texts[2][i] ); } else { len = LENGTH(option_texts[1][i]); dump( option_texts[1][i] ); } for( ; len<30; len++ ) outter( TEXT(" "), -1 ); // show description dumpln( option_texts[3][i] ); } } DEUSE( texts ); DEUSE( help_texts ); }
void set_options | ( | int | argc, |
char * | argv[] | ||
) |
argc | argc parameter from the main function |
argv | argv parameter from the main function |
Reads options from the argv
array and sets appropriate parameters.
{ // standalone mode -- collect arguments in a list for( argc--,argv++; argc--; argv++ ) { atom_t word = decode_word( (unsigned char*)*argv, strlen(*argv), 0 ); append( word, &standalone_arguments, &last ); } } else { // compiler mode -- process options till file name and then collect arguments for( argc--,argv++; argc--; argv++ ) { if( option_source_filename_chars ) { atom_t word = decode_word( (unsigned char*)*argv, strlen(*argv), 0 ); append ( word, &standalone_arguments, &last ); } else { int found = 0; chars_t option = UNFILENAME(*argv); int len = STRLEN(option); int i; for( i=0; i<OPTIONS_SUPPORTED_COUNT; i++ ) { int j; for( j=0; j<4; j++ ) { if( len==LENGTH(option_texts[j][i]) ) { if( same_strings(1,option,STRING(option_texts[j][i]),len) ) { found = 1; option_turned_on[i] = 1; break; } } } } DEALLOC( option ); if( OPTION_HELP ) { output_compiler_name( 1 ); exit(0); } if( found ) continue; // check for invalid option or second file name if( **argv=='-' ) { chars_t name = UNFILENAME(*argv); // has ALLOC inside atom_t word = new_word( name, UNKNOWN ); atom_t err = new_error( ERROR_UNKNOWN_OPTION, word ); dumpln( err ); DEUSE( word ); DEALLOC( name ); continue; } // set file name option_source_filename = *argv; option_source_filename_chars = UNFILENAME(*argv); } } // for } }
size | size of memory (in bytes) to allocate |
This function is used to allocate memory. Depending on the existence of DEBUG_HEAP symbol it either just allocates memory or allocates and dump on the screen allocation data.
{ dumpln(error_texts[ERROR_OUT_OF_MEM]); exit(1); } #ifdef ADVANCED stats_allocs++; #endif return buffer; } void* reallocate(void * mem, int size)
void* reallocate | ( | void * | mem, |
int | size | ||
) |
{ dumpln(error_texts[ERROR_OUT_OF_MEM]); exit(1); } return buffer; } void* xalloc( int size )
{ dumpln(error_texts[ERROR_OUT_OF_MEM]); exit(1); } #ifdef ADVANCED stats_allocs++; #endif return buffer; } void dealloc( void* ptr ) {
ptr | pointer to the memory to deallocate |
This function is used to deallocate memory. Depending on the existence of DEBUG_HEAP symbol it either just deallocates memory or deallocates and dumps on the screen deallocation data.
char* option_source_filename |
char* option_compiler_filename |
int standalone |
{ "Integers", "Floats", "Lists", "Words", "Subwords", "Errors", "Var", "Memory" }
int stats_free |
int stats_allocs |