PIP.COM
| Company type | Software utility |
|---|---|
| Industry | Computer software |
| Founded | Early 1960s |
| Founder | Harrison "Dit" Morse |
| Products | File transfer tool |
Peripheral Interchange Program (PIP) served as a file transfer tool for Digital Equipment Corporation (DEC) machines. Created in the early 1960s by Harrison "Dit" Morse for the PDP-6, it was subsequently modified to operate on DEC's PDP-10, PDP-11, and PDP-8 systems. During the 1970s and 1980s, Digital Research incorporated PIP into their CP/M and MP/M operating environments.
History
Initially called ATLATL ("Anything, Lord, to Anything, Lord"), PIP was engineered to provide device-independent file copying capabilities. Its command syntax transitioned from
PIP destination←source /switches
using the left-arrow symbol from the 1963 ASCII set found on Flexowriter keyboards, to
PIP destination=source
to support newer terminal devices that lacked the left-arrow character. Additionally, an underscore (_) was sometimes employed as a delimiter between destination and source.
File specifications comprised device codes (such as DK for disk, LP for line printer, MT for magnetic tape), unit numbers ranging from 0 to 7, followed by a colon, filename, and extension. PIP enabled file copying between any compatible device and filename combinations.
Early versions of VAX/VMS implemented commands like DIRECTORY and RENAME by calling RSX-11M PIP in compatibility mode. This approach was superseded by native VAX implementations starting with VAX/VMS 2.0, although PIP remained included within the VAX-11 RSX layered product.
Up through the mid-1980s, PIP continued to be extensively utilized on TOPS-10, TOPS-20, and PDP-11 platforms.
PIP in CP/M and MP/M
Gary Kildall, creator of CP/M and MP/M, drew heavily on Digital Equipment systems like RSTS/E for the PDP-11 when designing their file structures and command processors. Within CP/M, the PIP command managed file transfers not only between floppy disks but also with several special device files:
- — system console (for input/output)
- — auxiliary device; earlier versions of CP/M used (paper tape punch) and (paper tape reader)
- — output device for listing, typically a printer
- — printer output with added features such as line numbering, tab expansion, and form feeds
- — null device analogous to \Device\Null or /dev/null
- — input that generates end-of-file characters (ASCII )
- and — customizable input/output devices defaulting to and , respectively
- — punch card reader unit
These special files were not fully-fledged device files; their support was confined exclusively to PIP operations. The customizable devices and were implemented through fixed entry points at PIP’s initialization, allowing OEMs or end-users to patch them for tailored I/O functionality. PIP allocated 246 bytes specifically for these modifications.
Both PIP destination=source and the older undocumented PIP destination_source command forms were supported by PIP. However, CP/M did not enforce strict filename character rules, which led to issues when filenames contained underscores that conflicted with PIP’s parsing logic.
Reserved filenames in Microsoft Windows
The design of the PIP utility influenced Microsoft Windows’ list of reserved filenames, including CON, PRN, AUX, NUL, as well as COM0–COM9 and LPT0–LPT9. This case-insensitive restriction applies universally to all file basenames—for instance, Con.txt is disallowed—reflecting legacy device naming conventions inherited from PIP’s original architecture.
- copy (command) – Command used for data copying in RT-11, RSX-11, OpenVMS, AmigaOS, DOS, OS/2, and Microsoft Windows
- cp (Unix) – Unix command designed for copying files
- Kermit (protocol)