FileInMemory FileInMemory_create (MelderFile file) { try { if (! MelderFile_readable (file)) { Melder_throw ("File not readable."); } long length = MelderFile_length (file); if (length <= 0) { Melder_throw ("File is empty."); } autoFileInMemory me = Thing_new (FileInMemory); my d_path = Melder_wcsdup (file -> path); my d_id = Melder_wcsdup (MelderFile_name (file)); my d_numberOfBytes = length; my d_data = NUMvector <char> (0, my d_numberOfBytes); // one extra for 0-byte at end if text MelderFile_open (file); for (long i = 0; i < my d_numberOfBytes; i++) { unsigned int number = bingetu1 (file -> filePointer); my d_data[i] = number; } my d_data[my d_numberOfBytes] = 0; // one extra MelderFile_close (file); return me.transfer(); } catch (MelderError) { Melder_throw ("FileInMemory not created from \"", Melder_fileToPath (file), "\"."); } }
autoFileInMemory FileInMemory_create (MelderFile file) { try { if (! MelderFile_readable (file)) { Melder_throw (U"File not readable."); } long length = MelderFile_length (file); if (length <= 0) { Melder_throw (U"File is empty."); } autoFileInMemory me = Thing_new (FileInMemory); my d_path = Melder_dup (file -> path); my d_id = Melder_dup (MelderFile_name (file)); my d_numberOfBytes = length; my ownData = true; my d_data = NUMvector <char> (0, my d_numberOfBytes); // includes room for a final null byte in case the file happens to contain text MelderFile_open (file); for (long i = 0; i < my d_numberOfBytes; i++) { unsigned int number = bingetu1 (file -> filePointer); my d_data[i] = number; } my d_data[my d_numberOfBytes] = 0; // one extra MelderFile_close (file); return me; } catch (MelderError) { Melder_throw (U"FileInMemory not created from \"", Melder_fileToPath (file), U"\"."); } }
static void menu_cb_saveAs (TextEditor me, EDITOR_ARGS_DIRECT) { if (! my saveDialog) my saveDialog = UiOutfile_create (my d_windowForm, U"Save", cb_saveAs_ok, me, nullptr, nullptr); char32 defaultName [300]; Melder_sprint (defaultName,300, ! my v_fileBased () ? U"info.txt" : my name [0] ? MelderFile_name (& my file) : U""); UiOutfile_do (my saveDialog.get(), defaultName); }
static autoDaata bdfFileRecognizer (int nread, const char * /* header */, MelderFile file) { const char32 *fileName = MelderFile_name (file); bool isBdfFile = Melder_stringMatchesCriterion (fileName, kMelder_string_ENDS_WITH, U".bdf") || Melder_stringMatchesCriterion (fileName, kMelder_string_ENDS_WITH, U".BDF"); bool isEdfFile = Melder_stringMatchesCriterion (fileName, kMelder_string_ENDS_WITH, U".edf") || Melder_stringMatchesCriterion (fileName, kMelder_string_ENDS_WITH, U".EDF"); if (nread < 512 || (! isBdfFile && ! isEdfFile)) return autoDaata (); return EEG_readFromBdfFile (file); }
DIRECT (ERPTier_help) Melder_help (L"ERPTier"); END /***** file recognizers *****/ static Any bdfFileRecognizer (int nread, const char *header, MelderFile file) { const wchar_t *fileName = MelderFile_name (file); bool isBdfFile = wcsstr (fileName, L".bdf") != NULL || wcsstr (fileName, L".BDF") != NULL; bool isEdfFile = wcsstr (fileName, L".edf") != NULL || wcsstr (fileName, L".EDF") != NULL; if (nread < 512 || (! isBdfFile && ! isEdfFile)) return NULL; return EEG_readFromBdfFile (file); }
DIRECT (ERPTier_help) Melder_help (U"ERPTier"); END /***** file recognizers *****/ static Any bdfFileRecognizer (int nread, const char *header, MelderFile file) { (void) header; const char32 *fileName = MelderFile_name (file); bool isBdfFile = Melder_stringMatchesCriterion (fileName, kMelder_string_ENDS_WITH, U".bdf") || Melder_stringMatchesCriterion (fileName, kMelder_string_ENDS_WITH, U".BDF"); bool isEdfFile = Melder_stringMatchesCriterion (fileName, kMelder_string_ENDS_WITH, U".edf") || Melder_stringMatchesCriterion (fileName, kMelder_string_ENDS_WITH, U".EDF"); if (nread < 512 || (! isBdfFile && ! isEdfFile)) return NULL; return EEG_readFromBdfFile (file); }
Graphics Graphics_create_postscriptjob (MelderFile file, int resolution, enum kGraphicsPostscript_spots spots, enum kGraphicsPostscript_paperSize paperSize, enum kGraphicsPostscript_orientation rotation, double magnification) { autoGraphicsPostscript me = Thing_new (GraphicsPostscript); time_t today; my postScript = true, my yIsZeroAtTheTop = false, my languageLevel = 2; my job = true, my eps = false, my printer = false; my d_printf = (int (*)(void *, const char*, ...)) fprintf; Graphics_init (me.peek(), resolution); // virtual resolution; may differ from that of the printer; OK if always 600 dpi my photocopyable = spots == kGraphicsPostscript_spots_PHOTOCOPYABLE; if (my photocopyable) { my spotsDensity = 85; my spotsAngle = 35; } else { my spotsDensity = 106; my spotsAngle = 46; } if (paperSize == kGraphicsPostscript_paperSize_A3) my paperWidth = 842 / 72.0, my paperHeight = 1191 / 72.0; else if (paperSize == kGraphicsPostscript_paperSize_US_LETTER) my paperWidth = 612 / 72.0, my paperHeight = 792 / 72.0; else my paperWidth = 595 / 72.0, my paperHeight = 842 / 72.0; my landscape = rotation == kGraphicsPostscript_orientation_LANDSCAPE; my magnification = magnification; my includeFonts = true; my d_file = Melder_fopen (file, "w"); /* * The Device Coordinates are the PostScript user coordinates. * They are chosen in such a way that a distance of 1 in device coordinates * equals one dot if the printer's resolution is 'resolution' dots per inch. * Take a sensible default margin: half an inch on all sides. */ my d_x1DC = my d_x1DCmin = resolution / 2; my d_x2DC = my d_x2DCmax = (my paperWidth - 0.5) * resolution; my d_y1DC = my d_y1DCmin = resolution / 2; my d_y2DC = my d_y2DCmax = (my paperHeight - 0.5) * resolution; /* * Now don't just set x1wNDC etc, but force computation of the scaling as well. */ Graphics_setWsWindow ((Graphics) me.peek(), 0, my paperWidth - 1.0, 13.0 - my paperHeight, 12.0); /* * We will adhere to version 3.0 of the Document Structuring Conventions for print jobs. */ my d_printf (my d_file, "%%!PS-Adobe-3.0\n"); my d_printf (my d_file, "%%%%Creator: Praat Shell 4.2\n"); my d_printf (my d_file, "%%%%Title: %s\n", Melder_peek32to8 (MelderFile_name (file))); today = time (nullptr); my d_printf (my d_file, "%%%%CreationDate: %s", ctime (& today)); // contains newline symbol my d_printf (my d_file, "%%%%PageOrder: Special\n"); my d_printf (my d_file, "%%%%Pages: (atend)\n"); my d_printf (my d_file, "%%%%EndComments\n"); downloadPrologAndSetUp (me.peek()); initPage (me.peek()); return (Graphics) me.transfer(); }