(defpackage #:cmd (:use #:openlisp) (:export #:parse #:create-tab #:fun #:lookup) ) (in-package #:cmd) (defclass () ((buf :initarg b :reader buf) (f :initarg f :reader f))) (defconstant +ht+ (convert 9 )) (defun parse (p) (let ((toks (string-split (list #\Space +ht+) p))) (create (class ) 'b (car toks) 'f toks))) (defclass () ((fun :initarg f :reader fun) (cmd :initarg c :reader cmd) (narg :initarg n :reader narg))) (defun create-tab (f c n) (create (class ) 'f f 'c c 'n n)) (defgeneric lookup (buf tabs)) (defmethod lookup ((buf ) tabs) (let ((cmd (buf buf))) (find-if (lambda (tab) (let ((c (cmd tab))) (string= c cmd))) tabs))) (provide "cmd")