;;; -*- Mode:LISP;  Package: USER; Base:10; Readtable:CL; Syntax: Common-Lisp -*-
;;;
;;; ******************************************************************************
;;; Copyright (c) 1984, 1985 Gary L. Drescher.  All rights reserved.
;;; Licensed to and distributed by Lisp Machine, Inc.
;;;
;;; Use and copying of this software and preparation of derivative works based
;;; upon this software are permitted.  Any distribution of this software or
;;; derivative works must comply with all applicable United States export control
;;; laws.
;;;
;;; This software is made available AS IS, and no warranty is made about the
;;; software, its performance, or its conformity to any specification.
;;; 
;;; Any person obtaining a copy of this software is requested to send her name
;;; and post office or electronic mail address to:
;;;   ObjectLISP Coordinator
;;;   c/o User Interface Group
;;;   Lisp Machine, Inc.
;;;   1000 Massachusetts Ave.
;;;   Cambridge, Ma 02138
;;;
;;; Suggestions, comments, and requests for improvements are also welcome.
;;; ******************************************************************************

#+(or lambda symbolics)
(fs:set-logical-pathname-host
  "OBJECTLISP"
  :physical-host
  (let ((host (send fs:fdefine-file-pathname ':host)))
    (if (typep host 'fs:logical-host)
	(send host ':host)
      host))
  :translations
  '(("SOURCE" "ObjectLISP;")
    ("PATCH" "ObjectLISP.PATCHES;")
    )
  )

#+symbolics (deff find-package #'cl:find-package)

(unless (find-package 'tim)
  (make-package 'tim
		:use '(#+lambda global
		       #+symbolics common-lisp-global
		       #-(or lambda symbolics) lisp)))

(unless (find-package 'obj)
  (make-package 'obj
		:use '(#+lambda global
		       #+symbolics common-lisp-global
		       #-(or lambda symbolics) lisp
		       tim)))

(use-package 'obj #-symbolics (find-package 'user) #+symbolics 'user)
#+symbolics (use-package 'obj 'cl-user)

(unless (find-package 'obf) (make-package 'obf :use nil))

#+(or lambda symbolics)
(defsystem objectlisp
  (:name "Object Lisp")
  (:package obj)
  (:pathname-default "objectlisp:source;")
  (:patchable "objectlisp:patch;")
  (:module preface "preface")
  (:module nloop "nloop")
  (:module table "table")
  (:module obwalk "obwalk")
  (:module walk "walk")
  (:module main "obj")
  (:module prims  "prims")
  (:module global "global")
  (:compile-load preface)
  (:compile-load nloop (:fasload preface) (:fasload preface))
  (:compile-load table (:fasload nloop preface) (:fasload nloop preface))
  (:compile-load obwalk (:fasload nloop preface table) (:fasload nloop preface table))
  (:compile-load walk (:fasload nloop preface table) (:fasload nloop preface table))
  (:compile-load main (:fasload nloop preface table obwalk walk)
		      (:fasload nloop preface table obwalk walk))
  (:compile-load prims (:fasload nloop preface table obwalk walk main)
		       (:fasload nloop preface table obwalk walk main))
  (:compile-load global (:fasload nloop preface table obwalk walk main)
		        (:fasload nloop preface table obwalk walk main)))

#+(or lambda symbolics)
(defun load-objectlisp (&rest keys)
 (#-symbolics apply #+symbolics lexpr-funcall
  #'make-system 'objectlisp :compile :noconfirm keys))

(defvar *objectlisp-files
	'("preface" "nloop" "table" "obwalk" "walk" "obj" "prims" "global"))

#-(or lambda symbolics)
(defun compile-load-objectlisp ()
  (flet ((compile-load (file)
	   (compile-file file)
	   (load file)))
    (mapc #'compile-load *objectlisp-files)))

#-(or lambda symbolics)
(defun load-objectlisp ()
  (mapc #'load *objectlisp-files))
