Daata Data_readFromTextFile (MelderFile file) { try { autoMelderReadText text = MelderReadText_createFromFile (file); char32 *line = MelderReadText_readLine (text.peek()); if (! line) Melder_throw (U"No lines."); char32 *end = str32str (line, U"ooTextFile"); // oo format? autoDaata me; int formatVersion; if (end) { autostring32 klas = texgetw2 (text.peek()); me.reset (static_cast <Daata> (Thing_newFromClassName (klas.peek(), & formatVersion))); } else { end = str32str (line, U"TextFile"); if (! end) Melder_throw (U"Not an old-type text file; should not occur."); *end = U'\0'; me.reset (static_cast <Daata> (Thing_newFromClassName (line, nullptr))); formatVersion = -1; // old version } MelderFile_getParentDir (file, & Data_directoryBeingRead); Data_readText (me.peek(), text.peek(), formatVersion); file -> format = structMelderFile :: Format :: text; return me.transfer(); } catch (MelderError) { Melder_throw (U"Data not read from text file ", file, U"."); } }
Daata Data_readFromBinaryFile (MelderFile file) { try { autofile f = Melder_fopen (file, "rb"); char line [200]; int n = fread (line, 1, 199, f); line [n] = '\0'; char *end = strstr (line, "ooBinaryFile"); autoDaata me; int formatVersion; if (end) { fseek (f, strlen ("ooBinaryFile"), 0); autostring8 klas = bingets1 (f); me.reset (static_cast <Daata> (Thing_newFromClassName (Melder_peek8to32 (klas.peek()), & formatVersion))); } else { end = strstr (line, "BinaryFile"); if (! end) { Melder_throw (U"File ", file, U" is not a Data binary file."); } *end = '\0'; me.reset (static_cast <Daata> (Thing_newFromClassName (Melder_peek8to32 (line), nullptr))); formatVersion = -1; // old version: override version number, which was set to 0 by newFromClassName rewind (f); fread (line, 1, end - line + strlen ("BinaryFile"), f); } MelderFile_getParentDir (file, & Data_directoryBeingRead); Data_readBinary (me.peek(), f, formatVersion); file -> format = structMelderFile :: Format :: binary; f.close (file); return me.transfer(); } catch (MelderError) { Melder_throw (U"Data not read from binary file ", file, U"."); } }
Any Data_readFromBinaryFile (MelderFile file) { try { autofile f = Melder_fopen (file, "rb"); char line [200]; int n = fread (line, 1, 199, f); line [n] = '\0'; char *end = strstr (line, "ooBinaryFile"); autoData me = NULL; if (end) { fseek (f, strlen ("ooBinaryFile"), 0); autostring8 klas = bingets1 (f); me.reset ((Data) Thing_newFromClassNameA (klas.peek())); } else { end = strstr (line, "BinaryFile"); if (! end) { Melder_throw ("File ", file, " is not a Data binary file."); } *end = '\0'; me.reset ((Data) Thing_newFromClassNameA (line)); Thing_version = -1; // old version: override version number, which was set to 0 by newFromClassName rewind (f); fread (line, 1, end - line + strlen ("BinaryFile"), f); } MelderFile_getParentDir (file, & Data_directoryBeingRead); Data_readBinary (me.peek(), f); f.close (file); return me.transfer(); } catch (MelderError) { Melder_throw ("Data not read from binary file ", file, "."); } }
Any Data_readFromTextFile (MelderFile file) { try { autoMelderReadText text = MelderReadText_createFromFile (file); wchar_t *line = MelderReadText_readLine (text.peek()); if (line == NULL) Melder_throw ("No lines."); wchar_t *end = wcsstr (line, L"ooTextFile"); // oo format? autoData me = NULL; if (end) { autostring klas = texgetw2 (text.peek()); me.reset ((Data) Thing_newFromClassName (klas.peek())); } else { end = wcsstr (line, L"TextFile"); if (end == NULL) Melder_throw ("Not an old-type text file; should not occur."); *end = '\0'; me.reset ((Data) Thing_newFromClassName (line)); Thing_version = -1; // old version: override version number, which was set to 0 by newFromClassName } MelderFile_getParentDir (file, & Data_directoryBeingRead); Data_readText (me.peek(), text.peek()); return me.transfer(); } catch (MelderError) { Melder_throw ("Data not read from text file ", file, "."); } }
autoDaata Data_readFromFile (MelderFile file) { int nread, i; char header [513]; autofile f = Melder_fopen (file, "rb"); nread = fread (& header [0], 1, 512, f); f.close (file); header [nread] = 0; /***** 1. Is this file a text file as defined in Data.cpp? *****/ if (nread > 11) { char *p = strstr (header, "TextFile"); if (p && p - header < nread - 8 && p - header < 40) return Data_readFromTextFile (file); } if (nread > 22) { char headerCopy [101]; memcpy (headerCopy, header, 100); headerCopy [100] = '\0'; for (i = 0; i < 100; i ++) if (headerCopy [i] == '\0') headerCopy [i] = '\001'; char *p = strstr (headerCopy, "T\001e\001x\001t\001F\001i\001l\001e"); if (p && p - headerCopy < nread - 15 && p - headerCopy < 80) return Data_readFromTextFile (file); } /***** 2. Is this file a binary file as defined in Data.cpp? *****/ if (nread > 13) { char *p = strstr (header, "BinaryFile"); if (p && p - header < nread - 10 && p - header < 40) return Data_readFromBinaryFile (file); } /***** 3. Is this file of a type for which a recognizer has been installed? *****/ MelderFile_getParentDir (file, & Data_directoryBeingRead); for (i = 1; i <= numFileTypeRecognizers; i ++) { autoDaata object = fileTypeRecognizers [i] (nread, header, file); if (object) { if (object -> classInfo == classDaata) // dummy object? the recognizer could have had a side effect, such as drawing a picture return autoDaata (); return object; } } /***** 4. Is this a common text file? *****/ for (i = 0; i < nread; i ++) if (header [i] < 32 || header [i] > 126) // not ASCII? break; if (i >= nread) return Data_readFromTextFile (file); Melder_throw (U"File ", file, U" not recognized."); }
Any Data_readFromFile (MelderFile file) { int nread, i; char header [513]; autofile f = Melder_fopen (file, "rb"); nread = fread (& header [0], 1, 512, f); f.close (file); header [nread] = 0; /***** 1. Is this file a text file as defined in Data.cpp? *****/ if (nread > 11) { char *p = strstr (header, "TextFile"); if (p != NULL && p - header < nread - 8 && p - header < 40) return Data_readFromTextFile (file); } if (nread > 22) { char headerCopy [101]; memcpy (headerCopy, header, 100); headerCopy [100] = '\0'; for (i = 0; i < 100; i ++) if (headerCopy [i] == '\0') headerCopy [i] = '\001'; char *p = strstr (headerCopy, "T\001e\001x\001t\001F\001i\001l\001e"); if (p != NULL && p - headerCopy < nread - 15 && p - headerCopy < 80) return Data_readFromTextFile (file); } /***** 2. Is this file a binary file as defined in Data.cpp? *****/ if (nread > 13) { char *p = strstr (header, "BinaryFile"); if (p != NULL && p - header < nread - 10 && p - header < 40) return Data_readFromBinaryFile (file); } /***** 3. Is this file of a type for which a recognizer has been installed? *****/ MelderFile_getParentDir (file, & Data_directoryBeingRead); for (i = 1; i <= numFileTypeRecognizers; i ++) { Data object = (Data) fileTypeRecognizers [i] (nread, header, file); if (object == (Data) 1) return NULL; if (object) return object; } /***** 4. Is this a common text file? *****/ for (i = 0; i < nread; i ++) if (header [i] < 32 || header [i] > 126) /* Not ASCII? */ break; if (i >= nread) return Data_readFromTextFile (file); Melder_throw ("File ", file, " not recognized."); }
autoMovie Movie_openFromSoundFile (MelderFile file) { try { autoMovie me = Thing_new (Movie); autoSound sound = Sound_readFromSoundFile (file); autoMelderString fileNameHead; MelderString_copy (& fileNameHead, Melder_fileToPath (file)); char32 *extensionLocation = str32rchr (fileNameHead.string, U'.'); if (! extensionLocation) extensionLocation = & fileNameHead.string [fileNameHead.length]; *extensionLocation = U'\0'; fileNameHead.length = extensionLocation - fileNameHead.string; autoStrings strings = Strings_createAsFileList (Melder_cat (fileNameHead.string, U"*.png")); struct structMelderDir folder; MelderFile_getParentDir (file, & folder); Movie_init (me.peek(), sound.transfer(), Melder_dirToPath (& folder), strings.transfer()); return me; } catch (MelderError) { Melder_throw (U"Movie object not read from file ", file, U"."); } }