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>
This commit is contained in:
106
projects/dataforth-dos/batch-files/validate-dos.sh
Executable file
106
projects/dataforth-dos/batch-files/validate-dos.sh
Executable file
@@ -0,0 +1,106 @@
|
||||
#!/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
|
||||
Reference in New Issue
Block a user