Complete project organization: move all DOS files to projects/dataforth-dos, create client folders, update Claude config

This commit is contained in:
2026-01-20 16:02:58 -07:00
parent 2cb4cd1006
commit 4efceab2e3
87 changed files with 3653 additions and 111 deletions

View File

@@ -0,0 +1,318 @@
# DOS 6.22 Boot Sequence and UPDATE.BAT Analysis
## Problem Summary
User reports:
1. Manual backup worked: `XCOPY /S C:\*.* T:\TS-4R\BACKUP`
2. UPDATE.BAT failed to:
- Detect machine name (TS-4R) when run without parameters
- Recognize T: drive as available (claims "T: not available")
## DOS 6.22 Boot Sequence
### Standard DOS 6.22 Boot Process
```
1. BIOS POST
2. Load DOS kernel (IO.SYS, MSDOS.SYS, COMMAND.COM)
3. Process CONFIG.SYS
- Load device drivers
- Set FILES, BUFFERS, etc.
4. Process AUTOEXEC.BAT
- Set PATH, PROMPT, environment variables
- Start network client (if configured)
5. User prompt (C:\>)
```
### Network Boot Additions
For DOS network clients (Microsoft Network Client 3.0 or Workgroup Add-On):
```
CONFIG.SYS:
DEVICE=C:\NET\PROTMAN.DOS /I:C:\NET
DEVICE=C:\NET\NE2000.DOS
DEVICE=C:\NET\NETBEUI.DOS
AUTOEXEC.BAT:
SET PATH=C:\DOS;C:\NET;C:\
CALL C:\NET\STARTNET.BAT
STARTNET.BAT:
NET START
NET USE T: \\D2TESTNAS\test /YES
NET USE X: \\D2TESTNAS\datasheets /YES
```
### Environment After Boot
After STARTNET.BAT completes:
- **T:** mapped to \\D2TESTNAS\test
- **X:** mapped to \\D2TESTNAS\datasheets
- **Environment variables:**
- COMPUTERNAME may or may not be set (depends on network client version)
- PATH includes C:\DOS, C:\NET
- No USERNAME variable in DOS (Windows 95+ feature)
## Root Cause Analysis
### Issue #1: Machine Name Detection Failure
**Problem:** UPDATE.BAT cannot identify machine name (TS-4R)
**Likely causes:**
1. **COMPUTERNAME variable not set in DOS**
- DOS 6.22 + MS Network Client 3.0 does NOT set %COMPUTERNAME%
- This is a Windows 95/NT feature, NOT DOS
- The batch file is checking for %COMPUTERNAME% which is EMPTY
2. **Machine name stored elsewhere:**
- PROTOCOL.INI (network config file)
- SYSTEM.INI (Windows 3.x if installed)
- Could be hardcoded in STARTNET.BAT
3. **Detection method flawed:**
- Cannot rely on environment variables in DOS
- Must use different approach (config file, network query, or manual parameter)
### Issue #2: T: Drive Detection Failure
**Problem:** UPDATE.BAT claims "T: not available" when T: IS accessible
**Likely causes:**
1. **Incorrect drive check method:**
```bat
REM WRONG - This doesn't work reliably in DOS 6.22:
IF EXIST T:\ GOTO DRIVE_OK
REM Also wrong - environment variable check:
IF "%TDRIVE%"=="" ECHO T: not available
```
2. **Correct DOS 6.22 drive check:**
```bat
REM Method 1: Check for specific file
IF EXIST T:\NUL GOTO DRIVE_OK
REM Method 2: Try to change to drive
T: 2>NUL
IF ERRORLEVEL 1 GOTO NO_T_DRIVE
REM Method 3: Check for known directory
IF EXIST T:\TS-4R\NUL GOTO DRIVE_OK
```
3. **Timing issue:**
- STARTNET.BAT maps T: drive
- If UPDATE.BAT runs immediately, network might not be fully ready
- Need small delay or retry logic
### Issue #3: DOS 6.22 Command Limitations
**Cannot use in DOS 6.22:**
- `IF /I` (case-insensitive comparison) - added in Windows NT/2000
- `%ERRORLEVEL%` variable - must use `IF ERRORLEVEL n` syntax
- `FOR /F` loops - added in Windows 2000
- Long filenames - 8.3 only
- `||` and `&&` operators - cmd.exe features, not COMMAND.COM
**Must use:**
- `IF ERRORLEVEL n` (checks if >= n)
- Case-sensitive string comparison
- `GOTO` labels for flow control
- `CALL` for subroutines
- Simple FOR loops only (FOR %%F IN (*.TXT) DO ...)
## Detection Strategies
### Strategy 1: Parse PROTOCOL.INI for ComputerName
```bat
REM Extract computername from C:\NET\PROTOCOL.INI
REM Line format: computername=TS-4R
FOR %%F IN (C:\NET\PROTOCOL.INI) DO FIND "computername=" %%F > C:\TEMP\COMP.TMP
REM Parse the temp file... (complex in pure DOS batch)
```
**Problems:**
- FIND output includes filename
- No easy way to extract value in pure batch
- Requires external tools (SED, AWK, or custom .EXE)
### Strategy 2: Require Command-Line Parameter
```bat
REM UPDATE.BAT TS-4R
IF "%1"=="" GOTO NO_PARAM
SET MACHINE=%1
GOTO CHECK_DRIVE
:NO_PARAM
ECHO ERROR: Machine name required
ECHO Usage: UPDATE machine-name
ECHO Example: UPDATE TS-4R
GOTO END
```
**Pros:**
- Simple, reliable
- No parsing needed
- User control
**Cons:**
- Not automatic
- User must remember machine name
### Strategy 3: Hardcode or Use Environment File
```bat
REM In AUTOEXEC.BAT:
SET MACHINE=TS-4R
REM In UPDATE.BAT:
IF "%MACHINE%"=="" GOTO NO_MACHINE
```
**Pros:**
- Works automatically
- Set once per machine
**Cons:**
- Must edit AUTOEXEC.BAT per machine
- Requires reboot to change
### Strategy 4: Use WFWG computername
If Windows for Workgroups 3.11 is installed:
```bat
REM Read from SYSTEM.INI [network] section
REM ComputerName=TS-4R
```
Still requires parsing.
### Strategy 5: Check for Marker File
```bat
REM Each machine has C:\MACHINE.ID containing name
IF EXIST C:\MACHINE.ID FOR %%F IN (C:\MACHINE.ID) DO SET MACHINE=%%F
```
**Pros:**
- Simple file read
- Easy to set up
**Cons:**
- Requires creating file on each machine
- FOR loop reads filename, not contents (wrong approach)
## Recommended Solution
**Best approach: Use AUTOEXEC.BAT environment variable**
This is the standard DOS way to set machine-specific configuration.
```bat
REM In AUTOEXEC.BAT (one-time setup per machine):
SET MACHINE=TS-4R
REM In UPDATE.BAT:
IF "%MACHINE%"=="" GOTO NO_MACHINE_VAR
IF "%1"=="" GOTO USE_ENV
SET MACHINE=%1
:USE_ENV
REM Continue with backup using %MACHINE%
```
This supports both:
- Automatic detection via environment variable
- Manual override via command-line parameter
## T: Drive Detection Fix
**Current (broken) method:**
```bat
IF "%T%"=="" ECHO T: not available
```
This checks if environment variable %T% is set, NOT if T: drive exists.
**Correct method:**
```bat
REM Test if T: drive is accessible
T: 2>NUL
IF ERRORLEVEL 1 GOTO NO_T_DRIVE
REM Alternative: Check for NUL device
IF NOT EXIST T:\NUL GOTO NO_T_DRIVE
REM We're on T: drive now, go back to C:
C:
GOTO T_DRIVE_OK
:NO_T_DRIVE
ECHO [ERROR] T: drive not available
ECHO Run STARTNET.BAT to map network drives
GOTO END
:T_DRIVE_OK
REM Continue with backup
```
## Console Output Issues
**Problem:** DOS screen scrolls too fast, errors disappear
**Solutions:**
1. **Remove |MORE from commands** - causes issues in batch files
2. **Use PAUSE strategically:**
```bat
ECHO Starting backup of %MACHINE%...
REM ... backup commands ...
IF ERRORLEVEL 1 GOTO ERROR
ECHO [OK] Backup completed
GOTO END
:ERROR
ECHO [ERROR] Backup failed!
PAUSE Press any key to continue...
GOTO END
:END
```
3. **Compact output:**
```bat
ECHO Backup: %MACHINE% to T:\%MACHINE%\BACKUP
XCOPY /S /Y /Q C:\*.* T:\%MACHINE%\BACKUP
IF ERRORLEVEL 4 ECHO [ERROR] Insufficient memory
IF ERRORLEVEL 2 ECHO [ERROR] User terminated
IF ERRORLEVEL 1 ECHO [ERROR] No files found
IF NOT ERRORLEVEL 1 ECHO [OK] Complete
```
## Summary of Fixes Needed
1. **Machine detection:**
- Add `SET MACHINE=TS-4R` to AUTOEXEC.BAT
- UPDATE.BAT checks %MACHINE% first, then %1 parameter
2. **T: drive detection:**
- Replace variable check with actual drive test: `T: 2>NUL` or `IF EXIST T:\NUL`
- Add error handling for network not started
3. **Console output:**
- Remove |MORE pipes
- Add PAUSE only on errors
- Use compact single-line status messages
4. **Automatic execution:**
- Add CALL UPDATE.BAT to end of STARTNET.BAT or AUTOEXEC.BAT
- Run silently if successful, show errors if failed
Next: Create corrected batch files.