Add a Readme.md
This commit is contained in:
333
README.md
Normal file
333
README.md
Normal file
@@ -0,0 +1,333 @@
|
||||
# mars_dosutils
|
||||
|
||||
DOS client-side utilities for **mars_nwe** and compatible NetWare-style NCP environments.
|
||||
|
||||
This repository contains the source for a small DOS utility suite built around a **single multi-call executable**, `net.exe`. The program can be used either as:
|
||||
|
||||
- `net <command> [args...]`, or
|
||||
- a renamed executable such as `login.exe`, `map.exe`, `capture.exe`, or `logout.exe`
|
||||
|
||||
That design is explicit in the command table in `net.c`, and the install rules also deploy the same binary under multiple command names. The original project documentation describes it as a “simple DOS-client program to allow standard NCP network actions, mainly for mars_nwe,” and also notes that it was still incomplete at the time of writing. fileciteturn1file1L1-L6 fileciteturn1file2L18-L44 fileciteturn0file0
|
||||
|
||||
## Features
|
||||
|
||||
- Login and logout against an NCP server
|
||||
- Password change support
|
||||
- DOS drive mapping and unmapping
|
||||
- Search-path management (`PATH`, `PATHINS`, `PATHDEL`)
|
||||
- Printer capture and release (`CAPTURE`, `ENDCAP`)
|
||||
- Scripted session setup through command files
|
||||
- External program execution via `SPAWN` and `EXEC`
|
||||
- Optional mars_nwe debug control hooks
|
||||
|
||||
## Available commands
|
||||
|
||||
The current command dispatcher includes these built-ins:
|
||||
|
||||
- `LOGIN`
|
||||
- `LOGOUT`
|
||||
- `PASSWD`
|
||||
- `PROFILE`
|
||||
- `SPAWN`
|
||||
- `EXEC`
|
||||
- `MAP`
|
||||
- `MAPDEL`
|
||||
- `PATH`
|
||||
- `PATHINS`
|
||||
- `PATHDEL`
|
||||
- `CAPTURE`
|
||||
- `ENDCAP`
|
||||
- `DEBUG`
|
||||
- `ECHO`
|
||||
- `CD`
|
||||
- `TESTS` (developer/testing only)
|
||||
|
||||
`SLIST` is present in the historical build/install metadata, but the command is disabled in the dispatcher and the provided `slist.c` is only a stub in this source snapshot. fileciteturn1file2L18-L44 fileciteturn1file0
|
||||
|
||||
## How it works
|
||||
|
||||
The program resolves the command from either:
|
||||
|
||||
1. the executable name itself, or
|
||||
2. the first command-line argument
|
||||
|
||||
That means all of the following styles are valid:
|
||||
|
||||
```text
|
||||
NET LOGIN alice secret
|
||||
NET MAP F:=SYS:
|
||||
LOGIN.EXE alice secret
|
||||
MAP.EXE F:=SYS:
|
||||
CAPTURE.EXE LPT1 Q1
|
||||
```
|
||||
|
||||
This is one of the key design ideas of the project, and the original README specifically recommends copying or linking `net.exe` to `login.exe` for convenience. fileciteturn1file1L7-L16 fileciteturn1file2L46-L96
|
||||
|
||||
## Command reference
|
||||
|
||||
### `LOGIN`
|
||||
|
||||
Authenticate to an NCP server as a user.
|
||||
|
||||
```text
|
||||
LOGIN [-u] [user | user password]
|
||||
```
|
||||
|
||||
- `-u` forces the older unencrypted login path. fileciteturn1file1L9-L11
|
||||
- If no username is provided, the tool prompts interactively. fileciteturn1file2L101-L139
|
||||
- If no password is provided, it prompts for one after the username. fileciteturn1file2L125-L138
|
||||
- Successful login clears and rebuilds NetWare search-path state before running a local post-login script named `login` from the executable directory. fileciteturn1file2L116-L147
|
||||
|
||||
### `LOGOUT`
|
||||
|
||||
Log out from the current NCP session.
|
||||
|
||||
The implementation also removes configured network search paths before performing logout. fileciteturn1file2L150-L159
|
||||
|
||||
### `PASSWD`
|
||||
|
||||
Change a user password.
|
||||
|
||||
```text
|
||||
PASSWD [user]
|
||||
```
|
||||
|
||||
Notes:
|
||||
|
||||
- If no username is supplied, the tool attempts to resolve the currently logged-in user. fileciteturn1file2L162-L190
|
||||
- The source comments note that password changes currently use the older unencrypted password-change call. fileciteturn1file1L29-L33 fileciteturn1file2L12-L33
|
||||
|
||||
### `PROFILE`
|
||||
|
||||
Execute a command script.
|
||||
|
||||
```text
|
||||
PROFILE <filename>
|
||||
```
|
||||
|
||||
This is a central part of the workflow. The command reader parses non-empty lines, ignores `#` comments, uppercases the command token, and dispatches it through the same internal command table used for direct invocation. `ECHO` is treated specially so the rest of the line is preserved as a single string. fileciteturn1file1L21-L27 fileciteturn1file2L202-L323
|
||||
|
||||
### `SPAWN`
|
||||
|
||||
Run an external program and wait for it to finish.
|
||||
|
||||
### `EXEC`
|
||||
|
||||
Execute an external program using overlay-style execution.
|
||||
|
||||
Both commands share the same implementation and differ only in whether they use `spawnvp(..., P_WAIT, ...)` or `execvp(...)`. fileciteturn1file1L54-L57 fileciteturn1file2L357-L390
|
||||
|
||||
### `MAP`
|
||||
|
||||
List current drive mappings or map a DOS drive letter to a network path.
|
||||
|
||||
```text
|
||||
MAP [d:[=[path]]]
|
||||
```
|
||||
|
||||
Examples:
|
||||
|
||||
```text
|
||||
MAP
|
||||
MAP F:=SYS:
|
||||
MAP H:=HOME:
|
||||
```
|
||||
|
||||
The implementation lists active mappings, distinguishes local vs. redirected drives, and uses DOS-style drive letters. fileciteturn1file1L43-L49 fileciteturn1file2L1-L178
|
||||
|
||||
### `MAPDEL`
|
||||
|
||||
Remove an existing drive mapping.
|
||||
|
||||
```text
|
||||
MAPDEL d:
|
||||
```
|
||||
|
||||
Example:
|
||||
|
||||
```text
|
||||
MAPDEL F:
|
||||
```
|
||||
|
||||
### `PATH`
|
||||
|
||||
List or set a search-path entry.
|
||||
|
||||
```text
|
||||
PATH sn:[=[path]]
|
||||
```
|
||||
|
||||
Where `sn` is `s1` through `s16`. The original documentation notes that this updates the path environment rather than directly creating a drive mapping. fileciteturn1file1L34-L42 fileciteturn1file2L180-L288
|
||||
|
||||
### `PATHINS`
|
||||
|
||||
Insert a search-path entry instead of overwriting one.
|
||||
|
||||
```text
|
||||
PATHINS sn:[=[path]]
|
||||
```
|
||||
|
||||
### `PATHDEL`
|
||||
|
||||
Delete a search-path entry.
|
||||
|
||||
```text
|
||||
PATHDEL sn:
|
||||
```
|
||||
|
||||
### `CAPTURE`
|
||||
|
||||
List printer captures or redirect a local printer device to a queue.
|
||||
|
||||
Typical usage:
|
||||
|
||||
```text
|
||||
CAPTURE [device [queue]]
|
||||
```
|
||||
|
||||
Examples:
|
||||
|
||||
```text
|
||||
CAPTURE
|
||||
CAPTURE LPT1 Q1
|
||||
CAPTURE PRN Q1
|
||||
```
|
||||
|
||||
`PRN` is normalized to `LPT1` internally. The command can also display existing captures. fileciteturn1file2L1-L77
|
||||
|
||||
### `ENDCAP`
|
||||
|
||||
Cancel a printer redirection.
|
||||
|
||||
Typical usage:
|
||||
|
||||
```text
|
||||
ENDCAP device
|
||||
```
|
||||
|
||||
Example:
|
||||
|
||||
```text
|
||||
ENDCAP LPT1
|
||||
```
|
||||
|
||||
### `DEBUG`
|
||||
|
||||
Set mars_nwe debug levels for selected server-side modules.
|
||||
|
||||
```text
|
||||
DEBUG NCPSERV|NWCONN|NWBIND level
|
||||
```
|
||||
|
||||
- `level` must be between `0` and `99`. fileciteturn1file2L1-L31
|
||||
- The original docs say this requires `FUNC_17_02_IS_DEBUG` to be enabled in `mars_nwe/config.h`. fileciteturn1file1L50-L53
|
||||
|
||||
### `ECHO`
|
||||
|
||||
Print a string, mainly for use inside profile/login scripts. fileciteturn1file2L350-L355
|
||||
|
||||
### `CD`
|
||||
|
||||
Change the current DOS directory. It also adjusts the active drive if a drive-qualified path is supplied. fileciteturn1file2L329-L348
|
||||
|
||||
### `TESTS`
|
||||
|
||||
Internal developer test routines. Not intended as a regular end-user command. fileciteturn1file2L39-L43
|
||||
|
||||
## Login script workflow
|
||||
|
||||
A particularly important feature is the automatic execution of a file named `login` located beside the executable after a successful login. The historical README gives this example:
|
||||
|
||||
```text
|
||||
map f:=SYS:
|
||||
map h:=home:
|
||||
map z:=SYS:PUBLIC
|
||||
path s16:=z:.
|
||||
capture lpt1 q1
|
||||
profile h:\profile
|
||||
```
|
||||
|
||||
This makes the tool suite useful not just for authentication, but for setting up a full DOS network session: drive mappings, search paths, printer capture, and then a user-specific profile script. fileciteturn1file1L12-L20 fileciteturn1file2L140-L147
|
||||
|
||||
## Building
|
||||
|
||||
### Historical DOS build
|
||||
|
||||
The included `makefile.bcc` is the primary historical build file and targets **Borland C / Borland tools** on DOS.
|
||||
|
||||
Key settings from the makefile:
|
||||
|
||||
- compiler: `bcc`
|
||||
- linker: `bcc`
|
||||
- assembler: `tasm`
|
||||
- memory model: `-ml`
|
||||
- define: `-Dmsdos`
|
||||
- output: `net.exe`
|
||||
|
||||
The object list includes:
|
||||
|
||||
- `net.c`
|
||||
- `tools.c`
|
||||
- `netcall.c`
|
||||
- `ncpcall.c`
|
||||
- `login.c`
|
||||
- `map.c`
|
||||
- `slist.c`
|
||||
- `nwcrypt.c`
|
||||
- `nwdebug.c`
|
||||
- `nwtests.c`
|
||||
- `capture.c`
|
||||
- `kern.asm`
|
||||
|
||||
fileciteturn1file2L1-L18
|
||||
|
||||
### CMake status
|
||||
|
||||
A `CMakeLists.txt` is present, but in this snapshot it is only a **partial modern build description**. It defines include paths, version-related macros, and install rules, while the actual `add_executable(...)` line is still commented out. That means it is better understood as packaging metadata than a ready-to-use complete build system. fileciteturn0file0
|
||||
|
||||
## Installation layout
|
||||
|
||||
The CMake install rules deploy the same binary multiple times into `SYS/public`:
|
||||
|
||||
- `net.exe`
|
||||
- `login.exe`
|
||||
- `profile.exe`
|
||||
- `spawn.exe`
|
||||
- `passwd.exe`
|
||||
- `path.exe`
|
||||
- `pathins.exe`
|
||||
- `pathdel.exe`
|
||||
- `map.exe`
|
||||
- `mapdel.exe`
|
||||
- `logout.exe`
|
||||
- `slist.exe`
|
||||
- `capture.exe`
|
||||
- `endcap.exe`
|
||||
|
||||
They also install minimal `login.exe` and `map.exe` copies into `SYS/login`. fileciteturn0file0
|
||||
|
||||
## Project status and limitations
|
||||
|
||||
This is legacy DOS networking code from the mid-1990s, and a few caveats are worth keeping in mind:
|
||||
|
||||
- The original README explicitly says the program was still incomplete. fileciteturn1file1L6-L7
|
||||
- `SLIST` is not implemented in the provided source snapshot. fileciteturn1file2L36-L39 fileciteturn1file0
|
||||
- Parts of the authentication and password-change path still rely on older unencrypted operations when the newer keyed flow is unavailable or disabled. fileciteturn1file2L12-L33
|
||||
- The code is tightly coupled to DOS, IPX/NCP behavior, and mars_nwe-specific expectations.
|
||||
|
||||
## Historical metadata
|
||||
|
||||
From the included project metadata:
|
||||
|
||||
- project: `mars_dosutils`
|
||||
- version: `0.10`
|
||||
- entered: `21-May-96`
|
||||
- keywords: `mars_nwe`, `dos`, `dosemu`
|
||||
- platforms: `DOS`, `DOSEMU`
|
||||
- author/maintainer: Martin Stover
|
||||
|
||||
fileciteturn1file2L1-L4
|
||||
|
||||
## License
|
||||
|
||||
No standalone license file is included in the provided snapshot. The source files do contain copyright notices naming **Martin Stover**. Anyone planning to redistribute or modernize the project should verify licensing status before publishing derivative releases. fileciteturn1file2L1-L5
|
||||
Reference in New Issue
Block a user