示例#1
0
void dec_delta(FILE *in_fp)
{
    printf("Delta decoding...\n");
    for(curr_channel=0; curr_channel<input_file_header->numChannels; curr_channel++) {
        if(output_vector[curr_channel])
            free(output_vector[curr_channel]);
       
        uint32_t output_length;

        if(first_enc==DELTA) 
            output_length = ((output_buffer[curr_channel].n_bytes*8 - (8-output_buffer[curr_channel].bits_last))/(max_bits[curr_channel]+1)) + 1;
        else
            output_length = ((output_buffer[curr_channel].n_bytes*8 - (8-output_buffer[curr_channel].bits_last))/(nbits_run[curr_channel]+nbits_code[curr_channel])) + 1;

        output_vector[curr_channel] = calloc(output_length, sizeof(uint32_t));

        memset(output_vector[curr_channel], 0, output_length);
        printf("AUIIIIIIIII");
        if(first_enc==DELTA)
            dt_decode(&output_buffer[curr_channel], max_bits[curr_channel], output_vector[curr_channel], output_length, input_file_header->bitsPerSample, firsts[curr_channel]);
        else
            dt_decode(&output_buffer[curr_channel], max_bits[curr_channel], output_vector[curr_channel], output_length, nbits_run[curr_channel] + nbits_code[curr_channel], firsts[curr_channel]);

        bdestroy(&output_buffer[curr_channel]);
        binit(&output_buffer[curr_channel], output_length);

        /* O PROBLEMA PODE SER O OUTPUT_LENGTH!!!! */
        if(first_enc==DELTA)
            b_from_uint32_all(&output_buffer[curr_channel], output_vector[curr_channel], output_length, input_file_header->bitsPerSample);
        else
            b_from_uint32_all(&output_buffer[curr_channel], output_vector[curr_channel], output_length, nbits_code[curr_channel]+nbits_run[curr_channel]);

        /*bprint(&output_buffer[curr_channel]);*/
        /*bprint( &(output_buffer[curr_channel]));*/
    }
}
示例#2
0
文件: vdt-1.0.c 项目: vSlipenchuk/vdb
int buf_dt_str(uchar *Buf,int maxSize, char *Fmt, date_time D) {
//  int   len=0;
  int Start[7],i,k,l=0; char *B=Buf;

  dt_decode(D, Start+1, Start+2, Start+3, Start+4, Start+5, Start+6);
  Start[0]=Start[1]%100; i=0;
  while(*Fmt)
  {
    if(l+40>maxSize){ *B=0; return 0; } // No More Size
    for(i=0; i<13; i++)
      if(strncmp(Fmdate_time[i].In,Fmt,strlen(Fmdate_time[i].In))==0) break;
    if(i==13){ l++; *B=*Fmt; Fmt++; B++;}
    else
    {
      if(Fmdate_time[i].Shift==-1) k=sprintf(B,"%s",dt_mon_name[Start[2]]);
      else k=sprintf(B,Fmdate_time[i].Out,Start[Fmdate_time[i].Shift]);
      l+=k; B+=k; Fmt+=strlen(Fmdate_time[i].In);
    }
  }
  *B=0;
  return 1;
}
示例#3
0
文件: vdt-1.0.c 项目: vSlipenchuk/vdb
char *dt_str(char *Fmt, date_time D) {
  char *Buf=NULL;
  int   len=0;
  int Start[7],i,k,l=0; char *B=Buf;

  dt_decode(D, Start+1, Start+2, Start+3, Start+4, Start+5, Start+6);
  Start[0]=Start[1]%100; i=0;
  while(*Fmt)
  {
    if(l+40>len){ Buf=realloc(Buf,l+40); B=Buf+l; len=l+30;}
    for(i=0; i<13; i++)
      if(strncmp(Fmdate_time[i].In,Fmt,strlen(Fmdate_time[i].In))==0) break;
    if(i==13){ l++; *B=*Fmt; Fmt++; B++;}
    else
    {
      if(Fmdate_time[i].Shift==-1) k=sprintf(B,"%s",dt_mon_name[Start[2]]);
      else k=sprintf(B,Fmdate_time[i].Out,Start[Fmdate_time[i].Shift]);
      l+=k; B+=k; Fmt+=strlen(Fmdate_time[i].In);
    }
  }
  *B=0;
  return (Buf);
}
示例#4
0
文件: ora.c 项目: vSlipenchuk/vdb
// Перекодировка is_null, in bind vars, закачка блобов и потом ora_exec
int ora_exec(database *db) {
t_ora *o = db->h;
db_col *c;
int i;
if (!o) return ora_error(db);
//if (!o->execnum)
// {
// o->execnum = 1;
 if (!ora_check_bind(db)) return 0; // Если первый раз - подвязать переменные...
// }
debugf(" ..ora - check bind ok!\n");
o->execnum++; // Номер запуска exec...
for(i=0,c=db->in.cols;i<db->in.count;i++,c++) if ((c->dbflag & 2)==0) { // Все ин-параметры
   if(c->type==dbDate) // Перекодируем дату
   {
    unsigned char *D=(void*)c->dbvalue; double uval = *(double*)c->value;
    int Year,Month,Day,Hour,Min,Sec;
    if (!uval) c->null=ORA_NULL;
    else {
    c->null=0;
    dt_decode(uval,&Year,&Month,&Day,&Hour,&Min,&Sec);
    D[0]=100+Year/100; D[1]=Year%100+100;
    D[2]=Month; D[3]=Day; D[4]=Hour+1; D[5]=Min+1; D[6]=Sec+1;
    }
    //printf("ORA uval=%lf\n",uval); getch();
  }
  else if (c->type == dbBlob && (!(c->dbflag & 2))) { // Закачиваем блобы...
  db_blob_handle *b = (void*) c->value; // Странно, но я храню блоб тута...
  int cnt_write = 0, offset = 0, code;
  cnt_write = b->len; // Сколько записывать...
  code = OCILobTrim(o->svchp, o->errhp, o->blob,0);
  //printf("2LobTrimmed data=%d len=%d olob=%d code=%d!\n",b->data,b->len,o->blob,code);
  c->null = ORA_NULL;
  if (b->data && b->len>0)
   {
   c->null = 0;
   if ( !ora_ok(db->err_code = OCILobWrite(o->svchp, o->errhp, o->blob,
                  &cnt_write, 1,
                 (dvoid *) b->data, (ub4) b->len, OCI_ONE_PIECE,
                   0, 0 csid_csfrm) )) {
             debugf("F**k! cant write blob err_code=%d ND=%d!\n",db->err_code,OCI_NEED_DATA);
            //if (db->err_code!=-2) // ZU?
             return ora_error(db);
           }
   debugf("vora- ok write %d bytes of lob\n",b->len);
   }
  }
  }
debugf(" ..ora - begin OCIStmtExecute stmt=%p!\n",o->stmt);
db->err_code = OCIStmtExecute(o->svchp, o->stmt, o->errhp, (ub4) 1, (ub4) 0,
               (CONST OCISnapshot *) NULL, (OCISnapshot *) NULL,OCI_DEFAULT);
debugf("ORARES on exec = %d\n",db->err_code);
if (db->err_code == OCI_NO_DATA) return 1; // ExecOK, данные не сфетчились...
if (!ora_ok(db->err_code)) return ora_error(db); // А это уже ошибка...
debugf("ORA - decode out\n");
//return 1; // Далее - идет обратная декодировка. Пока не отлаживаем
for(i = 0, c = db->in.cols;i<db->in.count; i++, c++) if (c->dbflag & 2) { // Смотрим на аут-параметры
    int is_null;
     debugf("----ORA --- chek OUT HERE=%s\n",c->name);
    //printf("NULL=%d on %s\n",*(short*)c->null,c->name);
    //is_null = c->null && ((*(short*)(c->null)) );
    //if (c->null) *(int*)(c->null) = is_null;
    //printf("Check in var=%s is_null = %d val=%d\n",c->name,is_null,*(int*)c->value);

    //if (is_null) continue;
    if ( c->type==dbDate) {
      unsigned char *D=(void*)c->dbvalue;
      if (c->null) *(double*)c->value=0;
          else *(double*)c->value=dt_encode((D[0]-100)*100+(D[1]-100),
                                    D[2],D[3],D[4]-1,D[5]-1,D[6]-1);
    }
  else if (c->type==dbBlob) { // Вытягиваем блобу...
    db_blob_handle *b=(void*)c->value; // Это указатель на "вытащенный блоб", его нужно установить на...
    int cnt_read = 0, offset = 0, blob_length = 0;
    debugf("ORA --- chek out blob null==%d\n",c->null);
    if (c->null) {b->len=0; continue;}
	  /// OCILobLock ???
    //db->err_code = OCILobOpen ( o->svchp, o->errhp, o->blob_read, OCI_LOB_READONLY );
    //printf("Lob opened error = %d\n", db->err_code);
    //if (db->out.size<1) {
	//    db->out.data = realloc(db->out.data,1);
	   // db->out.size = 1;
	   // }
    //OCILobRead(o->svchp,o->errhp,o->blob_read,  // Интересно, такое бывает?
      //&cnt_read, 1, db->out.blob, 1 , 0, 0); // Just for FUN ...
       // printf("Read = %d bytes\n", cnt_read );

    if (!ora_ok(db->err_code=OCILobGetLength (o->svchp,o->errhp,o->blob_read, &blob_length)))
    {      debugf("Fail get blob length code=%d result=%d!\n",db->err_code,blob_length);
	    blob_length = 100* 1024 ;
	    // return 1; // ZUZUKA ora_error(db);
    }
    //printf("Getting out blob len = %d..\n",blob_length);
    // - Сюда сливаются БЛОБЫ от SELCETA --  db->out.blob,&db->out.bsize,&db->out.blen
    if (blob_length +1 >= db->out.bsize)
      {
      // Еще место нужно... Realloc...
      db->out.bsize = blob_length+1024; // Новая длина
      db->out.blob = realloc(db->out.blob,db->out.bsize); // Думаем что памяти достаточно
      }
   if (!ora_ok(db->err_code=OCILobRead(o->svchp,o->errhp,o->blob_read,  // Интересно, такое бывает?
      &cnt_read, 1, db->out.blob, db->out.bsize, 0, 0  csid_csfrm)))
        {
	//printf("Fail read blob err=%d!\n");
        return ora_error(db);
	}
   //OCILobTrim(o->svchp, o->errhp, o->blob_read,0);
   db->out.blen = cnt_read+1; // Zero termanited на всякий случай...
   //printf("Read blob len = %d bh=%d\n",cnt_read,b);
   // Корректируем указатель, т.к. блоб мог реаллокнуться..
   b->data = db->out.blob; // Все заточено под один БЛОБ
   b->len  = cnt_read;
   b->data[b->len] = 0; // Терминирование нулем - вещь полезная...
    }
  }
return 1;
}
示例#5
0
文件: vdt-1.0.c 项目: vSlipenchuk/vdb
int dt2arr(double date, int *Y) { // Extracts date to 7 bytes array ->>>
return dt_decode(date, Y, Y+1,Y+2, Y+3,Y+4,Y+5); // Date&Time
}
示例#6
0
文件: vdt-1.0.c 项目: vSlipenchuk/vdb
char *dt_rus(date_time D) {
  int Year,Month,Day,Hour,Min,Sec;
  dt_decode(D,&Year,&Month,&Day,&Hour,&Min,&Sec);
  sprintf(szdtfmt,"%02d.%02d.%04d %02d:%02d:%02d",Day,Month,Year,Hour,Min,Sec);
 return szdtfmt;
}