Esempio n. 1
0
extern "C" void fakewrite(png_structp png_ptr, png_bytep data, png_size_t length)
{
	MCPNGWriteContext *t_context = (MCPNGWriteContext*)png_get_io_ptr(png_ptr);
	if (IO_write(data, sizeof(uint1), length, t_context->stream) != IO_NORMAL)
		png_error(png_ptr, (char *)"pnglib write error");
	t_context->byte_count += length;
}
Esempio n. 2
0
/**
 * @brief ATcmd     send AT common 发送AT指令通用函数
 * @param cmd       AT common string or null(send nothing) AT指令(字符串)或空(不发送任何东西)
 * @param timeOut_s   time out  多少秒超时
 * @param cmd_num   The num of cmd which it exp 需要对比的命令(即"..."的参数个数)
 * @return  大于0时,表示收到和列表匹配的字符串
 *cmd   cmdLen
 *0     0       send nothing,wait exp       不发送任何东西,等待收到列表中的字符串
 *!=0   0       send cmd string,wait exp    发送字符串,等待收到列表中的字符串
 *!=0   !=0     send hex data,wait exp      发送十六进制数据,等待收到列表中的字符串
 *0     !=0     send nothing,wait exp       不发送任何东西,等待收到列表中的字符串
 */
s8 ATcmd(u8 *cmd,u8 cmdLen,u8 timeOut_s,u8 *pOut,u8 cmd_num,...)
{
    static u8 sate=0;
    s8 ret=WAITING_EVENT;
    u8 i;
    va_list vap;
    u8 *pStr1;
    u8 *pStr2;
    if(sate!=0) goto wait;

    //send cmd
    if((cmd!=0)&&(cmdLen==0))IO_write_str((u8*)cmd);    //if cmd is string then cmdlen can be set to zro
    else if((cmd!=0)&&(cmdLen!=0))IO_write(cmd,cmdLen); //this is use to send hex data
    //if timeOut_s is zro will return TIME_OUT
    if(timeOut_s==0)
    {
        ret=TIME_OUT;
        return ret;     //@2015.6.18 时间设置为零时应该直接返回
    }
    else    setTimeOut(timeOut_s);
    sate=1;
    //set time out time
    //wait event
wait:
    if((ATevent&EVENT_AT_FRAME)||(ATevent&EVENT_TIME_OUT))
    {
        if(ATevent&EVENT_AT_FRAME)
        {
            ATevent&=~EVENT_AT_FRAME;     //clear pending event
            va_start(vap , cmd_num);     //set the last one parameter
            //get AT common string from buffer
           pStr1=GetATFrame();
           for(i=0;i<cmd_num;i++)
           {
                pStr2=va_arg(vap , u8*);  //get list's pointer
                ATAssert(pStr2!=0);
               if( StringCompare(pStr1,pStr2))
               {
                   if(pOut)StrCopy(pOut,pStr1);//if pOut not zro copy The string out
                   break;  //it is the same of list's string
               }
           }
           va_end(vap);    //set vap to zro
           if(i==cmd_num) ret=UNEXPECT_CMD; //the string is unkown
           else ret=i+1;
        }
        else
        {
Esempio n. 3
0
IO_stat MCEPS::save(IO_handle stream, uint4 p_part, bool p_force_ext)
{
	IO_stat stat;

	if ((stat = IO_write_uint1(OT_MCEPS, stream)) != IO_NORMAL)
		return stat;
	if ((stat = MCObject::save(stream, p_part, p_force_ext)) != IO_NORMAL)
		return stat;
	if ((stat = IO_write_uint4(size, stream)) != IO_NORMAL)
		return stat;
	if ((stat = IO_write(postscript, sizeof(char), size, stream)) != IO_NORMAL)
		return stat;
	// MW-2013-11-19: [[ UnicodeFileFormat ]] EPS is always ASCII so legacy.
	if ((stat = IO_write_cstring_legacy(prolog, stream, 2)) != IO_NORMAL)
		return stat;
	if ((stat = IO_write_int4(MCU_r8toi4(xscale), stream)) != IO_NORMAL)
		return stat;
	if (flags & F_SCALE_INDEPENDENTLY)
		if ((stat = IO_write_int4(MCU_r8toi4(yscale), stream)) != IO_NORMAL)
			return stat;
	if ((stat = IO_write_int2(angle, stream)) != IO_NORMAL)
		return stat;
	if ((stat = IO_write_int2(tx, stream)) != IO_NORMAL)
		return stat;
	if ((stat = IO_write_int2(ty, stream)) != IO_NORMAL)
		return stat;
	if ((stat = IO_write_uint2(ex, stream)) != IO_NORMAL)
		return stat;
	if ((stat = IO_write_uint2(ey, stream)) != IO_NORMAL)
		return stat;
	if (flags & F_RETAIN_IMAGE)
		if ((stat = image->save(stream, p_part, p_force_ext)) != IO_NORMAL)
			return stat;
	if ((stat = IO_write_uint2(curpage, stream)) != IO_NORMAL)
		return stat;
	if ((stat = IO_write_uint2(pagecount, stream)) != IO_NORMAL)
		return stat;
	uint2 i;
	for (i = 0 ; i < pagecount ; i++)
		if ((stat = IO_write_uint4(pageIndex[i], stream)) != IO_NORMAL)
			return stat;
	return savepropsets(stream);
}
Esempio n. 4
0
IO_stat MCVideoClip::save(IO_handle stream, uint4 p_part, bool p_force_ext)
{
	IO_stat stat;

	if ((stat = IO_write_uint1(OT_VIDEO_CLIP, stream)) != IO_NORMAL)
		return stat;
	if ((stat = MCObject::save(stream, p_part, p_force_ext)) != IO_NORMAL)
		return stat;
	if ((stat = IO_write_uint4(size, stream)) != IO_NORMAL)
		return stat;
	if ((stat = IO_write(frames, sizeof(uint1), size, stream)) != IO_NORMAL)
		return stat;
	if (flags & F_FRAME_RATE)
		if ((stat = IO_write_uint2(framerate, stream)) != IO_NORMAL)
			return stat;
	if (flags & F_SCALE_FACTOR)
		if ((stat = IO_write_int4(MCU_r8toi4(scale), stream)) != IO_NORMAL)
			return stat;
	return savepropsets(stream);
}
Esempio n. 5
0
char *MCVideoClip::getfile()
{
	if (frames != NULL)
	{
		char *tmpfile = strclone(MCS_tmpnam());
		IO_handle tstream;
		if ((tstream = MCS_open(tmpfile, IO_WRITE_MODE, False, False, 0)) == NULL)
		{
			delete tmpfile;
			return NULL;
		}
		IO_stat stat = IO_write(frames, sizeof(int1), size, tstream);
		MCS_close(tstream);
		if (stat != IO_NORMAL)
		{
			MCS_unlink(tmpfile);
			delete tmpfile;
			return NULL;
		}
		return tmpfile;
	}
	return NULL;
}
Esempio n. 6
0
		bool WriteBytes(const void *buffer, uint32_t count)
		{
			return IO_write(buffer, 1, count, handle) == IO_NORMAL;
		}
Esempio n. 7
0
void IO_write_str(u8 *str)
{
    IO_write(str,strlen((char *)str));
}
Esempio n. 8
0
IO_stat MCDispatch::dosavestack(MCStack *sptr, const MCString &fname)
{
	if (MCModeCheckSaveStack(sptr, fname) != IO_NORMAL)
		return IO_ERROR;
	
	char *linkname;
	if (fname.getlength() != 0)
		linkname = fname.clone();
	else
		if ((linkname = strclone(sptr->getfilename())) == NULL)
		{
			MCresult->sets("stack does not have a filename");
			return IO_ERROR;
		}
	if (linkname == NULL)
	{
		MCresult->sets("can't open stack file, bad path");
		return IO_ERROR;
	}
	if (MCS_noperm(linkname))
	{
		MCresult->sets("can't open stack file, no permission");
		delete linkname;
		return IO_ERROR;
	}
	char *oldfiletype = MCfiletype;
	MCfiletype = MCstackfiletype;
	char *backup = new char[strlen(linkname) + 2];
	strcpy(backup, linkname);
	strcat(backup, "~");
	MCS_unlink(backup);
	if (MCS_exists(linkname, True) && !MCS_backup(linkname, backup))
	{
		MCresult->sets("can't open stack backup file");
		MCfiletype = oldfiletype;
		delete linkname;
		delete backup;
		return IO_ERROR;
	}
	IO_handle stream;
	if ((stream = MCS_open(linkname, IO_WRITE_MODE, True, False, 0)) == NULL)
	{
		MCresult->sets("can't open stack file");
		cleanup(stream, linkname, backup);
		MCfiletype = oldfiletype;
		return IO_ERROR;
	}
	MCfiletype = oldfiletype;
	MCString errstring = "Error writing stack (disk full?)";
	
	// MW-2012-03-04: [[ StackFile5500 ]] Work out what header to emit, and the size.
	const char *t_header;
	uint32_t t_header_size;
	if (MCstackfileversion >= 5500)
		t_header = newheader5500, t_header_size = 8;
	else if (MCstackfileversion >= 2700)
		t_header = newheader, t_header_size = 8;
	else
		t_header = header, t_header_size = HEADERSIZE;
	
	if (IO_write(t_header, sizeof(char), t_header_size, stream) != IO_NORMAL
	        || IO_write_uint1(CHARSET, stream) != IO_NORMAL)
	{
		MCresult->sets(errstring);
		cleanup(stream, linkname, backup);
		return IO_ERROR;
	}

	if (IO_write_uint1(OT_NOTHOME, stream) != IO_NORMAL
	        || IO_write_string(NULL, stream) != IO_NORMAL)
	{ // was stackfiles
		MCresult->sets(errstring);
		cleanup(stream, linkname, backup);
		return IO_ERROR;
	}
	
	// MW-2012-02-22; [[ NoScrollSave ]] Adjust the rect by the current group offset.
	MCgroupedobjectoffset . x = 0;
	MCgroupedobjectoffset . y = 0;
	
	MCresult -> clear();
	if (sptr->save(stream, 0, false) != IO_NORMAL
	        || IO_write_uint1(OT_END, stream) != IO_NORMAL)
	{
		if (MCresult -> isclear())
			MCresult->sets(errstring);
		cleanup(stream, linkname, backup);
		return IO_ERROR;
	}
	MCS_close(stream);
	uint2 oldmask = MCS_umask(0);
	uint2 newmask = ~oldmask & 00777;
	if (oldmask & 00400)
		newmask &= ~00100;
	if (oldmask & 00040)
		newmask &= ~00010;
	if (oldmask & 00004)
		newmask &= ~00001;
	MCS_umask(oldmask);
	MCS_chmod(linkname, newmask);
	if (sptr->getfilename() != NULL && !strequal(linkname, sptr->getfilename()))
		MCS_copyresourcefork(sptr->getfilename(), linkname);
	else if (sptr -> getfilename() != NULL)
		MCS_copyresourcefork(backup, linkname);
	sptr->setfilename(linkname);
	if (backup != NULL)
	{
		MCS_unlink(backup);
		delete backup;
	}
	return IO_NORMAL;
}