⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 disprec.c

📁 db.* (pronounced dee-be star) is an advanced, high performance, small footprint embedded database fo
💻 C
📖 第 1 页 / 共 2 页
字号:
        if (creat_flag)            fldtxt[0] = '\0';        else            fldtotxt(fldlist[fld], rec + fldp, fldtxt);flded:        if ((dir = ed_field(creat_flag)) != 0)        {            if ((tp = txttofld(fldlist[fld], fldtxt, rec + fldp)) != NULL)            {                /* input error */                col = (int) (tp - fldtxt);                sprintf(msg, "input error at pos %d: ", col);                strncat(msg, tp, 24);                usererr(msg);                goto flded;            }            else                pr_field(fld, NOREV);        }        else        {            pr_field(fld, NOREV);            break;        }        fld += dir;        if (fld < topfld)            fld = topfld;    }}/* ========================================================================    Create record*/void create_rec(){    register int i, start, end, offset;    if (task->record_table[rt].rt_fdtot <= 0)    {        /* system or fieldless record */        return;    }    /* clear record area for displayed fields */    offset = task->record_table[rt].rt_data;    start = task->field_table[fldlist[topfld]].fd_ptr - offset;    i = fldlist[totflds - topfld < FPP ? totflds - 1 : topfld + FPP - 1];    end = task->field_table[i].fd_ptr + task->field_table[i].fd_len - offset;    for (i = start; i < end; ++i)        rec[i] = '\0';    /* redisplay record contents */    --curpg;    next_rec();    creat_flag = 1;    edit_rec();    creat_flag = 0;}/* ========================================================================    Display previous page of fields*/void prev_rec(){    if (curpg <= 1)    {        usererr("first page");        return;    }    curpg -= 2;    next_rec();}/* ========================================================================    Write entered/modified record to database*/void write_rec(){    int stat;    char msg[81];    register int i, set;    if (task->record_table[rt].rt_fdtot == -1)    {        usererr("cannot write system record");        return;    }    if (entry_flag)    {        if ((stat = d_fillnew(rt + RECMARK, rec, task, CURR_DB)) == S_OKAY)            usererr("record entered");        if (autoset)        {            /* connect record to each set of which it is a member */            for (set = 0; set < task->size_st; ++set)            {                for (i = task->set_table[set].st_members;                     i < task->set_table[set].st_members + task->set_table[set].st_memtot;                     ++i)                {                    if (task->member_table[i].mt_record == rt)                    {                        if (d_connect(set + SETMARK, task, CURR_DB) == S_OKAY)                        {                            strcpy(msg, "record connected to set ");                            strcat(msg, task->set_names[set]);                            usererr(msg);                        }                        else                        {                            strcpy(msg, "record not connect to set ");                            strcat(msg, task->set_names[set]);                            usererr(msg);                        }                    }                }            }        }    }    else    {        if ((stat = d_recwrite(rec, task, CURR_DB)) == S_OKAY)            usererr("record modified");    }    if (stat == S_DUPLICATE)        usererr("duplicate key");}/* ========================================================================    Build optional key table*/static void bld_optkey_tab(int rec){    int tot;    register int i;    for (tot = 0, i = task->record_table[rec].rt_fields;          task->field_table[i].fd_rec == rec; ++i)    {        if (task->field_table[i].fd_flags & OPTKEYMASK)            ++tot;    }    if (tot)    {        tot_optkeys = tot;        if (optkeyflds)        {            free((char *) optkeyflds);            free((char *) optkeynms);        }        optkeyflds = (int *) calloc(tot, sizeof(int));        optkeynms = (char **) calloc(tot, sizeof(char *));        if (!optkeyflds || !optkeynms)        {            tot_optkeys = 0;            dberr(S_NOMEMORY);            return;        }        for (tot = 0, i = task->record_table[rec].rt_fields;             task->field_table[i].fd_rec == rec; ++i)        {            if (task->field_table[i].fd_flags & OPTKEYMASK)            {                optkeyflds[tot] = i;                optkeynms[tot++] = task->field_names[i];            }        }        lastoptrec = rec;    }}/* ========================================================================    Store optional key*/void store_key(){    long ckey;    int rec;    if (d_crtype(&rec, task, CURR_DB) == S_OKAY)    {        rec -= RECMARK;        if (lastoptrec != rec)        {            bld_optkey_tab(rec);        }        if (tot_optkeys)        {            /* select optional key to be stored */            tprintf("@m0300@E\nSELECT OPTIONAL KEY FIELD:\n");            okey = list_selection(6, tot_optkeys, optkeynms, 1, okey, 1);            tprintf("@m0300@E");            if (okey >= 0)            {                ckey = (long) (FLDMARK * rec + optkeyflds[okey]                               - task->record_table[rec].rt_fields);                if (d_keystore(ckey, task, CURR_DB) == S_OKAY)                    usererr("optional key stored");            }            /* Redisplay record */            curpg = 0;            next_rec();        }        else            usererr("no optional keys defined");    }}/* ========================================================================    Delete optional key*/void del_key(){    long ckey;    int rec;    if (d_crtype(&rec, task, CURR_DB) == S_OKAY)    {        rec -= RECMARK;        if (lastoptrec != rec)        {            bld_optkey_tab(rec);        }        if (tot_optkeys)        {            /* select optional key to be stored */            tprintf("@m0300@E\nSELECT OPTIONAL KEY FIELD:\n");            okey = list_selection(6, tot_optkeys, optkeynms, 1, okey, 1);            tprintf("@m0300@E");            if (okey >= 0)            {                ckey = (long) (FLDMARK * rec + optkeyflds[okey]                               - task->record_table[rec].rt_fields);                if (d_keydel(ckey, task, CURR_DB) == S_OKAY)                    usererr("optional key deleted");            }            /* Redisplay record */            curpg = 0;            next_rec();        }        else            usererr("no optional keys defined");    }}/* ========================================================================    Exit and clear screen function*/void clear_exit(){    tprintf("@c");}

⌨️ 快捷键说明

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