www.pudn.com > jpeg1.zip > DBT.C


#include  
#include  
#include  
#include  
#include  
#include "c_base.h" 
/*open graph_text field file */ 
DBT *_Cdecl open_DBT(char *dbf_name) 
{ 
    DBT *dbt; 
    dbt=(DBT *)malloc(sizeof(DBT)); 
    if((dbt->handle=open(dbt_name,O_RDWR|O_DENYNOEN|O_BINARY))==-1) 
    { 
        free(dbt); 
        return NULL; 
    } 
    read(dbt->handle,&(dbt->filename),4); 
    return dbt; 
} 
 
/*create new DBT file*/ 
DBT *_Cdecl create_DBT(char *dbf_name) 
{ 
    DBT *dbt; 
    dbt=(DBT *)malloc(sizeof(DBT)); 
    _creat(dbt_name,0x20); 
    if((dbt->handle=open(dbt_name,O_RDWR|O_DENYNOEN|O_BINARY))==-1) 
    { 
        free(dbt); 
        return NULL; 
    } 
    dbt->filesize=4L; 
    write(dbt->handle,&(dbt->filesize),4); 
    return dbt; 
} 
 
/*close DBT file*/ 
int _Cdecl close_DBT(DBT *dbt) 
{ 
    if(dbt==NULL) 
    return 0; 
    lseek(dbt->handle,0L,SEEK_SET); 
    write(dbt->handle,&(dbt->filesize),4); 
    close(dbt->handle); 
    free(dbt); 
    return 1; 
} 
 
int _Cdecl put_gt(DBF *dbt,int field_no,DBT *dbt,long info_len,\ 
   void *buff,int type) 
{ 
    GRAPH_TEXT gt; 
    char format[6]; 
    if(dbt==NULL||dbf==NULL||field_no>dbt->fld_count||\ 
      dbf->dbf_stru[field_no-1].field_type!='M') 
      return 0; 
    gt.modify_tag='#'; 
    gt.field_type=type; 
    gt.addr=dbt->filesize; 
    gt.len=info_len; 
    itoa(field_no,format,10); 
    strcat(format,"g"); 
    put_record(dbf,format,gt); 
    lseek(dbt->handle,0L,SEEK_END); 
    if(write(dbt->handle,buff,info_len)==0) 
    return 0; 
    dbt->filesize+=info_len; 
    return 1; 
} 
 
/*get a graph_text item to buffer*/ 
int _Cdecl get_gt(DBF *dbf,int field_no,DBT *dbt,void *buff) 
{ 
    GRAPH_TEXT gt; 
    char format[6]; 
    if(dbt==NULL||dbf==NULL||field_no>dbt->fld_count||\ 
      dbf->dbf_stru[field_no-1].field_type!='M') 
      return 0; 
    itoa(field_no,format,10); 
    strcat(format,"g"); 
    get_record(dbf,format,>); 
    lseek(dbt->handle,gt.addr,SEEK_SET); 
    if(read(dbt->handle,buff,gt.len)==0) 
       return 0; 
    return 1; 
} 
 
/*---write file content to database Memo field-------- */ 
int _Cdecl file_to_gt(DBF *dbf,int field_no,DBT *dbt,char *filename,int type) 
{ 
    GRAPH_TEXT gt; 
    char format[6]; 
    int file_handle; 
    char buff; 
    if(dbt==NULL||dbf==NULL||field_no>dbt->fld_count||\ 
      dbf->dbf_stru[field_no-1].field_type!='M'\ 
      ||(file_handle=open(filename,O_RDONLY|BINARY))==0) 
      return 0; 
    itoa(field_no,format,10); 
    strcat(format,"g"); 
    gt.modify_tag='#'; 
    gt.field_type=type; 
    gt.addr=dbt->filesize; 
    gt.len=filelength(file_handle); 
    lseek(dbt->handle,0L,SEEK_END); 
    while(eof(file_handle)==0) 
    { 
        read(file_handle,&buff,1); 
        write(dbt->handle,&buff,1); 
    } 
    dbt->filesize+=gt.len; 
    put_record(dbf,format,gt); 
    return 1; 
} 
 
/*put Memo field into a file*/ 
int _Cdecl gt_to_file(DBF *dbf,int field_no,DBT *dbt,char *filename) 
{ 
    GRAPH_TEXT gt; 
    char format[6]; 
    int file_handle; 
    int i; 
    char buff; 
    if(dbt==NULL||dbf==NULL||field_no>dbt->fld_count||\ 
      dbf->dbf_stru[field_no-1].field_type!='M') 
      return 0; 
    if((file_handle=_creat(filename,0x20))==-1) 
    return 0; 
    itoa(field_no,format,10); 
    strcat(format,"g"); 
    get_record(dbf,format,>); 
    lseek(dbt->handle,gt.addr,SEEK_SET); 
    for(i=0;ihandle,&buff,1); 
        write(file_handle,&buff,1); 
    } 
    return 1; 
} 
 
/*delete Memo field content*/ 
int _Cdecl delete_gt(DBF *dbf,int field_no) 
{ 
    GRAPH_TEXT gt; 
    char format[6]; 
    if(dbt==NULL||dbf==NULL||field_no>dbt->fld_count||\ 
      dbf->dbf_stru[field_no-1].field_type!='M') 
      return 0; 
    itoa(field_no,format,10); 
    strcat(format,"g"); 
    get_record(dbf,format,>); 
    if(gt.modify_tag!='#') 
        return 0; 
    gt.modify_tag='#'; 
    put_record(dbf,format,gt); 
    return 1; 
} 
 
/*pack Memo file*/ 
int _Cdecl pack_gt(DBF *dbf,int field_no,char *old_dbt_name,\ 
    char *new_dbt_name) 
{ 
    DBT *old_dbt=open_DBT(old_dbt_name); 
    DBT *new_dbt=create_DBT(new_dbt_name); 
    GRAPH_TEXT gt; 
    char format[6]; 
    char buff; 
    long i; 
    if(old_dbt==NULL||new_dbt==NULL||dbf==NULL||field_no>dbt->fld_count||\ 
      dbf->dbf_stru[field_no-1].field_type!='M') 
      return 0; 
    itoa(field_no,format,10); 
    strcat(format,"g"); 
    go_record(dbf,1); 
    while(!eof_DBF(dbf)) 
    { 
        get_record(dbf,format,>); 
        if(gt.modify_tag=='#') 
        { 
            lseek(old_dbt->handle,gt.addr,SEEK_SET); 
            gt.addr=filelength(new_dbt->handle); 
            for(i=0L;ihandle,&buff,1); 
                write(new_dbt->handle,&buff,1); 
            } 
            put_record(dbf,format,gt); 
       } 
       skip(dbf,1); 
    } 
    new_dbt->filesize=filelength(new_dbt->handle); 
    close_DBT(odl_dbt); 
    close_DBT(new_dbt); 
    return 1; 
}