xref: /csrg-svn/usr.bin/tn3270/ctlr/options.c (revision 33816)
130016Sminshall /*
2*33816Sbostic  * Copyright (c) 1988 Regents of the University of California.
3*33816Sbostic  * All rights reserved.
430016Sminshall  *
5*33816Sbostic  * Redistribution and use in source and binary forms are permitted
6*33816Sbostic  * provided that this notice is preserved and that due credit is given
7*33816Sbostic  * to the University of California at Berkeley. The name of the University
8*33816Sbostic  * may not be used to endorse or promote products derived from this
9*33816Sbostic  * software without specific prior written permission. This software
10*33816Sbostic  * is provided ``as is'' without express or implied warranty.
1130016Sminshall  */
1230016Sminshall 
13*33816Sbostic #ifndef lint
14*33816Sbostic static char sccsid[] = "@(#)options.c	3.2 (Berkeley) 03/28/88";
15*33816Sbostic #endif /* not lint */
1630016Sminshall 
1730016Sminshall /*
1830016Sminshall  * this file contains the definitions, initialization, and processing of
1930016Sminshall  *	commands to handle the various local options (APL ON, etc.)
2030016Sminshall  */
2130016Sminshall 
2230016Sminshall #include "options.h"
2330016Sminshall 
2431177Sminshall #include "../general/globals.h"
2530016Sminshall #include "options.ext"
2630016Sminshall 
2730016Sminshall void
2830016Sminshall OptInit()
2930016Sminshall {
3030016Sminshall     register int i;
3130016Sminshall 
3230016Sminshall     OptAPLmode = 0;
3330016Sminshall     OptNullProcessing = 1;		/* improved null processing */
3430016Sminshall     OptZonesMode = 0;		/* zones mode off */
3530016Sminshall     OptEnterNL = 0;		/* regular enter/new line keys */
3630016Sminshall     OptColFieldTab = 0;		/* regular column/field tab keys */
3730016Sminshall     OptPacing = 1;			/* do pacing */
3830016Sminshall     OptAlphaInNumeric = 0;		/* allow alpha in numeric fields */
3930016Sminshall     for (i = 0; i < sizeof OptColTabs; i++) {
4030016Sminshall 	OptColTabs[i] = ((i%8) == 0);	/* every 8 columns */
4130016Sminshall     }
4230016Sminshall     OptHome = 0;
4330016Sminshall     OptLeftMargin = 0;
4430016Sminshall     OptWordWrap = 0;
4530016Sminshall }
4630016Sminshall 
4730016Sminshall OptOrder(pointer, count, control)
4830016Sminshall char *pointer;
4930016Sminshall int count;
5030016Sminshall int control;
5130016Sminshall {
5230016Sminshall     int i, j, character, origCount;
5330016Sminshall 
5430016Sminshall     origCount = count;
5530016Sminshall 
5630016Sminshall     if (count == 0) {
5730016Sminshall 	return(0);
5830016Sminshall     }
5930016Sminshall     character = *pointer&0xff;
6030016Sminshall     pointer++;
6130016Sminshall     count--;
6230016Sminshall     switch (character) {
6330016Sminshall     case 0xa0:
6430016Sminshall 	OptAPLmode = 1;
6530016Sminshall 	break;
6630016Sminshall     case 0x61:
6730016Sminshall 	OptAPLmode = 0;
6830016Sminshall 	break;
6930016Sminshall     case 0x95:
7030016Sminshall 	OptNullProcessing = 0;
7130016Sminshall 	break;
7230016Sminshall     case 0xd5:
7330016Sminshall 	OptNullProcessing = 1;
7430016Sminshall 	break;
7530016Sminshall     case 0xa9:
7630016Sminshall 	OptZonesMode = 1;
7730016Sminshall 	break;
7830016Sminshall     case 0xe9:
7930016Sminshall 	OptZonesMode = 0;
8030016Sminshall 	break;
8130016Sminshall     case 0x85:
8230016Sminshall 	OptEnterNL = 1;
8330016Sminshall 	break;
8430016Sminshall     case 0xc5:
8530016Sminshall 	OptEnterNL = 0;
8630016Sminshall 	break;
8730016Sminshall     case 0x83:
8830016Sminshall 	OptColFieldTab = 1;
8930016Sminshall 	break;
9030016Sminshall     case 0xc3:
9130016Sminshall 	OptColFieldTab = 0;
9230016Sminshall 	break;
9330016Sminshall     case 0x97:
9430016Sminshall 	OptPacing = 0;
9530016Sminshall 	break;
9630016Sminshall     case 0xd7:
9730016Sminshall 	OptPacing = 1;
9830016Sminshall 	break;
9930016Sminshall     case 0xa5:
10030016Sminshall 	OptAlphaInNumeric = 1;
10130016Sminshall 	break;
10230016Sminshall     case 0xe5:
10330016Sminshall 	OptAlphaInNumeric = 0;
10430016Sminshall 	break;
10530016Sminshall     case 0xe3:
10630016Sminshall 	if (!control && count < 30) {
10730016Sminshall 	    return(0);		/* want more! */
10830016Sminshall 	}
10930016Sminshall 	for (i = 0; i < sizeof OptColTabs; i++) {
11030016Sminshall 	    OptColTabs[i] = 0;
11130016Sminshall 	}
11230016Sminshall 	if (!count) {
11330016Sminshall 	    break;
11430016Sminshall 	}
11530016Sminshall 	j = (*pointer&0xff)-0x40;
11630016Sminshall 	count--;
11730016Sminshall 	pointer++;
11830016Sminshall 	if (j < 0 || j >= 24) {
11930016Sminshall 	    break;
12030016Sminshall 	}
12130016Sminshall 	OptHome = j;
12230016Sminshall 	if (!count) {
12330016Sminshall 	    break;
12430016Sminshall 	}
12530016Sminshall 	j = (*pointer&0xff)-0x40;
12630016Sminshall 	count--;
12730016Sminshall 	pointer++;
12830016Sminshall 	if (j < 0 || j >= 80) {
12930016Sminshall 	    break;
13030016Sminshall 	}
13130016Sminshall 	OptLeftMargin = j;
13230016Sminshall 	if (!count) {
13330016Sminshall 	    break;
13430016Sminshall 	}
13530016Sminshall 	i = count;
13630016Sminshall 	if (i > 28) {
13730016Sminshall 	    i = 28;
13830016Sminshall 	}
13930016Sminshall 	while (i) {
14030016Sminshall 	    j = (*pointer&0xff)-0x40;
14130016Sminshall 	    if (j < 0 || j >= sizeof OptColTabs) {
14230016Sminshall 		break;
14330016Sminshall 	    }
14430016Sminshall 	    OptColTabs[j] = 1;
14530016Sminshall 	    i --;
14630016Sminshall 	    pointer++;
14730016Sminshall 	    count--;
14830016Sminshall 	}
14930016Sminshall 	break;
15030016Sminshall     case 0xa6:
15130016Sminshall 	OptWordWrap = 1;
15230016Sminshall 	break;
15330016Sminshall     case 0xe6:
15430016Sminshall 	OptWordWrap = 0;
15530016Sminshall 	break;
15630016Sminshall     default:
15730016Sminshall 	break;
15830016Sminshall     }
15930016Sminshall     return(origCount - count);
16030016Sminshall }
161