(require "split-sequence") (defpackage #:ccmd (:use #:common-lisp #:split-sequence) (:export #:parse #:create-tab #:fun #:lookup) ) (in-package #:ccmd) (defclass () ((buf :initarg b :reader buf) (f :initarg f :reader f))) (defun parse (p) (let ((toks (split-sequence-if (lambda (c) (member c '(#\Space #\Tab))) p))) (format *error-output* "parse: p ~A toks ~A~%" p toks) (make-instance (find-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) (make-instance (find-class ') 'f f 'c c 'n n)) (defgeneric lookup (buf tab)) (defmethod lookup ((buf ) tabs) (let ((cmd (buf buf))) (find-if (lambda (tab) (let ((c (cmd tab))) (string= c cmd))) tabs))) (provide "ccmd")