[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