# PROC buffers

The main operation of a Proc is to move data from one of
the two input buffers into one of the two output buffers to perform
the desired TCL commands.

When a Proc starts or when control returns to a Proc,
the primary input buffer is selected automatically as the active buffer.
It contains the Proc name and any additional arguments entered when
the Proc was invoked. The contents of this buffer remain the same
throughout the execution of the Proc, unless specifically modified.

Data from several system processors, such as the spooler, are
also placed in the secondary input buffer. For example, the last hold
file entry number is placed in this buffer. The secondary input buffer
is a very temporary entity, and if its contents are to be used, they
should be used immediately subsequent to the execution of the processor
that loaded the buffer.

The primary output buffer is used to
construct a single TCL command. A carriage return is placed automatically
at the end of the command in the buffer when the p command is issued.

The secondary output buffer (stack) is
used to hold zero or more lines of data, which are used by other processors
called by the Proc generated TCL command. Each request for terminal
input is satisfied with a line of data from the stack. In the event
that the called processor requests more data than exists in the stack,
data is requested from the terminal. Note that the stack is really
a first in, first out queue. Each line of data must be terminated
by a carriage return and must be placed in the stack explicitly via
an h command.

After all data has been moved
to the buffer, control is passed to the primary output buffer via
the p command. The command stored in the primary
output buffer is executed at the TCL level and the data in the secondary
output buffer, if any, is used to feed processors such as AQL. When
the process ends, control returns to the Proc at which time new data
may be moved to the output buffers.

| Primary Input Buffer | The primary input buffer is the point through which all keyboard input passes between the operator and the Proc being executed. The sp and s PROC commands activate the primary input buffer. The primary input buffer has ’word’ positions. Each ’word’ position is delimited by a space. Each character string separated by a space is called a ’word’ and can be manipulated independently. |
| --- | --- |
| Primary Output Buffer | The primary output buffer is where commands are constructed that are subsequently passed to TCL for processing. |
| Secondary Input Buffer | The secondary input buffer is used exclusively for holding the item-IDs of error messages returned by processes executed by PROC. The ss PROC command activates the secondary input buffer. |
| Secondary Output Buffer | The secondary output buffer is used to store strings that are subsequently passed to TCL for processing, after the contents of the primary output buffer have been processed. A number of commands are used on the secondary output buffer and are linked to this item. The ston or st on PROC command invokes the secondary output buffer. |

## See also

- [d command (PROC processor)](https://d3codex.com/proc/d-command-proc-processor/)
- [go command](https://d3codex.com/proc/go-command/)
- [h command](https://d3codex.com/proc/h-command/)
- [if command](https://d3codex.com/proc/if-command/)
- [ih command](https://d3codex.com/proc/ih-command/)
- [ip command](https://d3codex.com/proc/ip-command/)
- [is command](https://d3codex.com/proc/is-command/)
- [messages file](https://d3codex.com/systemfiles/messages-file/)
- [PROC processor](https://d3codex.com/proc/proc-processor/)
- [ri command](https://d3codex.com/proc/ri-command/)
- [ro command](https://d3codex.com/proc/ro-command/)
- [s command (FlashBASIC Debugger)](https://d3codex.com/flashbasicdebugger/s-command-flashbasic-debugger/)
- [sp command](https://d3codex.com/proc/sp-command/)
- [ss command](https://d3codex.com/proc/ss-command/)

---
Source: https://d3codex.com/proc/proc-buffers/ - part of the D3Codex reference.
