Implement remaining Dired customizations for Win32. (All further
authorChris Hanson <org/chris-hanson/cph>
Sat, 7 Dec 1996 22:24:29 +0000 (22:24 +0000)
committerChris Hanson <org/chris-hanson/cph>
Sat, 7 Dec 1996 22:24:29 +0000 (22:24 +0000)
customizations require subprocess support.)

v7/src/edwin/decls.scm
v7/src/edwin/dos.scm
v7/src/edwin/ed-ffi.scm
v7/src/edwin/edwin.ldr
v7/src/edwin/edwin.pkg

index 221147cd6225c040cf5f918dabd84d9d60f279a4..e0509a67b205c174ff8f9e755294150d8b65ff14 100644 (file)
@@ -1,6 +1,6 @@
 #| -*-Scheme-*-
 
-$Id: decls.scm,v 1.57 1996/04/23 22:38:47 cph Exp $
+$Id: decls.scm,v 1.58 1996/12/07 22:24:13 cph Exp $
 
 Copyright (c) 1989-96 Massachusetts Institute of Technology
 
@@ -142,6 +142,7 @@ MIT in each case. |#
                "dired"
                "diros2"
                "dirunx"
+               "dirw32"
                "docstr"
                "dos"
                "doscom"
index 0c6a53616d40e60941f0111236b593bd7f1e2029..1350203818d4bd5ce654d237c67126ed5583b260 100644 (file)
@@ -1,6 +1,6 @@
 ;;; -*-Scheme-*-
 ;;;
-;;;    $Id: dos.scm,v 1.41 1996/10/10 10:29:20 cph Exp $
+;;;    $Id: dos.scm,v 1.42 1996/12/07 22:23:42 cph Exp $
 ;;;
 ;;;    Copyright (c) 1992-96 Massachusetts Institute of Technology
 ;;;
@@ -42,7 +42,7 @@
 ;;; of that license should have been included along with this file.
 ;;;
 
-;;;; DOS Customizations for Edwin
+;;;; Win32 Customizations for Edwin
 
 (declare (usual-integrations))
 \f
 ;;;; Dired customization
 
 (define-variable dired-listing-switches
-  "Dired listing format -- Ignored under DOS."
+  "Dired listing format.
+Recognized switches are:
+    -a show all files including system and hidden files
+    -t sort files according to modification time
+    -l ignored (but allowed for unix compatibility)
+Switches may be concatenated, e.g. `-lt' is equivalent to `-l -t'."
   "-l"
   string?)
 
 (define-variable list-directory-brief-switches
-  "list-directory brief listing format -- Ignored under DOS."
+  "list-directory brief listing format.
+Recognized switches are:
+    -a show all files including system and hidden files
+    -t sort files according to modification time
+    -l ignored (but allowed for unix compatibility)
+Switches may be concatenated, e.g. `-lt' is equivalent to `-l -t'."
   "-l"
   string?)
 
 (define-variable list-directory-verbose-switches
-  "list-directory verbose listing format -- Ignored under DOS."
+  "list-directory verbose listing format.
+Recognized switches are:
+    -a show all files including system and hidden files
+    -t sort files according to modification time
+    -l ignored (but allowed for unix compatibility)
+Switches may be concatenated, e.g. `-lt' is equivalent to `-l -t'."
   "-l"
   string?)
 
 (define (insert-directory! file switches mark type)
   ;; Insert directory listing for FILE at MARK.
-  ;; SWITCHES are examined for the presence of "t".
+  ;; SWITCHES are examined for the presence of "a" and "t".
   ;; TYPE can have one of three values:
   ;;   'WILDCARD means treat FILE as shell wildcard.
   ;;   'DIRECTORY means FILE is a directory and a full listing is expected.
   ;;   'FILE means FILE itself should be listed, and not its contents.
   (let ((mark (mark-left-inserting-copy mark))
        (now (get-universal-time)))
-    (call-with-current-continuation
-     (lambda (k)
-       (bind-condition-handler (list condition-type:file-error)
-          (lambda (condition)
-            (insert-string (condition/report-string condition) mark)
-            (insert-newline mark)
-            (k unspecific))
-        (lambda ()
-          (for-each
-           (lambda (entry)
-             (insert-string
-              (dos/dired-line-string (car entry) (cdr entry) now)
-              mark)
-             (insert-newline mark))
-           (let ((make-entry
-                  (lambda (pathname)
-                    (let ((attributes (file-attributes pathname)))
-                      (if attributes
-                          (list (cons (file-namestring pathname)
-                                      attributes))
-                          '())))))
-             (if (eq? 'FILE type)
-                 (make-entry file)
-                 (sort (append-map make-entry (directory-read file))
-                       (if (string-find-next-char switches #\t)
-                           (lambda (x y)
-                             (> (file-attributes/modification-time (cdr x))
-                                (file-attributes/modification-time (cdr y))))
-                           (lambda (x y)
-                             (string-ci<? (car x) (car y))))))))))))
+    (catch-file-errors (lambda (c)
+                        (insert-string (condition/report-string c) mark)
+                        (insert-newline mark))
+      (lambda ()
+       (for-each
+        (lambda (entry)
+          (insert-string (win32/dired-line-string (car entry) (cdr entry) now)
+                         mark)
+          (insert-newline mark))
+        (if (eq? 'FILE type)
+            (let ((attributes (file-attributes file)))
+              (if attributes
+                  (list (cons (file-namestring file) attributes))
+                  '()))
+            (sort (win32/read-dired-files
+                   file
+                   (string-find-next-char switches #\a))
+                  (if (string-find-next-char switches #\t)
+                      (lambda (x y)
+                        (> (file-attributes/modification-time (cdr x))
+                           (file-attributes/modification-time (cdr y))))
+                      (lambda (x y)
+                        (string-ci<? (car x) (car y)))))))))
     (mark-temporary! mark)))
 
-(define (dos/dired-line-string name attr now)
+(define (win32/dired-line-string name attr now)
   (string-append
    (file-attributes/mode-string attr)
    " "
    (file-time->ls-string (file-attributes/modification-time attr) now)
    " "
    name))
+\f
+(define (win32/read-dired-files file all-files?)
+  (let loop
+      ((pathnames
+       (let ((pathnames (directory-read file #f)))
+         (if all-files?
+             pathnames
+             (list-transform-positive pathnames
+               (let ((mask
+                      (fix:or nt-file-mode/hidden nt-file-mode/system)))
+                 (lambda (pathname)
+                   (fix:= (fix:and (file-modes pathname) mask) 0)))))))
+       (result '()))
+    (if (null? pathnames)
+       result
+       (loop (cdr pathnames)
+             (let ((attr (file-attributes (car pathnames))))
+               (if attr
+                   (cons (cons (file-namestring (car pathnames)) attr) result)
+                   result))))))
 
 (define dired-pathname-wild?
   pathname-wild?)
\ No newline at end of file
index 0de7cd0968aaabfa082cc5a06b43c4159b9b9c28..8c46570b789b38d7c8685e35be78b5819ccd176d 100644 (file)
@@ -1,6 +1,6 @@
 #| -*-Scheme-*-
 
-$Id: ed-ffi.scm,v 1.40 1996/04/23 22:38:39 cph Exp $
+$Id: ed-ffi.scm,v 1.41 1996/12/07 22:24:20 cph Exp $
 
 Copyright (c) 1990-96 Massachusetts Institute of Technology
 
@@ -119,6 +119,8 @@ of that license should have been included along with this file.
                edwin-syntax-table)
     ("dirunx"  (edwin dired)
                edwin-syntax-table)
+    ("dirw32"  (edwin dired)
+               edwin-syntax-table)
     ("display" (edwin display-type)
                syntax-table/system-internal)
     ("docstr"  (edwin)
index 4245bb1ce17880b8370a070e725555c563962407..bb78d9f28853fd694dfcaad7c381b6f192f62424 100644 (file)
@@ -1,6 +1,6 @@
 #| -*-Scheme-*-
 
-$Id: edwin.ldr,v 1.57 1996/12/06 22:34:08 cph Exp $
+$Id: edwin.ldr,v 1.58 1996/12/07 22:24:04 cph Exp $
 
 Copyright (c) 1989-96 Massachusetts Institute of Technology
 
@@ -207,7 +207,8 @@ MIT in each case. |#
          (load "dired" env)
          (case (lookup 'OS-TYPE)
            ((UNIX) (load "dirunx" env))
-           ((OS/2) (load "diros2" env))))
+           ((OS/2) (load "diros2" env))
+           ((NT) (load "dirw32" env))))
 
        (load "argred" (->environment '(EDWIN COMMAND-ARGUMENT)))
        (load "autold" environment)
index 7fa27d840ef4830700161c5421b60534c503b5ed..fb9b4ae8fb981dc6a69d3f21768edbf8e1e5de8e 100644 (file)
@@ -1,6 +1,6 @@
 #| -*-Scheme-*-
 
-$Id: edwin.pkg,v 1.200 1996/10/15 19:05:46 cph Exp $
+$Id: edwin.pkg,v 1.201 1996/12/07 22:24:29 cph Exp $
 
 Copyright (c) 1989-96 Massachusetts Institute of Technology
 
@@ -1147,6 +1147,12 @@ MIT in each case. |#
   (extend-package (edwin)
     (files "dos" "dosfile"))
 
+  (extend-package (edwin dired)
+    (files "dirw32")
+    (export (edwin)
+           edwin-command$dired-chmod
+           edwin-command$dired-hidden-toggle))
+
   (extend-package (edwin screen console-screen)
     (files "ansi" "bios"))
 
@@ -1239,7 +1245,9 @@ MIT in each case. |#
   (extend-package (edwin dired)
     (files "diros2")
     (export (edwin)
-           edwin-command$dired-do-compress))
+           edwin-command$dired-chmod
+           edwin-command$dired-do-compress
+           edwin-command$dired-hidden-toggle))
 
   (extend-package (edwin process)
     (files "process"))