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