95 lines
2.2 KiB
Awk
Executable File
95 lines
2.2 KiB
Awk
Executable File
#! /usr/bin/awk -f
|
|
#
|
|
# _ __ ___ __ _ _ __ ___| |__ ___ ___| | __
|
|
# | '_ ` _ \ / _` | '_ \ / __| '_ \ / _ \/ __| |/ /
|
|
# | | | | | | (_| | |_) | (__| | | | __/ (__| <
|
|
# |_| |_| |_|\__,_| .__/ \___|_| |_|\___|\___|_|\_\
|
|
# |_|
|
|
#
|
|
# mapcheck is a tool to validate gophermaps for the gopher
|
|
# internet protocol. It will validate a map in a few ways:
|
|
#
|
|
# 1. Check for link lines without all four required values
|
|
# 2. Warns of any non-standard link types
|
|
# 3. Warns if a line of text is longer than a value set by
|
|
# the variable "MAXLEN"
|
|
#
|
|
# This software is licensed under the GNU GPLv3 License
|
|
# For more details see:
|
|
# https://www.gnu.org/licenses/gpl-3.0.en.html
|
|
#
|
|
|
|
BEGIN {
|
|
FS="\t";
|
|
OFS=" ";
|
|
|
|
# Set variable
|
|
MAXLEN = 60;
|
|
ERR=0
|
|
WARN=0
|
|
FNAME=""
|
|
|
|
# Initialize types array with values
|
|
TYPES["h"] = 0
|
|
TYPES["i"] = 0
|
|
TYPES["0"] = 0
|
|
TYPES["1"] = 0
|
|
TYPES["2"] = 0
|
|
TYPES["3"] = 0
|
|
TYPES["4"] = 0
|
|
TYPES["5"] = 0
|
|
TYPES["6"] = 0
|
|
TYPES["7"] = 0
|
|
TYPES["8"] = 0
|
|
TYPES["9"] = 0
|
|
TYPES["+"] = 0
|
|
TYPES["g"] = 0
|
|
TYPES["I"] = 0
|
|
TYPES["T"] = 0
|
|
TYPES["s"] = 0
|
|
|
|
print "mapcheck v0.1";
|
|
}
|
|
{
|
|
if (FILENAME != FNAME) {
|
|
if (FNAME != "" && (ERR > 0 || VIOLATION > 0 || WARN > 0)) {
|
|
print "\n" ERR, "Errors, " VIOLATION, "Violations, and " WARN, "Warnings"
|
|
} else if (FNAME != "") {
|
|
print "No issues found."
|
|
}
|
|
if (FNAME != "") {
|
|
print ""
|
|
print "- - - - - - - \n"
|
|
}
|
|
ERR=0
|
|
WARN=0
|
|
FNAME=FILENAME
|
|
print "Reading", FILENAME "\n"
|
|
}
|
|
|
|
if ((NF == 1 && length($1) > MAXLEN) || (NF == 4 && length($1) - 1 > MAXLEN)) {
|
|
WARN++
|
|
print "WARNING: Line", NR ":", "Line length is", length($1) ". Max length is", MAXLEN
|
|
}
|
|
|
|
if (NF > 1 && NF < 4) {
|
|
ERR++
|
|
print "ERROR: Line", NR ":", "Link line with", NF, "columns. Expected 4."
|
|
}
|
|
|
|
if (NF == 4 && !(substr($1, 1, 1) in TYPES)) {
|
|
WARN++
|
|
print "WARNING: Line", NR ":", "Non-standard gophertype \"" substr($1, 1, 1) "\" may not be valid in all clients"
|
|
}
|
|
}
|
|
END {
|
|
if (ERR > 0 || VIOLATION > 0 || WARN > 0) {
|
|
print "\n" ERR, "Errors, " VIOLATION, "Violations, and " WARN, "Warnings"
|
|
} else {
|
|
print "No issues found."
|
|
}
|
|
}
|
|
|
|
|
|
|