#! /usr/bin/gawk -f # Last edited on 2013-11-20 22:48:48 by stolfilocal BEGIN { maxlen = 6000000; FS = "\n"; } function rejoin_lines( nx) { # While $0 has a continuation mark, delete the mark and append # the next line: nx = $0; while ((nx != "") && (sub(/%$/, "", $0)) && (getline nx)) { $0 = ( $0 nx ); if (length($0) > maxlen) { printf "line too long\n" > "/dev/stderr"; exit(1); } } } // { rejoin_lines(); if ($0 ~ /[%]/) { # Shoud write this in C... gsub(/%04/,"\004"); gsub(/%07/,"\007"); gsub(/%08/,"\010"); gsub(/%09/,"\011"); gsub(/%0A/,"\012"); gsub(/%0C/,"\014"); gsub(/%0D/,"\015"); gsub(/%1B/,"\033"); gsub(/%20/," "); gsub(/%26/,"\\&"); # !!!! GAWK BUG !!!! gsub(/%2B/,"\053"); gsub(/%2E/,"\056"); gsub(/%2F/,"/"); gsub(/%3A/,":"); gsub(/%3C/,"\074"); gsub(/%3E/,"\076"); gsub(/%7F/,"\177"); gsub(/%A0/,"\240"); gsub(/%A1/,"\241"); gsub(/%A2/,"\242"); gsub(/%A3/,"\243"); gsub(/%A4/,"\244"); gsub(/%A5/,"\245"); gsub(/%A6/,"\246"); gsub(/%A7/,"\247"); gsub(/%A8/,"\250"); gsub(/%A9/,"\251"); gsub(/%AA/,"\252"); gsub(/%AB/,"\253"); gsub(/%AC/,"\254"); gsub(/%AD/,"\255"); gsub(/%AE/,"\256"); gsub(/%AF/,"\257"); gsub(/%B0/,"\260"); gsub(/%B1/,"\261"); gsub(/%B2/,"\262"); gsub(/%B3/,"\263"); gsub(/%B4/,"\264"); gsub(/%B5/,"\265"); gsub(/%B6/,"\266"); gsub(/%B7/,"\267"); gsub(/%B8/,"\270"); gsub(/%B9/,"\271"); gsub(/%BA/,"\272"); gsub(/%BB/,"\273"); gsub(/%BC/,"\274"); gsub(/%BD/,"\275"); gsub(/%BE/,"\276"); gsub(/%BF/,"\277"); gsub(/%C0/,"\300"); gsub(/%C1/,"\301"); gsub(/%C2/,"\302"); gsub(/%C3/,"\303"); gsub(/%C4/,"\304"); gsub(/%C5/,"\305"); gsub(/%C6/,"\306"); gsub(/%C7/,"\307"); gsub(/%C8/,"\310"); gsub(/%C9/,"\311"); gsub(/%CA/,"\312"); gsub(/%CB/,"\313"); gsub(/%CC/,"\314"); gsub(/%CD/,"\315"); gsub(/%CE/,"\316"); gsub(/%CF/,"\317"); gsub(/%D0/,"\320"); gsub(/%D1/,"\321"); gsub(/%D2/,"\322"); gsub(/%D3/,"\323"); gsub(/%D4/,"\324"); gsub(/%D5/,"\325"); gsub(/%D6/,"\326"); gsub(/%D7/,"\327"); gsub(/%D8/,"\330"); gsub(/%D9/,"\331"); gsub(/%DA/,"\332"); gsub(/%DB/,"\333"); gsub(/%DC/,"\334"); gsub(/%DD/,"\335"); gsub(/%DE/,"\336"); gsub(/%DF/,"\337"); gsub(/%E0/,"\340"); gsub(/%E1/,"\341"); gsub(/%E2/,"\342"); gsub(/%E3/,"\343"); gsub(/%E4/,"\344"); gsub(/%E5/,"\345"); gsub(/%E6/,"\346"); gsub(/%E7/,"\347"); gsub(/%E8/,"\350"); gsub(/%E9/,"\351"); gsub(/%EA/,"\352"); gsub(/%EB/,"\353"); gsub(/%EC/,"\354"); gsub(/%ED/,"\355"); gsub(/%EE/,"\356"); gsub(/%EF/,"\357"); gsub(/%F0/,"\360"); gsub(/%F1/,"\361"); gsub(/%F2/,"\362"); gsub(/%F3/,"\363"); gsub(/%F4/,"\364"); gsub(/%F5/,"\365"); gsub(/%F6/,"\366"); gsub(/%F7/,"\367"); gsub(/%F8/,"\370"); gsub(/%F9/,"\371"); gsub(/%FA/,"\372"); gsub(/%FB/,"\373"); gsub(/%FC/,"\374"); gsub(/%FD/,"\375"); gsub(/%FE/,"\376"); gsub(/%FF/,"\377"); gsub(/%3D/,"="); } print; }