home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Simtel MSDOS 1992 September
/
Simtel20_Sept92.cdr
/
msdos
/
pgmutl
/
val_link.arc
/
ENDLINK.C
< prev
next >
Wrap
Text File
|
1989-02-18
|
9KB
|
199 lines
/* ENDLINK.C */
/*+-------------------------------------------------------------------------+
| |
| end_linker |
| |
+-------------------------------------------------------------------------+*/
void end_linker(bit_16 return_code)
BeginDeclarations
EndDeclarations
BeginCode
If statistics.val IsTrue
Then
linker_statistics();
EndIf;
exit(return_code);
EndCode
/*+-------------------------------------------------------------------------+
| |
| linker_statistics |
| |
+-------------------------------------------------------------------------+*/
void linker_statistics()
BeginDeclarations
file_info_ptr file;
#define File (*file)
EndDeclarations
BeginCode
statistics_start_time = Now;
statistics.val = False; /* Prevent recursive call. */
/*+-------------------------------------------------------------------------+
| |
| Memory Usage Statistics |
| |
+-------------------------------------------------------------------------+*/
If link_step Exceeds 0
Then
linker_message("\n"
"Memory Usage Statistics:\n"
"---Memory Pool--- --Size-- --Used-- --Free-- %%Free\n");
edit_number_string(temp_string, "%lu", free_pool.pool_size);
linker_message("%-17s %8Fs\n",
free_pool.pool_id,
String(temp_string));
edit_number_string(temp_string, "%lu", static_pool.pool_size);
linker_message("%-17s %8Fs ",
static_pool.pool_id,
String(temp_string));
edit_number_string(temp_string, "%lu", static_pool.used_bytes);
linker_message("%8Fs ",
String(temp_string));
edit_number_string(temp_string, "%lu",
static_pool.pool_size - static_pool.used_bytes);
linker_message("%8Fs %4u%%\n",
String(temp_string),
Bit_16((100L*(static_pool.pool_size -
static_pool.used_bytes)) /
static_pool.pool_size));
EndIf;
/*+-------------------------------------------------------------------------+
| |
| Object File Statistics |
| |
+-------------------------------------------------------------------------+*/
If (link_step Exceeds 4) AndIf (obj_file_list.first IsNotNull)
Then
linker_message("\n"
"Object File Statistics:\n");
linker_message("--Size-- -------------Object File-------------\n");
TraverseList(obj_file_list, file)
BeginTraverse
edit_number_string(temp_string, "%lu", File.file_size);
linker_message("%8Fs %Fs\n", String(temp_string), File.filename);
EndTraverse;
EndIf;
/*+-------------------------------------------------------------------------+
| |
| Library File Statistics |
| |
+-------------------------------------------------------------------------+*/
If (link_step Exceeds 4) AndIf (lib_file_list.first IsNotNull)
Then
linker_message("\n"
"Library File Statistics:\n");
linker_message("--Size-- Modules Passes "
"-------------Library File------------\n");
TraverseList(lib_file_list, file)
BeginTraverse
edit_number_string(temp_string, "%lu", File.file_size);
linker_message("%8Fs ",
String(temp_string));
edit_number_string(temp_string, "%u", File.module_count);
linker_message("%7Fs ",
String(temp_string));
edit_number_string(temp_string, "%u", File.pass_count);
linker_message("%6Fs %Fs\n",
String(temp_string),
File.filename);
EndTraverse;
EndIf;
/*+-------------------------------------------------------------------------+
| |
| Time Usage Statistics |
| |
+-------------------------------------------------------------------------+*/
total_time = 0;
linker_message("\n"
"Time Usage Statistics:\n");
If link_step Exceeds 0
Then
total_time += user_input_start_time - linker_start_time;
linker_message(" Primary linker initialization time:%7s\n",
elapsed_time(linker_start_time,
user_input_start_time));
EndIf;
If link_step Exceeds 1
Then
total_time += secondary_init_start_time - user_input_start_time;
linker_message(" User input time:%7s\n",
elapsed_time(user_input_start_time,
secondary_init_start_time));
EndIf;
If link_step Exceeds 2
Then
total_time += library_directory_start_time -
secondary_init_start_time;
linker_message("Secondary linker initialization time:%7s\n",
elapsed_time(secondary_init_start_time,
library_directory_start_time));
EndIf;
If link_step Exceeds 3
Then
total_time += object_module_start_time - library_directory_start_time;
linker_message(" Library directory processing time:%7s\n",
elapsed_time(library_directory_start_time,
object_module_start_time));
EndIf;
If link_step Exceeds 4
Then
total_time += library_processing_start_time - object_module_start_time;
linker_message(" Object module processing time:%7s\n",
elapsed_time(object_module_start_time,
library_processing_start_time));
EndIf;
If link_step Exceeds 5
Then
total_time += order_start_time - library_processing_start_time;
linker_message(" Library processing time:%7s\n",
elapsed_time(library_processing_start_time,
order_start_time));
EndIf;
If link_step Exceeds 6
Then
total_time += fixup_start_time - order_start_time;
linker_message(" Segment ordering and aligning time:%7s\n",
elapsed_time(order_start_time,
fixup_start_time));
EndIf;
If link_step Exceeds 7
Then
total_time += exec_image_start_time - fixup_start_time;
linker_message(" Fixup time:%7s\n",
elapsed_time(fixup_start_time,
exec_image_start_time));
EndIf;
If link_step Exceeds 8
Then
total_time += map_start_time - exec_image_start_time;
linker_message(" Executable image write time:%7s\n",
elapsed_time(exec_image_start_time,
map_start_time));
EndIf;
If link_step Exceeds 9
Then
total_time += statistics_start_time - map_start_time;
linker_message(" Map write time:%7s\n",
elapsed_time(map_start_time,
statistics_start_time));
EndIf;
linker_end_time = Now;
total_time += linker_end_time - statistics_start_time;
linker_message(" Statistics reporting time:%7s\n",
elapsed_time(statistics_start_time,
linker_end_time));
linker_message(" ------\n"
" Total Elaspsed Time:%7s\n",
elapsed_time(0L, total_time));
return;
EndCode
#undef File