;* FIX: Not sure what this is supposed to do (de createkbdmouse (handle buffer address size) (setq handle (cddr (strtok (car handle) "/"))) (cond ((nilp buffer) (setq buffer (car handle)))) ) ;* FIX: check buffers (de readkbdmouse (handle buffer address size offset) (setq handle (cddr (strtok (car handle) "/"))) (cond ((nilp buffer) (setq buffer (car handle)))) (cond ((nilp address) (setq address (cdar handle)))) (setq offset (eval (quality address '"kbdmouserptr"))) (cond ((ge offset (eval (quality address '"size"))) (setq offset 0))) (set (quality address '"kbdmouserptr") (add offset size)) (setq address (eval (quality address '"kbdmousebuffer"))) (memcpy buffer (add address offset) size) ) ;* where buffer is a name, that name is added to the list of kbdmouseobjects and a ;* io buffer set up for that object. ;* ;* where buffer is nil, a mouse or character event happened and all objects in the ;* io buffer get a copy of that event. (de writekbdmouse (handle buffer address bytes lret obj offset) (setq handle (cddr (strtok (car handle) "/"))) (cond ((nilp buffer) (setq buffer (car handle)))) (cond (buffer (cond ((nilp bytes) (setq bytes (cddar handle)))) (fifo_add '"kbdmouseobjectlist" buffer) (set (quality buffer '"kbdmousebuffer") (new bytes)) (set (quality buffer '"kbdmousewptr") 0) (set (quality buffer '"kbdmouserptr") 0) (set (quality buffer '"size") bytes) (setq lret bytes) ) (t (setq lret (length "kbdmouseobjectlist")) (setq address "kbdmouseobjectlist") (while address (setq obj (eval (quality (car address) '"kbdmousebuffer"))) (setq offset (eval (quality (car address) '"kbdmousewptr"))) (cond ((ge offset (eval (quality (car address) '"size"))) (setq offset 0))) (memcpy (add obj offset) kbdmousebuffer 16) (set (quality (car address) '"kbdmousewptr") (add offset 16)) (fifo_add '"event" (eval (string_to_atom (car address)))) (setq address (cdr address)) ) ) ) lret )