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

📄 dalschem.c

📁 db.* (pronounced dee-be star) is an advanced, high performance, small footprint embedded database fo
💻 C
字号:
/*************************************************************************** *                                                                         * * db.*                                                                    * * open source database, dal 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.                                      *  *                                                                         * **************************************************************************//*-----------------------------------------------------------------------    dalschem.c - Print part of the schema.    This function will print schema information in response to    the 'schema' command in DAL.-----------------------------------------------------------------------*//* ********************** INCLUDE FILES ****************************** */#include "db.star.h"#include "daldef.h"#include "dalvar.h"#define DAL#include "getnames.h"static void prfield(int, int, DB_TASK *);int dalschem(DB_TCHAR *name){    int recnum, setnum, i, j;    int fldnum;    DB_TASK *task = DalDbTask;    /* required for macros, e.g. task->size_rt */    if (vtstrlen(name) == 0)    {        /* print all record names */        vtprintf(DB_TEXT("Database record types:\n"));        for (i = 0; i < task->size_rt; i++)            vtprintf(DB_TEXT("   %s\n"), task->record_names[i]);        vtprintf(DB_TEXT("\nDatabase set types:\n"));        for (i = 0; i < task->size_st; i++)            vtprintf(DB_TEXT("   %s\n"), task->set_names[i]);        return (0);    }    /* first check the records */    if ((recnum = getrec(name, task)) != -1)    {        /* print record information */        vtprintf(DB_TEXT("Record type: %s\n"), task->record_names[recnum]);        for (i = task->record_table[recnum].rt_fields;             i < task->record_table[recnum].rt_fields + task->record_table[recnum].rt_fdtot;             i++)        {            prfield(3, i, task);        }    }    else if ((fldnum = (int) getfld(name, -1, task)) != -1)    {        /* print field information */        prfield(0, fldnum, task);    }    else if ((setnum = getset(name, task)) != -1)    {        /* print set information */        vtprintf(DB_TEXT("Set type: %s, order: "), task->set_names[setnum]);        switch (task->set_table[setnum].st_order)        {            case FIRST:                vtprintf(DB_TEXT("FIRST"));                break;            case LAST:                vtprintf(DB_TEXT("LAST"));                break;            case ASCENDING:                vtprintf(DB_TEXT("ASCENDING"));                break;            case DESCENDING:                vtprintf(DB_TEXT("DESCENDING"));                break;            case NEXT:                vtprintf(DB_TEXT("NEXT"));                break;        }        vtprintf(DB_TEXT("\n   Owner record type: %s\n"),                    task->record_names[task->set_table[setnum].st_own_rt]);        vtprintf(DB_TEXT("   Member record type(s):\n"));        for (i = task->set_table[setnum].st_members;             i < task->set_table[setnum].st_members + task->set_table[setnum].st_memtot;             i++)        {            vtprintf(DB_TEXT("      %s"), task->record_names[task->member_table[i].mt_record]);            if (task->set_table[setnum].st_order == 'a' ||                 task->set_table[setnum].st_order == 'd')            {                vtprintf(DB_TEXT(", sorted by: "));                for (j = task->member_table[i].mt_sort_fld;                     j < task->member_table[i].mt_sort_fld + task->member_table[i].mt_totsf;                     j++)                    vtprintf(DB_TEXT("%s\n"), task->field_names[task->sort_table[j].se_fld]);            }            else                vtprintf(DB_TEXT("\n"));        }    }    else        vtprintf(DB_TEXT("%s not found in schema\n"), name);    return (0);}static void prfield(int offset, int fldnum, DB_TASK *task){    int i;    for (i = 0; i < offset; i++)        vtprintf(DB_TEXT(" "));    vtprintf(DB_TEXT("Field: %s, type: "), task->field_names[fldnum]);    switch (task->field_table[fldnum].fd_type)    {        case CHARACTER:            vtprintf(DB_TEXT("CHARACTER"));            break;        case WIDECHAR:            vtprintf(DB_TEXT("WIDECHAR"));            break;        case SHORTINT:            vtprintf(DB_TEXT("SHORT INTEGER"));            break;        case REGINT:            vtprintf(DB_TEXT("INTEGER"));            break;        case LONGINT:            vtprintf(DB_TEXT("LONG INTEGER"));            break;        case FLOAT:            vtprintf(DB_TEXT("FLOAT"));            break;        case DOUBLE:            vtprintf(DB_TEXT("DOUBLE"));            break;        case DBADDR:            vtprintf(DB_TEXT("DB_ADDR"));            break;        case GROUPED:            vtprintf(DB_TEXT("GROUP"));            break;    }    vtprintf(DB_TEXT(", length: %d\n"), task->field_table[fldnum].fd_len);    if (task->field_table[fldnum].fd_key != 'n')    {        for (i = 0; i < offset; i++)            vtprintf(DB_TEXT(" "));        vtprintf(DB_TEXT("   field has %s key, contained in %s\n"),            task->field_table[fldnum].fd_type == 'u' ? DB_TEXT("UNIQUE") : DB_TEXT("NON-UNIQUE"),            task->file_table[task->field_table[fldnum].fd_keyfile].ft_name);    }}

⌨️ 快捷键说明

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