X-Git-Url: https://jxself.org/git/?p=inform.git;a=blobdiff_plain;f=files.c;h=4e7377e4cb9c661db45c0abbb59c484333063aab;hp=fc0ad8ce23422b64b0b9f64f4c7f93a11143041e;hb=37041256066b0f4023b2664ae4932a23b9b09d55;hpb=5154191043a9b7227ef0eee1a2b40299fc188655
diff --git a/files.c b/files.c
index fc0ad8c..4e7377e 100644
--- a/files.c
+++ b/files.c
@@ -28,7 +28,12 @@
#include "header.h"
-int input_file; /* Number of source files so far */
+int total_files; /* Number of files so far, including
+ #include and #origsource files */
+int total_input_files; /* Number of source files so far
+ (excludes #origsource) */
+int current_input_file; /* Most recently-opened source file */
+static int current_origsource_file; /* Most recently-used #origsource */
int32 total_chars_read; /* Characters read in (from all
source files put together) */
@@ -114,12 +119,12 @@ extern void load_sourcefile(char *filename_given, int same_directory_flag)
int x = 0;
FILE *handle;
- if (input_file == MAX_SOURCE_FILES)
+ if (total_files == MAX_SOURCE_FILES)
memoryerror("MAX_SOURCE_FILES", MAX_SOURCE_FILES);
do
{ x = translate_in_filename(x, name, filename_given, same_directory_flag,
- (input_file==0)?1:0);
+ (total_files==0)?1:0);
handle = fopen(name,"r");
} while ((handle == NULL) && (x != 0));
@@ -128,12 +133,12 @@ extern void load_sourcefile(char *filename_given, int same_directory_flag)
filename_storage_left -= strlen(name)+1;
strcpy(filename_storage_p, name);
- InputFiles[input_file].filename = filename_storage_p;
+ InputFiles[total_files].filename = filename_storage_p;
filename_storage_p += strlen(name)+1;
if (debugfile_switch)
- { debug_file_printf("");
+ }
+
+ InputFiles[total_files].handle = NULL;
+ InputFiles[total_files].is_input = FALSE;
+
+ total_files++;
+ current_origsource_file = total_files;
+ return current_origsource_file;
}
/* ------------------------------------------------------------------------- */
@@ -188,7 +257,7 @@ extern int file_load_chars(int file_number, char *buffer, int length)
{
int read_in; FILE *handle;
- if (file_number-1 > input_file)
+ if (file_number-1 > total_files)
{ buffer[0] = 0; return 1; }
handle = InputFiles[file_number-1].handle;
@@ -1369,12 +1438,28 @@ static void write_debug_location_internals(debug_location location)
}
}
+static void write_debug_location_origsource_internals(debug_location location)
+{ debug_file_printf
+ ("%d", location.orig_file_index - 1);
+ if (location.orig_beg_line_number)
+ debug_file_printf
+ ("%d", location.orig_beg_line_number);
+ if (location.orig_beg_char_number)
+ debug_file_printf
+ ("%d", location.orig_beg_char_number);
+}
+
extern void write_debug_location(debug_location location)
{ if (location.file_index && location.file_index != 255)
{ debug_file_printf("");
write_debug_location_internals(location);
debug_file_printf("");
}
+ if (location.orig_file_index)
+ { debug_file_printf("");
+ write_debug_location_origsource_internals(location);
+ debug_file_printf("");
+ }
}
extern void write_debug_locations(debug_locations locations)
@@ -1386,6 +1471,11 @@ extern void write_debug_locations(debug_locations locations)
write_debug_location_internals(current->location);
debug_file_printf("");
}
+ if (locations.location.orig_file_index)
+ { debug_file_printf("");
+ write_debug_location_origsource_internals(locations.location);
+ debug_file_printf("");
+ }
}
else
{ write_debug_location(locations.location);
@@ -1725,7 +1815,11 @@ extern void init_files_vars(void)
}
extern void files_begin_prepass(void)
-{ input_file = 0;
+{
+ total_files = 0;
+ total_input_files = 0;
+ current_input_file = 0;
+ current_origsource_file = 0;
}
extern void files_begin_pass(void)