prdbd.c
来自「db.* (pronounced dee-be star) is an adva」· C语言 代码 · 共 477 行 · 第 1/2 页
C
477 行
/*************************************************************************** * * * db.* * * open source database, prdbd 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. * * * **************************************************************************//*----------------------------------------------------------------------- prdbd.c - db.* Database Dictionary Report Utility This program produces a formatted report of the database dictionary.-----------------------------------------------------------------------*/#define MOD prdbd#include "db.star.h"#include "version.h"/* ********************** LOCAL FUNCTION DECLARATIONS **************** */static int usage(void);void EXTERNAL_FCN prdbd_dberr(int errnum, DB_TCHAR *msg){ vtprintf(DB_TEXT("\n%s (errnum = %d)\n"), msg, errnum);}/* Print db.* Database Schema Tables*/int MAIN(int argc, DB_TCHAR *argv[]){ DB_TCHAR *dbname = NULL; DB_TCHAR version[80]; DB_TCHAR *pv = DB_TEXT(""); long m; int i, j, v; int stat, symbolic = 1; DB_TASK *task = NULL; SG *sg = NULL;#if defined(SAFEGARDE) DB_TCHAR *cp; DB_TCHAR *password; int mode = NO_ENC;#endif vtprintf(DBSTAR_UTIL_DESC(DB_TEXT("Database Dictionary Print"))); for (i = 1; i < argc && argv[i][0] == DB_TEXT('-'); i++) { switch (vtotlower(argv[i][1])) { case DB_TEXT('?'): case DB_TEXT('h'): return usage(); case DB_TEXT('c'): symbolic = 0; break; case DB_TEXT('s'): if (vtotlower(argv[i][2]) != DB_TEXT('g')) { vftprintf(stderr, DB_TEXT("Invalid option: %s\n"), argv[i]); return usage(); } if (i == argc - 1) { vftprintf(stderr, DB_TEXT("No password specified\n")); return usage(); }#if defined(SAFEGARDE) if ((cp = vtstrchr(argv[++i], DB_TEXT(','))) != NULL) { *cp++ = DB_TEXT('\0'); if (vtstricmp(argv[i], DB_TEXT("low")) == 0) mode = LOW_ENC; else if (vtstricmp(argv[i], DB_TEXT("med")) == 0) mode = MED_ENC; else if (vtstricmp(argv[i], DB_TEXT("high")) == 0) mode = HIGH_ENC; else { vftprintf(stderr, DB_TEXT("Invalid encryption mode\n")); return usage(); } password = cp; } else { mode = MED_ENC; password = argv[i]; } break;#else vftprintf(stderr, DB_TEXT("SafeGarde is not available in this version\n")); return 1;#endif default: vftprintf(stderr, DB_TEXT("Invalid option: %s\n"), argv[i]); return usage(); } } if (i == argc) { vftprintf(stderr, DB_TEXT("Database name not supplied\n")); return usage(); } dbname = argv[i++]; while (i == argc) vftprintf(stderr, DB_TEXT("Ignoring option %s\n"), argv[i++]); if ((stat = d_opentask(&task)) != S_OKAY) { vftprintf(stderr, DB_TEXT("Failed to open task (%d)\n"), stat); return 1; }#if defined(SAFEGARDE) if (mode != NO_ENC && (sg = sg_create(mode, password)) == NULL) { vftprintf(stderr, DB_TEXT("Failed to create SafeGarde context\n")); goto exit; }#endif if ((stat = d_set_dberr(prdbd_dberr, task)) != S_OKAY) { vftprintf(stderr, DB_TEXT("Failed to set error handler (%d)\n"), stat); goto exit; } if ((stat = d_on_opt(READNAMES, task)) != S_OKAY) { vftprintf(stderr, DB_TEXT("Failed to set options (%d)\n"), stat); goto exit; } if ((stat = d_open_sg(dbname, DB_TEXT("o"), sg, task)) != S_OKAY) { if (stat == S_INVDB) vftprintf(stderr, DB_TEXT("Unable to locate database: %s\n"), dbname); else if (stat == S_INCOMPAT) vftprintf(stderr, DB_TEXT("Incompatible dictionary file. Re-run ddlp.\n")); else vftprintf(stderr, DB_TEXT("Error %d opening database, %s not printed.\n"), stat, dbname); goto exit; } /* get dbd version */ v = (int) DB_REF(db_ver); if (v < 0) { v *= -1; pv = DB_TEXT(" Unicode"); } /* compute memory reqts for dictionary tables */ m = (long) task->size_ft * (long) sizeof(FILE_ENTRY); m += (long) task->size_rt * (long) sizeof(RECORD_ENTRY); m += (long) task->size_fd * (long) sizeof(FIELD_ENTRY); m += (long) task->size_st * (long) sizeof(SET_ENTRY); m += (long) task->size_mt * (long) sizeof(MEMBER_ENTRY); m += (long) task->size_srt * (long) sizeof(SORT_ENTRY); m += (long) task->size_kt * (long) sizeof(KEY_ENTRY); d_dbver(DB_TEXT("%n Version %v"), version, sizeof(version) / sizeof(DB_TCHAR)); vtprintf(DB_TEXT("%s\n"), version); vtprintf(DB_TEXT("Database Dictionary Tables for Database: %s\n"), dbname); vtprintf(DB_TEXT("DBD Version: %d.%02d%s\n\n"), v / 100, v % 100, pv); vtprintf(DB_TEXT("REQUIRED MEMORY: %ld BYTES\n\n"), m); vtprintf(DB_TEXT("\n\n------------------------------------------------------------------\n")); vtprintf(DB_TEXT("FILE TABLE:\n\n")); vtprintf(DB_TEXT("file sta type slots sl sz pg sz initial next pct flgs name\n")); vtprintf(DB_TEXT("---- --- ---- ----- ----- ----- -------- -------- --- ---- ----\n")); for (i = 0; i < task->size_ft; ++i) { vtprintf(DB_TEXT("%3d "), i); vtprintf(DB_TEXT(" %c "), task->file_table[i].ft_status); vtprintf(DB_TEXT(" %c "), task->file_table[i].ft_type); vtprintf(DB_TEXT("%4d "), task->file_table[i].ft_slots); vtprintf(DB_TEXT("%4d "), task->file_table[i].ft_slsize); vtprintf(DB_TEXT("%4d "), task->file_table[i].ft_pgsize); vtprintf(DB_TEXT("%8ld "), task->file_table[i].ft_initial); vtprintf(DB_TEXT("%8ld "), task->file_table[i].ft_next); vtprintf(DB_TEXT("%3d "), task->file_table[i].ft_pctincrease); vtprintf(DB_TEXT("%04x "), task->file_table[i].ft_flags); vtprintf(DB_TEXT("%-24s\n"), task->file_table[i].ft_name); } vtprintf(DB_TEXT("\n\n------------------------------------------------------------------\n")); vtprintf(DB_TEXT("RECORD TABLE:\n\n")); if (!symbolic) { vtprintf(DB_TEXT(" 1st tot\n")); vtprintf(DB_TEXT("rec # file # len data fld flds flags\n")); vtprintf(DB_TEXT("----- ------ ---- ---- --- ---- -----\n")); for (i = 0; i < task->size_rt; ++i) { vtprintf(DB_TEXT("%4d %4d "), i, task->record_table[i].rt_file); vtprintf(DB_TEXT("%4d "), task->record_table[i].rt_len); vtprintf(DB_TEXT("%4d "), task->record_table[i].rt_data); vtprintf(DB_TEXT("%3d "), task->record_table[i].rt_fields); vtprintf(DB_TEXT("%4d "), task->record_table[i].rt_fdtot); vtprintf(DB_TEXT("%04x\n"), task->record_table[i].rt_flags); } } else { vtprintf(DB_TEXT(" [#]first tot\n")); vtprintf(DB_TEXT(" [#]record file len data field flds flags\n")); vtprintf(DB_TEXT("-------------- ---------- ---- ---- --------------- ---- -----\n")); for (i = 0; i < task->size_rt; ++i) { vtprintf(DB_TEXT("[%2d]%-10.10s %-10.10s "), i, task->record_names[i], task->file_table[task->record_table[i].rt_file].ft_name); vtprintf(DB_TEXT("%4d "), task->record_table[i].rt_len);
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?