示例#1
0
int TLKFile::finalWriteHeader(void)
{
	char *magic;

	if(seek(0)) return errcode;
	if(!(magic = (char*) getFileMagicByResType(type))) return errcode = 11;
	if(rawWrite(magic, 4)) return errcode;
	if(rawWrite("V3.0", 4)) return errcode;
	if(binWrite(3, (uint32) language, strcount, offstrings)) return errcode;
	return errcode = 0;
}
示例#2
0
int SSFFile::finalWriteHeader(void)
{
	char *magic;

	if(seek(0)) return errcode;
	if(!(magic = (char*) getFileMagicByResType(type))) return errcode = 11;
	if(rawWrite(magic, 4)) return errcode;
	if(rawWrite("V1.0", 4)) return errcode;
	if(binWrite(2, entrycount, offtable)) return errcode;
	return errcode = 0;
}
示例#3
0
int ERFFile::finalWriteHeader(void)
{
	char *magic;

	if(seek(0)) return errcode;
	if(!(magic = (char*) getFileMagicByResType(type))) return errcode = 11;
	if(rawWrite(magic, 4)) return errcode;
	if(rawWrite("V1.0", 4)) return errcode;
	if(binWrite(9, langcount, locstrsize, entrycount, offlocstr, offkeylist,
	               offreslist, buildyear, buildday, desc.stringref))
		return errcode;
	return errcode = 0;
}
示例#4
0
int GFFFile::finalWriteHeader(void)
{
	char *magic;

	if(seek(0)) return errcode;
	if(!(magic = (char*) getFileMagicByResType(type))) return errcode = 11;
	if(rawWrite(magic, 4)) return errcode;
	if(rawWrite("V3.2", 4)) return errcode;
	if(binWrite(12, offstruct, structcount, offfield, fieldcount, offlabel,
	                labelcount, offfielddata, fielddatasize, offfieldidx,
	                fieldidxsize, offlistidx, listidxsize))
		return errcode;
	return errcode = 0;
}
void OutputPersistenceBlock::write(bool value) {
	writeMarker(BOOL_MARKER);

	uint uintBool = value ? 1 : 0;
	uintBool = TO_LE_32(uintBool);
	rawWrite(&uintBool, sizeof(uintBool));
}
示例#6
0
int TLKFile::finalWriteStrings(void)
{
	if(seek(offstrings)) return errcode;
	for(uint32 i=0;i<strcount;i++)
		if(rawWrite(strings[i])) return errcode;
	return errcode = 0;
}
示例#7
0
int ERFFile::writeData(std::string resref, NWNFileType restype, uint8 *memseg,
	uint32 size, bool copy)
{
	uint32 n;

	if(pronto)
	{
		if(prontowritten++ >= entrycount) return errcode = 31;
		if(offsets.empty()) return errcode = 25;
		if(offsets.size() < 2) offsets.push_back(offsets[0]);
		if(seek(offsets[1])) return errcode;
		if(rawWrite((char *) memseg, size)) return errcode;
		offsets[1] += size;
	}
	else
	{
		datas.resize((n=datas.size())+1);
		if(copy)
		{
			if(!(datas[n] = (uint8 *) malloc(size))) return errcode = 4;
			memcpy(datas[n], memseg, size);
		}
		else datas[n] = memseg;
		datac.push_back(copy);
	}
	resrefs.push_back(resref);
	restypes.push_back(restype);
	sizes.push_back(size);
	return errcode = 0;
}
示例#8
0
void OutputPersistenceBlock::write(bool value) {
	writeMarker(BOOL_MARKER);

	uint uintBool = value ? 1 : 0;
	uintBool = convertEndianessFromSystemToStorage(uintBool);
	rawWrite(&uintBool, sizeof(uintBool));
}
示例#9
0
/* ----------------------------------------------------------------------
 * LOW LEVEL DEVICE IO ROUTINES - PORT TO QIODEVICE REQUIRED BEFORE COMMIT
 *
 *
 * HIGH LEVEL IO
 * int sendCommand()        - writes a command to the device
 * int readMessage()        - reads an inbound message
 *
 * LOW LEVEL IO
 * openPort() - opens serial device and configures it
 * closePort() - closes serial device and releases resources
 * rawRead() - non-blocking read of inbound data
 * rawWrite() - non-blocking write of outbound data
 * discover() - check if a ct is attached to the port specified
 * ---------------------------------------------------------------------- */
int Fortius::sendCommand(int mode)      // writes a command to the device
{
    switch (mode) {

        case FT_ERGOMODE :
            return rawWrite(ERGO_Command, 12);
            break;

        case FT_SSMODE :
            return rawWrite(SLOPE_Command, 12);
            break;

        default :
            return -1;
            break;
    }
}
示例#10
0
		size_t writeString(	const ptr_t address,
									const std::basic_string<char_t>& value) const
		{
			if(!value.length())
				return 0;

			const size_t stringLength = (value.length() + 1) * sizeof(char_t);
			return rawWrite(address, &value[0], stringLength);
		}
void OutputPersistenceBlock::write(float value) {
	writeMarker(FLOAT_MARKER);
	uint32 tmp[1];

	((float *)tmp)[0] = value;
	tmp[0] = TO_LE_32(tmp[0]);

	rawWrite(&value, sizeof(value));
}
示例#12
0
int ERFFile::finalWriteEntries(void)
{
	if(pronto) return errcode = 29;
	if(offsets.empty()) return errcode = 25;
	if(seek(offsets[0])) return errcode;
	for(uint32 i=0;i<entrycount;i++)
		if(rawWrite((char *) datas[i], sizes[i])) return errcode;
	return errcode = 0;
}
示例#13
0
int GFFFile::finalWriteResRef(std::string &resref, uint32 &ofieldd)
{
	if(binWrite((uint32) (ofieldd-offfielddata))) return errcode;
	if(seek(ofieldd)) return errcode;
	if(binWrite((uint8) resref.size())) return errcode;
	if(rawWrite((char*) resref.c_str(), resref.size())) return errcode;
	// Overflow check, if that fires, something really bad happened
	if((ofieldd += resref.size()+1) > offfieldidx) return errcode = 23;
	return errcode = 0;
}
示例#14
0
int GFFFile::finalWriteExoStr(std::string &exostr, uint32 &ofieldd)
{
	if(binWrite((uint32) (ofieldd-offfielddata))) return errcode;
	if(seek(ofieldd)) return errcode;
	if(binWrite((uint32) exostr.size())) return errcode;
	if(rawWrite((char*) exostr.c_str(), exostr.size())) return errcode;
	// Overflow check, if that fires, something really bad happened
	if((ofieldd += exostr.size()+4) > offfieldidx) return errcode = 23;
	return errcode = 0;
}
示例#15
0
int GFFFile::finalWriteLabels(void)
{
	int l;
	if(seek(offlabel)) return errcode;
	for(uint32 i=0;i<labels.size();i++)
	{
		if(rawWrite(labels[i].c_str(), l=labels[i].length()))
			return errcode;
		// Pad to a total of 16 bytes
		for(l=l;l<16;l++) if(binWrite((uint8) 0)) return errcode;
	}
	return errcode = 0;
}
示例#16
0
int ERFFile::finalWriteDescription(void)
{
	if(seek(offlocstr)) return errcode;
	for(uint32 i=0;i<NWN_LANG_MAX;i++)
		if(!desc.str[i].empty())
		{
			if(binWrite(2, i, (uint32) desc.str[i].length())) return errcode;
			if(rawWrite((char*) desc.str[i].c_str(), desc.str[i].size()))
				return errcode;
		}
	// Overflow check, if that fires, something really bad happened
	if(tell() > offkeylist) return errcode = 23;
	return errcode = 0;
}
示例#17
0
    static int formattedWrite( int fd , const char* format, ... ) {
        const int MAX_ENTRY = 256;
        static char entryBuf[MAX_ENTRY];

        va_list ap;
        va_start( ap , format );
        int entrySize = vsnprintf( entryBuf , MAX_ENTRY-1 , format , ap );
        if ( entrySize < 0 ) {
            return -1;
        }

        if ( rawWrite( fd , entryBuf , entrySize ) < 0 ) {
            return -1;
        }

        return 0;
    }
示例#18
0
int SSFFile::finalWriteData(void)
{
	uint32 l;

	if(offsets.empty()) return errcode = 25;
	if(seek(offsets[0])) return errcode;
	for(uint32 i=0;i<entrycount;i++)
	{
		// ResRefs have to have at most 16 characters
		if(resrefs[i].length() > 16) resrefs[i].erase(16);
		if(rawWrite((char*) resrefs[i].c_str(), l=resrefs[i].length()))
			return errcode;
		// Pad to a total of 16 bytes
		for(l=l;l<16;l++) if(binWrite((uint8) 0)) return errcode;
		if(binWrite(stringrefs[i])) return errcode;
	}
	return errcode = 0;
}
示例#19
0
int GFFFile::finalWriteExoLocStr(ExoLocString &exolocstr, uint32 &ofieldd)
{
	uint32 size=0, count=0;
	if(binWrite((uint32) (ofieldd-offfielddata))) return errcode;
	if(seek(ofieldd+12)) return errcode;
	for(uint32 i=0;i<NWN_LANG_MAX;i++)
		if(!exolocstr.str[i].empty())
		{
			if(binWrite(2, i, (uint32) exolocstr.str[i].size()))
				return errcode;
			if(rawWrite((char*) exolocstr.str[i].c_str(), exolocstr.str[i].size()))
				return errcode;
			count++;
			size += exolocstr.str[i].size()+8;
		}
	if(seek(ofieldd)) return errcode;
	if(binWrite(3, (uint32) size+8, exolocstr.stringref, count)) return errcode;
	// Overflow check, if that fires, something really bad happened
	if((ofieldd += size+12) > offfieldidx) return errcode = 23;
	return errcode = 0;
}
示例#20
0
int ERFFile::finalWriteKeyList(void)
{
	int l;

	if(seek(offkeylist)) return errcode;
	for(uint32 i=0;i<entrycount;i++)
	{
		// ResRefs have to have at most 16 characters
		if(resrefs[i].length() > 16) resrefs[i].erase(16);
		lowerStr(resrefs[i]);
		if(rawWrite((char*) resrefs[i].c_str(), l=resrefs[i].length()))
			return errcode;
		// Pad to a total of 16 bytes
		for(l=l;l<16;l++) if(binWrite((uint8) 0)) return errcode;
		if(binWrite(i)) return errcode;
		if(binWrite((uint16) restypes[i])) return errcode;
		if(binWrite((uint16) 0)) return errcode;
		// Overflow check, if that fires, something really bad happened
		if(tell() > offreslist) return errcode = 23;
	}
	return errcode = 0;
}
示例#21
0
int ERFFile::writeData(std::string resref, NWNFileType restype, std::string fname)
{
	uint32 n, size;

	if(pronto && (prontowritten++ >= entrycount)) return errcode = 31;
	datas.resize((n=datas.size())+1);
	if(!(datas[n] = readFileIntoMem(fname, size))) return errcode;
	if(pronto)
	{
		if(offsets.empty()) return errcode = 25;
		if(offsets.size() < 2) offsets.push_back(offsets[0]);
		if(seek(offsets[1])) return errcode;
		if(rawWrite((char *) datas[n], size)) return errcode;
		offsets[1] += size;
		free(datas[n]);
		datas.resize(n);
	}
	else datac.push_back(true);
	resrefs.push_back(resref);
	restypes.push_back(restype);
	sizes.push_back(size);
	return errcode = 0;
}
示例#22
0
int TLKFile::finalWriteTable(void)
{
	uint32 l;

	if(seek(20)) return errcode;
	offsets.resize(1);
	offsets[0] = 0;
	for(uint32 i=0;i<strcount;i++)
	{
		if(binWrite((uint32) flags[i])) return errcode;
		// ResRefs have to have at most 16 characters
		if(sndresrefs[i].length() > 16) sndresrefs[i].erase(16);
		if(rawWrite((char*) sndresrefs[i].c_str(), l=sndresrefs[i].length()))
			return errcode;
		// Pad to a total of 16 bytes
		for(l=l;l<16;l++) if(binWrite((uint8) 0)) return errcode;
		if(binWrite(2, (uint32) 0, (uint32) 0)) return errcode;
		if(binWrite(2, offsets[0], (uint32) strings[i].length())) return errcode;
		if(binWrite(sndlengths[i])) return errcode;
		offsets[0] += strings[i].length();
	}
	return errcode = 0;
}
示例#23
0
bool OwRelay::set(uint8_t i, bool value) {
  if (rlyState[i] == value) return true;
  bool ok = rawWrite(os->getAddr(i), value);
  if (ok) rlyState[i] = value;
  return ok;
}
示例#24
0
/*
 * NAME: dasd_write
 *
 * FUNCTION: Write to direct access file descriptor
 *
 * PARAMETERS:
 *	offset	- Starting byte offset for write request
 *	pdata	- Starting address of user data buffer
 *	plen	- On entry, number of bytes to be write
 *		  On exit, number of bytes actually write
 *	vfsp	- pointer to vfs structure
 *
 * RETURNS: 0 for success; Other indicates failure
 */
int32
dasd_write(
int64		offset,
caddr_t		pdata,
int64		*plen,
struct vfs	*vfsp)
{
	int64	blocknum;
	cbuf_t	*bp;
	dio_t	*dp;
	inode_t	*dummy_inode;
	int64	erroff;
	int64	fbytes;
	int64	lbytes;
	int64	mbytes;
	int64	nbytes = *plen;
	int32	rc;

	dummy_inode = getDummyInode(vfsp);

	/* If offset does not start on sector boundary, calculate number of
	 * bytes in first partial sector.
	 */
	if (offset & (vfsp->vfs_bsize - 1))
	{
		fbytes = MIN(nbytes, CM_BSIZE - (offset & CM_OFFSET));
		nbytes -= fbytes;
	}
	else
		fbytes = 0;

	/* If write does not end on sector boundary, calculate number of
	 * bytes in last sector
	 */
	if (nbytes & vfsp->vfs_bsize - 1)
		lbytes = nbytes & CM_OFFSET;
	else
		lbytes = 0;

	mbytes = nbytes - lbytes;

	nbytes = 0;	/* Now counting bytes actually written */

	/* First (partial) block */
	if (fbytes)
	{
		if (rc = rawRead(dummy_inode, offset, &bp))
			goto out1;
		if (rc = copyin(pdata, bp->cm_cdata+(offset & CM_OFFSET),
				fbytes))
		{
			rawRelease(bp);
			goto out1;
		}
		if (rc = rawWrite(dummy_inode, bp, 1))
			goto out1;
		nbytes = fbytes;
		offset += fbytes;
		pdata += fbytes;
	}
	/* Write full sectors
	 */
	if (mbytes)
	{
		blocknum = offset >> dummy_inode->i_l2pbsize;
		if (rc = dioStart(dummy_inode, &dp))
			goto out1;
		(void) dioWrite(dp, blocknum, mbytes, offset, pdata, 0);
		if (rc = dioEnd(dp, &erroff))
		{
			nbytes += (erroff - offset);
			goto out1;
		}
		nbytes += mbytes;
		offset += mbytes;
		pdata += mbytes;
	}
	/* Write last (partial) block
	 */
	if (lbytes)
	{
		if (rc = rawRead(dummy_inode, offset, &bp))
			goto out1;
		if (rc = copyin(pdata, bp->cm_cdata, lbytes))
		{
			rawRelease(bp);
			goto out1;
		}
		if (rc = rawWrite(dummy_inode, bp, 1))
			goto out1;
		nbytes = +lbytes;
	}
out1:
	releDummyInode(dummy_inode);
	*plen = nbytes;
	return (rc);
}
int main() {
    const char* test = "hello there\n";
    rawWrite(test, strlen(test));

    return 0;
}
示例#26
0
int writeDIODir(latero_conn* latero, uint16_t value ) {
    return( rawWrite( latero, LATERO_IO, 0x18, value ) );
}
void OutputPersistenceBlock::write(uint value) {
	writeMarker(UINT_MARKER);
	value = TO_LE_32(value);
	rawWrite(&value, sizeof(value));
}
void OutputPersistenceBlock::writeString(const Common::String &string) {
	writeMarker(STRING_MARKER);

	write(string.size());
	rawWrite(string.c_str(), string.size());
}
void OutputPersistenceBlock::writeByteArray(Common::Array<byte> &value) {
	writeMarker(BLOCK_MARKER);

	write((uint)value.size());
	rawWrite(&value[0], value.size());
}
示例#30
0
int my_main(const char* str_latero_ip, int print_response, int npack, 
            unsigned int* dacval, int dacval_cnt,
            char rd, char wr, int addr, int value, char dst_main, char dst_io, int testpattern )
{
  latero_conn latero;


  /*
  struct sockaddr_in si_server, si_other;
  int s, ii, slen=sizeof(si_other);
  char pktbuff[BUFLEN];
  char rspbuff[BUFLEN];
  */

  int ii;

  uint8_t  blades[64];
  uint16_t dio_out = 0x0000;
  // For raw address commands
  uint16_t saddr    = 0x0000;
  uint16_t sdata    = 0x0000;
  latero_dst_device destination;

  int numbytes = 0;

  latero_pkt_t response;

  printf("Init Connection: ");
  if ( ii = init_connection( &latero, str_latero_ip ) < 0 ) {
    printf("Error (%d)!\n",ii );
    return(-1);
  } else {
    printf("OK.\n");
  }

 
  // Sanitize the dac values
  for(ii = 0 ; ii < 4 ; ii++ ) {
      if (ii < dacval_cnt ) { 
          setDAC( &latero, ii, dacval[ii] );
      }
  }

/*	
  for(ii = 0 ; ii<64 ; ii++ ) {
      blades[ii] = ii;
  }
  setBlades( &latero, blades );
*/
  // Run a few test cases here
  TestInit();
  ii = 0;
  switch(testpattern) {	
    case 1:
        TestSplit1(&latero);
        sleep(1);
        TestSplit2(&latero);
    break;
    case 2:
        TestAllpin(&latero);
    break;
    case 3:
        TestRow(&latero);
        sleep(1);
        TestCol(&latero);
    break;
    case 4:
	// Test continuously without stopping
        while(1) {
		printf("%d ", ii);
		TestRow(&latero);
		printf("%d ", ii);
        	TestCol(&latero);
		ii++;
	}
    break;

  }
	
  /* Just on led is turned on... */
  setDIO( &latero, 0xDEAC );
  // setDAC( &latero, 0x0, 0x1234 );
  // setDAC( &latero, 0x1, 0x5678 );
  // setDAC( &latero, 0x2, 0x9ABC );
  // setDAC( &latero, 0x3, 0xDEF0 );

  printf("Sending\n");
  sendNormalPacket( &latero, &response );
  printf("printing\n");
  printPacket( &response );

/*
  printf("Test Connection\n");
  if( test_connection( &latero ) < 0 ) {
      fprintf(stderr,"The test_connection() failed\n");
  } else {
      printf("Connection with Latero is OK.\n");
  }
*/

  if( rd > 0 || wr > 0 ) {
    saddr = addr & 0xFFFF;
    sdata = value & 0xFFFF;

    if ( dst_main > 0 ) {
        destination = LATERO_CONTROLLER;
    } else if ( dst_io > 0 ) {
        destination = LATERO_IO;
    }
    if( rd > 0 ) {
        rawRead( &latero, destination, saddr, &sdata );
        printf("Data Read at address 0x%4.4X = 0x%4.4X\n", saddr,sdata);
    } else { /* Write */
        rawWrite(&latero, destination, saddr, sdata  );
        printf("0x%4.4X written at address 0x%4.4X\n", sdata,saddr );
    }
  } else {
    // Normal Latero Packets
    //fillNormalPacket(PKT_TYPE_FULL, dac, blades, dio_out, &packetSend);
  }

  return( close_connection( &latero ) );

}