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