1262685Sdelphij# $Id: MKunctrl.awk,v 1.27 2012/06/09 20:29:33 tom Exp $ 250276Speter############################################################################## 3262685Sdelphij# Copyright (c) 1998-2009,2012 Free Software Foundation, Inc. # 450276Speter# # 550276Speter# Permission is hereby granted, free of charge, to any person obtaining a # 650276Speter# copy of this software and associated documentation files (the "Software"), # 750276Speter# to deal in the Software without restriction, including without limitation # 850276Speter# the rights to use, copy, modify, merge, publish, distribute, distribute # 950276Speter# with modifications, sublicense, and/or sell copies of the Software, and to # 1050276Speter# permit persons to whom the Software is furnished to do so, subject to the # 1150276Speter# following conditions: # 1250276Speter# # 1350276Speter# The above copyright notice and this permission notice shall be included in # 1450276Speter# all copies or substantial portions of the Software. # 1550276Speter# # 1650276Speter# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # 1750276Speter# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # 1850276Speter# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL # 1950276Speter# THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # 2050276Speter# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # 2150276Speter# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # 2250276Speter# DEALINGS IN THE SOFTWARE. # 2350276Speter# # 2450276Speter# Except as contained in this notice, the name(s) of the above copyright # 2550276Speter# holders shall not be used in advertising or otherwise to promote the sale, # 2650276Speter# use or other dealings in this Software without prior written # 2750276Speter# authorization. # 2850276Speter############################################################################## 2950276Speter# 30176187Srafan# Author: Thomas E. Dickey (1997-on) 3150276Speter# 3250276Speter 3350276SpeterBEGIN { 3450276Speter print "/* generated by MKunctrl.awk */" 3550276Speter print "" 3650276Speter print "#include <curses.priv.h>" 37176187Srafan print "#include <ctype.h>" 3850276Speter print "" 3950276Speter print "#undef unctrl" 4050276Speter print "" 4150276Speter } 4250276SpeterEND { 43262629Sdelphij print "NCURSES_EXPORT(NCURSES_CONST char *) safe_unctrl(SCREEN *sp, chtype ch)" 4450276Speter print "{" 45174993Srafan blob="" 46174993Srafan offset=0 47174993Srafan if (bigstrings) { 48174993Srafan printf "static const short unctrl_table[] = {" 49174993Srafan } else { 50174993Srafan printf "static const char* const unctrl_table[] = {" 51174993Srafan } 5250276Speter for ( ch = 0; ch < 256; ch++ ) { 5350276Speter gap = "," 54174993Srafan part="" 55174993Srafan if ((ch % 8) == 0) { 5650276Speter printf "\n " 57174993Srafan if (ch != 0) 58174993Srafan blob = blob "\"" 59174993Srafan blob = blob "\n \"" 60174993Srafan } 61174993Srafan if (bigstrings) 62174993Srafan printf "%4d%s", offset, gap; 6350276Speter if (ch < 32) { 64174993Srafan part = sprintf ("^\\%03o", ch + 64); 65174993Srafan offset = offset + 3; 6650276Speter } else if (ch == 127) { 67174993Srafan part = "^?"; 68174993Srafan offset = offset + 3; 6962449Speter } else if (ch >= 128 && ch < 160) { 70174993Srafan part = sprintf("~\\%03o", ch - 64); 71174993Srafan offset = offset + 3; 72176187Srafan } else if (ch == 255) { 73176187Srafan part = "~?"; 74176187Srafan offset = offset + 3; 75176187Srafan } else if (ch >= 160) { 76176187Srafan part = sprintf("M-\\%03o", ch - 128); 77176187Srafan offset = offset + 4; 7850276Speter } else { 7950276Speter gap = gap " " 80174993Srafan part = sprintf("\\%03o", ch); 81174993Srafan offset = offset + 2; 8250276Speter } 8350276Speter if (ch == 255) 8450276Speter gap = "\n" 8550276Speter else if (((ch + 1) % 8) != 0) 8650276Speter gap = gap " " 87174993Srafan if (bigstrings) { 88174993Srafan blob = blob part "\\0"; 89174993Srafan } else { 90174993Srafan printf "\"%s\"%s", part, gap 91174993Srafan } 9250276Speter } 9350276Speter print "};" 94174993Srafan blob = blob "\""; 95166124Srafan 9650276Speter print "" 97184989Srafan printf "#if NCURSES_EXT_FUNCS\n"; 98174993Srafan if (bigstrings) { 99176187Srafan blob = blob "\n/* printable values in 128-255 range */" 100174993Srafan printf "static const short unctrl_c1[] = {" 101174993Srafan } else { 102174993Srafan printf "static const char* const unctrl_c1[] = {" 103174993Srafan } 104176187Srafan for ( ch = 128; ch < 256; ch++ ) { 105166124Srafan gap = "," 106174993Srafan if ((ch % 8) == 0) { 107174993Srafan if (ch != 128) 108174993Srafan blob = blob "\"" 109166124Srafan printf "\n " 110174993Srafan blob = blob "\n \"" 111166124Srafan } 112174993Srafan if (bigstrings) { 113174993Srafan printf "%4d%s", offset, gap; 114174993Srafan part = sprintf("\\%03o\\0", ch); 115174993Srafan blob = blob part 116174993Srafan offset = offset + 2; 117174993Srafan if (((ch + 1) % 8) != 0) 118174993Srafan gap = gap " " 119174993Srafan } else { 120176187Srafan if (ch >= 128) { 121174993Srafan printf "\"\\%03o\"", ch 122174993Srafan gap = gap " " 123174993Srafan } 124174993Srafan if (ch == 255) 125174993Srafan gap = "\n" 126174993Srafan else if (((ch + 1) % 8) != 0) 127174993Srafan gap = gap " " 128174993Srafan printf "%s", gap 129174993Srafan } 130166124Srafan } 131166124Srafan print "};" 132184989Srafan print "#endif /* NCURSES_EXT_FUNCS */" 133176187Srafan blob = blob "\"\n" 134166124Srafan 135166124Srafan print "" 136174993Srafan if (bigstrings) { 137174993Srafan print "static const char unctrl_blob[] = "blob";" 138174993Srafan print "" 139174993Srafan stringname = "unctrl_blob + unctrl" 140174993Srafan } else { 141174993Srafan stringname = "unctrl" 142174993Srafan } 143262685Sdelphij print "\tint check = (int) ChCharOf(ch);" 144176187Srafan print "\tconst char *result;" 145176187Srafan print "" 146176187Srafan print "\tif (check >= 0 && check < (int)SIZEOF(unctrl_table)) {" 147176187Srafan print "#if NCURSES_EXT_FUNCS" 148184989Srafan print "\t\tif ((sp != 0)" 149184989Srafan print "\t\t && (sp->_legacy_coding > 1)" 150176187Srafan print "\t\t && (check >= 128)" 151176187Srafan print "\t\t && (check < 160))" 152174993Srafan printf "\t\t\tresult = %s_c1[check - 128];\n", stringname; 153176187Srafan print "\t\telse" 154176187Srafan print "\t\tif ((check >= 160)" 155176187Srafan print "\t\t && (check < 256)" 156184989Srafan print "\t\t && ((sp != 0)" 157184989Srafan print "\t\t && ((sp->_legacy_coding > 0)" 158184989Srafan print "\t\t || (sp->_legacy_coding == 0" 159176187Srafan print "\t\t && isprint(check)))))" 160176187Srafan printf "\t\t\tresult = %s_c1[check - 128];\n", stringname; 161176187Srafan print "\t\telse" 162176187Srafan print "#endif /* NCURSES_EXT_FUNCS */" 163174993Srafan printf "\t\t\tresult = %s_table[check];\n", stringname; 164176187Srafan print "\t} else {" 165176187Srafan print "\t\tresult = 0;" 166176187Srafan print "\t}" 167176187Srafan print "\treturn (NCURSES_CONST char *)result;" 168176187Srafan print "}" 169184989Srafan print "" 170184989Srafan print "NCURSES_EXPORT(NCURSES_CONST char *) unctrl (chtype ch)" 171184989Srafan print "{" 172262629Sdelphij print "\treturn safe_unctrl(CURRENT_SCREEN, ch);" 173184989Srafan print "}" 17450276Speter } 175