From a1f8d0ff6468d61321ab82ffca74742dc7b73985 Mon Sep 17 00:00:00 2001 From: joerg Date: Sun, 29 Dec 1996 10:54:36 +0000 Subject: Merge ee version 1.3 from the vendor branch. Clean up files we've got in a different location. (Sigh, the initial import gratuitously changed the directory structure here, rendering the vendor branch a little useless.) Note: the French message catalog needs updating. By now, i've simply appended the English messages. NB: French message # 123 has been wrong, please correct whoever is going to deal with this. --- usr.bin/ee/README.ee | 116 -- usr.bin/ee/create.make | 267 --- usr.bin/ee/doc/Artistic | 117 -- usr.bin/ee/doc/ee.i18n.guide | 141 -- usr.bin/ee/doc/new_curse.c | 3574 -------------------------------- usr.bin/ee/doc/new_curse.h | 255 --- usr.bin/ee/ee.1 | 27 +- usr.bin/ee/ee.c | 545 ++++- usr.bin/ee/make.default | 57 - usr.bin/ee/new_curse.c | 246 +-- usr.bin/ee/new_curse.h | 3 +- usr.bin/ee/nls/de_DE.ISO8859-1/ee.msg | 14 +- usr.bin/ee/nls/de_DE.ISO_8859-1/ee.msg | 14 +- usr.bin/ee/nls/en_US.ISO_8859-1/ee.msg | 14 +- usr.bin/ee/nls/en_US.US-ASCII/ee.msg | 14 +- usr.bin/ee/nls/fr_FR.ISO8859-1/ee.msg | 16 +- usr.bin/ee/nls/fr_FR.ISO_8859-1/ee.msg | 16 +- 17 files changed, 644 insertions(+), 4792 deletions(-) delete mode 100644 usr.bin/ee/README.ee delete mode 100755 usr.bin/ee/create.make delete mode 100644 usr.bin/ee/doc/Artistic delete mode 100644 usr.bin/ee/doc/ee.i18n.guide delete mode 100644 usr.bin/ee/doc/new_curse.c delete mode 100644 usr.bin/ee/doc/new_curse.h delete mode 100644 usr.bin/ee/make.default (limited to 'usr.bin/ee') diff --git a/usr.bin/ee/README.ee b/usr.bin/ee/README.ee deleted file mode 100644 index 8850af2..0000000 --- a/usr.bin/ee/README.ee +++ /dev/null @@ -1,116 +0,0 @@ - THIS MATERIAL IS PROVIDED "AS IS". THERE ARE NO WARRANTIES OF - ANY KIND WITH REGARD TO THIS MATERIAL, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND - FITNESS FOR A PARTICULAR PURPOSE. Neither Hewlett-Packard nor - Hugh Mahon shall be liable for errors contained herein, nor for - incidental or consequential damages in connection with the - furnishing, performance or use of this material. Neither - Hewlett-Packard nor Hugh Mahon assumes any responsibility for - the use or reliability of this software or documentation. This - software and documentation is totally UNSUPPORTED. There is no - support contract available. Hewlett-Packard has done NO - Quality Assurance on ANY of the program or documentation. You - may find the quality of the materials inferior to supported - materials. - - This software may be distributed under the terms of Larry Wall's - Artistic license, a copy of which is included in this distribution. - - This notice must be included with this software and any - derivatives. - - Any modifications to this software by anyone but the original author - must be so noted. - - -The editor 'ee' (easy editor) is intended to be a simple, easy to use -terminal-based screen oriented editor that requires no instruction to -use. Its primary use would be for people who are new to computers, or who -use computers only for things like e-mail. - -ee's simplified interface is highlighted by the use of pop-up menus which -make it possible for users to carry out tasks without the need to -remember commands. An information window at the top of the screen shows -the user the operations available with control-keys. - -ee allows users to use full eight-bit characters. If the host system has -the capabilities, ee can use message catalogs, which would allow users to -translate the message catalog into other languages which use eight-bit -characters. See the file ee.i18n.guide for more details. - -ee relies on the virtual memory abilities of the platform it is running on -and does not have its own memory management capabilities. - -I am releasing ee because I hate to see new users and non-computer types -get frustrated by vi, and would like to see more intuitive interfaces for -basic tools (both character-based and graphical) become more pervasive. -Terminal capabilities and communication speeds have evolved considerably -since the time in which vi's interface was created, allowing much more -intuitive interfaces to be used. Since character-based I/O won't be -completely replaced by graphical user interfaces for at least a few more -years, I'd like to do what I can to make using computers with less -glamorous interfaces as easy to use as possible. If terminal interfaces -are still used in ten years, I hope neophytes won't still be stuck with -only vi. - -For a text editor to be easy to use requires a certain set of abilities. In -order for ee to work, a terminal must have the ability to position the cursor -on the screen, and should have arrow keys that send unique sequences -(multiple characters, the first character is an "escape", octal code -'\033'). All of this information needs to be in a database called "terminfo" -(System V implementations) or "termcap" (usually used for BSD systems). In -case the arrow keys do not transmit unique sequences, motion operations are -mapped to control keys as well, but this at least partially defeats the -purpose. The curses package is used to handle the I/O which deals with the -terminal's capabilities. - -While ee is based on curses, I have included here the source code to -new_curse, a subset of curses developed for use with ee. 'curses' often -will have a defect that reduces the usefulness of the editor relying upon -it. - -The file new_curse.c contains a subset of 'curses', a package for -applications to use to handle screen output. Unfortunately, curses -varies from system to system, so I developed new_curse to provide -consistent behavior across systems. It works on both SystemV and BSD -systems, and while it can sometimes be slower than other curses packages, -it will get the information on the screen painted correctly more often -than vendor supplied curses. Unless problems occur during the building -of ee, it is recommended that you use new_curse rather than the curses -supplied with your system. - -If you experience problems with data being displayed improperly, check -your terminal configuration, especially if you're using a terminal -emulator, and make sure that you are using the right terminfo entry -before rummaging through code. Terminfo entries often contain -inaccuracies, or incomplete information, or may not totally match the -terminal or emulator the terminal information is being used with. -Complaints that ee isn't working quite right often end up being something -else (like the terminal emulator being used). - -Both ee and new_curse were developed using K&R C (also known as "classic -C"), but it can also be compiled with ANSI C. You should be able to -build ee by simply typing "make". A make file which takes into account -the characteristics of your system will be created, and then ee will be -built. If there are problems encountered, you will be notified about -them. - -ee is the result of several conflicting design goals. While I know that it -solves the problems of some users, I also have no doubt that some will decry -its lack of more features. I will settle for knowing that ee does fulfill -the needs of a minority (but still large number) of users. The goals of ee -are: - - 1. To be so easy to use as to require no instruction. - 2. To be easy to compile and, if necessary, port to new platforms - by people with relatively little knowledge of C and UNIX. - 3. To have a minimum number of files to be dealt with, for compile - and installation. - 4. To have enough functionality to be useful to a large number of - people. - -Hugh Mahon |___| -h_mahon@fc.hp.com | | - |\ /| - | \/ | - diff --git a/usr.bin/ee/create.make b/usr.bin/ee/create.make deleted file mode 100755 index 9c41f89..0000000 --- a/usr.bin/ee/create.make +++ /dev/null @@ -1,267 +0,0 @@ -#!/bin/sh - -# -# This script will determine if the system is a System V or BSD based -# UNIX system and create a makefile for ee appropriate for the system. -# -# $Header: /home/hugh/sources/old_ae/RCS/create.make,v 1.6 1995/08/21 02:25:23 hugh Exp $ -# - -# test for existence of termcap (exists on both BSD and SysV systems) - -if [ -f /etc/termcap -o -f /usr/share/lib/termcap ] -then - termcap_exists="TRUE" -else - termcap_exists="" -fi - -# test for terminfo directory (exists on SysV systems) - -if [ -d /usr/lib/terminfo -o -d /usr/share/lib/terminfo ] -then - terminfo_exists="" -else - terminfo_exists="-DCAP" -fi - -# test for existence of termio header (on SysV systems) - -if [ -f /usr/include/termio.h ] -then - termio="-DSYS5" -else - termio="" -fi - -# test for sgtty header (on BSD systems) - -if [ -f /usr/include/sgtty.h ] -then - sgtty="TRUE" -else - sgtty="" -fi - -# look for select call in headers, make sure headers exist - -HEADER_FILES="" - -if [ -f /usr/include/sys/time.h ] -then - HEADER_FILES="/usr/include/sys/time.h " -fi - -if [ -f /usr/include/sys/types.h ] -then - HEADER_FILES="$HEADER_FILES /usr/include/sys/types.h" -fi - -if [ -n "$HEADER_FILES" ] -then - string="`grep select $HEADER_FILES`" - if [ -n "$string" ] - then - BSD_SELECT="-DBSD_SELECT" - else - BSD_SELECT="" - fi -fi - -# check for existence of select.h (on AIX) - -if [ -f /usr/include/sys/select.h ] -then - select_hdr="-DSLCT_HDR" -else - select_hdr="" -fi - -# check for stdlib.h - -if [ -f /usr/include/stdlib.h ] -then - HAS_STDLIB=-DHAS_STDLIB -else - HAS_STDLIB="" -fi - -# check for stdarg.h - -if [ -f /usr/include/stdarg.h ] -then - HAS_STDARG=-DHAS_STDARG -else - HAS_STDARG="" -fi - -# check for unistd.h - -if [ -f /usr/include/unistd.h ] -then - HAS_UNISTD=-DHAS_UNISTD -else - HAS_UNISTD="" -fi - -# check for ctype.h - -if [ -f /usr/include/ctype.h ] -then - HAS_CTYPE=-DHAS_CTYPE -else - HAS_CTYPE="" -fi - -# check for sys/ioctl.h - -if [ -f /usr/include/sys/ioctl.h ] -then - HAS_SYS_IOCTL=-DHAS_SYS_IOCTL -else - HAS_SYS_IOCTL="" -fi - -# check for sys/wait.h - -if [ -f /usr/include/sys/wait.h ] -then - HAS_SYS_WAIT=-DHAS_SYS_WAIT -else - HAS_SYS_WAIT="" -fi - -# check for localization headers - -if [ -f /usr/include/locale.h -a -f /usr/include/nl_types.h ] -then - catgets="" -else - catgets="-DNO_CATGETS" -fi - -# make decisions about use of new_curse.c (use of new_curse is recommended -# rather than local curses) - -if [ -n "$terminfo_exists" -a -z "$termcap_exists" ] -then - echo "Neither terminfo or termcap are on this system! " - if [ -f /usr/include/curses.h ] - then - echo "Relying on local curses implementation." - else - cat <<-EOF - Don't know where to find curses, you'll need to modify - source code to be able to build! - - Modify the file make.default and build ee by typing: - - make -f make.default - - EOF - - exit 1 - fi - - TARGET="curses" - curses="" -else - curses="-DNCURSE" - TARGET="ee" -fi - -if [ -z "$termio" -a -z "$sgtty" ] -then - echo "Neither termio.h or sgtty.h are on this system! " - if [ -f /usr/include/curses.h ] - then - echo "Relying on local curses implementation." - else - cat <<-EOF - Don't know where to find curses, you'll need to modify - source code to be able to build! - - Modify the file make.default and build ee by typing: - - make -f make.default - - EOF - - exit 1 - fi - - TARGET="curses" - curses="" -fi - -# check if this is a SunOS system - -if [ -d /usr/5include ] -then - five_include="-I/usr/5include" -else - five_include="" -fi - -if [ -d /usr/5lib ] -then - five_lib="-L/usr/5lib" -else - five_lib="" -fi - - -if [ -n "$CFLAGS" ] -then - if [ -z "`echo $CFLAGS | grep '[-]g'`" ] - then - other_cflags="${CFLAGS} -s" - else - other_cflags="${CFLAGS}" - fi -else - other_cflags="-s" -fi - -# time to write the makefile - -echo "Generating make.local" - -if [ -f make.local ] -then - mv make.local make.lcl.old -fi - -echo "DEFINES = $termio $terminfo_exists $BSD_SELECT $catgets $select $curses " > make.local -echo "" >> make.local -echo "CFLAGS = $HAS_UNISTD $HAS_STDARG $HAS_STDLIB $HAS_CTYPE $HAS_SYS_IOCTL $HAS_SYS_WAIT $five_lib $five_include $select_hdr $other_cflags" >> make.local -echo "" >> make.local -echo "" >> make.local -echo "all : $TARGET" >> make.local - -cat >> make.local << EOF - -curses : ee.c - cc ee.c -o ee \$(CFLAGS) -lcurses - -ee : ee.o new_curse.o - cc -o ee ee.o new_curse.o \$(CFLAGS) - -ee.o : ee.c new_curse.h - cc -c ee.c \$(DEFINES) \$(CFLAGS) - -new_curse.o : new_curse.c new_curse.h - cc new_curse.c -c \$(DEFINES) \$(CFLAGS) - -EOF - -if [ -f make.lcl.old ] -then - diffs="`cmp make.lcl.old make.local`" - if [ -n "${diffs}" ] - then - rm -f ee.o new_curse.o ee - fi - rm -f make.lcl.old -fi - diff --git a/usr.bin/ee/doc/Artistic b/usr.bin/ee/doc/Artistic deleted file mode 100644 index fbf7989..0000000 --- a/usr.bin/ee/doc/Artistic +++ /dev/null @@ -1,117 +0,0 @@ - - - - - The "Artistic License" - - Preamble - -The intent of this document is to state the conditions under which a -Package may be copied, such that the Copyright Holder maintains some -semblance of artistic control over the development of the package, -while giving the users of the package the right to use and distribute -the Package in a more-or-less customary fashion, plus the right to make -reasonable modifications. - -Definitions: - - "Package" refers to the collection of files distributed by the - Copyright Holder, and derivatives of that collection of files - created through textual modification. - - "Standard Version" refers to such a Package if it has not been - modified, or has been modified in accordance with the wishes - of the Copyright Holder. - - "Copyright Holder" is whoever is named in the copyright or - copyrights for the package. - - "You" is you, if you're thinking about copying or distributing - this Package. - - "Reasonable copying fee" is whatever you can justify on the - basis of media cost, duplication charges, time of people involved, - and so on. (You will not be required to justify it to the - Copyright Holder, but only to the computing community at large - as a market that must bear the fee.) - - "Freely Available" means that no fee is charged for the item - itself, though there may be fees involved in handling the item. - It also means that recipients of the item may redistribute it - under the same conditions they received it. - -1. You may make and give away verbatim copies of the source form of the -Standard Version of this Package without restriction, provided that you -duplicate all of the original copyright notices and associated disclaimers. - -2. You may apply bug fixes, portability fixes and other modifications -derived from the Public Domain or from the Copyright Holder. A Package -modified in such a way shall still be considered the Standard Version. - -3. You may otherwise modify your copy of this Package in any way, provided -that you insert a prominent notice in each changed file stating how and -when you changed that file, and provided that you do at least ONE of the -following: - - a) place your modifications in the Public Domain or otherwise make them - Freely Available, such as by posting said modifications to Usenet or - an equivalent medium, or placing the modifications on a major archive - site such as uunet.uu.net, or by allowing the Copyright Holder to include - your modifications in the Standard Version of the Package. - - b) use the modified Package only within your corporation or organization. - - c) rename any non-standard executables so the names do not conflict - with standard executables, which must also be provided, and provide - a separate manual page for each non-standard executable that clearly - documents how it differs from the Standard Version. - - d) make other distribution arrangements with the Copyright Holder. - -4. You may distribute the programs of this Package in object code or -executable form, provided that you do at least ONE of the following: - - a) distribute a Standard Version of the executables and library files, - together with instructions (in the manual page or equivalent) on where - to get the Standard Version. - - b) accompany the distribution with the machine-readable source of - the Package with your modifications. - - c) accompany any non-standard executables with their corresponding - Standard Version executables, giving the non-standard executables - non-standard names, and clearly documenting the differences in manual - pages (or equivalent), together with instructions on where to get - the Standard Version. - - d) make other distribution arrangements with the Copyright Holder. - -5. You may charge a reasonable copying fee for any distribution of this -Package. You may charge any fee you choose for support of this Package. -You may not charge a fee for this Package itself. However, -you may distribute this Package in aggregate with other (possibly -commercial) programs as part of a larger (possibly commercial) software -distribution provided that you do not advertise this Package as a -product of your own. - -6. The scripts and library files supplied as input to or produced as -output from the programs of this Package do not automatically fall -under the copyright of this Package, but belong to whomever generated -them, and may be sold commercially, and may be aggregated with this -Package. - -7. C subroutines supplied by you and linked into this Package in order -to emulate subroutines and variables of the language defined by this -Package shall not be considered part of this Package, but are the -equivalent of input as in Paragraph 6, provided these subroutines do -not change the language in any way that would cause it to fail the -regression tests for the language. - -8. The name of the Copyright Holder may not be used to endorse or promote -products derived from this software without specific prior written permission. - -9. THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR -IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED -WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - The End diff --git a/usr.bin/ee/doc/ee.i18n.guide b/usr.bin/ee/doc/ee.i18n.guide deleted file mode 100644 index 0850c2e..0000000 --- a/usr.bin/ee/doc/ee.i18n.guide +++ /dev/null @@ -1,141 +0,0 @@ -Easy Editor ("ee") provides the ability to translate the messages displayed to -the user and the commands entered. This is done via message catalogs, -following X/Open standards. ee only supports eight bit characters. - -(The name ee.i18n.guide is for "ee internationalization guide". The i18n -abbreviation is used because there are 18 characters between the first -letter ("i") and last ("n") of "internationalization".) - -All of the messages, warnings, information, and commands, are contained in the -message catalog. Each numbered entry represents an individual string used by -ee. Some strings contain formatting information for formatted print -statements, which are of the form "%s", or "%d", these must be preserved in -the translation, or the correct information will not be displayed. For those -strings containing multiple formatting codes, the order of each item must be -preserved as well. - -Message content -1 title for modes, or settings menu -2 - 8 entries for modes menu, each line should be the same length - (padded with spaces) -9 - 34 other menu titles and entries -35 - 56 help screen -57 - 61 actions assigned to control keys -62 - 66 commands information -67 message displayed when info window turned off -68 indication that no file name was entered when invoking ee -69 prompt for decimal value of character to be entered -70 message displaying the print command being invoked -71 prompt for command -72 prompt for name of file to be written -73 prompt for name of file to be read -74 string used to display the decimal value of the character - the cursor is on -75 string displaying an unrecognized command -76 string indicating that the command entered is not a unique - substring of a valid command -77 string indicating the current line number -78 string for displaying the length of the line -79 string for displaying the name of the file -80 - 83 strings showing how to invoke ee, and its options -84 message indicating that the file entered is a directory, not a - text file -85 message informing that the entered file does not yet exist -86 message informing that the file can't be opened (because of - permission problems) -87 message after file has been read with the file name and number - of lines read -88 message indicating that the file has been read -89 message indicating that the file is being read -90 message indicating that permissions only allow the file to be - read, not written -91 message after file has been read with the file name and number - of lines read -92 prompt for name of file to be saved (used when no name was - entered for a file to edit) -93 message indicating that the file was not written, since no - name was entered at the prompt -94 prompt asking user if changes should not be saved ("yes_char" - will be expected for affirmative response) -95 "yes" character, single character expected to confirm action - (can be upper or lower case, will be converted to upper-case - during test) -96 prompt -97 error message -98 message indicating that the named file is being written -99 message indicating the name of the file written, the number of - lines, and the number of characters (order of items must be - maintained) -100 search in progress message -101 message that the string was not found -102 prompt for search -103 message that string could not be executed -104 self-explanatory -105 message for menus, indicating that the Escape character will - allow the user to exit the menu -106 error message indicating the menu won't fit on the screen -107 self-explanatory -108 prompt for shell command -109 message displayed while formatting a paragraph -110 string which places message for spell checking at top of - buffer (the portions 'list of unrecognized words' and - '-=-=-=-=-=-' may be replaced, but the rest must remain the - same) -111 message informing that spell checking is in progress -112 prompt for right margin -113 error informing user that operation is not permitted in ree -114 string indicating mode is turned 'on' in modes menu -115 string indicating mode is turned 'off' in modes menu -116 - 131 strings used for commands (some also used for initialization) -132 - 144 strings used for initialization -145 entry for settings menu for emacs key bindings settings -146 - 153 help screen entries for emacs key bindings info -154 - 158 info window entries for emacs key bindings info -159 string for turning on emacs key bindings in the init file -160 string for turning off emacs key bindings in the init file - -Care should be taken when translating commands and initialization keywords -because the algorithm used for detecting uniqueness of entered commands -will not be able to distinguish words that are not unique before the end -of the shorter word, for example, it would not be able to distinguish the -command 'abcd' from 'abcde'. - -After translating the messages, use the 'gencat' command to create the compiled -catalog used when running the software. The standard syntax would be: - - gencat ee.cat ee.msg - -Where ee.msg is the file containing the translations, and ee.cat is the -compiled catalog. If the file ee.cat does not exist, it will be created. -Check the documentation for your system for proper syntax. - -Message catalog placement varies from system to system. A common location -for message catalogs is in /usr/lib/nls. In this directory are -directories with the names of other languages. The default language is -'C'. There is also an environment variable, named NLSPATH used to -determine where message catalogs can be found. This variable is similar -to the PATH variable used for commands, but with some differences. The -NLSPATH variable must have the ability to handle different names for -languages and the catalog files, so it has field descriptors for these. A -typical setting for NLSPATH could be: - - NLSPATH=/usr/lib/nls/%L/%N.cat:/usr/local/lib/nls/%L/%N.cat - -Where "%L" is the field descriptor for the language (obtained from the -LANG environment variable) and "%N" is the name of the file (with the -".cat" appended by the path variable, it is not passed from the requesting -program). The colon (:) is used to separate paths, so in the above -example there are two paths possible for message catalogs. You may wish -to maintain catalogs for applications that are not supported by your -system vendor in a location unique for you, and this is facilitated by the -NLSPATH variable. Remember to set and export both the LANG and NLSPATH -variables for each user that expects to use localization either in a -system-wide profile or in each user's profile. See your system -documentation for more information. - -The message catalog supplied with ee also uses the '$quote' directive to -specify a quote around strings to ensure proper padding. This directive -may not be supported on all systems, and lead to quotes being included in -the string used in ee, which will cause incorrect behavior. If the -'$quote' directive is not supported by your system's gencat command, edit -the msg file to remove the leading and trailing quotation marks. diff --git a/usr.bin/ee/doc/new_curse.c b/usr.bin/ee/doc/new_curse.c deleted file mode 100644 index 0e6cd54..0000000 --- a/usr.bin/ee/doc/new_curse.c +++ /dev/null @@ -1,3574 +0,0 @@ -/* - | new_curse.c - | - | A subset of curses developed for use with ae. - | - | written by Hugh Mahon - | - | THIS MATERIAL IS PROVIDED "AS IS". THERE ARE - | NO WARRANTIES OF ANY KIND WITH REGARD TO THIS - | MATERIAL, INCLUDING, BUT NOT LIMITED TO, THE - | IMPLIED WARRANTIES OF MERCHANTABILITY AND - | FITNESS FOR A PARTICULAR PURPOSE. Neither - | Hewlett-Packard nor Hugh Mahon shall be liable - | for errors contained herein, nor for - | incidental or consequential damages in - | connection with the furnishing, performance or - | use of this material. Neither Hewlett-Packard - | nor Hugh Mahon assumes any responsibility for - | the use or reliability of this software or - | documentation. This software and - | documentation is totally UNSUPPORTED. There - | is no support contract available. Hewlett- - | Packard has done NO Quality Assurance on ANY - | of the program or documentation. You may find - | the quality of the materials inferior to - | supported materials. - | - | This software is not a product of Hewlett-Packard, Co., or any - | other company. No support is implied or offered with this software. - | You've got the source, and you're on your own. - | - | This software may be distributed under the terms of Larry Wall's - | Artistic license, a copy of which is included in this distribution. - | - | This notice must be included with this software and any derivatives. - | - | Copyright (c) 1986, 1987, 1988, 1991, 1992, 1993, 1994, 1995 Hugh Mahon - | All are rights reserved. - | - | $Header: /home/hugh/sources/old_ae/RCS/new_curse.c,v 1.37 1995/08/28 23:49:26 hugh Exp $ - | - */ - -char *copyright_message[] = { "Copyright (c) 1986, 1987, 1988, 1991, 1992, 1993, 1994, 1995 Hugh Mahon", - "All rights are reserved."}; - -char * new_curse_name= "@(#) new_curse.c $Revision: 1.37 $"; - -#include "new_curse.h" -#include -#include - -#ifdef SYS5 -#include -#else -#include -#endif - -#ifdef BSD_SELECT -#include -#include - -#ifdef SLCT_HDR -#include /* on AIX */ -#endif /* SLCT_HDR */ - -#endif /* BSD_SELECT */ - -#ifdef HAS_STDLIB -#include -#endif - -#if defined(__STDC__) -#include -#else -#include -#endif - -#ifdef HAS_UNISTD -#include -#endif - -#ifdef HAS_SYS_IOCTL -#include -#endif - - -WINDOW *curscr; -static WINDOW *virtual_scr; -WINDOW *stdscr; -WINDOW *last_window_refreshed; - -#ifdef TIOCGWINSZ - struct winsize ws; -#endif - -#define min(a, b) (a < b ? a : b) - -#ifndef CAP -#define String_Out(table, stack, place) Info_Out(table, stack, place) -#else -#define String_Out(table, stack, place) Cap_Out(table, stack, place) -#endif - -#define bw__ 0 /* booleans */ -#define am__ 1 -#define xb__ 2 -#define xs__ 3 /* hp glitch (standout not erased by overwrite) */ -#define xn__ 4 -#define eo__ 5 -#define gn__ 6 /* generic type terminal */ -#define hc__ 7 /* hardcopy terminal */ -#define km__ 8 -#define hs__ 9 -#define in__ 10 -#define da__ 11 -#define db__ 12 -#define mi__ 13 /* safe to move during insert mode */ -#define ms__ 14 /* safe to move during standout mode */ -#define os__ 15 -#define es__ 16 -#define xt__ 17 -#define hz__ 18 /* hazeltine glitch */ -#define ul__ 19 -#define xo__ 20 -#define chts__ 21 -#define nxon__ 22 -#define nrrmc__ 23 -#define npc__ 24 -#define mc5i__ 25 - -#define co__ 0 /* number of columns */ /* numbers */ -#define it__ 1 /* spaces per tab */ -#define li__ 2 /* number of lines */ -#define lm__ 3 -#define sg__ 4 /* magic cookie glitch */ -#define pb__ 5 -#define vt__ 6 -#define ws__ 7 - -#define cols__ 0 -#define lines__ 2 -#define xmc__ 4 -#define vt__ 6 -#define wsl__ 7 -#define nlab__ 8 -#define lh__ 9 -#define lw__ 10 - -#define bt__ 0 /* back tab */ /* strings */ -#define bl__ 1 /* bell */ -#define cr__ 2 /* carriage return */ -#define cs__ 3 /* change scroll region */ -#define ct__ 4 /* clear all tab stops */ -#define cl__ 5 /* clear screen and home cursor */ -#define ce__ 6 /* clear to end of line */ -#define cd__ 7 /* clear to end of display */ -#define ch__ 8 /* set cursor column */ -#define CC__ 9 /* term, settable cmd char in */ -#define cm__ 10 /* screen rel cursor motion, row, column */ -#define do__ 11 /* down one line */ -#define ho__ 12 /* home cursor */ -#define vi__ 13 /* make cursor invisible */ -#define le__ 14 /* move cursor left one space */ -#define CM__ 15 /* memory rel cursor addressing */ -#define ve__ 16 /* make cursor appear normal */ -#define nd__ 17 /* non-destructive space (cursor right) */ -#define ll__ 18 /* last line, first col */ -#define up__ 19 /* cursor up */ -#define vs__ 20 -#define dc__ 21 /* delete character */ -#define dl__ 22 /* delete line */ -#define ds__ 23 -#define hd__ 24 -#define as__ 25 -#define mb__ 26 -#define md__ 27 /* turn on bold */ -#define ti__ 28 -#define dm__ 29 /* turn on delete mode */ -#define mh__ 30 /* half bright mode */ -#define im__ 31 /* insert mode */ -#define mk__ 32 -#define mp__ 33 -#define mr__ 34 -#define so__ 35 /* enter standout mode */ -#define us__ 36 -#define ec__ 37 -#define ae__ 38 -#define me__ 39 -#define te__ 40 -#define ed__ 41 -#define ei__ 42 /* exit insert mode */ -#define se__ 43 /* exit standout mode */ -#define ue__ 44 -#define vb__ 45 -#define ff__ 46 -#define fs__ 47 -#define i1__ 48 -#define i2__ 49 -#define i3__ 50 -#define if__ 51 -#define ic__ 52 -#define al__ 53 -#define ip__ 54 -#define kb__ 55 /* backspace key */ -#define ka__ 56 -#define kC__ 57 -#define kt__ 58 -#define kD__ 59 -#define kL__ 60 -#define kd__ 61 -#define kM__ 62 -#define kE__ 63 -#define kS__ 64 -#define k0__ 65 -#define k1__ 66 -#define kf10__ 67 -#define k2__ 68 -#define k3__ 69 -#define k4__ 70 -#define k5__ 71 -#define k6__ 72 -#define k7__ 73 -#define k8__ 74 -#define k9__ 75 -#define kh__ 76 -#define kI__ 77 -#define kA__ 78 -#define kl__ 79 -#define kH__ 80 -#define kN__ 81 -#define kP__ 82 -#define kr__ 83 -#define kF__ 84 -#define kR__ 85 -#define kT__ 86 -#define ku__ 87 /* key up */ -#define ke__ 88 -#define ks__ 89 -#define l0__ 90 -#define l1__ 91 -#define la__ 92 -#define l2__ 93 -#define l3__ 94 -#define l4__ 95 -#define l5__ 96 -#define l6__ 97 -#define l7__ 98 -#define l8__ 99 -#define l9__ 100 -#define mo__ 101 -#define mm__ 102 -#define nw__ 103 -#define pc__ 104 -#define DC__ 105 -#define DL__ 106 -#define DO__ 107 -#define IC__ 118 -#define SF__ 109 -#define AL__ 110 -#define LE__ 111 -#define RI__ 112 -#define SR__ 113 -#define UP__ 114 -#define pk__ 115 -#define pl__ 116 -#define px__ 117 -#define ps__ 118 -#define pf__ 119 -#define po__ 120 -#define rp__ 121 -#define r1__ 122 -#define r2__ 123 -#define r3__ 124 -#define rf__ 125 -#define rc__ 126 -#define cv__ 127 -#define sc__ 128 -#define sf__ 129 -#define sr__ 130 -#define sa__ 131 /* sgr */ -#define st__ 132 -#define wi__ 133 -#define ta__ 134 -#define ts__ 135 -#define uc__ 136 -#define hu__ 137 -#define iP__ 138 -#define K1__ 139 -#define K2__ 140 -#define K3__ 141 -#define K4__ 142 -#define K5__ 143 -#define pO__ 144 -#define ml__ 145 -#define mu__ 146 -#define rmp__ 145 -#define acsc__ 146 -#define pln__ 147 -#define kcbt__ 148 -#define smxon__ 149 -#define rmxon__ 150 -#define smam__ 151 -#define rmam__ 152 -#define xonc__ 153 -#define xoffc__ 154 -#define enacs__ 155 -#define smln__ 156 -#define rmln__ 157 -#define kbeg__ 158 -#define kcan__ 159 -#define kclo__ 160 -#define kcmd__ 161 -#define kcpy__ 162 -#define kcrt__ 163 -#define kend__ 164 -#define kent__ 165 -#define kext__ 166 -#define kfnd__ 167 -#define khlp__ 168 -#define kmrk__ 169 -#define kmsg__ 170 -#define kmov__ 171 -#define knxt__ 172 -#define kopn__ 173 -#define kopt__ 174 -#define kprv__ 175 -#define kprt__ 176 -#define krdo__ 177 -#define kref__ 178 -#define krfr__ 179 -#define krpl__ 180 -#define krst__ 181 -#define kres__ 182 -#define ksav__ 183 -#define kspd__ 184 -#define kund__ 185 -#define kBEG__ 186 -#define kCAN__ 187 -#define kCMD__ 188 -#define kCPY__ 189 -#define kCRT__ 190 -#define kDC__ 191 -#define kDL__ 192 -#define kslt__ 193 -#define kEND__ 194 -#define kEOL__ 195 -#define kEXT__ 196 -#define kFND__ 197 -#define kHLP__ 198 -#define kHOM__ 199 -#define kIC__ 200 -#define kLFT__ 201 -#define kMSG__ 202 -#define kMOV__ 203 -#define kNXT__ 204 -#define kOPT__ 205 -#define kPRV__ 206 -#define kPRT__ 207 -#define kRDO__ 208 -#define kRPL__ 209 -#define kRIT__ 210 -#define kRES__ 211 -#define kSAV__ 212 -#define kSPD__ 213 -#define kUND__ 214 -#define rfi__ 215 -#define kf11__ 216 -#define kf12__ 217 -#define kf13__ 218 -#define kf14__ 219 -#define kf15__ 220 -#define kf16__ 221 -#define kf17__ 222 -#define kf18__ 223 -#define kf19__ 224 -#define kf20__ 225 -#define kf21__ 226 -#define kf22__ 227 -#define kf23__ 228 -#define kf24__ 229 -#define kf25__ 230 -#define kf26__ 231 -#define kf27__ 232 -#define kf28__ 233 -#define kf29__ 234 -#define kf30__ 235 -#define kf31__ 236 -#define kf32__ 237 -#define kf33__ 238 -#define kf34__ 239 -#define kf35__ 240 -#define kf36__ 241 -#define kf37__ 242 -#define kf38__ 243 -#define kf39__ 244 -#define kf40__ 245 -#define kf41__ 246 -#define kf42__ 247 -#define kf43__ 248 -#define kf44__ 249 -#define kf45__ 250 -#define kf46__ 251 -#define kf47__ 252 -#define kf48__ 253 -#define kf49__ 254 -#define kf50__ 255 -#define kf51__ 256 -#define kf52__ 257 -#define kf53__ 258 -#define kf54__ 259 -#define kf55__ 260 -#define kf56__ 261 -#define kf57__ 262 -#define kf58__ 263 -#define kf59__ 264 -#define kf60__ 265 -#define kf61__ 266 -#define kf62__ 267 -#define kf63__ 268 -#define el1__ 269 -#define mgc__ 270 -#define smgl__ 271 -#define smgr__ 272 - -#ifdef CAP -char *Boolean_names[] = { -"bw", "am", "xb", "xs", "xn", "eo", "gn", "hc", "km", "hs", "in", "da", "db", -"mi", "ms", "os", "es", "xt", "hz", "ul", "xo", "HC", "nx", "NR", "NP", "5i" -}; - -char *Number_names[] = { -"co#", "it#", "li#", "lm#", "sg#", "pb#", "vt#", "ws#", "Nl#", "lh#", "lw#" -}; - -char *String_names[] = { -"bt=", "bl=", "cr=", "cs=", "ct=", "cl=", "ce=", "cd=", "ch=", "CC=", "cm=", -"do=", "ho=", "vi=", "le=", "CM=", "ve=", "nd=", "ll=", "up=", "vs=", "dc=", -"dl=", "ds=", "hd=", "as=", "mb=", "md=", "ti=", "dm=", "mh=", "im=", "mk=", -"mp=", "mr=", "so=", "us=", "ec=", "ae=", "me=", "te=", "ed=", "ei=", "se=", -"ue=", "vb=", "ff=", "fs=", "i1=", "i2=", "i3=", "if=", "ic=", "al=", "ip=", -"kb=", "ka=", "kC=", "kt=", "kD=", "kL=", "kd=", "kM=", "kE=", "kS=", "k0=", -"k1=", "k;=", "k2=", "k3=", "k4=", "k5=", "k6=", "k7=", "k8=", "k9=", "kh=", -"kI=", "kA=", "kl=", "kH=", "kN=", "kP=", "kr=", "kF=", "kR=", "kT=", "ku=", -"ke=", "ks=", "l0=", "l1=", "la=", "l2=", "l3=", "l4=", "l5=", "l6=", "l7=", -"l8=", "l9=", "mo=", "mm=", "nw=", "pc=", "DC=", "DL=", "DO=", "IC=", "SF=", -"AL=", "LE=", "RI=", "SR=", "UP=", "pk=", "pl=", "px=", "ps=", "pf=", "po=", -"rp=", "r1=", "r2=", "r3=", "rf=", "rc=", "cv=", "sc=", "sf=", "sr=", "sa=", -"st=", "wi=", "ta=", "ts=", "uc=", "hu=", "iP=", "K1=", "K3=", "K2=", "K4=", -"K5=", "pO=", "rP=", "ac=", "pn=", "kB=", "SX=", "RX=", "SA=", "RA=", "XN=", -"XF=", "eA=", "LO=", "LF=", "@1=", "@2=", "@3=", "@4=", "@5=", "@6=", "@7=", -"@8=", "@9=", "@0=", "%1=", "%2=", "%3=", "%4=", "%5=", "%6=", "%7=", "%8=", -"%9=", "%0=", "&1=", "&2=", "&3=", "&4=", "&5=", "&6=", "&7=", "&8=", "&9=", -"&0=", "*1=", "*2=", "*3=", "*4=", "*5=", "*6=", "*7=", "*8=", "*9=", "*0=", -"#1=", "#2=", "#3=", "#4=", "%a=", "%b=", "%c=", "%d=", "%e=", "%f=", "%g=", -"%h=", "%i=", "%j=", "!1=", "!2=", "!3=", "RF=", "F1=", "F2=", "F3=", "F4=", -"F5=", "F6=", "F7=", "F8=", "F9=", "FA=", "FB=", "FC=", "FD=", "FE=", "FF=", -"FG=", "FH=", "FI=", "FJ=", "FK=", "FL=", "FM=", "FN=", "FO=", "FP=", "FQ=", -"FR=", "FS=", "FT=", "FU=", "FV=", "FW=", "FX=", "FY=", "FZ=", "Fa=", "Fb=", -"Fc=", "Fd=", "Fe=", "Ff=", "Fg=", "Fh=", "Fi=", "Fj=", "Fk=", "Fl=", "Fm=", -"Fn=", "Fo=", "Fp=", "Fq=", "Fr=", "cb=", "MC=", "ML=", "MR=" -}; -#endif - -char *new_curse = "October 1987"; - -char in_buff[100]; /* buffer for ungetch */ -int bufp; /* next free position in in_buff */ - -char *TERMINAL_TYPE = NULL; /* terminal type to be gotten from environment */ -int CFOUND = FALSE; -int Data_Line_len = 0; -int Max_Key_len; /* max length of a sequence sent by a key */ -char *Data_Line = NULL; -char *TERM_PATH = NULL; -char *TERM_data_ptr = NULL; -char *Term_File_name = NULL; /* name of file containing terminal description */ -FILE *TFP; /* file pointer to file with terminal des. */ -int Fildes; /* file descriptor for terminfo file */ -int STAND = FALSE; /* is standout mode activated? */ -int TERM_INFO = FALSE; /* is terminfo being used (TRUE), or termcap (FALSE) */ -int Time_Out; /* set when time elapsed while trying to read function key */ -int Curr_x; /* current x position on screen */ -int Curr_y; /* current y position on the screen */ -int LINES; -int COLS; -int Move_It; /* flag to move cursor if magic cookie glitch */ -int initialized = FALSE; /* tells whether new_curse is initialized */ -float speed; -float chars_per_millisecond; -int Repaint_screen; /* if an operation to change screen impossible, repaint screen */ -int Intr; /* storeage for interrupt character */ -int Parity; /* 0 = no parity, 1 = odd parity, 2 = even parity */ -int Noblock; /* for BSD systems */ -int Num_bits; /* number of bits per character */ -int Flip_Bytes; /* some systems have byte order reversed */ -int interrupt_flag = FALSE; /* set true if SIGWINCH received */ - -#ifndef CAP -char *Strings; -#endif - -struct KEYS { - int length; /* length of string sent by key */ - char *string; /* string sent by key */ - int value; /* CURSES value of key (9-bit) */ - }; - -struct KEY_STACK { - struct KEYS *element; - struct KEY_STACK *next; - }; - -struct KEY_STACK *KEY_TOS = NULL; -struct KEY_STACK *KEY_POINT; - -struct Parameters { - int value; - struct Parameters *next; - }; - -int Key_vals[] = { - 0407, 0526, 0515, 0525, 0512, 0510, 0402, 0514, 0517, 0516, 0410, 0411, - 0422, 0412, 0413, 0414, 0415, 0416, 0417, 0420, 0421, 0406, 0513, 0511, - 0404, 0533, 0522, 0523, 0405, 0520, 0521, 0524, 0403, - 0534, 0535, 0536, 0537, 0540, 0541, 0542, 0543, 0544, 0545, 0546, 0547, - 0550, 0527, 0551, 0552, 0553, 0554, 0555, 0556, 0557, 0560, 0561, 0562, - 0532, 0563, 0564, 0565, 0566, 0567, 0570, 0571, 0627, 0630, 0572, 0573, - 0574, 0575, 0576, 0577, 0600, 0601, 0602, 0603, 0604, 0605, 0606, 0607, - 0610, 0611, 0612, 0613, 0614, 0615, 0616, 0617, 0620, 0621, 0622, 0623, - 0624, 0625, 0626, 0423, 0424, 0425, 0426, 0427, 0430, 0431, - 0432, 0433, 0434, 0435, 0436, 0437, 0440, 0441, 0442, 0443, 0444, 0445, - 0446, 0447, 0450, 0451, 0452, 0453, 0454, 0455, 0456, 0457, 0460, 0461, - 0462, 0463, 0464, 0465, 0466, 0467, 0470, 0471, 0472, 0473, 0474, 0475, - 0476, 0477, 0500, 0501, 0502, 0503, 0504, 0505, 0506, 0507 -}; - -int attributes_set[9]; - -#ifdef SYS5 -struct termio Terminal; -struct termio Saved_tty; -#else -struct sgttyb Terminal; -struct sgttyb Saved_tty; -#endif - -char *tc_; - -int Booleans[128]; -int Numbers[128]; -char *String_table[1024]; - -int *virtual_lines; - -static char nc_scrolling_ability = FALSE; - -#ifdef CAP - -#if __STDC__ || defined(__cplusplus) -#define P_(s) s -#else -#define P_(s) () -#endif /* __STDC__ */ - -int tc_Get_int P_((int)); -void CAP_PARSE P_((void)); -void Find_term P_((void)); - -#undef P_ - -#endif /* CAP */ - - -#ifndef __STDC__ -#ifndef HAS_STDLIB -extern char *fgets(); -extern char *malloc(); -extern char *getenv(); -FILE *fopen(); /* declaration for open function */ -#endif /* HAS_STDLIB */ -#endif /* __STDC__ */ - -#ifdef SIGWINCH - -/* - | Copy the contents of one window to another. - */ - -void -copy_window(origin, destination) -WINDOW *origin, *destination; -{ - int row, column; - struct _line *orig, *dest; - - orig = origin->first_line; - dest = destination->first_line; - - for (row = 0; - row < (min(origin->Num_lines, destination->Num_lines)); - row++) - { - for (column = 0; - column < (min(origin->Num_cols, destination->Num_cols)); - column++) - { - dest->row[column] = orig->row[column]; - dest->attributes[column] = orig->attributes[column]; - } - dest->changed = orig->changed; - dest->scroll = orig->scroll; - dest->last_char = min(orig->last_char, destination->Num_cols); - orig = orig->next_screen; - dest = dest->next_screen; - } - destination->LX = min((destination->Num_cols - 1), origin->LX); - destination->LY = min((destination->Num_lines - 1), origin->LY); - destination->Attrib = origin->Attrib; - destination->scroll_up = origin->scroll_up; - destination->scroll_down = origin->scroll_down; - destination->SCROLL_CLEAR = origin->SCROLL_CLEAR; -} - -void -reinitscr(foo) -int foo; -{ - WINDOW *local_virt; - WINDOW *local_std; - WINDOW *local_cur; - - signal(SIGWINCH, reinitscr); -#ifdef TIOCGWINSZ - if (ioctl(0, TIOCGWINSZ, &ws) >= 0) - { - if (ws.ws_row == LINES && ws.ws_col == COLS) - return; - if (ws.ws_row > 0) - LINES = ws.ws_row; - if (ws.ws_col > 0) - COLS = ws.ws_col; - } -#endif /* TIOCGWINSZ */ - local_virt = newwin(LINES, COLS, 0, 0); - local_std = newwin(LINES, COLS, 0, 0); - local_cur = newwin(LINES, COLS, 0, 0); - copy_window(virtual_scr, local_virt); - copy_window(stdscr, local_std); - copy_window(curscr, local_cur); - delwin(virtual_scr); - delwin(stdscr); - delwin(curscr); - virtual_scr = local_virt; - stdscr = local_std; - curscr = local_cur; - free(virtual_lines); - virtual_lines = (int *) malloc(LINES * (sizeof(int))); - interrupt_flag = TRUE; -} -#endif /* SIGWINCH */ - -void -initscr() /* initialize terminal for operations */ -{ - int value; - char *lines_string; - char *columns_string; -#ifdef CAP - char *pointer; -#endif /* CAP */ - -#ifdef DIAG -printf("starting initscr \n");fflush(stdout); -#endif - if (initialized) - return; -#ifdef BSD_SELECT - setbuf(stdin, NULL); -#endif /* BSD_SELECT */ - Flip_Bytes = FALSE; - Parity = 0; - Time_Out = FALSE; - bufp = 0; - Move_It = FALSE; - Noblock = FALSE; -#ifdef SYS5 - value = ioctl(0, TCGETA, &Terminal); - if (Terminal.c_cflag & PARENB) - { - if (Terminal.c_cflag & PARENB) - Parity = 1; - else - Parity = 2; - } - if ((Terminal.c_cflag & CS8) == CS8) - { - Num_bits = 8; - } - else if ((Terminal.c_cflag & CS7) == CS7) - Num_bits = 7; - else if ((Terminal.c_cflag & CS6) == CS6) - Num_bits = 6; - else - Num_bits = 5; - value = Terminal.c_cflag & 037; - switch (value) { - case 01: speed = 50.0; - break; - case 02: speed = 75.0; - break; - case 03: speed = 110.0; - break; - case 04: speed = 134.5; - break; - case 05: speed = 150.0; - break; - case 06: speed = 200.0; - break; - case 07: speed = 300.0; - break; - case 010: speed = 600.0; - break; - case 011: speed = 900.0; - break; - case 012: speed = 1200.0; - break; - case 013: speed = 1800.0; - break; - case 014: speed = 2400.0; - break; - case 015: speed = 3600.0; - break; - case 016: speed = 4800.0; - break; - case 017: speed = 7200.0; - break; - case 020: speed = 9600.0; - break; - case 021: speed = 19200.0; - break; - case 022: speed = 38400.0; - break; - default: speed = 0.0; - } -#else - value = ioctl(0, TIOCGETP, &Terminal); - if (Terminal.sg_flags & EVENP) - Parity = 2; - else if (Terminal.sg_flags & ODDP) - Parity = 1; - value = Terminal.sg_ospeed; - switch (value) { - case 01: speed = 50.0; - break; - case 02: speed = 75.0; - break; - case 03: speed = 110.0; - break; - case 04: speed = 134.5; - break; - case 05: speed = 150.0; - break; - case 06: speed = 200.0; - break; - case 07: speed = 300.0; - break; - case 010: speed = 600.0; - break; - case 011: speed = 1200.0; - break; - case 012: speed = 1800.0; - break; - case 013: speed = 2400.0; - break; - case 014: speed = 4800.0; - break; - case 015: speed = 9600.0; - break; - default: speed = 0.0; - } -#endif - chars_per_millisecond = (0.001 * speed) / 8.0; - TERMINAL_TYPE = getenv("TERM"); - if (TERMINAL_TYPE == NULL) - { - printf("unknown terminal type\n"); - exit(0); - } -#ifndef CAP - Fildes = -1; - TERM_PATH = getenv("TERMINFO"); - if (TERM_PATH != NULL) - { - Data_Line_len = 23 + strlen(TERM_PATH) + strlen(TERMINAL_TYPE); - Term_File_name = malloc(Data_Line_len); - sprintf(Term_File_name, "%s/%c/%s", TERM_PATH, *TERMINAL_TYPE, TERMINAL_TYPE); - Fildes = open(Term_File_name, O_RDONLY); - } - if (Fildes == -1) - { - TERM_PATH = "/usr/lib/terminfo"; - Data_Line_len = 23 + strlen(TERM_PATH) + strlen(TERMINAL_TYPE); - Term_File_name = malloc(Data_Line_len); - sprintf(Term_File_name, "%s/%c/%s", TERM_PATH, *TERMINAL_TYPE, TERMINAL_TYPE); - Fildes = open(Term_File_name, O_RDONLY); - } - if (Fildes == -1) - { - TERM_PATH = "/usr/share/lib/terminfo"; - Data_Line_len = 23 + strlen(TERM_PATH) + strlen(TERMINAL_TYPE); - Term_File_name = malloc(Data_Line_len); - sprintf(Term_File_name, "%s/%c/%s", TERM_PATH, *TERMINAL_TYPE, TERMINAL_TYPE); - Fildes = open(Term_File_name, O_RDONLY); - } - if (Fildes == -1) - { - free(Term_File_name); - Term_File_name = NULL; - } - else - TERM_INFO = INFO_PARSE(); -#else - /* - | termcap information can be in the TERMCAP env variable, if so - | use that, otherwise check the /etc/termcap file - */ - if ((pointer = Term_File_name = getenv("TERMCAP")) != NULL) - { - if (*Term_File_name != '/') - Term_File_name = "/etc/termcap"; - } - else - { - Term_File_name = "/etc/termcap"; - } - if ((TFP = fopen(Term_File_name, "r")) == NULL) - { - printf("unable to open /etc/termcap file \n"); - exit(0); - } - for (value = 0; value < 1024; value++) - String_table[value] = NULL; - for (value = 0; value < 128; value++) - Booleans[value] = 0; - for (value = 0; value < 128; value++) - Numbers[value] = 0; - Data_Line = malloc(512); - if (pointer && *pointer != '/') - { - TERM_data_ptr = pointer; - CAP_PARSE(); - } - else - { - Find_term(); - CAP_PARSE(); - } -#endif - if (String_table[pc__] == NULL) - String_table[pc__] = "\0"; - if ((String_table[cm__] == NULL) || (Booleans[hc__])) - { - fprintf(stderr, "sorry, unable to use this terminal type for screen editing\n"); - exit(0); - } - Key_Get(); - LINES = Numbers[li__]; - COLS = Numbers[co__]; - if ((lines_string = getenv("LINES")) != NULL) - { - value = atoi(lines_string); - if (value > 0) - LINES = value; - } - if ((columns_string = getenv("COLUMNS")) != NULL) - { - value = atoi(columns_string); - if (value > 0) - COLS = value; - } -#ifdef TIOCGWINSZ - /* - | get the window size - */ - if (ioctl(0, TIOCGWINSZ, &ws) >= 0) - { - if (ws.ws_row > 0) - LINES = ws.ws_row; - if (ws.ws_col > 0) - COLS = ws.ws_col; - } -#endif - virtual_scr = newwin(LINES, COLS, 0, 0); - stdscr = newwin(LINES, COLS, 0, 0); - curscr = newwin(LINES, COLS, 0, 0); - wmove(stdscr, 0, 0); - werase(stdscr); - Repaint_screen = TRUE; - initialized = TRUE; - virtual_lines = (int *) malloc(LINES * (sizeof(int))); - -#ifdef SIGWINCH - /* - | reset size of windows and LINES and COLS if term window - | changes size - */ - signal(SIGWINCH, reinitscr); -#endif /* SIGWINCH */ - - /* - | check if scrolling is available - */ - - nc_scrolling_ability = ((String_table[al__] != NULL) && - (String_table[dl__])) || ((String_table[cs__]) - && (String_table[sr__])); - -} - -#ifndef CAP -int -Get_int() /* get a two-byte integer from the terminfo file */ -{ - int High_byte; - int Low_byte; - int temp; - - Low_byte = *((unsigned char *) TERM_data_ptr++); - High_byte = *((unsigned char *) TERM_data_ptr++); - if (Flip_Bytes) - { - temp = Low_byte; - Low_byte = High_byte; - High_byte = temp; - } - if ((High_byte == 255) && (Low_byte == 255)) - return (-1); - else - return(Low_byte + (High_byte * 256)); -} - -int -INFO_PARSE() /* parse off the data in the terminfo data file */ -{ - int offset; - int magic_number = 0; - int counter = 0; - int Num_names = 0; - int Num_bools = 0; - int Num_ints = 0; - int Num_strings = 0; - int string_table_len = 0; - char *temp_ptr; - - TERM_data_ptr = Data_Line = malloc((10240 * (sizeof(char)))); - Data_Line_len = read(Fildes, Data_Line, 10240); - if ((Data_Line_len >= 10240) || (Data_Line_len < 0)) - return(0); - /* - | get magic number - */ - magic_number = Get_int(); - /* - | if magic number not right, reverse byte order and check again - */ - if (magic_number != 282) - { - Flip_Bytes = TRUE; - TERM_data_ptr--; - TERM_data_ptr--; - magic_number = Get_int(); - if (magic_number != 282) - return(0); - } - /* - | get the number of each type in the terminfo data file - */ - Num_names = Get_int(); - Num_bools = Get_int(); - Num_ints = Get_int(); - Num_strings = Get_int(); - string_table_len = Get_int(); - Strings = malloc(string_table_len); - while (Num_names > 0) - { - TERM_data_ptr++; - Num_names--; - } - counter = 0; - while (Num_bools) - { - Num_bools--; - Booleans[counter++] = *TERM_data_ptr++; - } - if (((unsigned int) TERM_data_ptr) & 1) /* force alignment */ - TERM_data_ptr++; - counter = 0; - while (Num_ints) - { - Num_ints--; - Numbers[counter] = Get_int(); - counter++; - } - temp_ptr = TERM_data_ptr + Num_strings + Num_strings; - memcpy(Strings, temp_ptr, string_table_len); - counter = bt__; - while (Num_strings) - { - Num_strings--; - if ((offset=Get_int()) != -1) - { - if (String_table[counter] == NULL) - String_table[counter] = Strings + offset; - } - else - String_table[counter] = NULL; - counter++; - } - close(Fildes); - free(Data_Line); - return(TRUE); -} -#endif /* ifndef CAP */ - -int -AtoI() /* convert ascii text to integers */ -{ - int Temp; - - Temp = 0; - while ((*TERM_data_ptr >= '0') && (*TERM_data_ptr <= '9')) - { - Temp = (Temp * 10) + (*TERM_data_ptr - '0'); - TERM_data_ptr++; - } - return(Temp); -} - -void -Key_Get() /* create linked list with all key sequences obtained from terminal database */ -{ - int Counter; - int Klen; - int key_def; - struct KEY_STACK *Spoint; - - Max_Key_len = 0; - Counter = 0; - key_def = kb__; - while (key_def <= kf63__) - { - if (key_def == ke__) - key_def = K1__; - else if (key_def == (K5__ + 1)) - key_def = kcbt__; - else if (key_def == (kcbt__ + 1)) - key_def = kbeg__; - else if (key_def == (kUND__ + 1)) - key_def = kf11__; - if (String_table[key_def] != NULL) - { - if (KEY_TOS == NULL) - Spoint = KEY_TOS = (struct KEY_STACK *) malloc(sizeof(struct KEY_STACK)); - else - { - Spoint = KEY_TOS; - while (Spoint->next != NULL) - Spoint = Spoint->next; - Spoint->next = (struct KEY_STACK *) malloc(sizeof(struct KEY_STACK)); - Spoint = Spoint->next; - } - Spoint->next = NULL; - Spoint->element = (struct KEYS *) malloc(sizeof(struct KEYS)); - Spoint->element->string = String_table[key_def]; - Spoint->element->length = strlen(String_table[key_def]); - Spoint->element->value = Key_vals[Counter]; - Klen = strlen(Spoint->element->string); - if (Klen > Max_Key_len) - Max_Key_len = Klen; - /* - | Some terminal types accept keystrokes of the form - | \E[A and \EOA, substituting '[' for 'O'. Make a - | duplicate of such key strings (since the - | database will only have one version) so new_curse - | can understand both. - */ - if ((Spoint->element->length > 1) && - ((String_table[key_def][1] == '[') || - (String_table[key_def][1] == 'O'))) - { - Spoint->next = (struct KEY_STACK *) malloc(sizeof(struct KEY_STACK)); - Spoint = Spoint->next; - Spoint->next = NULL; - Spoint->element = (struct KEYS *) malloc(sizeof(struct KEYS)); - Spoint->element->length = strlen(String_table[key_def]); - Spoint->element->string = malloc(Spoint->element->length + 1); - strcpy(Spoint->element->string, String_table[key_def]); - Spoint->element->value = Key_vals[Counter]; - Klen = strlen(Spoint->element->string); - if (Klen > Max_Key_len) - Max_Key_len = Klen; - - if (String_table[key_def][1] == '[') - Spoint->element->string[1] = 'O'; - else - Spoint->element->string[1] = '['; - } - } - key_def++; - Counter++; - } -} - -#ifdef CAP -char * -String_Get(param) /* read the string */ -char *param; -{ - char *String; - char *Temp; - int Counter; - - if (param == NULL) - { - while (*TERM_data_ptr != '=') - TERM_data_ptr++; - Temp = ++TERM_data_ptr; - Counter = 1; - while ((*Temp != ':') && (*Temp != (char)NULL)) - { - Counter++; - Temp++; - } - if (Counter == 1) /* no data */ - return(NULL); - String = Temp = malloc(Counter); - while ((*TERM_data_ptr != ':') && (*TERM_data_ptr != (char)NULL)) - { - if (*TERM_data_ptr == '\\') - { - TERM_data_ptr++; - if (*TERM_data_ptr == 'n') - *Temp = '\n'; - else if (*TERM_data_ptr == 't') - *Temp = '\t'; - else if (*TERM_data_ptr == 'b') - *Temp = '\b'; - else if (*TERM_data_ptr == 'r') - *Temp = '\r'; - else if (*TERM_data_ptr == 'f') - *Temp = '\f'; - else if ((*TERM_data_ptr == 'e') || (*TERM_data_ptr == 'E')) - *Temp = '\033'; /* escape */ - else if (*TERM_data_ptr == '\\') - *Temp = '\\'; - else if (*TERM_data_ptr == '\'') - *Temp = '\''; - else if ((*TERM_data_ptr >= '0') && (*TERM_data_ptr <= '9')) - { - Counter = 0; - while ((*TERM_data_ptr >= '0') && (*TERM_data_ptr <= '9')) - { - Counter = (8 * Counter) + (*TERM_data_ptr - '0'); - TERM_data_ptr++; /* ? */ - } - *Temp = Counter; - TERM_data_ptr--; - } - TERM_data_ptr++; - Temp++; - } - else if (*TERM_data_ptr == '^') - { - TERM_data_ptr++; - if ((*TERM_data_ptr >= '@') && (*TERM_data_ptr <= '_')) - *Temp = *TERM_data_ptr - '@'; - else if (*TERM_data_ptr == '?') - *Temp = 127; - TERM_data_ptr++; - Temp++; - } - else - *Temp++ = *TERM_data_ptr++; - } - *Temp = (char)NULL; - param = String; - } - else - { - while ((*TERM_data_ptr != (char)NULL) && (*TERM_data_ptr != ':')) - TERM_data_ptr++; - } - return(param); -} - -int -tc_Get_int(param) /* read the integer */ -int param; -{ - int Itemp; - - if (param == 0) - { - while ((*TERM_data_ptr != (char)NULL) && (*TERM_data_ptr != '#')) - TERM_data_ptr++; - TERM_data_ptr++; - Itemp = AtoI(); - param = Itemp; - } - else - { - while (*TERM_data_ptr != ':') - TERM_data_ptr++; - } - return(param); -} - -void -Find_term() /* find terminal description in termcap file */ -{ - char *Name; - char *Ftemp; - - Ftemp = Name = malloc(strlen(TERMINAL_TYPE + 1) + 1); - strcpy(Name, TERMINAL_TYPE); - while (*Ftemp != (char)NULL) - Ftemp++; - *Ftemp++ = '|'; - *Ftemp = (char)NULL; - CFOUND = FALSE; - Data_Line_len = strlen(TERMINAL_TYPE) + 1; - while ((!CFOUND) && ((TERM_data_ptr=fgets(Data_Line, 512, TFP)) != NULL)) - { - if ((*TERM_data_ptr != ' ') && (*TERM_data_ptr != '\t') && (*TERM_data_ptr != '#')) - { - while ((!CFOUND) && (*TERM_data_ptr != (char)NULL)) - { - CFOUND = !strncmp(TERM_data_ptr, Name, Data_Line_len); - while ((*TERM_data_ptr != (char)NULL) && (*TERM_data_ptr != '|') && (*TERM_data_ptr != '#') && (*TERM_data_ptr != ':')) - TERM_data_ptr++; - if (*TERM_data_ptr == '|') - TERM_data_ptr++; - else if (!CFOUND) - *TERM_data_ptr = (char)NULL; - } - } - } - if (!CFOUND) - { - printf("terminal type %s not found\n", TERMINAL_TYPE); - exit(0); - } -} - -void -CAP_PARSE() /* parse off the data in the termcap data file */ -{ - int offset; - int found; - - do - { - while (*TERM_data_ptr != (char)NULL) - { - for (found = FALSE, offset = 0; (!found) && (offset < 26); offset++) - { - if (!strncmp(TERM_data_ptr, Boolean_names[offset], 2)) - { - found = TRUE; - Booleans[offset] = TRUE; - } - } - if (!found) - { - for (found = FALSE, offset = 0; (!found) && (offset < lw__); offset++) - { - if (!strncmp(TERM_data_ptr, Number_names[offset], 3)) - { - found = TRUE; - Numbers[offset] = tc_Get_int(Numbers[offset]); - } - } - } - if (!found) - { - for (found = FALSE, offset = 0; (!found) && (offset < smgr__); offset++) - { - if (!strncmp(TERM_data_ptr, String_names[offset], 3)) - { - found = TRUE; - String_table[offset] = String_Get(String_table[offset]); - } - } - } - - if (!strncmp(TERM_data_ptr, "tc=", 3)) - tc_ = String_Get(NULL); - while ((*TERM_data_ptr != ':') && (*TERM_data_ptr != (char)NULL)) - TERM_data_ptr++; - if (*TERM_data_ptr == ':') - TERM_data_ptr++; - } - } while (((TERM_data_ptr = fgets(Data_Line, 512, TFP)) != NULL) && ((*TERM_data_ptr == ' ') || (*TERM_data_ptr == '\t'))); - if (tc_ != NULL) - { - TERMINAL_TYPE = tc_; - rewind(TFP); - Find_term(); - free(tc_); - tc_ = NULL; - CAP_PARSE(); - } - else - fclose(TFP); -} -#endif /* ifdef CAP */ - -struct _line * -Screenalloc(columns) -int columns; -{ - int i; - struct _line *tmp; - - tmp = (struct _line *) malloc(sizeof (struct _line)); - tmp->row = malloc(columns + 1); - tmp->attributes = malloc(columns + 1); - tmp->prev_screen = NULL; - tmp->next_screen = NULL; - for (i = 0; i < columns; i++) - { - tmp->row[i] = ' '; - tmp->attributes[i] = (char) NULL; - } - tmp->scroll = tmp->changed = FALSE; - tmp->row[0] = (char) NULL; - tmp->attributes[0] = (char) NULL; - tmp->row[columns] = (char) NULL; - tmp->attributes[columns] = (char) NULL; - tmp->last_char = 0; - return(tmp); -} - -WINDOW *newwin(lines, cols, start_l, start_c) -int lines, cols; /* number of lines and columns to be in window */ -int start_l, start_c; /* starting line and column to be inwindow */ -{ - WINDOW *Ntemp; - struct _line *temp_screen; - int i; - - Ntemp = (WINDOW *) malloc(sizeof(WINDOW)); - Ntemp->SR = start_l; - Ntemp->SC = start_c; - Ntemp->Num_lines = lines; - Ntemp->Num_cols = cols; - Ntemp->LX = 0; - Ntemp->LY = 0; - Ntemp->scroll_down = Ntemp->scroll_up = 0; - Ntemp->SCROLL_CLEAR = FALSE; - Ntemp->Attrib = FALSE; - Ntemp->first_line = temp_screen = Screenalloc(cols); - Ntemp->first_line->number = 0; - for (i = 1; i < lines; i++) - { - temp_screen->next_screen = Screenalloc(cols); - temp_screen->next_screen->number = i; - temp_screen->next_screen->prev_screen = temp_screen; - temp_screen = temp_screen->next_screen; - } - Ntemp->first_line->prev_screen = NULL; - temp_screen->next_screen = NULL; - return(Ntemp); -} - -#ifdef CAP -void -Cap_Out(string, p_list, place) /* interpret the output string if necessary */ -char *string; -int p_list[]; /* stack of values */ -int place; /* place keeper of top of stack */ -{ - char *Otemp; /* temporary string pointer to parse output */ - int delay; - int p1, p2, temp; - float chars; - - if (string == NULL) - return; - - if (p_list != NULL) - { - p1 = p_list[--place]; - p2 = p_list[--place]; - } - delay = 0; - Otemp = string; - if ((*Otemp >= '0') && (*Otemp <= '9')) - { - delay = atoi(Otemp); - while ((*Otemp >= '0') && (*Otemp <= '9')) - Otemp++; - if (*Otemp == '*') - Otemp++; - } - while (*Otemp != (char)NULL) - { - if (*Otemp == '%') - { - Otemp++; - if ((*Otemp == 'd') || (*Otemp == '2') || (*Otemp == '3') || (*Otemp == '.') || (*Otemp == '+')) - { - if (*Otemp == 'd') - printf("%d", p1); - else if (*Otemp == '2') - printf("%02d", p1); - else if (*Otemp == '3') - printf("%03d", p1); - else if (*Otemp == '+') - { - Otemp++; - p1 += *Otemp; - putchar(p1); - } - else if (*Otemp == '.') - putchar(p1); - p1 = p2; - p2 = 0; - } - else if (*Otemp == '>') - { - Otemp++; - if (p1 > *Otemp) - { - Otemp++; - p1 += *Otemp; - } - else - Otemp++; - } - else if (*Otemp == 'r') - { - temp = p1; - p1 = p2; - p2 = temp; - } - else if (*Otemp == 'i') - { - p1++; - p2++; - } - else if (*Otemp == '%') - putchar(*Otemp); - else if (*Otemp == 'n') - { - p1 ^= 0140; - p2 ^= 0140; - } - else if (*Otemp == 'B') - { - p1 = (16 * (p1/10)) + (p1 % 10); - p2 = (16 * (p2/10)) + (p2 % 10); - } - else if (*Otemp == 'D') - { - p1 = (p1 - 2 * (p1 % 16)); - p2 = (p2 - 2 * (p2 % 16)); - } - } - else - putchar (*Otemp); - Otemp++; - } - if (delay != 0) - { - chars = delay * chars_per_millisecond; - delay = chars; - if ((chars - delay) > 0.0) - delay++; - for (; delay > 0; delay--) - putchar(*String_table[pc__]); - } - fflush(stdout); -} - -#else - - char *Otemp; /* temporary string pointer to parse output */ - float chars; - int p[10]; - int variable[27]; - -int -Operation(Temp_Stack, place) /* handle conditional operations */ -int Temp_Stack[]; -int place; -{ - int temp; - - if (*Otemp == 'd') - { - Otemp++; - temp = Temp_Stack[--place]; - printf("%d", temp); - } - else if (!strncmp(Otemp, "2d", 2)) - { - temp = Temp_Stack[--place]; - printf("%2d", temp); - Otemp++; - Otemp++; - } - else if (!strncmp(Otemp, "3d", 2)) - { - temp = Temp_Stack[--place]; - printf("%0d", temp); - Otemp++; - Otemp++; - } - else if (!strncmp(Otemp, "02d", 3)) - { - temp = Temp_Stack[--place]; - printf("%02d", temp); - Otemp++; - Otemp++; - Otemp++; - } - else if (!strncmp(Otemp, "03d", 3)) - { - temp = Temp_Stack[--place]; - printf("%03d", temp); - Otemp++; - Otemp++; - Otemp++; - } - else if (*Otemp == '+') - { - Otemp++; - temp = Temp_Stack[--place]; - temp += Temp_Stack[--place]; - Temp_Stack[place++] = temp; - } - else if (*Otemp == '-') - { - Otemp++; - temp = Temp_Stack[--place]; - temp -= Temp_Stack[--place]; - Temp_Stack[place++] = temp; - } - else if (*Otemp == '*') - { - Otemp++; - temp = Temp_Stack[--place]; - temp *= Temp_Stack[--place]; - Temp_Stack[place++] = temp; - } - else if (*Otemp == '/') - { - Otemp++; - temp = Temp_Stack[--place]; - temp /= Temp_Stack[--place]; - Temp_Stack[place++] = temp; - } - else if (*Otemp == 'm') - { - Otemp++; - temp = Temp_Stack[--place]; - temp %= Temp_Stack[--place]; - Temp_Stack[place++] = temp; - } - else if (*Otemp == '&') - { - Otemp++; - temp = Temp_Stack[--place]; - temp &= Temp_Stack[--place]; - Temp_Stack[place++] = temp; - } - else if (*Otemp == '|') - { - Otemp++; - temp = Temp_Stack[--place]; - temp |= Temp_Stack[--place]; - Temp_Stack[place++] = temp; - } - else if (*Otemp == '^') - { - Otemp++; - temp = Temp_Stack[--place]; - temp ^= Temp_Stack[--place]; - Temp_Stack[place++] = temp; - } - else if (*Otemp == '=') - { - Otemp++; - temp = Temp_Stack[--place]; - temp = (temp == Temp_Stack[--place]); - Temp_Stack[place++] = temp; - } - else if (*Otemp == '>') - { - Otemp++; - temp = Temp_Stack[--place]; - temp = temp > Temp_Stack[--place]; - Temp_Stack[place++] = temp; - } - else if (*Otemp == '<') - { - Otemp++; - temp = Temp_Stack[--place]; - temp = temp < Temp_Stack[--place]; - Temp_Stack[place++] = temp; - } - else if (*Otemp == 'c') - { - Otemp++; - putchar(Temp_Stack[--place]); - } - else if (*Otemp == 'i') - { - Otemp++; - p[1]++; - p[2]++; - } - else if (*Otemp == '%') - { - putchar(*Otemp); - Otemp++; - } - else if (*Otemp == '!') - { - temp = ! Temp_Stack[--place]; - Temp_Stack[place++] = temp; - Otemp++; - } - else if (*Otemp == '~') - { - temp = ~Temp_Stack[--place]; - Temp_Stack[place++] = temp; - Otemp++; - } - else if (*Otemp == 'p') - { - Otemp++; - Temp_Stack[place++] = p[*Otemp - '0']; - Otemp++; - } - else if (*Otemp == 'P') - { - Otemp++; - Temp_Stack[place++] = variable[*Otemp - 'a']; - Otemp++; - } - else if (*Otemp == 'g') - { - Otemp++; - variable[*Otemp - 'a'] = Temp_Stack[--place]; - Otemp++; - } - else if (*Otemp == '\'') - { - Otemp++; - Temp_Stack[place++] = *Otemp; - Otemp++; - Otemp++; - } - else if (*Otemp == '{') - { - Otemp++; - temp = atoi(Otemp); - Temp_Stack[place++] = temp; - while (*Otemp != '}') - Otemp++; - Otemp++; - } - return(place); -} - -void -Info_Out(string, p_list, place) /* interpret the output string if necessary */ -char *string; -int p_list[]; -int place; -{ - char *tchar; - int delay; - int temp; - int Cond_FLAG; - int EVAL; - int Cond_Stack[128]; - int Cond_place; - int Stack[128]; - int Top_of_stack; - - if (string == NULL) - return; - - Cond_FLAG = FALSE; - Cond_place = 0; - Top_of_stack = 0; - p[0] = 0; - p[1] = 0; - p[2] = 0; - p[3] = 0; - p[4] = 0; - p[5] = 0; - p[6] = 0; - p[7] = 0; - p[8] = 0; - p[9] = 0; - if (p_list != NULL) - { - for (temp = 1; (place != 0); temp++) - { - p[temp] = p_list[--place]; - } - } - delay = 0; - Otemp = string; - while (*Otemp != (char) NULL) - { - if (*Otemp == '%') - { - Otemp++; - if ((*Otemp == '?') || (*Otemp == 't') || (*Otemp == 'e') || (*Otemp == ';')) - { - if (*Otemp == '?') - { - Otemp++; - Cond_FLAG = TRUE; - EVAL = TRUE; - while (EVAL) - { - /* - | find the end of the - | conditional statement - */ - while ((strncmp(Otemp, "%t", 2)) && (*Otemp != (char) NULL)) - { - /* - | move past '%' - */ - Otemp++; - Cond_place = Operation(Cond_Stack, Cond_place); - } - - /* - | if condition is true - */ - if ((Cond_place > 0) && (Cond_Stack[Cond_place-1])) - { - /* - | end conditional - | parsing - */ - EVAL = FALSE; - Otemp++; - Otemp++; - } - else /* condition is false */ - { - /* - | find 'else' or end - | of if statement - */ - while ((strncmp(Otemp, "%e", 2)) && (strncmp(Otemp, "%;", 2)) && (*Otemp != (char) NULL)) - Otemp++; - /* - | if an 'else' found - */ - if ((*Otemp != (char) NULL) && (!strncmp(Otemp, "%e", 2))) - { - Otemp++; - Otemp++; - tchar = Otemp; - /* - | check for 'then' part - */ - while ((*tchar != (char) NULL) && (strncmp(tchar, "%t", 2)) && (strncmp(tchar, "%;", 2))) - tchar++; - /* - | if end of string - */ - if (*tchar == (char) NULL) - { - EVAL = FALSE; - Cond_FLAG = FALSE; - Otemp = tchar; - } - /* - | if end of if found, - | set up to parse - | info - */ - else if (!strncmp(tchar, "%;", 2)) - EVAL = FALSE; - /* - | otherwise, check - | conditional in - | 'else' - */ - } - /* - | if end of if found, - | get out of if - | statement - */ - else if ((*Otemp != (char) NULL) && (!strncmp(Otemp, "%;", 2))) - { - EVAL = FALSE; - Otemp++; - Otemp++; - } - else /* Otemp == NULL */ - { - EVAL = FALSE; - Cond_FLAG = FALSE; - } - } - } - } - else - { - Otemp++; - Cond_FLAG = FALSE; - if (*Otemp != ';') - { - while ((*Otemp != (char) NULL) && (strncmp(Otemp, "%;", 2))) - Otemp++; - if (*Otemp != (char) NULL) - { - Otemp++; - Otemp++; - } - } - else - Otemp++; - } - } - else - { - Top_of_stack = Operation(Stack, Top_of_stack); - } - } - else if (!strncmp(Otemp, "$<", 2)) - { - Otemp++; - Otemp++; - delay = atoi(Otemp); - while (*Otemp != '>') - Otemp++; - Otemp++; - chars = delay * chars_per_millisecond; - delay = chars; - if ((chars - delay) > 0.0) - delay++; - if (String_table[pc__] == NULL) - temp = 0; - else - temp = *String_table[pc__]; - for (; delay > 0; delay--) - putc(temp, stdout); - } - else - { - putchar(*Otemp); - Otemp++; - } - } - fflush(stdout); -} -#endif - -void -wmove(window, row, column) /* move cursor to indicated position in window */ -WINDOW *window; -int row, column; -{ - if ((row < window->Num_lines) && (column < window->Num_cols)) - { - window->LX = column; - window->LY = row; - } -} - -void -clear_line(line, column, cols) -struct _line *line; -int column; -int cols; -{ - int j; - - if (column > line->last_char) - line->row[line->last_char] = ' '; - line->last_char = column; - line->row[column] = (char) NULL; - line->attributes[column] = (char) NULL; - line->changed = TRUE; - for (j = column + 1; j < cols; j++) - { - line->row[j] = ' '; - line->attributes[j] = (char) NULL; - } -} - -void -werase(window) /* clear the specified window */ -WINDOW *window; -{ - int i; - struct _line *tmp; - - window->SCROLL_CLEAR = CLEAR; - window->scroll_up = window->scroll_down = 0; - for (i = 0, tmp = window->first_line; i < window->Num_lines; i++, tmp = tmp->next_screen) - clear_line(tmp, 0, window->Num_cols); -} - -void -wclrtoeol(window) /* erase from current cursor position to end of line */ -WINDOW *window; -{ - int column, row; - struct _line *tmp; - - window->SCROLL_CLEAR = CHANGE; - column = window->LX; - row = window->LY; - for (row = 0, tmp = window->first_line; row < window->LY; row++) - tmp = tmp->next_screen; - clear_line(tmp, column, window->Num_cols); -} - -void -wrefresh(window) /* flush all previous output */ -WINDOW *window; -{ - wnoutrefresh(window); -#ifdef DIAG -{ - struct _line *temp; - int value; - fprintf(stderr, "columns=%d, lines=%d, SC=%d, SR=%d\n",window->Num_cols, window->Num_lines, window->SC, window->SR); - for (value = 0, temp = window->first_line; value < window->Num_lines; value++, temp = temp->next_screen) - { - if (temp->number == -1) - fprintf(stderr, "line moved "); - if (temp->scroll) - fprintf(stderr, "scroll_x is set: "); - fprintf(stderr, "lc%d=%s|\n", temp->last_char, temp->row); - } - fprintf(stderr, "+-------------------- virtual screen ----------------------------------------+\n"); - fprintf(stderr, "columns=%d, lines=%d \n",virtual_scr->Num_cols, virtual_scr->Num_lines); - for (value = 0, temp = virtual_scr->first_line; value < virtual_scr->Num_lines; value++, temp = temp->next_screen) - { - if (temp->number == -1) - fprintf(stderr, "line moved "); - if (temp->scroll) - fprintf(stderr, "scroll_x is set: "); - fprintf(stderr, "lc%d=%s|\n", temp->last_char, temp->row); - } - fprintf(stderr, "columns=%d, lines=%d \n",curscr->Num_cols, curscr->Num_lines); - for (value = 0, temp = curscr->first_line; value < curscr->Num_lines; value++, temp = temp->next_screen) - fprintf(stderr, "line=%s|\n", temp->row); -} -#endif - doupdate(); - virtual_scr->SCROLL_CLEAR = FALSE; - virtual_scr->scroll_down = virtual_scr->scroll_up = 0; - fflush(stdout); -} - -void -touchwin(window) -WINDOW *window; -{ - struct _line *user_line; - int line_counter = 0; - - for (line_counter = 0, user_line = window->first_line; - line_counter < window->Num_lines; line_counter++) - { - user_line->changed = TRUE; - } - window->SCROLL_CLEAR = TRUE; -} - -void -wnoutrefresh(window) -WINDOW *window; -{ - struct _line *user_line; - struct _line *virtual_line; - int line_counter = 0; - int user_col = 0; - int virt_col = 0; - - if (window->SR >= virtual_scr->Num_lines) - return; - user_line = window->first_line; - virtual_line = virtual_scr->first_line; - virtual_scr->SCROLL_CLEAR = window->SCROLL_CLEAR; - virtual_scr->LX = window->LX + window->SC; - virtual_scr->LY = window->LY + window->SR; - virtual_scr->scroll_up = window->scroll_up; - virtual_scr->scroll_down = window->scroll_down; - if ((last_window_refreshed == window) && (!window->SCROLL_CLEAR)) - return; - for (line_counter = 0; line_counter < window->SR; line_counter++) - { - virtual_line = virtual_line->next_screen; - } - for (line_counter = 0; (line_counter < window->Num_lines) - && ((line_counter + window->SR) < virtual_scr->Num_lines); - line_counter++) - { - if ((last_window_refreshed != window) || (user_line->changed) || ((SCROLL | CLEAR) & window->SCROLL_CLEAR)) - { - for (user_col = 0, virt_col = window->SC; - (virt_col < virtual_scr->Num_cols) - && (user_col < window->Num_cols); - virt_col++, user_col++) - { - virtual_line->row[virt_col] = user_line->row[user_col]; - virtual_line->attributes[virt_col] = user_line->attributes[user_col]; - } - } - if (virtual_scr->Num_cols != window->Num_cols) - { - if (virtual_line->last_char < (user_line->last_char + window->SC)) - { - if (virtual_line->row[virtual_line->last_char] == (char) NULL) - virtual_line->row[virtual_line->last_char] = ' '; - virtual_line->last_char = - min(virtual_scr->Num_cols, - (user_line->last_char + window->SC)); - } - else if (virtual_line->last_char > (user_line->last_char + window->SC)) - { - virtual_line->row[min(virtual_scr->Num_cols, - (user_line->last_char + window->SC))] = ' '; - } - } - else - virtual_line->last_char = user_line->last_char; - virtual_line->row[virtual_line->last_char] = (char) NULL; - virtual_line->changed = user_line->changed; - virtual_line = virtual_line->next_screen; - user_line = user_line->next_screen; - } - window->SCROLL_CLEAR = FALSE; - window->scroll_up = window->scroll_down = 0; - last_window_refreshed = window; -} - -void -flushinp() /* flush input */ -{ -} - -void -ungetch(c) /* push a character back on input */ -int c; -{ - if (bufp < 100) - in_buff[bufp++] = c; -} - -#ifdef BSD_SELECT -int -timed_getchar() -{ - struct timeval tv; - fd_set fds; - int ret_val; - int nfds = 1; - char temp; - - FD_ZERO(&fds); - tv.tv_sec = 0; - tv.tv_usec = 500000; /* half a second */ - FD_SET(0, &fds); - Time_Out = FALSE; /* just in case */ - - ret_val = select(nfds, &fds, 0, 0, &tv); - - /* - | if ret_val is less than zero, there was no input - | otherwise, get a character and return it - */ - - if (ret_val <= 0) - { - Time_Out = TRUE; - return(-1); - } - - return(read(0, &temp, 1)? temp : -1); -} -#endif - -int -wgetch(window) /* get character from specified window */ -WINDOW *window; -{ - int in_value; - char temp; -#ifndef SYS5 - int old_arg; -#endif /* SYS5 */ - -#ifdef BSD_SELECT - if (Noblock) - in_value = ((bufp > 0) ? in_buff[--bufp] : timed_getchar()); - else - in_value = ((bufp > 0) ? in_buff[--bufp] : read(0, &temp, 1)? temp : -1); -#else /* BSD_SELECT */ -#ifdef SYS5 - in_value = ((bufp > 0) ? in_buff[--bufp] : - (read(0, &temp, 1)> 0) ? temp : -1); -#else /* SYS5 */ - if (Noblock) - { - Time_Out = FALSE; - old_arg = fcntl(0, F_GETFL, 0); - in_value = fcntl(0, F_SETFL, old_arg | FNDELAY); - } - in_value = ((bufp > 0) ? in_buff[--bufp] : read(0, &temp, 1)? temp : -1); - if (Noblock) - { - fcntl(0, F_SETFL, old_arg); - if (Time_Out) - in_value = -1; - } -#endif /* SYS5 */ -#endif /* BSD_SELECT */ - - if (in_value != -1) - { - in_value &= 0xff; - if ((Parity) && (Num_bits < 8)) - /* strip eighth bit if parity in use */ - in_value &= 0177; - } - else if (interrupt_flag) - { - interrupt_flag = FALSE; - in_value = wgetch(window); - } - - if ((in_value == '\033') || (in_value == '\037'))/* escape character */ - in_value = Get_key(in_value); - return(in_value); -} - -#ifndef BSD_SELECT -void -Clear(arg) /* notify that time out has occurred */ -int arg; -{ - Time_Out = TRUE; -#ifdef DEBUG -fprintf(stderr, "inside Clear()\n"); -fflush(stderr); -#endif /* DEBUG */ -} -#endif /* BSD_SELECT */ - -int -Get_key(first_char) /* try to decode key sequence */ -int first_char; /* first character of sequence */ -{ - int in_char; - int Count; - char string[128]; - char *Gtemp; - int Found; -#ifdef SYS5 - struct termio Gterminal; -#else - struct sgttyb Gterminal; -#endif - struct KEY_STACK *St_point; -#if (!defined( BSD_SELECT)) || (!defined(SYS5)) - int value; -#endif /* BSD_SELECT */ - - Count = 0; - Gtemp = string; - string[Count++] = first_char; - string[Count] = (char) NULL; - Time_Out = FALSE; -#ifndef BSD_SELECT - signal(SIGALRM, Clear); - value = alarm(1); -#endif /* BSD_SELECT */ - Noblock = TRUE; -#ifdef SYS5 - Gterminal.c_cc[VTIME] = 0; /* timeout value */ - Gterminal.c_lflag &= ~ICANON; /* disable canonical operation */ - Gterminal.c_lflag &= ~ECHO; /* disable echo */ -#endif - Count = 1; - Found = FALSE; - while ((Count < Max_Key_len) && (!Time_Out) && (!Found)) - { - in_char = wgetch(stdscr); -#ifdef DEBUG -fprintf(stderr, "back in GetKey()\n"); -fflush(stderr); -#endif /* DEBUG */ - if (in_char != -1) - { - string[Count++] = in_char; - string[Count] = (char) NULL; - St_point = KEY_TOS; - while ((St_point != NULL) && (!Found)) - { - if (!strcmp(string, St_point->element->string)) - Found = TRUE; - else - St_point = St_point->next; - } - } - } -#ifndef BSD_SELECT - if (!Time_Out) - value = alarm(0); -#endif /* BSD_SELECT */ -#ifdef SYS5 -/* value = ioctl(0, TCSETA, &Terminal);*/ -#else - value = ioctl(0, TIOCSETP, &Terminal); -/* value = fcntl(0, F_SETFL, old_arg);*/ -#endif - Noblock = FALSE; - if (Found) - { - return(St_point->element->value); - } - else - { - while (Count > 1) - { - if ((string[--Count] != -1) && - ((unsigned char) (string[Count]) != 255)) - { -#ifdef DIAG -fprintf(stderr, "ungetting character %d\n", string[Count]);fflush(stdout); -#endif - ungetch(string[Count]); - } - } - return(first_char); - } -} - -void -waddch(window, c) /* output the character in the specified window */ -WINDOW *window; -int c; -{ - int row, column; - int shift; /* number of spaces to shift if a tab */ - struct _line *tmpline; - -#ifdef DIAG -/*printf("starting waddch \n");fflush(stdout);*/ -#endif - row = window->LY; - column = window->LX; - if (c == '\t') - { - shift = (column + 1) % 8; - if (shift == 0) - shift++; - else - shift = 9 - shift; - while (shift > 0) - { - shift--; - waddch(window, ' '); - } - } - else if ((column < window->Num_cols) && (row < window->Num_lines)) - { - if ((c == '~') && (Booleans[hz__])) - c = '@'; - - if (( c != '\b') && (c != '\n') && (c != '\r')) - { - row = 0; - tmpline = window->first_line; - while (row < window->LY) - { - row++; - tmpline = tmpline->next_screen; - } - tmpline->row[column] = c; - tmpline->attributes[column] = window->Attrib; - tmpline->changed = TRUE; - if (column >= tmpline->last_char) - { - if (column > tmpline->last_char) - tmpline->row[tmpline->last_char] = ' '; - tmpline->row[column + 1] = (char) NULL; - tmpline->attributes[column + 1] = (char) NULL; - tmpline->last_char = column + 1; - } - } - if (c == '\n') - { - wclrtoeol(window); - window->LX = window->Num_cols; - } - else if (c == '\r') - window->LX = 0; - else if (c == '\b') - window->LX--; - else - window->LX++; - } - if (window->LX >= window->Num_cols) - { - window->LX = 0; - window->LY++; - if (window->LY >= window->Num_lines) - { - window->LY = window->Num_lines - 1; -/* window->LY = row; - wmove(window, 0, 0); - wdeleteln(window); - wmove(window, row, 0);*/ - } - } - window->SCROLL_CLEAR = CHANGE; -} - -void -winsertln(window) /* insert a blank line into the specified window */ -WINDOW *window; -{ - int row, column; - struct _line *tmp; - struct _line *tmp1; - - window->scroll_down += 1; - window->SCROLL_CLEAR = SCROLL; - column = window->LX; - row = window->LY; - for (row = 0, tmp = window->first_line; (row < window->Num_lines) && (tmp->next_screen != NULL); row++) - tmp = tmp->next_screen; - if (tmp->prev_screen != NULL) - tmp->prev_screen->next_screen = NULL; - tmp1 = tmp; - clear_line(tmp1, 0, window->Num_cols); - tmp1->number = -1; - for (row = 0, tmp = window->first_line; (row < window->LY) && (tmp->next_screen != NULL); row++) - tmp = tmp->next_screen; - if ((window->LY == (window->Num_lines - 1)) && (window->Num_lines > 1)) - { - tmp1->next_screen = tmp->next_screen; - tmp->next_screen = tmp1; - tmp->changed = TRUE; - tmp->next_screen->prev_screen = tmp; - } - else if (window->Num_lines > 1) - { - if (tmp->prev_screen != NULL) - tmp->prev_screen->next_screen = tmp1; - tmp1->prev_screen = tmp->prev_screen; - tmp->prev_screen = tmp1; - tmp1->next_screen = tmp; - tmp->changed = TRUE; - tmp->scroll = DOWN; - } - if (window->LY == 0) - window->first_line = tmp1; -} - -void -wdeleteln(window) /* delete a line in the specified window */ -WINDOW *window; -{ - int row, column; - struct _line *tmp; - struct _line *tmpline; - - if (window->Num_lines > 1) - { - window->scroll_up += 1; - window->SCROLL_CLEAR = SCROLL; - column = window->LX; - row = window->LY; - for (row = 0, tmp = window->first_line; row < window->LY; row++) - tmp = tmp->next_screen; - if (window->LY == 0) - window->first_line = tmp->next_screen; - if (tmp->prev_screen != NULL) - tmp->prev_screen->next_screen = tmp->next_screen; - if (tmp->next_screen != NULL) - { - tmp->next_screen->changed = TRUE; - tmp->next_screen->scroll = UP; - tmp->next_screen->prev_screen = tmp->prev_screen; - } - tmpline = tmp; - clear_line(tmpline, 0, window->Num_cols); - tmpline->number = -1; - for (row = 0, tmp = window->first_line; tmp->next_screen != NULL; row++) - tmp = tmp->next_screen; - if (tmp != NULL) - { - tmp->next_screen = tmpline; - tmp->next_screen->prev_screen = tmp; - tmp->changed = TRUE; - tmp = tmp->next_screen; - } - else - tmp = tmpline; - tmp->next_screen = NULL; - } - else - { - clear_line(window->first_line, 0, window->Num_cols); - } -} - -void -wclrtobot(window) /* delete from current position to end of the window */ -WINDOW *window; -{ - int row, column; - struct _line *tmp; - - window->SCROLL_CLEAR |= CLEAR; - column = window->LX; - row = window->LY; - for (row = 0, tmp = window->first_line; row < window->LY; row++) - tmp = tmp->next_screen; - clear_line(tmp, column, window->Num_cols); - for (row = (window->LY + 1); row < window->Num_lines; row++) - { - tmp = tmp->next_screen; - clear_line(tmp, 0, window->Num_cols); - } - wmove(window, row, column); -} - -void -wstandout(window) /* begin standout mode in window */ -WINDOW *window; -{ - if (Numbers[sg__] < 1) /* if not magic cookie glitch */ - window->Attrib |= A_STANDOUT; -} - -void -wstandend(window) /* end standout mode in window */ -WINDOW *window; -{ - window->Attrib &= ~A_STANDOUT; -} - -void -waddstr(window, string) /* write 'string' in window */ -WINDOW *window; -char *string; -{ - char *wstring; - - for (wstring = string; *wstring != (char) NULL; wstring++) - waddch(window, *wstring); -} - -void -clearok(window, flag) /* erase screen and redraw at next refresh */ -WINDOW *window; -int flag; -{ - Repaint_screen = TRUE; -} - -void -echo() /* turn on echoing */ -{ - int value; - -#ifdef SYS5 - Terminal.c_lflag |= ECHO; /* enable echo */ - value = ioctl(0, TCSETA, &Terminal); /* set characteristics */ -#else - Terminal.sg_flags |= ECHO; /* enable echo */ - value = ioctl(0, TIOCSETP, &Terminal); /* set characteristics */ -#endif -} - -void -noecho() /* turn off echoing */ -{ - int value; - -#ifdef SYS5 - Terminal.c_lflag &= ~ECHO; /* disable echo */ - value = ioctl(0, TCSETA, &Terminal); /* set characteristics */ -#else - Terminal.sg_flags &= ~ECHO; /* disable echo */ - value = ioctl(0, TIOCSETP, &Terminal); /* set characteristics */ -#endif -} - -void -raw() /* set to read characters immediately */ -{ - int value; - -#ifdef SYS5 - Intr = Terminal.c_cc[VINTR]; /* get the interrupt character */ - Terminal.c_lflag &= ~ICANON; /* disable canonical operation */ - Terminal.c_lflag &= ~ISIG; /* disable signal checking */ -#ifdef FLUSHO - Terminal.c_lflag &= ~FLUSHO; -#endif -#ifdef PENDIN - Terminal.c_lflag &= ~PENDIN; -#endif -#ifdef IEXTEN - Terminal.c_lflag &= ~IEXTEN; -#endif - Terminal.c_cc[VMIN] = 1; /* minimum of one character */ - Terminal.c_cc[VTIME] = 255; /* timeout value */ - Terminal.c_cc[VINTR] = 0; /* eliminate interrupt */ - value = ioctl(0, TCSETA, &Terminal); /* set characteristics */ -#else - Terminal.sg_flags |= RAW; /* enable raw mode */ - value = ioctl(0, TIOCSETP, &Terminal); /* set characteristics */ -#endif -} - -void -noraw() /* set to normal character read mode */ -{ - int value; - -#ifdef SYS5 - Terminal.c_lflag |= ICANON; /* enable canonical operation */ - Terminal.c_lflag |= ISIG; /* enable signal checking */ - Terminal.c_cc[VEOF] = 4; /* EOF character = 4 */ - Terminal.c_cc[VEOL] = (char) NULL; /* EOL = 0 */ - Terminal.c_cc[VINTR] = Intr; /* reset interrupt char */ - value = ioctl(0, TCSETA, &Terminal); /* set characteristics */ -#else - Terminal.sg_flags &= ~RAW; /* disable raw mode */ - value = ioctl(0, TIOCSETP, &Terminal); /* set characteristics */ -/* old_arg = fcntl(0, F_GETFL, 0); - value = fcntl(0, F_SETFL, old_arg & ~FNDELAY);*/ -#endif -} - -void -nl() -{ - int value; - -#ifdef SYS5 - Terminal.c_iflag |= ICRNL; /* enable carriage-return to line-feed mapping */ - value = ioctl(0, TCSETA, &Terminal); /* set characteristics */ -#endif -} - -void -nonl() -{ - int value; - -#ifdef SYS5 - Terminal.c_iflag &= ~ICRNL; /* disable carriage-return to line-feed mapping */ - Terminal.c_iflag &= ~IGNCR; /* do not ignore carriage-return */ - value = ioctl(0, TCSETA, &Terminal); /* set characteristics */ -#endif -} - -void -saveterm() -{ -} - -void -fixterm() -{ -} - -void -resetterm() -{ -} - -void -nodelay(window, flag) -WINDOW *window; -int flag; -{ -} - -void -idlok(window, flag) -WINDOW *window; -int flag; -{ -} - -void -keypad(window, flag) -WINDOW *window; -int flag; -{ - if (flag) - String_Out(String_table[ks__], NULL, 0); - else - String_Out(String_table[ke__], NULL, 0); -} - -void -savetty() /* save current tty stats */ -{ - int value; - -#ifdef SYS5 - value = ioctl(0, TCGETA, &Saved_tty); /* set characteristics */ -#else - value = ioctl(0, TIOCGETP, &Saved_tty); /* set characteristics */ -#endif -} - -void -resetty() /* restore previous tty stats */ -{ - int value; - -#ifdef SYS5 - value = ioctl(0, TCSETA, &Saved_tty); /* set characteristics */ -#else - value = ioctl(0, TIOCSETP, &Saved_tty); /* set characteristics */ -#endif -} - -void -endwin() /* end windows */ -{ - keypad(stdscr, FALSE); - free(stdscr); - initialized = FALSE; - delwin(curscr); - delwin(virtual_scr); - delwin(stdscr); -#ifndef SYS5 -{ - int old_arg, value; -/* old_arg = fcntl(0, F_GETFL, 0); - value = fcntl(0, F_SETFL, old_arg & ~FNDELAY);*/ -} -#endif -} - -void -delwin(window) /* delete the window structure */ -WINDOW *window; -{ - int i; - - for (i = 1; (i < window->Num_lines) && (window->first_line->next_screen != NULL); i++) - { - window->first_line = window->first_line->next_screen; - free(window->first_line->prev_screen->row); - free(window->first_line->prev_screen->attributes); - free(window->first_line->prev_screen); - } - if (window == last_window_refreshed) - last_window_refreshed = 0; - if (window->first_line != NULL) - { - free(window->first_line->row); - free(window->first_line->attributes); - free(window->first_line); - free(window); - } -} - -#ifndef __STDC__ -void -wprintw(va_alist) -va_dcl -#else /* __STDC__ */ -void -wprintw(WINDOW *window, const char *format, ...) -#endif /* __STDC__ */ -{ -#ifndef __STDC__ - WINDOW *window; - char *format; - va_list ap; -#else - va_list ap; -#endif - int value; - char *fpoint; - char *wtemp; - -#ifndef __STDC__ - va_start(ap); - window = va_arg(ap, WINDOW *); - format = va_arg(ap, char *); -#else /* __STDC__ */ - va_start(ap, format); -#endif /* __STDC__ */ - - fpoint = (char *) format; - while (*fpoint != (char) NULL) - { - if (*fpoint == '%') - { - fpoint++; - if (*fpoint == 'd') - { - value = va_arg(ap, int); - iout(window, value); - } - else if (*fpoint == 'c') - { - value = va_arg(ap, int); - waddch(window, value); - } - else if (*fpoint == 's') - { - wtemp = va_arg(ap, char *); - waddstr(window, wtemp); - } - fpoint++; - } - else if (*fpoint == '\\') - { - fpoint++; - if (*fpoint == 'n') - waddch(window, '\n'); - else if ((*fpoint >= '0') && (*fpoint <= '9')) - { - value = 0; - while ((*fpoint >= '0') && (*fpoint <= '9')) - { - value = (value * 8) + (*fpoint - '0'); - fpoint++; - } - waddch(window, value); - } - fpoint++; - } - else - waddch(window, *fpoint++); - } -#ifdef __STDC__ - va_end(ap); -#endif /* __STDC__ */ -} - -void -iout(window, value) /* output characters */ -WINDOW *window; -int value; -{ - int i; - - if ((i = value / 10) != 0) - iout(window, i); - waddch(window, ((value % 10) + '0')); -} - -int -Comp_line(line1, line2) /* compare lines */ -struct _line *line1; -struct _line *line2; -{ - int count1, count2; - int i; - char *att1, *att2; - char *c1, *c2; - - c1 = line1->row; - c2 = line2->row; - att1 = line1->attributes; - att2 = line2->attributes; - count2 = strlen(c1) + 1; - count1 = strlen(c2) + 1; - if (count1 > count2) - { - i = count2; - count2 = count1; - count1 = i; - } - if (count2 > (count1 + count1)) - return(2); - i = 0; - while ((c1[i] != (char) NULL) && (c2[i] != (char) NULL) && (c1[i] == c2[i]) && (att1[i] == att2[i])) - i++; - count1 = i + 1; - if ((count1 == 1) && (count2 == 1)) - count1 = 0; /* both lines blank */ - else if (count2 == count1) - count1 = -1; /* equal */ - else - count1 = count2 / count1; /* lines unequal */ - return(count1); -} - -struct _line * -Insert_line(row, end_row, window) /* insert line into screen */ -int row; -int end_row; -WINDOW *window; -{ - int i; - struct _line *tmp; - struct _line *tmp1; - - for (i = 0, tmp = curscr->first_line; i < window->SR; i++) - tmp = tmp->next_screen; - if ((end_row + window->SR) == 0) - curscr->first_line = curscr->first_line->next_screen; - top_of_win = tmp; - /* - | find bottom line to delete - */ - for (i = 0, tmp = top_of_win; (tmp->next_screen != NULL) && (i < end_row); i++) - tmp = tmp->next_screen; - if (tmp->prev_screen != NULL) - tmp->prev_screen->next_screen = tmp->next_screen; - if (tmp->next_screen != NULL) - tmp->next_screen->prev_screen = tmp->prev_screen; - tmp1 = tmp; - /* - | clear deleted line - */ - clear_line(tmp, 0, window->Num_cols); - tmp1->number = -1; - for (i = 0, tmp = curscr->first_line; (tmp->next_screen != NULL) && (i < window->SR); i++) - tmp = tmp->next_screen; - top_of_win = tmp; - for (i = 0, tmp = top_of_win; i < row; i++) - tmp = tmp->next_screen; - if ((tmp->prev_screen != NULL) && (window->Num_lines > 0)) - tmp->prev_screen->next_screen = tmp1; - tmp1->prev_screen = tmp->prev_screen; - tmp->prev_screen = tmp1; - tmp1->next_screen = tmp; - if ((row + window->SR) == 0) - curscr->first_line = tmp1; - if (tmp1->next_screen != NULL) - tmp1 = tmp1->next_screen; - - if ((!String_table[cs__]) && (end_row < window->Num_lines)) - { - Position(window, (window->SR + end_row), 0); - String_Out(String_table[dl__], NULL, 0); - } - Position(window, (window->SR + row), 0); - if (String_table[al__] != NULL) - String_Out(String_table[al__], NULL, 0); - else - String_Out(String_table[sr__], NULL, 0); - - for (i = 0, top_of_win = curscr->first_line; (top_of_win->next_screen != NULL) && (i < window->SR); i++) - top_of_win = top_of_win->next_screen; - return(tmp1); -} - - -struct _line * -Delete_line(row, end_row, window) /* delete a line on screen */ -int row; -int end_row; -WINDOW *window; -{ - int i; - struct _line *tmp; - struct _line *tmp1; - struct _line *tmp2; - - i = 0; - tmp = curscr->first_line; - while (i < window->SR) - { - i++; - tmp = tmp->next_screen; - } - /* - | find line to delete - */ - top_of_win = tmp; - if ((row + window->SR) == 0) - curscr->first_line = top_of_win->next_screen; - for (i = 0, tmp = top_of_win; i < row; i++) - tmp = tmp->next_screen; - if (tmp->prev_screen != NULL) - tmp->prev_screen->next_screen = tmp->next_screen; - if (tmp->next_screen != NULL) - tmp->next_screen->prev_screen = tmp->prev_screen; - tmp2 = tmp->next_screen; - tmp1 = tmp; - /* - | clear deleted line - */ - clear_line(tmp1, 0, window->Num_cols); - tmp1->number = -1; - /* - | find location to insert deleted line - */ - for (i = 0, tmp = curscr->first_line; (tmp->next_screen != NULL) && (i < window->SR); i++) - tmp = tmp->next_screen; - top_of_win = tmp; - for (i = 0, tmp = top_of_win; (i < end_row) && (tmp->next_screen != NULL); i++) - tmp = tmp->next_screen; - tmp1->next_screen = tmp; - tmp1->prev_screen = tmp->prev_screen; - if (tmp1->prev_screen != NULL) - tmp1->prev_screen->next_screen = tmp1; - tmp->prev_screen = tmp1; - - Position(window, (window->SR + row), 0); - String_Out(String_table[dl__], NULL, 0); - if ((!String_table[cs__]) && (end_row < window->Num_lines)) - { - Position(window, (window->SR + end_row), 0); - String_Out(String_table[al__], NULL, 0); - } - else if ((String_table[cs__] != NULL) && (String_table[dl__] == NULL)) - { - Position(window, (window->SR + end_row), 0); - putchar('\n'); - } - - if (row == (window->Num_lines-1)) - tmp2 = tmp1; - if ((row + window->SR) == 0) - curscr->first_line = top_of_win = tmp2; - return(tmp2); -} - -void -CLEAR_TO_EOL(window, row, column) -WINDOW *window; -int row, column; -{ - int x, y; - struct _line *tmp1; - - for (y = 0, tmp1 = curscr->first_line; (y < (window->SR+row)) && (tmp1->next_screen != NULL); y++) - tmp1 = tmp1->next_screen; - for (x = column; xNum_cols; x++) - { - tmp1->row[x] = ' '; - tmp1->attributes[x] = (char) NULL; - } - tmp1->row[column] = (char) NULL; - tmp1->last_char = column; - if (column < COLS) - { - if (STAND) - { - STAND = FALSE; - Position(window, row, column); - attribute_off(); - } - if (String_table[ce__] != NULL) - String_Out(String_table[ce__], NULL, 0); - else - { - for (x = column; x < window->Num_cols; x++) - putchar(' '); - Curr_x = x; - } - } -} - -int -check_delete(window, line, offset, pointer_new, pointer_old) -WINDOW *window; -int line, offset; -struct _line *pointer_new, *pointer_old; -{ - int end_old; - int end_new; - int k; - int changed; - char *old_lin; - char *new_lin; - char *old_att; - char *new_att; - - changed = FALSE; - new_lin = pointer_new->row; - new_att = pointer_new->attributes; - old_lin = pointer_old->row; - old_att = pointer_old->attributes; - end_old = end_new = offset; - while (((new_lin[end_new] != old_lin[end_old]) || (new_att[end_new] != old_att[end_old])) && (old_lin[end_old] != (char) NULL) && (new_lin[end_old] != (char) NULL)) - end_old++; - if (old_lin[end_old] != (char) NULL) - { - k = 0; - while ((old_lin[end_old+k] == new_lin[end_new+k]) && (new_att[end_new+k] == old_att[end_old+k]) && (new_lin[end_new+k] != (char) NULL) && (old_lin[end_old+k] != (char) NULL) && (k < 10)) - k++; - if ((k > 8) || ((new_lin[end_new+k] == (char) NULL) && (k != 0))) - { - if (new_lin[end_new+k] == (char) NULL) - { - Position(window, line, (end_new+k)); - CLEAR_TO_EOL(window, line, (end_new+k)); - } - Position(window, line, offset); - for (k = offset; k < end_old; k++) - Char_del(old_lin, old_att, offset, window->Num_cols); - while ((old_lin[offset] != (char) NULL) && (offset < COLS)) - offset++; - pointer_old->last_char = offset; - changed = TRUE; - } - } - return(changed); -} - -int -check_insert(window, line, offset, pointer_new, pointer_old) -WINDOW *window; -int line, offset; -struct _line *pointer_new, *pointer_old; -{ - int changed; - int end_old, end_new; - int k; - int same = FALSE; - int old_off; - int insert; - char *old_lin; - char *new_lin; - char *old_att; - char *new_att; - - changed = FALSE; - new_lin = pointer_new->row; - new_att = pointer_new->attributes; - old_lin = pointer_old->row; - old_att = pointer_old->attributes; - end_old = end_new = offset; - while (((new_lin[end_new] != old_lin[end_old]) || (new_att[end_new] != old_att[end_old])) && (new_lin[end_new] != (char) NULL) && (old_lin[end_new] != (char) NULL)) - end_new++; - if (new_lin[end_new] != (char) NULL) - { - k = 0; - while ((old_lin[end_old+k] == new_lin[end_new+k]) && (old_att[end_old+k] == new_att[end_new+k]) && (new_lin[end_new+k] != (char) NULL) && (old_lin[end_old+k] != (char) NULL) && (k < 10)) - k++; - /* - | check for commonality between rest of lines (are the old - | and new lines the same, except for a chunk in the middle?) - | if the rest of the lines are common, do not insert text - */ - old_off = end_new; - while ((old_lin[old_off] != (char) NULL) && (new_lin[old_off] != (char) NULL) && (old_lin[old_off] == new_lin[old_off]) && (old_att[old_off] == new_att[old_off])) - old_off++; - if ((old_lin[old_off] == new_lin[old_off]) && (old_att[old_off] == new_att[old_off])) - same = TRUE; - if ((!same) && ((k > 8) || ((new_lin[end_new+k] == (char) NULL) && (k != 0)))) - { - Position(window, line, offset); - insert = FALSE; - if (String_table[ic__] == NULL) - { - String_Out(String_table[im__], NULL, 0); - insert = TRUE; - } - for (k = offset; k < end_new; k++) - { - if (!insert) - String_Out(String_table[ic__], NULL, 0); - Char_ins(old_lin, old_att, new_lin[k], new_att[k], k, window->Num_cols); - } - if (insert) - String_Out(String_table[ei__], NULL, 0); - while ((old_lin[offset] != (char) NULL) && (offset < COLS)) - offset++; - pointer_old->last_char = offset; - changed = TRUE; - } - } - return(changed); -} - -void -doupdate() -{ - WINDOW *window; - int similar; - int diff; - int begin_old, begin_new; - int end_old, end_new; - int count1, j; - int from_top, tmp_ft, offset; - int changed; - int first_time; - int first_same; - int last_same; - int list[10]; - - struct _line *curr; - struct _line *virt; - struct _line *old; - - struct _line *new; - - char *cur_lin; - char *vrt_lin; - char *cur_att; - char *vrt_att; - char *att1, *att2; - char *c1, *c2; - - window = virtual_scr; - - if (Repaint_screen) - { - if (String_table[cl__]) - String_Out(String_table[cl__], NULL, 0); - else - { - from_top = 0; - while (from_top < LINES) - { - Position(curscr, from_top, 0); - if (String_table[ce__] != NULL) - String_Out(String_table[ce__], NULL, 0); - else - { - for (j = 0; j < window->Num_cols; j++) - putchar(' '); - } - from_top++; - } - } - for (from_top = 0, curr = curscr->first_line; from_top < curscr->Num_lines; from_top++, curr = curr->next_screen) - { - Position(curscr, from_top, 0); - for (j = 0; (curr->row[j] != (char) NULL) && (j < curscr->Num_cols); j++) - { - Char_out(curr->row[j], curr->attributes[j], curr->row, curr->attributes, j); - } - if (STAND) - { - STAND = FALSE; - Position(curscr, from_top, j); - attribute_off(); - } - } - Repaint_screen = FALSE; - } - - similar = 0; - diff = FALSE; - top_of_win = curscr->first_line; - - for (from_top = 0, curr = top_of_win, virt = window->first_line; - from_top < window->Num_lines; from_top++) - { - virtual_lines[from_top] = TRUE; - if ((similar = Comp_line(curr, virt)) > 0) - { - virtual_lines[from_top] = FALSE; - diff = TRUE; - } - curr = curr->next_screen; - virt = virt->next_screen; - } - - from_top = 0; - virt = window->first_line; - curr = top_of_win; - similar = 0; - /* - | if the window has lines that are different - */ - if (diff) - { - last_same = -1; - changed = FALSE; - for (first_same = window->Num_lines; - (first_same > from_top) && (virtual_lines[first_same - 1]); - first_same--) - ; - count1 = first_same - 1; - for (last_same = 0; - (last_same < window->Num_lines) && (virtual_lines[last_same]== FALSE); - last_same++) - ; - while ((from_top < first_same) && nc_scrolling_ability) - /* check entire lines for diffs */ - { - - - if (from_top >= last_same) - { - for (last_same = from_top; - (last_same < window->Num_lines) && - (virtual_lines[last_same] == FALSE); - last_same++) - ; - } - if (!virtual_lines[from_top]) - { - diff = TRUE; - /* - | check for lines deleted (scroll up) - */ - for (tmp_ft = from_top+1, old = curr->next_screen; - ((window->scroll_up) && (diff) && - (tmp_ft < last_same) && - (!virtual_lines[tmp_ft])); - tmp_ft++) - { - if ((Comp_line(old, virt) == -1) && (!virtual_lines[from_top])) - { - if (String_table[cs__]) /* scrolling region */ - { - list[1] = from_top; - list[0] = min((last_same - 1), (window->Num_lines - 1)); - String_Out(String_table[cs__], list, 2); - Curr_y = Curr_x = -1; - } - - for (offset = (tmp_ft - from_top); (offset > 0); offset--) - { - old = Delete_line(from_top, min((last_same - 1), (window->Num_lines - 1)), window); - diff = FALSE; - } - - if (String_table[cs__]) /* scrolling region */ - { - list[1] = 0; - list[0] = LINES; - String_Out(String_table[cs__], list, 2); - Curr_y = Curr_x = -1; - } - - top_of_win = curscr->first_line; - curr = top_of_win; - for (offset = 0; offset < from_top; offset++) - curr = curr->next_screen; - for (offset = from_top, old=curr, new=virt; - offset < window->Num_lines; - old=old->next_screen, new=new->next_screen, - offset++) - { - similar = Comp_line(old, new); - virtual_lines[offset] = (similar > 0 ? FALSE : TRUE); - } - } - else - old = old->next_screen; - } - /* - | check for lines inserted (scroll down) - */ - for (tmp_ft = from_top-1, old = curr->prev_screen; - ((window->scroll_down) && (tmp_ft >= 0) && - (diff) && - (!virtual_lines[tmp_ft])); - tmp_ft--) - { - if (Comp_line(old, virt) == -1) - { - if (String_table[cs__]) /* scrolling region */ - { - list[1] = tmp_ft; - list[0] = min((last_same - 1), (window->Num_lines - 1)); - String_Out(String_table[cs__], list, 2); - Curr_y = Curr_x = -1; - } - - for (offset = (from_top - tmp_ft); (offset > 0); offset--) - { - old = Insert_line(tmp_ft, min((last_same - 1), (window->Num_lines -1)), window); - diff = FALSE; - } - - if (String_table[cs__]) /* scrolling region */ - { - list[1] = 0; - list[0] = LINES; - String_Out(String_table[cs__], list, 2); - Curr_y = Curr_x = -1; - } - - top_of_win = curscr->first_line; - curr = top_of_win; - for (offset = 0; offset < from_top; offset++) - curr = curr->next_screen; - for (offset = from_top, old=curr, new=virt; - offset < window->Num_lines; - old=old->next_screen, new=new->next_screen, - offset++) - { - similar = Comp_line(old, new); - virtual_lines[offset] = (similar > 0 ? FALSE : TRUE); - } - } - else - old = old->prev_screen; - } - } - from_top++; - curr = curr->next_screen; - virt = virt->next_screen; - } - } - - for (from_top = 0, curr = curscr->first_line; from_top < window->SR; from_top++) - curr = curr->next_screen; - top_of_win = curr; - for (from_top = 0, curr = top_of_win, virt = window->first_line; from_top < window->Num_lines; from_top++, curr = curr->next_screen, virt = virt->next_screen) - { - if (((String_table[ic__]) || (String_table[im__])) && (String_table[dc__]) && (curr->row[0] != (char) NULL)) - { - j = 0; - first_time = TRUE; - vrt_lin = virt->row; - vrt_att = virt->attributes; - cur_lin = curr->row; - cur_att = curr->attributes; - while ((vrt_lin[j] != (char) NULL) && (j < window->Num_cols)) - { - if ((STAND) && (Booleans[xs__])) - { - while ((vrt_lin[j] == cur_lin[j]) && (vrt_att[j] == cur_att[j]) && (vrt_lin[j] != (char) NULL) && (vrt_att[j])) - j++; - if ((STAND) && (!vrt_att[j])) - { - STAND = FALSE; - Position(window, from_top, j); - attribute_off(); - attribute_off(); - } - } - else - { - while ((vrt_lin[j] == cur_lin[j]) && (vrt_att[j] == cur_att[j]) && (vrt_lin[j] != (char) NULL)) - j++; - } - if ((vrt_att[j] != cur_att[j]) && (cur_att[j]) && (Booleans[xs__])) - { - Position(window, from_top, j); -/* CLEAR_TO_EOL(window, from_top, j);*/ - attribute_off(); - attribute_off(); - } - if (vrt_lin[j] != (char) NULL) - { - begin_new = j; - begin_old = j; - end_old = j; - end_new = j; - if ((first_time) && (virt->changed)) - { - if (curr->last_char <= virt->last_char) - changed = check_insert(window, from_top, j, virt, curr); - } - changed = check_delete(window, from_top, j, virt, curr); - first_time = FALSE; - virt->changed = FALSE; - if (!changed) - changed = check_insert(window, from_top, j, virt, curr); - if (((!changed) || (cur_lin[j] != vrt_lin[j]) || (cur_att[j] != vrt_att[j])) && (j < window->Num_cols)) - { - if ((vrt_lin[j] == ' ') && (cur_lin[j] == (char) NULL) && (vrt_att[j] == cur_att[j])) - cur_lin[j] = ' '; - else - { - Position(window, from_top, j); - Char_out(vrt_lin[j], vrt_att[j], cur_lin, cur_att, j); - } - } - if ((vrt_lin[j] != (char) NULL)) - j++; - } - if ((STAND) && (!vrt_att[j])) - { - STAND = FALSE; - Position(window, from_top, j); - attribute_off(); - } - } - if ((vrt_lin[j] == (char) NULL) && (cur_lin[j] != (char) NULL)) - { - Position(window, from_top, j); - CLEAR_TO_EOL(window, from_top, j); - } - } - else /*if ((similar != -1) && (similar != 0))*/ - { - j = 0; - c1 = curr->row; - att1 = curr->attributes; - c2 = virt->row; - att2 = virt->attributes; - while ((j < window->Num_cols) && (c2[j] != (char) NULL)) - { - while ((c1[j] == c2[j]) && (att1[j] == att2[j]) && (j < window->Num_cols) && (c2[j] != (char) NULL)) - j++; - begin_old = j; - begin_new = j; - if ((j < window->Num_cols) && (c2[j] != (char) NULL)) - { - Position(window, from_top, begin_old); - CLEAR_TO_EOL(window, from_top, j); - Position(window, from_top, begin_old); - for (j = begin_old; (c2[j] != (char) NULL) && (j < window->Num_cols); j++) - Char_out(c2[j], att2[j], c1, att1, j); - } - } - if ((c2[j] == (char) NULL) && (c1[j] != (char) NULL)) - { - Position(window, from_top, j); - CLEAR_TO_EOL(window, from_top, j); - } - } - if (STAND) - { - STAND = FALSE; - Position(window, from_top, j); - attribute_off(); - } - virt->number = from_top; - } - Position(window, window->LY, window->LX); -} - -void -Position(window, row, col) /* position the cursor for output on the screen */ -WINDOW *window; -int row; -int col; -{ - int list[10]; - int place; - - int pos_row; - int pos_column; - - pos_row = row + window->SR; - pos_column = col + window->SC; - if ((pos_row != Curr_y) || (pos_column != Curr_x)) - { - if (String_table[cm__] != NULL) /* && (row < window->Num_lines) && (column < window->Num_cols))*/ - { - place = 0; - list[place++] = pos_column; - list[place++] = pos_row; - String_Out(String_table[cm__], list, place); - if ((STAND) && (!Booleans[ms__])) - attribute_on(); - } - Curr_x = pos_column; - Curr_y = pos_row; - } -} - -void -Char_del(line, attrib, offset, maxlen) /* delete chars from line */ -char *line; -char *attrib; -int offset; -int maxlen; -{ - int one, two; - - for (one = offset, two = offset+1; (line[one] != (char) NULL) && (one < maxlen); one++, two++) - { - line[one] = line[two]; - attrib[one] = attrib[two]; - } - String_Out(String_table[dc__], NULL, 0); -} - -void -Char_ins(line, attrib, newc, newatt, offset, maxlen) /* insert chars in line */ -char *line; -char *attrib; -char newc; -char newatt; -int offset; -int maxlen; -{ - int one, two; - - one = 0; - while ((line[one] != (char) NULL) && (one < (maxlen - 2))) - one++; - for (two = one + 1; (two > offset); one--, two--) - { - line[two] = line[one]; - attrib[two] = attrib[one]; - } - line[offset] = newc; - attrib[offset] = newatt; - Char_out(newc, newatt, line, attrib, offset); -} - -void -attribute_on() -{ - if (String_table[sa__]) - { - attributes_set[0] = 1; - String_Out(String_table[sa__], attributes_set, 1); - } - else if (String_table[so__]) - String_Out(String_table[so__], NULL, 0); -} - -void -attribute_off() -{ - if (String_table[me__]) - String_Out(String_table[me__], NULL, 0); - else if (String_table[sa__]) - { - attributes_set[0] = 0; - String_Out(String_table[sa__], attributes_set, 1); - } - else if (String_table[se__]) - String_Out(String_table[se__], NULL, 0); -} - -void -Char_out(newc, newatt, line, attrib, offset) /* output character with proper attribute */ -char newc; -char newatt; -char *line; -char *attrib; -int offset; -{ - - - if ((newatt) && (!STAND)) - { - STAND = TRUE; - attribute_on(); - } - else if ((STAND) && (!newatt)) - { - STAND = FALSE; - attribute_off(); - } - - if ((newatt) && (STAND) && (Booleans[xs__])) - { - attribute_on(); - } - - if (!((Curr_y >= (LINES - 1)) && (Curr_x >= (COLS - 1)))) - { - putchar(newc); - line[offset] = newc; - attrib[offset] = newatt; - } - Curr_x++; -} - diff --git a/usr.bin/ee/doc/new_curse.h b/usr.bin/ee/doc/new_curse.h deleted file mode 100644 index 86a8574..0000000 --- a/usr.bin/ee/doc/new_curse.h +++ /dev/null @@ -1,255 +0,0 @@ -/* - | new_curse.h - | - | A subset of curses developed for use with ae. - | - | written by Hugh Mahon - | - | THIS MATERIAL IS PROVIDED "AS IS". THERE ARE - | NO WARRANTIES OF ANY KIND WITH REGARD TO THIS - | MATERIAL, INCLUDING, BUT NOT LIMITED TO, THE - | IMPLIED WARRANTIES OF MERCHANTABILITY AND - | FITNESS FOR A PARTICULAR PURPOSE. Neither - | Hewlett-Packard nor Hugh Mahon shall be liable - | for errors contained herein, nor for - | incidental or consequential damages in - | connection with the furnishing, performance or - | use of this material. Neither Hewlett-Packard - | nor Hugh Mahon assumes any responsibility for - | the use or reliability of this software or - | documentation. This software and - | documentation is totally UNSUPPORTED. There - | is no support contract available. Hewlett- - | Packard has done NO Quality Assurance on ANY - | of the program or documentation. You may find - | the quality of the materials inferior to - | supported materials. - | - | This software is not a product of Hewlett-Packard, Co., or any - | other company. No support is implied or offered with this software. - | You've got the source, and you're on your own. - | - | This software may be distributed under the terms of Larry Wall's - | Artistic license, a copy of which is included in this distribution. - | - | This notice must be included with this software and any derivatives. - | - | Copyright (c) 1986, 1987, 1988, 1991, 1995 Hugh Mahon - | All are rights reserved. - | - */ - -#include - -#ifdef SYS5 -#include -#else -#include -#include -#endif - -#define KEY_BREAK 0401 -#define KEY_DOWN 0402 -#define KEY_UP 0403 -#define KEY_LEFT 0404 -#define KEY_RIGHT 0405 -#define KEY_HOME 0406 -#define KEY_BACKSPACE 0407 -#define KEY_F0 0410 -#define KEY_F(n) (KEY_F0+(n)) -#define KEY_DL 0510 -#define KEY_IL 0511 -#define KEY_DC 0512 -#define KEY_IC 0513 -#define KEY_EIC 0514 -#define KEY_CLEAR 0515 -#define KEY_EOS 0516 -#define KEY_EOL 0517 -#define KEY_SF 0520 -#define KEY_SR 0521 -#define KEY_NPAGE 0522 -#define KEY_PPAGE 0523 -#define KEY_STAB 0524 -#define KEY_CTAB 0525 -#define KEY_CATAB 0526 -#define KEY_ENTER 0527 -#define KEY_SRESET 0530 -#define KEY_RESET 0531 -#define KEY_PRINT 0532 -#define KEY_LL 0533 -#define KEY_A1 0534 -#define KEY_A3 0535 -#define KEY_B2 0536 -#define KEY_C1 0537 -#define KEY_C3 0540 -#define KEY_BTAB 0541 -#define KEY_BEG 0542 -#define KEY_CANCEL 0543 -#define KEY_CLOSE 0544 -#define KEY_COMMAND 0545 -#define KEY_COPY 0546 -#define KEY_CREATE 0547 -#define KEY_END 0550 -#define KEY_EXIT 0551 -#define KEY_FIND 0552 -#define KEY_HELP 0553 -#define KEY_MARK 0554 -#define KEY_MESSAGE 0555 -#define KEY_MOVE 0556 -#define KEY_NEXT 0557 -#define KEY_OPEN 0560 -#define KEY_OPTIONS 0561 -#define KEY_PREVIOUS 0562 -#define KEY_REDO 0563 -#define KEY_REFERENCE 0564 -#define KEY_REFRESH 0565 -#define KEY_REPLACE 0566 -#define KEY_RESTART 0567 -#define KEY_RESUME 0570 -#define KEY_SAVE 0571 -#define KEY_SBEG 0572 -#define KEY_SCANCEL 0573 -#define KEY_SCOMMAND 0574 -#define KEY_SCOPY 0575 -#define KEY_SCREATE 0576 -#define KEY_SDC 0577 -#define KEY_SDL 0600 -#define KEY_SELECT 0601 -#define KEY_SEND 0602 -#define KEY_SEOL 0603 -#define KEY_SEXIT 0604 -#define KEY_SFIND 0605 -#define KEY_SHELP 0606 -#define KEY_SHOME 0607 -#define KEY_SIC 0610 -#define KEY_SLEFT 0611 -#define KEY_SMESSAGE 0612 -#define KEY_SMOVE 0613 -#define KEY_SNEXT 0614 -#define KEY_SOPTIONS 0615 -#define KEY_SPREVIOUS 0616 -#define KEY_SPRINT 0617 -#define KEY_SREDO 0620 -#define KEY_SREPLACE 0621 -#define KEY_SRIGHT 0622 -#define KEY_SRSUME 0623 -#define KEY_SSAVE 0624 -#define KEY_SSUSPEND 0625 -#define KEY_SUNDO 0626 -#define KEY_SUSPEND 0627 -#define KEY_UNDO 0630 - -#define TRUE 1 -#define FALSE 0 - -#define A_STANDOUT 0001 /* standout mode */ -#define SCROLL 1 /* text has been scrolled */ -#define CLEAR 2 /* window has been cleared */ -#define CHANGE 3 /* window has been changed */ -#define UP 1 /* direction of scroll */ -#define DOWN 2 - -struct _line { - struct _line *next_screen; - struct _line *prev_screen; - char *row; - char *attributes; - int last_char; - int changed; - int scroll; - int number; - }; - -struct _line *top_of_win; - -typedef struct WIND { - int SR; /* starting row */ - int SC; /* starting column */ - int LC; /* last column */ - int LX; /* last cursor column position */ - int LY; /* last cursor row position */ - int Attrib; /* attributes active in window */ - int Num_lines; /* number of lines */ - int Num_cols; /* number of columns */ - int scroll_up; /* number of lines moved */ - int scroll_down; - int SCROLL_CLEAR; /* indicates that window has been scrolled or cleared */ - struct _line *first_line; - } WINDOW; - -extern WINDOW *curscr; -extern WINDOW *stdscr; - -extern int LINES, COLS; - -#if __STDC__ || defined(__cplusplus) -#define P_(s) s -#else -#define P_(s) () -#endif - -extern void copy_window P_((WINDOW *origin, WINDOW *destination)); -extern void reinitscr P_((int)); -extern void initscr P_((void)); -extern int Get_int P_((void)); -extern int INFO_PARSE P_((void)); -extern int AtoI P_((void)); -extern void Key_Get P_((void)); -extern struct _line *Screenalloc P_((int columns)); -extern WINDOW *newwin P_((int lines, int cols, int start_l, int start_c)); -extern int Operation P_((int Temp_Stack[], int place)); -extern void Info_Out P_((char *string, int p_list[], int place)); -extern void wmove P_((WINDOW *window, int row, int column)); -extern void clear_line P_((struct _line *line, int column, int cols)); -extern void werase P_((WINDOW *window)); -extern void wclrtoeol P_((WINDOW *window)); -extern void wrefresh P_((WINDOW *window)); -extern void touchwin P_((WINDOW *window)); -extern void wnoutrefresh P_((WINDOW *window)); -extern void flushinp P_((void)); -extern void ungetch P_((int c)); -extern int wgetch P_((WINDOW *window)); -extern void Clear P_((int)); -extern int Get_key P_((int first_char)); -extern void waddch P_((WINDOW *window, int c)); -extern void winsertln P_((WINDOW *window)); -extern void wdeleteln P_((WINDOW *window)); -extern void wclrtobot P_((WINDOW *window)); -extern void wstandout P_((WINDOW *window)); -extern void wstandend P_((WINDOW *window)); -extern void waddstr P_((WINDOW *window, char *string)); -extern void clearok P_((WINDOW *window, int flag)); -extern void echo P_((void)); -extern void noecho P_((void)); -extern void raw P_((void)); -extern void noraw P_((void)); -extern void nl P_((void)); -extern void nonl P_((void)); -extern void saveterm P_((void)); -extern void fixterm P_((void)); -extern void resetterm P_((void)); -extern void nodelay P_((WINDOW *window, int flag)); -extern void idlok P_((WINDOW *window, int flag)); -extern void keypad P_((WINDOW *window, int flag)); -extern void savetty P_((void)); -extern void resetty P_((void)); -extern void endwin P_((void)); -extern void delwin P_((WINDOW *window)); -extern void wprintw P_((WINDOW *window, const char* format, ...)); -extern void iout P_((WINDOW *window, int value)); -extern int Comp_line P_((struct _line *line1, struct _line *line2)); -extern struct _line *Insert_line P_((int row, int end_row, WINDOW *window)); -extern struct _line *Delete_line P_((int row, int end_row, WINDOW *window)); -extern void CLEAR_TO_EOL P_((WINDOW *window, int row, int column)); -extern int check_delete P_((WINDOW *window, int line, int offset, struct _line *pointer_new, struct _line *pointer_old)); -extern int check_insert P_((WINDOW *window, int line, int offset, struct _line *pointer_new, struct _line *pointer_old)); -extern void doupdate P_((void)); -extern void Position P_((WINDOW *window, int row, int col)); -extern void Char_del P_((char *line, char *attrib, int offset, int maxlen)); -extern void Char_ins P_((char *line, char *attrib, int newc, int newatt, int offset, int maxlen)); -extern void attribute_on P_((void)); -extern void attribute_off P_((void)); -extern void Char_out P_((int newc, int newatt, char *line, char *attrib, int offset)); - -#undef P_ - diff --git a/usr.bin/ee/ee.1 b/usr.bin/ee/ee.1 index b51d9d7..91ca919 100644 --- a/usr.bin/ee/ee.1 +++ b/usr.bin/ee/ee.1 @@ -4,7 +4,7 @@ .\" .\" nroff -man ee.1 .\" -.\" $Header: /home/ncvs/src/usr.bin/ee/ee.1,v 1.2 1996/01/30 13:48:39 mpp Exp $ +.\" $Header: /home/ncvs/src/usr.bin/ee/ee.1,v 1.3 1996/02/02 00:25:36 mpp Exp $ .\" .\" .TH ee 1 "" "" "" "" @@ -211,7 +211,7 @@ Read the named \fIfile\fR. Write the text to the named \fIfile\fR. .RE .\" -.\" menu options +.\" menu operations .\" .SS "Menu Operations" .PP @@ -231,6 +231,9 @@ for moving down to move to the desired items in the menu, then press .B return to perform the indicated task. .PP +To the left of each menu item is a letter, which if the corresponding +letter is pressed on the keyboard selects that menu entry. +.PP The main menu in \fIee\fR is as follows: .RS 4 .IP "\fBleave editor\fR" @@ -454,6 +457,24 @@ Turns on emacs key bindings. .IP \fBnoemacs\fR Turns off emacs key bindings. .RE +.\" +.\" save editor configuration +.\" +.SS "Save Editor Configuration" +.PP +When using this entry from the +.B settings +menu, the user may choose to save the current configuration of +the editor (see \fBInitializing ee from a +file\fR above) to a file named +.I .init.ee +in the current directory or the user's home directory. If a file named +.I .init.ee +already exists, it will be renamed +.IR .init.ee.old . +.\" +.\" Caveats +.\" .SH CAVEATS .PP THIS MATERIAL IS PROVIDED "AS IS". THERE ARE @@ -501,7 +522,7 @@ This software and documentation contains proprietary information which is protected by copyright. All rights are reserved. .PP -Copyright (c) 1990, 1991, 1992, 1993 Hugh Mahon. +Copyright (c) 1990, 1991, 1992, 1993, 1995 Hugh Mahon. .SH "SEE ALSO" .PP termcap(5), terminfo(5), environ(7), spell(1), ispell(1), lp(1) diff --git a/usr.bin/ee/ee.c b/usr.bin/ee/ee.c index a5f609a..8f6650cc 100644 --- a/usr.bin/ee/ee.c +++ b/usr.bin/ee/ee.c @@ -49,12 +49,12 @@ | proprietary information which is protected by | copyright. All rights are reserved. | - | $Header: /home/ncvs/src/usr.bin/ee/ee.c,v 1.5 1995/11/08 09:54:19 ache Exp $ + | $Header: /home/ncvs/src/usr.bin/ee/ee.c,v 1.6 1996/05/27 20:59:36 joerg Exp $ | */ char *ee_copyright_message = -"Copyright (c) 1986, 1990, 1991, 1992, 1993, 1994, 1995 Hugh Mahon "; +"Copyright (c) 1986, 1990, 1991, 1992, 1993, 1994, 1995, 1996 Hugh Mahon "; char *ee_long_notice[] = { "This software and documentation contains", @@ -62,17 +62,15 @@ char *ee_long_notice[] = { "copyright. All rights are reserved." }; -char *version = "@(#) ee, version 1.2.4 $Revision: 1.5 $"; +char *version = "@(#) ee, version 1.3 $Revision: 1.1.1.2 $"; #ifdef NCURSE #include "new_curse.h" -#else -#ifdef HAS_NCURSES +#elif HAS_NCURSES #include #else #include #endif -#endif #include #include @@ -316,6 +314,7 @@ void sh_command P_((char *string)); void set_up_term P_((void)); void resize_check P_((void)); int menu_op P_((struct menu_entries *)); +void paint_menu P_((struct menu_entries menu_list[], int max_width, int max_height, int list_size, int top_offset, WINDOW *menu_win, int off_start, int vert_size)); void help P_((void)); void paint_info_win P_((void)); void no_info_window P_((void)); @@ -327,6 +326,7 @@ void redraw P_((void)); int Blank_Line P_((struct text *test_line)); void Format P_((void)); void ee_init P_((void)); +void dump_ee_conf P_((void)); void echo_string P_((char *string)); void spell_op P_((void)); void ispell_op P_((void)); @@ -354,13 +354,21 @@ struct menu_entries modes_menu[] = { {"", NULL, NULL, NULL, NULL, -1}, {"", NULL, NULL, NULL, NULL, -1}, {"", NULL, NULL, NULL, NULL, -1}, + {"", NULL, NULL, NULL, dump_ee_conf, -1}, {NULL, NULL, NULL, NULL, NULL, -1} }; -char *mode_strings[9]; +char *mode_strings[10]; #define NUM_MODES_ITEMS 9 +struct menu_entries config_dump_menu[] = { + {"", NULL, NULL, NULL, NULL, 0}, + {"", NULL, NULL, NULL, NULL, -1}, + {"", NULL, NULL, NULL, NULL, -1}, + {NULL, NULL, NULL, NULL, NULL, -1} + }; + struct menu_entries leave_menu[] = { {"", NULL, NULL, NULL, NULL, -1}, {"", NULL, NULL, NULL, finish, -1}, @@ -425,6 +433,10 @@ char *command_strings[5]; char *commands[30]; char *init_strings[20]; +#define MENU_WARN 1 + +#define max_alpha_char 36 + /* | Declarations for strings for localization */ @@ -510,6 +522,13 @@ char *EIGHTBIT; char *NOEIGHTBIT; char *EMACS_string; char *NOEMACS_string; +char *conf_dump_err_msg; +char *conf_dump_success_msg; +char *conf_not_saved_msg; +char *ree_no_file_msg; +char *cancel_string; +char *menu_too_lrg_msg; +char *more_above_str, *more_below_str; #ifndef __STDC__ #ifndef HAS_STDLIB @@ -566,6 +585,14 @@ char *argv[]; right_margin = COLS - 1; if (top_of_stack == NULL) { + if (restrict_mode()) + { + wmove(com_win, 0, 0); + werase(com_win); + wprintw(com_win, ree_no_file_msg); + wrefresh(com_win); + edit_abort(0); + } wprintw(com_win, no_file_string); wrefresh(com_win); } @@ -2077,11 +2104,8 @@ check_fp() /* open or close files according to flags */ curr_line = tmp_line; point = curr_line->line; draw_screen(); - wmove(com_win, 0, 0); - wclrtoeol(com_win); if (input_file) { - wprintw(com_win, open_file_msg, in_file_name, line_num); input_file = FALSE; if (start_at_line != NULL) { @@ -2093,6 +2117,8 @@ check_fp() /* open or close files according to flags */ } else { + wmove(com_win, 0, 0); + wclrtoeol(com_win); text_changes = TRUE; if ((tmp_file != NULL) && (*tmp_file != (char) NULL)) wprintw(com_win, file_read_fin_msg, tmp_file); @@ -2110,6 +2136,7 @@ char *file_name; int length; /* length of line read by read */ int append; /* should text be appended to current line */ struct text *temp_line; + char ro_flag = FALSE; if (recv_file) /* if reading a file */ { @@ -2119,7 +2146,10 @@ char *file_name; if (access(file_name, 2)) /* check permission to write */ { if ((errno == ENOTDIR) || (errno == EACCES) || (errno == EROFS) || (errno == ETXTBSY) || (errno == EFAULT)) + { wprintw(com_win, read_only_msg); + ro_flag = TRUE; + } } wrefresh(com_win); } @@ -2153,6 +2183,8 @@ char *file_name; wmove(com_win, 0, 0); wclrtoeol(com_win); wprintw(com_win, file_read_lines_msg, in_file_name, curr_line->line_number); + if (ro_flag) + wprintw(com_win, read_only_msg); wrefresh(com_win); } else if (can_read) /* not input_file and file is non-zero size */ @@ -3151,9 +3183,11 @@ resize_check() wrefresh(text_win); } +static char item_alpha[] = "abcdefghijklmnopqrstuvwxyz0123456789 "; + int menu_op(menu_list) -struct menu_entries * menu_list; +struct menu_entries menu_list[]; { WINDOW *temp_win; int max_width, max_height; @@ -3161,10 +3195,13 @@ struct menu_entries * menu_list; int counter; int length; int input; + int temp; int list_size; - int top_offset; - int temp_int; - char *cancel_string = menu_cancel_msg; + int top_offset; /* offset from top where menu items start */ + int vert_pos; /* vertical position */ + int vert_size; /* vertical size for menu list item display */ + int off_start = 1; /* offset from start of menu items to start display */ + /* | determine number and width of menu items @@ -3173,12 +3210,15 @@ struct menu_entries * menu_list; list_size = 1; while (menu_list[list_size + 1].item_string != NULL) list_size++; - max_width = strlen(cancel_string); + max_width = 0; for (counter = 0; counter <= list_size; counter++) { if ((length = strlen(menu_list[counter].item_string)) > max_width) max_width = length; } + max_width += 3; + max_width = max(max_width, strlen(cancel_string)); + max_width = max(max_width, max(strlen(more_above_str), strlen(more_below_str))); max_width += 6; /* @@ -3186,114 +3226,157 @@ struct menu_entries * menu_list; | if not, print error message and return to calling function */ - if ((LINES < list_size) || (max_width > COLS)) + if (max_width > COLS) { wmove(com_win, 0, 0); werase(com_win); - wprintw(com_win, menu_size_err_msg); + wprintw(com_win, menu_too_lrg_msg); + wrefresh(com_win); clear_com_win = TRUE; return(0); } top_offset = 0; - max_height = list_size; - if (LINES >= (list_size + 8)) + if (list_size > LINES) + { + max_height = LINES; + if (max_height > 11) + vert_size = max_height - 8; + else + vert_size = max_height; + } + else + { + vert_size = list_size; + max_height = list_size; + } + + if (LINES >= (vert_size + 8)) { - max_height = list_size + 8; + if (menu_list[0].argument != MENU_WARN) + max_height = vert_size + 8; + else + max_height = vert_size + 7; top_offset = 4; } x_off = (COLS - max_width) / 2; y_off = (LINES - max_height - 1) / 2; temp_win = newwin(max_height, max_width, y_off, x_off); keypad(temp_win, TRUE); - werase(temp_win); - - /* - | output top and bottom portions of menu box only if window - | large enough - */ - - if (max_height > list_size) - { - wmove(temp_win, 1, 1); - if (!nohighlight) - wstandout(temp_win); - waddch(temp_win, '+'); - for (counter = 0; counter < (max_width - 4); counter++) - waddch(temp_win, '-'); - waddch(temp_win, '+'); - wmove(temp_win, (max_height - 2), 1); - waddch(temp_win, '+'); - for (counter = 0; counter < (max_width - 4); counter++) - waddch(temp_win, '-'); - waddch(temp_win, '+'); - wstandend(temp_win); - wmove(temp_win, 2, 3); - waddstr(temp_win, menu_list[0].item_string); - wmove(temp_win, (max_height - 3), 3); - waddstr(temp_win, cancel_string); - } - if (!nohighlight) - wstandout(temp_win); - for (counter = 0; counter < (list_size + top_offset); counter++) - { - if (top_offset == 4) - { - temp_int = counter + 2; - } - else - temp_int = counter; + paint_menu(menu_list, max_width, max_height, list_size, top_offset, temp_win, off_start, vert_size); - wmove(temp_win, temp_int, 1); - waddch(temp_win, '|'); - wmove(temp_win, temp_int, (max_width - 2)); - waddch(temp_win, '|'); - } - wstandend(temp_win); - for (counter = 1; counter <= list_size; counter++) - { - wmove(temp_win, (top_offset + counter - 1), 3); - waddstr(temp_win, menu_list[counter].item_string); - } counter = 1; + vert_pos = 0; do { - wmove(temp_win, (counter + top_offset - 1), 3); + if (off_start > 2) + wmove(temp_win, (1 + counter + top_offset - off_start), 3); + else + wmove(temp_win, (counter + top_offset - off_start), 3); + wrefresh(temp_win); - input = wgetch(temp_win); + in = wgetch(temp_win); + input = in; if (input == -1) exit(0); - switch (input) + + if (((tolower(input) >= 'a') && (tolower(input) <= 'z')) || + ((input >= '0') && (input <= '9'))) { - case ' ': /* space */ - case '\022': /* ^r, right */ - case '\004': /* ^d, down */ - case KEY_RIGHT: - case KEY_DOWN: - counter++; - if (counter > list_size) - counter = 1; - break; - case '\010': /* ^h, backspace*/ - case '\014': /* ^l, left */ - case '\025': /* ^u, up */ - case 127: /* ^?, delete */ - case KEY_LEFT: - case KEY_UP: - counter--; - if (counter == 0) - counter = list_size; - break; - case '\033': /* escape key */ - counter = 0; - break; - default: - break; + if ((tolower(input) >= 'a') && (tolower(input) <= 'z')) + { + temp = 1 + tolower(input) - 'a'; + } + else if ((input >= '0') && (input <= '9')) + { + temp = (2 + 'z' - 'a') + (input - '0'); + } + + if (temp <= list_size) + { + input = '\n'; + counter = temp; + } + } + else + { + switch (input) + { + case ' ': /* space */ + case '\004': /* ^d, down */ + case KEY_RIGHT: + case KEY_DOWN: + counter++; + if (counter > list_size) + counter = 1; + break; + case '\010': /* ^h, backspace*/ + case '\025': /* ^u, up */ + case 127: /* ^?, delete */ + case KEY_BACKSPACE: + case KEY_LEFT: + case KEY_UP: + counter--; + if (counter == 0) + counter = list_size; + break; + case '\033': /* escape key */ + if (menu_list[0].argument != MENU_WARN) + counter = 0; + break; + case '\014': /* ^l */ + case '\022': /* ^r, redraw */ + paint_menu(menu_list, max_width, max_height, + list_size, top_offset, temp_win, + off_start, vert_size); + break; + default: + break; + } + } + + if (((list_size - off_start) >= (vert_size - 1)) && + (counter > (off_start + vert_size - 3)) && + (off_start > 1)) + { + if (counter == list_size) + off_start = (list_size - vert_size) + 2; + else + off_start++; + + paint_menu(menu_list, max_width, max_height, + list_size, top_offset, temp_win, off_start, + vert_size); + } + else if ((list_size != vert_size) && + (counter > (off_start + vert_size - 2))) + { + if (counter == list_size) + off_start = 2 + (list_size - vert_size); + else if (off_start == 1) + off_start = 3; + else + off_start++; + + paint_menu(menu_list, max_width, max_height, + list_size, top_offset, temp_win, off_start, + vert_size); + } + else if (counter < off_start) + { + if (counter <= 2) + off_start = 1; + else + off_start = counter; + + paint_menu(menu_list, max_width, max_height, + list_size, top_offset, temp_win, off_start, + vert_size); } } - while ((input != '\r') && (input != '\n') && (input != '\033')); + while ((input != '\r') && (input != '\n') && (counter != 0)); werase(temp_win); wrefresh(temp_win); @@ -3313,12 +3396,115 @@ struct menu_entries * menu_list; if (info_window) paint_info_win(); - midscreen(scr_vert, point); + redraw(); return(counter); } void +paint_menu(menu_list, max_width, max_height, list_size, top_offset, menu_win, + off_start, vert_size) +struct menu_entries menu_list[]; +int max_width, max_height, list_size, top_offset; +WINDOW *menu_win; +int off_start, vert_size; +{ + int counter, temp_int; + + werase(menu_win); + + /* + | output top and bottom portions of menu box only if window + | large enough + */ + + if (max_height > vert_size) + { + wmove(menu_win, 1, 1); + if (!nohighlight) + wstandout(menu_win); + waddch(menu_win, '+'); + for (counter = 0; counter < (max_width - 4); counter++) + waddch(menu_win, '-'); + waddch(menu_win, '+'); + + wmove(menu_win, (max_height - 2), 1); + waddch(menu_win, '+'); + for (counter = 0; counter < (max_width - 4); counter++) + waddch(menu_win, '-'); + waddch(menu_win, '+'); + wstandend(menu_win); + wmove(menu_win, 2, 3); + waddstr(menu_win, menu_list[0].item_string); + wmove(menu_win, (max_height - 3), 3); + if (menu_list[0].argument != MENU_WARN) + waddstr(menu_win, cancel_string); + } + if (!nohighlight) + wstandout(menu_win); + + for (counter = 0; counter < (vert_size + top_offset); counter++) + { + if (top_offset == 4) + { + temp_int = counter + 2; + } + else + temp_int = counter; + + wmove(menu_win, temp_int, 1); + waddch(menu_win, '|'); + wmove(menu_win, temp_int, (max_width - 2)); + waddch(menu_win, '|'); + } + wstandend(menu_win); + + if (list_size > vert_size) + { + if (off_start >= 3) + { + temp_int = 1; + wmove(menu_win, top_offset, 3); + waddstr(menu_win, more_above_str); + } + else + temp_int = 0; + + for (counter = off_start; + ((temp_int + counter - off_start) < (vert_size - 1)); + counter++) + { + wmove(menu_win, (top_offset + temp_int + + (counter - off_start)), 3); + if (list_size > 1) + wprintw(menu_win, "%c) ", item_alpha[min((counter - 1), max_alpha_char)]); + waddstr(menu_win, menu_list[counter].item_string); + } + + wmove(menu_win, (top_offset + (vert_size - 1)), 3); + + if (counter == list_size) + { + if (list_size > 1) + wprintw(menu_win, "%c) ", item_alpha[min((counter - 1), max_alpha_char)]); + wprintw(menu_win, menu_list[counter].item_string); + } + else + wprintw(menu_win, more_below_str); + } + else + { + for (counter = 1; counter <= list_size; counter++) + { + wmove(menu_win, (top_offset + counter - 1), 3); + if (list_size > 1) + wprintw(menu_win, "%c) ", item_alpha[min((counter - 1), max_alpha_char)]); + waddstr(menu_win, menu_list[counter].item_string); + } + } +} + +void help() { int counter; @@ -3812,12 +3998,14 @@ ee_init() /* check for init file and read it if it exists */ init_file = fopen(init_name[counter], "r"); while ((str2 = fgets(string, 512, init_file)) != NULL) { - if (unique_test(string, init_strings) != 1) - continue; str1 = str2 = string; while (*str2 != '\n') str2++; *str2 = (char) NULL; + + if (unique_test(string, init_strings) != 1) + continue; + if (compare(str1, CASE, FALSE)) case_sen = TRUE; else if (compare(str1, NOCASE, FALSE)) @@ -3883,6 +4071,109 @@ ee_init() /* check for init file and read it if it exists */ free(home); } +/* + | Save current configuration to .init.ee file in the current directory. + */ + +void +dump_ee_conf() +{ + FILE *init_file; + FILE *old_init_file = NULL; + char *file_name = ".init.ee"; + char *home_dir = "~/.init.ee"; + char buffer[512]; + struct stat buf; + char *string; + int length; + int option = 0; + + if (restrict_mode()) + { + return; + } + + option = menu_op(config_dump_menu); + + werase(com_win); + wmove(com_win, 0, 0); + + if (option == 0) + { + wprintw(com_win, conf_not_saved_msg); + wrefresh(com_win); + return; + } + else if (option == 2) + file_name = resolve_name(home_dir); + + /* + | If a .init.ee file exists, move it to .init.ee.old. + */ + + if (stat(file_name, &buf) != -1) + { + sprintf(buffer, "%s.old", file_name); + unlink(buffer); + link(file_name, buffer); + unlink(file_name); + old_init_file = fopen(buffer, "r"); + } + + init_file = fopen(file_name, "w"); + if (init_file == NULL) + { + wprintw(com_win, conf_dump_err_msg); + wrefresh(com_win); + return; + } + + if (old_init_file != NULL) + { + /* + | Copy non-configuration info into new .init.ee file. + */ + while ((string = fgets(buffer, 512, old_init_file)) != NULL) + { + length = strlen(string); + string[length - 1] = (char) NULL; + + if (unique_test(string, init_strings) == 1) + { + if (compare(string, Echo, FALSE)) + { + fprintf(init_file, "%s\n", string); + } + } + else + fprintf(init_file, "%s\n", string); + } + + fclose(old_init_file); + } + + fprintf(init_file, "%s\n", case_sen ? CASE : NOCASE); + fprintf(init_file, "%s\n", expand_tabs ? EXPAND : NOEXPAND); + fprintf(init_file, "%s\n", info_window ? INFO : NOINFO ); + fprintf(init_file, "%s\n", observ_margins ? MARGINS : NOMARGINS ); + fprintf(init_file, "%s\n", auto_format ? AUTOFORMAT : NOAUTOFORMAT ); + fprintf(init_file, "%s %s\n", PRINTCOMMAND, print_command); + fprintf(init_file, "%s %d\n", RIGHTMARGIN, right_margin); + fprintf(init_file, "%s\n", nohighlight ? NOHIGHLIGHT : HIGHLIGHT ); + fprintf(init_file, "%s\n", eightbit ? EIGHTBIT : NOEIGHTBIT ); + fprintf(init_file, "%s\n", emacs_keys_mode ? EMACS_string : NOEMACS_string ); + + fclose(init_file); + + wprintw(com_win, conf_dump_success_msg, file_name); + wrefresh(com_win); + + if ((option == 2) && (file_name != home_dir)) + { + free(file_name); + } +} + void echo_string(string) /* echo the given string */ char *string; @@ -3987,8 +4278,11 @@ struct text *test_line; int counter; char *pnt; + if (test_line == NULL) + return(0); + pnt = test_line->line; - if ((test_line == NULL) || (pnt == NULL) || (*pnt == (char) NULL) || + if ((pnt == NULL) || (*pnt == (char) NULL) || (*pnt == '.') || (*pnt == '>')) return(0); @@ -4026,6 +4320,7 @@ Auto_Format() /* format the paragraph according to set margins */ int leave_loop = FALSE; int status; int counter; + char not_blank; char *line; char *tmp_srchstr; char *temp1, *temp2; @@ -4102,6 +4397,8 @@ Auto_Format() /* format the paragraph according to set margins */ | will fit in before the margin. */ + counter = 0; + while (!leave_loop) { if (position != curr_line->line_length) @@ -4115,6 +4412,8 @@ Auto_Format() /* format the paragraph according to set margins */ else right(TRUE); + not_blank = FALSE; + /* | fill line if first word on next line will fit | in the line without crossing the margin @@ -4130,10 +4429,27 @@ Auto_Format() /* format the paragraph according to set margins */ del_word(); if (position != 1) bol(); - if (Blank_Line(curr_line)) + + /* + | We know this line was not blank before, so + | make sure that it doesn't have one of the + | leading characters that indicate the line + | should not be modified. + | + | We also know that this character should not + | be left as the first character of this line. + */ + + if ((Blank_Line(curr_line)) && + (curr_line->line[0] != '.') && + (curr_line->line[0] != '>')) { del_line(); + not_blank = FALSE; } + else + not_blank = TRUE; + /* | go to end of previous line */ @@ -4170,14 +4486,18 @@ Auto_Format() /* format the paragraph according to set margins */ if ((*point == ' ') || (*point == '\t')) adv_word(); undel_word(); + not_blank = TRUE; if (position != 1) bol(); left(TRUE); } } - if (!Blank_Line(curr_line->next_line)) + if ((!Blank_Line(curr_line->next_line)) || (not_blank)) + { adv_line(); + counter++; + } else leave_loop = TRUE; } @@ -4186,8 +4506,9 @@ Auto_Format() /* format the paragraph according to set margins */ | go back to begin of paragraph, put cursor back to original position */ - bol(); - while (!Blank_Line(curr_line->prev_line)) + if (position != 1) + bol(); + while ((counter-- > 0) || (!Blank_Line(curr_line->prev_line))) bol(); /* @@ -4318,8 +4639,8 @@ modes_op() } char * -is_in_string(string, substring) /* a strstr() look-alike for systems without - strstr() */ +is_in_string(string, substring) /* a strchr() look-alike for systems without + strchr() */ char * string, *substring; { char *full, *sub; @@ -4727,6 +5048,18 @@ strings_init() EMACS_string = catgetlocal( 159, "EMACS"); NOEMACS_string = catgetlocal( 160, "NOEMACS"); usage4 = catgetlocal( 161, " +# put cursor at line #\n"); + conf_dump_err_msg = catgetlocal( 162, "unable to open .init.ee for writing, no configuration saved!"); + conf_dump_success_msg = catgetlocal( 163, "ee configuration saved in file %s"); + modes_menu[9].item_string = catgetlocal( 164, "save editor configuration"); + config_dump_menu[0].item_string = catgetlocal( 165, "save ee configuration"); + config_dump_menu[1].item_string = catgetlocal( 166, "save in current directory"); + config_dump_menu[2].item_string = catgetlocal( 167, "save in home directory"); + conf_not_saved_msg = catgetlocal( 168, "ee configuration not saved"); + ree_no_file_msg = catgetlocal( 169, "must specify a file when invoking ree"); + cancel_string = catgetlocal( 170, "press Esc to cancel"); + menu_too_lrg_msg = catgetlocal( 180, "menu too large for window"); + more_above_str = catgetlocal( 181, "^^more^^"); + more_below_str = catgetlocal( 182, "VVmoreVV"); commands[0] = HELP; commands[1] = WRITE; diff --git a/usr.bin/ee/make.default b/usr.bin/ee/make.default deleted file mode 100644 index 32ff05d..0000000 --- a/usr.bin/ee/make.default +++ /dev/null @@ -1,57 +0,0 @@ -# This is the make file for ee, the "easy editor". -# -# If building ee using curses, type "make curses", otherwise new_curse (a -# subset of curses that supports ee) will be built and ee will use new_curse -# instead of curses. -# -# The "install" target ("make install") will copy the ee binary to -# the /usr/local/bin directory on the local system. The man page (ee.1) -# will be copied into the /usr/local/man/man1 directory. -# -# The "clean" target ("make clean") will remove the ee and new_curse.o -# object files, and the ee binary. -# -# If the system does not have localization routines, use the -DNO_CATGETS -# define. If the system supports setlocale(), catopen(), and catgets() and -# localization is desired, do not use -DNO_CATGETS. -# -# DEFINES is used for new_curse.c, and CFLAGS is used for ee.c. -# - -# for System V, using new_curse with terminfo -DEFINES = -DSYS5 -DNCURSE - -# for BSD, using new_curse with termcap -#DEFINES = -DCAP -DNCURSE - -# for BSD systems with select(), using new_curse with termcap, use: -#DEFINES = -DCAP -DNCURSE -DBSD_SELECT - -# flags for compilation -CFLAGS = -s -DNO_CATGETS - -# For Sun systems, remove the '#' from the front of the next two lines: -#DEFINES = -DSYS5 -DNCURSE -#CFLAGS = -I/usr/5include -L/usr/5lib -DNO_CATGETS -s - -all : ee - -curses : ee.c - cc ee.c -o ee $(CFLAGS) -lcurses - -ee : ee.o new_curse.o - cc -o ee ee.o new_curse.o $(CFLAGS) - -ee.o : ee.c new_curse.h - cc -c ee.c $(DEFINES) $(CFLAGS) - -new_curse.o : new_curse.c new_curse.h - cc new_curse.c -c $(DEFINES) $(CFLAGS) - -install : - cp ee /usr/local/bin/ee - cp ee.1 /usr/local/man/man1/ee.1 - -clean : - rm -f ee.o new_curse.o ee - diff --git a/usr.bin/ee/new_curse.c b/usr.bin/ee/new_curse.c index a22ccf5..91c1078 100644 --- a/usr.bin/ee/new_curse.c +++ b/usr.bin/ee/new_curse.c @@ -37,14 +37,14 @@ | Copyright (c) 1986, 1987, 1988, 1991, 1992, 1993, 1994, 1995 Hugh Mahon | All are rights reserved. | - | $Header: /home/hugh/sources/old_ae/RCS/new_curse.c,v 1.43 1996/03/21 04:27:06 hugh Exp $ + | $Header: /home/ncvs/src/usr.bin/ee/doc/new_curse.c,v 1.1.1.1 1995/08/30 07:28:06 jkh Exp $ | */ char *copyright_message[] = { "Copyright (c) 1986, 1987, 1988, 1991, 1992, 1993, 1994, 1995 Hugh Mahon", "All rights are reserved."}; -char * new_curse_name= "@(#) new_curse.c $Revision: 1.43 $"; +char * new_curse_name= "@(#) new_curse.c $Revision: 1.1.1.1 $"; #include "new_curse.h" #include @@ -557,7 +557,7 @@ static char nc_scrolling_ability = FALSE; #ifdef CAP -#if defined(__STDC__) || defined(__cplusplus) +#if __STDC__ || defined(__cplusplus) #define P_(s) s #else #define P_(s) () @@ -1362,17 +1362,12 @@ int start_l, start_c; /* starting line and column to be inwindow */ Ntemp->Attrib = FALSE; Ntemp->first_line = temp_screen = Screenalloc(cols); Ntemp->first_line->number = 0; - Ntemp->line_array = (struct _line **) malloc(LINES * sizeof(struct _line *)); - - Ntemp->line_array[0] = Ntemp->first_line; - for (i = 1; i < lines; i++) { temp_screen->next_screen = Screenalloc(cols); temp_screen->next_screen->number = i; temp_screen->next_screen->prev_screen = temp_screen; temp_screen = temp_screen->next_screen; - Ntemp->line_array[i] = temp_screen; } Ntemp->first_line->prev_screen = NULL; temp_screen->next_screen = NULL; @@ -1897,17 +1892,16 @@ int cols; int j; if (column > line->last_char) - { - for (j = line->last_char; j < column; j++) - { - line->row[j] = ' '; - line->attributes[j] = (char) NULL; - } - } + line->row[line->last_char] = ' '; line->last_char = column; line->row[column] = (char) NULL; line->attributes[column] = (char) NULL; line->changed = TRUE; + for (j = column + 1; j < cols; j++) + { + line->row[j] = ' '; + line->attributes[j] = (char) NULL; + } } void @@ -2025,21 +2019,12 @@ WINDOW *window; { for (user_col = 0, virt_col = window->SC; (virt_col < virtual_scr->Num_cols) - && (user_col < user_line->last_char); + && (user_col < window->Num_cols); virt_col++, user_col++) { virtual_line->row[virt_col] = user_line->row[user_col]; virtual_line->attributes[virt_col] = user_line->attributes[user_col]; } - for (user_col = user_line->last_char, - virt_col = window->SC + user_line->last_char; - (virt_col < virtual_scr->Num_cols) - && (user_col < window->Num_cols); - virt_col++, user_col++) - { - virtual_line->row[virt_col] = ' '; - virtual_line->attributes[virt_col] = (char) NULL; - } } if (virtual_scr->Num_cols != window->Num_cols) { @@ -2051,6 +2036,11 @@ WINDOW *window; min(virtual_scr->Num_cols, (user_line->last_char + window->SC)); } + else if (virtual_line->last_char > (user_line->last_char + window->SC)) + { + virtual_line->row[min(virtual_scr->Num_cols, + (user_line->last_char + window->SC))] = ' '; + } } else virtual_line->last_char = user_line->last_char; @@ -2271,13 +2261,14 @@ waddch(window, c) /* output the character in the specified window */ WINDOW *window; int c; { - int column, j; + int row, column; int shift; /* number of spaces to shift if a tab */ struct _line *tmpline; #ifdef DIAG /*printf("starting waddch \n");fflush(stdout);*/ #endif + row = window->LY; column = window->LX; if (c == '\t') { @@ -2292,25 +2283,27 @@ int c; waddch(window, ' '); } } - else if ((column < window->Num_cols) && (window->LY < window->Num_lines)) + else if ((column < window->Num_cols) && (row < window->Num_lines)) { if ((c == '~') && (Booleans[hz__])) c = '@'; if (( c != '\b') && (c != '\n') && (c != '\r')) { - tmpline = window->line_array[window->LY]; + row = 0; + tmpline = window->first_line; + while (row < window->LY) + { + row++; + tmpline = tmpline->next_screen; + } tmpline->row[column] = c; tmpline->attributes[column] = window->Attrib; tmpline->changed = TRUE; if (column >= tmpline->last_char) { if (column > tmpline->last_char) - for (j = tmpline->last_char; j < column; j++) - { - tmpline->row[j] = ' '; - tmpline->attributes[j] = (char) NULL; - } + tmpline->row[tmpline->last_char] = ' '; tmpline->row[column + 1] = (char) NULL; tmpline->attributes[column + 1] = (char) NULL; tmpline->last_char = column + 1; @@ -2384,13 +2377,6 @@ WINDOW *window; } if (window->LY == 0) window->first_line = tmp1; - - for (row = 0, tmp1 = window->first_line; - row < window->Num_lines; row++) - { - window->line_array[row] = tmp1; - tmp1 = tmp1->next_screen; - } } void @@ -2434,12 +2420,6 @@ WINDOW *window; else tmp = tmpline; tmp->next_screen = NULL; - - for (row = 0, tmp = window->first_line; row < window->Num_lines; row++) - { - window->line_array[row] = tmp; - tmp = tmp->next_screen; - } } else { @@ -2800,28 +2780,35 @@ Comp_line(line1, line2) /* compare lines */ struct _line *line1; struct _line *line2; { - int count1; + int count1, count2; int i; char *att1, *att2; char *c1, *c2; - if (line1->last_char != line2->last_char) - return(2); - c1 = line1->row; c2 = line2->row; att1 = line1->attributes; att2 = line2->attributes; + count2 = strlen(c1) + 1; + count1 = strlen(c2) + 1; + if (count1 > count2) + { + i = count2; + count2 = count1; + count1 = i; + } + if (count2 > (count1 + count1)) + return(2); i = 0; while ((c1[i] != (char) NULL) && (c2[i] != (char) NULL) && (c1[i] == c2[i]) && (att1[i] == att2[i])) i++; count1 = i + 1; - if ((count1 == 1) && (c1[i] == (char) NULL) && (c2[i] == (char) NULL)) + if ((count1 == 1) && (count2 == 1)) count1 = 0; /* both lines blank */ - else if ((c1[i] == (char) NULL) && (c2[i] == (char) NULL)) + else if (count2 == count1) count1 = -1; /* equal */ else - count1 = 1; /* lines unequal */ + count1 = count2 / count1; /* lines unequal */ return(count1); } @@ -3122,7 +3109,6 @@ doupdate() int first_same; int last_same; int list[10]; - int bottom; struct _line *curr; struct _line *virt; @@ -3130,8 +3116,6 @@ doupdate() struct _line *new; - struct _line *old1, *new1; - char *cur_lin; char *vrt_lin; char *cur_att; @@ -3210,6 +3194,7 @@ doupdate() (first_same > from_top) && (virtual_lines[first_same - 1]); first_same--) ; + count1 = first_same - 1; for (last_same = 0; (last_same < window->Num_lines) && (virtual_lines[last_same]== FALSE); last_same++) @@ -3218,6 +3203,7 @@ doupdate() /* check entire lines for diffs */ { + if (from_top >= last_same) { for (last_same = from_top; @@ -3240,55 +3226,39 @@ doupdate() { if ((Comp_line(old, virt) == -1) && (!virtual_lines[from_top])) { - /* - | Find the bottom of the - | area that should be - | scrolled. - */ - for (bottom = tmp_ft, old1 = old, - new1 = virt, count1 = 0; - (bottom < window->Num_lines) && - (Comp_line(old1, new1) <= 0); - bottom++, old1 = old1->next_screen, - new1 = new1->next_screen, - count1++) - ; - if (count1 > 3) + if (String_table[cs__]) /* scrolling region */ { - if (String_table[cs__]) /* scrolling region */ - { - list[1] = from_top; - list[0] = min((bottom - 1), (window->Num_lines - 1)); - String_Out(String_table[cs__], list, 2); - Curr_y = Curr_x = -1; - } + list[1] = from_top; + list[0] = min((last_same - 1), (window->Num_lines - 1)); + String_Out(String_table[cs__], list, 2); + Curr_y = Curr_x = -1; + } - for (offset = (tmp_ft - from_top); (offset > 0); offset--) - { - old = Delete_line(from_top, min((bottom - 1), (window->Num_lines - 1)), window); - diff = FALSE; - } + for (offset = (tmp_ft - from_top); (offset > 0); offset--) + { + old = Delete_line(from_top, min((last_same - 1), (window->Num_lines - 1)), window); + diff = FALSE; + } - if (String_table[cs__]) /* scrolling region */ - { - list[1] = 0; - list[0] = LINES; - String_Out(String_table[cs__], list, 2); - Curr_y = Curr_x = -1; - } + if (String_table[cs__]) /* scrolling region */ + { + list[1] = 0; + list[0] = LINES; + String_Out(String_table[cs__], list, 2); + Curr_y = Curr_x = -1; + } - top_of_win = curscr->first_line; - curr = top_of_win; - for (offset = 0; offset < from_top; offset++) - curr = curr->next_screen; - for (offset = from_top, old=curr, new=virt; - offset < window->Num_lines; - old=old->next_screen, new=new->next_screen, - offset++) - { - similar = Comp_line(old, new); - virtual_lines[offset] = (similar > 0 ? FALSE : TRUE); - } + top_of_win = curscr->first_line; + curr = top_of_win; + for (offset = 0; offset < from_top; offset++) + curr = curr->next_screen; + for (offset = from_top, old=curr, new=virt; + offset < window->Num_lines; + old=old->next_screen, new=new->next_screen, + offset++) + { + similar = Comp_line(old, new); + virtual_lines[offset] = (similar > 0 ? FALSE : TRUE); } } else @@ -3305,55 +3275,39 @@ doupdate() { if (Comp_line(old, virt) == -1) { - /* - | Find the bottom of the - | area that should be - | scrolled. - */ - for (bottom = from_top, old1 = old, - new1 = virt, count1 = 0; - (bottom < window->Num_lines) && - (Comp_line(old1, new1) <= 0); - bottom++, old1 = old1->next_screen, - new1 = new1->next_screen, - count1++) - ; - if (count1 > 3) + if (String_table[cs__]) /* scrolling region */ { - if (String_table[cs__]) /* scrolling region */ - { - list[1] = tmp_ft; - list[0] = min((bottom - 1), (window->Num_lines - 1)); - String_Out(String_table[cs__], list, 2); - Curr_y = Curr_x = -1; - } + list[1] = tmp_ft; + list[0] = min((last_same - 1), (window->Num_lines - 1)); + String_Out(String_table[cs__], list, 2); + Curr_y = Curr_x = -1; + } - for (offset = (from_top - tmp_ft); (offset > 0); offset--) - { - old = Insert_line(tmp_ft, min((bottom - 1), (window->Num_lines -1)), window); - diff = FALSE; - } + for (offset = (from_top - tmp_ft); (offset > 0); offset--) + { + old = Insert_line(tmp_ft, min((last_same - 1), (window->Num_lines -1)), window); + diff = FALSE; + } - if (String_table[cs__]) /* scrolling region */ - { - list[1] = 0; - list[0] = LINES; - String_Out(String_table[cs__], list, 2); - Curr_y = Curr_x = -1; - } + if (String_table[cs__]) /* scrolling region */ + { + list[1] = 0; + list[0] = LINES; + String_Out(String_table[cs__], list, 2); + Curr_y = Curr_x = -1; + } - top_of_win = curscr->first_line; - curr = top_of_win; - for (offset = 0; offset < from_top; offset++) - curr = curr->next_screen; - for (offset = from_top, old=curr, new=virt; - offset < window->Num_lines; - old=old->next_screen, new=new->next_screen, - offset++) - { - similar = Comp_line(old, new); - virtual_lines[offset] = (similar > 0 ? FALSE : TRUE); - } + top_of_win = curscr->first_line; + curr = top_of_win; + for (offset = 0; offset < from_top; offset++) + curr = curr->next_screen; + for (offset = from_top, old=curr, new=virt; + offset < window->Num_lines; + old=old->next_screen, new=new->next_screen, + offset++) + { + similar = Comp_line(old, new); + virtual_lines[offset] = (similar > 0 ? FALSE : TRUE); } } else diff --git a/usr.bin/ee/new_curse.h b/usr.bin/ee/new_curse.h index bc46e5b..86a8574 100644 --- a/usr.bin/ee/new_curse.h +++ b/usr.bin/ee/new_curse.h @@ -175,7 +175,6 @@ typedef struct WIND { int scroll_down; int SCROLL_CLEAR; /* indicates that window has been scrolled or cleared */ struct _line *first_line; - struct _line **line_array; } WINDOW; extern WINDOW *curscr; @@ -183,7 +182,7 @@ extern WINDOW *stdscr; extern int LINES, COLS; -#if defined(__STDC__) || defined(__cplusplus) +#if __STDC__ || defined(__cplusplus) #define P_(s) s #else #define P_(s) () diff --git a/usr.bin/ee/nls/de_DE.ISO8859-1/ee.msg b/usr.bin/ee/nls/de_DE.ISO8859-1/ee.msg index 9f62c50..48daab3 100644 --- a/usr.bin/ee/nls/de_DE.ISO8859-1/ee.msg +++ b/usr.bin/ee/nls/de_DE.ISO8859-1/ee.msg @@ -3,7 +3,7 @@ $ ee.i18n.guide for more information $ $ For ee patchlevel 3 $ -$ $Header: /home/ncvs/src/usr.bin/ee/nls/de_DE.ISO_8859-1/ee.msg,v 1.1 1995/10/21 23:47:40 joerg Exp $ +$ $Header: /home/ncvs/src/usr.bin/ee/nls/de_DE.ISO_8859-1/ee.msg,v 1.2 1996/05/27 20:59:53 joerg Exp $ $ $set 1 $quote " @@ -168,3 +168,15 @@ $quote " 159 "EMACS" 160 "[EMACS]" 161 " + Zeiger auf Zeile setzen" +162 "Kann die Datei .init.ee nicht schreiben, Konfiguration nicht gespeichert!" +163 "ee-Konfiguration in Datei %s gespeichert" +164 "speichere Editor-Konfiguration" +165 "speichere ee-Konfiguration" +166 "speichern im aktuellen Verzeichnis" +167 "speichern im Home-Verzeichnis" +168 "ee-Konfiguration nicht gespeichert" +169 "beim Aufruf von ree muß ein Dateiname angegeben werden" +170 "Esc zum Verlassen" +180 "Menü zu groß für den Bildschirm" +181 "^^weiter^^" +182 "VVweiterVV" diff --git a/usr.bin/ee/nls/de_DE.ISO_8859-1/ee.msg b/usr.bin/ee/nls/de_DE.ISO_8859-1/ee.msg index 9f62c50..48daab3 100644 --- a/usr.bin/ee/nls/de_DE.ISO_8859-1/ee.msg +++ b/usr.bin/ee/nls/de_DE.ISO_8859-1/ee.msg @@ -3,7 +3,7 @@ $ ee.i18n.guide for more information $ $ For ee patchlevel 3 $ -$ $Header: /home/ncvs/src/usr.bin/ee/nls/de_DE.ISO_8859-1/ee.msg,v 1.1 1995/10/21 23:47:40 joerg Exp $ +$ $Header: /home/ncvs/src/usr.bin/ee/nls/de_DE.ISO_8859-1/ee.msg,v 1.2 1996/05/27 20:59:53 joerg Exp $ $ $set 1 $quote " @@ -168,3 +168,15 @@ $quote " 159 "EMACS" 160 "[EMACS]" 161 " + Zeiger auf Zeile setzen" +162 "Kann die Datei .init.ee nicht schreiben, Konfiguration nicht gespeichert!" +163 "ee-Konfiguration in Datei %s gespeichert" +164 "speichere Editor-Konfiguration" +165 "speichere ee-Konfiguration" +166 "speichern im aktuellen Verzeichnis" +167 "speichern im Home-Verzeichnis" +168 "ee-Konfiguration nicht gespeichert" +169 "beim Aufruf von ree muß ein Dateiname angegeben werden" +170 "Esc zum Verlassen" +180 "Menü zu groß für den Bildschirm" +181 "^^weiter^^" +182 "VVweiterVV" diff --git a/usr.bin/ee/nls/en_US.ISO_8859-1/ee.msg b/usr.bin/ee/nls/en_US.ISO_8859-1/ee.msg index 1d4fe8c..e1364c0 100644 --- a/usr.bin/ee/nls/en_US.ISO_8859-1/ee.msg +++ b/usr.bin/ee/nls/en_US.ISO_8859-1/ee.msg @@ -3,7 +3,7 @@ $ ee.i18n.guide for more information $ $ For ee patchlevel 3 $ -$ $Header: /home/ncvs/src/usr.bin/ee/nls/en_US.ISO_8859-1/ee.msg,v 1.1 1995/08/30 13:25:55 jkh Exp $ +$ $Header: /home/ncvs/src/usr.bin/ee/nls/en_US.ISO_8859-1/ee.msg,v 1.2 1996/05/27 21:00:00 joerg Exp $ $ $set 1 $quote " @@ -168,3 +168,15 @@ $quote " 159 "EMACS" 160 "NOEMACS" 161 " +# put cursor at line #\n" +162 "unable to open .init.ee for writing, no configuration saved!" +163 "ee configuration saved in file %s" +164 "save editor configuration" +165 "save ee configuration" +166 "save in current directory" +167 "save in home directory" +168 "ee configuration not saved" +169 "must specify a file when invoking ree" +170 "press Esc to cancel" +180 "menu too large for window" +181 "^^more^^" +182 "VVmoreVV" diff --git a/usr.bin/ee/nls/en_US.US-ASCII/ee.msg b/usr.bin/ee/nls/en_US.US-ASCII/ee.msg index 1d4fe8c..e1364c0 100644 --- a/usr.bin/ee/nls/en_US.US-ASCII/ee.msg +++ b/usr.bin/ee/nls/en_US.US-ASCII/ee.msg @@ -3,7 +3,7 @@ $ ee.i18n.guide for more information $ $ For ee patchlevel 3 $ -$ $Header: /home/ncvs/src/usr.bin/ee/nls/en_US.ISO_8859-1/ee.msg,v 1.1 1995/08/30 13:25:55 jkh Exp $ +$ $Header: /home/ncvs/src/usr.bin/ee/nls/en_US.ISO_8859-1/ee.msg,v 1.2 1996/05/27 21:00:00 joerg Exp $ $ $set 1 $quote " @@ -168,3 +168,15 @@ $quote " 159 "EMACS" 160 "NOEMACS" 161 " +# put cursor at line #\n" +162 "unable to open .init.ee for writing, no configuration saved!" +163 "ee configuration saved in file %s" +164 "save editor configuration" +165 "save ee configuration" +166 "save in current directory" +167 "save in home directory" +168 "ee configuration not saved" +169 "must specify a file when invoking ree" +170 "press Esc to cancel" +180 "menu too large for window" +181 "^^more^^" +182 "VVmoreVV" diff --git a/usr.bin/ee/nls/fr_FR.ISO8859-1/ee.msg b/usr.bin/ee/nls/fr_FR.ISO8859-1/ee.msg index f98bf5c..3d35ef6 100644 --- a/usr.bin/ee/nls/fr_FR.ISO8859-1/ee.msg +++ b/usr.bin/ee/nls/fr_FR.ISO8859-1/ee.msg @@ -3,7 +3,7 @@ $ ee.i18n.guide for more information $ $ For ee patchlevel 3 $ -$ $Id: ee.msg,v 1.1 1995/09/09 15:06:08 jmz Exp $ +$ $Id: ee.msg,v 1.2 1996/05/27 21:00:06 joerg Exp $ $ $set 1 $quote " @@ -129,7 +129,7 @@ $quote " 120 "FICHIER" 121 "CARACTERE" 122 "RAFRAICHIR" -23 "menu divers" +123 "RESEQUENCE" 124 "AUTEUR" 125 "VERSION" 126 "MINMAJ" @@ -168,3 +168,15 @@ $quote " 159 "EMACS" 160 "PASEMACS" 161 " +# positionne le curseur sur la ligne #\n" +162 "unable to open .init.ee for writing, no configuration saved!" +163 "ee configuration saved in file %s" +164 "save editor configuration" +165 "save ee configuration" +166 "save in current directory" +167 "save in home directory" +168 "ee configuration not saved" +169 "must specify a file when invoking ree" +170 "press Esc to cancel" +180 "menu too large for window" +181 "^^more^^" +182 "VVmoreVV" diff --git a/usr.bin/ee/nls/fr_FR.ISO_8859-1/ee.msg b/usr.bin/ee/nls/fr_FR.ISO_8859-1/ee.msg index f98bf5c..3d35ef6 100644 --- a/usr.bin/ee/nls/fr_FR.ISO_8859-1/ee.msg +++ b/usr.bin/ee/nls/fr_FR.ISO_8859-1/ee.msg @@ -3,7 +3,7 @@ $ ee.i18n.guide for more information $ $ For ee patchlevel 3 $ -$ $Id: ee.msg,v 1.1 1995/09/09 15:06:08 jmz Exp $ +$ $Id: ee.msg,v 1.2 1996/05/27 21:00:06 joerg Exp $ $ $set 1 $quote " @@ -129,7 +129,7 @@ $quote " 120 "FICHIER" 121 "CARACTERE" 122 "RAFRAICHIR" -23 "menu divers" +123 "RESEQUENCE" 124 "AUTEUR" 125 "VERSION" 126 "MINMAJ" @@ -168,3 +168,15 @@ $quote " 159 "EMACS" 160 "PASEMACS" 161 " +# positionne le curseur sur la ligne #\n" +162 "unable to open .init.ee for writing, no configuration saved!" +163 "ee configuration saved in file %s" +164 "save editor configuration" +165 "save ee configuration" +166 "save in current directory" +167 "save in home directory" +168 "ee configuration not saved" +169 "must specify a file when invoking ree" +170 "press Esc to cancel" +180 "menu too large for window" +181 "^^more^^" +182 "VVmoreVV" -- cgit v1.1