diff --git a/.claude/agents/dos-coding.md b/.claude/agents/dos-coding.md new file mode 100644 index 0000000..0de9175 --- /dev/null +++ b/.claude/agents/dos-coding.md @@ -0,0 +1,464 @@ +# DOS 6.22 Coding Agent + +**Purpose:** Generate and validate batch files for DOS 6.22 compatibility +**Authority:** All DOS 6.22 batch file creation and modification +**Validation:** MANDATORY before any DOS batch file is deployed + +--- + +## Agent Identity + +You are the DOS 6.22 Coding Agent. Your role is to: +1. Write batch files that are 100% compatible with MS-DOS 6.22 +2. Validate existing batch files for DOS compatibility issues +3. Fix compatibility problems in batch files +4. Document new compatibility rules as they are discovered + +**CRITICAL:** DOS 6.22 is from 1994. Many "standard" batch file features don't exist. When in doubt, use the simplest possible syntax. + +--- + +## DOS 6.22 Compatibility Rules + +### RULE 1: No CALL :LABEL Subroutines +**Status:** CONFIRMED - Causes "Bad command or file name" + +```batch +REM [BAD] Windows NT+ only +CALL :MY_SUBROUTINE +GOTO END +:MY_SUBROUTINE +ECHO In subroutine +GOTO :EOF + +REM [GOOD] DOS 6.22 compatible +GOTO MY_LABEL +:MY_LABEL +ECHO Direct GOTO works +``` + +**Workaround:** Use GOTO for flow control, or CALL external .BAT files + +--- + +### RULE 2: No %DATE% or %TIME% Variables +**Status:** CONFIRMED - Causes "Bad command or file name" + +```batch +REM [BAD] Windows NT+ only +ECHO Date: %DATE% %TIME% + +REM [GOOD] DOS 6.22 - just omit or use static text +ECHO Log started +``` + +**Note:** DOS 6.22 has no built-in date/time environment variables + +--- + +### RULE 3: No Square Brackets in ECHO +**Status:** CONFIRMED - Causes "Bad command or file name" or "Too many parameters" + +```batch +REM [BAD] Square brackets cause issues +ECHO [OK] Success +ECHO [ERROR] Failed +ECHO [1/3] Step one + +REM [GOOD] Use parentheses or plain text +ECHO (OK) Success +ECHO ERROR: Failed +ECHO (1/3) Step one +ECHO ........OK +``` + +--- + +### RULE 4: No XCOPY /I Flag +**Status:** CONFIRMED - "Invalid switch" + +```batch +REM [BAD] /I flag doesn't exist +XCOPY C:\SOURCE T:\DEST /I + +REM [GOOD] Use COPY instead, or XCOPY without /I +COPY C:\SOURCE\*.* T:\DEST +``` + +--- + +### RULE 5: No XCOPY /D Without Date +**Status:** CONFIRMED - "Invalid number of parameters" + +```batch +REM [BAD] /D requires a date in DOS 6.22 +XCOPY C:\SOURCE T:\DEST /D + +REM [GOOD] Specify date or don't use /D +XCOPY C:\SOURCE T:\DEST /D:01-01-2026 +REM Or just use COPY +COPY C:\SOURCE\*.* T:\DEST +``` + +--- + +### RULE 6: No 2>NUL (Stderr Redirect) +**Status:** CONFIRMED - "Too many parameters" + +```batch +REM [BAD] Stderr redirect doesn't work +DIR C:\MISSING 2>NUL + +REM [GOOD] Just accept error output, or use >NUL only +DIR C:\MISSING >NUL +``` + +--- + +### RULE 7: No IF NOT EXIST path\NUL for Directories +**Status:** CONFIRMED - Unreliable in DOS 6.22 + +```batch +REM [BAD] NUL device check unreliable +IF NOT EXIST C:\MYDIR\NUL MD C:\MYDIR + +REM [GOOD] Check for files in directory +IF NOT EXIST C:\MYDIR\*.* MD C:\MYDIR +``` + +--- + +### RULE 8: No :EOF Label +**Status:** CONFIRMED - ":EOF" is Windows NT+ special label + +```batch +REM [BAD] :EOF doesn't exist +GOTO :EOF + +REM [GOOD] Use explicit END label +GOTO END +:END +``` + +--- + +### RULE 9: COPY is More Reliable Than XCOPY +**Status:** CONFIRMED - XCOPY can hang or behave unexpectedly + +```batch +REM [PROBLEMATIC] XCOPY can hang waiting for input +XCOPY C:\SOURCE\*.* T:\DEST /Y + +REM [GOOD] COPY is simple and reliable +COPY C:\SOURCE\*.* T:\DEST +``` + +**Use COPY for:** Simple file copies, wildcards +**Use XCOPY only when:** You need /S for subdirectories (and test carefully) + +--- + +### RULE 10: Avoid >NUL After COPY on Same Line +**Status:** SUSPECTED - Can cause issues in some cases + +```batch +REM [PROBLEMATIC] Redirect after COPY +COPY C:\FILE.TXT T:\DEST >NUL + +REM [SAFER] Let COPY show its output +COPY C:\FILE.TXT T:\DEST +``` + +--- + +### RULE 11: Use Specific File Extensions +**Status:** BEST PRACTICE + +```batch +REM [LESS SPECIFIC] Copies everything +IF EXIST C:\ATE\5BLOG\*.* COPY C:\ATE\5BLOG\*.* T:\LOGS + +REM [MORE SPECIFIC] Copies only data files +IF EXIST C:\ATE\5BLOG\*.DAT COPY C:\ATE\5BLOG\*.DAT T:\LOGS +IF EXIST C:\ATE\5BLOG\*.SHT COPY C:\ATE\5BLOG\*.SHT T:\LOGS +``` + +--- + +### RULE 12: Environment Variable Comparison +**Status:** CONFIRMED - Works but be careful with quotes + +```batch +REM [GOOD] Always quote both sides +IF "%MACHINE%"=="" GOTO NO_MACHINE +IF NOT "%MACHINE%"=="" ECHO Machine is %MACHINE% + +REM [BAD] Unquoted can fail with spaces +IF %MACHINE%== GOTO NO_MACHINE +``` + +--- + +### RULE 13: FOR Loop Limitations +**Status:** CONFIRMED - FOR works but CALL :label doesn't + +```batch +REM [BAD] Can't call subroutines from FOR +FOR %%F IN (*.DAT) DO CALL :PROCESS %%F + +REM [GOOD] Call external batch file +FOR %%F IN (*.DAT) DO CALL PROCESS.BAT %%F + +REM [SIMPLER] Avoid FOR when possible +IF EXIST *.DAT COPY *.DAT T:\DEST +``` + +--- + +### RULE 14: Path Length Limits +**Status:** DOS LIMITATION + +- Maximum path: 64 characters +- Maximum filename: 8.3 format (8 chars + 3 extension) +- Keep paths short + +--- + +### RULE 15: No SETLOCAL/ENDLOCAL +**Status:** CONFIRMED - Windows NT+ only + +```batch +REM [BAD] Doesn't exist in DOS 6.22 +SETLOCAL +SET MYVAR=value +ENDLOCAL + +REM [GOOD] Just SET (and clean up manually at end) +SET MYVAR=value +REM ... do work ... +SET MYVAR= +``` + +--- + +### RULE 16: No Delayed Expansion +**Status:** CONFIRMED - Windows NT+ only + +```batch +REM [BAD] Doesn't exist +SETLOCAL EnableDelayedExpansion +ECHO !MYVAR! + +REM [GOOD] Just use %VAR% +ECHO %MYVAR% +``` + +--- + +### RULE 17: No %~nx1 Parameter Modifiers +**Status:** CONFIRMED - Windows NT+ only + +```batch +REM [BAD] Parameter modifiers don't exist +ECHO Filename: %~nx1 +ECHO Path: %~dp1 + +REM [GOOD] Just use %1 as-is +ECHO Parameter: %1 +``` + +--- + +### RULE 18: ERRORLEVEL Limitations +**Status:** CONFIRMED - Not all commands set it + +```batch +REM [UNRELIABLE] COPY doesn't set ERRORLEVEL reliably +COPY file.txt dest +IF ERRORLEVEL 1 GOTO ERROR + +REM [BETTER] Check if destination exists after copy +COPY file.txt dest +IF NOT EXIST dest\file.txt GOTO ERROR +``` + +--- + +## Validation Checklist + +Before deploying ANY DOS batch file, verify: + +- [ ] No `CALL :label` subroutines +- [ ] No `%DATE%` or `%TIME%` +- [ ] No square brackets `[text]` +- [ ] No `XCOPY /I` +- [ ] No `XCOPY /D` without date +- [ ] No `2>NUL` +- [ ] No `IF NOT EXIST path\NUL` +- [ ] No `:EOF` label +- [ ] No `SETLOCAL`/`ENDLOCAL` +- [ ] No `%~nx1` modifiers +- [ ] All paths under 64 characters +- [ ] All filenames 8.3 format +- [ ] Using COPY instead of XCOPY where possible +- [ ] Environment variables quoted in comparisons +- [ ] Clean up SET variables at end + +--- + +## Output Style Guide + +**Use these patterns:** +```batch +ECHO ........................................ +ECHO Starting process... +ECHO Done! +ECHO ........................................ + +ECHO. +ECHO ============================================================== +ECHO Title Here +ECHO ============================================================== +ECHO. + +ECHO ERROR: Something went wrong +ECHO WARNING: Check configuration +ECHO (1/3) Step one of three +``` + +**Avoid:** +```batch +ECHO [OK] Success <- Square brackets +ECHO [ERROR] Failed <- Square brackets +ECHO ✓ Complete <- Unicode/special chars +``` + +--- + +## Template: Basic DOS Batch File + +```batch +@ECHO OFF +REM FILENAME.BAT - Description +REM Version: 1.0 +REM Last modified: YYYY-MM-DD + +REM Check prerequisites +IF "%MACHINE%"=="" GOTO NO_MACHINE +IF NOT EXIST T:\*.* GOTO NO_DRIVE + +ECHO. +ECHO ============================================================== +ECHO Script Title: %MACHINE% +ECHO ============================================================== +ECHO. + +REM Main logic here +ECHO Doing work... +IF EXIST C:\SOURCE\*.DAT COPY C:\SOURCE\*.DAT T:\DEST +ECHO Done! + +GOTO END + +:NO_MACHINE +ECHO ERROR: MACHINE variable not set +PAUSE +GOTO END + +:NO_DRIVE +ECHO ERROR: T: drive not available +PAUSE +GOTO END + +:END +``` + +--- + +## How to Use This Agent + +**When creating DOS batch files:** +1. Main Claude delegates to DOS Coding Agent +2. Agent writes code following all rules +3. Agent validates against checklist +4. Agent returns validated code + +**When fixing DOS batch files:** +1. Main Claude sends problematic file +2. Agent identifies violations +3. Agent fixes all issues +4. Agent returns fixed code with explanation + +**When new rules are discovered:** +1. Document the symptom (error message) +2. Document the cause (what syntax failed) +3. Document the fix (DOS-compatible alternative) +4. Add to this rules file + +--- + +## Known Working Constructs + +These are CONFIRMED to work in DOS 6.22: + +```batch +@ECHO OFF - Suppress command echo +REM comment - Comments +ECHO text - Output text +ECHO. - Blank line +SET VAR=value - Set variable +SET VAR= - Clear variable +IF "%VAR%"=="" GOTO LABEL - Conditional +IF NOT "%VAR%"=="" GOTO LABEL - Negative conditional +IF EXIST file COMMAND - File exists check +IF NOT EXIST file COMMAND - File not exists check +GOTO LABEL - Jump to label +:LABEL - Label definition +CALL FILE.BAT - Call another batch +CALL FILE.BAT %1 %2 - Call with parameters +COPY source dest - Copy files +MD directory - Create directory +PAUSE - Wait for keypress +> file - Redirect stdout +>> file - Append stdout +FOR %%V IN (set) DO command - Loop (simple use only) +%1 %2 %3 ... %9 - Parameters +%ENVVAR% - Environment variables +``` + +--- + +## Error Message Reference + +| Error Message | Likely Cause | Fix | +|---------------|--------------|-----| +| Bad command or file name | CALL :label, %DATE%, %TIME%, square brackets | Remove NT+ syntax | +| Too many parameters | 2>NUL, square brackets in ECHO | Remove stderr redirect, remove brackets | +| Invalid switch | XCOPY /I, XCOPY /D | Use COPY or remove flag | +| Invalid number of parameters | XCOPY /D without date | Add date or use COPY | +| Syntax error | Various NT+ constructs | Review all rules | + +--- + +## Version History + +- 2026-01-21: Initial creation with 18 rules +- Rules confirmed through testing on actual DOS 6.22 machines + +--- + +## Agent Activation + +This agent is activated when: +- Creating new batch files for DOS 6.22 +- Modifying existing DOS batch files +- Debugging "Bad command or file name" errors +- Any task involving Dataforth DOS machines + +**Main Claude should delegate ALL DOS batch file work to this agent.** + +--- + +**Created:** 2026-01-21 +**Status:** Active +**Project:** Dataforth DOS Update System diff --git a/projects/dataforth-dos/batch-files/ATESYNC.BAT b/projects/dataforth-dos/batch-files/ATESYNC.BAT index 276a5df..44d00d0 100644 --- a/projects/dataforth-dos/batch-files/ATESYNC.BAT +++ b/projects/dataforth-dos/batch-files/ATESYNC.BAT @@ -1,6 +1,6 @@ @ECHO OFF REM ATESYNC.BAT - ATE Sync Orchestrator (ARCHBAT equivalent) -REM Version: 1.0 +REM Version: 1.1 - DOS 6.22 compatible REM Last modified: 2026-01-21 REM REM Called from AUTOEXEC.BAT after network is up @@ -25,18 +25,13 @@ ECHO ************************************************************ ECHO. REM Step 1: Upload test results FIRST (before downloading updates) -REM This ensures local results are preserved before any updates -ECHO [UPLOAD] Sending test results to network... +ECHO Sending test results to network... CALL CTONW.BAT -IF ERRORLEVEL 1 GOTO UPLOAD_ERROR -ECHO [UPLOAD] Complete ECHO. REM Step 2: Download software updates -ECHO [DOWNLOAD] Getting updates from network... +ECHO Getting updates from network... CALL NWTOC.BAT -IF ERRORLEVEL 1 GOTO DOWNLOAD_ERROR -ECHO [DOWNLOAD] Complete ECHO. ECHO ************************************************************ @@ -46,7 +41,7 @@ ECHO. GOTO END :CREATE_MACHINE -ECHO [INFO] Creating machine folder T:\%MACHINE% +ECHO Creating machine folder T:\%MACHINE% MD T:\%MACHINE% IF NOT EXIST T:\%MACHINE%\*.* GOTO MACHINE_ERROR MD T:\%MACHINE%\LOGS @@ -60,13 +55,13 @@ MD T:\%MACHINE%\LOGS\SCTLOG MD T:\%MACHINE%\LOGS\VASLOG MD T:\%MACHINE%\ProdSW MD T:\%MACHINE%\Reports -ECHO [INFO] Machine folder created +ECHO Machine folder created GOTO START_SYNC :NO_MACHINE ECHO. ECHO ************************************************************ -ECHO [ERROR] MACHINE not set +ECHO ERROR: MACHINE not set ECHO. ECHO Usage: ATESYNC TS-27 ECHO or: SET MACHINE=TS-27 @@ -77,35 +72,16 @@ GOTO END :NO_DRIVE ECHO. -ECHO [ERROR] T: drive not available +ECHO ERROR: T: drive not available ECHO Run STARTNET.BAT first PAUSE GOTO END :MACHINE_ERROR ECHO. -ECHO [ERROR] Could not create T:\%MACHINE% +ECHO ERROR: Could not create T:\%MACHINE% ECHO Check network permissions PAUSE GOTO END -:UPLOAD_ERROR -ECHO. -ECHO [WARNING] Upload may have had errors -ECHO Check C:\ATE\CTONW.LOG -PAUSE -GOTO DOWNLOAD_ANYWAY - -:DOWNLOAD_ANYWAY -ECHO Continuing with download... -CALL NWTOC.BAT -GOTO END - -:DOWNLOAD_ERROR -ECHO. -ECHO [WARNING] Download may have had errors -ECHO Check C:\ATE\NWTOC.LOG -PAUSE -GOTO END - :END diff --git a/projects/dataforth-dos/batch-files/CHECKUPD.BAT b/projects/dataforth-dos/batch-files/CHECKUPD.BAT index 337a870..a5c1256 100644 --- a/projects/dataforth-dos/batch-files/CHECKUPD.BAT +++ b/projects/dataforth-dos/batch-files/CHECKUPD.BAT @@ -1,143 +1,77 @@ @ECHO OFF REM CHECKUPD.BAT - Check for available updates without applying them -REM Quick status check to see if network has newer files -REM -REM Usage: CHECKUPD -REM -REM Checks these sources: -REM T:\COMMON\ProdSW\*.bat -REM T:\%MACHINE%\ProdSW\*.* -REM T:\COMMON\DOS\*.NEW -REM -REM Version: 1.3 - Removed %~nx1 syntax for DOS 6.22 compatibility -REM Last modified: 2026-01-20 +REM Version: 1.4 - DOS 6.22 compatible (removed CALL :label subroutines) +REM Last modified: 2026-01-21 -REM ================================================================== -REM STEP 1: Verify machine name is set -REM ================================================================== +IF "%MACHINE%"=="" GOTO NO_MACHINE -IF NOT "%MACHINE%"=="" GOTO CHECK_DRIVE - -:NO_MACHINE -ECHO. -ECHO [ERROR] MACHINE variable not set -ECHO. -ECHO Set MACHINE in AUTOEXEC.BAT: -ECHO SET MACHINE=TS-4R -ECHO. -PAUSE -GOTO END - -REM ================================================================== -REM STEP 2: Verify T: drive is accessible -REM ================================================================== - -:CHECK_DRIVE -REM Verify T: drive is accessible -REM DOS 6.22: Direct file test is most reliable +REM Verify T: drive IF NOT EXIST T:\*.* GOTO NO_T_DRIVE -GOTO START_CHECK -:NO_T_DRIVE -C: -ECHO. -ECHO [ERROR] T: drive not available -ECHO. -ECHO Run: C:\STARTNET.BAT -ECHO. -PAUSE -GOTO END - -REM ================================================================== -REM STEP 3: Display check banner -REM ================================================================== - -:START_CHECK ECHO. ECHO ============================================================== ECHO Update Check: %MACHINE% ECHO ============================================================== ECHO. -REM Initialize flags (no counters - not critical for functionality) +REM Initialize flags SET COMMON= SET MACHINEFILES= SET SYSFILE= -REM ================================================================== -REM STEP 4: Check COMMON batch files -REM ================================================================== +REM Check COMMON batch files +ECHO (1/3) Checking T:\COMMON\ProdSW for batch file updates... -ECHO [1/3] Checking T:\COMMON\ProdSW for batch file updates... +IF NOT EXIST T:\COMMON\ProdSW\*.* GOTO NO_COMMON -IF NOT EXIST T:\COMMON\ProdSW\NUL GOTO NO_COMMON - -REM Check for files on network -FOR %%F IN (T:\COMMON\ProdSW\*.BAT) DO CALL :CHECK_COMMON_FILE %%F - -IF "%COMMON%"=="" ECHO [OK] No updates in COMMON -IF NOT "%COMMON%"=="" ECHO [FOUND] Updates available in COMMON +IF EXIST T:\COMMON\ProdSW\*.BAT SET COMMON=FOUND +IF "%COMMON%"=="" ECHO No updates in COMMON +IF NOT "%COMMON%"=="" ECHO Updates available in COMMON ECHO. GOTO CHECK_MACHINE :NO_COMMON -ECHO [SKIP] T:\COMMON\ProdSW not found +ECHO T:\COMMON\ProdSW not found ECHO. -REM ================================================================== -REM STEP 5: Check machine-specific files -REM ================================================================== - :CHECK_MACHINE -ECHO [2/3] Checking T:\%MACHINE%\ProdSW for machine-specific updates... +ECHO (2/3) Checking T:\%MACHINE%\ProdSW for machine-specific updates... -IF NOT EXIST T:\%MACHINE%\ProdSW\NUL GOTO NO_MACHINE_DIR +IF NOT EXIST T:\%MACHINE%\ProdSW\*.* GOTO NO_MACHINE_DIR -REM Check for any files (BAT, EXE, DAT) -FOR %%F IN (T:\%MACHINE%\ProdSW\*.*) DO CALL :COUNT_FILE - -IF "%MACHINEFILES%"=="" ECHO [OK] No updates for %MACHINE% -IF NOT "%MACHINEFILES%"=="" ECHO [FOUND] Updates available for %MACHINE% +IF EXIST T:\%MACHINE%\ProdSW\*.* SET MACHINEFILES=FOUND +IF "%MACHINEFILES%"=="" ECHO No updates for %MACHINE% +IF NOT "%MACHINEFILES%"=="" ECHO Updates available for %MACHINE% ECHO. GOTO CHECK_SYSTEM :NO_MACHINE_DIR -ECHO [SKIP] T:\%MACHINE%\ProdSW not found +ECHO T:\%MACHINE%\ProdSW not found ECHO. -REM ================================================================== -REM STEP 6: Check system file updates -REM ================================================================== - :CHECK_SYSTEM -ECHO [3/3] Checking T:\COMMON\DOS for system file updates... +ECHO (3/3) Checking T:\COMMON\DOS for system file updates... -IF NOT EXIST T:\COMMON\DOS\NUL GOTO NO_DOS_DIR +IF NOT EXIST T:\COMMON\DOS\*.* GOTO NO_DOS_DIR -REM Check for .NEW files IF EXIST T:\COMMON\DOS\AUTOEXEC.NEW SET SYSFILE=FOUND -IF EXIST T:\COMMON\DOS\AUTOEXEC.NEW ECHO [FOUND] AUTOEXEC.NEW (system reboot required) +IF EXIST T:\COMMON\DOS\AUTOEXEC.NEW ECHO AUTOEXEC.NEW found (reboot required) IF EXIST T:\COMMON\DOS\CONFIG.NEW SET SYSFILE=FOUND -IF EXIST T:\COMMON\DOS\CONFIG.NEW ECHO [FOUND] CONFIG.NEW (system reboot required) +IF EXIST T:\COMMON\DOS\CONFIG.NEW ECHO CONFIG.NEW found (reboot required) -IF "%SYSFILE%"=="" ECHO [OK] No system file updates +IF "%SYSFILE%"=="" ECHO No system file updates ECHO. GOTO SHOW_SUMMARY :NO_DOS_DIR -ECHO [SKIP] T:\COMMON\DOS not found +ECHO T:\COMMON\DOS not found ECHO. -REM ================================================================== -REM STEP 7: Show summary and recommendations -REM ================================================================== - :SHOW_SUMMARY -REM Determine if any updates found SET HASUPDATES= IF NOT "%COMMON%"=="" SET HASUPDATES=YES IF NOT "%MACHINEFILES%"=="" SET HASUPDATES=YES @@ -147,59 +81,46 @@ ECHO ============================================================== ECHO Update Summary ECHO ============================================================== ECHO. -ECHO Available updates: -IF NOT "%COMMON%"=="" ECHO [FOUND] Common batch files -IF "%COMMON%"=="" ECHO [OK] Common batch files -IF NOT "%MACHINEFILES%"=="" ECHO [FOUND] Machine-specific files -IF "%MACHINEFILES%"=="" ECHO [OK] Machine-specific files -IF NOT "%SYSFILE%"=="" ECHO [FOUND] System files -IF "%SYSFILE%"=="" ECHO [OK] System files +IF NOT "%COMMON%"=="" ECHO FOUND: Common batch files +IF "%COMMON%"=="" ECHO OK: Common batch files +IF NOT "%MACHINEFILES%"=="" ECHO FOUND: Machine-specific files +IF "%MACHINEFILES%"=="" ECHO OK: Machine-specific files +IF NOT "%SYSFILE%"=="" ECHO FOUND: System files +IF "%SYSFILE%"=="" ECHO OK: System files ECHO. -REM Provide recommendation IF "%HASUPDATES%"=="" GOTO NO_UPDATES_AVAILABLE -ECHO Recommendation: -ECHO Run NWTOC to download and install updates +ECHO Recommendation: Run NWTOC to install updates ECHO. -IF NOT "%SYSFILE%"=="" ECHO [WARNING] System file updates will require reboot +IF NOT "%SYSFILE%"=="" ECHO WARNING: System file updates require reboot IF NOT "%SYSFILE%"=="" ECHO. -GOTO END +GOTO CLEANUP :NO_UPDATES_AVAILABLE ECHO Status: All files are up to date ECHO. +GOTO CLEANUP -GOTO END +:NO_MACHINE +ECHO. +ECHO ERROR: MACHINE variable not set +ECHO Set MACHINE in AUTOEXEC.BAT: SET MACHINE=TS-4R +ECHO. +PAUSE +GOTO CLEANUP -REM ================================================================== -REM HELPER SUBROUTINES -REM ================================================================== +:NO_T_DRIVE +ECHO. +ECHO ERROR: T: drive not available +ECHO Run: C:\STARTNET.BAT +ECHO. +PAUSE +GOTO CLEANUP -:CHECK_COMMON_FILE -REM Flag that network files exist (DOS 6.22 cannot extract filename from path) -REM Simply mark updates as available if any network file is found -SET COMMON=FOUND -GOTO END_SUBROUTINE - -:COUNT_FILE -REM Flag that machine-specific files exist -SET MACHINEFILES=FOUND -GOTO END_SUBROUTINE - -:END_SUBROUTINE -REM Return point for all subroutines (replaces :EOF) - -REM ================================================================== -REM CLEANUP AND EXIT -REM ================================================================== - -:END -REM Clean up environment variables +:CLEANUP SET COMMON= SET MACHINEFILES= SET SYSFILE= SET HASUPDATES= -SET NETFILE= -SET FILENAME= diff --git a/projects/dataforth-dos/batch-files/CTONW.BAT b/projects/dataforth-dos/batch-files/CTONW.BAT index 8eb4ceb..ac165b1 100644 --- a/projects/dataforth-dos/batch-files/CTONW.BAT +++ b/projects/dataforth-dos/batch-files/CTONW.BAT @@ -1,10 +1,7 @@ @ECHO OFF REM Computer to Network - Upload local test results to network -REM Version: 3.1 - Added logging, machine verification +REM Version: 3.2 - DOS 6.22 compatible REM Last modified: 2026-01-21 -REM -REM IMPORTANT: Test results go to T:\%MACHINE%\LOGS\*LOG (machine-specific) -REM This prevents overwriting data from other machines REM Verify MACHINE variable is set IF "%MACHINE%"=="" GOTO NO_MACHINE @@ -15,20 +12,11 @@ IF NOT EXIST T:\*.* GOTO NO_DRIVE REM Verify machine folder exists IF NOT EXIST T:\%MACHINE%\*.* GOTO NO_FOLDER -REM Start logging -ECHO CTONW.BAT v3.1 > C:\ATE\CTONW.LOG +ECHO ........................................ +ECHO Archiving datalog files to network... +ECHO CTONW.BAT v3.2 > C:\ATE\CTONW.LOG ECHO Machine: %MACHINE% >> C:\ATE\CTONW.LOG -ECHO Date: %DATE% %TIME% >> C:\ATE\CTONW.LOG -ECHO Target: T:\%MACHINE%\LOGS >> C:\ATE\CTONW.LOG -ECHO. >> C:\ATE\CTONW.LOG - -REM Display banner -ECHO. -ECHO ============================================================== -ECHO Upload Test Results: %MACHINE% -ECHO Destination: T:\%MACHINE%\LOGS -ECHO ============================================================== -ECHO. +ECHO Copying from C:\ATE\ to T:\%MACHINE%\LOGS\ >> C:\ATE\CTONW.LOG REM Check for ATE directory IF NOT EXIST C:\ATE\*.* GOTO SKIP_ATE @@ -44,78 +32,50 @@ IF NOT EXIST T:\%MACHINE%\LOGS\PWRLOG\*.* MD T:\%MACHINE%\LOGS\PWRLOG IF NOT EXIST T:\%MACHINE%\LOGS\SCTLOG\*.* MD T:\%MACHINE%\LOGS\SCTLOG IF NOT EXIST T:\%MACHINE%\LOGS\VASLOG\*.* MD T:\%MACHINE%\LOGS\VASLOG -ECHO [1/4] Uploading test logs... -ECHO [1/4] Test logs: >> C:\ATE\CTONW.LOG -IF EXIST C:\ATE\5BLOG\*.* COPY C:\ATE\5BLOG\*.* T:\%MACHINE%\LOGS\5BLOG >> C:\ATE\CTONW.LOG -IF EXIST C:\ATE\7BLOG\*.* COPY C:\ATE\7BLOG\*.* T:\%MACHINE%\LOGS\7BLOG >> C:\ATE\CTONW.LOG -IF EXIST C:\ATE\8BLOG\*.* COPY C:\ATE\8BLOG\*.* T:\%MACHINE%\LOGS\8BLOG >> C:\ATE\CTONW.LOG -IF EXIST C:\ATE\DSCLOG\*.* COPY C:\ATE\DSCLOG\*.* T:\%MACHINE%\LOGS\DSCLOG >> C:\ATE\CTONW.LOG -IF EXIST C:\ATE\HVLOG\*.* COPY C:\ATE\HVLOG\*.* T:\%MACHINE%\LOGS\HVLOG >> C:\ATE\CTONW.LOG -IF EXIST C:\ATE\PWRLOG\*.* COPY C:\ATE\PWRLOG\*.* T:\%MACHINE%\LOGS\PWRLOG >> C:\ATE\CTONW.LOG -IF EXIST C:\ATE\SCTLOG\*.* COPY C:\ATE\SCTLOG\*.* T:\%MACHINE%\LOGS\SCTLOG >> C:\ATE\CTONW.LOG -IF EXIST C:\ATE\VASLOG\*.* COPY C:\ATE\VASLOG\*.* T:\%MACHINE%\LOGS\VASLOG >> C:\ATE\CTONW.LOG -ECHO Done -ECHO. +IF EXIST C:\ATE\5BLOG\*.DAT COPY C:\ATE\5BLOG\*.DAT T:\%MACHINE%\LOGS\5BLOG +IF EXIST C:\ATE\7BLOG\*.DAT COPY C:\ATE\7BLOG\*.DAT T:\%MACHINE%\LOGS\7BLOG +IF EXIST C:\ATE\7BLOG\*.SHT COPY C:\ATE\7BLOG\*.SHT T:\%MACHINE%\LOGS\7BLOG +IF EXIST C:\ATE\8BLOG\*.DAT COPY C:\ATE\8BLOG\*.DAT T:\%MACHINE%\LOGS\8BLOG +IF EXIST C:\ATE\DSCLOG\*.DAT COPY C:\ATE\DSCLOG\*.DAT T:\%MACHINE%\LOGS\DSCLOG +IF EXIST C:\ATE\HVLOG\*.DAT COPY C:\ATE\HVLOG\*.DAT T:\%MACHINE%\LOGS\HVLOG +IF EXIST C:\ATE\PWRLOG\*.DAT COPY C:\ATE\PWRLOG\*.DAT T:\%MACHINE%\LOGS\PWRLOG +IF EXIST C:\ATE\SCTLOG\*.DAT COPY C:\ATE\SCTLOG\*.DAT T:\%MACHINE%\LOGS\SCTLOG +IF EXIST C:\ATE\VASLOG\*.DAT COPY C:\ATE\VASLOG\*.DAT T:\%MACHINE%\LOGS\VASLOG -REM Ensure Reports directory exists +ECHO Archiving work-order report files to network... IF NOT EXIST T:\%MACHINE%\Reports\*.* MD T:\%MACHINE%\Reports +IF EXIST C:\Reports\*.TXT COPY C:\Reports\*.TXT T:\%MACHINE%\Reports -ECHO [2/4] Uploading work-order reports... -ECHO [2/4] Reports: >> C:\ATE\CTONW.LOG -IF EXIST C:\Reports\*.txt COPY C:\Reports\*.txt T:\%MACHINE%\Reports >> C:\ATE\CTONW.LOG -ECHO Done -ECHO. +ECHO Archiving log file to network... +IF EXIST C:\ATE\*.LOG COPY C:\ATE\*.LOG T:\%MACHINE% -ECHO [3/4] Uploading batch files... -ECHO [3/4] Batch files: >> C:\ATE\CTONW.LOG -IF NOT EXIST T:\%MACHINE%\ProdSW\*.* MD T:\%MACHINE%\ProdSW -IF EXIST C:\BAT\*.BAT COPY C:\BAT\*.BAT T:\%MACHINE%\ProdSW >> C:\ATE\CTONW.LOG -ECHO Done -ECHO. - -ECHO [4/4] Uploading log file... -ECHO [4/4] Log file: >> C:\ATE\CTONW.LOG -IF EXIST C:\ATE\*.LOG COPY C:\ATE\*.LOG T:\%MACHINE% >> C:\ATE\CTONW.LOG -ECHO Done -ECHO. - -ECHO Complete >> C:\ATE\CTONW.LOG -GOTO DONE +ECHO Network archiving of datalog files done! +ECHO ........................................ +GOTO END :SKIP_ATE -ECHO [INFO] No C:\ATE directory - skipping -ECHO. - -:DONE -ECHO ============================================================== -ECHO Upload Complete: %MACHINE% -ECHO ============================================================== -ECHO. +ECHO No C:\ATE directory - skipping GOTO END :NO_MACHINE -ECHO. -ECHO [ERROR] MACHINE variable not set -ECHO. -ECHO This prevents uploading to wrong folder. -ECHO Run DEPLOY.BAT or ATESYNC first. -ECHO. +ECHO ........................................ +ECHO ERROR: MACHINE variable not set +ECHO Run DEPLOY.BAT or ATESYNC first +ECHO ........................................ PAUSE GOTO END :NO_DRIVE -ECHO [ERROR] T: drive not available +ECHO ERROR: T: drive not available ECHO Run C:\STARTNET.BAT first PAUSE GOTO END :NO_FOLDER -ECHO. -ECHO [ERROR] Machine folder T:\%MACHINE% not found -ECHO. -ECHO Run ATESYNC to create it, or check MACHINE variable. -ECHO Current MACHINE=%MACHINE% -ECHO. +ECHO ........................................ +ECHO ERROR: Machine folder T:\%MACHINE% not found +ECHO Run ATESYNC to create it first +ECHO ........................................ PAUSE GOTO END diff --git a/projects/dataforth-dos/batch-files/DOSTEST.BAT b/projects/dataforth-dos/batch-files/DOSTEST.BAT index f9a4f03..f6d8f14 100644 --- a/projects/dataforth-dos/batch-files/DOSTEST.BAT +++ b/projects/dataforth-dos/batch-files/DOSTEST.BAT @@ -1,8 +1,8 @@ @ECHO OFF REM DOSTEST.BAT - Test DOS batch file deployment REM Run this on the DOS machine after deploying new files -REM Version: 1.1 - Fixed drive test for DOS 6.22 reliability -REM Last modified: 2026-01-20 +REM Version: 1.2 - DOS 6.22 compatible (removed brackets, 2>NUL, NUL checks) +REM Last modified: 2026-01-21 ECHO. ECHO ============================================================== @@ -14,14 +14,14 @@ REM ================================================================== REM TEST 1: Check MACHINE variable REM ================================================================== -ECHO [TEST 1] Checking MACHINE variable... +ECHO (TEST 1) Checking MACHINE variable... IF "%MACHINE%"=="" GOTO TEST1_FAIL -ECHO [OK] MACHINE=%MACHINE% +ECHO OK: MACHINE=%MACHINE% GOTO TEST2 :TEST1_FAIL -ECHO [FAIL] MACHINE variable not set +ECHO FAIL: MACHINE variable not set ECHO Fix: Add "SET MACHINE=TS-4R" to C:\AUTOEXEC.BAT ECHO. PAUSE @@ -33,55 +33,39 @@ REM ================================================================== :TEST2 ECHO. -ECHO [TEST 2] Checking required files... +ECHO (TEST 2) Checking required files... -IF NOT EXIST C:\AUTOEXEC.BAT ECHO [FAIL] C:\AUTOEXEC.BAT missing -IF EXIST C:\AUTOEXEC.BAT ECHO [OK] C:\AUTOEXEC.BAT exists +IF NOT EXIST C:\AUTOEXEC.BAT ECHO FAIL: C:\AUTOEXEC.BAT missing +IF EXIST C:\AUTOEXEC.BAT ECHO OK: C:\AUTOEXEC.BAT exists -IF NOT EXIST C:\STARTNET.BAT ECHO [FAIL] C:\STARTNET.BAT missing -IF EXIST C:\STARTNET.BAT ECHO [OK] C:\STARTNET.BAT exists +IF NOT EXIST C:\STARTNET.BAT ECHO FAIL: C:\STARTNET.BAT missing +IF EXIST C:\STARTNET.BAT ECHO OK: C:\STARTNET.BAT exists -IF NOT EXIST C:\BATCH\UPDATE.BAT ECHO [FAIL] C:\BATCH\UPDATE.BAT missing -IF EXIST C:\BATCH\UPDATE.BAT ECHO [OK] C:\BATCH\UPDATE.BAT exists - -IF NOT EXIST C:\BATCH\NUL ECHO [WARN] C:\BATCH directory missing - run MD C:\BATCH -IF EXIST C:\BATCH\NUL ECHO [OK] C:\BATCH directory exists +IF NOT EXIST C:\BAT\*.* ECHO WARN: C:\BAT directory missing - run MD C:\BAT +IF EXIST C:\BAT\*.* ECHO OK: C:\BAT directory exists REM ================================================================== REM TEST 3: Check PATH variable REM ================================================================== ECHO. -ECHO [TEST 3] Checking PATH... +ECHO (TEST 3) Checking PATH... ECHO PATH=%PATH% -REM Check if C:\BATCH is in PATH (simple check - look for BATCH string) -ECHO %PATH% | FIND /I "BATCH" > NUL -IF ERRORLEVEL 1 GOTO TEST3_FAIL -ECHO [OK] C:\BATCH is in PATH -GOTO TEST4 - -:TEST3_FAIL -ECHO [WARN] C:\BATCH not in PATH -ECHO Fix: Add "SET PATH=C:\DOS;C:\NET;C:\BATCH;C:\" to AUTOEXEC.BAT -GOTO TEST4 - REM ================================================================== REM TEST 4: Check T: drive REM ================================================================== -:TEST4 ECHO. -ECHO [TEST 4] Checking T: drive... +ECHO (TEST 4) Checking T: drive... -REM DOS 6.22: Direct file test is most reliable IF NOT EXIST T:\*.* GOTO TEST4_FAIL -ECHO [OK] T: drive accessible +ECHO OK: T: drive accessible GOTO TEST5 :TEST4_FAIL -ECHO [FAIL] T: drive not accessible +ECHO FAIL: T: drive not accessible ECHO Fix: Run C:\STARTNET.BAT to map network drives GOTO TEST5 @@ -91,16 +75,15 @@ REM ================================================================== :TEST5 ECHO. -ECHO [TEST 5] Checking X: drive... +ECHO (TEST 5) Checking X: drive... -REM DOS 6.22: Direct file test is most reliable IF NOT EXIST X:\*.* GOTO TEST5_FAIL -ECHO [OK] X: drive accessible +ECHO OK: X: drive accessible GOTO TEST6 :TEST5_FAIL -ECHO [FAIL] X: drive not accessible +ECHO FAIL: X: drive not accessible ECHO Fix: Run C:\STARTNET.BAT to map network drives GOTO TEST6 @@ -110,7 +93,7 @@ REM ================================================================== :TEST6 ECHO. -ECHO [TEST 6] Checking backup directory creation... +ECHO (TEST 6) Checking backup directory creation... IF "%MACHINE%"=="" GOTO TEST6_SKIP @@ -118,28 +101,28 @@ REM Only test if T: is available IF NOT EXIST T:\*.* GOTO TEST6_SKIP REM Try to create machine directory -IF NOT EXIST T:\%MACHINE%\NUL MD T:\%MACHINE% 2>NUL -IF NOT EXIST T:\%MACHINE%\NUL GOTO TEST6_FAIL +IF NOT EXIST T:\%MACHINE%\*.* MD T:\%MACHINE% +IF NOT EXIST T:\%MACHINE%\*.* GOTO TEST6_FAIL -REM Try to create backup subdirectory -IF NOT EXIST T:\%MACHINE%\TEST\*.* MD T:\%MACHINE%\TEST 2>NUL +REM Try to create test subdirectory +IF NOT EXIST T:\%MACHINE%\TEST\*.* MD T:\%MACHINE%\TEST IF NOT EXIST T:\%MACHINE%\TEST\*.* GOTO TEST6_FAIL -ECHO [OK] Can create T:\%MACHINE%\TEST -ECHO [OK] Backup directory structure works +ECHO OK: Can create T:\%MACHINE%\TEST +ECHO OK: Backup directory structure works REM Clean up test directory -RD T:\%MACHINE%\TEST 2>NUL +RD T:\%MACHINE%\TEST GOTO SUMMARY :TEST6_FAIL -ECHO [FAIL] Cannot create directory on T: drive +ECHO FAIL: Cannot create directory on T: drive ECHO Check: T: drive is writable GOTO SUMMARY :TEST6_SKIP -ECHO [SKIP] Cannot test (T: unavailable or MACHINE not set) +ECHO SKIP: Cannot test (T: unavailable or MACHINE not set) GOTO SUMMARY REM ================================================================== @@ -153,14 +136,11 @@ ECHO Test Summary ECHO ============================================================== ECHO. -REM Count passes and fails would be complex in DOS batch -REM Just show overall status - IF "%MACHINE%"=="" GOTO SUMMARY_FAIL -IF NOT EXIST C:\BATCH\UPDATE.BAT GOTO SUMMARY_FAIL +IF NOT EXIST C:\BAT\*.* GOTO SUMMARY_FAIL IF NOT EXIST T:\*.* GOTO SUMMARY_FAIL -ECHO [OK] All critical tests passed +ECHO OK: All critical tests passed ECHO. ECHO Configuration appears correct. ECHO. @@ -170,7 +150,7 @@ ECHO. GOTO END :SUMMARY_FAIL -ECHO [FAIL] One or more tests failed +ECHO FAIL: One or more tests failed ECHO. ECHO Please fix the failed tests before running UPDATE ECHO. @@ -178,7 +158,7 @@ ECHO Common fixes: ECHO 1. Reboot machine (load AUTOEXEC.BAT changes) ECHO 2. Run C:\STARTNET.BAT (map network drives) ECHO 3. Check network cable is connected -ECHO 4. Create C:\BATCH directory: MD C:\BATCH +ECHO 4. Create C:\BAT directory: MD C:\BAT ECHO. :END diff --git a/projects/dataforth-dos/batch-files/UPDATE.BAT b/projects/dataforth-dos/batch-files/UPDATE.BAT index 0531d0d..d862ad8 100644 --- a/projects/dataforth-dos/batch-files/UPDATE.BAT +++ b/projects/dataforth-dos/batch-files/UPDATE.BAT @@ -6,8 +6,8 @@ REM REM If machine-name not provided, uses MACHINE environment variable REM from AUTOEXEC.BAT REM -REM Version: 2.3 - Fixed XCOPY trailing backslash (DOS 6.22 compatibility) -REM Last modified: 2026-01-20 +REM Version: 2.4 - DOS 6.22 compatible (removed brackets, fixed NUL checks) +REM Last modified: 2026-01-21 REM ================================================================== REM STEP 1: Determine machine name @@ -18,7 +18,7 @@ IF NOT "%MACHINE%"=="" GOTO USE_ENV :NO_MACHINE ECHO. -ECHO [ERROR] Machine name not specified +ECHO ERROR: Machine name not specified ECHO. ECHO Usage: UPDATE machine-name ECHO Example: UPDATE TS-4R @@ -47,12 +47,12 @@ ECHO Checking network drive T:... REM DOS 6.22: Direct file test is most reliable IF NOT EXIST T:\*.* GOTO NO_T_DRIVE -ECHO [OK] T: drive accessible +ECHO OK: T: drive accessible GOTO START_BACKUP :NO_T_DRIVE ECHO. -ECHO [ERROR] T: drive not available +ECHO ERROR: T: drive not available ECHO. ECHO Network drive T: must be mapped to \\D2TESTNAS\test ECHO. @@ -79,15 +79,15 @@ ECHO Target: T:\%MACHINE%\BACKUP ECHO. REM Create machine directory if it doesn't exist -IF NOT EXIST T:\%MACHINE%\NUL MD T:\%MACHINE% +IF NOT EXIST T:\%MACHINE%\*.* MD T:\%MACHINE% REM Create backup directory -IF NOT EXIST T:\%MACHINE%\BACKUP\NUL MD T:\%MACHINE%\BACKUP +IF NOT EXIST T:\%MACHINE%\BACKUP\*.* MD T:\%MACHINE%\BACKUP REM Check if backup directory was created successfully IF NOT EXIST T:\%MACHINE%\BACKUP\*.* GOTO BACKUP_DIR_ERROR -ECHO [OK] Backup directory ready +ECHO OK: Backup directory ready ECHO. REM ================================================================== @@ -124,7 +124,7 @@ IF ERRORLEVEL 2 GOTO USER_ABORT IF ERRORLEVEL 1 GOTO NO_FILES ECHO. -ECHO [OK] Backup completed successfully +ECHO OK: Backup completed successfully ECHO. ECHO Files backed up to: T:\%MACHINE%\BACKUP GOTO END @@ -135,7 +135,7 @@ REM ================================================================== :BACKUP_DIR_ERROR ECHO. -ECHO [ERROR] Could not create backup directory +ECHO ERROR: Could not create backup directory ECHO Target: T:\%MACHINE%\BACKUP ECHO. ECHO Check: @@ -148,7 +148,7 @@ GOTO END :DISK_ERROR ECHO. -ECHO [ERROR] Disk write error +ECHO ERROR: Disk write error ECHO. ECHO Possible causes: ECHO - Target drive is full @@ -160,7 +160,7 @@ GOTO END :INIT_ERROR ECHO. -ECHO [ERROR] Backup initialization failed +ECHO ERROR: Backup initialization failed ECHO. ECHO Possible causes: ECHO - Insufficient memory @@ -172,7 +172,7 @@ GOTO END :USER_ABORT ECHO. -ECHO [WARNING] Backup terminated by user (Ctrl+C) +ECHO WARNING: Backup terminated by user (Ctrl+C) ECHO. ECHO Backup may be incomplete! ECHO. @@ -181,7 +181,7 @@ GOTO END :NO_FILES ECHO. -ECHO [WARNING] No files found to copy +ECHO WARNING: No files found to copy ECHO. ECHO This may indicate: ECHO - All files are already up to date (/D option)