INPUT THROUGH statement
- Last Updated: October 16, 2024
- 5 minute read
- OpenEdge
- Version 12.8
- Documentation
Uses the output from a program as the input to an ABL procedure.
Syntax
|
- STREAM stream
- Specifies the name of a stream. If you do not name a stream, the unnamed stream is used. See the DEFINE STREAM statement reference entry and OpenEdge Programming Interfaces for more information on streams.
- STREAM-HANDLE handle
- Specifies the handle to a stream. If handle it is not a valid handle to a stream, the AVM generates a run-time error. Note that stream handles are not valid for the unnamed streams. See the topics on alternate I/O sources in OpenEdge Programming Interfaces for more information on streams and stream handles.
- program-name
- Represents the name of the program where you are supplying data to an ABL procedure. This can be a standard UNIX command or your own program. The name can contain Unicode characters. See Internationalize ABL Applications for more information about Unicode.
- VALUE ( expression)
-
Specifies an expression whose value is the name of a program where you are supplying data to an ABL procedure. The name of the program can contain Unicode characters.
Or, it is an expression whose value is an argument you want to pass to the program.
INPUT THROUGHpasses the value of expression as a character string. - argument
- Represents an argument you want to pass to the program.
INPUT THROUGHpasses this argument as a character string.If the argument is the literal value echo, no-echo, or unbuffered, enclose it in quotes to prevent the AVM from interpreting that argument as one of the
ECHO,NO-ECHO, orUNBUFFEREDoptions for theINPUT THROUGHstatement. - ECHO
- Displays all input data on the current output destination. Data is echoed by default.
- NO-ECHO
- Accepts input data without displaying it on the current output device.
- MAP protermcap-entry| NO-MAP
- The protermcap-entry value is an
entry from the PROTERMCAP file. Use
MAPto read an input stream that uses a different character translation from the current stream. Typically, protermcap-entry is a slash-separated combination of a standard device entry and one or more language-specific add-on entries (MAP laserwriter/frenchorMAP hp2/spanish/italian, for example). The AVM uses the PROTERMCAP entries to build a translation table for the stream. UseNO-MAPto make the AVM bypass character translation altogether. See Manage ABL Applications for more information on PROTERMCAP. See Internationalize ABL Applications for more information on national language support. - UNBUFFERED
- Reads one character at a time from a normally buffered data source,
such as a file. Use the
UNBUFFEREDoption only when the input operations of a UNIX process invoked by the ABL UNIX statement might be intermingled with the input from the ABL statements that follow theINPUT THROUGHstatement. - CONVERT
- Allows you to modify the character conversions occurring between the
UNIX program and ABL. By default, the
INPUT THROUGHstatement converts characters from the code page specified with the Stream Code Page (-cpstream) parameter to the code page specified with the Internal Code Page (-cpinternal) parameter. If you specifySOURCEsource-codepage alone, the conversion accepts source-codepage as the code page name of the UNIX program (instead of-cpstream). If you specifyTARGETtarget-codepage, the conversion accepts target-codepage as the internal code page (instead of-cpinternal). If you specify bothSOURCEsource-codepage andTARGETtarget-codepage, it converts characters from the source-codepage to target-codepage (instead of-cpstreamto-cpinternal). - TARGET target-codepage
- Specifies the target code page of the character conversion (replacing
-cpinternal). The name that you specify must be a valid code page name available in the DLC/convmap.cp file (a binary file that contains all of the tables that ABL uses for character management). - SOURCE target-codepage
- Specifies the source code page of the character conversion (replacing
-cpstream). The name that you specify must be a valid code page name available in the DLC/convmap.cp file (a binary file that contains all of the tables that ABL uses for character management). - NO-CONVERT
- Specifies that no character conversions occur between the program and
ABL. By default, the
INPUT THROUGHstatement converts characters from the-cpstreamcode page to the-cpinternalcode page.
Examples
This procedure uses as its input source the output of the UNIX echo command. Before the command runs, the UNIX shell
substitutes the process-id number for $ and the current directory search path for $PATH.
The results are then echoed and become available as a line of input to ABL. When the
IMPORT statement is executed, the line of input from echo is read and the
values are assigned to the two variables. Those variables can then be used for any purpose.
In this example, the word echo must be lowercase and the
word $PATH must be uppercase, since they both pass to
UNIX:
r-ithru.p
|
When you use INPUT THROUGH, the UNIX program you name is
executed as a separate process under its own shell. Therefore, the values of shell variables
(such as $) are values from that shell rather than the shell from which the AVM
executes.
The following procedure uses INPUT THROUGH twice to get
input from the UNIX pwd and ls commands. The pwd command supplies the name
of the current directory and the ls command supplies the
name of each UNIX file in your current directory. After the variable fn is set, it displays on the screen.
r-ithru2.p
|
Notes
INPUT THROUGHspecifies the source for subsequent statements that process input. It does not read any data from the source.- To use the
IMPORT,INSERT,PROMPT-FOR,SET, orUPDATEstatement, the AVM puts the data in the frame fields referenced in these statements, and ifECHOis in effect, the frame is output to the current output destination. If you use theNO-ECHOoption, then the frame is not output. If a subsequentDISPLAYstatement causes the frame to display, the input data also displays. - When
INPUT THROUGHis closed, the pipe to the UNIX process is also closed. - For any character conversions to occur, all of the necessary conversion tables must appear in convmap.cp (a binary file that contains all of the tables that ABL uses for character management).
- If you specify a value of "undefined" for either source-codepage or target-codepage, no character conversion is performed.
- For client processes running on UNIX,
INPUT THROUGHstarts a separate process for the external program from which it takes input. The client keeps track of subprocesses spawned using an in-memory table with a limit of 20 entries. Therefore, only 20 subprocesses can be open concurrently. If this limit is exceeded, you will see an error:
To avoid this error, useSYSTEM ERROR: MAXSUBP: too many subprocesses. (357)INPUT CLOSEto remove the subprocess from the in-memory table.
See also
DEFINE STREAM statement, INPUT CLOSE statement, INPUT FROM statement, Stream object handle