#! /bin/sh # # Motif Tools Library # $Id: checkres,v 1.1.1.1 2001/07/18 11:06:10 root Exp $ # # Written by David Flanagan. # Copyright (c) 1992, 1993 by Dovetail Systems. # All Rights Reserved. See the file COPYRIGHT for details. # This is not free software. See the file SHAREWARE for details. # There is no warranty for this software. See the file WARRANTY for details. # if [ "$#" = "0" ] then echo usage: $0 filename [filename...] echo " or: $0 - (to check stdin)" exit; fi; while [ "$#" != "0" ]; do awk ' # initialize variables BEGIN { cont = 0; ok = 0; FS = "\n"; } # a comment that begins with the word okay turns off error checking # for the next resource specification, which may include continuation # lines. /^![ ]*okay/ { ok = 1; } # ignore other comments, except to note that they are not # followed by continuation lines. /^!/ { cont = 0; next; } # if the ok flag is set, then we will ignore this line. # if the line is not blank and does not end with a backslash, then we will # turn off the flag to resume normal error checking. ok == 1 {\ if ($0 !~ /\\$/) if ($0 !~ /^$/) ok = 0;\ next;\ } # ignore the #include directive in resoure files /^#[ ]*include/ { cont = 0; next; } # warn about whitespace following backslashes at end of line /\\[ ]+$/ {\ printf("%s: %s: whitespace follows backslash.\n",FILENAME, NR);\ } # warn about any trailing whitespace /[ ]+$/ {\ printf("%s: %s: warning: trailing whitespace included in resource value.\n",\ FILENAME, NR);\ } # If a line is not a continuation line or blank (or a comment) # then it should have a colon in it. If not, and if the line # begins with whitespace, then there is probably a missing backslash # on the previous line. Otherwise, it is probably just a missing colon. # If there is a colon, we check the lhs and rhs. Widget names can legally # contain spaces and you can get away with punctuation, # but this is a bad idea, and we also require that the colon be # preceded by a well-formed widget name. # Also, colons must be followed by something other than whitespace. cont == 0 && ($0 !~ /^[ ]*$/) {\ if ($0 !~ /:/) {\ if ($0 ~ /^[ ]/)\ printf("%s: %s: colon expected. Missing \\ on previous line?\n", FILENAME, NR);\ else printf("%s: %s: colon expected.\n", FILENAME, NR);\ }\ else {\ if ($0 !~ /^[ ]*[.*]?(([?]|[a-zA-Z0-9_-]+)[.*])*[a-zA-Z0-9_-]+[ ]*:/)\ printf("%s: %s: malformed name before colon.\n",\ FILENAME, NR);\ if ($0 !~ /:[ ]*[^ ]/)\ printf("%s: %s: warning: no resource value follows colon.\n",\ FILENAME, NR);\ }\ } # if the current line ends with a backslash (or a backslash followed by # whitespace which will be warned about above) then set a flag to indicate # that the next line is a continuation line. This flag is read above. /\\[ ]*$/ { cont = 1; } !/\\[ ]*$/ { cont = 0; } ' $1 shift done