📄 disprec.c
字号:
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 + -