コード例 #1
0
ファイル: mp4_adobe.cpp プロジェクト: DDVTECH/mistserver
  globalafraentry AFRA::getGlobalEntry(uint32_t no) {
    globalafraentry ret;
    int offset = 13 + 12 * getEntryCount() + 4;
    if (getLongOffsets()) {
      offset = 13 + 16 * getEntryCount() + 4;
    }
    int entrysize = 20;
    if (getLongIDs()) {
      entrysize += 4;
    }
    if (getLongOffsets()) {
      entrysize += 8;
    }

    ret.time = getInt64(offset + entrysize * no);
    if (getLongIDs()) {
      ret.segment = getInt32(offset + entrysize * no + 8);
      ret.fragment = getInt32(offset + entrysize * no + 12);
    } else {
      ret.segment = getInt16(offset + entrysize * no + 8);
      ret.fragment = getInt16(offset + entrysize * no + 10);
    }
    if (getLongOffsets()) {
      ret.afraoffset = getInt64(offset + entrysize * no + entrysize - 16);
      ret.offsetfromafra = getInt64(offset + entrysize * no + entrysize - 8);
    } else {
      ret.afraoffset = getInt32(offset + entrysize * no + entrysize - 8);
      ret.offsetfromafra = getInt32(offset + entrysize * no + entrysize - 4);
    }
    return ret;
  }
コード例 #2
0
ファイル: xgm.c プロジェクト: clbr/SGDK
XGM* XGM_createFromData(unsigned char* data, int dataSize)
{
    int s;
    XGM* result = XGM_create();

    if (!silent)
        printf("Parsing XGM file...\n");

    if (strncasecmp(&data[0x00], "XGM ", 4))
    {
        printf("Error: XGM file not recognized !\n");
        return NULL;
    }

    // sample id table
    LList* samples = NULL;
    for (s = 1; s < 0x40; s++)
    {
        int offset = getInt16(data, (s * 4) + 0);
        int len = getInt16(data, (s * 4) + 2);

        // ignore empty sample
        if ((offset != 0xFFFF) && (len != 0x0100))
        {
            offset <<= 8;
            len <<= 8;

            // add sample
            samples = insertAfterLList(samples, XGMSample_create(s, data + (offset + 0x104), len, offset));
        }
    }

    result->samples = getHeadLList(samples);

    // calculate music data offset (sample block size + 0x104)
    int offset = (getInt16(data, 0x100) << 8) + 0x104;
    // int version = data[0x102];
    result->pal = data[0x103] & 1;

    // get music data length
    int len = getInt(data, offset);

    if (verbose)
    {
        printf("XGM sample number: %d\n", getSizeLList(result->samples));
        printf("XGM start music data: %6X  len: %d\n", offset + 4, len);
    }

    // build command list
    XGM_parseMusic(result, data + offset + 4, len);

    if (!silent)
        printf("XGM duration: %d frames (%d seconds)\n", XGM_computeLenInFrame(result), XGM_computeLenInSecond(result));

    // GD3 tags ?
    if (data[0x103] & 2)
        result->gd3 = GD3_createFromData(data + offset + 4 + len);

    return result;
}
コード例 #3
0
void list_code_blocks(resource_t* r) {
	int pos = getInt16(r->data + 2);
	while (pos < r->size - 2) {
		int type = getInt16(r->data + pos);
		int len = getInt16(r->data + pos + 2);
		if (type == 2) printf("%X-%X\n", pos, pos + len);
		pos += len;
	}
}
コード例 #4
0
Int16List* MtpDataPacket::getAInt16() {
    Int16List* result = new Int16List;
    int count = getUInt32();
    for (int i = 0; i < count; i++)
        result->push_back(getInt16());
    return result;
}
コード例 #5
0
ファイル: protocol.hpp プロジェクト: BBBSnowball/libusbnet
 /** Return value as integer, depending on length.
   */
 int getInt()   {
    switch(mLength) {
    case sizeof(int8_t): return getInt8(); break;
    case sizeof(int16_t): return getInt16(); break;
    case sizeof(int32_t): default: return getInt32(); break;
    }
    return 0;
 }
コード例 #6
0
/*Returns the position of the first frame of type 'type' in resource 'r',
 *starting from the frame starting at 'start', or -1 on failure.
 */
static int find_frame(resource_t* r, int type, unsigned int start) {
	int t = -1;
	unsigned int pos = start;
	unsigned char* frame;

	assert(start <= r->size - 4);

#ifdef SCRIPT_DEBUG
	printf("Searching for frame of type %d in script %03d, starting at %#x\n", type, r->number, start);
	dump(r->data + start, 32);
#endif

	/*Some times there's an extra byte at the beginning. Christoph?*/
#if 1
	if (pos == 0 && r->size >= 6 && \
	        !((0 < getInt16(r->data)) && (10 > getInt16(r->data)))) pos = 2;
#else
	if (pos == 0)
		pos = 2;
#endif
	frame = r->data + pos;
	while (1) {
#ifdef SCRIPT_DEBUG
		printf("offset = %#x\n", pos);
		dump(frame, 32);
#endif
		t = get_type(frame);
		if (t == type)
			break;

		if (t == 0)
			return -1;

		pos += get_length(frame);
		if (pos > (r->size - 2))
			return -1;
		frame += get_length(frame);
	}

	return pos;
}
コード例 #7
0
ファイル: mathvm.cpp プロジェクト: nvmd/spbau-mathvm
void Bytecode::dump(ostream& out) const {
    for (size_t bci = 0; bci < length();) {
        size_t length;
        Instruction insn = getInsn(bci);
        out << bci << ": ";
        const char* name = bcName(insn, length);
        switch (insn) {
            case BC_DLOAD:
                out << name << " " << getDouble(bci + 1);
                break;
            case BC_ILOAD:
                out << name << " " << getInt64(bci + 1);
                break;
            case BC_SLOAD:
                out << name << " @" << getUInt16(bci + 1);
                break;
            case BC_CALL:
            case BC_CALLNATIVE:
                out << name << " *" << getUInt16(bci + 1);
                break;
            case BC_LOADDVAR:
            case BC_STOREDVAR:
            case BC_LOADIVAR:
            case BC_STOREIVAR:
            case BC_LOADSVAR:
            case BC_STORESVAR:
                out << name << " @" << getUInt16(bci + 1);
                break;
            case BC_LOADCTXDVAR:
            case BC_STORECTXDVAR:
            case BC_LOADCTXIVAR:
            case BC_STORECTXIVAR:
            case BC_LOADCTXSVAR:
            case BC_STORECTXSVAR:
                out << name << " @" << getUInt16(bci + 1)
                    << ":" << getUInt16(bci + 3);
                break;
            case BC_IFICMPNE:
            case BC_IFICMPE:
            case BC_IFICMPG:
            case BC_IFICMPGE:
            case BC_IFICMPL:
            case BC_IFICMPLE:
            case BC_JA:
                out << name << " " << getInt16(bci + 1) + bci + 1;
                break;
          default:
                out << name;
        }
        out << endl;
        bci += length;
    }
}
コード例 #8
0
ファイル: MtpDataPacket.cpp プロジェクト: MIPS/frameworks-av
Int16List* MtpDataPacket::getAInt16() {
    uint32_t count;
    if (!getUInt32(count))
        return NULL;
    Int16List* result = new Int16List;
    for (uint32_t i = 0; i < count; i++) {
        int16_t value;
        if (!getInt16(value)) {
            delete result;
            return NULL;
        }
        result->push(value);
    }
    return result;
}
コード例 #9
0
ファイル: libbinlog.c プロジェクト: shafreeck/libbinlog
void printCell(Cell *cell){
	switch(cell->ctype){
		case INT32:
			printf("%d\t",getInt32(cell->value));
			break;
		case UINT32:
			printf("%d\t",getUint32(cell->value));
			break;
		case INT64:
			printf("%ld\t",getInt64(cell->value));
			break;
		case UINT64:
			printf("%lu\t",getUint64(cell->value));
			break;
		case INT8:
			printf("%d",getInt8(cell->value));
			break;
		case INT16:
			printf("%d",getInt16(cell->value));
			break;
		case FLOAT:
			printf("%f\t",getFloat(cell->value));
			break;
		case DOUBLE:
			printf("%f\t",getDouble(cell->value));
			break;
		case STRING: //MySQL type BINARY may be STRING
			{   
				char *value =(char *) cell->value;
				printf("%s\t",(char*)value);
				break;

			}   
		case BINARY:
			printf("BINARY\t");
			break;
		default:
			printf("UNKNOW\t");
			break;

	}
}
コード例 #10
0
 void jump() {
     int16_t offset = getInt16();
     bci_ += offset - sizeof(int16_t);
 }
コード例 #11
0
 int16_t ClientMessage::get() {
     return getInt16();
 }
コード例 #12
0
static script_method* decode_method(byte* data) {
	script_method* m;
	int done = 0;
	int pos = 0;
	static int count = 0;

	count++;

	if ((m = (script_method*)sci_malloc(sizeof(script_method))) == 0) return 0;
	FLEXARRAY_INIT(script_opcode, *m);

	while (!done) {
		int op = data[pos] >> 1;
		int size = 2 - (data[pos] & 1);
		int* args[3];
		int arg;
		int old_pos;

		FLEXARRAY_ADD_SPACE(script_opcode, *m, 1, return 0);
		old_pos = pos;
		m->data[m->used-1].pos = pos;
		m->data[m->used-1].opcode = op;

		/*Copy the adresses of the args to an array for convenience*/
		args[0] = &m->data[m->used-1].arg1;
		args[1] = &m->data[m->used-1].arg2;
		args[2] = &m->data[m->used-1].arg3;

		/*Skip past the opcode*/
		pos++;

		for (arg = 0; arg < 4; arg++) {
			switch (formats[op][arg]) {
			case Script_Invalid: { /*Can't happen(tm)*/
				int i;
				printf("Invalid opcode %02X at %04X in method %d\n", op, pos, count);
				for (i = m->used - 9; i < m->used - 1; i++) {
					printf("%s[%02X] ", opcodes[m->data[i].opcode].name, m->data[i].opcode);
					dump(data + m->data[i].pos, m->data[i].size);
				}
				printf("Dump from %04X-%04X\n", pos - 16, pos + 16);
				dump(data + pos - 16, 32);
			}
			break;
			case Script_None: { /*No more args*/
				arg = 4;
			}
			break;
			case Script_Byte: /*Just a one byte arg*/
			case Script_SByte: {
				*args[arg] = data[pos++];
			}
			break;
			case Script_Word: { /*A two byte arg*/
				*args[arg] = getInt16(data + pos);
				pos += 2;
			}
			break;
			case Script_SWord: { /*A signed two-byte arg*/
				int t = getInt16(data + pos);
				if (t&0x8000) *args[arg] = -(t & 0x7FFF);
				else *args[arg] = t;
				pos += 2;
			}
			break;
			case Script_Variable: /*Size of arg depends on LSB in opcode*/
			case Script_SVariable:
			case Script_SRelative:
			case Script_Property:
			case Script_Global:
			case Script_Local:
			case Script_Temp:
			case Script_Param: {
				if (size == 1) *args[arg] = data[pos++];
				else {
					*args[arg] = getInt16(data + pos);
					pos += 2;
				}
			}
			break;
			case Script_End: { /*Special tag for ret*/
				done = 1;
				arg = 4;
			}
			break;
			default: { /*Can't happen(tm)*/
				printf("Unknown argument format %d for op %02X\n", formats[op][arg], op);
			}
			break;
			}
		}
		fflush(stdout);
		if (m->used) m->data[m->used-1].size = pos - old_pos;
	}

	return m;
}
コード例 #13
0
static int get_selector_count(unsigned char* obj) {
	return getInt16(obj + 10);
}
コード例 #14
0
ファイル: remoteFunctions.c プロジェクト: usnistgov/crcl
int handleExFileFunctionRequest(int acceptHandle, char *inBuffer, char *outBuffer, int type, int msgSize) {
    int32_t ret = -1;
    int32_t index = -1;
    int32_t ramDriveId = -1;
    int32_t fileNameOffset = -1;
    int32_t fd = -1;

    int sendRet = 0;
    int namelen = 0;
    short extensionId = -1;
    MP_FILE_NAME_SEND_DATA fileNameSendData;
    MP_GET_JOBLIST_RSP_DATA jobListData;

    switch (type) {

        case EX_FILE_CTRL_GET_FILE_COUNT:
            if (msgSize != 10) {
                fprintf(stderr, "tcpSvr: invalid msgSize for mpGetFileCount = %d != 10\n", msgSize);
                return -1;
            }
            extensionId = getInt16(inBuffer, 12);
            if (extensionId < 1 || extensionId > 2) {
                fprintf(stderr, "tcpSvr: invalid extensionId for mpGetFileCount = %d  (must be 1 or 2)\n", extensionId);
                return -1;
            }
            lastExtensionId = -1;
            ret = mpRefreshFileList(extensionId);
            if (ret != 0) {
                setInt32(outBuffer, 0, 4);
                setInt32(outBuffer, 4, ret);
                sendRet = sendN(acceptHandle, outBuffer, 8, 0);
                if (sendRet != 8) {
                    fprintf(stderr, "tcpSvr: sendRet = %d != 8\n", sendRet);
                    return -1;
                }
                return 0;
            }
            lastExtensionId = extensionId;
            ret = mpGetFileCount();
            setInt32(outBuffer, 0, 8);
            setInt32(outBuffer, 4, 0);
            setInt32(outBuffer, 8, ret);
            sendRet = sendN(acceptHandle, outBuffer, 12, 0);
            if (sendRet != 12) {
                fprintf(stderr, "tcpSvr: sendRet = %d != 12\n", sendRet);
                return -1;
            }
            break;

        case EX_FILE_CTRL_GET_FILE_NAME:
            extensionId = getInt16(inBuffer, 12);
            if (extensionId < 1 || extensionId > 2) {
                fprintf(stderr, "tcpSvr: invalid extensionId for mpGetFileName = %d  (must be 1 or 2)\n", extensionId);
                return -1;
            }
            if (extensionId != lastExtensionId) {
                lastExtensionId = -1;
                ret = mpRefreshFileList(extensionId);
                if (ret != 0) {
                    setInt32(outBuffer, 0, 4);
                    setInt32(outBuffer, 4, ret);
                    lastExtensionId = -1;
                    sendRet = sendN(acceptHandle, outBuffer, 8, 0);
                    if (sendRet != 8) {
                        fprintf(stderr, "tcpSvr: sendRet = %d != 8\n", sendRet);
                        return -1;
                    }
                    return 0;
                }
            }
            index = getInt32(inBuffer, 14);
            ret = mpGetFileName(index, outBuffer + 12);
            namelen = strlen(outBuffer + 12);
            setInt32(outBuffer, 0, 8 + namelen + 1);
            setInt32(outBuffer, 4, 0);
            setInt32(outBuffer, 8, ret);
            sendRet = sendN(acceptHandle, outBuffer, 12 + namelen + 1, 0);
            if (sendRet != 12 + namelen + 1) {
                fprintf(stderr, "tcpSvr: sendRet = %d != 12+namelen+1\n", sendRet);
                return -1;
            }
            break;

        case EX_FILE_CTRL_LOAD_FILE:
            ramDriveId = getInt32(inBuffer, 12);
            if (ramDriveId < 1 || ramDriveId > 2) {
                fprintf(stderr, "tcpSvr: invalid ramDriveId for mpLoadFile = %d  (must be 1 or 2)\n", ramDriveId);
                return -1;
            }
            fileNameOffset = getInt32(inBuffer, 16);
            if (fileNameOffset < 20 || fileNameOffset > (BUFF_MAX - 21)) {
                fprintf(stderr, "tcpSvr: invalid fileNameOffset for mpLoadFile = %d  \n", fileNameOffset);
                return -1;
            }
            ret = mpLoadFile(ramDriveId, inBuffer + 20, inBuffer + fileNameOffset);
            setInt32(outBuffer, 0, 4);
            setInt32(outBuffer, 4, ret);
            sendRet = sendN(acceptHandle, outBuffer, 8, 0);
            if (sendRet != 8) {
                fprintf(stderr, "tcpSvr: sendRet = %d != 8\n", sendRet);
                return -1;
            }
            break;

        case EX_FILE_CTRL_SAVE_FILE:
            ramDriveId = getInt32(inBuffer, 12);
            if (ramDriveId < 1 || ramDriveId > 2) {
                fprintf(stderr, "tcpSvr: invalid ramDriveId for mpSaveFile = %d  (must be 1 or 2)\n", ramDriveId);
                return -1;
            }
            fileNameOffset = getInt32(inBuffer, 16);
            if (fileNameOffset < 20 || fileNameOffset > (BUFF_MAX - 21)) {
                fprintf(stderr, "tcpSvr: invalid fileNameOffset for mpSaveFile = %d  \n", fileNameOffset);
                return -1;
            }
            ret = mpSaveFile(ramDriveId, inBuffer + 20, inBuffer + fileNameOffset);
            setInt32(outBuffer, 0, 4);
            setInt32(outBuffer, 4, ret);
            sendRet = sendN(acceptHandle, outBuffer, 8, 0);
            if (sendRet != 8) {
                fprintf(stderr, "tcpSvr: sendRet = %d != 8\n", sendRet);
                return -1;
            }
            break;

        case EX_FILE_CTRL_FD_READ_FILE:
            fd = getInt32(inBuffer, 12);
            if(fd == -99) {
                fd = acceptHandle;
            }
            if (fd < 1 ) {
                fprintf(stderr, "tcpSvr: invalid fd for mpFdReadFile = %d\n", ramDriveId);
                return -1;
            }
            memset(&fileNameSendData,0,sizeof(fileNameSendData));
            strcpy(fileNameSendData.cFileName,inBuffer+16);
            ret = mpFdReadFile(fd, &fileNameSendData);
            setInt32(outBuffer, 0, 4);
            setInt32(outBuffer, 4, ret);
            sendRet = sendN(acceptHandle, outBuffer, 8, 0);
            if (sendRet != 8) {
                fprintf(stderr, "tcpSvr: sendRet = %d != 8\n", sendRet);
                return -1;
            }
            break;
            
        case EX_FILE_CTRL_FD_WRITE_FILE:
            fd = getInt32(inBuffer, 12);
            if(fd == -99) {
                fd = acceptHandle;
            }
            if (fd < 1 ) {
                fprintf(stderr, "tcpSvr: invalid fd for mpFdWriteFile = %d\n", ramDriveId);
                return -1;
            }
            memset(&fileNameSendData,0,sizeof(fileNameSendData));
            strcpy(fileNameSendData.cFileName,inBuffer+16);
            ret = mpFdWriteFile(fd, &fileNameSendData);
            setInt32(outBuffer, 0, 4);
            setInt32(outBuffer, 4, ret);
            sendRet = sendN(acceptHandle, outBuffer, 8, 0);
            if (sendRet != 8) {
                fprintf(stderr, "tcpSvr: sendRet = %d != 8\n", sendRet);
                return -1;
            }
            break;
            
        case EX_FILE_CTRL_FD_GET_JOB_LIST:
            fd = getInt32(inBuffer, 12);
            if(fd == -99) {
                fd = acceptHandle;
            }
            if (fd < 1 ) {
                fprintf(stderr, "tcpSvr: invalid fd for mpFdGetJobList = %d  (must be 1 or 2)\n", ramDriveId);
                return -1;
            }
            memset(&jobListData,0,sizeof(jobListData));
            ret = mpFdGetJobList(fd, &jobListData);
            setInt32(outBuffer, 0, 10);
            setInt32(outBuffer, 4, ret);
            setInt16(outBuffer,8,jobListData.err_no);
            setInt16(outBuffer,10,jobListData.uIsEndFlag);
            setInt16(outBuffer,12,jobListData.uListDataNum);
            sendRet = sendN(acceptHandle, outBuffer, 14, 0);
            if (sendRet != 14) {
                fprintf(stderr, "tcpSvr: sendRet = %d != 14\n", sendRet);
                return -1;
            }
            break;

        default:
            fprintf(stderr, "tcpSvr: invalid file function type = %d\n", type);
            return -1;
    }
    return 0;
}
コード例 #15
0
/*These expect the frame, the whole frame, and, well, other stuff too,
 *I guess, as long as it looks like a frame*/
static int get_type(unsigned char* obj) {
	return getInt16(obj);
}
コード例 #16
0
static int get_method_number(unsigned char* obj, int i) {
	assert(i < get_method_count(obj));
	return getInt16(get_method_area(obj) + 2 + 2*i);
}
コード例 #17
0
static int get_method_location(unsigned char* obj, int i) {
	assert(i < get_method_count(obj));
	return getInt16(get_method_area(obj) + 4 + 2*get_method_count(obj) + 2*i);
}
コード例 #18
0
static int get_method_count(unsigned char* obj) {
	return getInt16(get_method_area(obj));
}
コード例 #19
0
/*Bas things happen if the method offset value is wrong*/
static unsigned char* get_method_area(unsigned char* obj) {
	return obj + getInt16(obj + 8) + 10;
}
コード例 #20
0
static int get_selector_value(unsigned char* obj, int sel) {
	assert(sel < get_selector_count(obj));
	return getInt16(obj + 12 + sel*2);
}
コード例 #21
0
ファイル: acq2ft.c プロジェクト: Ascronia/fieldtrip
/** Parses .res4 file corresponding to dsname and returns a headerdef and
	chunks suitable for sending off to FieldTrip. Also returns size of that
	message payload in 'size'. Returns NULL on error.
	
	Returned pointer needs to be disposed of using free() later.
*/
headerdef_t *handleRes4(const char *dsname, UINT32_T *size) {
	headerdef_t *hdef;
	char *res4name;
	ft_chunk_t *chunk;
	int i, len, pdot, pstart, rlen, offset, offsetNames, numFilters;
	FILE *f;
	union {
		double d;
		char b[8];
	} fsamp;
				
	/* printf("Picked up dataset name : %s\n", dsname); */
	len = strlen(dsname);
			
	pdot = len;
	while (--pdot>0) {
		if (dsname[pdot] == '.') break;
	}
	if (pdot == 0) {
		fprintf(stderr, "No . found in dataset name - don't know where to pick up .res4 file\n");
		return NULL;
	}
	pstart = pdot;
	while (--pstart>0) {
		if (dsname[pstart] == '/') {
			/* slash at pstart -> increase because filename comes 1 character later */
			pstart++;
			break;
		}
	}
	/* no slash found? then pstart = 0, which is fine - treat as relative path */
			
	/* compose .res4 file name from dsname/dsname[pslash+1:pdot].res4 */
	rlen = len + 1 + pdot - pstart + 5 + 1;
			
	res4name = (char *) malloc(rlen);
	if (res4name == NULL) {
		fprintf(stderr, "Out of memory -- could not compose filename\n");
		return NULL;
	}
			
	/* compose .res4 file name from dsname/dsname[pstart:pdot-1].res4 */
	memcpy(res4name, dsname, len);
	res4name[len] = '/';
	memcpy(res4name + len + 1, dsname + pstart, pdot - pstart);
	rlen = len + 1 + pdot - pstart;
	res4name[rlen++] = '.';
	res4name[rlen++] = 'r';
	res4name[rlen++] = 'e';
	res4name[rlen++] = 's';
	res4name[rlen++] = '4';
	res4name[rlen++] = 0;
			
	/* printf("Trying to open %s\n", res4name); */
	f = fopen(res4name, "rb");
	if (f==NULL) {
		fprintf(stderr, "File %s could not be opened\n", res4name);
		free(res4name);
		return NULL;
	}
			
	fseek(f, 0, SEEK_END);
	len = ftell(f);
	fseek(f, 0, SEEK_SET);
			
	printf("\nCTF RES4 file %s contains %i bytes.\n", res4name, len);
	free(res4name); /* not needed anymore */

	/* get space for headerdef, 1x chunkdef, size of res4-file */
	rlen = sizeof(headerdef_t) + sizeof(ft_chunkdef_t) + len;
	hdef = (headerdef_t *) malloc(rlen);
	
	if (hdef == NULL) {
		fprintf(stderr, "Out of memory - can not allocate space for reading .res4 file\n");
		fclose(f);
		return NULL;
	}
					
	chunk = (ft_chunk_t *) (hdef+1); /* chunk starts directly after hdef */
	if (fread(chunk->data, 1, len, f) != len) {
		fprintf(stderr, "Could not read complete .res4 file\n");
		fclose(f);
		free(hdef);
		return NULL;
	} 
	fclose(f);			
	
	hdef->nsamples = 0;
	hdef->nevents = 0;
	/* .res4 file is big-endian, but we assume this machine to be little-endian */
	hdef->nchans  = getInt16(chunk->data + 1292);
	
	printf("Number of channels: %i\n", hdef->nchans);
	
	for (i=0;i<8;i++) {
		fsamp.b[7-i] = chunk->data[1296+i];
	}
	hdef->fsample = (float) fsamp.d;
	
	if (hdef->fsample < 1.0) {
		printf("\nWARNING: suspicious sampling frequency (%f Hz) picked from .res4 -- setting to 1200 Hz\n\n", hdef->fsample);
		hdef->fsample = 1200.0;
	} else {
		printf("Sampling frequency: %f Hz\n", hdef->fsample);
	}
	
	hdef->data_type = DATATYPE_INT32;
	hdef->bufsize = sizeof(ft_chunkdef_t) + len;
	chunk->def.type = FT_CHUNK_CTF_RES4;
	chunk->def.size = len;
	if (size != NULL) *size = rlen;

	/* Ok, the header + chunk is ready, now parse some additional information
		used internally
	*/
	
	/* set rlen to "run description length", see read_ctf_res4, line 92f */
	rlen = getInt32(chunk->data + 1836);
	
	/* offset points at first byte after run_desc */
	offset = rlen + 1844;
	
	/* "number of filters" */
	numFilters = getInt16(chunk->data + offset);
	offset += 2;
	
	/* printf("numFilters = %i\n", numFilters); */
	
	for (i=0;i<numFilters;i++) {
		len = getInt16(chunk->data + offset+16);
		offset += 18 + len;
		/* printf("Filter %i: offset = %i,  len = %i\n", i, offset, len); */
	}
	
	/* next we've got 32 bytes per channel (name) */
	offsetNames = offset;
	offset += 32 * hdef->nchans; 
	
	numTriggerChannels = 0;
	
	for (i=0;i<hdef->nchans;i++) {
		unsigned char ct = chunk->data[offset + 1 + 1328*i]; 
		if (i<MAX_CHANNEL) {
			sensType[i] = ct;
		}
		if (ct == CTF_TRIGGER_TYPE) {
			if (numTriggerChannels < MAX_TRIGGER) {
				int j;
				char *tn = triggerChannelName[numTriggerChannels];
				
				memcpy(tn, chunk->data + offsetNames + 32*i, 32);
				for (j=0;j<32;j++) {
					if (tn[j] <= 32 || tn[j] == '-') break;
				}
				triggerChannelNameLen[numTriggerChannels] = j;
			
				triggerChannel[numTriggerChannels] = i;
				printf("Trigger channel @ %i: %.*s\n", i, j, tn);
				
				++numTriggerChannels;
			}
		}	
	}
	
	for (i=0;i<numTriggerChannels;i++) {
		lastValue[i] = 0;
	}
	
	return hdef;
}
コード例 #22
0
ファイル: logevent.c プロジェクト: shafreeck/libbinlog
static int16_t readInt16(EventCursor *evcur){
	int16_t v = getInt16(evcur->ev + evcur->cur);
	evcur->cur += 2;
	return v;
}
コード例 #23
0
ファイル: remoteFunctions.c プロジェクト: usnistgov/crcl
int handleSys1FunctionRequest(int acceptHandle, char *inBuffer, char *outBuffer, int type, int msgSize) {

    int sendRet = 0;
    int i = 0;
    MP_VAR_INFO varInfo[25];
    MP_VAR_DATA varData[25];
    MP_IO_INFO ioInfo[25];
    MP_IO_DATA ioData[25];
    LONG rData[25];
    USHORT iorData[25];
    MP_MODE_RSP_DATA modeData;
    MP_CYCLE_RSP_DATA cycleData;
    MP_ALARM_STATUS_RSP_DATA alarmStatusData;
    MP_ALARM_CODE_RSP_DATA alarmCodeData;
    LONG num;
    int ret;
    MP_CTRL_GRP_SEND_DATA ctrlGrpSendData;
    MP_CART_POS_RSP_DATA cartPosRspData;
    MP_PULSE_POS_RSP_DATA pulsePosRspData;
    MP_FB_PULSE_POS_RSP_DATA fbPulsePosRspData;
    MP_DEG_POS_RSP_DATA_EX degPosRspDataEx;
    MP_SERVO_POWER_RSP_DATA servoPowerRspData;
    MP_SERVO_POWER_SEND_DATA servoPowerSendData;
    MP_STD_RSP_DATA stdRspData;

    int32_t controlGroup = 0;
    int nowait = NO_WAIT;
    int waitforever = WAIT_FOREVER;

    switch (type) {
        case SYS1_GET_VAR_DATA:
            num = getInt32(inBuffer, 12);
            if (num < 1 || num > 24) {
                fprintf(stderr, "tcpSvr: invalid num for mpGetVarData num = %ld\n", num);
                return -1;
            }
            if (msgSize != 12 + (4 * num)) {
                fprintf(stderr, "tcpSvr: invalid msgSize for mpGetVarData = %d != %ld for num = %ld\n", msgSize, 12 + (4 * num), num);
                return -1;
            }
            for (i = 0; i < num; i++) {
                varInfo[i].usType = getInt16(inBuffer, 16 + (4 * i));
                varInfo[i].usIndex = getInt16(inBuffer, 18 + (4 * i));
            }
            ret = mpGetVarData(varInfo, rData, num);
            setInt32(outBuffer, 0, 4 + num * 4);
            setInt32(outBuffer, 4, ret);
            for (i = 0; i < num; i++) {
                setInt32(outBuffer, 8 + i * 4, rData[i]);
            }
            sendRet = sendN(acceptHandle, outBuffer, 8 + num * 4, 0);
            if (sendRet != 8 + num * 4) {
                fprintf(stderr, "tcpSvr: sendRet = %d != 8 + num*4\n", sendRet);
                return -1;
            }
            break;

        case SYS1_PUT_VAR_DATA:
            num = getInt32(inBuffer, 12);
            if (num < 1 || num > 24) {
                fprintf(stderr, "tcpSvr: invalid num for mpPutVarData num = %ld\n", num);
                return -1;
            }
            if (msgSize != 12 + (num * 8)) {
                fprintf(stderr, "tcpSvr: invalid msgSize for mpPutVarData = %d != %ld for num = %ld\n", msgSize, 12 + (num * 8), num);
                return -1;
            }
            for (i = 0; i < num; i++) {
                varData[i].usType = getInt16(inBuffer, 16 + (8 * i));
                varData[i].usIndex = getInt16(inBuffer, 18 + (8 * i));
                varData[i].ulValue = getInt32(inBuffer, 20 + (8 * i));
            }
            ret = mpPutVarData(varData, num);
            setInt32(outBuffer, 0, 4);
            setInt32(outBuffer, 4, ret);
            sendRet = sendN(acceptHandle, outBuffer, 8, 0);
            if (sendRet != 8) {
                fprintf(stderr, "tcpSvr: sendRet = %d != 8\n", sendRet);
                return -1;
            }
            break;

        case SYS1_GET_CURRENT_CART_POS:
            if (msgSize != 12) {
                fprintf(stderr, "tcpSvr: invalid msgSize for mpMotTargetClear = %d != 12\n", msgSize);
                return -1;
            }
            memset(&ctrlGrpSendData, 0, sizeof (ctrlGrpSendData));
            memset(&cartPosRspData, 0, sizeof (cartPosRspData));
            controlGroup = getInt32(inBuffer, 12);
            ctrlGrpSendData.sCtrlGrp = controlGroup;
            ret = mpGetCartPos(&ctrlGrpSendData, &cartPosRspData);
            setInt32(outBuffer, 0, 54);
            setInt32(outBuffer, 4, ret);
            for (i = 0; i < 6; i++) {
                setInt32(outBuffer, 8 + 4 * i, cartPosRspData.lPos[i]);
            }
            setInt16(outBuffer, 56, cartPosRspData.sConfig);
            sendRet = sendN(acceptHandle, outBuffer, 58, 0);
            if (sendRet != 58) {
                fprintf(stderr, "tcpSvr: sendRet = %d != 58\n", sendRet);
                return -1;
            }
            break;

        case SYS1_GET_CURRENT_PULSE_POS:
            if (msgSize != 12) {
                fprintf(stderr, "tcpSvr: invalid msgSize for mpMotTargetClear = %d != 12\n", msgSize);
                return -1;
            }
            memset(&ctrlGrpSendData, 0, sizeof (ctrlGrpSendData));
            memset(&pulsePosRspData, 0, sizeof (pulsePosRspData));
            controlGroup = getInt32(inBuffer, 12);
            ctrlGrpSendData.sCtrlGrp = controlGroup;
            ret = mpGetPulsePos(&ctrlGrpSendData, &pulsePosRspData);
            setInt32(outBuffer, 0, 68);
            setInt32(outBuffer, 4, ret);
            for (i = 0; i < 8; i++) {
                setInt32(outBuffer, 8 + 4 * i, pulsePosRspData.lPos[i]);
            }
            sendRet = sendN(acceptHandle, outBuffer, 72, 0);
            if (sendRet != 72) {
                fprintf(stderr, "tcpSvr: sendRet = %d != 72\n", sendRet);
                return -1;
            }
            break;

        case SYS1_GET_CURRENT_FEEDBACK_PULSE_POS:
            if (msgSize != 12) {
                fprintf(stderr, "tcpSvr: invalid msgSize for mpMotTargetClear = %d != 12\n", msgSize);
                return -1;
            }
            memset(&ctrlGrpSendData, 0, sizeof (ctrlGrpSendData));
            memset(&fbPulsePosRspData, 0, sizeof (fbPulsePosRspData));
            controlGroup = getInt32(inBuffer, 12);
            ctrlGrpSendData.sCtrlGrp = controlGroup;
            ret = mpGetFBPulsePos(&ctrlGrpSendData, &fbPulsePosRspData);
            setInt32(outBuffer, 0, 68);
            setInt32(outBuffer, 4, ret);
            for (i = 0; i < 8; i++) {
                setInt32(outBuffer, 8 + 4 * i, fbPulsePosRspData.lPos[i]);
            }
            sendRet = sendN(acceptHandle, outBuffer, 72, 0);
            if (sendRet != 72) {
                fprintf(stderr, "tcpSvr: sendRet = %d != 72\n", sendRet);
                return -1;
            }
            break;

        case SYS1_GET_DEG_POS_EX:
            if (msgSize != 12) {
                fprintf(stderr, "tcpSvr: invalid msgSize for mpMotTargetClear = %d != 12\n", msgSize);
                return -1;
            }
            memset(&ctrlGrpSendData, 0, sizeof (ctrlGrpSendData));
            memset(&degPosRspDataEx, 0, sizeof (degPosRspDataEx));
            controlGroup = getInt32(inBuffer, 12);
            ctrlGrpSendData.sCtrlGrp = controlGroup;
            ret = mpGetDegPosEx(&ctrlGrpSendData, &degPosRspDataEx);
            setInt32(outBuffer, 0, 132);
            setInt32(outBuffer, 4, ret);
            for (i = 0; i < 8; i++) {
                setInt32(outBuffer, 8 + 4 * i, degPosRspDataEx.lDegPos[i]);
            }
            for (i = 0; i < 8; i++) {
                setInt32(outBuffer, 72 + 4 * i, degPosRspDataEx.lDegUnit[i]);
            }
            sendRet = sendN(acceptHandle, outBuffer, 136, 0);
            if (sendRet != 136) {
                fprintf(stderr, "tcpSvr: sendRet = %d != 136\n", sendRet);
                return -1;
            }
            break;


        case SYS1_GET_SERVO_POWER:
            if (msgSize != 8) {
                fprintf(stderr, "tcpSvr: invalid msgSize for mpGetServoPower = %d != 8\n", msgSize);
                return -1;
            }
            memset(&servoPowerRspData, 0, sizeof (servoPowerRspData));
            ret = mpGetServoPower(&servoPowerRspData);
            setInt32(outBuffer, 0, 6);
            setInt32(outBuffer, 4, ret);
            setInt16(outBuffer, 8, servoPowerRspData.sServoPower);
            sendRet = sendN(acceptHandle, outBuffer, 10, 0);
            if (sendRet != 10) {
                fprintf(stderr, "tcpSvr: sendRet = %d != 10\n", sendRet);
                return -1;
            }
            break;

        case SYS1_SET_SERVO_POWER:
            if (msgSize != 10) {
                fprintf(stderr, "tcpSvr: invalid msgSize for mpSetServoPower = %d != 12\n", msgSize);
                return -1;
            }
            memset(&servoPowerSendData, 0, sizeof (servoPowerSendData));
            memset(&stdRspData, 0, sizeof (stdRspData));
            servoPowerSendData.sServoPower = getInt16(inBuffer, 12);
            ret = mpSetServoPower(&servoPowerSendData, &stdRspData);
            setInt32(outBuffer, 0, 6);
            setInt32(outBuffer, 4, ret);
            setInt16(outBuffer, 8, stdRspData.err_no);
            sendRet = sendN(acceptHandle, outBuffer, 10, 0);
            if (sendRet != 10) {
                fprintf(stderr, "tcpSvr: sendRet = %d != 136\n", sendRet);
                return -1;
            }
            break;


        case SYS1_READIO:
            num = getInt32(inBuffer, 12);
            if (num < 1 || num > 24) {
                fprintf(stderr, "tcpSvr: invalid num for mpReadIO num = %ld\n", num);
                return -1;
            }
            if (msgSize != 12 + (4 * num)) {
                fprintf(stderr, "tcpSvr: invalid msgSize for mpReadIO = %d != %ld for num = %ld\n", msgSize, 12 + (4 * num), num);
                return -1;
            }
            for (i = 0; i < num; i++) {
                ioInfo[i].ulAddr = getInt32(inBuffer, 16 + (4 * i));
            }
            memset(iorData, 0, sizeof (iorData));
            ret = mpReadIO(ioInfo, iorData, num);
            setInt32(outBuffer, 0, 4 + num * 2);
            setInt32(outBuffer, 4, ret);
            for (i = 0; i < num; i++) {
                setInt16(outBuffer, 8 + i * 2, iorData[i]);
            }
            sendRet = sendN(acceptHandle, outBuffer, 8 + num * 2, 0);
            if (sendRet != 8 + num * 2) {
                fprintf(stderr, "tcpSvr: sendRet = %d != 8 + num*4\n", sendRet);
                return -1;
            }
            break;

        case SYS1_WRITEIO:
            num = getInt32(inBuffer, 12);
            if (num < 1 || num > 24) {
                fprintf(stderr, "tcpSvr: invalid num for mpPutVarData num = %ld\n", num);
                return -1;
            }
            if (msgSize != 12 + (num * 8)) {
                fprintf(stderr, "tcpSvr: invalid msgSize for mpPutVarData = %d != %ld for num = %ld\n", msgSize, 12 + (num * 8), num);
                return -1;
            }
            for (i = 0; i < num; i++) {
                ioData[i].ulAddr = getInt32(inBuffer, 16 + (8 * i));
                ioData[i].ulValue = getInt32(inBuffer, 20 + (8 * i));
            }
            ret = mpWriteIO(ioData, num);
            setInt32(outBuffer, 0, 4);
            setInt32(outBuffer, 4, ret);
            sendRet = sendN(acceptHandle, outBuffer, 8, 0);
            if (sendRet != 8) {
                fprintf(stderr, "tcpSvr: sendRet = %d != 8\n", sendRet);
                return -1;
            }
            break;

        case SYS1_GET_MODE:
            if (msgSize != 8) {
                fprintf(stderr, "tcpSvr: invalid msgSize for mpGetMode = %d != 8\n", msgSize);
                return -1;
            }
            memset(&modeData, 0, sizeof (modeData));
            ret = mpGetMode(&modeData);
            setInt32(outBuffer, 0, 8);
            setInt32(outBuffer, 4, ret);
            setInt16(outBuffer, 8, modeData.sMode);
            setInt16(outBuffer, 10, modeData.sRemote);
            sendRet = sendN(acceptHandle, outBuffer, 12, 0);
            if (sendRet != 12) {
                fprintf(stderr, "tcpSvr: sendRet = %d != 12\n", sendRet);
                return -1;
            }
            break;

        case SYS1_GET_CYCLE:
            if (msgSize != 8) {
                fprintf(stderr, "tcpSvr: invalid msgSize for mpGetCycle = %d != 8\n", msgSize);
                return -1;
            }
            memset(&cycleData, 0, sizeof (cycleData));
            ret = mpGetCycle(&cycleData);
            setInt32(outBuffer, 0, 6);
            setInt32(outBuffer, 4, ret);
            setInt16(outBuffer, 8, cycleData.sCycle);
            sendRet = sendN(acceptHandle, outBuffer, 10, 0);
            if (sendRet != 10) {
                fprintf(stderr, "tcpSvr: sendRet = %d != 10\n", sendRet);
                return -1;
            }
            break;

        case SYS1_GET_ALARM_STATUS:
            if (msgSize != 8) {
                fprintf(stderr, "tcpSvr: invalid msgSize for mpGetAlarmStatus = %d != 8\n", msgSize);
                return -1;
            }
            memset(&alarmStatusData, 0, sizeof (alarmStatusData));
            ret = mpGetAlarmStatus(&alarmStatusData);
            setInt32(outBuffer, 0, 6);
            setInt32(outBuffer, 4, ret);
            setInt16(outBuffer, 8, alarmStatusData.sIsAlarm);
            sendRet = sendN(acceptHandle, outBuffer, 10, 0);
            if (sendRet != 10) {
                fprintf(stderr, "tcpSvr: sendRet = %d != 10\n", sendRet);
                return -1;
            }
            break;

        case SYS1_GET_ALARM_CODE:
            if (msgSize != 8) {
                fprintf(stderr, "tcpSvr: invalid msgSize for mpGetAlarmCode = %d != 8\n", msgSize);
                return -1;
            }
            memset(&alarmCodeData, 0, sizeof (alarmCodeData));
            ret = mpGetAlarmCode(&alarmCodeData);
            setInt32(outBuffer, 0, 10 + 4 * ((alarmCodeData.usAlarmNum > 4) ? 4 : alarmCodeData.usAlarmNum));
            setInt32(outBuffer, 4, ret);
            setInt16(outBuffer, 8, alarmCodeData.usErrorNo);
            setInt16(outBuffer, 10, alarmCodeData.usErrorData);
            setInt16(outBuffer, 12, alarmCodeData.usAlarmNum);
            for (i = 0; i < alarmCodeData.usAlarmNum && i < 4; i++) {
                setInt16(outBuffer, 14 + i * 4, alarmCodeData.AlarmData.usAlarmNo[i]);
                setInt16(outBuffer, 16 + i * 4, alarmCodeData.AlarmData.usAlarmData[i]);
            }
            sendRet = sendN(acceptHandle, outBuffer, 14 + 4 * ((alarmCodeData.usAlarmNum > 4) ? 4 : alarmCodeData.usAlarmNum), 0);
            if (sendRet != 14 + 4 * ((alarmCodeData.usAlarmNum > 4) ? 4 : alarmCodeData.usAlarmNum)) {
                fprintf(stderr, "tcpSvr: sendRet = %d != 14 +4*((alarmCodeData.usAlarmNum>4)?4:alarmCodeData.usAlarmNum)\n", sendRet);
                return -1;
            }
            break;

        default:
            fprintf(stderr, "tcpSvr: invalid sys1 function type = %d\n", type);
            return -1;
    }
    return 0;
}
コード例 #24
0
ファイル: s_main.c プロジェクト: Mathias9807/Gymnasie-Projekt
// Ladda en wav ljud-fil
Clip S_LoadWav(const char* link) {
	// Öppna filen
	char path[PATH_LENGTH] = {0};
	strcpy(path, SYS_GetBasePath());
	strcpy(path, "/");
	strcpy(path, link);

	FILE* file = fopen(path, "rb");
	if (!file) {
		SYS_Error("Couldn't open file! \n");
		return (Clip) {0};
	}

	Clip c;
	
	// Läs headern
	unsigned char riff[12];
	for (int i = 0; i < 12; i++)
		riff[i] = fgetc(file);

	// Kolla att filen verkligen är en .wav fil
	if (memcmp(riff, "RIFF", 4) != 0) {
		SYS_Error("Sound file is not a .wav file\n");
		fclose(file);
		return (Clip) {0};
	}

	if (memcmp(&riff[8], "WAVE", 4) != 0) {
		SYS_Error("Sound file is not a .wav file\n");
		fclose(file);
		return (Clip) {0};
	}

	unsigned char fmt[24];
	for (int i = 0; i < 24; i++)
		fmt[i] = fgetc(file);

	// Läs formatet
	c.channels = getInt16(&fmt[10]);
	c.bitsPerSample = getInt16(&fmt[22]);
	c.sampleFreq = getInt32(&fmt[12]);

	unsigned char dataHeader[8];
	for (int i = 0; i < 8; i++)
		dataHeader[i] = fgetc(file);

	c.size = getInt32(&dataHeader[4]);

	// Läs datan
	c.data = calloc(1, c.size);
	for (int i = 0; i < c.size; i++)
		c.data[i] = fgetc(file);

	// Skicka datan till OpenAL
	alGenBuffers(1, &c.bufferID);
	alBufferData(c.bufferID,
		c.bitsPerSample == 8
			? (c.channels == 1 ? AL_FORMAT_MONO8 : AL_FORMAT_STEREO8)
			: (c.channels == 1 ? AL_FORMAT_MONO16 : AL_FORMAT_STEREO16),
		c.data, c.size, c.sampleFreq);

	fclose(file);
	return c;
}
コード例 #25
0
ファイル: hdf.cpp プロジェクト: UnknownGosu/hhvm
int Hdf::compare(int16_t v2) const {
  int16_t v1 = getInt16();
  if (v1 == v2) return 0;
  return v1 > v2 ? 1 : -1;
}
コード例 #26
0
static int get_length(unsigned char* obj) {
	return getInt16(obj + 2);
}