dbe_show.c

来自「db.* (pronounced dee-be star) is an adva」· C语言 代码 · 共 635 行 · 第 1/2 页

C
635
字号
        }        dbe_out(task->set_names[i], STDOUT);        comma = 1;        j += len;    }    dbe_out(DB_TEXT("\n"), STDOUT);        return 0;}/* Show details for one set*/int show_st(int index, DB_TASK *task){    DB_TCHAR buffer[LINELEN];    int i, n, first, last, order = 0, fields, comma;    /* Set Type */    vstprintf(buffer, DB_TEXT("%s%s (%d)"),        dbe_getstr(M_SHOWST), task->set_names[index], index);    dbe_out(buffer, STDOUT);    /* Order */    vtstrcpy(buffer, dbe_getstr(M_SHOWSD));    fields = 0;    switch (task->set_table[index].st_order)    {        case DB_TEXT('f'):            order = M_SETFST;            break;        case DB_TEXT('l'):            order = M_SETLST;            break;        case DB_TEXT('n'):            order = M_SETNXT;            break;        case DB_TEXT('a'):            order = M_SETASC;            fields = 1;            break;        case DB_TEXT('d'):            order = M_SETDSC;            fields = 1;            break;    }    vtstrcat(buffer, dbe_getstr(order));    dbe_out(buffer, STDOUT);    if (fields)    {        vtstrcpy(buffer, dbe_getstr(M_TAB));        vtstrcat(buffer, dbe_getstr(M_SHOWSF));        comma = 0;        for (i = 0; i < task->size_srt; i++)        {            if (task->sort_table[i].se_set == index)            {                if (comma)                    vtstrcat(buffer, DB_TEXT(", "));                vtstrcat(buffer, task->field_names[task->sort_table[i].se_fld]);                comma = 1;            }        }        dbe_out(buffer, STDOUT);    }    /* Owner */    n = task->set_table[index].st_own_rt;    vstprintf(buffer, DB_TEXT("%s%s (%d)"),        dbe_getstr(M_SHOWSO), task->record_names[n], n);    dbe_out(buffer, STDOUT);    /* Members */    vtstrcpy(buffer, dbe_getstr(M_SHOWSM));    first = task->set_table[index].st_members;    last = first + task->set_table[index].st_memtot;    comma = 0;    for (i = first; i < last; i++)    {        n = task->member_table[i].mt_record;        vstprintf(buffer + vtstrlen(buffer),            DB_TEXT("%s (%d)"), task->record_names[n], n);        if (i != last - 1)            vtstrcat(buffer, DB_TEXT(", "));    }    dbe_out(buffer, STDOUT);    /* Flags */    vtstrcpy(buffer, dbe_getstr(M_SHOWSG));    if (task->set_table[index].st_flags & TIMESTAMPED)        vtstrcat(buffer, dbe_getstr(M_FLAGST));    vtstrcat(buffer, DB_TEXT("\n"));    dbe_out(buffer, STDOUT);    return 0;}/* ********************** Show keys ********************************** *//* Show list of keys in database, in same format as normal fields*/int show_nkt(DB_TASK *task){    int i;    dbe_out(dbe_getstr(M_SHOWKL), STDOUT);    for (i = 0; i < task->size_fd;)        show_fd(&i, 0, 1, task);    return 0;}/* ********************** Show fields ******************************** *//* Show list of fields in database*/int show_nfd(DB_TASK *task){    int i;    dbe_out(dbe_getstr(M_SHOWRF), STDOUT);    for (i = 0; i < task->size_fd;)        show_fd(&i, 0, 0, task);    return 0;}/* Show one field*/int show_fd(    int *index_ptr,      /* Index in field table */    int level,           /* Recursion level, for tabs */    int keys,            /* Flag - only show keys */    DB_TASK *task){    FIELD_ENTRY *fd_ptr;    DB_TCHAR buffer[LINELEN], dimstr[16];    int i, j, n, index, comma, optkey, compound;    short dim, flags;    n = (index = *index_ptr) + 1;    fd_ptr = &task->field_table[index];    flags = fd_ptr->fd_flags;    /* Just key fields ? */    if (keys && fd_ptr->fd_key == 'n')    {        *index_ptr = n;        return(0);    }    /* Spacing */    vtstrcpy(buffer, dbe_getstr(M_TAB));    for (i = 0; i < level; i++)        vtstrcat(buffer, dbe_getstr(M_TAB));    /* Key fields - compound / optional / unique */    if (((compound = (fd_ptr->fd_type == 'k')) != 0) || fd_ptr->fd_key != 'n')    {        if (compound)            vtstrcat(buffer, dbe_getstr(M_COMP));        if (((flags & OPTKEYMASK) >> OPTKEYSHIFT) & OPTKEYNDX)            vtstrcat(buffer, dbe_getstr(M_OPT));        if (fd_ptr->fd_key == 'u')            vtstrcat(buffer, dbe_getstr(M_UNIQ));        vtstrcat(buffer, dbe_getstr(M_KEY));    }    /* Field type */    if (flags & UNSIGNEDFLD)        vtstrcat(buffer, dbe_getstr(M_UNSIGN));    switch (fd_ptr->fd_type)    {        case 'c':            vtstrcat(buffer, dbe_getstr(M_CHAR));            break;        case 'C':            vtstrcat(buffer, dbe_getstr(M_WIDECHAR));            break;        case 's':            vtstrcat(buffer, dbe_getstr(M_SHORT));            break;        case 'i':            vtstrcat(buffer, dbe_getstr(M_INT));            break;        case 'l':            vtstrcat(buffer, dbe_getstr(M_LONG));            break;        case 'f':            vtstrcat(buffer, dbe_getstr(M_FLOAT));            break;        case 'F':            vtstrcat(buffer, dbe_getstr(M_DOUBLE));            break;        case 'd':            vtstrcat(buffer, dbe_getstr(M_ADDR));            break;        case 'g':            vtstrcat(buffer, dbe_getstr(M_STRUCT));            vtstrcat(buffer, DB_TEXT("\n"));            dbe_out(buffer, STDOUT);            while ((task->field_table[n].fd_flags & STRUCTFLD) && (n < task->size_fd))                show_fd(&n, level + 1, 0, task);            vtstrcpy(buffer, dbe_getstr(M_TAB));            vtstrcat(buffer, DB_TEXT("} "));            break;    }    /* Field name */    vtstrcat(buffer, task->field_names[index]);    /* Array dimensions */    for (i = 0; i < MAXDIMS; i++)    {        if (!(dim = fd_ptr->fd_dim[i]))            break;        vstprintf(dimstr, DB_TEXT("[%d]"), dim);        vtstrcat(buffer, dimstr);    }    /* Compound keys */    if (compound)        vtstrcat(buffer, DB_TEXT(" {"));    vtstrcat(buffer, DB_TEXT("\n"));    if (compound)    {        dbe_out(buffer, STDOUT);        for (j = fd_ptr->fd_ptr; task->key_table[j].kt_key == index; j++)        {            vtstrcpy(buffer, dbe_getstr(M_TAB));            for (i = 0; i < level + 1; i++)                vtstrcat(buffer, dbe_getstr(M_TAB));            vtstrcat(buffer, task->field_names[task->key_table[j].kt_field]);            if (task->key_table[j].kt_sort == 'a')                vtstrcat(buffer, dbe_getstr(M_ASC));            else                vtstrcat(buffer, dbe_getstr(M_DESC));            vtstrcat(buffer, DB_TEXT("\n"));            dbe_out(buffer, STDOUT);        }        vtstrcpy(buffer, dbe_getstr(M_TAB));        for (i = 0; i < level; i++)            vtstrcat(buffer, dbe_getstr(M_TAB));        vtstrcat(buffer, DB_TEXT("}\n"));    }    dbe_out(buffer, STDOUT);    /* Flags */    if (flags)    {        comma = 0;        vtstrcpy(buffer, dbe_getstr(M_TAB));        for (i = 0; i < level; i++)            vtstrcat(buffer, dbe_getstr(M_TAB));        vtstrcat(buffer, dbe_getstr(M_SHOWFF));        if (flags & SORTFLD)        {            vtstrcat(buffer, dbe_getstr(M_FLAGFF));            comma = 1;        }        if (flags & STRUCTFLD)        {            if (comma)                vtstrcat(buffer, DB_TEXT(", "));            vtstrcat(buffer, dbe_getstr(M_FLAGFS));            comma = 1;        }        if (flags & UNSIGNEDFLD)        {            if (comma)                vtstrcat(buffer, DB_TEXT(", "));            vtstrcat(buffer, dbe_getstr(M_FLAGFU));            comma = 1;        }        if (flags & COMKEYED)        {            if (comma)                vtstrcat(buffer, DB_TEXT(", "));            vtstrcat(buffer, dbe_getstr(M_FLAGFC));            comma = 1;        }        if ((optkey = ((flags & OPTKEYMASK) >> OPTKEYSHIFT) & OPTKEYNDX) != 0)        {            optkey--;            if (comma)                vtstrcat(buffer, DB_TEXT(", "));            vstprintf(buffer + vtstrlen(buffer), DB_TEXT("%s%d"),                dbe_getstr(M_FLAGFO), optkey);        }        vtstrcat(buffer, DB_TEXT("\n"));        dbe_out(buffer, STDOUT);    }    *index_ptr = n;    return 0;}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?