63 pp.ptr = (
void*)malloc(sz);
65 if (ptr!=NULL) memcpy(pp.ptr, ptr, sz);
66 else memset(pp.ptr, 0, sz);
102 pp.ptr = (
void*)malloc(sz);
104 if (ptr!=NULL) memcpy(pp.ptr, ptr, sz);
105 else memset(pp.ptr, 0, sz);
122 if (ldat==NULL)
return;
130 if (ldat->ptr!=NULL) free(ldat->ptr);
151 if (ldat==NULL || *ldat==NULL)
return;
176 if (ldat.ptr!=NULL && ldat.sz>0) {
177 dup.ptr = (
void*)malloc(ldat.sz);
178 if (dup.ptr!=NULL) memcpy(dup.ptr, ldat.ptr, ldat.sz);
203 if (pp==NULL)
return NULL;
204 memset(pp, 0,
sizeof(
tList));
227 memset(&pp, 0,
sizeof(
tList));
245 if (node==NULL)
return NULL;
250 if (node->prev!=NULL) node->prev->next = node->next;
251 if (node->next!=NULL) {
252 node->next->prev = node->prev;
272 if (node==NULL || *node==NULL)
return NULL;
292 if (node==NULL)
return NULL;
295 pp = (
tList*)malloc(sz);
296 if (pp==NULL)
return NULL;
298 memcpy(pp, node, sz);
323 if (pp==NULL || node==NULL)
return NULL;
325 if (node->prev!=NULL) node->prev->next = node->next;
326 if (node->next!=NULL) node->next->prev = node->prev;
329 node->next = pp->next;
330 if (pp->next!=NULL) pp->next->prev = node;
344 if (pp1==NULL || pp2==NULL)
return NULL;
347 pp1->ldat = pp2->ldat;
376 if (pp==NULL)
return NULL;
377 memset(pp, 0,
sizeof(
tList));
428 if (pp->next==NULL) {
515 if (node==NULL)
return;
538 if (pp==NULL)
return;
553 if (sz>0 && ptr!=NULL) {
554 if (pp->ldat.ptr!=NULL) free(pp->ldat.ptr);
555 pp->ldat.ptr = (
void*)malloc(sz);
556 if (pp->ldat.ptr!=NULL) memcpy(pp->ldat.ptr, ptr, sz);
577 if (pp==NULL)
return;
582 if (pp->ldat.key.buf!=NULL) {
587 if (pp->ldat.val.buf!=NULL) {
592 if (sz>0 && ptr!=NULL) {
593 if (pp->ldat.ptr!=NULL) free(pp->ldat.ptr);
594 pp->ldat.ptr = (
void*)malloc(sz);
595 if (pp->ldat.ptr!=NULL) memcpy(pp->ldat.ptr, ptr, sz);
614 if (pt==NULL)
return pp;
639 if (pp==NULL || srch==NULL)
return NULL;
672 if (pp==NULL || key==NULL)
return NULL;
707 if (pp==NULL || key.
buf==NULL)
return NULL;
741 if (pp==NULL || *pp==NULL)
return NULL;
744 if (pt!=NULL) pt->next = NULL;
774 if (pp==NULL || *pp==NULL)
return;
816 if (no==0 || no==nn) {
817 if (pp->prev==NULL) *pl = pp->next;
849 if (pp==NULL)
return NULL;
879 if (pt==NULL)
return pp;
880 if (pp==NULL)
return pt;
907 if (pt==NULL)
return pp;
908 if (pp==NULL)
return pt;
911 if (pp->next!=NULL) pp->next->prev = pe;
930 if (fp==NULL) fp = stderr;
935 fprintf(fp,
"[%d] [%d] [%s] [%s]\n", ld.id, ld.lv, ld.key.buf, ld.val.buf);
941 fprintf(fp,
"(List is NULL)\n");
954 if (fp==NULL) fp = stderr;
959 fprintf(fp,
"[%d] [%d] [%s] [%d]\n", ld.id, ld.lv, ld.key.buf, ld.val.vldsz);
960 fdump(fp, (
unsigned char*)ld.val.buf, ld.val.vldsz);
965 fprintf(fp,
"(List is NULL)\n");
1004 if (pl==NULL)
return NULL;
1006 while (pl->prev!=NULL) pl = pl->prev;
1025 if (pl==NULL)
return NULL;
1027 while (pl->next!=NULL) pl = pl->next;
1060 if (pl==NULL || key==NULL)
return NULL;
1061 if (len<=-3)
return NULL;
1065 if (
ex_strncmp((
char*)pl->ldat.key.buf, key, len)) {
1067 if (no==nn)
return pl;
1098 if (pl==NULL || key==NULL)
return NULL;
1099 if (len<=-3)
return NULL;
1105 if (no==nn)
return pl;
1136 if (pl==NULL || key==NULL)
return NULL;
1137 if (len<=-3)
return NULL;
1143 if (no==nn)
return pl;
1174 if (pl==NULL || key==NULL)
return NULL;
1175 if (len<=-3)
return NULL;
1181 if (no==nn)
return pl;
1210 if (pl==NULL || key==NULL)
return NULL;
1215 if (strstr((
char*)(pl->ldat).key.buf, key)!=NULL) {
1217 if (no==nn)
return pl;
1221 if (strstr(key, (
char*)(pl->ldat).key.buf)!=NULL) {
1223 if (no==nn)
return pl;
1254 if (pl==NULL || key==NULL)
return NULL;
1259 if (
strstrcase((
char*)(pl->ldat).key.buf, key)!=NULL) {
1261 if (no==nn)
return pl;
1265 if (
strstrcase(key, (
char*)(pl->ldat).key.buf)!=NULL) {
1267 if (no==nn)
return pl;
1303 if (pl==NULL || key==NULL)
return NULL;
1304 if (len<=-3)
return NULL;
1310 if (
ex_strncmp((
char*)(pl->ldat).key.buf, key, len)) {
1312 if (no==nn)
return pl;
1341 if (pl==NULL || key==NULL)
return NULL;
1342 if (len<=-3)
return NULL;
1350 if (no==nn)
return pl;
1379 if (pl==NULL || key==NULL)
return NULL;
1380 if (len<=-3)
return NULL;
1388 if (no==nn)
return pl;
1417 if (pl==NULL || key==NULL)
return NULL;
1418 if (len<=-3)
return NULL;
1426 if (no==nn)
return pl;
1455 if (pl==NULL || key==NULL)
return NULL;
1462 if (strstr((
char*)(pl->ldat).key.buf, key)!=NULL) {
1464 if (no==nn)
return pl;
1468 if (strstr(key, (
char*)(pl->ldat).key.buf)!=NULL) {
1470 if (no==nn)
return pl;
1501 if (pl==NULL || key==NULL)
return NULL;
1508 if (
strstrcase((
char*)(pl->ldat).key.buf, key)!=NULL) {
1510 if (no==nn)
return pl;
1514 if (
strstrcase(key, (
char*)(pl->ldat).key.buf)!=NULL) {
1516 if (no==nn)
return pl;
1545 if (pl==NULL)
return NULL;
1549 if (pl->ldat.id ==
id) {
1551 if (no==nn)
return pl;
1574 if (pl==NULL || key==NULL)
return NULL;
1601 if (list==NULL || key==NULL)
return buf;
1634 if (list==NULL || key==NULL)
return buf;
1643 len = (int)strlen(data);
1647 str = (
char*)pp->ldat.val.buf;
1701 if (add_mode==
ON && cn==0) {
1716 if (lp==NULL || value==NULL)
return FALSE;
1781 if (lp==NULL || value==NULL)
return FALSE;
1811 if (str==NULL)
return NULL;
1816 item =
awk(str, cc, nn);
1817 if (item==NULL)
return lp;
1821 item =
awk(str, cc, ++nn);
1822 while (item!=NULL) {
1825 item =
awk(str, cc, ++nn);
1850 if (str==NULL)
return NULL;
1855 item =
cawk(str, cc, nn);
1856 if (item==NULL)
return lp;
1860 item =
cawk(str, cc, ++nn);
1861 while (item!=NULL) {
1864 item =
cawk(str, cc, ++nn);
1889 if (buf.
buf==NULL)
return NULL;
1892 while (item.
buf!=NULL) {
1920 if (buf.
buf==NULL)
return NULL;
1923 while (item.
buf!=NULL) {
1944 return (
char*)buf.
buf;
1958 if (lp==NULL)
return buf;
1962 if (lp!=NULL && lp->ldat.key.buf!=NULL) {
1966 while (lp!=NULL && lp->ldat.key.buf!=NULL) {
2001 return (
char*)buf.
buf;
2021 if (buf.
buf!=NULL) {
2022 int ret = atoi((
char*)buf.
buf);
2046 if (buf.
buf!=NULL) {
2047 double ret = atof((
char*)buf.
buf);
2071 if (buf.
buf!=NULL) {
2072 float ret = (float)atof((
char*)buf.
buf);
2132 fp = fopen(fname,
"rb");
2165 if (fp==NULL)
return NULL;
2167 str = fgets(val,
LBUF, fp);
2172 for (i=0; i<(int)strlen(val); i++) {
2183 str = (
char*)malloc(
LBUF+1);
2185 memset(str, 0,
LBUF+1);
2186 strncpy(val, str,
LBUF);
2191 if (strlen(str)>0) {
2192 if (mode==0 || str[0]!=
'#') {
2194 if (lp==NULL) lp = lt;
2199 str = fgets(val,
LBUF, fp);
2224 fp = fopen(fname,
"rb");
2291 fp = fopen(fname,
"rb");
2315 if (fp==NULL)
return NULL;
2318 while (!feof(fp) && cc) {
2320 if (lp==NULL) lp = lt;
2349 fp = fopen(fname,
"ab");
2374 if (fp==NULL)
return FALSE;
2376 while (lp!=NULL && cc) {
2381 if (!cc)
return FALSE;
Buffer make_Buffer(int sz)
Buffer型変数のバッファ部をつくり出す.
int read_Buffer2_format_fp(Buffer *key, Buffer *buf, FILE *fp)
ファイル fp から 2つのBuffer型変数の keyと bufを読み込む.
void free_Buffer(Buffer *buf)
Buffer型変数のバッファ部を解放する
Buffer init_Buffer()
初期化したBuffer型変数を返す.
Buffer dup_Buffer(Buffer buf)
Buffer型変数のコピーをつくる.
Buffer pack_Buffer(Buffer buf, char cc)
文字列の先頭のcc(複数),終わりのcc(複数),TAB, CR, LF を削除
Buffer cawk_Buffer(Buffer str, char cc, int n)
Buffer文字列に対する(変形の)awk.
int save_Buffer2_format_fp(Buffer key, Buffer buf, FILE *fp)
ファイル fp へ 2つのBuffer型変数 keyと bufを書き込む
Buffer awk_Buffer(Buffer str, char cc, int n)
Buffer文字列に対する awk.
#define replace_sBuffer(buf, f, t)
replace_sBuffer()
#define cat_s2Buffer(src, dst)
cat_b2Buffer()
#define make_Buffer_bystr(str)
set_Buffer()
#define JBXL_ARGS_ERROR
不正な引数(NULLなど)
#define JBXL_STATE_ANCHOR
アンカーノード
int vldsz
データの長さ.バイナリデータの場合も使用可能.文字列の場合は 0x00 を含まない.
unsigned char * buf
バッファの先頭へのポインタ.str[bufsz]は必ず 0x00となる.
int replace_value_tList_node(tList *lp, const char *srcval, const char *value)
lt->ldat.val のsrcval部分を value に置き換える.
int save_Buffer_tList_file(const char *fname, tList *lp)
リストのキー部とバッファ部の Buffer型変数をファイルへ書き込む.
tList * dup_tList(tList *pp)
リストを複製する.
tList * new_tList_anchor_node(void)
リスト用の ANCHORノードを動的に生成.
tList * strncaservscmp_back_tList(tList *pl, const char *key, int len, int no)
char* 型変数によるリストの後方からのノードのサーチ.文字も後方から比べる.大文字小文字を無視.
tList_data make_tList_data_bystr(int id, int lv, const char *key, const char *val, void *ptr, int sz)
文字列データを指定してノードデータを作成
tList * add_tList_node_bydata(tList *pp, tList_data ldat)
データ(ldat)からリスト用ノードを生成し(new),それを指定したリストの後ろに追加.
tList * dup_tList_node(tList *node)
ノードデータを複製する (new).ノードのポインタは複製しない.
char * get_str_join_tList(tList *lp, const char *deli)
リストの一連のキー部を deliを区切りにして結合して,その文字列を返す. 要 free
tList * strnrvscmp_tList(tList *pl, const char *key, int len, int no)
char* 型変数によるノードのサーチ.文字の後方から比べる
double get_double_param_tList(tList *lt, const char *key, double dflt)
keyに対応する値を double型実数として読み出す.キーがない場合は,デフォルト値 dflt を返す.
tList * awk_Buffer_tList(Buffer buf, char cc)
Buffer 中の文字列を区切り文字で区切って,各項目をリストのキー部に入れて返す.
tList * read_index_tList_file(const char *fname, char deli)
ファイルから一行ずつ読み込んで,deliを区切り文字にしてリストのキー部とデータ部に格納.
tList * strstrcase_back_tList(tList *pl, const char *key, int len, int no)
char* 型変数による後方からのノードの部分文字列サーチ.大文字小文字を無視.
void print_tList(FILE *fp, tList *pp)
リストの表示.ポインタ pp以降の全てのノードを fpに表示する.
void del_tList_data(tList_data **ldat)
ノードデータを削除する.
tList * strncmp_back_tList(tList *pl, const char *key, int len, int no)
char* 型変数によるリストの後方からのノードのサーチ.
tList * del_tList_anchor_node(tList *node)
ANCHORノードを削除して,TOPのポインターを返す.
tList * cawk_Buffer_tList(Buffer buf, char cc)
Buffer 中の文字列を区切り文字で区切って,各項目をリストのキー部に入れて返す.連続文字列対応.
char * get_str_param_tList(tList *lt, const char *key, const char *dflt)
keyに対応する値を 文字列として読み出す.キーがない場合は,デフォルト値 dflt を返す.要 free().
tList_data make_tList_data(int id, int lv, Buffer key, Buffer val, void *ptr, int sz)
データを指定してノードデータを作成
int get_bool_param_tList(tList *lt, const char *key, int dflt)
keyに対応する値を 論理値(実際は整数)として読み出す.キーがない場合は,デフォルト値 dflt を返す.
tList * update_tList_node_bystr(tList *pp, int id, int lv, const char *key, const char *val, void *ptr, int sz)
keyで検索し,ノードがあればノードをコピーする.無ければ最後に追加する(new)
tList * search_id_tList(tList *pl, int id, int no)
リストの中から no番目の idノード(ldat.id)を探し出し,tListのポインタを返す.
Buffer get_Buffer_join_tList(tList *lp, const char *deli)
リストの一連のキー部を deliを区切りにして結合して返す.
void del_all_tList(tList **pp)
リストの全ノードの削除.ポインタ ppのノードを含むリスト全体を削除する.
int set_value_tList(tList *list, const char *key, int no, const char *value, int add_mode)
リスト(lt)中の no番目の keyノードの値に valueを設定する.
tList * read_Buffer_tList_fp(FILE *fp)
ファイルポインタから Buffer型変数を 2つずつ読み込んで,リストのキー部とバッファ部に格納し返す.
tList * insert_tList(tList *pp, tList *pt)
ノードppの直ぐ後ろに ptを挿入する.
tList * read_tList_file(const char *fname, int mode)
ファイルから一行ずつ読み込んでリストのキー部に格納.空行はリストに加えない.
int count_tList(tList *pp)
リストの ppノード以降のノードの数を数える.
tList * del_tList(tList **pp)
指定したリストノード以降のリストを削除.
float get_float_param_tList(tList *lt, const char *key, float dflt)
keyに対応する値を float型実数として読み出す.キーがない場合は,デフォルト値 dflt を返す.
tList * update_tList_node(tList *pp, tList *pt)
pt->keyで検索し,ノードがあればノードをコピーする.無ければ最後にノードを追加する(new).
tList * find_tList_end(tList *pl)
リストの最後のノードを探す.
tList * move_tList_node(tList *pp, tList *node)
nodeを現在のリストから切り離し,ppへ移動する.
tList * update_tList_node_byBuffer(tList *pp, int id, int lv, Buffer key, Buffer val, void *ptr, int sz)
key.bufで検索し,ノードがあれば設定する.無ければ最後に追加する(new).
int get_int_param_tList(tList *lt, const char *key, int dflt)
keyに対応する値を 整数として読み出す.キーがない場合は,デフォルト値 dflt を返す..
void clear_tList_data(tList_data *ldat)
ノードデータのバッファ部をクリアする.データ自身は削除しない.
Buffer buffer_key_tList(tList *list, const char *key, int no)
リストの中から no番目の keyノード(ldat.key)を探し出し,ldat.valのコピーを返す.
tList * read_Buffer_tList_file(const char *fname)
ファイルから Buffer型変数を 2つずつ読み込んで,リストのキー部とバッファ部に格納し返す.
tList * read_index_tList_fp(FILE *fp, char deli)
ファイルポインタが示すファイルから一行ずつ読み込んで,deliを区切り文字にしてリストのキー部とデータ部に格納.
tList * read_tList_fp(FILE *fp, int mode)
ファイルポインタが示すファイルから一行ずつ読み込んでリストのキー部に格納.
tList * strncmp_tList(tList *pl, const char *key, int len, int no)
char* 型変数によるノードのサーチ.
void set_tList_node_bydata(tList *node, tList_data dat)
リストのノードに値を設定する.
tList * add_tList_end(tList *pp, tList *pt)
リストppの最後に リストptを追加する.
tList * add_tList_node_bystr(tList *pp, int id, int lv, const char *key, const char *val, void *ptr, int sz)
文字列データからリスト用ノードを生成し(new),それをリストに追加.
tList make_tList_node(tList_data ldat)
リスト用ノードを静的に作成する.
int set_value_tList_node(tList *lp, const char *value)
lt->ldat.val に文字列を設定する(置き換える).
tList * search_key_tList(tList *pl, const char *key, int no)
リストの中から no番目の keyノード(ldat.key)を探し出し,tListへのポインタを返す.大文字小文字を無視.
tList_data dup_tList_data(tList_data ldat)
ノードデータの複製を作成する
tList * strncaservscmp_tList(tList *pl, const char *key, int len, int no)
char* 型変数によるノードのサーチ.文字の後方から比べる.大文字小文字を無視.
tList * strncasecmp_tList(tList *pl, const char *key, int len, int no)
char* 型変数によるノードのサーチ.大文字小文字を無視する
int save_Buffer_tList_fp(FILE *fp, tList *lp)
リストのキー部とバッファ部の Buffer型変数をファイルポンタが指すファイルへ書き込む.
tList * swap_tList_node(tList *pp1, tList *pp2)
pp1ノード と pp2ノードを入れ替える.
tList * free_tList_node(tList *node)
リスト用ノードのバッファ部(データ)の解放.
tList * add_tList_node_byBuffer(tList *pp, int id, int lv, Buffer key, Buffer val, void *ptr, int sz)
Buffer データからリスト用ノードを生成し(new),それをリストに追加.
tList * del_tList_node(tList **node)
リスト用のノードを削除.
tList * strstr_tList(tList *pl, const char *key, int len, int no)
char* 型変数によるノードの部分文字列サーチ.
tList_data init_tList_data(void)
空のノードデータを静的に作成.データを初期化するのに使用する.
void set_tList_node_bystr(tList *pp, int id, int lv, const char *key, const char *val, void *ptr, int sz)
文字列データからリストのノードに値を設定する.それぞれのデータは複製されて設定される.
int replace_value_tList(tList *list, const char *key, int no, const char *srcval, char *value)
リスト(lt)中の no番目の keyノードの値の srcvalの部分を value に置き換える.
Buffer buffer_key_value_tList(tList *list, const char *key, char *data, int no)
リストの中から no番目の keyノードを探し出し,ノード値が data で始まる場合,そのノード値を返す.
tList * strstr_back_tList(tList *pl, const char *key, int len, int no)
char* 型変数によるリストの後方からのノードの部分文字列サーチ.
tList * find_tList_top(tList *pl)
リストの最初のノードを探す.
void set_tList_node_byBuffer(tList *pp, int id, int lv, Buffer key, Buffer val, void *ptr, int sz)
リストのノードに値を設定する.それぞれのデータは複製されて設定される.
tList * cawk_tList(char *str, char cc)
文字列を区切り文字で区切って,各項目をリストのキー部に入れて返す.連続文字列対応.
int del_tList_key(tList **pl, const char *key, int no)
plからサーチして,no番目の keyのノードを削除する.
tList * update_tList_node_bydata(tList *pp, char *srch, tList_data ldat)
keyで検索し,ノードがあればノードをコピーする.無ければ最後にノードを追加する(new).
tList * strnrvscmp_back_tList(tList *pl, const char *key, int len, int no)
char* 型変数によるリストの後方からのノードのサーチ.文字も後方から比べる.
tList * awk_tList(char *str, char cc)
文字列を区切り文字で区切って,各項目をリストのキー部に入れて返す.
tList * strstrcase_tList(tList *pl, const char *key, int len, int no)
char* 型変数によるノードの部分文字列サーチ.大文字小文字を無視.
tList * new_tList_node(void)
リスト用の空ノードを動的に生成する.
void dump_tList(FILE *fp, tList *pp)
val.buf を 16進ダンプする.他のデータは通常通り表示する.
tList * strncasecmp_back_tList(tList *pl, const char *key, int len, int no)
char* 型変数によるリストの後方からのノードのサーチ.大文字小文字を無視.
#define add_tList_node_Buffer(p, k, v)
add_tList_node_byBuffer()
#define add_tList_node_str(p, k, v)
add_tList_node_bystr()
#define TLIST_ANCHOR_NODE
アンカーノード