# Gentests.vms - supplements Gentests to generate tests in vms format # gawk -v "VMSTESTS=1" -f Gentests -f Gentests.vms Makefile.am *.awk *.in >Maketests.vms /^FAIL_CODE1 *=/,/[^\\]$/ { gsub(/(^FAIL_CODE1 *=|\\$)/,"") for (i = 1; i <= NF; i++) fail_code1[$i] next } END { if (VMSTESTS) vmsepilog() } # wildcard expansion done by gawk's vms_arg_fixup() to simulate shell # globbing produces full filenames: device:[directory]name.type;# # and by default also forces the value into upper case function vmsargvfixup( i, f) { # we're forcing lowercase below; need to override for some files vmscasefixup["makefile.in"] = "Makefile.in" for (i = 2; i < ARGC; i++) { f = ARGV[i] sub(/^.+[]>]/, "", f) # strip dev+dir prefix sub(/\;[0-9]+$/, "", f) # strip version suffix f = tolower(f) if (f in vmscasefixup) f = vmscasefixup[f] ARGV[i] = f } vmsprolog() # insert some stuff into the output file } # output sufficient for the simplest tests in vms/vmstest.com function vmsgenerate(x, s, o) { # generate a gosub-style subroutine; start with its label printf "$" x ":" s = "" if (x in lint) { s = s " --lint" delete lint[x] } if (x in lint_old) { s = s " --lint-old" delete lint_old[x] } if (x".in" in files) { s = s " <" x ".in" delete files[x".in"] } o = "_" x ".tmp" print "\techo \"" x "\"" print "$\tAWKPATH_srcdir" print "$\tgawk -f " x ".awk" s " >" o " 2>&1" print "$\tif .not.$status then call exit_code \"" o "\" " \ ((x in fail_code1) ? "1" : "2") print "$\tcmp " x ".ok " o print "$\tif $status" print "$\tthen\trm " o ";" print "$\telse\techo \"test \"\"" x "\"\" failed\"" print "$\tendif" print "$\treturn" return } # prolog for Maketests.vms function vmsprolog() { print "$" print "$\techo\t= \"write sys$output\"" print "$\tcmp\t= \"diff/Output=_NL:/Maximum=1\"" print "$\trm\t= \"delete/noConfirm/noLog\"" print "$\tgawk\t= \"$sys$disk:[-]gawk.exe\"" print "$\tAWKPATH_srcdir = \"define/User AWKPATH sys$disk:[]\"" print "$" print "$\tset noOn" print "$ gosub 'p1'" print "$\tset On" print "$ exit" print "$" } # epilog for Maketests.vms function vmsepilog() { print "$" print "$! add a fake \"EXIT CODE\" record to the end of temporary output file" print "$! to simulate the ``|| echo EXIT CODE $$? >>_$@'' shell script usage" print "$exit_code: subroutine" print "$\tif f$trnlnm(\"FTMP\").nes.\"\" then close/noLog ftmp" print "$\topen/Append ftmp 'p1'" print "$\twrite ftmp \"EXIT CODE: \",p2" print "$\tclose ftmp" print "$ endsubroutine !exit_code" print "$" }