1/* struct::stack - critcl - layer 2 definitions 2 * 3 * -> Support for the stack methods in layer 3. 4 */ 5 6#include <ms.h> 7#include <m.h> 8#include <s.h> 9#include <util.h> 10 11/* .................................................. */ 12/* 13 *--------------------------------------------------------------------------- 14 * 15 * stms_objcmd -- 16 * 17 * Implementation of stack objects, the main dispatcher function. 18 * 19 * Results: 20 * A standard Tcl result code. 21 * 22 * Side effects: 23 * Per the called methods. 24 * 25 *--------------------------------------------------------------------------- 26 */ 27 28int 29stms_objcmd (ClientData cd, Tcl_Interp* interp, int objc, Tcl_Obj* CONST* objv) 30{ 31 S* s = (S*) cd; 32 int m; 33 34 static CONST char* methods [] = { 35 "clear", "destroy", "get", "getr", "peek", "peekr", 36 "pop", "push", "rotate", "size", "trim", "trim*", 37 NULL 38 }; 39 enum methods { 40 M_CLEAR, M_DESTROY, M_GET, M_GETR, M_PEEK, M_PEEKR, 41 M_POP, M_PUSH, M_ROTATE, M_SIZE, M_TRIM, M_TRIMV 42 }; 43 44 if (objc < 2) { 45 Tcl_WrongNumArgs (interp, objc, objv, "option ?arg arg ...?"); 46 return TCL_ERROR; 47 } else if (Tcl_GetIndexFromObj (interp, objv [1], methods, "option", 48 0, &m) != TCL_OK) { 49 return TCL_ERROR; 50 } 51 52 /* Dispatch to methods. They check the #args in detail before performing 53 * the requested functionality 54 */ 55 56 switch (m) { 57 case M_CLEAR: return stm_CLEAR (s, interp, objc, objv); 58 case M_DESTROY: return stm_DESTROY (s, interp, objc, objv); 59 case M_GET: return stm_GET (s, interp, objc, objv, 0 ); /* get */ 60 case M_GETR: return stm_GET (s, interp, objc, objv, 1 ); /* getr */ 61 case M_PEEK: return stm_PEEK (s, interp, objc, objv, 0, 0); /* peek */ 62 case M_PEEKR: return stm_PEEK (s, interp, objc, objv, 0, 1); /* peekr */ 63 case M_POP: return stm_PEEK (s, interp, objc, objv, 1, 0); /* pop */ 64 case M_PUSH: return stm_PUSH (s, interp, objc, objv); 65 case M_ROTATE: return stm_ROTATE (s, interp, objc, objv); 66 case M_SIZE: return stm_SIZE (s, interp, objc, objv); 67 case M_TRIM: return stm_TRIM (s, interp, objc, objv, 1 ); /* trim */ 68 case M_TRIMV: return stm_TRIM (s, interp, objc, objv, 0 ); /* trim* */ 69 } 70 /* Not coming to this place */ 71} 72 73/* 74 * Local Variables: 75 * mode: c 76 * c-basic-offset: 4 77 * fill-column: 78 78 * End: 79 */ 80