made the pack completely portable and wrote relevent bat files to go with it
This commit is contained in:
20
gitportable/usr/share/awk/assert.awk
Normal file
20
gitportable/usr/share/awk/assert.awk
Normal file
@@ -0,0 +1,20 @@
|
||||
# assert --- assert that a condition is true. Otherwise, exit.
|
||||
|
||||
#
|
||||
# Arnold Robbins, arnold@skeeve.com, Public Domain
|
||||
# May, 1993
|
||||
|
||||
function assert(condition, string)
|
||||
{
|
||||
if (! condition) {
|
||||
printf("%s:%d: assertion failed: %s\n",
|
||||
FILENAME, FNR, string) > "/dev/stderr"
|
||||
_assert_exit = 1
|
||||
exit 1
|
||||
}
|
||||
}
|
||||
|
||||
END {
|
||||
if (_assert_exit)
|
||||
exit 1
|
||||
}
|
||||
16
gitportable/usr/share/awk/bits2str.awk
Normal file
16
gitportable/usr/share/awk/bits2str.awk
Normal file
@@ -0,0 +1,16 @@
|
||||
# bits2str --- turn an integer into readable ones and zeros
|
||||
|
||||
function bits2str(bits, data, mask)
|
||||
{
|
||||
if (bits == 0)
|
||||
return "0"
|
||||
|
||||
mask = 1
|
||||
for (; bits != 0; bits = rshift(bits, 1))
|
||||
data = (and(bits, mask) ? "1" : "0") data
|
||||
|
||||
while ((length(data) % 8) != 0)
|
||||
data = "0" data
|
||||
|
||||
return data
|
||||
}
|
||||
14
gitportable/usr/share/awk/cliff_rand.awk
Normal file
14
gitportable/usr/share/awk/cliff_rand.awk
Normal file
@@ -0,0 +1,14 @@
|
||||
# cliff_rand.awk --- generate Cliff random numbers
|
||||
#
|
||||
# Arnold Robbins, arnold@skeeve.com, Public Domain
|
||||
# December 2000
|
||||
|
||||
BEGIN { _cliff_seed = 0.1 }
|
||||
|
||||
function cliff_rand()
|
||||
{
|
||||
_cliff_seed = (100 * log(_cliff_seed)) % 1
|
||||
if (_cliff_seed < 0)
|
||||
_cliff_seed = - _cliff_seed
|
||||
return _cliff_seed
|
||||
}
|
||||
12
gitportable/usr/share/awk/ctime.awk
Normal file
12
gitportable/usr/share/awk/ctime.awk
Normal file
@@ -0,0 +1,12 @@
|
||||
# ctime.awk
|
||||
#
|
||||
# awk version of C ctime(3) function
|
||||
|
||||
function ctime(ts, format)
|
||||
{
|
||||
format = "%a %b %e %H:%M:%S %Z %Y"
|
||||
|
||||
if (ts == 0)
|
||||
ts = systime() # use current time as default
|
||||
return strftime(format, ts)
|
||||
}
|
||||
15
gitportable/usr/share/awk/ftrans.awk
Normal file
15
gitportable/usr/share/awk/ftrans.awk
Normal file
@@ -0,0 +1,15 @@
|
||||
# ftrans.awk --- handle datafile transitions
|
||||
#
|
||||
# user supplies beginfile() and endfile() functions
|
||||
#
|
||||
# Arnold Robbins, arnold@skeeve.com, Public Domain
|
||||
# November 1992
|
||||
|
||||
FNR == 1 {
|
||||
if (_filename_ != "")
|
||||
endfile(_filename_)
|
||||
_filename_ = FILENAME
|
||||
beginfile(FILENAME)
|
||||
}
|
||||
|
||||
END { endfile(_filename_) }
|
||||
79
gitportable/usr/share/awk/getopt.awk
Normal file
79
gitportable/usr/share/awk/getopt.awk
Normal file
@@ -0,0 +1,79 @@
|
||||
# getopt.awk --- Do C library getopt(3) function in awk
|
||||
#
|
||||
# Arnold Robbins, arnold@skeeve.com, Public Domain
|
||||
#
|
||||
# Initial version: March, 1991
|
||||
# Revised: May, 1993
|
||||
|
||||
# External variables:
|
||||
# Optind -- index in ARGV of first nonoption argument
|
||||
# Optarg -- string value of argument to current option
|
||||
# Opterr -- if nonzero, print our own diagnostic
|
||||
# Optopt -- current option letter
|
||||
|
||||
# Returns:
|
||||
# -1 at end of options
|
||||
# "?" for unrecognized option
|
||||
# <c> a character representing the current option
|
||||
|
||||
# Private Data:
|
||||
# _opti -- index in multiflag option, e.g., -abc
|
||||
function getopt(argc, argv, options, thisopt, i)
|
||||
{
|
||||
if (length(options) == 0) # no options given
|
||||
return -1
|
||||
|
||||
if (argv[Optind] == "--") { # all done
|
||||
Optind++
|
||||
_opti = 0
|
||||
return -1
|
||||
} else if (argv[Optind] !~ /^-[^:[:space:]]/) {
|
||||
_opti = 0
|
||||
return -1
|
||||
}
|
||||
if (_opti == 0)
|
||||
_opti = 2
|
||||
thisopt = substr(argv[Optind], _opti, 1)
|
||||
Optopt = thisopt
|
||||
i = index(options, thisopt)
|
||||
if (i == 0) {
|
||||
if (Opterr)
|
||||
printf("%c -- invalid option\n", thisopt) > "/dev/stderr"
|
||||
if (_opti >= length(argv[Optind])) {
|
||||
Optind++
|
||||
_opti = 0
|
||||
} else
|
||||
_opti++
|
||||
return "?"
|
||||
}
|
||||
if (substr(options, i + 1, 1) == ":") {
|
||||
# get option argument
|
||||
if (length(substr(argv[Optind], _opti + 1)) > 0)
|
||||
Optarg = substr(argv[Optind], _opti + 1)
|
||||
else
|
||||
Optarg = argv[++Optind]
|
||||
_opti = 0
|
||||
} else
|
||||
Optarg = ""
|
||||
if (_opti == 0 || _opti >= length(argv[Optind])) {
|
||||
Optind++
|
||||
_opti = 0
|
||||
} else
|
||||
_opti++
|
||||
return thisopt
|
||||
}
|
||||
BEGIN {
|
||||
Opterr = 1 # default is to diagnose
|
||||
Optind = 1 # skip ARGV[0]
|
||||
|
||||
# test program
|
||||
if (_getopt_test) {
|
||||
while ((_go_c = getopt(ARGC, ARGV, "ab:cd")) != -1)
|
||||
printf("c = <%c>, Optarg = <%s>\n",
|
||||
_go_c, Optarg)
|
||||
printf("non-option arguments:\n")
|
||||
for (; Optind < ARGC; Optind++)
|
||||
printf("\tARGV[%d] = <%s>\n",
|
||||
Optind, ARGV[Optind])
|
||||
}
|
||||
}
|
||||
62
gitportable/usr/share/awk/gettime.awk
Normal file
62
gitportable/usr/share/awk/gettime.awk
Normal file
@@ -0,0 +1,62 @@
|
||||
# getlocaltime.awk --- get the time of day in a usable format
|
||||
#
|
||||
# Arnold Robbins, arnold@skeeve.com, Public Domain, May 1993
|
||||
#
|
||||
|
||||
# Returns a string in the format of output of date(1)
|
||||
# Populates the array argument time with individual values:
|
||||
# time["second"] -- seconds (0 - 59)
|
||||
# time["minute"] -- minutes (0 - 59)
|
||||
# time["hour"] -- hours (0 - 23)
|
||||
# time["althour"] -- hours (0 - 12)
|
||||
# time["monthday"] -- day of month (1 - 31)
|
||||
# time["month"] -- month of year (1 - 12)
|
||||
# time["monthname"] -- name of the month
|
||||
# time["shortmonth"] -- short name of the month
|
||||
# time["year"] -- year modulo 100 (0 - 99)
|
||||
# time["fullyear"] -- full year
|
||||
# time["weekday"] -- day of week (Sunday = 0)
|
||||
# time["altweekday"] -- day of week (Monday = 0)
|
||||
# time["dayname"] -- name of weekday
|
||||
# time["shortdayname"] -- short name of weekday
|
||||
# time["yearday"] -- day of year (0 - 365)
|
||||
# time["timezone"] -- abbreviation of timezone name
|
||||
# time["ampm"] -- AM or PM designation
|
||||
# time["weeknum"] -- week number, Sunday first day
|
||||
# time["altweeknum"] -- week number, Monday first day
|
||||
|
||||
function getlocaltime(time, ret, now, i)
|
||||
{
|
||||
# get time once, avoids unnecessary system calls
|
||||
now = systime()
|
||||
|
||||
# return date(1)-style output
|
||||
ret = strftime("%a %b %e %H:%M:%S %Z %Y", now)
|
||||
|
||||
# clear out target array
|
||||
delete time
|
||||
|
||||
# fill in values, force numeric values to be
|
||||
# numeric by adding 0
|
||||
time["second"] = strftime("%S", now) + 0
|
||||
time["minute"] = strftime("%M", now) + 0
|
||||
time["hour"] = strftime("%H", now) + 0
|
||||
time["althour"] = strftime("%I", now) + 0
|
||||
time["monthday"] = strftime("%d", now) + 0
|
||||
time["month"] = strftime("%m", now) + 0
|
||||
time["monthname"] = strftime("%B", now)
|
||||
time["shortmonth"] = strftime("%b", now)
|
||||
time["year"] = strftime("%y", now) + 0
|
||||
time["fullyear"] = strftime("%Y", now) + 0
|
||||
time["weekday"] = strftime("%w", now) + 0
|
||||
time["altweekday"] = strftime("%u", now) + 0
|
||||
time["dayname"] = strftime("%A", now)
|
||||
time["shortdayname"] = strftime("%a", now)
|
||||
time["yearday"] = strftime("%j", now) + 0
|
||||
time["timezone"] = strftime("%Z", now)
|
||||
time["ampm"] = strftime("%p", now)
|
||||
time["weeknum"] = strftime("%U", now) + 0
|
||||
time["altweeknum"] = strftime("%W", now) + 0
|
||||
|
||||
return ret
|
||||
}
|
||||
83
gitportable/usr/share/awk/group.awk
Normal file
83
gitportable/usr/share/awk/group.awk
Normal file
@@ -0,0 +1,83 @@
|
||||
# group.awk --- functions for dealing with the group file
|
||||
#
|
||||
# Arnold Robbins, arnold@skeeve.com, Public Domain
|
||||
# May 1993
|
||||
# Revised October 2000
|
||||
# Revised December 2010
|
||||
|
||||
BEGIN {
|
||||
# Change to suit your system
|
||||
_gr_awklib = "/usr/lib/awk/"
|
||||
}
|
||||
|
||||
function _gr_init( oldfs, oldrs, olddol0, grcat,
|
||||
using_fw, using_fpat, n, a, i)
|
||||
{
|
||||
if (_gr_inited)
|
||||
return
|
||||
|
||||
oldfs = FS
|
||||
oldrs = RS
|
||||
olddol0 = $0
|
||||
using_fw = (PROCINFO["FS"] == "FIELDWIDTHS")
|
||||
using_fpat = (PROCINFO["FS"] == "FPAT")
|
||||
FS = ":"
|
||||
RS = "\n"
|
||||
|
||||
grcat = _gr_awklib "grcat"
|
||||
while ((grcat | getline) > 0) {
|
||||
if ($1 in _gr_byname)
|
||||
_gr_byname[$1] = _gr_byname[$1] "," $4
|
||||
else
|
||||
_gr_byname[$1] = $0
|
||||
if ($3 in _gr_bygid)
|
||||
_gr_bygid[$3] = _gr_bygid[$3] "," $4
|
||||
else
|
||||
_gr_bygid[$3] = $0
|
||||
|
||||
n = split($4, a, "[ \t]*,[ \t]*")
|
||||
for (i = 1; i <= n; i++)
|
||||
if (a[i] in _gr_groupsbyuser)
|
||||
_gr_groupsbyuser[a[i]] = _gr_groupsbyuser[a[i]] " " $1
|
||||
else
|
||||
_gr_groupsbyuser[a[i]] = $1
|
||||
|
||||
_gr_bycount[++_gr_count] = $0
|
||||
}
|
||||
close(grcat)
|
||||
_gr_count = 0
|
||||
_gr_inited++
|
||||
FS = oldfs
|
||||
if (using_fw)
|
||||
FIELDWIDTHS = FIELDWIDTHS
|
||||
else if (using_fpat)
|
||||
FPAT = FPAT
|
||||
RS = oldrs
|
||||
$0 = olddol0
|
||||
}
|
||||
function getgrnam(group)
|
||||
{
|
||||
_gr_init()
|
||||
return _gr_byname[group]
|
||||
}
|
||||
function getgrgid(gid)
|
||||
{
|
||||
_gr_init()
|
||||
return _gr_bygid[gid]
|
||||
}
|
||||
function getgruser(user)
|
||||
{
|
||||
_gr_init()
|
||||
return _gr_groupsbyuser[user]
|
||||
}
|
||||
function getgrent()
|
||||
{
|
||||
_gr_init()
|
||||
if (++_gr_count in _gr_bycount)
|
||||
return _gr_bycount[_gr_count]
|
||||
return ""
|
||||
}
|
||||
function endgrent()
|
||||
{
|
||||
_gr_count = 0
|
||||
}
|
||||
9
gitportable/usr/share/awk/have_mpfr.awk
Normal file
9
gitportable/usr/share/awk/have_mpfr.awk
Normal file
@@ -0,0 +1,9 @@
|
||||
# adequate_math_precision --- return true if we have enough bits
|
||||
#
|
||||
# Andrew Schorr, aschorr@telemetry-investments.com, Public Domain
|
||||
# May 2017
|
||||
|
||||
function adequate_math_precision(n)
|
||||
{
|
||||
return (1 != (1+(1/(2^(n-1)))))
|
||||
}
|
||||
61
gitportable/usr/share/awk/inplace.awk
Normal file
61
gitportable/usr/share/awk/inplace.awk
Normal file
@@ -0,0 +1,61 @@
|
||||
# inplace --- load and invoke the inplace extension.
|
||||
#
|
||||
# Copyright (C) 2013, 2017 the Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is part of GAWK, the GNU implementation of the
|
||||
# AWK Programming Language.
|
||||
#
|
||||
# GAWK is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# GAWK is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
#
|
||||
# Andrew J. Schorr, aschorr@telemetry-investments.com
|
||||
# January 2013
|
||||
#
|
||||
# Revised for namespaces
|
||||
# Arnold Robbins, arnold@skeeve.com
|
||||
# July 2017
|
||||
|
||||
@load "inplace"
|
||||
|
||||
# Please set inplace::suffix to make a backup copy. For example, you may
|
||||
# want to set inplace::suffix to .bak on the command line or in a BEGIN rule.
|
||||
|
||||
# By default, each filename on the command line will be edited inplace.
|
||||
# But you can selectively disable this by adding an inplace=0 argument
|
||||
# prior to files that you do not want to process this way. You can then
|
||||
# reenable it later on the commandline by putting inplace=1 before files
|
||||
# that you wish to be subject to inplace editing.
|
||||
|
||||
# N.B. We call inplace::end() in the BEGINFILE and END rules so that any
|
||||
# actions in an ENDFILE rule will be redirected as expected.
|
||||
|
||||
@namespace "inplace"
|
||||
|
||||
BEGIN {
|
||||
enable = 1 # enabled by default
|
||||
}
|
||||
|
||||
BEGINFILE {
|
||||
if (filename != "")
|
||||
end(filename, suffix)
|
||||
if (enable)
|
||||
begin(filename = FILENAME, suffix)
|
||||
else
|
||||
filename = ""
|
||||
}
|
||||
|
||||
END {
|
||||
if (filename != "")
|
||||
end(filename, suffix)
|
||||
}
|
||||
23
gitportable/usr/share/awk/intdiv0.awk
Normal file
23
gitportable/usr/share/awk/intdiv0.awk
Normal file
@@ -0,0 +1,23 @@
|
||||
# intdiv0 --- do integer division
|
||||
|
||||
#
|
||||
# Arnold Robbins, arnold@skeeve.com, Public Domain
|
||||
# July, 2014
|
||||
#
|
||||
# Name changed from div() to intdiv()
|
||||
# April, 2015
|
||||
#
|
||||
# Changed to intdiv0()
|
||||
# April, 2016
|
||||
|
||||
function intdiv0(numerator, denominator, result)
|
||||
{
|
||||
split("", result)
|
||||
|
||||
numerator = int(numerator)
|
||||
denominator = int(denominator)
|
||||
result["quotient"] = int(numerator / denominator)
|
||||
result["remainder"] = int(numerator % denominator)
|
||||
|
||||
return 0.0
|
||||
}
|
||||
16
gitportable/usr/share/awk/join.awk
Normal file
16
gitportable/usr/share/awk/join.awk
Normal file
@@ -0,0 +1,16 @@
|
||||
# join.awk --- join an array into a string
|
||||
#
|
||||
# Arnold Robbins, arnold@skeeve.com, Public Domain
|
||||
# May 1993
|
||||
|
||||
function join(array, start, end, sep, result, i)
|
||||
{
|
||||
if (sep == "")
|
||||
sep = " "
|
||||
else if (sep == SUBSEP) # magic value
|
||||
sep = ""
|
||||
result = array[start]
|
||||
for (i = start + 1; i <= end; i++)
|
||||
result = result sep array[i]
|
||||
return result
|
||||
}
|
||||
14
gitportable/usr/share/awk/libintl.awk
Normal file
14
gitportable/usr/share/awk/libintl.awk
Normal file
@@ -0,0 +1,14 @@
|
||||
function bindtextdomain(dir, domain)
|
||||
{
|
||||
return dir
|
||||
}
|
||||
|
||||
function dcgettext(string, domain, category)
|
||||
{
|
||||
return string
|
||||
}
|
||||
|
||||
function dcngettext(string1, string2, number, domain, category)
|
||||
{
|
||||
return (number == 1 ? string1 : string2)
|
||||
}
|
||||
17
gitportable/usr/share/awk/noassign.awk
Normal file
17
gitportable/usr/share/awk/noassign.awk
Normal file
@@ -0,0 +1,17 @@
|
||||
# noassign.awk --- library file to avoid the need for a
|
||||
# special option that disables command-line assignments
|
||||
#
|
||||
# Arnold Robbins, arnold@skeeve.com, Public Domain
|
||||
# October 1999
|
||||
|
||||
function disable_assigns(argc, argv, i)
|
||||
{
|
||||
for (i = 1; i < argc; i++)
|
||||
if (argv[i] ~ /^[a-zA-Z_][a-zA-Z0-9_]*=.*/)
|
||||
argv[i] = ("./" argv[i])
|
||||
}
|
||||
|
||||
BEGIN {
|
||||
if (No_command_assign)
|
||||
disable_assigns(ARGC, ARGV)
|
||||
}
|
||||
72
gitportable/usr/share/awk/ns_passwd.awk
Normal file
72
gitportable/usr/share/awk/ns_passwd.awk
Normal file
@@ -0,0 +1,72 @@
|
||||
# ns_passwd.awk --- access password file information
|
||||
#
|
||||
# Arnold Robbins, arnold@skeeve.com, Public Domain
|
||||
# May 1993
|
||||
# Revised October 2000
|
||||
# Revised December 2010
|
||||
#
|
||||
# Reworked for namespaces June 2017, with help from
|
||||
# Andrew J.: Schorr, aschorr@telemetry-investments.com
|
||||
|
||||
@namespace "passwd"
|
||||
|
||||
BEGIN {
|
||||
# tailor this to suit your system
|
||||
Awklib = "/usr/local/libexec/awk/"
|
||||
}
|
||||
|
||||
function Init( oldfs, oldrs, olddol0, pwcat, using_fw, using_fpat)
|
||||
{
|
||||
if (Inited)
|
||||
return
|
||||
|
||||
oldfs = FS
|
||||
oldrs = RS
|
||||
olddol0 = $0
|
||||
using_fw = (PROCINFO["FS"] == "FIELDWIDTHS")
|
||||
using_fpat = (PROCINFO["FS"] == "FPAT")
|
||||
FS = ":"
|
||||
RS = "\n"
|
||||
|
||||
pwcat = Awklib "pwcat"
|
||||
while ((pwcat | getline) > 0) {
|
||||
Byname[$1] = $0
|
||||
Byuid[$3] = $0
|
||||
Bycount[++Total] = $0
|
||||
}
|
||||
close(pwcat)
|
||||
Count = 0
|
||||
Inited = 1
|
||||
FS = oldfs
|
||||
if (using_fw)
|
||||
FIELDWIDTHS = FIELDWIDTHS
|
||||
else if (using_fpat)
|
||||
FPAT = FPAT
|
||||
RS = oldrs
|
||||
$0 = olddol0
|
||||
}
|
||||
|
||||
function awk::getpwnam(name)
|
||||
{
|
||||
Init()
|
||||
return Byname[name]
|
||||
}
|
||||
|
||||
function awk::getpwuid(uid)
|
||||
{
|
||||
Init()
|
||||
return Byuid[uid]
|
||||
}
|
||||
|
||||
function awk::getpwent()
|
||||
{
|
||||
Init()
|
||||
if (Count < Total)
|
||||
return Bycount[++Count]
|
||||
return ""
|
||||
}
|
||||
|
||||
function awk::endpwent()
|
||||
{
|
||||
Count = 0
|
||||
}
|
||||
44
gitportable/usr/share/awk/ord.awk
Normal file
44
gitportable/usr/share/awk/ord.awk
Normal file
@@ -0,0 +1,44 @@
|
||||
# ord.awk --- do ord and chr
|
||||
|
||||
# Global identifiers:
|
||||
# _ord_: numerical values indexed by characters
|
||||
# _ord_init: function to initialize _ord_
|
||||
#
|
||||
# Arnold Robbins, arnold@skeeve.com, Public Domain
|
||||
# 16 January, 1992
|
||||
# 20 July, 1992, revised
|
||||
|
||||
BEGIN { _ord_init() }
|
||||
|
||||
function _ord_init( low, high, i, t)
|
||||
{
|
||||
low = sprintf("%c", 7) # BEL is ascii 7
|
||||
if (low == "\a") { # regular ascii
|
||||
low = 0
|
||||
high = 127
|
||||
} else if (sprintf("%c", 128 + 7) == "\a") {
|
||||
# ascii, mark parity
|
||||
low = 128
|
||||
high = 255
|
||||
} else { # ebcdic(!)
|
||||
low = 0
|
||||
high = 255
|
||||
}
|
||||
|
||||
for (i = low; i <= high; i++) {
|
||||
t = sprintf("%c", i)
|
||||
_ord_[t] = i
|
||||
}
|
||||
}
|
||||
function ord(str, c)
|
||||
{
|
||||
# only first character is of interest
|
||||
c = substr(str, 1, 1)
|
||||
return _ord_[c]
|
||||
}
|
||||
|
||||
function chr(c)
|
||||
{
|
||||
# force c to be numeric by adding 0
|
||||
return sprintf("%c", c + 0)
|
||||
}
|
||||
63
gitportable/usr/share/awk/passwd.awk
Normal file
63
gitportable/usr/share/awk/passwd.awk
Normal file
@@ -0,0 +1,63 @@
|
||||
# passwd.awk --- access password file information
|
||||
#
|
||||
# Arnold Robbins, arnold@skeeve.com, Public Domain
|
||||
# May 1993
|
||||
# Revised October 2000
|
||||
# Revised December 2010
|
||||
|
||||
BEGIN {
|
||||
# tailor this to suit your system
|
||||
_pw_awklib = "/usr/lib/awk/"
|
||||
}
|
||||
|
||||
function _pw_init( oldfs, oldrs, olddol0, pwcat, using_fw, using_fpat)
|
||||
{
|
||||
if (_pw_inited)
|
||||
return
|
||||
|
||||
oldfs = FS
|
||||
oldrs = RS
|
||||
olddol0 = $0
|
||||
using_fw = (PROCINFO["FS"] == "FIELDWIDTHS")
|
||||
using_fpat = (PROCINFO["FS"] == "FPAT")
|
||||
FS = ":"
|
||||
RS = "\n"
|
||||
|
||||
pwcat = _pw_awklib "pwcat"
|
||||
while ((pwcat | getline) > 0) {
|
||||
_pw_byname[$1] = $0
|
||||
_pw_byuid[$3] = $0
|
||||
_pw_bycount[++_pw_total] = $0
|
||||
}
|
||||
close(pwcat)
|
||||
_pw_count = 0
|
||||
_pw_inited = 1
|
||||
FS = oldfs
|
||||
if (using_fw)
|
||||
FIELDWIDTHS = FIELDWIDTHS
|
||||
else if (using_fpat)
|
||||
FPAT = FPAT
|
||||
RS = oldrs
|
||||
$0 = olddol0
|
||||
}
|
||||
function getpwnam(name)
|
||||
{
|
||||
_pw_init()
|
||||
return _pw_byname[name]
|
||||
}
|
||||
function getpwuid(uid)
|
||||
{
|
||||
_pw_init()
|
||||
return _pw_byuid[uid]
|
||||
}
|
||||
function getpwent()
|
||||
{
|
||||
_pw_init()
|
||||
if (_pw_count < _pw_total)
|
||||
return _pw_bycount[++_pw_count]
|
||||
return ""
|
||||
}
|
||||
function endpwent()
|
||||
{
|
||||
_pw_count = 0
|
||||
}
|
||||
12
gitportable/usr/share/awk/processarray.awk
Normal file
12
gitportable/usr/share/awk/processarray.awk
Normal file
@@ -0,0 +1,12 @@
|
||||
function process_array(arr, name, process, do_arrays, i, new_name)
|
||||
{
|
||||
for (i in arr) {
|
||||
new_name = (name "[" i "]")
|
||||
if (isarray(arr[i])) {
|
||||
if (do_arrays)
|
||||
@process(new_name, arr[i])
|
||||
process_array(arr[i], new_name, process, do_arrays)
|
||||
} else
|
||||
@process(new_name, arr[i])
|
||||
}
|
||||
}
|
||||
35
gitportable/usr/share/awk/quicksort.awk
Normal file
35
gitportable/usr/share/awk/quicksort.awk
Normal file
@@ -0,0 +1,35 @@
|
||||
# quicksort.awk --- Quicksort algorithm, with user-supplied
|
||||
# comparison function
|
||||
#
|
||||
# Arnold Robbins, arnold@skeeve.com, Public Domain
|
||||
# January 2009
|
||||
|
||||
|
||||
# quicksort --- C.A.R. Hoare's quicksort algorithm. See Wikipedia
|
||||
# or almost any algorithms or computer science text.
|
||||
#
|
||||
# Adapted from K&R-II, page 110
|
||||
|
||||
function quicksort(data, left, right, less_than, i, last)
|
||||
{
|
||||
if (left >= right) # do nothing if array contains fewer
|
||||
return # than two elements
|
||||
|
||||
quicksort_swap(data, left, int((left + right) / 2))
|
||||
last = left
|
||||
for (i = left + 1; i <= right; i++)
|
||||
if (@less_than(data[i], data[left]))
|
||||
quicksort_swap(data, ++last, i)
|
||||
quicksort_swap(data, left, last)
|
||||
quicksort(data, left, last - 1, less_than)
|
||||
quicksort(data, last + 1, right, less_than)
|
||||
}
|
||||
|
||||
# quicksort_swap --- helper function for quicksort, should really be inline
|
||||
|
||||
function quicksort_swap(data, i, j, temp)
|
||||
{
|
||||
temp = data[i]
|
||||
data[i] = data[j]
|
||||
data[j] = temp
|
||||
}
|
||||
17
gitportable/usr/share/awk/readable.awk
Normal file
17
gitportable/usr/share/awk/readable.awk
Normal file
@@ -0,0 +1,17 @@
|
||||
# readable.awk --- library file to skip over unreadable files
|
||||
#
|
||||
# Arnold Robbins, arnold@skeeve.com, Public Domain
|
||||
# October 2000
|
||||
# December 2010
|
||||
|
||||
BEGIN {
|
||||
for (i = 1; i < ARGC; i++) {
|
||||
if (ARGV[i] ~ /^[a-zA-Z_][a-zA-Z0-9_]*=.*/ \
|
||||
|| ARGV[i] == "-" || ARGV[i] == "/dev/stdin")
|
||||
continue # assignment or standard input
|
||||
else if ((getline junk < ARGV[i]) < 0) # unreadable
|
||||
delete ARGV[i]
|
||||
else
|
||||
close(ARGV[i])
|
||||
}
|
||||
}
|
||||
15
gitportable/usr/share/awk/readfile.awk
Normal file
15
gitportable/usr/share/awk/readfile.awk
Normal file
@@ -0,0 +1,15 @@
|
||||
# readfile.awk --- read an entire file at once
|
||||
#
|
||||
# Original idea by Denis Shirokov, cosmogen@gmail.com, April 2013
|
||||
#
|
||||
|
||||
function readfile(file, tmp, save_rs)
|
||||
{
|
||||
save_rs = RS
|
||||
RS = "^$"
|
||||
getline tmp < file
|
||||
close(file)
|
||||
RS = save_rs
|
||||
|
||||
return tmp
|
||||
}
|
||||
20
gitportable/usr/share/awk/rewind.awk
Normal file
20
gitportable/usr/share/awk/rewind.awk
Normal file
@@ -0,0 +1,20 @@
|
||||
# rewind.awk --- rewind the current file and start over
|
||||
#
|
||||
# Arnold Robbins, arnold@skeeve.com, Public Domain
|
||||
# September 2000
|
||||
|
||||
function rewind( i)
|
||||
{
|
||||
# shift remaining arguments up
|
||||
for (i = ARGC; i > ARGIND; i--)
|
||||
ARGV[i] = ARGV[i-1]
|
||||
|
||||
# make sure gawk knows to keep going
|
||||
ARGC++
|
||||
|
||||
# make current file next to get done
|
||||
ARGV[ARGIND+1] = FILENAME
|
||||
|
||||
# do it
|
||||
nextfile
|
||||
}
|
||||
29
gitportable/usr/share/awk/round.awk
Normal file
29
gitportable/usr/share/awk/round.awk
Normal file
@@ -0,0 +1,29 @@
|
||||
# round.awk --- do normal rounding
|
||||
#
|
||||
# Arnold Robbins, arnold@skeeve.com, Public Domain
|
||||
# August, 1996
|
||||
|
||||
function round(x, ival, aval, fraction)
|
||||
{
|
||||
ival = int(x) # integer part, int() truncates
|
||||
|
||||
# see if fractional part
|
||||
if (ival == x) # no fraction
|
||||
return ival # ensure no decimals
|
||||
|
||||
if (x < 0) {
|
||||
aval = -x # absolute value
|
||||
ival = int(aval)
|
||||
fraction = aval - ival
|
||||
if (fraction >= .5)
|
||||
return int(x) - 1 # -2.5 --> -3
|
||||
else
|
||||
return int(x) # -2.3 --> -2
|
||||
} else {
|
||||
fraction = x - ival
|
||||
if (fraction >= .5)
|
||||
return ival + 1
|
||||
else
|
||||
return ival
|
||||
}
|
||||
}
|
||||
22
gitportable/usr/share/awk/shellquote.awk
Normal file
22
gitportable/usr/share/awk/shellquote.awk
Normal file
@@ -0,0 +1,22 @@
|
||||
# shell_quote --- quote an argument for passing to the shell
|
||||
#
|
||||
# Michael Brennan
|
||||
# brennan@madronabluff.com
|
||||
# September 2014
|
||||
|
||||
function shell_quote(s, # parameter
|
||||
SINGLE, QSINGLE, i, X, n, ret) # locals
|
||||
{
|
||||
if (s == "")
|
||||
return "\"\""
|
||||
|
||||
SINGLE = "\x27" # single quote
|
||||
QSINGLE = "\"\x27\""
|
||||
n = split(s, X, SINGLE)
|
||||
|
||||
ret = SINGLE X[1] SINGLE
|
||||
for (i = 2; i <= n; i++)
|
||||
ret = ret QSINGLE SINGLE X[i] SINGLE
|
||||
|
||||
return ret
|
||||
}
|
||||
58
gitportable/usr/share/awk/strtonum.awk
Normal file
58
gitportable/usr/share/awk/strtonum.awk
Normal file
@@ -0,0 +1,58 @@
|
||||
# mystrtonum --- convert string to number
|
||||
|
||||
#
|
||||
# Arnold Robbins, arnold@skeeve.com, Public Domain
|
||||
# February, 2004
|
||||
# Revised June, 2014
|
||||
|
||||
function mystrtonum(str, ret, n, i, k, c)
|
||||
{
|
||||
if (str ~ /^0[0-7]*$/) {
|
||||
# octal
|
||||
n = length(str)
|
||||
ret = 0
|
||||
for (i = 1; i <= n; i++) {
|
||||
c = substr(str, i, 1)
|
||||
# index() returns 0 if c not in string,
|
||||
# includes c == "0"
|
||||
k = index("1234567", c)
|
||||
|
||||
ret = ret * 8 + k
|
||||
}
|
||||
} else if (str ~ /^0[xX][[:xdigit:]]+$/) {
|
||||
# hexadecimal
|
||||
str = substr(str, 3) # lop off leading 0x
|
||||
n = length(str)
|
||||
ret = 0
|
||||
for (i = 1; i <= n; i++) {
|
||||
c = substr(str, i, 1)
|
||||
c = tolower(c)
|
||||
# index() returns 0 if c not in string,
|
||||
# includes c == "0"
|
||||
k = index("123456789abcdef", c)
|
||||
|
||||
ret = ret * 16 + k
|
||||
}
|
||||
} else if (str ~ \
|
||||
/^[-+]?([0-9]+([.][0-9]*([Ee][0-9]+)?)?|([.][0-9]+([Ee][-+]?[0-9]+)?))$/) {
|
||||
# decimal number, possibly floating point
|
||||
ret = str + 0
|
||||
} else
|
||||
ret = "NOT-A-NUMBER"
|
||||
|
||||
return ret
|
||||
}
|
||||
|
||||
# BEGIN { # gawk test harness
|
||||
# a[1] = "25"
|
||||
# a[2] = ".31"
|
||||
# a[3] = "0123"
|
||||
# a[4] = "0xdeadBEEF"
|
||||
# a[5] = "123.45"
|
||||
# a[6] = "1.e3"
|
||||
# a[7] = "1.32"
|
||||
# a[8] = "1.32E2"
|
||||
#
|
||||
# for (i = 1; i in a; i++)
|
||||
# print a[i], strtonum(a[i]), mystrtonum(a[i])
|
||||
# }
|
||||
9
gitportable/usr/share/awk/walkarray.awk
Normal file
9
gitportable/usr/share/awk/walkarray.awk
Normal file
@@ -0,0 +1,9 @@
|
||||
function walk_array(arr, name, i)
|
||||
{
|
||||
for (i in arr) {
|
||||
if (isarray(arr[i]))
|
||||
walk_array(arr[i], (name "[" i "]"))
|
||||
else
|
||||
printf("%s[%s] = %s\n", name, i, arr[i])
|
||||
}
|
||||
}
|
||||
19
gitportable/usr/share/awk/zerofile.awk
Normal file
19
gitportable/usr/share/awk/zerofile.awk
Normal file
@@ -0,0 +1,19 @@
|
||||
# zerofile.awk --- library file to process empty input files
|
||||
#
|
||||
# Arnold Robbins, arnold@skeeve.com, Public Domain
|
||||
# June 2003
|
||||
|
||||
BEGIN { Argind = 0 }
|
||||
|
||||
ARGIND > Argind + 1 {
|
||||
for (Argind++; Argind < ARGIND; Argind++)
|
||||
zerofile(ARGV[Argind], Argind)
|
||||
}
|
||||
|
||||
ARGIND != Argind { Argind = ARGIND }
|
||||
|
||||
END {
|
||||
if (ARGIND > Argind)
|
||||
for (Argind++; Argind <= ARGIND; Argind++)
|
||||
zerofile(ARGV[Argind], Argind)
|
||||
}
|
||||
Reference in New Issue
Block a user