/* $NetBSD: options.c,v 1.3 1997/01/09 20:22:14 tls Exp $ */ /*- * Copyright (c) 1988 The Regents of the University of California. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * This product includes software developed by the University of * California, Berkeley and its contributors. * 4. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ #ifndef lint /*static char sccsid[] = "from: @(#)options.c 4.2 (Berkeley) 4/26/91";*/ static char rcsid[] = "$NetBSD: options.c,v 1.3 1997/01/09 20:22:14 tls Exp $"; #endif /* not lint */ /* * this file contains the definitions, initialization, and processing of * commands to handle the various local options (APL ON, etc.) */ #include "options.h" #include "../general/globals.h" #include "declare.h" void OptInit() { register int i; OptAPLmode = 0; OptNullProcessing = 1; /* improved null processing */ OptZonesMode = 0; /* zones mode off */ OptEnterNL = 0; /* regular enter/new line keys */ OptColFieldTab = 0; /* regular column/field tab keys */ OptPacing = 1; /* do pacing */ OptAlphaInNumeric = 0; /* allow alpha in numeric fields */ for (i = 0; i < sizeof OptColTabs; i++) { OptColTabs[i] = ((i%8) == 0); /* every 8 columns */ } OptHome = 0; OptLeftMargin = 0; OptWordWrap = 0; } OptOrder(pointer, count, control) unsigned char *pointer; int count; int control; { int i, j, character, origCount; origCount = count; if (count == 0) { return(0); } character = *pointer&0xff; pointer++; count--; switch (character) { case 0xa0: OptAPLmode = 1; break; case 0x61: OptAPLmode = 0; break; case 0x95: OptNullProcessing = 0; break; case 0xd5: OptNullProcessing = 1; break; case 0xa9: OptZonesMode = 1; break; case 0xe9: OptZonesMode = 0; break; case 0x85: OptEnterNL = 1; break; case 0xc5: OptEnterNL = 0; break; case 0x83: OptColFieldTab = 1; break; case 0xc3: OptColFieldTab = 0; break; case 0x97: OptPacing = 0; break; case 0xd7: OptPacing = 1; break; case 0xa5: OptAlphaInNumeric = 1; break; case 0xe5: OptAlphaInNumeric = 0; break; case 0xe3: if (!control && count < 30) { return(0); /* want more! */ } for (i = 0; i < sizeof OptColTabs; i++) { OptColTabs[i] = 0; } if (!count) { break; } j = (*pointer&0xff)-0x40; count--; pointer++; if (j < 0 || j >= 24) { break; } OptHome = j; if (!count) { break; } j = (*pointer&0xff)-0x40; count--; pointer++; if (j < 0 || j >= 80) { break; } OptLeftMargin = j; if (!count) { break; } i = count; if (i > 28) { i = 28; } while (i) { j = (*pointer&0xff)-0x40; if (j < 0 || j >= sizeof OptColTabs) { break; } OptColTabs[j] = 1; i --; pointer++; count--; } break; case 0xa6: OptWordWrap = 1; break; case 0xe6: OptWordWrap = 0; break; default: break; } return(origCount - count); }