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; }
/** * @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 {
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); }
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); }
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; }
bool WriteBytes(const void *buffer, uint32_t count) { return IO_write(buffer, 1, count, handle) == IO_NORMAL; }
void IO_write_str(u8 *str) { IO_write(str,strlen((char *)str)); }
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; }