[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Restore Distribution



    Date: Mon, 22 Oct 90 11:50 EDT
    From: barmar@think.com (Barry Margolin)

	Date: Sat, 20 Oct 90 13:02:50 EDT
	From: rwtucker@starbase.MITRE.ORG (Richard W. Tucker)

	    Date: Tue, 16 Oct 90 17:38:37 EDT
	    From: orgren@RTC.Reston.Unisys.COM (Paul Orgren)

	    Just having gone through loading Genera 8.0, I would argue that the
	    "Restore Distribution" ...
				       To de-select .IBIN files and ...

	I suppose you could define the logical pathname Sys: **; *.ibin to
	translate to a null device...  but I don't know how to create a
	Symbolics pathname that works as a null device.  I've wanted one on
	occasion.

    There is no null file system in Genera, although there's a null stream
    (#'SYS:NULL-STREAM).  If you have a Unix file server and you're using
    FTP to access it you could translate sys:**;*.ibin to unix:/dev/null
    (this won't work if you're using NFS, as it doesn't support remote
    access to device files).

						    barmar
It's not hard to add.  I once had a implementation of things like access to
buffers, windows, etc., but this was never installed because of some feeling
that "you shouldn't do things like this via pathnames, you should have a user
interface".  Thus we have weird bits of ui like the :Output Destination CP
command.

;;; -*- Mode: LISP; Syntax: Common-Lisp; Base: 10; Package: FILE-SYSTEM; Lowercase: T -*-


(defflavor null-pathname () (no-device-mixin case-pathname-mixin pathname))

(defvar *null-pathname*)

(defmethod (:fully-merged-p null-pathname) ()
  t)

(defmethod (pathname-file-access-path null-pathname) (operation)
  (declare (ignore operation))
  self)

;; Circular dependency; have to define this method before we can initialize
;; this variable.

(defmethod (:parse-namestring null-pathname) (&rest ignore)
  *null-pathname*)

(defmethod (:string-for-printing null-pathname) ()
  "NULL:")

(macrolet ((pathname-methods (&rest methods)
	     (let ((defs ()))
	       (dolist (m methods)
		 (push `(defmethod (,m null-pathname) (&rest ignore)
			  *null-pathname*)
		       defs))
	       `(progn ,@(reverse defs))))
	   (null-methods (&rest methods)
	     (let ((defs ()))
	       (dolist (m methods)
		 (push `(defmethod (,m null-pathname) (&rest ignore)
			  nil)
		       defs))
	       `(progn ,@(reverse defs))))
	   (error-methods (&rest methods)
	     (let ((defs ()))
	       (dolist (m methods)
		 (push `(defmethod (,m null-pathname) (&rest ignore)
			  (error "You can't do ~S on a null host." ',m))
		       defs))
	       `(progn ,@(reverse defs)))))
  (pathname-methods :homedir :quiet-homedir)
  (null-methods :all-directories :delete :directory-list :expunge
		:multiple-file-plists :properties)
  (error-methods :change-properties :rename :undelete))

(defmethod (:complete-string null-pathname) (default-pathname string options)
  (declare (ignore default-pathname string options))
  "NULL:")

;;; This seems to not be used.
(defmethod (:open null-pathname) (pathname &key &allow-other-keys)
  (declare (ignore pathname))
  'si:null-stream)

(defmethod (file-access-path-open null-pathname) (&key &allow-other-keys)
  'si:null-stream)

(defflavor null-host () (host-null-mixin active-pathname-host net:basic-host))

(defflavor host-null-mixin () (net:pathname-host-mixin)
  (:required-flavors net:basic-host))

(defmethod (:get-pathname host-null-mixin) (dev dir nam typ vrs others)
  (declare (ignore dev dir nam typ vrs others))
  *null-pathname*)

(defmethod (:pathname-flavor null-host) ()
  'null-pathname)

(defmethod (:name null-host) ()
  "NULL")

(defmethod (:system-type null-host) ()
  :null)

(defmethod (neti:pathname-host-get-pathname null-host) (dev dir nam type vrs other vc-brunch vc-diversion)
  (declare (ignore dev dir nam type vrs other vc-brunch vc-diversion))
  *null-pathname*)

(defvar *null-host* (make-instance 'null-host))

(unless (boundp '*null-pathname*)
  (setq *null-pathname* (make-instance 'null-pathname
				       :host *null-host*
				       :device :unspecific
				       :directory nil
				       :name ""
				       :type :unspecific
				       :version :unspecific)))


(unless (member *null-host* *pathname-host-list*)
  (push *null-host* *pathname-host-list*))

(unless (assoc *null-host* *default-pathname-defaults*)
  (let ((default (default-pathname)))
    (set-default-pathname *null-pathname*)
    (set-default-pathname default)))