[uim-commit] r1199 - branches/r5rs/sigscheme
kzk at freedesktop.org
kzk at freedesktop.org
Sun Aug 14 21:27:04 PDT 2005
Author: kzk
Date: 2005-08-14 21:27:01 -0700 (Sun, 14 Aug 2005)
New Revision: 1199
Modified:
branches/r5rs/sigscheme/io.c
branches/r5rs/sigscheme/sigscheme.h
Log:
* implement SigScm_set_lib_path
* sigscheme/io.c
- (lib_path): new file local variable
- (SigScm_set_lib_path): new func
- (ScmOp_load): use lib_path
- (ScmOp_require): doesn't check file existance
* sigscheme/sigscheme.h
- (SigScm_set_lib_path): new func
Modified: branches/r5rs/sigscheme/io.c
===================================================================
--- branches/r5rs/sigscheme/io.c 2005-08-15 04:06:07 UTC (rev 1198)
+++ branches/r5rs/sigscheme/io.c 2005-08-15 04:27:01 UTC (rev 1199)
@@ -52,11 +52,13 @@
/*=======================================
Variable Declarations
=======================================*/
-ScmObj current_input_port = NULL;
-ScmObj current_output_port = NULL;
+ScmObj current_input_port = NULL;
+ScmObj current_output_port = NULL;
-ScmObj provided_feature = NULL;
+ScmObj provided_feature = NULL;
+static const char *lib_path = NULL;
+
/*=======================================
File Local Function Declarations
=======================================*/
@@ -65,6 +67,11 @@
/*=======================================
Function Implementations
=======================================*/
+void SigScm_set_lib_path(const char *path)
+{
+ lib_path = path;
+}
+
/*=======================================
R5RS : 6.6 Input and Output
=======================================*/
@@ -436,12 +443,26 @@
ScmObj stack_start;
ScmObj port = SCM_NIL;
ScmObj s_expression = SCM_NIL;
+ char *filepath = NULL;
/* start protecting stack */
SigScm_gc_protect_stack(&stack_start);
+ /* construct filepath */
+ if (lib_path) {
+ filepath = alloca(strlen(lib_path) + strlen(c_filename) + 2);
+ strcpy(filepath, lib_path);
+ strcat(filepath, "/");
+ strcat(filepath, c_filename);
+ } else {
+ filepath = alloca(strlen(c_filename) + 1);
+ strcpy(filepath, c_filename);
+ }
+
+ printf("path = %s\n", filepath);
+
/* open port */
- port = ScmOp_open_input_file(Scm_NewStringCopying(c_filename));
+ port = ScmOp_open_input_file(Scm_NewStringCopying(filepath));
s_expression = SCM_NIL;
/* read & eval cycle */
@@ -477,9 +498,6 @@
if (!SCM_STRINGP(filename))
SigScm_ErrorObj("require : string required but got ", filename);
- if (EQ(ScmOp_file_existsp(filename), SCM_FALSE))
- SigScm_ErrorObj("require : file not found. path = ", filename);
-
/* construct loaded_str */
loaded_str = create_loaded_str(filename);
Modified: branches/r5rs/sigscheme/sigscheme.h
===================================================================
--- branches/r5rs/sigscheme/sigscheme.h 2005-08-15 04:06:07 UTC (rev 1198)
+++ branches/r5rs/sigscheme/sigscheme.h 2005-08-15 04:27:01 UTC (rev 1199)
@@ -289,6 +289,8 @@
ScmObj ScmOp_call_with_current_continuation(ScmObj arg, ScmObj env);
/* io.c */
+void SigScm_set_lib_path(const char *path);
+
ScmObj ScmOp_call_with_input_file(ScmObj filepath, ScmObj proc);
ScmObj ScmOp_call_with_output_file(ScmObj filepath, ScmObj proc);
ScmObj ScmOp_input_portp(ScmObj obj);
More information about the uim-commit
mailing list