|
|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T m
Length: 7002 (0x1b5a)
Types: TextFile
Names: »mkpath.awk«
└─⟦9ae75bfbd⟧ Bits:30007242 EUUGD3: Starter Kit
└─⟦2fafebccf⟧ »EurOpenD3/mail/smail3.1.19.tar.Z«
└─⟦bcd2bc73f⟧
└─⟦this⟧ »util/mkpath.awk«
# @(#)mkpath.awk 1.12 7/25/88 05:06:30
#
# mkpath.awk perform awk pre-processing of an input file
#
# Copyright (C) 1988 Ronald S. Karr and Landon Curt Noll
#
# See the file COPYING, distributed with smail, for restriction
# and warranty information.
#
# Some awk's don't process paragraphs in the order that they
# appear in the file, so we are forced to make this program
# non-deterministic.
### initial setup
#
BEGIN {
# clear line counts
lineno = 0;
# not in a block initially
inblock = 0;
# no errors so far
errno = 0;
# line modes
mode_file = 1;
mode_cmd = 2;
mode_lit = 3;
mode = 0;
# preset shell commands
gleem = "$GLEEM";
}
### per line debug and processing
#
{
# note another line, echo it if -v
++lineno;
if ( VERBOSE > 0 && NF > 0 ) {
print PROG": line", lineno":", $0 | "cat 1>&2";
}
}
### ignore blank lines
#
NF < 1 {
next;
}
### pre-processing of lines with args
#
NF > 1 {
# find string beyond the first field
args = substr($0, index($0,$1)+length($1)); # remove field 1
if ( $2 ~ /^`/ && $NF ~ /`$/ ) {
mode = mode_cmd; # cmd output
# remove backquotes
args = substr(args, index(args,$2)+1, length(args)-index(args,$2)-1);
} else {
if ( $2 ~ /^\'/ && $NF ~ /\'$/ ) {
mode = mode_lit; # text literal
} else {
mode = mode_file; # data file
}
args = substr(args, index(args,$2));
}
}
### map - store map commands into WORK
#
$1 == "map" {
if ( NF <= 1 ) {
print "echo", PROG, ": line", lineno":", $1, "no args 1>&2";
errno = 1;
if (ERR > 0) {
exit; # END will be processed
}
} else {
if ( inblock == 0 ) {
print "(";
inblock = 1;
}
if (mode == mode_cmd) {
print args, "|", gleem, "-p -c -f -";
}
if (mode == mode_lit) {
print "echo", args "|", gleem, "-p -c -f -";
}
if (mode == mode_file) {
print gleem, "-p -c -d $CWD -f /dev/null", args;
}
}
next;
}
### safemap - store safe map commands into WORK
#
$1 == "safemap" {
if ( NF <= 1 ) {
print "echo", PROG, ": line", lineno":", $1, "no args 1>&2";
errno = 11;
if (ERR > 0) {
exit; # END will be processed
}
} else {
if ( inblock == 0 ) {
print "(";
inblock = 1;
}
if (mode == mode_cmd) {
print args, "|", gleem, "-s -F -p -c -f -";
}
if (mode == mode_lit) {
print "echo", args "|", gleem, "-s -F -p -c -f -";
}
if (mode == mode_file) {
print gleem, "-s -F -p -c -d $CWD -f /dev/null", args;
}
}
next;
}
### delete - store delete commands into WORK
#
$1 == "delete" {
if ( NF <= 1 ) {
print "echo", PROG, ": line", lineno":", $1, "no args 1>&2";
errno = 2;
if (ERR > 0) {
exit; # END will be processed
}
} else {
if ( inblock == 0 ) {
print "(";
inblock = 1;
}
if (mode == mode_cmd) {
print args, "|", gleem, "-n delete -f -";
}
if (mode == mode_lit) {
print "echo", args "|", gleem, "-n delete -f -";
}
if (mode == mode_file) {
print gleem, "-p -n delete -d $CWD -f /dev/null", args;
}
}
next;
}
### adjust - store adjust commands into WORK
#
$1 == "adjust" {
if ( NF <= 1 ) {
print "echo", PROG, ": line", lineno":", $1, "no args 1>&2";
errno = 3;
if (ERR > 0) {
exit; # END will be processed
}
} else {
if ( inblock == 0 ) {
print "(";
inblock = 1;
}
if (mode == mode_cmd) {
print args, "|", gleem, "-n adjust -f -";
}
if (mode == mode_lit) {
print "echo", args "|", gleem, "-n adjust -f -";
}
if (mode == mode_file) {
print gleem, "-p -n adjust -d $CWD -f /dev/null", args;
}
}
next;
}
### dead - store dead commands into WORK
#
$1 == "dead" {
if ( NF <= 1 ) {
print "echo", PROG, ": line", lineno":", $1, "no args 1>&2";
errno = 4;
if (ERR > 0) {
exit; # END will be processed
}
} else {
if ( inblock == 0 ) {
print "(";
inblock = 1;
}
if (mode == mode_cmd) {
print args, "|", gleem, "-n dead -f -";
}
if (mode == mode_lit) {
print "echo", args "|", gleem, "-n dead -f -";
}
if (mode == mode_file) {
print gleem, "-p -n dead -d $CWD -f /dev/null", args;
}
}
next;
}
### text - store commands to inject
#
$1 == "text" {
if ( NF <= 1 ) {
print "echo", PROG, ": line", lineno":", $1, "no args 1>&2";
errno = 5;
if (ERR > 0) {
exit; # END will be processed
}
} else {
if (mode == mode_cmd) {
print args;
}
if (mode == mode_lit) {
print "echo", args;
}
if (mode == mode_file) {
print "cat /dev/null", args;
}
}
next;
}
### file - store file changing commands into WORK
#
$1 == "file" {
if ( NF > 2 ) {
print "echo", PROG, ": line", lineno":", $0, "too many args 1>&2";
errno = 6;
if (ERR > 0) {
exit; # END will be processed
}
}
if ( NF <= 1 ) {
print "echo", PROG, ": line", lineno":", $1, "no args 1>&2";
errno = 7;
if (ERR > 0) {
exit; # END will be processed
}
}
if ( NF == 2 ) {
if ( inblock == 0 ) {
print "(";
inblock = 1;
}
if ( $2 ~ /^\// ) {
print "echo \"file {", $2, "}\"";
} else {
print "echo \"file { `pwd`/"$2, "}\"";
}
}
next;
}
### cd - store cd directory changing commands into WORK
#
$1 == "cd" {
if ( NF > 2 ) {
print "echo", PROG, ": line", lineno":", $0, "too many args 1>&2";
errno = 8;
if (ERR > 0) {
exit; # END will be processed
}
}
# cd by itself refers to the dir from where mkpath was started
if ( NF == 1 ) {
print "cd $PWD";
print "CWD=$PWD";
}
if ( NF == 2 ) {
# cd with a '-' refers to the dir that the input file is in
if ( $2 == "-" ) {
print "cd $CD";
print "CWD=$CD";
# otherwise cd to the arg
} else {
print "cd", $2;
print "CWD="$2;
}
}
next;
}
### sh - store a SHELL command into a file
#
$1 == "sh" {
if ( NF <= 1 ) {
print "echo", PROG, ": line", lineno":", $1, "no args 1>&2";
errno = 9;
if (ERR > 0) {
exit; # END will be processed
}
} else {
print args;
}
next;
}
### pathalias - end a block with pathalias(8) plus optional args
#
$1 == "pathalias" {
if ( inblock > 0 ) {
if ( NF > 1 ) {
print ") | eval $PATHALIAS", args;
} else {
print ") | eval $PATHALIAS";
}
}
inblock = 0;
next;
}
### pathsort - end a block with pathalias(8) plus post-processing and args
#
$1 == "pathsort" {
if ( inblock > 0 ) {
if ( NF > 1 ) {
print ") | eval $PATHSORT", args;
} else {
print ") | eval $PATHSORT";
}
}
inblock = 0;
next;
}
### ERROR - catch unknown lines, known lines resulted in 'next' skipping ERROR
#
{
errno = 10;
print PROG": line", lineno": unknown command:", $0 | "cat 1>&2";
# if the -e flag was igven to mkpath, insert a exit right now
if (ERR > 0) {
exit; # END will be processed
}
}
### END - the end of a config file has an implied pathsort if it needs one
#
END {
if ( inblock > 0 ) {
print ") | eval $PATHSORT";
}
print "exit", errno;
}