xref: /original-bsd/usr.bin/tn3270/ctlr/options.c (revision 648cab2a)
1 /*
2  * Copyright (c) 1988 Regents of the University of California.
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms are permitted
6  * provided that this notice is preserved and that due credit is given
7  * to the University of California at Berkeley. The name of the University
8  * may not be used to endorse or promote products derived from this
9  * software without specific prior written permission. This software
10  * is provided ``as is'' without express or implied warranty.
11  */
12 
13 #ifndef lint
14 static char sccsid[] = "@(#)options.c	3.2 (Berkeley) 03/28/88";
15 #endif /* not lint */
16 
17 /*
18  * this file contains the definitions, initialization, and processing of
19  *	commands to handle the various local options (APL ON, etc.)
20  */
21 
22 #include "options.h"
23 
24 #include "../general/globals.h"
25 #include "options.ext"
26 
27 void
28 OptInit()
29 {
30     register int i;
31 
32     OptAPLmode = 0;
33     OptNullProcessing = 1;		/* improved null processing */
34     OptZonesMode = 0;		/* zones mode off */
35     OptEnterNL = 0;		/* regular enter/new line keys */
36     OptColFieldTab = 0;		/* regular column/field tab keys */
37     OptPacing = 1;			/* do pacing */
38     OptAlphaInNumeric = 0;		/* allow alpha in numeric fields */
39     for (i = 0; i < sizeof OptColTabs; i++) {
40 	OptColTabs[i] = ((i%8) == 0);	/* every 8 columns */
41     }
42     OptHome = 0;
43     OptLeftMargin = 0;
44     OptWordWrap = 0;
45 }
46 
47 OptOrder(pointer, count, control)
48 char *pointer;
49 int count;
50 int control;
51 {
52     int i, j, character, origCount;
53 
54     origCount = count;
55 
56     if (count == 0) {
57 	return(0);
58     }
59     character = *pointer&0xff;
60     pointer++;
61     count--;
62     switch (character) {
63     case 0xa0:
64 	OptAPLmode = 1;
65 	break;
66     case 0x61:
67 	OptAPLmode = 0;
68 	break;
69     case 0x95:
70 	OptNullProcessing = 0;
71 	break;
72     case 0xd5:
73 	OptNullProcessing = 1;
74 	break;
75     case 0xa9:
76 	OptZonesMode = 1;
77 	break;
78     case 0xe9:
79 	OptZonesMode = 0;
80 	break;
81     case 0x85:
82 	OptEnterNL = 1;
83 	break;
84     case 0xc5:
85 	OptEnterNL = 0;
86 	break;
87     case 0x83:
88 	OptColFieldTab = 1;
89 	break;
90     case 0xc3:
91 	OptColFieldTab = 0;
92 	break;
93     case 0x97:
94 	OptPacing = 0;
95 	break;
96     case 0xd7:
97 	OptPacing = 1;
98 	break;
99     case 0xa5:
100 	OptAlphaInNumeric = 1;
101 	break;
102     case 0xe5:
103 	OptAlphaInNumeric = 0;
104 	break;
105     case 0xe3:
106 	if (!control && count < 30) {
107 	    return(0);		/* want more! */
108 	}
109 	for (i = 0; i < sizeof OptColTabs; i++) {
110 	    OptColTabs[i] = 0;
111 	}
112 	if (!count) {
113 	    break;
114 	}
115 	j = (*pointer&0xff)-0x40;
116 	count--;
117 	pointer++;
118 	if (j < 0 || j >= 24) {
119 	    break;
120 	}
121 	OptHome = j;
122 	if (!count) {
123 	    break;
124 	}
125 	j = (*pointer&0xff)-0x40;
126 	count--;
127 	pointer++;
128 	if (j < 0 || j >= 80) {
129 	    break;
130 	}
131 	OptLeftMargin = j;
132 	if (!count) {
133 	    break;
134 	}
135 	i = count;
136 	if (i > 28) {
137 	    i = 28;
138 	}
139 	while (i) {
140 	    j = (*pointer&0xff)-0x40;
141 	    if (j < 0 || j >= sizeof OptColTabs) {
142 		break;
143 	    }
144 	    OptColTabs[j] = 1;
145 	    i --;
146 	    pointer++;
147 	    count--;
148 	}
149 	break;
150     case 0xa6:
151 	OptWordWrap = 1;
152 	break;
153     case 0xe6:
154 	OptWordWrap = 0;
155 	break;
156     default:
157 	break;
158     }
159     return(origCount - count);
160 }
161