From: Michael Beetz
Subject: lightweight processes in CMU Common Lisp
Date: 
Message-ID: <32301F22.2781E494@cs.uni-bonn.de>
hi,

we have installed CMU-CL here and now I need to get
lightweight processes running. I would like to do the following

(SETF WORLD-PROCESS*
      (MAKE-PROCESS "periodically do sth"
         #'(LAMBDA ()
	      (REPEAT :INFINITE
                 do sth
                 wait a little))))

Ideally, I'd like to port the following file from LUCID to CMU-CL,
i.e. do the right substitutions for the functions in the LCL package.

Do you have an idea where I can find bits and pieces for doing this? or,
know somebody who might know about this?

thanks a lot for your help

--Michael


(DEFMACRO WITH-PROC-LOCK (L &REST BODY)
   `(LCL:WITH-PROCESS-LOCK ((CAR ,(CAR L))) ,@BODY)   )

(SPECDECL SYSTEM:*INHIBIT-INTERRUPTIONS* - obj)

(DEFVAR INITIAL-PROCESS* LCL:*INITIAL-PROCESS*)
(DEFVAR SCHEDULING-QUANTUM* LCL:*SCHEDULING-QUANTUM*)

(SPECDECL (INITIAL-PROCESS-INTERRUPTED* '#F) - boolean)

(DEFUN MAKE-BREAKABLE-PROCESS (NAME FUNCTION)
   (LCL:MAKE-PROCESS :NAME NAME
	 :FUNCTION
	 (\\ ()
	    (LET ((INITIAL-PROCESS-INTERRUPTED '#F))
	       (LCL:HANDLER-BIND
		  ((ERROR (\\ (CND)
			     (UNWIND-PROTECT
				(PROGN
				   (!= INITIAL-PROCESS-INTERRUPTED '#T)
				   (OUT (TO (ERROUT))
					"Breakable process " (D NAME)
					" experienced condition " cnd t)
				   (LCL:INTERRUPT-PROCESS INITIAL-PROCESS*
				      (\\ ()
					 (LCL:PROCESS-WAIT
					    "I/O stream grabbed"
					    (\\ ()
					       (NOT INITIAL-PROCESS-INTERRUPTED)))))
				   (LCL:INVOKE-DEBUGGER CND))
			        (!= INITIAL-PROCESS-INTERRUPTED '#F)))))
		  (FUNCALL FUNCTION))))))

(DEFUN PROC-KILL (P) (LCL:KILL-PROCESS P))

(DEFUN PROC-WAIT (R FN) (LCL:PROCESS-WAIT R FN))

(DEFUN PROC-WAIT-WITH-TIMEOUT (R TIME FN)
   (LCL:PROCESS-WAIT-WITH-TIMEOUT R TIME FN)   )

(DEFUN PROC-DEACTIVATE (P) (LCL:DEACTIVATE-PROCESS P))
(DEFUN PROC-ACTIVATE (P) (LCL:ACTIVATE-PROCESS P))

(DEFUN PROC-INTERRUPT (P FN) (LCL:INTERRUPT-PROCESS P FN))

(DEFUN SYMBOL-PROC-VALUE (SYM PROC) (LCL:SYMBOL-PROCESS-VALUE SYM PROC))

(DEFUN SET-SYMBOL-PROC-VALUE (SYM PROC NEW)
   (SETF (LCL:SYMBOL-PROCESS-VALUE SYM PROC) NEW)   )

(DEFUN PROC-STATE (P) (LCL:PROCESS-STATE P))
-- 
=========================================================================
Michael Beetz                                       Tel.: +49 228 550-299
Institut fuer Informatik III                        Fax:  +49 228 550-382
Universitaet Bonn
Roemerstr. 164
D-53117 Bonn
·····@cs.uni-bonn.de