and htab_find() finds an integer value associated to a key string. not a hash index. it is a value that the user of the hash table asks it to associate to the key string. in the tinyvm code this is used to associate jump offsets to label strings created by the user in programs. the routines are used in tvm_parser.c for the label stuff.
```
$ grep htab_add libtvm/*.c
libtvm/tvm_htab.c:			htab_add(new, node->key, node->value);
libtvm/tvm_htab.c:int htab_add(tvm_htab_t *htab, const char *k, int v)
libtvm/tvm_parser.c:				htab_add(p->label_htab, tokens[i][token_idx], num_instructions);
$ grep htab_find libtvm/*.c
libtvm/tvm_htab.c:int htab_find(tvm_htab_t *htab, const char *key)
libtvm/tvm_parser.c:			if(htab_find(p->label_htab, tokens[i][token_idx]) != -1)
libtvm/tvm_parser.c:	
```

for example if I have a program like this:
```
foo:
  blablabla
```
the hash table has en entry whose key is "foo" and whose value (the thing which htab_find retrieves when given "foo") is a program instruction offset to the instruction immediately following the "foo:" label in the user's code.