# XOKEY, XUSER
> [HTML Version](xokey-xuser_sbr.htm)
**xcall XOKEY, mode, msgname, msgdata**
**xcall XUSER, mode, msgname, msgdata**
XOKEY is a variation of [COMMON](commonsbr.htm.md), used for passing data between programs in memory, supporting up to 400 packets of fifteen bytes each. XUSER is a disk-based version of XOKEY; the packets are stored in the file SYS:XUSER.SYS which will be created automatically if not present.
**Parameters**
_mode_ ([String](string.htm.md),1) \[in\]
Operation to perform: "P" to put (write), "R" to read (destructive), "G" to get (non-destructive read), "Z" to clear all packets
_msgname _ ([String](string.htm.md),10) \[in\]
Name of message packet
_msgdata _ ([String](string.htm.md),15) \[in/out\]
Data to read or write
**Comments**
The Put ("P") operation scans the file from the start, using the first empty slot, or re-using the first slot matching _msgname_, whichever comes first. This could result in multiple entries with the same _msgname_. To eliminate that possibility, use the destructive Read ("R") first. Likewise, the Read and Get operations stop at the first matching _msgname_.
**History**
2025 February: These routines have existed in A-Shell for many years, but was only documented at this time.