diff options
author | dos-reis <gdr@axiomatics.org> | 2007-08-14 05:14:52 +0000 |
---|---|---|
committer | dos-reis <gdr@axiomatics.org> | 2007-08-14 05:14:52 +0000 |
commit | ab8cc85adde879fb963c94d15675783f2cf4b183 (patch) | |
tree | c202482327f474583b750b2c45dedfc4e4312b1d /src/clef | |
download | open-axiom-ab8cc85adde879fb963c94d15675783f2cf4b183.tar.gz |
Initial population.
Diffstat (limited to 'src/clef')
-rw-r--r-- | src/clef/ChangeLog | 81 | ||||
-rw-r--r-- | src/clef/Makefile.in | 55 | ||||
-rw-r--r-- | src/clef/Makefile.pamphlet | 84 | ||||
-rw-r--r-- | src/clef/edible.c.pamphlet | 609 |
4 files changed, 829 insertions, 0 deletions
diff --git a/src/clef/ChangeLog b/src/clef/ChangeLog new file mode 100644 index 00000000..f6d20b8d --- /dev/null +++ b/src/clef/ChangeLog @@ -0,0 +1,81 @@ +2007-07-29 Gabriel Dos Reis <gdr@cs.tamu.edu> + + * Makefile.pamphlet (clef_LDADD): Set to libtoolized libspad. + (clef_objects): Use libtoolized objects. + ($(axiom_target_bindir)/clef$(EXEEXT)): Use $(LINK). + (%.lo): Rename from %.$(OBJEXT). Use $(COMPILE). + * Makefile.in: Regenerate. + +2006-11-26 Gabriel Dos Reis <gdr@cs.tamu.edu> + + * edible.c.pamphlet: Include "axiom-c-macros.h" + + * Makefile.pamphlet: Add support for OS that require extension for + executable binaries. + Include dependence on config/axiom-c-macros.h. + * Makefile.in: Regenerate. + +2006-11-24 Gabriel Dos Reis <gdr@cs.tamu.edu> + + * Makefile.pamphlet (LIB): Remove. + (clef_DEPENDENCIES): Clear. + (clef_LDADD): New variable. + ($(axiom_target_bindir)/clef): Use it. + (.SUFFIXES): New target. + * Makefile.in: Regenerate. + +2006-11-23 Gabriel Dos Reis <gdr@cs.tamu.edu> + + * edible.c.pamphlet: Incudle "axiom-c-macros.h" + * Makefile.pamphlet: Use .$(OBJEXT) instead of bare .o + (pamphlets): Use the value of clef_SOURCES. + (all-clef): New. + (all-ax): Depend on stamp + (stamp): New. + * Makefile.in: Regenerate. + +2006-11-23 Gabriel Dos Reis <gdr@cs.tamu.edu> + + * edible.c.pamphlet: Remove K&R C style function declaration. + +2006-10-28 Gabriel Dos Reis <gdr@cs.tamu.edu> + + * Makefile.pamphlet (mostlyclean-local, clean-local): Tidy. + (distclean-local): New rule. + +2006-10-12 Gabriel Dos Reis <gdr@cs.tamu.edu> + + * Makefile.pamphlet (all-ax): Fix thinko. + +2006-10-08 Gabriel Dos Reis <gdr@cs.tamu.edu> + + * Makefile.pamphlet: Remove references to ${MNT}. + * Makefile.in: Regenerate. + +2006-09-09 Gabriel Dos Reis <gdr@cs.tamu.edu> + + * Makefile.pamphlet (\section{axiom.sty}): Remove. + (clean): Use $(builddir) + * Makefile.in: Regenerate. + +2006-09-26 Gabriel Dos Reis <gdr@cs.tamu.edu> + + * Makefile.pamphlet (all): Create stamp files. + * Makefile.in: Regenerate. + +2006-09-18 Gabriel Dos Reis <gdr@cs.tamu.edu> + + * Makefile.pamphlet: Simplify. + (subdir): New. + * Makefile.in: Regenerate. + +2006-09-11 Gabriel Dos Reis <gdr@cs.tamu.edu> + + * Makefile.pamphlet: Use $(axiom_build_document) to tangle + pamphlets. Add support for out-of-source build. + * Makefile.in: Regenerate. + +2006-09-03 Gabriel Dos Reis <gdr@cs.tamu.edu> + + * Makefile.in: New. + diff --git a/src/clef/Makefile.in b/src/clef/Makefile.in new file mode 100644 index 00000000..d861f724 --- /dev/null +++ b/src/clef/Makefile.in @@ -0,0 +1,55 @@ +# this is where the include files live +INC= $(axiom_src_srcdir)/include + +bin_PROGRAMS = clef$(EXEEXT) + +clef_sources = edible.c + +clef_SOURCES = $(addsuffix .pamphlet, $(clef_sources)) + +clef_objects = $(clef_sources:.c=.lo) + +clef_LDADD = $(axiom_target_libdir)/libspad.la +clef_DEPENDENCIES = + +subdir = src/clef/ + +pamphlets = $(clef_SOURCES) Makefile.pamphlet + +.PHONY: all all-clef +all: all-ax + +all-ax all-clef: stamp + @ echo finished $(builddir) + +stamp: $(axiom_target_bindir)/clef$(EXEEXT) + @rm -f stamp + $(STAMP) stamp + +$(axiom_target_bindir)/clef$(EXEEXT): $(clef_objects) $(clef_DEPENDENCIES) + $(LINK) -o $@ $(clef_objects) $(clef_LDADD) ${LDF} + +.SUFFIXES: +.SUFFIXES: .c .lo .h +.PRECIOUS: %.c +.PRECIOUS: %.lo + +%.c: $(srcdir)/%.c.pamphlet + $(axiom_build_document) --tangle --output=$@ $< + +%.lo: ${INC}/useproto.h ${INC}/edible.h \ + $(axiom_configdir)/axiom-c-macros.h + +%.lo: %.c $(axiom_c_macros_h) + $(COMPILE) -o $@ ${CCF} $(axiom_includes) $< + +mostlyclean-local: + @rm -f $(clef_objects) + @rm -f $(clef_sources) + @rm -f stamp + +clean-local: mostlyclean-local + @rm -f $(axiom_target_bindir)/clef$(EXEEXT) + +distclean-local: clean-local + diff --git a/src/clef/Makefile.pamphlet b/src/clef/Makefile.pamphlet new file mode 100644 index 00000000..bf6d57bc --- /dev/null +++ b/src/clef/Makefile.pamphlet @@ -0,0 +1,84 @@ +%% Oh Emacs, this is a -*- Makefile -*-, so give me tabs. +\documentclass{article} +\usepackage{axiom} +\begin{document} +\title{\$SPAD/src/clef Makefile} +\author{Gabriel Dos~Reis \and Timothy Daly} +\maketitle +\begin{abstract} +\end{abstract} +\eject +\tableofcontents +\eject +\section{Environment variables} +<<environment>>= +# this is where the include files live +INC= $(axiom_src_srcdir)/include + +bin_PROGRAMS = clef$(EXEEXT) + +clef_sources = edible.c + +clef_SOURCES = $(addsuffix .pamphlet, $(clef_sources)) + +clef_objects = $(clef_sources:.c=.lo) + +clef_LDADD = $(axiom_target_libdir)/libspad.la +clef_DEPENDENCIES = +@ + +\section{The clef sources, edible} +<<edible>>= +$(axiom_target_bindir)/clef$(EXEEXT): $(clef_objects) $(clef_DEPENDENCIES) + $(LINK) -o $@ $(clef_objects) $(clef_LDADD) ${LDF} + +.SUFFIXES: +.SUFFIXES: .c .lo .h +.PRECIOUS: %.c +.PRECIOUS: %.lo + +%.c: $(srcdir)/%.c.pamphlet + $(axiom_build_document) --tangle --output=$@ $< + +%.lo: ${INC}/useproto.h ${INC}/edible.h \ + $(axiom_configdir)/axiom-c-macros.h + +%.lo: %.c $(axiom_c_macros_h) + $(COMPILE) -o $@ ${CCF} $(axiom_includes) $< + +mostlyclean-local: + @rm -f $(clef_objects) + @rm -f $(clef_sources) + @rm -f stamp + +clean-local: mostlyclean-local + @rm -f $(axiom_target_bindir)/clef$(EXEEXT) + +distclean-local: clean-local +@ + +<<*>>= +<<environment>> + +subdir = src/clef/ + +pamphlets = $(clef_SOURCES) Makefile.pamphlet + +.PHONY: all all-clef +all: all-ax + +all-ax all-clef: stamp + @ echo finished $(builddir) + +stamp: $(axiom_target_bindir)/clef$(EXEEXT) + @rm -f stamp + $(STAMP) stamp + +<<edible>> + +@ +\eject +\begin{thebibliography}{99} +\bibitem{1} nothing +\end{thebibliography} +\end{document} diff --git a/src/clef/edible.c.pamphlet b/src/clef/edible.c.pamphlet new file mode 100644 index 00000000..56f7a619 --- /dev/null +++ b/src/clef/edible.c.pamphlet @@ -0,0 +1,609 @@ +\documentclass{article} +\usepackage{axiom} +\begin{document} +\title{\$SPAD/src/clef edible.c} +\author{The Axiom Team} +\maketitle +\begin{abstract} +\end{abstract} +\eject +\tableofcontents +\eject +<<license>>= +/* +Copyright (c) 1991-2002, The Numerical ALgorithms Group Ltd. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + - Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + - Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + - Neither the name of The Numerical ALgorithms Group Ltd. nor the + names of its contributors may be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS +IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER +OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +@ +<<*>>= +<<license>> + +#include "axiom-c-macros.h" +#include "useproto.h" +#include <stdlib.h> +#include <unistd.h> +#include <stdio.h> +#include <string.h> +#include <termios.h> +#include <fcntl.h> +#include <sys/stat.h> +#include <sys/time.h> +#include <errno.h> +#include <signal.h> + + +#if defined (SGIplatform) +#include <bstring.h> +#endif + + +#include "axiom-c-macros.h" +#include "edible.h" +#include "com.h" +#include "bsdsignal.h" + +#include "bsdsignal.H1" +#include "openpty.H1" +#include "prt.H1" +#include "edin.H1" +#include "wct.H1" +#include "edible.H1" +#include "fnct_key.H1" + +#ifdef AXIOM_UNLIKELY +#define log 1 +#define logterm 1 +#define siglog 1 +#endif + + +#define Cursor_shape(x) + + +#ifdef siglog +int sigfile; +char sigbuff[256]; +#endif + +/* Here are the term structures I need for setting and resetting the + terminal characteristics. */ + +struct termios childbuf; /* the childs normal operating termio */ +struct termios oldbuf; /* the initial settings */ +struct termios rawbuf; /* the parents raw state, when it is doing nothing */ +struct termios canonbuf; /* set it to be canonical */ + +/* the terminals mapping of the function keys */ +unsigned char _INTR, _QUIT, _ERASE, _KILL, _EOF, _EOL, _RES1, _RES2; + + +int ppid; /* the parents's parent pid */ +int child_pid; /* the childs process id */ + +short INS_MODE ; /* Flag for insert mode */ +short ECHOIT = 1; /* Flag for echoing */ +short PTY; /* Flag which tells me whether I should echo newlines */ + +int MODE; /* am I in cbreak, raw, or canonical */ + +char in_buff[1024]; /* buffer for storing characters read until they are processed */ +char buff[MAXLINE]; /** Buffers for collecting input and **/ +int buff_flag[MAXLINE]; /** flags for whether buff chars + are printing + or non-printing **/ + + +char controllerPath[20]; /* path name for opening the controller side */ +char serverPath[20]; /* path name for opening the server side */ + +int contNum, serverNum; /* file descriptors for pty's */ +int num_read; /* Number of chars read */ + +#ifdef log +int logfd; +char logpath[30]; +#endif + + + + + +int +main(int argc, char *argv[]) +{ + fd_set rfds; /* the structure for the select call */ + int code; /* return code from system calls */ + char out_buff[MAXLINE]; /* from child and stdin */ + int out_flag[MAXLINE] ; /* initialize the output flags */ + char *program; /* a string to hold the child program invocation */ + char **pargs = 0; /* holds parts of the command line */ + int not_command = 1; /* a flag while parsing the command line */ + + + + /* try to get a pseudoterminal to play with */ + if (ptyopen(&contNum, &serverNum, controllerPath, serverPath) == -1) { + perror("ptyopen failed"); + exit(-1); + } + + /* call the routine that handles signals */ + catch_signals(); + + /* parse the command line arguments - as with the aixterm the command + argument -e should be last on the line. */ + + while(*++argv && not_command) { + if(!strcmp(*argv, "-f")) + load_wct_file(*++argv); + else if(!strcmp(*argv, "-e")) { + not_command = 0; + pargs = ++argv; + } + else { + fprintf(stderr, "usage: clef [-f fname] -e command\n"); + exit(-1); + } + } + skim_wct(); + +#ifdef log + sprintf(logpath, "/tmp/cleflog%d", getpid()); + logfd = open(logpath, O_CREAT | O_RDWR, 0666); +#endif + + /* get the original termio settings, so the child has them */ + + if(tcgetattr(0,&childbuf) == -1) { + perror("clef trying to get the initial terminal settings"); + exit(-1); + } + + /* start the child process */ + + child_pid = fork(); + switch(child_pid) { + case -1 : + perror("clef can't create a new process"); + exit(-1); + case 0: + /* CHILD */ + /* Dissasociate form my parents group so all my child processes + look at my terminal as the controlling terminal for the group */ + setsid(); + + serverNum = open(serverPath,O_RDWR); + if (serverNum == -1) perror("open serverPath failed"); + + /* since I am the child, I can close ptc, and dup pts for all it + standard descriptors */ + if (dup2(serverNum, 0) == -1) perror("dup2 0 failed"); + if (dup2(serverNum, 1) == -1) perror("dup2 1 failed"); + if (dup2(serverNum, 2) == -1) perror("dup2 2 failed"); + if( (dup2(serverNum, 0) == -1) || + (dup2(serverNum, 1) == -1) || + (dup2(serverNum, 2) == -1) ) { + perror("clef trying to dup2"); + exit(-1); + } + + /* since they have been duped, close them */ + close(serverNum); + close(contNum); + + + /* To make sure everything is nice, set off enhedit */ + /* childbuf.c_line = 0; */ + + /* reconfigure the child's terminal get echoing */ + if(tcsetattr(0, TCSAFLUSH, &childbuf) == -1) { + perror("clef child trying to set child's terminal"); + exit(-1); + } + + /* fire up the child's process */ + if(pargs){ + execvp( pargs[0], pargs); + perror("clef trying to execvp its argument"); + fprintf(stderr, "Process --> %s\n", pargs[0]); + } + else{ + program = getenv("SHELL"); + if (!program) + program = strdup("/bin/sh"); + else + program = strdup (program); + execlp( program,program, 0); + perror("clef trying to execlp the default child"); + fprintf(stderr, "Process --> %s\n", program); + } + exit(-1); + break; + /* end switch */ + } + /* PARENT */ + /* Since I am the parent, I should start to initialize some stuff. + I have to close the pts side for it to work properly */ + + close(serverNum); + ppid = getppid(); + + /* Iinitialize some stuff for the reading and writing */ + init_flag(out_flag, MAXLINE); + define_function_keys(); + init_reader(); + PTY = 1; + init_parent(); + + /* Here is the main loop, it simply starts reading characters from + the std input, and from the child. */ + + while(1) { /* loop forever */ + + /* use select to see who has stuff waiting for me to handle */ + /* set file descriptors for ptc and stdin */ + FD_ZERO(&rfds); + FD_SET(contNum,&rfds); + FD_SET(0,&rfds); + set_function_chars(); +#ifdef log + { + char modepath[30]; + sprintf(modepath, "\nMODE = %d\n", MODE); + write(logfd, modepath, strlen(modepath)); + } +#endif +#ifdef logterm + { + struct termio ptermio; + char pbuff[1024]; + tcgetattr(contNum, &ptermio); + sprintf(pbuff, "child's settings: Lflag = %d, Oflag = %d, Iflag = %d\n", + ptermio.c_lflag, ptermio.c_oflag, ptermio.c_iflag); + write(logfd, pbuff, strlen(pbuff)); + } +#endif + + code = select(FD_SETSIZE,(void *) &rfds, NULL, NULL, NULL); + for(; code < 0 ;) { + if(errno == EINTR) { + check_flip(); + code = select(FD_SETSIZE,(void *) &rfds, NULL, NULL, NULL); + } + else { + perror("clef select failure"); + exit(-1); + } + } + + /* reading from the child **/ + if( FD_ISSET(contNum,&rfds)) { + if( (num_read = read(contNum, out_buff, MAXLINE)) == -1) { + num_read = 0; + } +#ifdef log + write(logfd, "OUT<<<<<", strlen("OUT<<<<<")); + write(logfd, out_buff, num_read); +#endif + if(num_read > 0) { + /* now do the printing to the screen */ + if(MODE!= CLEFRAW) { + back_up(buff_pntr); + write(1,out_buff, num_read); + print_whole_buff(); /* reprint the input buffer */ + } + else write(1,out_buff, num_read); + } + } /* done the child stuff */ + /* I should read from std input */ + else { + if(FD_ISSET(0,&rfds)) { + num_read = read(0, in_buff, MAXLINE); +#ifdef log + write(logfd, "IN<<<<<", strlen("IN<<<<<")); + write(logfd, in_buff, num_read); +#endif + check_flip(); + if(MODE == CLEFRAW ) + write(contNum, in_buff, num_read); + else + do_reading(); + } + } + } +} + + +void +init_parent(void) +{ + + /* get the original termio settings, so I never have to check again */ + if(tcgetattr(0, &oldbuf) == -1) { + perror("clef trying to get terminal initial settings"); + exit(-1); + } + + /* get the settings for my different modes */ + if ((tcgetattr(0, &canonbuf) == -1) || + (tcgetattr(0, &rawbuf) == -1) ) { + perror("clef trying to get terminal settings"); + exit(-1); + } + + + canonbuf.c_lflag &= ~(ICANON | ECHO | ISIG); + /* read before an eoln is typed */ + + canonbuf.c_lflag |= ISIG; + + /* canonbuf.c_line = 0; turn off enhanced edit */ + + canonbuf.c_cc[VMIN] = 1; /* we want every character */ + canonbuf.c_cc[VTIME] = 1; /* these may require tweaking */ + + /* also set up the parents raw setting for when needed **/ + rawbuf.c_oflag = rawbuf.c_iflag = rawbuf.c_lflag /* = rawbuf.c_line */ = 0; + rawbuf.c_cc[VMIN] = 1; + rawbuf.c_cc[VTIME] = 1; + + + if(tcsetattr(0, TCSAFLUSH, &canonbuf) == -1) { + perror("clef setting parent terminal to canonical processing"); + exit(0); + } + + /* initialize some flags I will be using */ + MODE = CLEFCANONICAL; + INS_MODE = 1; + Cursor_shape(2); +} + + +void +hangup_handler(int sig) +{ +#ifdef siglog + sigfile = open(sigbuff, O_RDWR | O_APPEND); + write(sigfile, "Hangup Handler\n", strlen("Hangup Handler\n")); + close(sigfile); +#endif + /* try to kill my child if it is around */ + if(kill(child_pid, 0)) kill(child_pid, SIGTERM); + if(kill(ppid, 0) >= 0) { + /* fix the terminal and exit */ + if(tcsetattr(0, TCSAFLUSH, &oldbuf) == -1) { + perror("clef restoring terminal in hangup handler"); + } + printf("\n"); + } + /* remove the temporary editor filename */ + unlink(editorfilename); + exit(-1); +} + +void +terminate_handler(int sig) +{ +#ifdef siglog + sigfile = open(sigbuff, O_RDWR | O_APPEND); + write(sigfile, "Terminate Handler\n", strlen("Terminate Handler\n") + 1); + close(sigfile); + sleep(1); +#endif + kill(child_pid, SIGTERM); + /* fix the terminal, and exit */ + if(tcsetattr(0, TCSAFLUSH, &oldbuf) == -1) { + perror("clef restoring terminal in terminate handler"); + } + printf("\n"); + Cursor_shape(2); + fprintf(stderr, "\n"); + /* remove the temporary editor filename */ + unlink(editorfilename); + exit(0); +} + +void +interrupt_handler(int sig) +{ +#ifdef siglog + sigfile = open(sigbuff, O_RDWR | O_APPEND); + write(sigfile, "Interrupt Handler\n", strlen("Interrupt Handler\n") + 1); + close(sigfile); + sleep(1); +#endif + kill(child_pid, SIGINT); +} + +void +child_handler(int sig) +{ +#ifdef siglog + sigfile = open(sigbuff, O_RDWR | O_APPEND ); + write(sigfile, "Child Handler\n", strlen("Child Handler\n") + 1); + close(sigfile); +#endif + Cursor_shape(2); + close(contNum); + if(kill(ppid, 0) >= 0) { + /* fix the terminal, and exit */ + if(tcsetattr(0, TCSAFLUSH, &oldbuf) == -1) { + perror("clef restoring terminal in child handler"); + } + printf("\n"); + } + /* remove the temporary editor filename */ + unlink(editorfilename); + exit(0); +} + +void +alarm_handler(int sig) +{ + int newppid = getppid(); +#ifdef siglog + sigfile = open(sigbuff, O_RDWR | O_APPEND); + write(sigfile, "Alarm Handler\n", strlen("Alarm Handler\n")+ 1 ); + close(sigfile); +#endif + /* simply gets the parent process id, if different, it terminates , + otherwise it resets the alarm */ + + if(ppid == newppid) { + alarm(60); + return; + } + else { + /* once that is done fix the terminal, and exit */ + if(tcsetattr(0, TCSAFLUSH, &oldbuf) == -1) { + perror("clef restoring terminal in alarm handler"); + } + Cursor_shape(2); + fprintf(stderr, "\n"); + /* remove the temporary editor filename */ + unlink(editorfilename); + exit(0); + } +} + +/* a procedure which tells my parent how to catch signals from its children */ +void +catch_signals(void) +{ +#ifdef siglog + sprintf(sigbuff, "/tmp/csig%d", getpid()); + sigfile = open(sigbuff, O_RDWR | O_TRUNC | O_CREAT); + write(sigfile, "Started \n", strlen("Started \n")); + close(sigfile); +#endif + bsdSignal(SIGHUP, hangup_handler,RestartSystemCalls); + bsdSignal(SIGCHLD,child_handler,RestartSystemCalls); + bsdSignal(SIGTERM, terminate_handler,RestartSystemCalls); + bsdSignal(SIGINT, interrupt_handler,RestartSystemCalls); + bsdSignal(SIGALRM, alarm_handler,RestartSystemCalls); + alarm(60); +} + +/* Here is where I check the child's termio settings, and try to copy them. + I simply trace through the main modes (CLEFRAW, CLEFCANONICAL) and + try to simulate them */ +void +check_flip(void) +{ + return; + +#if 0 + /*simply checks the termio structure of the child */ + + if(tcgetattr(contNum, &childbuf) == -1) { + perror("clef parent getting child's terminal in check_termio"); + } + if(childbuf.c_lflag & ICANON) { + if(MODE != CLEFCANONICAL) { + flip_canonical(contNum); + MODE = CLEFCANONICAL; + } + } + else { + if(MODE != CLEFRAW) { + flip_raw(contNum); + MODE = CLEFRAW; + } + } + /* While I am here, lets set the echo */ + if(childbuf.c_lflag & ECHO) ECHOIT = 1; + else ECHOIT = 0; +#endif +} + + + +void +flip_raw(int chann) +{ + + if(MODE == CLEFCANONICAL) + send_buff_to_child(chann); + + if(tcsetattr(0, TCSAFLUSH, &rawbuf) == -1) { + perror("clef resetting parent to raw "); + exit(-1); + } +} + + +void +flip_canonical(int chann) +{ + if(tcsetattr(0, TCSAFLUSH, &canonbuf) == -1) { + perror("clef resetting parent to canonical "); + exit(-1); + } + if(INS_MODE) + Cursor_shape(5); + else + Cursor_shape(2); +} + +void +etc_get_next_line(char * line,int * nr,int fd) +{ + *nr = read(fd, line, 1024); + if(*nr == -1) { + perror("Reading /etc/master"); + } + if(*nr == 0) { + fprintf(stderr, "Not found \n"); + } +} + +#define etc_whitespace(c) ((c == ' ' || c == '\t')?(1):(0)) + + +void +set_function_chars(void) +{ + /* get the special characters */ + _INTR = childbuf.c_cc[VINTR]; + _QUIT = childbuf.c_cc[VQUIT]; + _ERASE = childbuf.c_cc[VERASE]; + _KILL = childbuf.c_cc[VKILL]; + _EOF = childbuf.c_cc[VEOF]; + _EOL = childbuf.c_cc[VEOL]; + return; +} +@ +\eject +\begin{thebibliography}{99} +\bibitem{1} nothing +\end{thebibliography} +\end{document} |