clarify what a "line" is
[p5sagit/p5-mst-13.2.git] / ebcdic.c
1 #include "EXTERN.h"
2 #include "perl.h"
3
4 /* in ASCII order, not that it matters */
5 static const char controllablechars[] = "?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_";
6  
7 int
8 ebcdic_control(int ch)
9 {
10         if (ch > 'a') {
11                 char *ctlp;
12  
13                if (islower(ch))
14                       ch = toupper(ch);
15  
16                if ((ctlp = strchr(controllablechars, ch)) == 0) {
17                       die("unrecognised control character '%c'\n", ch);
18                }
19  
20                 if (ctlp == controllablechars)
21                        return('\177'); /* DEL */
22                 else
23                        return((unsigned char)(ctlp - controllablechars - 1));
24         } else { /* Want uncontrol */
25                 if (ch == '\177' || ch == -1)
26                         return('?');
27                 else if (0 < ch && ch < (sizeof(controllablechars) - 1))
28                         return(controllablechars[ch+1]);
29                 else
30                         die("invalid control request: '\\%03o'\n", ch & 0xFF);
31         }
32 }