コード例 #1
0
ファイル: dbf2txt.c プロジェクト: ixamit/dbf2txt
void dbf_push_record (DBF *dbf, int r, FILE *fp)
{
  int k,i;
  ui32 position;
  ui16 len;
  
  if (dbf==NULL)
    return;
  
  fprintf (fp,"%09d\tx",r);
  for (k=0;k<dbf->norder;k++)
  {
    i=dbf->order[k];
    memcpy (&position,dbf->sub_header[i]->DisplacementOfFieldInRecord,sizeof(position));
    len=LengthOfField(dbf->sub_header[i]);
    memcpy (dbf->tmp_sub_record,dbf->record+position,len); dbf->tmp_sub_record[len]=0;
    
    if (_dbf_isnumeric(dbf->sub_header[i]))
      numstr_to_pad0 (dbf->tmp_sub_record);
    
    fprintf (fp,"\t%s",dbf->tmp_sub_record);
  }
  fputc ('\n',fp);
  
  // Setting RealLengthOfField in select Field(s) 
  for (k=0;k<dbf->nselect;k++)
  {
    i=dbf->select[k];
    
    memcpy (&position,dbf->sub_header[i]->DisplacementOfFieldInRecord,sizeof(position));
    len=LengthOfField(dbf->sub_header[i]);
    memcpy (dbf->tmp_sub_record,dbf->record+position,len); dbf->tmp_sub_record[len]=0;
    
    if (dbf->sub_header[i]->RealLengthOfField<real_len(dbf->tmp_sub_record,dbf->sub_header[i]->FieldType))
        dbf->sub_header[i]->RealLengthOfField=real_len(dbf->tmp_sub_record,dbf->sub_header[i]->FieldType);
  }
   
}
コード例 #2
0
bool is_one_letter_off(const char* w1, const char* w2)
{
  bool found_inconsistency = false;
  size_t len = strlen(w1), i = 0;

  if (len != real_len(w2))
    return false;

  for (; i < len; ++i)
    if (w1[i] != w2[i])
    {
      if (found_inconsistency)
        return false;
      found_inconsistency = true;
    }

  return found_inconsistency;
}
コード例 #3
0
ファイル: conv.c プロジェクト: nawhizz/KAIT
int get_svcname( FILE *fp, char *svc )
{
char rbuf[512+1];
char tmp[10];

    while( 1 ){
       memset( rbuf, 0x00, sizeof(rbuf) );
       if( fgets(rbuf, sizeof(rbuf), fp)==(char *) 0 ){
           break;
       }
/*
       if( !memcmp(rbuf, "*tpconnect", 10) ){
*/
       if( !memcmp(rbuf, "*tpcall", 6) ){
           sscanf( rbuf, "%s %s", tmp, svc );
           if( real_len(svc, 17) <= 0 ) return -1;
           return 1;
       }
    }
    return -1;
}
コード例 #4
0
ファイル: conv.c プロジェクト: nawhizz/KAIT
int line_proc( char *s, FLDKEY *key, int *idx, char *value )
{
int len;
char *f, k[16], v[512];
char *sp, *ep;

   if( s[0] <= 0x20 ) return -1;

   f = strchr(s, '#');
   if( f!=(char *)0 ) memset( f, 0x00, strlen(s)-(f-s) );

   len = real_len( s, strlen(s) );
   if( len < 3 ) return -1;

   memset( k, 0x00, sizeof(k) );
   memset( v, 0x00, sizeof(v) );

   sscanf( s, "%s %d %s", k, idx, v );

   *key = fbget_fldkey(k);

   sp = strchr( s, '\"' );
   if( sp != (char *)0 ){
       ep = strrchr( s,'\"' );

       if( sp==ep ) return -1;

       sp++;
       memcpy( value, sp, ep - sp );
   }
   else if( v != (char *)0 ){
       memcpy( value, v, strlen(v) );
   }
   else
       return -1;

   return 1;
}
コード例 #5
0
static void etherReceive(pioStatusB *iosb, pio_ethbuf *irbb)

{
    int             i, stat;
    int             listNumber, devIOF, repTick, numDevs, maxDevices;
    int             error, errort, ident, totaldev, totalfec, tffunc;
    AddProVaxType   AddPro;
    char            mess[70];
    FORSTR messD = {70, 0, 0, mess};
    char            trtnod[7];
    DSC trtnodD  = { 6, 0, 0, trtnod};
    pioDevices      ReceiveCells[MAX_DEVS];
    int             aLen, dLen;
    char            auxAtt[5], auxDev[9];

    maxDevices = MAX_DEVS;
    error = 1;
    pioreq_analyze_extended(&iosb->trans, &irbb->head.bytecount, &maxDevices, &listNumber,
                            &devIOF, &repTick, &numDevs, ReceiveCells, &error, &ident,
                            &totaldev, &totalfec, &tffunc);
    if (error != 1) {
        GET_ETHER_ADDPROT(&AddPro);
        ADCOMP(&trtnodD, &AddPro, &errort);
        printf("caQtDM -- PIOREQ_ANALYZE error=%d list=%d numdevs=%d with TF=%d from <%.6s>\n", error, listNumber, numDevs,
               tffunc, trtnod);
        stat = getPioErrMsgStr(&error, &messD);
        mess[69] = '\0';
        printf("            : %s\n", mess);
        return;
    }

    GET_ETHER_ADDPROT(&AddPro);
    ADCOMP(&trtnodD, &AddPro, &errort);
    trtnod[6] = '\0';

    //printf("caQtDM -- PIOREQ_ANALYZE error=%d list=%d numdevs=%d with TF=%d from <%.6s>\n", error, listNumber, numDevs, tffunc, trtnod);

    /* copy data back to our cells for activ list */

    if (listNumber == MAX_LISTS - 2) {
        if (ReceiveCells[0].unit_code > 3) {
            ActivCells[0].ub.value = (float) Vax2HostF(&ReceiveCells[0].ub.value);
        } else {
            ActivCells[0].ub.int4val = ReceiveCells[0].ub.int4val;
        }
        ActivCells[0].error_code = ReceiveCells[0].error_code;
        ActivCells[0].unit_code = ReceiveCells[0].unit_code;

        /* copy data back to our cells for blockserver data */

    } else if (listNumber >= MAX_LISTS/2) {
        {
            knobData kData, kDataExt;
            int   status;
            float *xbuf, *ybuf;
            char  errorMsg[255];
            int dataSize;
            int totalVal, j;

            // number of devices is always 1 for profiles

            int ident =  ReceiveCells[0].ident;

            C_GetMutexKnobData(KnobDataPtr, ident, &kData);

            if(kData.index == -1) return;

            time_t                time_val;
            struct tm             *times;
            struct timeb          timer;

            kData.edata.connected = true;
            kData.edata.accessW = true;
            kData.edata.accessR = true;
            kData.edata.fieldtype = caFLOAT;
            strcpy(kData.edata.fec, trtnod);
            kData.edata.monitorCount++;

            ftime(&timer);
            time_val = timer.time;
            times = localtime(&time_val);

            status = BlockserverData(&ReceiveCells[0], &totalVal,  &xbuf, &ybuf,  errorMsg);

            if(status) {

                dataSize = totalVal * sizeof(float);

                // we have to fill also the secondary x or y datablock
                if(extent[ident] != -1) {
                    int l =  extent[ident];
                    C_GetMutexKnobData(KnobDataPtr, l, &kDataExt);

                    kDataExt.edata.connected = true;
                    kDataExt.edata.accessW = true;
                    kDataExt.edata.accessR = true;
                    kDataExt.edata.fieldtype = caFLOAT;
                    kDataExt.edata.monitorCount++;

                    if(dataSize != kDataExt.edata.dataSize) {
                        free(kDataExt.edata.dataB);
                        kDataExt.edata.dataB = (void*) malloc(dataSize);
                        kDataExt.edata.dataSize = dataSize;
                    }
                    kDataExt.edata.valueCount = totalVal;
                    float *ptr = (float*) kDataExt.edata.dataB;

                    if(kDataExt.specData[2] == 0) {
                        for(j=0; j < totalVal; j++) {
                            ptr[j] = xbuf[j];
                        }
                    } else {
                        for(j=0; j < totalVal; j++) {
                            ptr[j] = ybuf[j];
                        }
                    }
                }

                // fill datablock for this device

                if(dataSize != kData.edata.dataSize) {
                    free(kData.edata.dataB);
                    kData.edata.dataB = (void*) malloc(dataSize);
                    kData.edata.dataSize = dataSize;
                }
                kData.edata.valueCount = totalVal;
                float *ptr = (float*) kData.edata.dataB;
                if(kData.specData[2] == 0) {
                    for(j=0; j < totalVal; j++) {
                        ptr[j] = xbuf[j];
                    }
                } else {
                    for(j=0; j < totalVal; j++) {
                        ptr[j] = ybuf[j];
                    }
                }

                C_SetMutexKnobDataReceived(KnobDataPtr, &kData);
                if(extent[ident] != -1) C_SetMutexKnobDataReceived(KnobDataPtr, &kDataExt);
                free(xbuf);
                free(ybuf);
            }
        }

        /* copy data back to our cells for read lists */

    } else {
        knobData kData;
        char            unit[9];
        FORSTR          unitD = {8, 0, 0, unit};
        static char     level2[16][21];
        FORSTRARRAY     level2D = {21, 14, 4, 0};
        static char     image2[16][21];
        FORSTRARRAY     image2D = {21, 14, 4, 0};
        int             offset[16];
        char            devS[9], attS[5];
        DSC             devD = {8, 0, 0, devS};
        DSC             attD = {4, 0, 0, attS};
        int             dim = 16;
        int             len = 0;

        for (i = 0; i < numDevs; i++) {
            int dataSize = 0;
            int num = 0;

            if (ReceiveCells[i].error_code == -9) goto skip;   // prof cell coming from pioser taken out

            C_GetMutexKnobData(KnobDataPtr, ReceiveCells[i].ident, &kData);

            if(kData.index != -1) {

                F_CMDT_RCRD  bitmapping[MAX_RECORDS];
                F_SBNT_RCRD result [16];
                kData.edata.monitorCount++;
                kData.edata.connected = true;

                kData.edata.accessW = true;
                kData.edata.accessR = true;
                kData.edata.valueCount = 1;
                strcpy(kData.edata.fec, trtnod);

                memcpy(devS, ReceiveCells[i].name, 8);
                memcpy(attS, ReceiveCells[i].att, 4);
                memset(bitmapping, 0, sizeof(bitmapping));

                attS[4] = '\0';
                devS[8] = '\0';
                aLen = real_len(attS);
                dLen = real_len(devS);
                strcpy(auxAtt, attS);
                strcpy(auxDev, devS);
                auxAtt[aLen] = '\0';
                auxDev[dLen] = '\0';

                if( (strstr(kData.pv, auxAtt) == (char*) 0) ||
                        (strstr(kData.pv, auxDev) == (char*) 0)) {
                    //printf("unexpected device %d %s <%.8s> <%.4s>\n", kData.index, kData.pv, auxDev, auxAtt);
                    goto skip;
                }

                // in case of commands we do not have to consider an error code
                if(strncmp(attS, "C", 1) == 0) {
                    if(kData.edata.dataSize > 0) {
                        kData.edata.monitorCount--;
                        goto skip1;  // cmdnames should not change
                    }
                    num = getCmdNames(&devD, &attD, &dim, bitmapping);
                    if(num > 0) {
                        int j;
                        dataSize = 8 * sizeof(char) * num + (num) * sizeof(char);
                        char aux[9];
                        //printf("%.8s %.4s %d\n", devS, attS, num);

                        kData.edata.fieldtype = caENUM;
                        if(dataSize != kData.edata.dataSize) {
                            free(kData.edata.dataB);
                            kData.edata.dataB = (void*) malloc(dataSize);
                            kData.edata.dataSize = dataSize;
                        }

                        char *ptr = (char*) kData.edata.dataB;
                        ptr[0] = '\0';
                        strncpy(aux, bitmapping[0].bitName, 8);
                        aux[8] = '\0';
                        len = Min(8, real_len(aux));
                        aux[len] = '\0';
                        strcpy(ptr, aux);
                        for (j = 1; j < num; j++) {
                            strncpy(aux, bitmapping[j].bitName, 8);
                            aux[8] = '\0';
                            len = Min(8, real_len(aux));
                            aux[len] = '\0';
                            sprintf(ptr, "%s;%s", ptr, aux);
                        }
                        kData.edata.valueCount=num;
                        // in case of hipa, commands should have no value
                        kData.edata.ivalue = num+1;
                    }

                    // everything except command attribute

                } else {

                    if (ReceiveCells[i].error_code == 1) {

                        kData.edata.severity = 0;

                        // floats
                        if (ReceiveCells[i].unit_code > 3) {

                            float value = (float) Vax2HostF(&ReceiveCells[i].ub.value);

                            // new value ?
                            //if((fabs(kData.edata.rvalue - value) <= 1.e-7)  && (kData.edata.monitorCount > 1)) {
                            //    kData.edata.monitorCount--;
                            //    goto skip1;
                            //}
                            kData.edata.rvalue = (float) Vax2HostF(&ReceiveCells[i].ub.value);
                            kData.edata.fieldtype = caFLOAT;
                            kData.edata.precision = 3;

                            // integers (bitfields)
                        } else {
                            int status;
                            char level2Data[21];
                            level2Data[0] = '\0';

                            int value = ReceiveCells[i].ub.int4val;
                            kData.edata.fieldtype = caINT;  // default type

                            // new value ?
                            //if(strstr(kData.pv, "VHD0") != (char*) 0) printf("pv=<%s> old=%x new=%x mC=%d dC=%d\n",kData.pv, kData.edata.ivalue, value , kData.edata.monitorCount, kData.edata.displayCount);

                            //if(kData.edata.ivalue == value && kData.edata.monitorCount > 1 && kData.edata.displayCount != 0) {
                            //    kData.edata.monitorCount--;
                                //if(strstr(kData.pv, "VHD0") != (char*) 0) printf("skipped\n");
                            //    goto skip1;
                            //}

                            //if(strstr(kData.pv, "VHD0") != (char*) 0)printf("not skipped\n");

                            kData.edata.ivalue = ReceiveCells[i].ub.int4val;
                            kData.edata.rvalue = (float) ReceiveCells[i].ub.int4val;

                            level2D.strPtr = (char *) level2;
                            image2D.strPtr = (char *) image2;

                            // in case of ca_choice and cabitnames get also bitnames
                            if((strstr(kData.clasName, "choice") != (char *) 0) ||
                                    (strstr(kData.clasName, "bitnames") != (char *) 0)) {
                                if(kData.edata.dataSize > 0) {
                                     if(kData.edata.displayCount > 0)  goto skip1;  // bitnames should not change, but value yes
                                }
                                memset(result, 0, sizeof(result));
                                status = getBitNames(&devD, &attD, result);
                                if(status == 1) {
                                    int j;
                                    num = 0;
                                    for(j=0; j < 16; j++) {
                                        strncpy(level2[j], result[j].bitCmt, 20);
                                        level2[j][20] = '\0';
                                        num++;
                                    }
                                    dataSize = 21 * sizeof(char) * num + (num) * sizeof(char);
                                    // in case of hipa, bitnames should have no value
                                    kData.edata.ivalue = num+1;
                                }

                            } else if((strstr(kData.clasName, "lineedit") != (char *) 0) || (strstr(kData.clasName, "image") != (char *) 0)) {
                                // get digital level 2
                                int j;
                                num = getDigLvl2ext(&devD, &attD, &ReceiveCells[i].ub.int4val, &dim,  &level2D, &image2D, offset);
                                dataSize = 21 * sizeof(char) * num + (num) * sizeof(char);
                                for(j = 0; j < num; j++) {
                                    level2[j][20] = '\0';
                                    // if we have an image, compute the correct frame and keep also the string
                                    if(strlen(kData.edata.aux) > 0) {
                                        char levData[21], aux[21];
                                        strcpy(levData, level2[j]);
                                        strcpy(aux, kData.edata.aux); strcat(aux, "_");
                                        if(IsInside(strUpr(levData), aux)) {
                                            kData.edata.rvalue = offset[j];
                                            strcpy(level2Data, level2[j]);
                                            dataSize = 21 * sizeof(char);
                                        }
                                    }
                                }
                            }

                            if(num > 0) {
                                if((strstr(kData.clasName, "choice") != (char *) 0) || (strstr(kData.clasName, "bitnames") != (char *) 0)) {
                                    kData.edata.fieldtype = caENUM;
                                } else {
                                    kData.edata.fieldtype = caSTRING;
                                }
                                if(dataSize != kData.edata.dataSize) {
                                    free(kData.edata.dataB);
                                    kData.edata.dataB = (void*) malloc(dataSize);
                                    kData.edata.dataSize = dataSize;
                                }

                                char *ptr = (char*) kData.edata.dataB;

                                if(strlen(kData.edata.aux) > 0) {
                                    ptr[0] = '\0';
                                    strcpy(ptr, level2Data);
                                    kData.edata.valueCount = 1;
                                    kData.edata.enumCount=0;

                                } else {
                                    int j;
                                    char levData[21];
                                    ptr[0] = '\0';
                                    strcpy(ptr, level2[0]);
                                    for (j = 1; j < num; j++) {
                                        strncpy(levData, level2[j], 20);
                                        levData[20] = '\0';
                                        len = Min(20, real_len(levData));
                                        levData[len] = '\0';
                                        sprintf(ptr, "%s;%s", ptr, levData);
                                    }
                                    kData.edata.valueCount=num;
                                    kData.edata.enumCount=num;
                                }
                            }

                        }
                        fillUnit(&ReceiveCells[i].unit_code, &unitD);
                        unit[8] = '\0';
                        unit[real_len(unit)] = '\0';
                        strcpy(kData.edata.units, unit);
                    } else {
                        kData.edata.severity = ReceiveCells[i].error_code;
                        if (ReceiveCells[i].unit_code > 3) {
                            kData.edata.rvalue = 0.0;
                            kData.edata.fieldtype = caFLOAT;
                            kData.edata.precision = 3;
                        }
                    }
                }
skip1:;
                C_SetMutexKnobDataReceived(KnobDataPtr, &kData);
skip:;
            }
        }
    }
}
コード例 #6
0
ファイル: mur_select_rec.c プロジェクト: CeperaCPP/fis-gtm
boolean_t	mur_select_rec(jnl_ctl_list *jctl)
{
	boolean_t		exc_item_seen, inc_item_seen, inc_seen, wildcard_match;
	char			key_buff[MAX_KEY_SZ + 1 + SIZEOF(uint4) * 2], asc_key_buff[MAX_ZWR_KEY_SZ], *ptr;
	int			i, key_len, pat_pos, subs_pos;
	uint4			pini_addr;
	gv_key			*key;
	jnl_record		*rec;
	pini_list_struct	*plst;
	jnl_process_vector	*pv;
	enum jnl_record_type	rectype;
	long_list		*ll_ptr;
	select_list		*sl_ptr;
	jnl_string		*keystr;
	uint4			status;
	int4			pv_len, sl_len;

	assert(mur_options.selection);
	rec = jctl->reg_ctl->mur_desc->jnlrec;
	rectype = (enum jnl_record_type)rec->prefix.jrec_type;
	pini_addr = rec->prefix.pini_addr;
	key = NULL;
	if (JRT_NULL == rectype || JRT_ALIGN == rectype)
		return TRUE;
	status = mur_get_pini(jctl, pini_addr, &plst);
	if (SS_NORMAL != status)
		return TRUE;
	pv = &plst->jpv;
	if (IS_SET_KILL_ZKILL_ZTRIG(rectype))
	{	/* Translate internal format of jnl_record key to ascii */
		keystr = (jnl_string *)&rec->jrec_set_kill.mumps_node;
		key = (gv_key *)key_buff;
		key->top = MAX_KEY_SZ;
		key->end = keystr->length;
		assert(key->end <= key->top);
		memcpy(key->base, &keystr->text[0], keystr->length);
		key->base[key->end] = '\0';
		key_len = INTCAST((format_targ_key((uchar_ptr_t)asc_key_buff, MAX_ZWR_KEY_SZ, key, FALSE) -
				   (unsigned char *)asc_key_buff));
	}
	/* Check this record against the various selection lists */
	if (NULL != mur_options.user)
	{
		inc_seen = inc_item_seen = exc_item_seen = FALSE;
		for (sl_ptr = mur_options.user;  NULL != sl_ptr;  sl_ptr = sl_ptr->next)
		{
			wildcard_match = FALSE;
			if (!sl_ptr->exclude)
				inc_seen = TRUE;
			if (sl_ptr->has_wildcard)
				wildcard_match = mur_do_wildcard(pv->jpv_user, sl_ptr->buff, JPV_LEN_USER, sl_ptr->len);
			if (!wildcard_match)
			{
				pv_len = real_len(JPV_LEN_USER, (uchar_ptr_t)pv->jpv_user);
				sl_len = MIN(sl_ptr->len, JPV_LEN_USER);
			}
			if (wildcard_match || (pv_len == sl_len) && (0 == memcmp(pv->jpv_user, sl_ptr->buff, sl_len)))
			{
				if (sl_ptr->exclude)
					exc_item_seen = TRUE;
				else
					inc_item_seen = TRUE;
			}
		}
		if (exc_item_seen || (inc_seen && !inc_item_seen))
			return FALSE;
	}
	if ((NULL != mur_options.global) && (NULL != key))
	{
		inc_seen = inc_item_seen = exc_item_seen = FALSE;
		for (sl_ptr = mur_options.global;  NULL != sl_ptr;  sl_ptr = sl_ptr->next)
		{
			wildcard_match = FALSE;
			if (!sl_ptr->exclude)
				inc_seen = TRUE;
			if (sl_ptr->has_wildcard)
				wildcard_match = mur_do_wildcard(asc_key_buff, sl_ptr->buff, key_len, sl_ptr->len);
			i = sl_ptr->len;
			if (sl_ptr->buff[i - 1] == ')')
				--i;
			if (wildcard_match
				|| (key_len == i) && (0 == memcmp(asc_key_buff, sl_ptr->buff, i))
				|| (key_len >  i) && (0 == memcmp(asc_key_buff, sl_ptr->buff, i))
					&& (('(' == asc_key_buff[i]) || (')' == asc_key_buff[i]) || (',' == asc_key_buff[i])))
			{
				if (sl_ptr->exclude)
					exc_item_seen = TRUE;
				else
					inc_item_seen = TRUE;
			}
		}
		if (exc_item_seen || (inc_seen && !inc_item_seen))
			return FALSE;
	}
	if (NULL != mur_options.process)
	{
		inc_seen = inc_item_seen = exc_item_seen = FALSE;
		for (sl_ptr = mur_options.process;  NULL != sl_ptr;  sl_ptr = sl_ptr->next)
		{
			wildcard_match = FALSE;
			if (!sl_ptr->exclude)
				inc_seen = TRUE;
			if (sl_ptr->has_wildcard)
				wildcard_match = mur_do_wildcard(pv->jpv_prcnam, sl_ptr->buff, JPV_LEN_PRCNAM, sl_ptr->len);
			if (!wildcard_match)
			{
				pv_len = real_len(JPV_LEN_PRCNAM, (uchar_ptr_t)pv->jpv_prcnam);
				sl_len = MIN(sl_ptr->len, JPV_LEN_PRCNAM);
			}
			if (wildcard_match || (pv_len == sl_len) && (0 == memcmp(pv->jpv_prcnam, sl_ptr->buff, sl_len)))
			{
				if (sl_ptr->exclude)
					exc_item_seen = TRUE;
				else
					inc_item_seen = TRUE;
			}
		}
		if (exc_item_seen || (inc_seen && !inc_item_seen))
			return FALSE;
	}
	if (NULL != mur_options.id)
	{
		inc_seen = inc_item_seen = exc_item_seen = FALSE;
		for (ll_ptr = mur_options.id;  NULL != ll_ptr;  ll_ptr = ll_ptr->next)
		{
			if (!ll_ptr->exclude)
				inc_seen = TRUE;
			if (ll_ptr->num == pv->jpv_pid)
			{
				if (ll_ptr->exclude)
					exc_item_seen = TRUE;
				else
					inc_item_seen = TRUE;
			}
		}
		if (exc_item_seen || (inc_seen && !inc_item_seen))
			return FALSE;
	}
	if (IS_SET_KILL_ZKILL_ZTRIG(rectype))
	{
		if (IS_SET(rectype))
			return mur_options.transaction != TRANS_KILLS;
		else
			return mur_options.transaction != TRANS_SETS;
	}
	return TRUE;
}