#help_index "ScreenCast;Graphics/Device Contexts;Graphics/GR Files" #define MV_FILE_MAX 0x007FF000 public I64 GR2MV(U8 *print_format="VID%03d.MV", U8 *files_find_mask, U8 *fu_flags=NULL) {/*Merge GR list to MV file. "+d" will delete GR list files. */ I64 fuf_flags = 0, file_num = 0, size; CDirEntry *tmpde, *tmpde1; U8 *base, *dst, *src, *st; CDC *dc, *dc_base = DCNew(GR_WIDTH, GR_HEIGHT); CDate cdt; Bool old_silent; FlagsScan(&fuf_flags, Define("ST_FILE_UTIL_FLAGS"), "+f+F"); FlagsScan(&fuf_flags, Define("ST_FILE_UTIL_FLAGS"), fu_flags); tmpde = tmpde1 = FilesFind(files_find_mask, fuf_flags & FUG_FILES_FIND); if (progress1_max = LinkedListCount(tmpde1)) { dst = base = MAlloc(MV_FILE_MAX); while (tmpde) { dc = GRRead(tmpde->full_name); GrBlot(dc_base, dc->x0, dc->y0, dc); if (dst + GR_FILE_MAX > base + MV_FILE_MAX) { st = MStrPrint(print_format, file_num++); FileWrite(st, base, dst-base); Free(st); dst = base; cdt = dc->cdt; dc = DCCopy(dc_base); dc->cdt = cdt; } src = DCSave(dc, &size); DCDel(dc); MemCopy(dst, src, size); dst += size; Free(src); if (fuf_flags & FUF_DEL) { old_silent = Silent; Del(tmpde->full_name); Silent(old_silent); } progress1++; tmpde = tmpde->next; } if (dst > base) { st = MStrPrint(print_format, file_num++); FileWrite(st, base, dst-base); Free(st); } Free(base); } progress1 = progress1_max = 0; DirTreeDel(tmpde1); DCDel(dc_base); return file_num; } #help_index "ScreenCast;Sound/AU Files" public U0 SoundShift(CSoundData *head, F64 dt=0) {//Shift CSoundData in time. CSoundData *tmpsd, *tmpsd1; if (dt) { tmpsd = head->next; while (tmpsd != head) { tmpsd1 = tmpsd->next; tmpsd->tS -= dt; if (tmpsd->tS < tmpsd->last->tS) { QueueRemove(tmpsd); Free(tmpsd); } tmpsd = tmpsd1; } } } public I64 AUWrite(U8 *filename, CSoundData *head, CDate *t0_now, F64 t0_tS) {//Write AU file. CSoundData *tmpsd; CAUData *base, *dst; I64 size = (1 + QueueCount(head)) * sizeof(CAUData); U8 *st = ExtDefault(filename, "AU"); base = dst = MAlloc(size); tmpsd = head; do { dst->cdt = t0_now(I64) + ToI64(CDATE_FREQ * (tmpsd->tS - t0_tS)); dst->ona = tmpsd->ona; dst++; tmpsd = tmpsd->next; } while (tmpsd != head); FileWrite(st, base, dst(U8 *) - base(U8 *)); Free(base); Free(st); return size; }