xref: /original-bsd/usr.bin/tn3270/ctlr/options.c (revision c7ce21e7)
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 the above copyright notice and this paragraph are
7  * duplicated in all such forms and that any documentation,
8  * advertising materials, and other materials related to such
9  * distribution and use acknowledge that the software was developed
10  * by the University of California, Berkeley.  The name of the
11  * University may not be used to endorse or promote products derived
12  * from this software without specific prior written permission.
13  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
14  * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
15  * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
16  */
17 
18 #ifndef lint
19 static char sccsid[] = "@(#)options.c	3.3 (Berkeley) 06/29/88";
20 #endif /* not lint */
21 
22 /*
23  * this file contains the definitions, initialization, and processing of
24  *	commands to handle the various local options (APL ON, etc.)
25  */
26 
27 #include "options.h"
28 
29 #include "../general/globals.h"
30 #include "options.ext"
31 
32 void
33 OptInit()
34 {
35     register int i;
36 
37     OptAPLmode = 0;
38     OptNullProcessing = 1;		/* improved null processing */
39     OptZonesMode = 0;		/* zones mode off */
40     OptEnterNL = 0;		/* regular enter/new line keys */
41     OptColFieldTab = 0;		/* regular column/field tab keys */
42     OptPacing = 1;			/* do pacing */
43     OptAlphaInNumeric = 0;		/* allow alpha in numeric fields */
44     for (i = 0; i < sizeof OptColTabs; i++) {
45 	OptColTabs[i] = ((i%8) == 0);	/* every 8 columns */
46     }
47     OptHome = 0;
48     OptLeftMargin = 0;
49     OptWordWrap = 0;
50 }
51 
52 OptOrder(pointer, count, control)
53 char *pointer;
54 int count;
55 int control;
56 {
57     int i, j, character, origCount;
58 
59     origCount = count;
60 
61     if (count == 0) {
62 	return(0);
63     }
64     character = *pointer&0xff;
65     pointer++;
66     count--;
67     switch (character) {
68     case 0xa0:
69 	OptAPLmode = 1;
70 	break;
71     case 0x61:
72 	OptAPLmode = 0;
73 	break;
74     case 0x95:
75 	OptNullProcessing = 0;
76 	break;
77     case 0xd5:
78 	OptNullProcessing = 1;
79 	break;
80     case 0xa9:
81 	OptZonesMode = 1;
82 	break;
83     case 0xe9:
84 	OptZonesMode = 0;
85 	break;
86     case 0x85:
87 	OptEnterNL = 1;
88 	break;
89     case 0xc5:
90 	OptEnterNL = 0;
91 	break;
92     case 0x83:
93 	OptColFieldTab = 1;
94 	break;
95     case 0xc3:
96 	OptColFieldTab = 0;
97 	break;
98     case 0x97:
99 	OptPacing = 0;
100 	break;
101     case 0xd7:
102 	OptPacing = 1;
103 	break;
104     case 0xa5:
105 	OptAlphaInNumeric = 1;
106 	break;
107     case 0xe5:
108 	OptAlphaInNumeric = 0;
109 	break;
110     case 0xe3:
111 	if (!control && count < 30) {
112 	    return(0);		/* want more! */
113 	}
114 	for (i = 0; i < sizeof OptColTabs; i++) {
115 	    OptColTabs[i] = 0;
116 	}
117 	if (!count) {
118 	    break;
119 	}
120 	j = (*pointer&0xff)-0x40;
121 	count--;
122 	pointer++;
123 	if (j < 0 || j >= 24) {
124 	    break;
125 	}
126 	OptHome = j;
127 	if (!count) {
128 	    break;
129 	}
130 	j = (*pointer&0xff)-0x40;
131 	count--;
132 	pointer++;
133 	if (j < 0 || j >= 80) {
134 	    break;
135 	}
136 	OptLeftMargin = j;
137 	if (!count) {
138 	    break;
139 	}
140 	i = count;
141 	if (i > 28) {
142 	    i = 28;
143 	}
144 	while (i) {
145 	    j = (*pointer&0xff)-0x40;
146 	    if (j < 0 || j >= sizeof OptColTabs) {
147 		break;
148 	    }
149 	    OptColTabs[j] = 1;
150 	    i --;
151 	    pointer++;
152 	    count--;
153 	}
154 	break;
155     case 0xa6:
156 	OptWordWrap = 1;
157 	break;
158     case 0xe6:
159 	OptWordWrap = 0;
160 	break;
161     default:
162 	break;
163     }
164     return(origCount - count);
165 }
166