# Input and Output

- [Introduction](intro.md)

- [Character Strings](string.md)

  - [Representation of Strings](string.md#representation-of-strings)

  - [Creation of Strings](string.md#creation-of-strings)

    - [`"abc" → MonStgElt`](string.md#literal-literal-abc-monstgelt)

    - [`BinaryString(s): MonStgElt → BStgElt`](string.md#function-binarystring-monstgelt)

    - [`BString(s): MonStgElt → BStgElt`](string.md#function-bstring-monstgelt)

    - [`s cat t: MonStgElt, MonStgElt → MonStgElt`](string.md#operation-operation-cat-monstgelt-monstgelt-monstgelt)

    - [`s cat t: BStgElt, BStgElt → BStgElt`](string.md#operation-operation-cat-bstgelt-bstgelt-bstgelt)

    - [`s * t: MonStgElt, MonStgElt → MonStgElt`](string.md#operation-op-times-monstgelt-monstgelt)

    - [`s cat:= t: MonStgElt, MonStgElt → MonStgElt`](string.md#operation-operation-cat-monstgelt-monstgelt-monstgelt-2)

    - [`s cat:= t: BStgElt, BStgElt → BStgElt`](string.md#operation-operation-cat-bstgelt-bstgelt-bstgelt-2)

    - [`s *:= t: MonStgElt, MonStgElt → MonStgElt`](string.md#operation-operation-monstgelt-monstgelt-monstgelt)

    - [`&cat s: [ MonStgElt ] → MonStgElt`](string.md#literal-literal-cat-s-monstgelt-monstgelt)

    - [`&cat s: [ BStgElt ] → BStgElt`](string.md#literal-literal-cat-s-bstgelt-bstgelt)

    - [`&* s: [ MonStgElt ] → MonStgElt`](string.md#literal-literal-s-monstgelt-monstgelt)

    - [`s ^ n: MonStgElt, RngIntElt → MonStgElt`](string.md#operation-op-pow-monstgelt-rngintelt)

    - [`s[i]: MonStgElt, RngIntElt → MonStgElt`](string.md#literal-literal-s-i-monstgelt-rngintelt-monstgelt)

    - [`s[i]: BStgElt, RngIntElt → RngIntElt`](string.md#literal-literal-s-i-bstgelt-rngintelt-rngintelt)

    - [`ElementToSequence(s): MonStgElt → [ MonStgElt ]`](string.md#function-elementtosequence-monstgelt)

    - [`Eltseq(s): MonStgElt → [ MonStgElt ]`](string.md#function-eltseq-monstgelt)

    - [`ElementToSequence(s): BStgElt → [ BStgElt ]`](string.md#function-elementtosequence-bstgelt)

    - [`Eltseq(s): BStgElt → [ BStgElt ]`](string.md#function-eltseq-bstgelt)

    - [`Substring(s, n, k): MonStgElt, RngIntElt, RngIntElt → MonStgElt`](string.md#function-substring-monstgelt-rngintelt-rngintelt)

    - [`Substring(s, n, k): BStgElt, RngIntElt, RngIntElt → BStgElt`](string.md#function-substring-bstgelt-rngintelt-rngintelt)

  - [Integer-Valued Functions](string.md#integer-valued-functions)

    - [`# s: MonStgElt → RngIntElt`](string.md#operation-operation-monstgelt-rngintelt)

    - [`# s: BStgElt → RngIntElt`](string.md#operation-operation-bstgelt-rngintelt)

    - [`Index(s, t): MonStgElt, MonStgElt → RngIntElt`](string.md#function-index-monstgelt-monstgelt)

    - [`Position(s, t): MonStgElt, MonStgElt → RngIntElt`](string.md#function-position-monstgelt-monstgelt)

  - [Character Conversion](string.md#character-conversion)

    - [`StringToCode(s): MonStgElt → RngIntElt`](string.md#function-stringtocode-monstgelt)

    - [`CodeToString(n): RngIntElt → MonStgElt`](string.md#function-codetostring-rngintelt)

    - [`StringToInteger(s): MonStgElt → RngIntElt`](string.md#function-stringtointeger-monstgelt)

    - [`StringToInteger(s, b): MonStgElt, MonStgElt → RngIntElt`](string.md#function-stringtointeger-monstgelt-monstgelt)

    - [`StringToIntegerSequence(s): MonStgElt → [ RngIntElt ]`](string.md#function-stringtointegersequence-monstgelt)

    - [`IntegerToString(n): RngIntElt → MonStgElt`](string.md#function-integertostring-rngintelt)

    - [`IntegerToString(n, b): RngIntElt, RngIntElt → MonStgElt`](string.md#function-integertostring-rngintelt-rngintelt)

  - [Boolean Functions](string.md#boolean-functions)

    - [`s eq t: MonStgElt, MonStgElt → BoolElt`](string.md#operation-op-eq-monstgelt-monstgelt)

    - [`s eq t: BStgElt, BStgElt → BoolElt`](string.md#operation-op-eq-bstgelt-bstgelt)

    - [`s ne t: MonStgElt, MonStgElt → BoolElt`](string.md#operation-op-ne-monstgelt-monstgelt)

    - [`s ne t: BStgElt, MonStgElt → BoolElt`](string.md#operation-op-ne-bstgelt-monstgelt)

    - [`s in t: MonStgElt, MonStgElt → BoolElt`](string.md#operation-op-in-monstgelt-monstgelt)

    - [`s notin t: MonStgElt, MonStgElt → BoolElt`](string.md#operation-op-notin-monstgelt-monstgelt)

    - [`s lt t: MonStgElt, MonStgElt → BoolElt`](string.md#operation-op-lt-monstgelt-monstgelt)

    - [`s lt t: BStgElt, BStgElt → BoolElt`](string.md#operation-op-lt-bstgelt-bstgelt)

    - [`s le t: MonStgElt, MonStgElt → BoolElt`](string.md#operation-op-le-monstgelt-monstgelt)

    - [`s le t: BStgElt, BStgElt → BoolElt`](string.md#operation-op-le-bstgelt-bstgelt)

    - [`s gt t: MonStgElt, MonStgElt → BoolElt`](string.md#operation-op-gt-monstgelt-monstgelt)

    - [`s gt t: BStgElt, BStgElt → BoolElt`](string.md#operation-op-gt-bstgelt-bstgelt)

    - [`s ge t: MonStgElt, MonStgElt → BoolElt`](string.md#operation-op-ge-monstgelt-monstgelt)

    - [`s ge t: BStgElt, BStgElt → BoolElt`](string.md#operation-op-ge-bstgelt-bstgelt)

    - [`Example: Strings`](string.md#example-ex-04834d)

  - [Parsing Strings](string.md#parsing-strings)

    - [`Split(S, D): MonStgElt, MonStgElt → [ MonStgElt ]`](string.md#function-split-monstgelt-monstgelt)

    - [`Split(S): MonStgElt → [ MonStgElt ]`](string.md#function-split-monstgelt)

    - [`Example: Split`](string.md#example-ex-461123)

    - [`Regexp(R, S): MonStgElt, MonStgElt → BoolElt, MonStgElt, [ MonStgElt ]`](string.md#function-regexp-monstgelt-monstgelt)

    - [`Example: Regexp`](string.md#example-ex-c69b5a)

- [Printing](print.md)

  - [The print-Statement](print.md#the-print-statement)

    - [`print expression;`](print.md#literal-literal-print-print-expression)

    - [`print expression, ..., expression;`](print.md#literal-literal-print-print-expression-expression)

    - [`print expression : parameters;`](print.md#literal-literal-print-print-expression-parameters)

  - [Formatted Printing](print.md#formatted-printing)

    - [`printf format, expression, ..., expression;`](print.md#literal-literal-printf-printf-format-expression-expression)

    - [`Example: printf`](print.md#example-ex-f268ee)

    - [`Example: printf2`](print.md#example-ex-2f73a2)

    - [`fprintf file, format, expression, ..., expression;`](print.md#literal-literal-fprintf-fprintf-file-format-expression-expression)

    - [`Example: fprintf`](print.md#example-ex-97d95e)

  - [Verbose Printing](print.md#verbose-printing)

    - [`vprint flag: expression, ..., expression;`](print.md#literal-literal-vprint-vprint-flag-expression-expression)

    - [`vprint flag, n: expression, ..., expression;`](print.md#literal-literal-vprint-vprint-flag-n-expression-expression)

    - [`vprintf flag: format, expression, ..., expression;`](print.md#literal-literal-vprintf-vprintf-flag-format-expression-expression)

    - [`vprintf flag, n: format, expression, ..., expression;`](print.md#literal-literal-vprintf-vprintf-flag-n-format-expression-expression)

  - [Automatic Printing](print.md#automatic-printing)

    - [`ShowPrevious()`](print.md#function-showprevious)

    - [`ShowPrevious(i): RngIntElt`](print.md#function-showprevious-rngintelt)

    - [`ClearPrevious()`](print.md#function-clearprevious)

    - [`SetPreviousSize(n): RngIntElt`](print.md#function-setprevioussize-rngintelt)

    - [`GetPreviousSize() → RngIntElt`](print.md#function-getprevioussize)

    - [`Example: Auto Print`](print.md#example-ex-feb63d)

  - [Indentation](print.md#indentation)

    - [`IndentPush()`](print.md#function-indentpush)

    - [`IndentPush(C): RngIntElt`](print.md#function-indentpush-rngintelt)

    - [`IndentPop()`](print.md#function-indentpop)

    - [`IndentPop(C): RngIntElt`](print.md#function-indentpop-rngintelt)

  - [Printing to a File](print.md#printing-to-a-file)

    - [`PrintFile(F, x): MonStgElt, Any`](print.md#function-printfile-monstgelt-any)

    - [`Write(F, x): MonStgElt, Any`](print.md#function-write-monstgelt-any)

    - [`WriteBinary(F, s): MonStgElt, BStgElt`](print.md#function-writebinary-monstgelt-bstgelt)

    - [`PrintFile(F, x, L): MonStgElt, Any, MonStgElt`](print.md#function-printfile-monstgelt-any-monstgelt)

    - [`Write(F, x, L): MonStgElt, Any, MonStgElt`](print.md#function-write-monstgelt-any-monstgelt)

    - [`PrintFileMagma(F, x): MonStgElt, Any`](print.md#function-printfilemagma-monstgelt-any)

  - [Printing to a String](print.md#printing-to-a-string)

    - [`Sprint(x): Elt → MonStgElt`](print.md#function-sprint-elt)

    - [`Sprint(x, L): Elt, MonStgElt → MonStgElt`](print.md#function-sprint-elt-monstgelt)

    - [`Sprintf(F, ...): MonStgElt, ... → MonStgElt`](print.md#function-sprintf-monstgelt)

    - [`Example: Sprintf`](print.md#example-ex-66c7f1)

  - [Redirecting Output](print.md#redirecting-output)

    - [`SetOutputFile(F): MonStgElt`](print.md#function-setoutputfile-monstgelt)

    - [`UnsetOutputFile()`](print.md#function-unsetoutputfile)

    - [`HasOutputFile() → BoolElt`](print.md#function-hasoutputfile)

- [Input](input.md)

  - [Reading a Complete File](input.md#reading-a-complete-file)

    - [`Read(name): MonStgElt → MonStgElt`](input.md#function-read-monstgelt)

    - [`ReadBinary(name): MonStgElt → BStgElt`](input.md#function-readbinary-monstgelt)

    - [`Example: Read`](input.md#example-ex-63220d)

  - [Reading Command Output](input.md#reading-command-output)

    - [`Pipe(cmd, input): MonStgElt, MonStgElt → MonStgElt`](input.md#function-pipe-monstgelt-monstgelt)

    - [`Pipe(cmds, inputs): SeqEnum, SeqEnum → SeqEnum`](input.md#function-pipe-seqenum-seqenum)

    - [`Example: Pipe`](input.md#example-ex-b6f57d)

    - [`Example: Pipes`](input.md#example-ex-7c1133)

  - [Interactive Input](input.md#interactive-input)

    - [`read identifier;`](input.md#literal-literal-read-read-identifier)

    - [`read identifier, prompt;`](input.md#literal-literal-read-read-identifier-prompt)

    - [`readi identifier;`](input.md#literal-literal-readi-readi-identifier)

    - [`readi identifier, prompt;`](input.md#literal-literal-read-readi-identifier-prompt)

- [I/O Objects](io.md)

  - [`IOType(I): IO → MonStgElt`](io.md#function-iotype-io)

  - [Files](io.md#files)

    - [`Open(name, mode): MonStgElt, MonStgElt → IO`](io.md#function-open-monstgelt-monstgelt)

    - [`OpenTest(name, mode): MonStgElt, MonStgElt → BoolElt, IO`](io.md#function-opentest-monstgelt-monstgelt)

  - [Pipes](io.md#pipes)

    - [`POpen(cmd, mode): MonStgElt, MonStgElt → IO`](io.md#function-popen-monstgelt-monstgelt)

    - [`Example: Get Time`](io.md#example-ex-aff26a)

  - [Sockets](io.md#sockets)

    - [`Socket(H, P : parameters): MonStgElt, RngIntElt → IOSocket`](io.md#function-socket-monstgelt-rngintelt)

    - [`Socket( : parameters) → IOSocket`](io.md#function-socket)

    - [`WaitForConnection(S): IO → IO`](io.md#function-waitforconnection-io)

  - [Other Socket Operations](io.md#other-socket-operations)

    - [`SocketInformation(S): IO → Tup, Tup`](io.md#function-socketinformation-io)

    - [`IsServerSocket(S): IO → BoolElt`](io.md#function-isserversocket-io)

    - [`Example: Sockets`](io.md#example-ex-7f96d9)

  - [A Note on Socket Security](io.md#a-note-on-socket-security)

- [I/O Operations](io-operations.md)

  - [End of File Marker](io-operations.md#end-of-file-marker)

    - [`Eof() → MonStgElt`](io-operations.md#function-eof)

    - [`IsEof(S): MonStgElt → BoolElt`](io-operations.md#function-iseof-monstgelt)

    - [`AtEof(I): IO → BoolElt`](io-operations.md#function-ateof-io)

    - [`Example: EOF`](io-operations.md#example-ex-7ebbe1)

  - [Strings](io-operations.md#strings)

    - [`Read(I : parameters): IO → MonStgElt`](io-operations.md#function-read-io)

    - [`ReadCheck(I : parameters): IO → BoolElt, MonStgElt`](io-operations.md#function-readcheck-io)

    - [`Read(I, n): IO, RngIntElt → MonStgElt`](io-operations.md#function-read-io-rngintelt)

    - [`ReadCheck(I, n): IO, RngIntElt → BoolElt, MonStgElt`](io-operations.md#function-readcheck-io-rngintelt)

    - [`Write(I, s): IO, MonStgElt`](io-operations.md#function-write-io-monstgelt)

    - [`WriteCheck(I, s): IO, MonStgElt → BoolElt`](io-operations.md#function-writecheck-io-monstgelt)

  - [Legacy String Operations](io-operations.md#legacy-string-operations)

    - [`Put(I, s): IO, MonStgElt`](io-operations.md#function-put-io-monstgelt)

    - [`Puts(I, s): IO, MonStgElt`](io-operations.md#function-puts-io-monstgelt)

    - [`Getc(I): IO → MonStgElt`](io-operations.md#function-getc-io)

    - [`Gets(I): IO → MonStgElt`](io-operations.md#function-gets-io)

    - [`Ungetc(I, c): IO, MonStgElt`](io-operations.md#function-ungetc-io-monstgelt)

    - [`Example: Line Count`](io-operations.md#example-ex-81a099)

  - [Byte Sequences](io-operations.md#byte-sequences)

    - [`ReadBytes(I : parameters): IO → SeqEnum`](io-operations.md#function-readbytes-io)

    - [`ReadBytesCheck(I : parameters): IO → BoolElt, SeqEnum`](io-operations.md#function-readbytescheck-io)

    - [`ReadBytes(I, n): IO, RngIntElt → SeqEnum`](io-operations.md#function-readbytes-io-rngintelt)

    - [`ReadBytesCheck(I, n): IO, RngIntElt → BoolElt, SeqEnum`](io-operations.md#function-readbytescheck-io-rngintelt)

    - [`WriteBytes(I, S): IO, SeqEnum`](io-operations.md#function-writebytes-io-seqenum)

    - [`WriteBytesCheck(I, S): IO, SeqEnum → BoolElt`](io-operations.md#function-writebytescheck-io-seqenum)

  - [Objects](io-operations.md#objects)

    - [`ReadObject(I): IO → Any`](io-operations.md#function-readobject-io)

    - [`ReadObjectCheck(I): IO → BoolElt, Any`](io-operations.md#function-readobjectcheck-io)

    - [`WriteObject(I, x): IO, Any`](io-operations.md#function-writeobject-io-any)

    - [`WriteObjectCheck(I, x): IO, Any → BoolElt`](io-operations.md#function-writeobjectcheck-io-any)

  - [Versions](io-operations.md#versions)

    - [`GetMOTPMaxVersion() → MonStgElt`](io-operations.md#function-getmotpmaxversion)

    - [`GetMOTPVersion() → MonStgElt`](io-operations.md#function-getmotpversion)

    - [`SetMOTPVersion(v): MonStgElt`](io-operations.md#function-setmotpversion-monstgelt)

    - [`SetMOTPVersion(I, v): IO, MonStgElt`](io-operations.md#function-setmotpversion-io-monstgelt)

    - [`NotifyVersion(I): IO`](io-operations.md#function-notifyversion-io)

    - [`ExpectVersion(I): IO`](io-operations.md#function-expectversion-io)

    - [`ExchangeVersions(I): IO`](io-operations.md#function-exchangeversions-io)

    - [`Example: Object Exchange`](io-operations.md#example-ex-9cbada)

  - [Positioning](io-operations.md#positioning)

    - [`Tell(I): IO → RngIntElt`](io-operations.md#function-tell-io)

    - [`Seek(I, offset): IO, RngIntElt`](io-operations.md#function-seek-io-rngintelt)

    - [`Seek(I, offset, origin): IO, RngIntElt, RngIntElt`](io-operations.md#function-seek-io-rngintelt-rngintelt)

    - [`Rewind(I): IO`](io-operations.md#function-rewind-io)

  - [Other I/O Operations](io-operations.md#other-i-o-operations)

    - [`Flush(I): IO`](io-operations.md#function-flush-io)

- [Managing Multiple I/O Objects](io-many.md)

  - [`WaitForIO(R : parameters): SeqEnum → SeqEnum`](io-many.md#function-waitforio-seqenum)

  - [`WaitForIO(R, W : parameters): SeqEnum → SeqEnum, SeqEnum`](io-many.md#function-waitforio-seqenum-2)

  - [`Example: Chat Server`](io-many.md#example-ex-8b1b67)

- [Asynchronous I/O](asyncio.md)

  - [A Note on Files and Pipes](asyncio.md#a-note-on-files-and-pipes)

  - [Strings](asyncio.md#strings)

    - [`AsyncRead(I : parameters): IO`](asyncio.md#function-asyncread-io)

    - [`AsyncRead(I, n): IO, RngIntElt`](asyncio.md#function-asyncread-io-rngintelt)

    - [`AsyncWrite(I, s): IO, MonStgElt`](asyncio.md#function-asyncwrite-io-monstgelt)

  - [Byte Sequences](asyncio.md#byte-sequences)

    - [`AsyncReadBytes(I : parameters): IO`](asyncio.md#function-asyncreadbytes-io)

    - [`AsyncReadBytes(I, n): IO, RngIntElt`](asyncio.md#function-asyncreadbytes-io-rngintelt)

    - [`AsyncWriteBytes(I, S): IO, SeqEnum`](asyncio.md#function-asyncwritebytes-io-seqenum)

  - [Objects](asyncio.md#objects)

    - [`AsyncReadObject(I): IO`](asyncio.md#function-asyncreadobject-io)

    - [`AsyncWriteObject(I, x): IO, Any`](asyncio.md#function-asyncwriteobject-io-any)

  - [Versions](asyncio.md#versions)

    - [`AsyncNotifyVersion(I): IO`](asyncio.md#function-asyncnotifyversion-io)

    - [`AsyncExpectVersion(I): IO`](asyncio.md#function-asyncexpectversion-io)

    - [`AsyncExchangeVersions(I): IO`](asyncio.md#function-asyncexchangeversions-io)

    - [`Example: Collatz`](asyncio.md#example-ex-c7bac3)

- [Loading Program Files](load.md)

  - [`Load(F): MonStgElt`](load.md#function-load-monstgelt)

  - [`Load(Q): [MonStgElt]`](load.md#function-load-monstgelt-2)

  - [`load "filename";`](load.md#literal-literal-load-load-filename)

  - [`iload "filename";`](load.md#literal-literal-iload-iload-filename)

- [Saving and Restoring Workspaces](workspace.md)

  - [`save "filename";`](workspace.md#literal-literal-save-save-filename)

  - [`restore "filename";`](workspace.md#literal-literal-restore-restore-filename)

- [Logging a Session](logging.md)

  - [`SetLogFile(F): MonStgElt`](logging.md#function-setlogfile-monstgelt)

  - [`UnsetLogFile()`](logging.md#function-unsetlogfile)

  - [`SetEchoInput(b): BoolElt`](logging.md#function-setechoinput-boolelt)

- [Memory Usage](system-calls.md)

  - [`GetMemoryUsage() → RngIntElt`](system-calls.md#function-getmemoryusage)

  - [`GetMaximumMemoryUsage() → RngIntElt`](system-calls.md#function-getmaximummemoryusage)

  - [`ResetMaximumMemoryUsage()`](system-calls.md#function-resetmaximummemoryusage)

- [System Calls](system-calls-2.md)

  - [`Alarm(s): RngIntElt`](system-calls-2.md#function-alarm-rngintelt)

  - [`ChangeDirectory(s): MonStgElt`](system-calls-2.md#function-changedirectory-monstgelt)

  - [`GetCurrentDirectory()`](system-calls-2.md#function-getcurrentdirectory)

  - [`Getpid()`](system-calls-2.md#function-getpid)

  - [`Getuid()`](system-calls-2.md#function-getuid)

  - [`Fork() → RngIntElt`](system-calls-2.md#function-fork)

  - [`System(C): MonStgElt → RngIntElt`](system-calls-2.md#function-system-monstgelt)

  - [`Example: Get Date`](system-calls-2.md#example-ex-52e3aa)

  - [`%! shell-command`](system-calls-2.md#literal-literal-shell-command)

- [Creating Names](create-name.md)

  - [`Tempname(P): MonStgElt → MonStgElt`](create-name.md#function-tempname-monstgelt)
