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