xref: /csrg-svn/usr.bin/tn3270/ctlr/options.c (revision 35421)
130016Sminshall /*
233816Sbostic  * Copyright (c) 1988 Regents of the University of California.
333816Sbostic  * All rights reserved.
430016Sminshall  *
533816Sbostic  * Redistribution and use in source and binary forms are permitted
634887Sbostic  * provided that the above copyright notice and this paragraph are
734887Sbostic  * duplicated in all such forms and that any documentation,
834887Sbostic  * advertising materials, and other materials related to such
934887Sbostic  * distribution and use acknowledge that the software was developed
1034887Sbostic  * by the University of California, Berkeley.  The name of the
1134887Sbostic  * University may not be used to endorse or promote products derived
1234887Sbostic  * from this software without specific prior written permission.
1334887Sbostic  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
1434887Sbostic  * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
1534887Sbostic  * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
1630016Sminshall  */
1730016Sminshall 
1833816Sbostic #ifndef lint
19*35421Sminshall static char sccsid[] = "@(#)options.c	3.4 (Berkeley) 08/28/88";
2033816Sbostic #endif /* not lint */
2130016Sminshall 
2230016Sminshall /*
2330016Sminshall  * this file contains the definitions, initialization, and processing of
2430016Sminshall  *	commands to handle the various local options (APL ON, etc.)
2530016Sminshall  */
2630016Sminshall 
2730016Sminshall #include "options.h"
2830016Sminshall 
2931177Sminshall #include "../general/globals.h"
30*35421Sminshall #include "declare.h"
3130016Sminshall 
3230016Sminshall void
3330016Sminshall OptInit()
3430016Sminshall {
3530016Sminshall     register int i;
3630016Sminshall 
3730016Sminshall     OptAPLmode = 0;
3830016Sminshall     OptNullProcessing = 1;		/* improved null processing */
3930016Sminshall     OptZonesMode = 0;		/* zones mode off */
4030016Sminshall     OptEnterNL = 0;		/* regular enter/new line keys */
4130016Sminshall     OptColFieldTab = 0;		/* regular column/field tab keys */
4230016Sminshall     OptPacing = 1;			/* do pacing */
4330016Sminshall     OptAlphaInNumeric = 0;		/* allow alpha in numeric fields */
4430016Sminshall     for (i = 0; i < sizeof OptColTabs; i++) {
4530016Sminshall 	OptColTabs[i] = ((i%8) == 0);	/* every 8 columns */
4630016Sminshall     }
4730016Sminshall     OptHome = 0;
4830016Sminshall     OptLeftMargin = 0;
4930016Sminshall     OptWordWrap = 0;
5030016Sminshall }
5130016Sminshall 
5230016Sminshall OptOrder(pointer, count, control)
53*35421Sminshall unsigned char *pointer;
5430016Sminshall int count;
5530016Sminshall int control;
5630016Sminshall {
5730016Sminshall     int i, j, character, origCount;
5830016Sminshall 
5930016Sminshall     origCount = count;
6030016Sminshall 
6130016Sminshall     if (count == 0) {
6230016Sminshall 	return(0);
6330016Sminshall     }
6430016Sminshall     character = *pointer&0xff;
6530016Sminshall     pointer++;
6630016Sminshall     count--;
6730016Sminshall     switch (character) {
6830016Sminshall     case 0xa0:
6930016Sminshall 	OptAPLmode = 1;
7030016Sminshall 	break;
7130016Sminshall     case 0x61:
7230016Sminshall 	OptAPLmode = 0;
7330016Sminshall 	break;
7430016Sminshall     case 0x95:
7530016Sminshall 	OptNullProcessing = 0;
7630016Sminshall 	break;
7730016Sminshall     case 0xd5:
7830016Sminshall 	OptNullProcessing = 1;
7930016Sminshall 	break;
8030016Sminshall     case 0xa9:
8130016Sminshall 	OptZonesMode = 1;
8230016Sminshall 	break;
8330016Sminshall     case 0xe9:
8430016Sminshall 	OptZonesMode = 0;
8530016Sminshall 	break;
8630016Sminshall     case 0x85:
8730016Sminshall 	OptEnterNL = 1;
8830016Sminshall 	break;
8930016Sminshall     case 0xc5:
9030016Sminshall 	OptEnterNL = 0;
9130016Sminshall 	break;
9230016Sminshall     case 0x83:
9330016Sminshall 	OptColFieldTab = 1;
9430016Sminshall 	break;
9530016Sminshall     case 0xc3:
9630016Sminshall 	OptColFieldTab = 0;
9730016Sminshall 	break;
9830016Sminshall     case 0x97:
9930016Sminshall 	OptPacing = 0;
10030016Sminshall 	break;
10130016Sminshall     case 0xd7:
10230016Sminshall 	OptPacing = 1;
10330016Sminshall 	break;
10430016Sminshall     case 0xa5:
10530016Sminshall 	OptAlphaInNumeric = 1;
10630016Sminshall 	break;
10730016Sminshall     case 0xe5:
10830016Sminshall 	OptAlphaInNumeric = 0;
10930016Sminshall 	break;
11030016Sminshall     case 0xe3:
11130016Sminshall 	if (!control && count < 30) {
11230016Sminshall 	    return(0);		/* want more! */
11330016Sminshall 	}
11430016Sminshall 	for (i = 0; i < sizeof OptColTabs; i++) {
11530016Sminshall 	    OptColTabs[i] = 0;
11630016Sminshall 	}
11730016Sminshall 	if (!count) {
11830016Sminshall 	    break;
11930016Sminshall 	}
12030016Sminshall 	j = (*pointer&0xff)-0x40;
12130016Sminshall 	count--;
12230016Sminshall 	pointer++;
12330016Sminshall 	if (j < 0 || j >= 24) {
12430016Sminshall 	    break;
12530016Sminshall 	}
12630016Sminshall 	OptHome = j;
12730016Sminshall 	if (!count) {
12830016Sminshall 	    break;
12930016Sminshall 	}
13030016Sminshall 	j = (*pointer&0xff)-0x40;
13130016Sminshall 	count--;
13230016Sminshall 	pointer++;
13330016Sminshall 	if (j < 0 || j >= 80) {
13430016Sminshall 	    break;
13530016Sminshall 	}
13630016Sminshall 	OptLeftMargin = j;
13730016Sminshall 	if (!count) {
13830016Sminshall 	    break;
13930016Sminshall 	}
14030016Sminshall 	i = count;
14130016Sminshall 	if (i > 28) {
14230016Sminshall 	    i = 28;
14330016Sminshall 	}
14430016Sminshall 	while (i) {
14530016Sminshall 	    j = (*pointer&0xff)-0x40;
14630016Sminshall 	    if (j < 0 || j >= sizeof OptColTabs) {
14730016Sminshall 		break;
14830016Sminshall 	    }
14930016Sminshall 	    OptColTabs[j] = 1;
15030016Sminshall 	    i --;
15130016Sminshall 	    pointer++;
15230016Sminshall 	    count--;
15330016Sminshall 	}
15430016Sminshall 	break;
15530016Sminshall     case 0xa6:
15630016Sminshall 	OptWordWrap = 1;
15730016Sminshall 	break;
15830016Sminshall     case 0xe6:
15930016Sminshall 	OptWordWrap = 0;
16030016Sminshall 	break;
16130016Sminshall     default:
16230016Sminshall 	break;
16330016Sminshall     }
16430016Sminshall     return(origCount - count);
16530016Sminshall }
166