OK. AIX and ksh helps my understanding.
If you run... kill -l
...on AIX 4.3.3 you get some 40 distinct signals
you can trap.
The ERR trap will fire whenever a command has
a non-zero return value. Note that this trap
is not inheritied by functions. And of course,
if you execute another shell script, a new shell is spawned to execute it and your "trap"s are set to their original values when a child process
is created.
The 128+signal stuff only applies to the
return value variable "$?" which when a program
is terminated by a signal (i.e. SEGV, BUS, etc)
and dumps core, the value of this signal + 128
is returned in $?
The short of it is... if you want to assure
proper signal handling in your shells, you
should have traps in all your scripts.