Add new primitives `directory-open-noread' and
authorChris Hanson <org/chris-hanson/cph>
Fri, 12 Apr 1991 03:20:58 +0000 (03:20 +0000)
committerChris Hanson <org/chris-hanson/cph>
Fri, 12 Apr 1991 03:20:58 +0000 (03:20 +0000)
`directory-read-matching', to facilitate filename completion.

v7/src/microcode/osfs.h
v7/src/microcode/prosfs.c
v7/src/microcode/uxfs.c
v7/src/microcode/version.h
v8/src/microcode/version.h

index 86dab67058d5222ea360b8e15bb0b425fde777ae..0e2c379962a882df00adc565f81b600bc3634953 100644 (file)
@@ -1,8 +1,8 @@
 /* -*-C-*-
 
-$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/osfs.h,v 1.1 1990/06/20 19:36:23 cph Rel $
+$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/osfs.h,v 1.2 1991/04/12 03:20:38 cph Exp $
 
-Copyright (c) 1990 Massachusetts Institute of Technology
+Copyright (c) 1990-91 Massachusetts Institute of Technology
 
 This material was developed by the Scheme project at the Massachusetts
 Institute of Technology, Department of Electrical Engineering and
@@ -52,8 +52,9 @@ extern void EXFUN
 extern void EXFUN
   (OS_file_link_soft, (CONST char * from_name, CONST char * to_name));
 extern void EXFUN (OS_directory_make, (CONST char * name));
-extern CONST char * EXFUN (OS_directory_open, (CONST char * name));
-extern CONST char * EXFUN (OS_directory_read, (void));
+extern void EXFUN (OS_directory_open, (CONST char * name));
 extern void EXFUN (OS_directory_close, (void));
+extern CONST char * EXFUN (OS_directory_read, (void));
+extern CONST char * EXFUN (OS_directory_read_matching, (CONST char * prefix));
 
 #endif /* SCM_OSFS_H */
index 36e5529fd123ab26fa60af6903e3d5f0418ce318..c2c0cb0eabc6bd3f8140617ec89ef9b0f25a7cab 100644 (file)
@@ -1,8 +1,8 @@
 /* -*-C-*-
 
-$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/prosfs.c,v 1.2 1990/11/21 07:04:38 jinx Rel $
+$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/prosfs.c,v 1.3 1991/04/12 03:20:45 cph Exp $
 
-Copyright (c) 1987, 1988, 1989, 1990 Massachusetts Institute of Technology
+Copyright (c) 1987-91 Massachusetts Institute of Technology
 
 This material was developed by the Scheme project at the Massachusetts
 Institute of Technology, Department of Electrical Engineering and
@@ -233,10 +233,19 @@ DEFINE_PRIMITIVE ("DIRECTORY-MAKE", Prim_directory_make, 1, 1,
 DEFINE_PRIMITIVE ("DIRECTORY-OPEN", Prim_directory_open, 1, 1,
   "Open the directory NAME for reading.\n\
 If successful, return the first filename in the directory as a string.\n\
-If there is no such file, or the directory cannot be opened, #F is returned.")
+If there is no such file, #F is returned.")
 {
   PRIMITIVE_HEADER (1);
-  STRING_RESULT (OS_directory_open (STRING_ARG (1)));
+  OS_directory_open (STRING_ARG (1));
+  STRING_RESULT (OS_directory_read ());
+}
+
+DEFINE_PRIMITIVE ("DIRECTORY-OPEN-NOREAD", Prim_directory_open_noread, 1, 1,
+  "Open the directory NAME for reading.")
+{
+  PRIMITIVE_HEADER (1);
+  OS_directory_open (STRING_ARG (1));
+  PRIMITIVE_RETURN (UNSPECIFIC);
 }
 
 DEFINE_PRIMITIVE ("DIRECTORY-READ", Prim_directory_read, 0, 0,
@@ -247,6 +256,15 @@ Return #F if there are no more files in the directory.")
   STRING_RESULT (OS_directory_read ());
 }
 
+DEFINE_PRIMITIVE ("DIRECTORY-READ-MATCHING", Prim_directory_read_matching, 1, 1,
+  "Read and return a filename from the directory opened by `directory-open'.\n\
+The filename must begin with the argument string.\n\
+Return #F if there are no more matching files in the directory.")
+{
+  PRIMITIVE_HEADER (1);
+  STRING_RESULT (OS_directory_read_matching (STRING_ARG (1)));
+}
+
 DEFINE_PRIMITIVE ("DIRECTORY-CLOSE", Prim_directory_close, 0, 0,
   "Close the directory opened by `directory-open'.")
 {
index 965512f5f0824960350557238924fcea61888ab8..bff41317e9fb8bed2689c15048f618b37540f075 100644 (file)
@@ -1,6 +1,6 @@
 /* -*-C-*-
 
-$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/uxfs.c,v 1.3 1991/01/24 11:25:50 cph Exp $
+$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/uxfs.c,v 1.4 1991/04/12 03:20:51 cph Exp $
 
 Copyright (c) 1990-1 Massachusetts Institute of Technology
 
@@ -168,7 +168,7 @@ static struct direct * directory_entry;
   return (directory_entry -> d_name);                                  \
 }
 
-CONST char *
+void
 DEFUN (OS_directory_open, (name), CONST char * name)
 {
   if (directory_pointer != 0)
@@ -181,7 +181,6 @@ DEFUN (OS_directory_open, (name), CONST char * name)
 #else
     error_external_return ();
 #endif
-  READ_DIRECTORY_ENTRY ();
 }
 
 CONST char *
@@ -192,6 +191,28 @@ DEFUN_VOID (OS_directory_read)
   READ_DIRECTORY_ENTRY ();
 }
 
+CONST char *
+DEFUN (OS_directory_read_matching, (prefix), CONST char * prefix)
+{
+  if (directory_pointer == 0)
+    error_external_return ();
+  {
+    unsigned int n = (strlen (prefix));
+    while (1)
+      {
+       directory_entry = (readdir (directory_pointer));
+       if (directory_entry == 0)
+         {
+           closedir (directory_pointer);
+           directory_pointer = 0;
+           return (0);
+         }
+       if ((strncmp (prefix, (directory_entry -> d_name), n)) == 0)
+         return (directory_entry -> d_name);
+      }
+  }
+}
+
 void
 DEFUN_VOID (OS_directory_close)
 {
@@ -210,11 +231,10 @@ DEFUN_VOID (UX_initialize_directory_reader)
 
 #else /* not HAVE_DIRENT nor HAVE_DIR */
 
-CONST char *
+void
 DEFUN (OS_directory_open, (name), CONST char * name)
 {
   error_unimplemented_primitive ();
-  return (0);
 }
 
 CONST char *
@@ -224,6 +244,13 @@ DEFUN_VOID (OS_directory_read)
   return (0);
 }
 
+CONST char *
+DEFUN (OS_directory_read_matching, (prefix), CONST char * prefix)
+{
+  error_unimplemented_primitive ();
+  return (0);
+}
+
 void
 DEFUN_VOID (OS_directory_close)
 {
index 297ba5af471035ac1bf73bfad60688edb78f33e1..238a005a985edb5c2bd615e58a77ad0808d46605 100644 (file)
@@ -1,6 +1,6 @@
 /* -*-C-*-
 
-$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/Attic/version.h,v 11.73 1991/04/02 19:45:32 cph Exp $
+$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/Attic/version.h,v 11.74 1991/04/12 03:20:58 cph Exp $
 
 Copyright (c) 1988-91 Massachusetts Institute of Technology
 
@@ -46,5 +46,5 @@ MIT in each case. */
 #define VERSION                11
 #endif
 #ifndef SUBVERSION
-#define SUBVERSION     73
+#define SUBVERSION     74
 #endif
index ed95b9b5ccb7198df5fd19e2080b598ecc30809a..fdc400a80a714887821b7fb9fe76f1b295868fc2 100644 (file)
@@ -1,6 +1,6 @@
 /* -*-C-*-
 
-$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v8/src/microcode/version.h,v 11.73 1991/04/02 19:45:32 cph Exp $
+$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v8/src/microcode/version.h,v 11.74 1991/04/12 03:20:58 cph Exp $
 
 Copyright (c) 1988-91 Massachusetts Institute of Technology
 
@@ -46,5 +46,5 @@ MIT in each case. */
 #define VERSION                11
 #endif
 #ifndef SUBVERSION
-#define SUBVERSION     73
+#define SUBVERSION     74
 #endif