dbe_main.c

来自「db.* (pronounced dee-be star) is an adva」· C语言 代码 · 共 211 行

C
211
字号
/*************************************************************************** *                                                                         * * db.*                                                                    * * open source database, dbedit utility                                    * *                                                                         * * Copyright (c) 2000 Centura Software Corporation. All rights reserved.   * *                                                                         * * Use of this software, whether in source code format, or in executable,  * * binary object code form, is governed by the CENTURA OPEN SOURCE LICENSE * * which is fully described in the LICENSE.TXT file, included within this  * * distribution of source code files.                                      *  *                                                                         * **************************************************************************//*-----------------------------------------------------------------------    dbe_main.c - DBEDIT main program    This function consists of a loop which inputs, parses, and processes    one command line with each iteration.-----------------------------------------------------------------------*/#define MOD dbedit#include "db.star.h"#include "version.h"#include "dbe_type.h"#include "dbe_err.h"#include "dbe_str.h"#include "dbe_io.h"#include "dbe_ext.h"/* ********************** GLOBAL VARIABLE DECLARATIONS *************** */DBE_SLOT slot;int decimal, titles, fields, changed, unicode;/* ------------------------------------------------------------------------ */int MAIN(int argc, DB_TCHAR **argv){    int      error = 0,             err,             exit_code = 0,             tindex;    DBE_TOK  tokens[TBUFFLEN];    DB_TCHAR line[LINELEN],            *lptr;    DB_TCHAR errstr[NAMELEN];    DB_TASK *task;    dbe_ioinit();    /* Print the copyright message */    vtprintf(DBSTAR_UTIL_DESC(DB_TEXT("Database Edit")));    /* Check for usage */    if (argc <= 1)    {        dbe_err(USAGE, NULL);        return (1);    }    /* Initialize - dbe_init gets database name from argv and opens it */    if ((error = d_opentask(&task)) != S_OKAY)    {        dbe_err(ERR_OPEN, NULL);        return (1);    }    if ((error = dbe_init(argc, argv, task)) < 0)    {        d_closetask(task);        dbe_err(error, NULL);        return (1);    }    /* Get input line-by-line and process it */    dbe_select(0);    while (exit_code == 0)    {        lptr = line;        errstr[0] = 0;        err = tindex = 0;        memset(tokens, 0, sizeof(tokens));        /* Get command line in ascii form */        error = dbe_getline(dbe_getstr(M_PROMPT), line, sizeof(line) / sizeof(DB_TCHAR));        if (!error && !line[0])            continue;        /* Convert ascii to tokens & process - errors < 0, warnings > 0 */        if (error >= 0)        {            err = parse(&lptr, &tindex, tokens, TBUFFLEN,                        0, errstr, sizeof(errstr), task);            err = process(tokens, tindex, &exit_code, errstr, err, task);        }        if (err)            error = err;        if (error)            dbe_err(error, errstr);    }    /* Terminate */    if ((error = dbe_term(errstr, task)) < 0)        dbe_err(error, errstr);    return 0;}/* ------------------------------------------------------------------------ *//* Execute commands stored in token array */int process(DBE_TOK *tokens, int max_tok, int *exit_code, DB_TCHAR *errstr,            int error, DB_TASK *task){    int tok, warning;    warning = error;    /* If error occurred in parsing it may have been source command. Input     * file name cannot be handled by parser - always rejected */    if (error < 0)    {        if (error == UNX_TOK         && tokens[0].type == TYPE_KWD         && tokens[0].ival == K_SOURCE)            error = in_open(errstr);        return error;    }    for (tok = error = 0; tok < max_tok && error >= 0;)    {        switch (tokens[tok].type)        {            case TYPE_KWD:                switch (tokens[tok].ival)                {                    case K_SHOW:                        error = show(tokens, &tok, task);                        break;                    case K_DISP:                        error = disp(tokens, &tok, task);                        break;                    case K_BASE:                        error = base(tokens, &tok);                        break;                    case K_EDIT:                        error = edit(tokens, &tok, errstr, task);                        break;                    case K_GOTO:                        error = dgoto(tokens, &tok, errstr, task);                        break;                    case K_VERIFY:                        error = verify(tokens, &tok, errstr, task);                        break;                    case K_REREAD:                        error = reread(task);                        tok++;                        break;                    case K_QMARK:                    case K_HELP:                        error = help(0, task);                        tok++;                        break;                    case K_NOTLS:                        titles = 0;                        tok++;                        break;                    case K_TITLES:                        titles = 1;                        tok++;                        break;                    case K_NOFLDS:                        fields = 0;                        tok++;                        break;                    case K_FIELDS:                        fields = 1;                        tok++;                        break;                    case K_SOURCE:                        error = UNX_END;                        tok++;                        break;                    case K_EXIT:                        *exit_code = 1;                        tok++;                        break;                    default:                        tok++;                        break;                }                break;            default:                tok++;                break;        }    }    return (error ? error : warning);}VXSTARTUP("dbedit", 0)

⌨️ 快捷键说明

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