rakata_formats/lib.rs
1//! Binary and text format readers/writers for KotOR resources.
2//!
3//! Modules in this crate are implementation-focused and designed to support
4//! deterministic roundtrip behavior.
5
6#![forbid(unsafe_code)]
7#![warn(clippy::as_conversions)]
8#![deny(missing_docs)]
9#![deny(clippy::missing_errors_doc)]
10
11#[cfg(feature = "tracing")]
12macro_rules! trace_debug {
13 ($($arg:tt)*) => {
14 tracing::debug!($($arg)*);
15 };
16}
17
18#[cfg(not(feature = "tracing"))]
19macro_rules! trace_debug {
20 ($($arg:tt)*) => {};
21}
22
23#[cfg(feature = "tracing")]
24macro_rules! trace_warn {
25 ($($arg:tt)*) => {
26 tracing::warn!($($arg)*);
27 };
28}
29
30#[cfg(not(feature = "tracing"))]
31macro_rules! trace_warn {
32 ($($arg:tt)*) => {};
33}
34
35pub(crate) use trace_debug;
36pub(crate) use trace_warn;
37
38/// Shared vocabulary for the lazy archive indexes.
39pub mod archive;
40/// BIF archive support.
41pub mod bif;
42/// Shared binary utilities and lightweight format codec traits.
43pub mod binary;
44/// BWM/WOK binary walkmesh support.
45pub mod bwm;
46/// Capability trait for the external references a decoded view resolves.
47pub mod content_source;
48/// DDS texture-container support.
49pub mod dds;
50/// One declaration per field, emitting reader, writer and schema entry.
51/// Items the `GffModel` derive's generated code names.
52pub mod derive_support;
53/// ERF-family archive support.
54pub mod erf;
55/// GFF binary container support.
56pub mod gff;
57/// Comparing a rewritten GFF tree against its original.
58pub mod gff_compare;
59
60pub mod schema;
61
62/// Generates a typed view's reader, writer, schema and `Default` from one
63/// declaration per field.
64///
65/// Re-exported unconditionally so a consumer never names the proc-macro
66/// crate. Generated code refers to `::rakata_formats::` paths, so anything
67/// deriving this needs `rakata-formats` in scope under its own name.
68pub use rakata_formats_derive::GffModel;
69/// KEY index support.
70pub mod key;
71/// LIP binary lip-sync support.
72pub mod lip;
73/// LTR binary letter-table support.
74pub mod ltr;
75/// LYT ASCII layout support.
76pub mod lyt;
77/// MDL binary model support.
78pub mod mdl;
79/// RIM archive support.
80pub mod rim;
81/// Bounded, seekable windows over a shared source.
82pub mod section_reader;
83/// SSF binary sound-set support.
84pub mod ssf;
85/// TGA texture-image support.
86pub mod tga;
87/// Talk table (TLK) binary support.
88pub mod tlk;
89/// TPC binary texture-container support.
90pub mod tpc;
91/// 2DA binary table support.
92pub mod twoda;
93/// TXI ASCII texture-info support.
94pub mod txi;
95/// VIS ASCII visibility support.
96pub mod vis;
97/// WAV audio container support.
98pub mod wav;
99
100/// Reads BIF binary data from a reader at the current stream position.
101pub use bif::read_bif;
102/// Reads BIF binary data directly from bytes.
103pub use bif::read_bif_from_bytes;
104/// Writes BIF binary data to an output writer.
105pub use bif::write_bif;
106/// Serializes BIF binary data into a byte vector.
107pub use bif::write_bif_to_vec;
108/// In-memory BIF archive type.
109pub use bif::Bif;
110/// BIF binary parsing/serialization error type.
111pub use bif::BifBinaryError;
112/// BIF on-disk container kind.
113pub use bif::BifContainer;
114/// In-memory BIF resource entry type.
115pub use bif::BifResource;
116/// BIF resource storage-table descriptor.
117pub use bif::BifResourceStorage;
118/// Trait for decoding format values from byte slices.
119pub use binary::DecodeBinary;
120/// Trait for encoding format values into byte vectors.
121pub use binary::EncodeBinary;
122/// Reads BWM data from a reader at the current stream position.
123pub use bwm::read_bwm;
124/// Reads an ASCII BWM from a reader.
125pub use bwm::read_bwm_ascii;
126/// Reads BWM data directly from bytes.
127pub use bwm::read_bwm_from_bytes;
128/// Writes BWM data to an output writer.
129pub use bwm::write_bwm;
130/// Writes a BWM to an ASCII writer.
131pub use bwm::write_bwm_ascii;
132/// Serializes BWM data into a byte vector.
133pub use bwm::write_bwm_to_vec;
134/// In-memory BWM container type.
135pub use bwm::Bwm;
136/// One AABB-node row.
137pub use bwm::BwmAabbNode;
138/// One adjacency row.
139pub use bwm::BwmAdjacency;
140/// BWM ASCII parsing error type.
141pub use bwm::BwmAsciiError;
142/// BWM binary parsing/serialization error type.
143pub use bwm::BwmBinaryError;
144/// One edge-transition row.
145pub use bwm::BwmEdge;
146/// One face row in BWM tables.
147pub use bwm::BwmFace;
148/// Known walkmesh type values.
149pub use bwm::BwmType;
150/// Lossless walkmesh-type wrapper.
151pub use bwm::BwmTypeCode;
152/// Three-dimensional vector value for BWM data.
153pub use bwm::BwmVec3;
154/// Capability trait for the external references a decoded view resolves.
155pub use content_source::ContentSource;
156/// A [`ContentSource`] that answers nothing, for a caller with no install.
157pub use content_source::NoSource;
158/// Reads DDS data from a reader at the current stream position.
159pub use dds::read_dds;
160/// Reads DDS data directly from bytes.
161pub use dds::read_dds_from_bytes;
162/// Writes DDS data to an output writer.
163pub use dds::write_dds;
164/// Serializes DDS data into a byte vector.
165pub use dds::write_dds_to_vec;
166/// In-memory DDS container type.
167pub use dds::Dds;
168/// DDS binary parsing/serialization error type.
169pub use dds::DdsBinaryError;
170/// DDS caps2 bitflag re-export.
171pub use dds::DdsCaps2;
172/// DDS D3D-format enum re-export.
173pub use dds::DdsD3dFormat;
174/// Constructor parameter set for D3D DDS creation.
175pub use dds::DdsNewD3dParams;
176/// Reads ERF-family binary data from a reader at the current stream position.
177pub use erf::read_erf;
178/// Reads ERF-family binary data directly from bytes.
179pub use erf::read_erf_from_bytes;
180/// Reads ERF-family binary data directly from bytes with explicit read options.
181pub use erf::read_erf_from_bytes_with_options;
182/// Reads ERF-family binary data from a reader with explicit read options.
183pub use erf::read_erf_with_options;
184/// Reads save-archive data from a reader, accepting `MOD ` and `SAV ` input.
185pub use erf::read_save_archive;
186/// Reads save-archive data directly from bytes, accepting `MOD ` and `SAV ` input.
187pub use erf::read_save_archive_from_bytes;
188/// Writes ERF-family binary data to an output writer.
189pub use erf::write_erf;
190/// Serializes ERF-family binary data into a byte vector.
191pub use erf::write_erf_to_vec;
192/// Serializes ERF-family binary data into a byte vector with explicit options.
193pub use erf::write_erf_to_vec_with_options;
194/// Writes ERF-family binary data to an output writer with explicit options.
195pub use erf::write_erf_with_options;
196/// Writes save-archive data to an output writer using canonical `MOD ` output.
197pub use erf::write_save_archive;
198/// Serializes save-archive data into a byte vector using canonical `MOD ` output.
199pub use erf::write_save_archive_to_vec;
200/// In-memory ERF-family archive type.
201pub use erf::Erf;
202/// ERF-family parsing/serialization error type.
203pub use erf::ErfBinaryError;
204/// Supported ERF-family file signatures.
205pub use erf::ErfFileType;
206/// In-memory ERF localized string entry type.
207pub use erf::ErfLocalizedString;
208/// ERF reader behavior profile.
209pub use erf::ErfReadMode;
210/// ERF reader option set.
211pub use erf::ErfReadOptions;
212/// In-memory ERF resource entry type.
213pub use erf::ErfResource;
214/// ERF writer behavior profile.
215pub use erf::ErfWriteMode;
216/// ERF writer option set.
217pub use erf::ErfWriteOptions;
218/// MOD write layout policy.
219pub use erf::ModLayout;
220/// Reads GFF binary data from a reader at the current stream position.
221pub use gff::read_gff;
222/// Reads GFF binary data directly from bytes.
223pub use gff::read_gff_from_bytes;
224/// Writes GFF binary data to an output writer.
225pub use gff::write_gff;
226/// Serializes GFF binary data into a byte vector.
227pub use gff::write_gff_to_vec;
228/// What happened at one address of a document, from open until now.
229pub use gff::Change;
230/// In-memory GFF container type.
231pub use gff::Gff;
232/// GFF binary parsing/serialization error type.
233pub use gff::GffBinaryError;
234/// One open GFF file, editable by path without dropping what no view models.
235pub use gff::GffDocument;
236/// Failure addressing or editing a [`GffDocument`].
237pub use gff::GffDocumentError;
238/// In-memory GFF field type.
239pub use gff::GffField;
240/// In-memory localized-string payload type.
241pub use gff::GffLocalizedString;
242/// In-memory localized-string substring entry type.
243pub use gff::GffLocalizedSubstring;
244/// Address of a field or list element inside a GFF tree.
245pub use gff::GffPath;
246/// Failure addressing or editing a GFF tree through a path.
247pub use gff::GffPathError;
248/// Failure parsing a path from dot notation.
249pub use gff::GffPathParseError;
250/// One step of a [`GffPath`].
251pub use gff::GffPathSegment;
252/// In-memory GFF struct type.
253pub use gff::GffStruct;
254/// In-memory GFF value type.
255pub use gff::GffValue;
256/// Every value in a GFF tree, with the address it sits at.
257pub use gff::GffWalk;
258/// The magic a GFF carries when it claims no format of its own.
259pub use gff::GENERIC_FILE_TYPE;
260/// Packs KEY `(bif_index, resource_index)` parts into `resource_id`.
261pub use key::pack_resource_id;
262/// Reads KEY binary data from a reader at the current stream position.
263pub use key::read_key;
264/// Reads KEY binary data directly from bytes.
265pub use key::read_key_from_bytes;
266/// Writes KEY binary data to an output writer.
267pub use key::write_key;
268/// Serializes KEY binary data into a byte vector.
269pub use key::write_key_to_vec;
270/// In-memory KEY container type.
271pub use key::Key;
272/// In-memory KEY file-table entry type.
273pub use key::KeyBifEntry;
274/// KEY binary parsing/serialization error type.
275pub use key::KeyBinaryError;
276/// In-memory KEY resource entry type.
277pub use key::KeyResourceEntry;
278/// Reads LIP binary data from a reader at the current stream position.
279pub use lip::read_lip;
280/// Reads LIP binary data directly from bytes.
281pub use lip::read_lip_from_bytes;
282/// Writes LIP binary data to an output writer.
283pub use lip::write_lip;
284/// Serializes LIP binary data into a byte vector.
285pub use lip::write_lip_to_vec;
286/// In-memory LIP container type.
287pub use lip::Lip;
288/// LIP binary parsing/serialization error type.
289pub use lip::LipBinaryError;
290/// In-memory LIP keyframe type.
291pub use lip::LipKeyframe;
292/// Known LIP viseme shape IDs.
293pub use lip::LipShape;
294/// Lossless LIP shape code wrapper.
295pub use lip::LipShapeCode;
296/// Reads LTR binary data from a reader at the current stream position.
297pub use ltr::read_ltr;
298/// Reads LTR binary data directly from bytes.
299pub use ltr::read_ltr_from_bytes;
300/// Writes LTR binary data to an output writer.
301pub use ltr::write_ltr;
302/// Serializes LTR binary data into a byte vector.
303pub use ltr::write_ltr_to_vec;
304/// In-memory LTR container type.
305pub use ltr::Ltr;
306/// LTR binary parsing/serialization error type.
307pub use ltr::LtrBinaryError;
308/// In-memory LTR probability block type.
309pub use ltr::LtrProbabilityBlock;
310/// LTR canonical character-count constant.
311pub use ltr::LTR_CHARACTER_COUNT;
312/// Reads LYT ASCII data from a reader at the current stream position.
313pub use lyt::read_lyt;
314/// Reads LYT ASCII data directly from bytes.
315pub use lyt::read_lyt_from_bytes;
316/// Writes LYT ASCII data to an output writer.
317pub use lyt::write_lyt;
318/// Serializes LYT ASCII data into a byte vector.
319pub use lyt::write_lyt_to_vec;
320/// In-memory LYT container type.
321pub use lyt::Lyt;
322/// In-memory LYT door-hook type.
323pub use lyt::LytDoorHook;
324/// LYT ASCII parsing/serialization error type.
325pub use lyt::LytError;
326/// In-memory LYT obstacle type.
327pub use lyt::LytObstacle;
328/// In-memory LYT room type.
329pub use lyt::LytRoom;
330/// In-memory LYT track type.
331pub use lyt::LytTrack;
332/// Quaternion type used by LYT door-hook orientation.
333pub use lyt::Quaternion;
334/// Three-dimensional vector type used by LYT entries.
335pub use lyt::Vec3;
336/// Assign inverted counter values to all mesh nodes in DFS tree order.
337pub use mdl::assign_inverted_counters;
338/// Reads MDL binary data from a reader.
339pub use mdl::read_mdl;
340/// Reads MDL ASCII data from a buffered reader.
341pub use mdl::read_mdl_ascii;
342/// Reads MDL ASCII data from a string.
343pub use mdl::read_mdl_ascii_from_str;
344/// Reads MDL binary data from bytes.
345pub use mdl::read_mdl_from_bytes;
346/// Writes MDL binary data to a writer.
347pub use mdl::write_mdl;
348/// Writes MDL ASCII data to a writer.
349pub use mdl::write_mdl_ascii;
350/// Serializes MDL ASCII data into a string.
351pub use mdl::write_mdl_ascii_to_string;
352/// Writes MDL binary data to a byte vector.
353pub use mdl::write_mdl_to_vec;
354/// Writes MDL binary data with companion MDX vertex data to byte vectors.
355pub use mdl::write_mdl_with_mdx_to_vec;
356/// A node in the AABB binary search tree used by walkmesh collision meshes.
357pub use mdl::AabbNode;
358/// In-memory MDL container type.
359pub use mdl::Mdl;
360/// In-memory MDL AABB walkmesh node data type.
361pub use mdl::MdlAabb;
362/// In-memory MDL animation event type.
363pub use mdl::MdlAnimEvent;
364/// In-memory MDL animated mesh type.
365pub use mdl::MdlAnimMesh;
366/// In-memory MDL animation node type.
367pub use mdl::MdlAnimNode;
368/// In-memory MDL animation sequence type.
369pub use mdl::MdlAnimation;
370/// MDL ASCII serialization error type.
371pub use mdl::MdlAsciiError;
372/// In-memory MDL camera node data type.
373pub use mdl::MdlCamera;
374/// In-memory MDL controller type.
375pub use mdl::MdlController;
376/// MDL controller type enum.
377pub use mdl::MdlControllerType;
378/// In-memory MDL dangly mesh node data type.
379pub use mdl::MdlDangly;
380/// In-memory MDL emitter node data type.
381pub use mdl::MdlEmitter;
382/// MDL parsing error type.
383pub use mdl::MdlError;
384/// In-memory MDL face type (32-byte MaxFace format).
385pub use mdl::MdlFace;
386/// In-memory MDL keyframe type.
387pub use mdl::MdlKey;
388/// In-memory MDL light node data type.
389pub use mdl::MdlLight;
390/// In-memory MDL mesh type.
391pub use mdl::MdlMesh;
392/// In-memory MDL node type.
393pub use mdl::MdlNode;
394/// MDL node type-specific data enum.
395pub use mdl::MdlNodeData;
396/// In-memory MDL reference node data type.
397pub use mdl::MdlReference;
398/// In-memory MDL lightsaber blade mesh type.
399pub use mdl::MdlSaber;
400/// In-memory MDL skinned mesh type.
401pub use mdl::MdlSkin;
402/// Result of writing an MDL model with its companion MDX vertex data.
403pub use mdl::MdlWriteResult;
404/// Reads RIM binary data from a reader at the current stream position.
405pub use rim::read_rim;
406/// Reads RIM binary data directly from bytes.
407pub use rim::read_rim_from_bytes;
408/// Writes RIM binary data to an output writer.
409pub use rim::write_rim;
410/// Serializes RIM binary data into a byte vector.
411pub use rim::write_rim_to_vec;
412/// In-memory RIM archive type.
413pub use rim::Rim;
414/// RIM binary parsing/serialization error type.
415pub use rim::RimBinaryError;
416/// In-memory RIM resource entry type.
417pub use rim::RimResource;
418/// Map a [`GffValue`] variant to its corresponding [`GffType`].
419pub use schema::gff_value_type;
420/// Expected GFF field type, mirroring [`GffValue`] variants.
421pub use schema::GffType;
422/// Reads SSF binary data from a reader at the current stream position.
423pub use ssf::read_ssf;
424/// Reads SSF binary data directly from bytes.
425pub use ssf::read_ssf_from_bytes;
426/// Writes SSF binary data to an output writer.
427pub use ssf::write_ssf;
428/// Serializes SSF binary data into a byte vector.
429pub use ssf::write_ssf_to_vec;
430/// In-memory SSF container type.
431pub use ssf::Ssf;
432/// SSF binary parsing/serialization error type.
433pub use ssf::SsfBinaryError;
434/// SSF sound-slot identifiers.
435pub use ssf::SsfSoundSlot;
436/// Reads TGA data from a reader at the current stream position.
437pub use tga::read_tga;
438/// Reads TGA data directly from bytes.
439pub use tga::read_tga_from_bytes;
440/// Reads TGA data directly from bytes with explicit options.
441pub use tga::read_tga_from_bytes_with_options;
442/// Reads TGA data from a reader at the current stream position with explicit options.
443pub use tga::read_tga_with_options;
444/// Writes TGA data to an output writer.
445pub use tga::write_tga;
446/// Serializes TGA data into a byte vector.
447pub use tga::write_tga_to_vec;
448/// In-memory TGA image type.
449pub use tga::Tga;
450/// TGA parsing/serialization error type.
451pub use tga::TgaBinaryError;
452/// Source TGA bit depth metadata.
453pub use tga::TgaBitsPerPixel;
454/// Source TGA compression metadata.
455pub use tga::TgaCompression;
456/// Source TGA data-type metadata.
457pub use tga::TgaDataType;
458/// Source TGA header metadata.
459pub use tga::TgaHeader;
460/// Source TGA origin metadata.
461pub use tga::TgaOrigin;
462/// TGA reader input policy.
463pub use tga::TgaReadMode;
464/// TGA reader option set.
465pub use tga::TgaReadOptions;
466/// Reads TLK binary data from a reader at the current stream position.
467pub use tlk::read_tlk;
468/// Reads TLK binary data directly from bytes.
469pub use tlk::read_tlk_from_bytes;
470/// Writes TLK binary data to an output writer.
471pub use tlk::write_tlk;
472/// Serializes TLK binary data into a byte vector.
473pub use tlk::write_tlk_to_vec;
474/// In-memory TLK container type.
475pub use tlk::Tlk;
476/// TLK binary parsing/serialization error type.
477pub use tlk::TlkBinaryError;
478/// In-memory TLK entry type.
479pub use tlk::TlkEntry;
480/// Reads TPC binary data from a reader at the current stream position.
481pub use tpc::read_tpc;
482/// Reads TPC binary data directly from bytes.
483pub use tpc::read_tpc_from_bytes;
484/// Writes TPC binary data to an output writer.
485pub use tpc::write_tpc;
486/// Serializes TPC binary data into a byte vector.
487pub use tpc::write_tpc_to_vec;
488/// In-memory TPC container type.
489pub use tpc::Tpc;
490/// TPC binary parsing/serialization error type.
491pub use tpc::TpcBinaryError;
492/// TPC header fields.
493pub use tpc::TpcHeader;
494/// Header-derived TPC pixel-format classification.
495pub use tpc::TpcHeaderPixelFormat;
496/// Raw TPC pixel-format code.
497pub use tpc::TpcPixelFormatCode;
498/// Reads binary 2DA data from a reader at the current stream position.
499pub use twoda::read_twoda;
500/// Reads binary 2DA data directly from bytes.
501pub use twoda::read_twoda_from_bytes;
502/// Reads binary 2DA data directly from bytes with explicit text options.
503pub use twoda::read_twoda_from_bytes_with_options;
504/// Reads binary 2DA data from a reader at the current stream position with explicit text options.
505pub use twoda::read_twoda_with_options;
506/// Writes binary 2DA data to an output writer.
507pub use twoda::write_twoda;
508/// Serializes binary 2DA data into a byte vector.
509pub use twoda::write_twoda_to_vec;
510/// Serializes binary 2DA data into a byte vector with explicit text options.
511pub use twoda::write_twoda_to_vec_with_options;
512/// Writes binary 2DA data to an output writer with explicit text options.
513pub use twoda::write_twoda_with_options;
514/// In-memory 2DA table type.
515pub use twoda::TwoDa;
516/// 2DA binary parsing/serialization error type.
517pub use twoda::TwoDaBinaryError;
518/// Binary 2DA reader/writer text options.
519pub use twoda::TwoDaBinaryOptions;
520/// In-memory 2DA row type.
521pub use twoda::TwoDaRow;
522/// Reads TXI ASCII data from a reader at the current stream position.
523pub use txi::read_txi;
524/// Reads TXI ASCII data directly from bytes.
525pub use txi::read_txi_from_bytes;
526/// Reads TXI ASCII data directly from bytes with explicit command-token mode.
527pub use txi::read_txi_from_bytes_with_options;
528/// Reads TXI ASCII data from a reader with explicit command-token mode.
529pub use txi::read_txi_with_options;
530/// Writes TXI ASCII data to an output writer.
531pub use txi::write_txi;
532/// Serializes TXI ASCII data into a byte vector.
533pub use txi::write_txi_to_vec;
534/// Serializes TXI ASCII data into a byte vector with explicit command-token mode.
535pub use txi::write_txi_to_vec_with_options;
536/// Writes TXI ASCII data to an output writer with explicit command-token mode.
537pub use txi::write_txi_with_options;
538/// In-memory TXI container type.
539pub use txi::Txi;
540/// One TXI UV coordinate entry.
541pub use txi::TxiCoordinate;
542/// One TXI coordinate block command.
543pub use txi::TxiCoordinateBlock;
544/// One TXI command entry.
545pub use txi::TxiDirective;
546/// One TXI ordered entry.
547pub use txi::TxiEntry;
548/// TXI ASCII parsing/serialization error type.
549pub use txi::TxiError;
550/// TXI parser option set.
551pub use txi::TxiReadOptions;
552/// TXI writer option set.
553pub use txi::TxiWriteOptions;
554/// Reads VIS ASCII data from a reader at the current stream position.
555pub use vis::read_vis;
556/// Reads VIS ASCII data directly from bytes.
557pub use vis::read_vis_from_bytes;
558/// Writes VIS ASCII data to an output writer.
559pub use vis::write_vis;
560/// Serializes VIS ASCII data into a byte vector.
561pub use vis::write_vis_to_vec;
562/// In-memory VIS graph type.
563pub use vis::Vis;
564/// VIS ASCII parsing/serialization error type.
565pub use vis::VisError;
566/// Reads WAV data from a reader at the current stream position.
567pub use wav::read_wav;
568/// Reads WAV data directly from bytes.
569pub use wav::read_wav_from_bytes;
570/// Writes WAV data to an output writer using game-compatible wrapping.
571pub use wav::write_wav;
572/// Serializes WAV data into a byte vector using game-compatible wrapping.
573pub use wav::write_wav_to_vec;
574/// Serializes WAV data into a byte vector with explicit mode options.
575pub use wav::write_wav_to_vec_with_options;
576/// Writes WAV data to an output writer with explicit mode options.
577pub use wav::write_wav_with_options;
578/// In-memory WAV container type.
579pub use wav::Wav;
580/// WAV audio payload kind.
581pub use wav::WavAudioFormat;
582/// Known WAVE encoding tags.
583pub use wav::WavEncoding;
584/// Lossless WAVE encoding tag wrapper.
585pub use wav::WavEncodingCode;
586/// WAV parsing/serialization error type.
587pub use wav::WavError;
588/// KotOR WAV wrapper kind.
589pub use wav::WavType;
590/// WAVE-format metadata fields.
591pub use wav::WavWaveMetadata;
592/// WAV wrapper variant detected in source bytes.
593pub use wav::WavWrapperKind;
594/// WAV writer output mode.
595pub use wav::WavWriteMode;
596/// WAV writer option set.
597pub use wav::WavWriteOptions;