void Sv_RegisterListCommands(void) { static int initialized = 0; if (initialized == 0) { Tcl_MutexLock(&initMutex); if (initialized == 0) { /* Create list with 1 empty element. */ Tcl_Obj *listobj = Tcl_NewObj(); listobj = Tcl_NewListObj(1, &listobj); Sv_RegisterObjType(listobj->typePtr, DupListObjShared); Tcl_DecrRefCount(listobj); Sv_RegisterCommand("lpop", SvLpopObjCmd, NULL, 0); Sv_RegisterCommand("lpush", SvLpushObjCmd, NULL, 0); Sv_RegisterCommand("lappend", SvLappendObjCmd, NULL, 0); Sv_RegisterCommand("lreplace", SvLreplaceObjCmd, NULL, 0); Sv_RegisterCommand("linsert", SvLinsertObjCmd, NULL, 0); Sv_RegisterCommand("llength", SvLlengthObjCmd, NULL, 0); Sv_RegisterCommand("lindex", SvLindexObjCmd, NULL, 0); Sv_RegisterCommand("lrange", SvLrangeObjCmd, NULL, 0); Sv_RegisterCommand("lsearch", SvLsearchObjCmd, NULL, 0); Sv_RegisterCommand("lset", SvLsetObjCmd, NULL, 0); initialized = 1; } Tcl_MutexUnlock(&initMutex); } }
/* *----------------------------------------------------------------------------- * * Sv_RegisterKeylistCommands -- * * Register shared variable commands for TclX keyed lists. * * Results: * A standard Tcl result. * * Side effects: * Memory gets allocated * *----------------------------------------------------------------------------- */ void Sv_RegisterKeylistCommands(void) { static int initialized; if (initialized == 0) { Tcl_MutexLock(&initMutex); if (initialized == 0) { Sv_RegisterCommand("keylset", SvKeylsetObjCmd, NULL, NULL); Sv_RegisterCommand("keylget", SvKeylgetObjCmd, NULL, NULL); Sv_RegisterCommand("keyldel", SvKeyldelObjCmd, NULL, NULL); Sv_RegisterCommand("keylkeys", SvKeylkeysObjCmd, NULL, NULL); Sv_RegisterObjType(&keyedListType, DupKeyedListInternalRepShared); initialized = 1; } Tcl_MutexUnlock(&initMutex); } }