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>
107 lines
3.0 KiB
Bash
Executable File
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
|