• one-liner for auto-detection of awk variant

    From Kpop 2GM@21:1/5 to All on Tue Feb 22 11:42:44 2022
    hey Janis,

    i managed to come up with this intentionally crafted line that managed to spit out 7 different responses, including 4 different responses from gawk, which helps to auto-detect which awk-variant or invocation flags were used, and to tailor your program's/
    function's behavior, if necessary (e.g. gawk -P posix mode cannot directly calculate length(array), requiring workarounds to yield a count). It's not perfect, as multiple gawk invocation flags still yield "+nan", but it shouldn't be too hard to do a
    secondary test from that point on.

    % ${awk_variant} 'BEGIN { print \
    \
    -log((log(-0)*log(-0))^-log(0^length("\0")))/(-"0xABCD")^-(1-("<"<"\x3C")) }'

    gawk511 -e : +nan
    gawk -c : +nan
    gawk -t : +nan
    --------------------------------------
    gawk -M : -nan
    --------------------------------------
    gawk -n : +inf
    gawk -P : -inf
    --------------------------------------
    mawk1.3.4 : inf
    mawk1.9.9.6 : nan
    --------------------------------------
    nawk20200816 : 0

    Hope someone finds utility in this.
    The 4Chan Teller

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Kpop 2GM@21:1/5 to All on Wed Feb 23 02:22:33 2022
    finally succeeded in creating a grand unified detector function.

    Now it could detect 14 unique combinations of awk-variants and invocation flags, including 11 different ways of calling gawk, and return a 2-digit value that maps to the data dictionary listed beneath it.

    The detection methodology is entirely based on inherent behavior of each awk combo, instead of relying on external variables or system settings that could be tricked via manual override. It also has built-in cleansing for the local variables in case
    values were passed during the function call.

    Unicode detection is based on UTF-8 encoding of U+06D2, a code point that has been part of the Unicode spec since version 1.1 in 1993. On top of obvious ones like ASCII, C, and POSIX, it works when locale is UTF-8 encoding of any language.

    UCS2, UTF-7, UTF-16/32 either endian, EBCDIC ARMSCII, ISCII, ISO8859-anything, CP-anything, or the legacy multi-byte ones like Big5, GB-anything, EUC-JP/KR/CN, Shift-JIS etc, most likely would lead to erroneous detection, since it was only designed with
    UTF-8 in mind.

    Feel free to use it as is or modify it in any shape or form to customize to your needs. While UTF-8 capability detection is in place, and designed to be compliant with published specs, it does not include any copyrighted material or intellectual property
    pertaining to Unicode Consortium.

    The 4Chan Teller

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    command is ::: $awk0 'BEGIN {
    print awk_var_tester()

    } function awk_var_tester(_, __, ___, ____, _____, ______) {
    return \
    (substr(______ = "\\%" (___ = _ < "") index((__ *= __ ^= __ = ___ += ++___) ___, ___) sprintf("%c_%%c", __ * (___ ^ ___++ - +-___--) - _ ^ (! __)), __ * __, ! __) substr((______ = ((((_ = (substr(___, __, (sub("..$", (______) "&", ______)) - (sub("_", "",
    ______)))) substr(______ = sprintf(______, (____ = (_____ = ____ = substr(__, ___) ^ ++___ * __ ^ --___) + (___ + --__) * (__++ - ___) - ___) % (__ ^ ___), (_____ += (__ - ___ ^ ___) ^ ___ + ___) % (__ ^ ___), ____, _____), index(______, "_") + (___ < __
    )) substr(sub("_.+$", "", ______), __, ! __)) ~ substr(______, __ ~ __, ___ ^ ___)) + (_ ~ ("[^" (______) "]")) * ___ + (_ ~ ("[^" (_) "]")) * (___ ^ ___) + (sprintf("%i", __ ^ __ ^ ___ ^ (-! ! __)) % ___) * (__ + __ + __ + __) + (sprintf("%c", -___) ==
    sprintf("%c", ! ___)) * (__ + __) + ("<" < "\x3C") * (__ * __ * ___) + (length(_) % ___) * __ + ((__ ^ __ - ! ! __) % ___) * (__ / ___) + ("0x" (___) (! _ ! _)) + 0x101) % (int((_ = (! ! _ ! _) ^ ++___) / --___) -+-++__)) % (_ / ___)) + --__ * (______ < -
    ___ + __) + (______ + ___ == __ ? -___ : ______ ~ ((__ - ___) "$") ? __ * (___ + ___) - ___ : ! ___) + _, ++___)) } '

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    gawk -e .. |- 06 gawk -ne … |- 01 gawk -nMbe |- 93
    gawk -be . |- 90 gawk -nbe .|- 85 mawk1 — ... |- 29

    gawk -ce . |- 49 gawk -Me .|- 76 mawk2 — ….|- 21
    gawk -cbe |- 33 gawk -Mbe |- 98 nawk — ……. |- 12
    gawk -Pe . |- 39 gawk -nMe |- 09 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Janis Papanagnou@21:1/5 to All on Wed Feb 23 14:07:15 2022
    QW1hemluZyEgOi0pDQoNCk9uIDIzLjAyLjIwMjIgMTE6MjIsIEtwb3AgMkdNIHdyb3RlOg0K PiBmaW5hbGx5IHN1Y2NlZWRlZCBpbiBjcmVhdGluZyBhIGdyYW5kIHVuaWZpZWQgZGV0ZWN0 b3IgZnVuY3Rpb24uDQo+IA0KPiBOb3cgaXQgY291bGQgZGV0ZWN0IDE0IHVuaXF1ZSBjb21i aW5hdGlvbnMgb2YgYXdrLXZhcmlhbnRzIGFuZA0KPiBpbnZvY2F0aW9uIGZsYWdzLCBpbmNs dWRpbmcgMTEgZGlmZmVyZW50IHdheXMgb2YgY2FsbGluZyBnYXdrLCBhbmQNCj4gcmV0dXJu IGEgMi1kaWdpdCB2YWx1ZSB0aGF0IG1hcHMgdG8gdGhlIGRhdGEgZGljdGlvbmFyeSBsaXN0 ZWQNCj4gYmVuZWF0aCBpdC4NCj4gDQo+IFRoZSBkZXRlY3Rpb24gbWV0aG9kb2xvZ3kgaXMg ZW50aXJlbHkgYmFzZWQgb24gaW5oZXJlbnQgYmVoYXZpb3Igb2YNCj4gZWFjaCBhd2sgY29t Ym8sIGluc3RlYWQgb2YgcmVseWluZyBvbiBleHRlcm5hbCB2YXJpYWJsZXMgb3Igc3lzdGVt DQo+IHNldHRpbmdzIHRoYXQgY291bGQgYmUgdHJpY2tlZCB2aWEgbWFudWFsIG92ZXJyaWRl LiBJdCBhbHNvIGhhcw0KPiBidWlsdC1pbiBjbGVhbnNpbmcgZm9yIHRoZSBsb2NhbCB2YXJp YWJsZXMgaW4gY2FzZSB2YWx1ZXMgd2VyZSBwYXNzZWQNCj4gZHVyaW5nIHRoZSBmdW5jdGlv biBjYWxsLg0KPiANCj4gWy4uLl0NCj4gDQo+IFRoZSA0Q2hhbiBUZWxsZXINCj4gfn5+fn5+ fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fg0KPiAN Cj4gY29tbWFuZCBpcyA6OjogJGF3azAgJ0JFR0lOIHsgDQo+ICAgICAgICAgICBwcmludCBh d2tfdmFyX3Rlc3RlcigpIA0KPiANCj4gfSBmdW5jdGlvbiBhd2tfdmFyX3Rlc3RlcihfLCBf XywgX19fLCBfX19fLCBfX19fXywgX19fX19fKSB7DQo+IHJldHVybiBcDQo+IChzdWJzdHIo X19fX19fID0gIlxcJSIgKF9fXyA9IF8gPCAiIikgaW5kZXgoKF9fICo9IF9fIF49IF9fID0g X19fICs9ICsrX19fKSBfX18sIF9fXykgc3ByaW50ZigiJWNfJSVjIiwgX18gKiAoX19fIF4g X19fKysgLSArLV9fXy0tKSAtIF8gXiAoISBfXykpLCBfXyAqIF9fLCAhIF9fKSBzdWJzdHIo KF9fX19fXyA9ICgoKChfID0gKHN1YnN0cihfX18sIF9fLCAoc3ViKCIuLiQiLCAoX19fX19f KSAiJiIsIF9fX19fXykpIC0gKHN1YigiXyIsICIiLCBfX19fX18pKSkpIHN1YnN0cihfX19f X18gPSBzcHJpbnRmKF9fX19fXywgKF9fX18gPSAoX19fX18gPSBfX19fID0gc3Vic3RyKF9f LCBfX18pIF4gKytfX18gKiBfXyBeIC0tX19fKSArIChfX18gKyAtLV9fKSAqIChfXysrIC0g X19fKSAtIF9fXykgJSAoX18gXiBfX18pLCAoX19fX18gKz0gKF9fIC0gX19fIF4gX19fKSBe IF9fXyArIF9fXykgJSAoX18gXiBfX18pLCBfX19fLCBfX19fXyksIGluZGV4KF9fX19fXywg Il8iKSArIChfX18gPCBfXykpIHN1YnN0cihzdWIoIl8uKyQiLCAiIiwgX19fX19fKSwgX18s ICEgX18pKSB+IHN1YnN0cihfX19fX18sIF9fIH4gX18sIF9fXyBeIF9fXykpICsgKF8gfiAo IlteIiAoX19fX19fKSAiXSIpKSAqIF9fXyArIChfIH4gKCJbXiIgKF8pICJdIikpICogKF9f XyBeIF9fXykgKyAoc3ByaW50ZigiJWkiLCBfXyBeIF9fIF4gX19fIF4gKC0hICEgX18pKSAl IF9fXykgKiAoX18gKyBfXyArIF9fICsgX18pICsgKHNwcmludGYoIiVjIiwgLV9fXykgPT0g c3ByaW50ZigiJWMiLCAhIF9fXykpICogKF9fICsgX18pICsgKCI8IiA8ICJceDNDIikgKiAo X18gKiBfXyAqIF9fXykgKyAobGVuZ3RoKF8pICUgX19fKSAqIF9fICsgKChfXyBeIF9fIC0g ISAhIF9fKSAlIF9fXykgKiAoX18gLyBfX18pICsgKCIweCIgKF9fXykgKCEgXyAhIF8pKSAr IDB4MTAxKSAlIChpbnQoKF8gPSAoISAhIF8gISBfKSBeICsrX19fKSAvIC0tX19fKSAtKy0r K19fKSkgJSAoXyAvIF9fXykpICsgLS1fXyAqIChfX19fX18gPCAtX19fICsgX18pICsgKF9f X19fXyArIF9fXyA9PSBfXyA/IC1fX18gOiBfX19fX18gfiAoKF9fIC0gX19fKSAiJCIpID8g X18gKiAoX19fICsgX19fKSAtIF9fXyA6ICEgX19fKSArIF8sICsrX19fKSkgICB9ICcNCj4g DQo+IH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+ fn5+fn4NCj4gICAgICBnYXdrIC1lICAuLiAgfC0gMDYgICAgICAgZ2F3ayAtbmUg4oCmICB8 LSAwMSAgICAgICBnYXdrIC1uTWJlIHwtIDkzDQo+ICAgICAgZ2F3ayAtYmUgIC4gfC0gOTAg ICAgICAgZ2F3ayAtbmJlICAufC0gODUgICAgICAgbWF3azEg4oCUIC4uLiAgfC0gMjkNCj4g DQo+ICAgICAgZ2F3ayAtY2UgIC4gfC0gNDkgICAgICAgZ2F3ayAtTWUgICAufC0gNzYgICAg ICAgbWF3azIg4oCUICAg4oCmLnwtIDIxDQo+ICAgICAgZ2F3ayAtY2JlICB8LSAzMyAgICAg ICBnYXdrIC1NYmUgIHwtIDk4ICAgICAgICBuYXdrIOKAlCAg4oCm4oCmLiB8LSAxMg0KPiAg ICAgIGdhd2sgLVBlICAuIHwtIDM5ICAgICAgIGdhd2sgLW5NZSAgfC0gMDkNCj4gfn5+fn5+ fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fg0KPiAN
    Cg0K

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)