|
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; }