Files
claudetools/projects/dataforth-dos/batch-files/validate-dos.sh
azcomputerguru 63ab144c8f sync: Auto-sync from Mikes-MacBook-Air.local at 2026-01-22 19:10:48
Synced files:
- DOS batch files updated (ATESYNC, CTONWTXT, DEPLOY, NWTOC, etc.)
- New debug batch files (ATESYNCD, CTONWD, NWTOCD, DIAGBK)
- Removed obsolete debug files (ATESYNC-DEBUG, CTONW-DEBUG, NWTOC-DEBUG)
- New deployment scripts (deploy-to-nas.sh, validate-dos.sh)
- DOS coding agent documentation updated

Machine: Mikes-MacBook-Air.local
Timestamp: 2026-01-22 19:10:48

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-22 19:11:08 -07:00

107 lines
3.0 KiB
Bash
Executable File

#!/bin/bash
# validate-dos.sh - Validate batch files for DOS 6.22 compatibility
# Run before deploying to DOS machines
ERRORS=0
echo "DOS 6.22 Batch File Validator"
echo "=============================="
echo ""
for file in *.BAT; do
[ -f "$file" ] || continue
echo "Checking: $file"
# Rule 1: No CALL :label
if grep -qE "CALL\s+:" "$file" 2>/dev/null; then
echo " ERROR: CALL :label subroutine found (Rule 1)"
ERRORS=$((ERRORS+1))
fi
# Rule 2: No %DATE% or %TIME%
if grep -qE "%DATE%|%TIME%" "$file" 2>/dev/null; then
echo " ERROR: %DATE% or %TIME% found (Rule 2)"
ERRORS=$((ERRORS+1))
fi
# Rule 3: No square brackets in ECHO
if grep -qE "ECHO.*\[" "$file" 2>/dev/null; then
# Exclude REM lines
if grep -vE "^REM" "$file" | grep -qE "ECHO.*\[" 2>/dev/null; then
echo " ERROR: Square brackets in ECHO (Rule 3)"
ERRORS=$((ERRORS+1))
fi
fi
# Rule 6: No 2>NUL
if grep -qE "2>NUL|2> *NUL" "$file" 2>/dev/null; then
echo " ERROR: 2>NUL stderr redirect found (Rule 6)"
ERRORS=$((ERRORS+1))
fi
# Rule 8: No :EOF
if grep -qE "GOTO\s+:?EOF" "$file" 2>/dev/null; then
echo " ERROR: :EOF label reference found (Rule 8)"
ERRORS=$((ERRORS+1))
fi
# Rule 15: No SETLOCAL/ENDLOCAL
if grep -qiE "SETLOCAL|ENDLOCAL" "$file" 2>/dev/null; then
echo " ERROR: SETLOCAL/ENDLOCAL found (Rule 15)"
ERRORS=$((ERRORS+1))
fi
# Rule 19: Check for LF-only line endings (no CR)
if file "$file" | grep -qv "CRLF"; then
if file "$file" | grep -q "ASCII"; then
echo " WARNING: May have Unix line endings (Rule 19)"
fi
fi
# Rule 20: Trailing spaces in SET statements
if grep -qE "^SET [A-Za-z_]+=[^ ]* +$" "$file" 2>/dev/null; then
echo " ERROR: Trailing space in SET statement (Rule 20)"
grep -nE "^SET [A-Za-z_]+=[^ ]* +$" "$file" | sed 's/^/ Line /'
ERRORS=$((ERRORS+1))
fi
# Rule 20: Any trailing whitespace
if grep -qE " +$" "$file" 2>/dev/null; then
TRAILING=$(grep -cE " +$" "$file")
echo " WARNING: $TRAILING lines have trailing whitespace (Rule 20)"
fi
# Check filename is 8.3
BASENAME=$(basename "$file" .BAT)
if [ ${#BASENAME} -gt 8 ]; then
echo " ERROR: Filename exceeds 8 characters (Rule 14)"
ERRORS=$((ERRORS+1))
fi
done
echo ""
echo "=============================="
if [ $ERRORS -eq 0 ]; then
echo "All checks passed!"
else
echo "Found $ERRORS error(s)"
fi
echo ""
# Auto-fix option
if [ "$1" = "--fix" ]; then
echo "Applying fixes..."
for file in *.BAT; do
[ -f "$file" ] || continue
# Strip trailing whitespace
sed -i '' 's/[[:space:]]*$//' "$file"
# Convert to DOS line endings
perl -pi -e 's/\r?\n/\r\n/g' "$file"
echo " Fixed: $file"
done
echo "Done. Re-run without --fix to verify."
fi
exit $ERRORS