1# 2# {g,n}awk script to generate signames.c 3# This version relies on the previous output of the preprocessor 4# on sigtmp.c, sigtmp.out, which is in turn generated by signames1.awk. 5# 6# NB: On SunOS 4.1.3 - user-functions don't work properly, also \" problems 7# Without 0 + hacks some nawks compare numbers as strings 8# 9/^[\t ]*XXNAMES XXSIG[A-Z][A-Z0-9]*[\t ][\t ]*[1-9][0-9]*/ { 10 sigindex = index($0, "SIG") 11 sigtail = substr($0, sigindex, 80) 12 split(sigtail, tmp) 13 signam = substr(tmp[1], 4, 20) 14 signum = tmp[2] 15 if (signam == "CHLD" && sig[signum] == "CLD") sig[signum] = "" 16 if (signam == "POLL" && sig[signum] == "IO") sig[signum] = "" 17 if (sig[signum] == "") { 18 sig[signum] = signam 19 if (0 + max < 0 + signum && signum < 60) 20 max = signum 21 if (signam == "ABRT") { msg[signum] = "abort" } 22 if (signam == "ALRM") { msg[signum] = "alarm" } 23 if (signam == "BUS") { msg[signum] = "bus error" } 24 if (signam == "CHLD") { msg[signum] = "death of child" } 25 if (signam == "CLD") { msg[signum] = "death of child" } 26 if (signam == "CONT") { msg[signum] = "continued" } 27 if (signam == "EMT") { msg[signum] = "EMT instruction" } 28 if (signam == "FPE") { msg[signum] = "floating point exception" } 29 if (signam == "HUP") { msg[signum] = "hangup" } 30 if (signam == "ILL") { msg[signum] = "illegal hardware instruction" } 31 if (signam == "INFO") { msg[signum] = "status request from keyboard" } 32 if (signam == "INT") { msg[signum] = "interrupt" } 33 if (signam == "IO") { msg[signum] = "i/o ready" } 34 if (signam == "IOT") { msg[signum] = "IOT instruction" } 35 if (signam == "KILL") { msg[signum] = "killed" } 36 if (signam == "LOST") { msg[signum] = "resource lost" } 37 if (signam == "PIPE") { msg[signum] = "broken pipe" } 38 if (signam == "POLL") { msg[signum] = "pollable event occurred" } 39 if (signam == "PROF") { msg[signum] = "profile signal" } 40 if (signam == "PWR") { msg[signum] = "power fail" } 41 if (signam == "QUIT") { msg[signum] = "quit" } 42 if (signam == "SEGV") { msg[signum] = "segmentation fault" } 43 if (signam == "SYS") { msg[signum] = "invalid system call" } 44 if (signam == "TERM") { msg[signum] = "terminated" } 45 if (signam == "TRAP") { msg[signum] = "trace trap" } 46 if (signam == "URG") { msg[signum] = "urgent condition" } 47 if (signam == "USR1") { msg[signum] = "user-defined signal 1" } 48 if (signam == "USR2") { msg[signum] = "user-defined signal 2" } 49 if (signam == "VTALRM") { msg[signum] = "virtual time alarm" } 50 if (signam == "WINCH") { msg[signum] = "window size changed" } 51 if (signam == "XCPU") { msg[signum] = "cpu limit exceeded" } 52 if (signam == "XFSZ") { msg[signum] = "file size limit exceeded" } 53 } 54} 55 56END { 57 ps = "%s" 58 ifdstr = sprintf("# ifdef USE_SUSPENDED\n\t%csuspended%s%c,\n%s else\n\t%cstopped%s%c,\n# endif\n", 34, ps, 34, "#", 34, ps, 34) 59 60 printf "/** signames.c **/\n" 61 printf "/** architecture-customized signames.c for zsh **/\n" 62 printf "\n" 63 printf "#define SIGCOUNT\t%d\n", max 64 printf "\n" 65 printf "#include %czsh.mdh%c\n", 34, 34 66 printf "\n" 67 printf "/**/\n" 68 printf "#define sigmsg(sig) ((sig) <= SIGCOUNT ? sig_msg[sig]" 69 printf " : %c%s%c)", 34, "unknown signal", 34 70 printf "\n" 71 printf "/**/\n" 72 printf "mod_export char *sig_msg[SIGCOUNT+2] = {\n" 73 printf "\t%c%s%c,\n", 34, "done", 34 74 75 for (i = 1; i <= 0 + max; i++) 76 if (msg[i] == "") { 77 if (sig[i] == "") 78 printf("\t%c%c,\n", 34, 34) 79 else if (sig[i] == "STOP") 80 printf ifdstr, " (signal)", " (signal)" 81 else if (sig[i] == "TSTP") 82 printf ifdstr, "", "" 83 else if (sig[i] == "TTIN") 84 printf ifdstr, " (tty input)", " (tty input)" 85 else if (sig[i] == "TTOU") 86 printf ifdstr, " (tty output)", " (tty output)" 87 else 88 printf("\t%cSIG%s%c,\n", 34, sig[i], 34) 89 } else 90 printf("\t%c%s%c,\n", 34, msg[i], 34) 91 print "\tNULL" 92 print "};" 93 print "" 94 print "/**/" 95 printf "char *sigs[SIGCOUNT+4] = {\n" 96 printf("\t%cEXIT%c,\n", 34, 34) 97 for (i = 1; i <= 0 + max; i++) 98 if (sig[i] == "") 99 printf("\t%c%d%c,\n", 34, i, 34) 100 else 101 printf("\t%c%s%c,\n", 34, sig[i], 34) 102 printf("\t%cZERR%c,\n", 34, 34) 103 printf("\t%cDEBUG%c,\n", 34, 34) 104 print "\tNULL" 105 print "};" 106} 107