From: wolff@inf.fu-berlin.de (Thomas Wolff)
Newsgroups: comp.editors
Subject: Editor mined (4/4)
Date: 28 Jul 92 15:04:17 GMT
Organization: Free University of Berlin, Germany

#! /bin/sh
: This is a sharchive -- extract the files by running through sh

echo ---------------------- extracting minedio.c -----------------
sed 's/^,//' << \EOSED > minedio.c
,/*  ==================================================================	*
, *				Editor mined				*
, *			Operating system dependant I/O			*
, *  ==================================================================	*/
,
,#include "mined.h"
,#include <errno.h>
,#include <signal.h>
,
,#ifdef CURSES
,#include <curses.h>
,#undef FALSE
,#undef TRUE
,#undef TERMIO	/* \ must be  */
,#undef SGTTY	/* / disabled */
,#endif
,
,#ifdef TERMIO
,#include <termios.h>
,#endif
,#ifdef SGTTY
,#include <sys/ioctl.h>	/* <sgtty.h> ? */
,#endif
,
,#ifdef msdos
,#include <conio.h>
,#undef SIGINT	/* signal (SIGINT, catchint) not understood */
,#define _getch_
,#endif
,
,#ifdef unix
,#include <sys/time.h>	/* for struct timeval (for select in inputreadyafter) */
,#define selectread	/* use select () ? */
,#endif
,
,#ifdef vms
,#undef u_char
,#include <socket.h>	/* for select () and struct timeval */
,#ifdef CURSES
,#define _getch_
,#endif
,#endif
,
,/*  ==================================================================	*
, *			Unix signalling routines			*
, *  ==================================================================	*/
,
,catch_signals (catch)
,  void (* catch) ();
,{
,#ifdef SIGHUP
,  signal (SIGHUP, catch);
,#endif
,#ifdef SIGILL
,  signal (SIGILL, catch);
,#endif
,#ifdef SIGTRAP
,  signal (SIGTRAP, catch);
,#endif
,#ifdef SIGABRT
,  signal (SIGABRT, catch);
,#endif
,#ifdef SIGEMT
,  signal (SIGEMT, catch);
,#endif
,#ifdef SIGFPE
,  signal (SIGFPE, catch);
,#endif
,#ifdef SIGBUS
,  signal (SIGBUS, catch);
,#endif
,#ifdef SIGSEGV
,  signal (SIGSEGV, catch);
,#endif
,#ifdef SIGSYS
,  signal (SIGSYS, catch);
,#endif
,#ifdef SIGPIPE
,  signal (SIGPIPE, catch);
,#endif
,#ifdef SIGALRM
,  signal (SIGALRM, catch);
,#endif
,#ifdef SIGTERM
,  signal (SIGTERM, catch);
,#endif
,#ifdef SIGXCPU
,  signal (SIGXCPU, catch);
,#endif
,#ifdef SIGXFSZ
,  signal (SIGXFSZ, catch);
,#endif
,#ifdef SIGVTALRM
,  signal (SIGVTALRM, catch);
,#endif
,#ifdef SIGPROF
,  signal (SIGPROF, catch);
,#endif
,#ifdef SIGLOST
,  signal (SIGLOST, catch);
,#endif
,#ifdef SIGUSR1
,  signal (SIGUSR1, catch);
,#endif
,#ifdef SIGUSR2
,  signal (SIGUSR2, catch);
,#endif
,}
,
,#ifdef SIGTSTP
,suspendmyself ()
,{
,  kill (getpid (), SIGTSTP);
,}
,FLAG cansuspendmyself = TRUE;
,#else
,suspendmyself () {}
,FLAG cansuspendmyself = FALSE;
,#endif
,
,#ifdef SIGWINCH
,/*
, * Catch the SIGWINCH signal sent to mined.
, */
,catchwinch ()
,{
,  winchg = TRUE;
,/*  if (waitingforinput == TRUE) RDwin ();	now done in __readchar () */
,  signal (SIGWINCH, catchwinch); /* Re-installation of the signal */
,}
,#endif
,
,#ifdef SIGQUIT
,/*
, * Catch the SIGQUIT signal (^\) sent to mined. It turns on the quitflag.
, */
,catchquit ()
,{
,#ifdef UNUSED /* Should not be needed with new __readchar () */
,/* Was previously needed on SUN but showed bad effects on Iris. */
,  static char quitchar = '\0';
,  if (waitingforinput == TRUE)
,	/* simulate input to enable immediate break also during input */
,	ioctl (input_fd, TIOCSTI, & quitchar);
,#endif
,  quit = TRUE;
,  signal (SIGQUIT, catchquit); /* Re-installation of the signal */
,}
,#endif
,
,#ifdef SIGINT
,/*
, * Catch the SIGINT signal (^C) sent if it cannot be ignored by tty driver
, */
,catchint ()
,{
,  intr = TRUE;
,  signal (SIGINT, catchint); /* Re-installation of the signal */
,}
,#endif
,
,/*  ==================================================================	*
, *			Terminal mode switcher				*
, *  ==================================================================	*/
,
,/*
, * Set and reset tty into CBREAK or old mode according to argument `state'.
, * It also sets all signal characters (except for ^\) to UNDEF. ^\ is caught.
, */
,raw_mode (state)
,  FLAG state;
,{
,#ifdef TERMIO
,  static struct termios old_termio;
,	 struct termios new_termio;
,#define gettermio(fd, iopoi)	tcgetattr (fd, iopoi);
,#define settermio(fd, iopoi)	tcsetattr (fd, TCSADRAIN, iopoi); /**/
,/* #define gettermio(fd, iopoi)	ioctl (fd, TCGETS, iopoi);
,   #define settermio(fd, iopoi)	ioctl (fd, TCSETSW, iopoi); /**/
,#endif
,#ifdef SGTTY
,  static struct sgttyb old_tty;
,	 struct sgttyb new_tty;
,  static int oldlmode;
,	 int lmode;
,  static struct tchars old_tchars;
,  static struct ltchars old_ltchars;
,#define NDEF '\377'
,  static struct tchars new_tchars = {NDEF, QUITCHAR, NDEF, NDEF, NDEF, NDEF};
,  static struct ltchars new_ltchars = {NDEF, NDEF, NDEF, NDEF, NDEF, NDEF};
,/* correspondence between the tchars/ltchars characters of the sgtty 
,   interface and the c_cc characters of the termios interface (codes vary):
,	sgtty		termio		sgtty		termio
,	t_intrc		VINTR		t_suspc		VSUSP
,	t_quitc		VQUIT		t_dsuspc	VDSUSP
,	t_startc	VSTART		t_rprntc	VREPRINT
,	t_stopc		VSTOP		t_flushc	VDISCARD
,	t_eofc		VEOF (VMIN)	t_werasc	VWERASE
,	t_brkc		VEOL (VTIME)	t_lnextc	VLNEXT
,*/
,#endif
,
,  if (state == OFF) {
,	isscreenmode = FALSE;
,#ifdef CURSES
,	endwin ();
,#ifdef vms
,	system ("set terminal /ttsync /nopasthru");
,#endif
,#else
,	end_screen_mode ();
,	flush ();
,#endif
,#ifdef TERMIO
,	settermio (input_fd, & old_termio);
,#endif
,#ifdef SGTTY
,	ioctl (input_fd, TIOCSETP, & old_tty);
,	ioctl (input_fd, TIOCSETC, & old_tchars);
,	ioctl (input_fd, TIOCSLTC, & old_ltchars);
,	ioctl (input_fd, TIOCLSET, & oldlmode);
,#endif
,	return;
,  }
,
,  else /* (state == ON) */ {
,	isscreenmode = TRUE;
,#ifdef CURSES
,	refresh ();
,#else
,	start_screen_mode ();
,	flush ();
,#endif
,#ifdef TERMIO
,	gettermio (input_fd, & old_termio);
,	gettermio (input_fd, & new_termio);
,
,	new_termio.c_iflag &= ~(ISTRIP|IXON|IXOFF);
,	new_termio.c_oflag &= ~OPOST;
,	new_termio.c_cflag &= ~(PARENB|CSIZE);
,	new_termio.c_cflag |= CS8;
,	new_termio.c_lflag &= ~(ICANON|ECHO);
,#define NDEF '\000'
,	new_termio.c_cc [VMIN] = 1;
,	new_termio.c_cc [VTIME] = 0;
,	new_termio.c_cc [VQUIT] = QUITCHAR;
,	new_termio.c_cc [VINTR] = NDEF;
,	new_termio.c_cc [VSUSP] = NDEF;
,#ifdef VDISCARD
,	new_termio.c_cc [VDISCARD] = NDEF;
,#endif
,	settermio (input_fd, & new_termio);
,#endif
,#ifdef SGTTY
,/* Save old tty settings */
,	ioctl (input_fd, TIOCGETP, & old_tty);
,	ioctl (input_fd, TIOCGETC, & old_tchars);
,	ioctl (input_fd, TIOCGLTC, & old_ltchars);
,	ioctl (input_fd, TIOCLGET, & oldlmode);
,/* Set line mode */
,/* If this feature should not be available on some system, RAW must be used
,   instead of CBREAK below to enable 8 bit characters on output */
,	lmode = oldlmode;
,	lmode |= LPASS8; /* enable 8 bit characters on input in CBREAK mode */
,	lmode |= LLITOUT; /* enable 8 bit characters on output in CBREAK mode;
,	    this may not be necessary in newer Unixes, e.g. SUN-OS 4;
,	    output handling is slightly complicated by LITOUT */
,	ioctl (input_fd, TIOCLSET, & lmode);
,/* Set tty to CBREAK (or RAW) mode */
,	new_tty = old_tty;
,	new_tty.sg_flags &= ~ECHO;
,	new_tty.sg_flags |= CBREAK;
,	ioctl (input_fd, TIOCSETP, & new_tty);
,/* Unset signal chars */
,	ioctl (input_fd, TIOCSETC, & new_tchars);  /* Only leaves QUITCHAR */
,	ioctl (input_fd, TIOCSLTC, & new_ltchars); /* Leaves nothing */
,#endif
,
,/* Define signal handlers */
,#ifdef SIGQUIT
,	signal (SIGQUIT, catchquit);	/* Catch QUITCHAR (^\) */
,#endif
,#ifdef SIGINT
,	signal (SIGINT, catchint);	/* Catch INTR char (^C) */
,#endif
,#ifdef SIGWINCH
,	signal (SIGWINCH, catchwinch);	/* Catch window size changes */
,#endif
,  }
,}
,
,/*  ==================================================================	*
, *			Unix I/O routines				*
, *  ==================================================================	*/
,
,#ifdef CURSES
,
,__putchar (c)
,  register u_char c;
,{ addch (c); }
,
,putstring (str)
,  register u_char * str;
,{ addstr (str); }
,
,flush ()
,{ refresh (); }
,
,FLAG can_add_line = TRUE, can_delete_line = TRUE, can_clear_eol = TRUE;
,
,clear_screen ()
,{
,  clear ();
,}
,clear_eol ()
,{
,  clrtoeol ();
,}
,scroll_forward ()
,{
,  scroll (stdscr);
,}
,scroll_reverse ()
,{ /* only called if cursor is at top of screen */
,  insertln ();
,}
,add_line (y)
,  register int y;
,{
,  move (y, 0);
,  insertln ();
,}
,delete_line (y)
,  register int y;
,{
,  move (y, 0);
,  deleteln ();
,}
,move_cursor (x, y)
,  register int x, y;
,{
,  move (y, x);
,}
,reverse_on ()
,{
,  standout ();
,}
,reverse_off ()
,{
,  standend ();
,}
,
,get_term_cap (TERMname)
,  char * TERMname;
,{
,#ifdef vms
,  system ("set terminal /pasthru /nottsync");
,#endif
,  initscr ();
,#ifdef vms
,  crmode ();
,#else
,  crmode (); /* cbreak (); */
,  nonl ();
,#endif
,  noecho ();
,  scrollok (stdscr, TRUE);
,#ifdef unix
,#ifndef vax
,  idlok (stdscr, TRUE);
,#ifndef sun
,  typeahead (input_fd);
,#endif
,#endif
,#endif
,
,  YMAX = LINES - 1;	/* # of lines */
,  XMAX = COLS - 1;	/* # of columns */
,  getwinsize ();
,}
,
,/*------------------------------------------------------------------------*/
,#else	/* not CURSES */
,
,__putchar (c)
,  register u_char c;
,{ writechar (output_fd, (c)); }
,
,putstring (str)
,  register u_char * str;
,{ writestring (output_fd, (str)); }
,
,flush ()
,{ flush_buffer (output_fd); }
,
,#ifdef unix
,
,/* Storage for the terminal control sequences */
,char *cCL, *cCE, *cSR, *cAL, *cDL, *cCS, *cSC, *cRC,
,     *cCM, *cSO, *cSE, *cVS, *cVE, *cTI, *cTE;
,#define aff1 0
,#define affmax YMAX
,
,FLAG can_add_line = FALSE, can_delete_line = FALSE, can_clear_eol = FALSE;
,
,clear_screen ()
,{
,  tputs (cCL, affmax, __putchar);
,}
,clear_eol ()
,{
,  if (cCE) tputs (cCE, aff1, __putchar);
,  else putstring (blank_line);
,}
,scroll_forward ()
,{
,  move_cursor (0, YMAX);
,/*  putchar ('\n');	*/
,  tputs ("\n", affmax, __putchar);
,}
,scroll_reverse ()
,{
,  tputs (cSR, affmax, __putchar);
,}
,add_line (y)
,  register int y;
,{
,  if (cAL) {
,	move_cursor (0, y);
,	tputs (cAL, affmax, __putchar);
,  }
,  else {
,	move_cursor (0, y);
,	tputs (cSC, aff1, __putchar);
,	tputs (tgoto (cCS, YMAX, y), aff1, __putchar);
,	tputs (cRC, aff1, __putchar);
,	tputs (cSR, affmax, __putchar);
,	tputs (tgoto (cCS, YMAX, 0), aff1, __putchar);
,	tputs (cRC, aff1, __putchar);
,  }
,}
,delete_line (y)
,  register int y;
,{
,  if (cDL) {
,	move_cursor (0, y);
,	tputs (cDL, affmax, __putchar);
,  }
,  else {
,	move_cursor (0, y);
,	tputs (cSC, aff1, __putchar);
,	tputs (tgoto (cCS, YMAX, y), aff1, __putchar);
,	move_cursor (0, YMAX);
,/*	putchar ('\n');	*/
,	tputs ("\n", affmax, __putchar);
,	tputs (tgoto (cCS, YMAX, 0), aff1, __putchar);
,	tputs (cRC, aff1, __putchar);
,  }
,}
,move_cursor (x, y)
,  register int x, y;
,{
,  tputs (tgoto (cCM, x, y), aff1, __putchar);
,}
,reverse_on ()
,{
,  tputs (cSO, aff1, __putchar);
,}
,reverse_off ()
,{
,  tputs (cSE, aff1, __putchar);
,}
,start_screen_mode ()
,{
,  tputs (cTI, affmax, __putchar);
,  tputs (cVS, affmax, __putchar);
,/* Install correct scrolling region in case terminal is bigger than assumed */
,/* (this effect was observed after window size changes of Sun windows): */
,  if (cCS) tputs (tgoto (cCS, YMAX, 0), aff1, __putchar);
,}
,end_screen_mode ()
,{
,  tputs (cTE, affmax, __putchar);
,  tputs (cVE, affmax, __putchar);
,}
,
,get_term_cap (TERMname)
,  char * TERMname;
,{
,#define termbuflen 100
,  char entry [1024];
,  static char termbuf [termbuflen];
,  char * loc = termbuf;
,  extern char * tgetstr ();
,
,  if (tgetent (entry, TERMname) <= 0) {
,	panic ("Unknown terminal", NIL_PTR);
,  }
,
,  YMAX = tgetnum ("li", & loc) - 1;	/* # of lines */
,  XMAX = tgetnum ("co", & loc) - 1;	/* # of columns */
,/* getenv ("LINES"), getenv ("COLUMNS") ?! */
,  getwinsize ();
,
,  cCL = tgetstr ("cl", & loc);	/* clear screen */
,  cCE = tgetstr ("ce", & loc);	/* clear to end of line */
,  cSR = tgetstr ("sr", & loc);	/* scroll reverse */
,  cAL = tgetstr ("al", & loc);	/* add line */
,  if (!cSR) cSR = cAL;
,  cDL = tgetstr ("dl", & loc);	/* delete line */
,  cCS = tgetstr ("cs", & loc);	/* change scrolling region */
,  cSC = tgetstr ("sc", & loc);	/* save cursor    \ needed with vt100   */
,  cRC = tgetstr ("rc", & loc);	/* restore cursor / for add/delete line */
,  cCM = tgetstr ("cm", & loc);	/* cursor motion */
,  cSO = tgetstr ("so", & loc);	/* stand out mode */
,  cSE = tgetstr ("se", & loc);	/* end " */
,  cVS = tgetstr ("vs", & loc);	/* visual mode */
,  cVE = tgetstr ("ve", & loc);	/* end " */
,  cTI = tgetstr ("ti", & loc);	/* positioning mode */
,  cTE = tgetstr ("te", & loc);	/* end " */
,
,  if (cAL || (cSR && cCS)) can_add_line = TRUE;
,  if (cDL || cCS) can_delete_line = TRUE;
,  if (cCE) can_clear_eol = TRUE;
,
,  if (loc > termbuf + termbuflen) {
,	panic ("Terminal control strings don't fit", NIL_PTR);
,  }
,  if (!cCL || !cCM || !cSR || !cCE /* || !cSO || !cSE */ ) {
,	panic ("Sorry, no mined on this type of terminal", NIL_PTR);
,  }
,}
,
,/*------------------------------------------------------------------------*/
,#endif unix
,
,#ifdef msdos
,#ifdef conio
,#include <conio.h>
,
,FLAG can_add_line = TRUE, can_delete_line = TRUE, can_clear_eol = TRUE;
,
,clear_screen ()
,{ clrscr (); }
,clear_eol ()
,{ clreol (); }
,scroll_forward ()
,{
,  move_cursor (0, YMAX);
,  putchar ('\n');
,}
,scroll_reverse ()
,{ /* only called if cursor is at top of screen */
,  insline ();
,}
,add_line (y)
,  register int y;
,{
,  move_cursor (0, y);
,  insline ();
,}
,delete_line (y)
,  register int y;
,{
,  move_cursor (0, y);
,  delline ();
,}
,move_cursor (x, y)
,{
,  gotoxy (x + 1, y + 1);
,}
,reverse_on ()
,{ highvideo ();
,}
,reverse_off ()
,{ normvideo ();
,}
,start_screen_mode ()
,{}
,end_screen_mode ()
,{}
,
,get_term ()
,{
,  getwinsize ();
,}
,
,getwinsize ()
,{
,/* this has to be extended to request the current screen size */
,  struct text_info scrinfo;
,
,  gettextinfo (& scrinfo);
,  /* This seems to be a junk procedure since no other information than
,     25 * 80 comes out in 50 lines mode */
,  YMAX = scrinfo.screenheight - 1;
,  XMAX = scrinfo.screenwidth - 1;
,}
,
,#else   # conio
,
,/* adjust the following values to the capabilities of your ANSI driver: */
,FLAG can_add_line = TRUE, can_delete_line = TRUE, can_clear_eol = TRUE;
,
,clear_screen ()
,{ putstring ("[2J"); }
,clear_eol ()
,{ putstring ("[K"); }
,scroll_forward ()
,{
,  move_cursor (0, YMAX);
,  putchar ('\n');
,}
,scroll_reverse ()
,{ /* only called if cursor is at top of screen */
,  putstring ("[1L");
,}
,add_line (y)
,  register int y;
,{
,  move_cursor (0, y);
,  putstring ("[1L");
,}
,delete_line (y)
,  register int y;
,{
,  move_cursor (0, y);
,  putstring ("[1M");
,}
,move_cursor (x, y)
,  register int x, y;
,{ static char s [11];
,  build_string (s, "[%d;%dH", y + 1, x + 1);
,  putstring (s);
,}
,char reverse_on_str [30] = "[7m";	/* inverse mode */
,char reverse_off_str [30] = "[27m";	/* inverse off */
,reverse_on ()
,{ putstring (reverse_on_str); /* 1m | 7m | 7m    | 7;2m */
,}
,reverse_off ()
,{ putstring (reverse_off_str); /* m  | 0m | 0m 1m | m    */
,}
,start_screen_mode ()
,{}
,end_screen_mode ()
,{}
,
,get_term ()
,{
,  char * colstr = unnull (getenv ("MINEDCOL"));
,  char * coloff = colstr;
,  while (* coloff != '\0' && * coloff != ' ') coloff ++;
,  if (* coloff == ' ') {* coloff = '\0'; coloff ++;}
,  if (* colstr != '\0') build_string (reverse_on_str, "[%sm", colstr);
,  if (* coloff != '\0') build_string (reverse_off_str, "[%sm", coloff);
,  getwinsize ();
,}
,
,getwinsize ()
,{
,  move_cursor (200, 200);
,  putstring ("[6n");
,  flush ();
,  (void) readchar (); (void) readchar ();
,  get_digits (& YMAX); YMAX = YMAX - 1;
,  get_digits (& XMAX); XMAX = XMAX - 1;
,  readchar ();	/* NNANSI sends a final return */
,}
,
,#endif else conio
,#endif msdos
,
,#endif else CURSES
,
,/*------------------------------------------------------------------------*/
,
,/*
, * Read a character from the operating system and handle interrupts.
, * Concerning problems due to the interference of read operations and
, * incoming signals (QUIT, WINCH) see the comments at readchar ().
, */
,strange (err)
,  char * err;
,{
,  ring_bell ();
,  error ("Read interrupted: ", err);
,  sleep (1);
,  ring_bell ();
,  return QUITCHAR;
,}
,
,/*
, * Is a character available within msec milliseconds from file no fid?
, */
,int
,inputreadyafter (fid, msec)
,  int fid;
,  int msec;
,{
,#ifdef selectread
,  int readfds;
,  static struct timeval timeoutstru = {0, 0};
,  register int nfds;
,
,  readfds = 1 << fid;
,  timeoutstru.tv_usec = 1000 * msec;
,  nfds = select (fid + 1, & readfds, 0, 0, & timeoutstru);
,  return nfds;
,#else
,  if (msec < 500)
,	return 1;
,  else	return 0;
,#endif
,}
,
,/*
, * Read a char from operating system, handle interrupts if possible, 
, * handle window size changes if possible.
, */
,#ifdef selectread
,__readchar ()
,{
,  u_char c;
,  register int n;
,  int readfds, exceptfds;
,
,  do {
,	if (winchg == TRUE) RDwin ();
,	readfds = 1 << input_fd;
,	exceptfds = readfds;
,	select (input_fd + 1, & readfds, 0, & exceptfds, 0);
,	if (exceptfds) {
,	   if (quit == TRUE) return QUITCHAR;
,	   else if (winchg == TRUE) ;
,	   else if (intr == TRUE) {intr = FALSE; return '\003';}
,	   else return strange ("exception");
,	}
,	else
,#ifdef _getch_
,	   return getch ();
,#else
,	{
,	   if ((n = read (input_fd, & c, 1)) == 1) return c;
,	   else if ((n == 0) || (geterrno () != EINTR))
,		panicio ("Error during character input", serror ());
,	   else return strange (serror ());
,	}
,#endif
,  } while (TRUE);
,}
,#else
,__readchar ()
,{
,  u_char c;
,
,#ifdef _getch_
,  c = getch ();
,  if (intr == TRUE) {intr = FALSE; c = '\003';}
,#else
,  if (read (input_fd, & c, 1) != 1 && quit == FALSE) {
,	if (geterrno () == EINTR) return __readchar ();
,	else panicio ("Error during character input", serror ());
,  }
,#endif
,  if (quit == TRUE) c = QUITCHAR;
,  return c;
,}
,#endif
,
,/*------------------------------------------------------------------------*/
,
,#ifdef vms
,
,get_term ()
,{
,  get_term_cap (NIL_PTR);
,}
,
,getwinsize ()
,{ }
,
,#endif vms
,
,#ifdef unix
,
,/*
, * Get current window size
, */
,getwinsize ()
,{
,  struct winsize winsiz;
,
,  ioctl (output_fd, TIOCGWINSZ, & winsiz);
,  if (winsiz.ws_row != 0) YMAX = winsiz.ws_row - 1;
,  if (winsiz.ws_col != 0) XMAX = winsiz.ws_col - 1;
,}
,
,/*
, * Get terminal information
, */
,get_term ()
,{
,  char * TERMname = (char *) getenv ("TERM");
,
,  if (TERMname == NIL_PTR)
,	panic ("Terminal not specified", NIL_PTR);
,
,/*
,  if (  (strisprefix ("vt", TERMname) && strlen (TERMname) > 2)
,     || strisprefix ("sun", TERMname)
,     || strisprefix ("xterm", TERMname)
,     )
,	SHIFT_MARK = ';';
,  else	SHIFT_MARK = '>';
,*/
,
,  get_term_cap (TERMname);
,
,/* build_string (text_buffer, "Terminal is %s, %d * %d.\n", TERMname, YMAX+1, XMAX+1);
,  putstring (text_buffer); */
,}
,
,#endif unix
,
,/*  ==================================================================	*
, *				End					*
, *  ==================================================================	*/
EOSED

echo ---------------------- extracting minedmp.c -----------------
sed 's/^,//' << \EOSED > minedmp.c
,/*  ==================================================================	*
, *				Editor mined				*
, *			Command and character set mappings		*
, *  ==================================================================	*/
,
,#include "mined.h"
,
,#define iso_latin_1
,
,#ifdef msdos
,#undef iso_latin_1
,#undef dec_sup
,#define pc_charset
,#endif
,
,/*  ==================================================================	*
, *			character set coding				*
, *  ==================================================================	*/
,
,/*
, * Determine a default diacritic character value for _readchar ().
, * The characters are given literally except for the MSDOS version in order
, * not to depend on the function of a character set translator.
, * For all non-MSDOS platforms, ISO-Latin1 or the very similar 
, * DEC-Supplemental are assumed.
, * For MSDOS, characters for the "International Codepage" ("850") are 
, * generated which includes the real letters (not all graphic and Greek 
, * characters) of the old IBM codepage ("437") (which, by the way, some 
, * time ago someone must have designed in an attack of mental sickness).
, */
,u_char
,diacritic (c)
,  u_char c;
,{
,  /*	the following characters cannot be inserted by this function:
,	)*.:<=> and MSDOS graphics characters */
,  switch (c) {
,#ifdef pc_charset
,	case 'C' : return 128;
,	case 'c' : return 135;
,	case 'N' : return 165;
,	case 'n' : return 164;
,	case 's' : return 225;
,	case '!' : return 173;
,	case '$' : return 189;
,	case '/' : return 189;
,	case 'l' : return 156;
,	case 'L' : return 156;
,	case 'Y' : return 190;
,	case '+' : return 241;
,	case '?' : return 168;
,	case '0' : return 248;
,	case '1' : return 251;
,	case '2' : return 253;
,	case '3' : return 252;
,	case '<' : return 174;
,	case '>' : return 175;
,	case ':' : return 246;
,	case 'x' : return 158;
,	case 'f' : return 159;
,	case 'D' : return 209;
,	case 'd' : return 208;
,	case 'P' : return 232;
,	case 'p' : return 231;
,	case 'i' : return 213;
,	case '|' : return 221;
,	case '&' : return 244;
,	case '\\' : return 170;
,	case '_' : return 238;
,	case '-' : return 240;
,	case 'm' : return 230;
,	case '=' : return 242;
,	case '#' : return 245;
,	case '.' : return 250;
,	case ',' : return 247;
,	case '\'' : return 239;
,	case 'X' : return 207;
,#else
,	case 'C' : return 'G';
,	case 'c' : return 'g';
,	case 'N' : return 'Q';
,	case 'n' : return 'q';
,	case 's' : return '_';
,	case '!' : return '!';
,	case '$' : return '"';
,	case '/' : return '"';
,	case 'l' : return '#';
,	case 'L' : return '#';
,	case 'Y' : return '%';
,	case '+' : return '1';
,	case '?' : return '?';
,	case '0' : return '0';
,	case '2' : return '2';
,	case '<' : return '+';
,	case '>' : return ';';
,	case 'D' : return 'P';
,	case 'd' : return 'p';
,	case 'P' : return '^';
,	case 'p' : return '~';
,	case '|' : return '&';
,	case '&' : return ''';
,	case '\\' : return ',';
,	case '_' : return '/';
,	case '-' : return '-';
,	case 'm' : return '5';
,	case '#' : return '6';
,	case '.' : return '7';
,	case '*' : return '7';
,	case ',' : return '8';
,	case '\'' : return '4';
,	case '1' : return '9';
,	case '3' : return '3';
,#ifdef iso_latin_1
,	case 'X' : return '$';
,	case '"' : return '(';
,	case 'x' : return 'W';
,	case ':' : return 'w';
,#endif
,#ifdef dec_sup
,	case 'X' : return '('; /* $ */
,#endif
,#endif
,	default: return c;
,  }
,}
,
,grave (ch)
,  u_char ch;
,{
,	switch (ch) {
,#ifdef pc_charset
,		case 'A' : return 183;
,		case 'E' : return 212;
,		case 'I' : return 222;
,		case 'O' : return 227;
,		case 'U' : return 235;
,		case 'a' : return 133;
,		case 'e' : return 138;
,		case 'i' : return 141;
,		case 'o' : return 149;
,		case 'u' : return 151;
,#else
,		case 'A' : return '@';
,		case 'E' : return 'H';
,		case 'I' : return 'L';
,		case 'O' : return 'R';
,		case 'U' : return 'Y';
,		case 'a' : return '`';
,		case 'e' : return 'h';
,		case 'i' : return 'l';
,		case 'o' : return 'r';
,		case 'u' : return 'y';
,#endif
,		default : return diacritic (ch);
,	}
,}
,circumflex (ch)
,  u_char ch;
,{
,	switch (ch) {
,#ifdef pc_charset
,		case 'A' : return 182;
,		case 'E' : return 210;
,		case 'I' : return 215;
,		case 'O' : return 226;
,		case 'U' : return 234;
,		case 'a' : return 131;
,		case 'e' : return 136;
,		case 'i' : return 140;
,		case 'o' : return 147;
,		case 'u' : return 150;
,#else
,		case 'A' : return 'B';
,		case 'E' : return 'J';
,		case 'I' : return 'N';
,		case 'O' : return 'T';
,		case 'U' : return '[';
,		case 'a' : return 'b';
,		case 'e' : return 'j';
,		case 'i' : return 'n';
,		case 'o' : return 't';
,		case 'u' : return '{';
,#endif
,		default : return diacritic (ch);
,	}
,}
,acute (ch)
,  u_char ch;
,{
,	switch (ch) {
,#ifdef pc_charset
,		case 'A' : return 181;
,		case 'E' : return 144;
,		case 'I' : return 214;
,		case 'O' : return 224;
,		case 'U' : return 233;
,		case 'a' : return 160;
,		case 'e' : return 130;
,		case 'i' : return 161;
,		case 'o' : return 162;
,		case 'u' : return 163;
,		case 'Y' : return 237;
,		case 'y' : return 236;
,		case ' ' : return 239;
,#else
,		case 'A' : return 'A';
,		case 'E' : return 'I';
,		case 'I' : return 'M';
,		case 'O' : return 'S';
,		case 'U' : return 'Z';
,		case 'a' : return 'a';
,		case 'e' : return 'i';
,		case 'i' : return 'm';
,		case 'o' : return 's';
,		case 'u' : return 'z';
,		case ' ' : return '4';
,#ifdef iso_latin_1
,		case 'Y' : return ']';
,		case 'y' : return '}';
,#endif
,#endif
,		default : return diacritic (ch);
,	}
,}
,diaeresis (ch)
,  u_char ch;
,{
,	switch (ch) {
,#ifdef pc_charset
,		case 'A' : return 142;
,		case 'E' : return 211;
,		case 'I' : return 216;
,		case 'O' : return 153;
,		case 'U' : return 154;
,		case 'a' : return 132;
,		case 'e' : return 137;
,		case 'i' : return 139;
,		case 'o' : return 148;
,		case 'u' : return 129;
,		case 'y' : return 152;
,		case ' ' : return 249;
,#else
,		case 'A' : return 'D';
,		case 'E' : return 'K';
,		case 'I' : return 'O';
,		case 'O' : return 'V';
,		case 'U' : return '\';
,		case 'a' : return 'd';
,		case 'e' : return 'k';
,		case 'i' : return 'o';
,		case 'o' : return 'v';
,		case 'u' : return '|';
,#ifdef iso_latin_1
,		case ' ' : return '(';
,		case 'y' : return '\377'; /* '' aborts sun compiler */
,#endif
,#ifdef dec_sup
,		case 'Y' : return ']'; /* capital  */
,		case 'y' : return '}'; /*  */
,#endif
,#endif
,		default : return diacritic (ch);
,	}
,}
,tilde (ch)
,  u_char ch;
,{
,	switch (ch) {
,#ifdef pc_charset
,		case 'A' : return 199;
,		case 'O' : return 229;
,		case 'a' : return 198;
,		case 'o' : return 228;
,#else
,		case 'A' : return 'C';
,		case 'O' : return 'U';
,		case 'a' : return 'c';
,		case 'o' : return 'u';
,#ifdef dec_sup
,		case 'E' : return 'W'; /* OE */
,		case 'e' : return 'w'; /* oe */
,#endif
,#endif
,		default : return diacritic (ch);
,	}
,}
,angstrom (ch)
,  u_char ch;
,{
,	switch (ch) {
,#ifdef pc_charset
,		case 'A' : return 143;
,		case 'E' : return 146;
,		case 'O' : return 157;
,		case 'a' : return 134;
,		case 'e' : return 145;
,		case 'o' : return 155;
,#else
,		case 'A' : return 'E';
,		case 'E' : return 'F';
,		case 'O' : return 'X';
,		case 'a' : return 'e';
,		case 'e' : return 'f';
,		case 'o' : return 'x';
,#endif
,		default : return diacritic (ch);
,	}
,}
,
,/*  ==================================================================	*
, *		key and function key -> command mapping			*
, *  ==================================================================	*/
,
,/* The mapping between input codes and functions */
,
,extern MUP (), MDN (), MLF (), MRT (), MNW (), MPW (), GOTO (), GOMA ();
,extern SD (), SU (), PD (), PU (), HOME (), EF (), BL (), EL (), HIGH (), LOW ();
,extern S (), SNL (), LIB (), DPC (), DCC (), DLN (), DNW (), DPW (), CTRl ();
,extern QUED (), WT (), EDIT (), RD (), SH (), I (), FS (), REPT ();
,extern SFW (), SRV (), RS (), LR (), GR (), REPL ();
,extern MARK (), YA (), DT (), PT (), WB (), INF ();
,extern HOP (), CANCEL (), ESCAPE (), HELP (), BAD (), FUNKEY (), DIRECT ();
,extern EXED (), VIEW ();
,
,#ifdef unix
,#define NULLcmd BAD
,#define BSPcmd MLF
,#endif
,#ifdef msdos
,#define NULLcmd FUNKEY	/* since FUNcmd is 0 */
,#define BSPcmd DPC
,#endif
,#ifdef vms
,#define NULLcmd ESCAPE
,#define BSPcmd MLF
,#endif
,
,int (* key_map [256]) () =
,{	/* characters to functions map */
,   /* 000-017 */ NULLcmd, MPW, DCC, PD, MRT, MUP, MNW, GOTO,
,		 BSPcmd, S, S, DLN, HOP, SNL, RS, LIB,
,   /* 020-037 */ PT, HOP, PU, MLF, DNW, DT, CTRl, SU,
,		 MDN, YA, SD, ESCAPE, CANCEL, MARK, DPW, BAD,
,   /* 040-057 */ S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S,
,   /* 060-077 */ S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S,
,   /* 100-117 */ S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S,
,   /* 120-137 */ S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S,
,   /* 140-157 */ S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S,
,   /* 160-177 */ S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, DPC,
,#ifdef msdos
,   /* 200-217 */ S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S,
,   /* 220-237 */ S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S,
,#else
,   /* 200-217 */ FUNKEY, I, I, I, I, I, I, I, I, I, I, I, I, I, I, I,
,   /* 220-237 */ I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, I,
,#endif
,   /* 240-257 */ S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S,
,   /* 260-277 */ S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S,
,   /* 300-317 */ S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S,
,   /* 320-337 */ S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S,
,   /* 340-357 */ S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S,
,   /* 360-377 */ S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S,
,};
,
,#ifdef msdos
,/*
,function keys deliver NUL and the following codes:
,Block1: RGISOQHKPM
,Block2: GHIKMOPQRS	Pos1 Up PgUp Left Center Right End Down PdDn Ins
,Cntrl:	st <-/->
,Cntrl:	wu Pos1/End
,	dv PgUp / PgDn
,F1-F10: ;<=>?@ABCD
,shift:	TUVWXYZ[\]
,cntrl:	^_`abcdefg
,alt:	hijklmnopq
,*/
,
,HELPF ()
,{ status_msg ("       F2 write  F3 edit  F6 \357  F7 \371  F8 search      F9 next  F10 hop"); }
,HELPS ()
,{ status_msg ("shift- F2 exit            F6 `  F7 ~  F8 search rev  F9 next  F10 hop"); }
,HELPC ()
,{ status_msg ("cntrl- F2 write  F3 view  F6 ^  F7 \370  F8 search next          F10 hop"); }
,HELPA ()
,{ status_msg ("alt-   F2 write buffer                F8 search rev           F10 hop"); }
,
,int (* pc_key_map [256]) () =
,{	/* function characters to functions map */
,   /* 000-017 */ I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, I,
,   /* 020-037 */ I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, I,
,   /* 040-057 */ I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, I,
,   /* 060-077 */ I, I, I, I, I, I, I, I, I, I, I, HELPF, WT, EDIT, I, I,
,   /* 100-117 */ acute, diaeresis, SFW, RS, GOTO, I, I, MARK, MUP, PU, I, MLF, HOP, MRT, I, YA,
,   /* 120-137 */ MDN, PD, PT, DCC, HELPS, EXED, I, I, I, grave, tilde, SRV, RS, GOTO, HELPC, WT,
,   /* 140-157 */ VIEW, I, I, circumflex, angstrom, RS, I, GOTO, HELPA, WB, I, I, I, I, I, SRV,
,   /* 160-177 */ I, GOTO, I, MPW, MNW, DT, SD, HOP, I, I, I, I, I, I, I, I,
,   /* 200-217 */ I, I, I, I, SU, I, I, I, I, I, I, I, I, I, I, I,
,   /* 220-237 */ I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, I,
,   /* 240-257 */ I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, I,
,   /* 260-277 */ I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, I,
,   /* 300-317 */ I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, I,
,   /* 320-337 */ I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, I,
,   /* 340-357 */ I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, I,
,   /* 360-377 */ I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, I
,};
,#endif
,
,#ifndef msdos
,
,/* The mapping between function key sequences and functions */
,
,struct {char * fk; int (* fp) ();} keycode [] =
,{	/* Escape-key sequences of function keys */
,	/* VT100 and SUN */
,	"[A",	MUP,	/* move cursor up	*/
,	"[B",	MDN,	/* more cursor down	*/
,	"[C",	MRT,	/* more cursor right	*/
,	"[D",	MLF,	/* more cursor left	*/
,	/* SUN raw keycodes */
,	"[215z",	MUP,	/* move cursor up	*/
,	"[221z",	MDN,	/* more cursor down	*/
,	"[219z",	MRT,	/* more cursor right	*/
,	"[217z",	MLF,	/* more cursor left	*/
,	/* VT100 */
,	"[6~",	PD,	/* Next Screen	*/
,	"[5~",	PU,	/* Prev Screen	*/
,	"[4~",	MARK,	/* Select	*/
,	"[3~",	DT,	/* Remove	*/
,	"[2~",	PT,	/* Insert Here	*/
,	"[1~",	SFW,	/* Find		*/
,	"[29~",	YA,	/* Do		*/
,	"[28~",	HELP,	/* Help		*/
,	"[17~",	diaeresis, /* F6	*/
,	"[18~",	diaeresis, /* F7	*/
,	"[19~",	SFW,	/* F8	*/
,	"[20~",	RS,	/* F9	*/
,	"[21~",	I,	/* F10	*/
,	"[23~",	I,	/* F11	*/
,	"[24~",	I,	/* F12	*/
,	"[25~",	I,	/* F13	*/
,	"[26~",	I,	/* F14	*/
,	"[31~",	I,	/* F17	*/
,	"[32~",	I,	/* F18	*/
,	"[33~",	I,	/* F19	*/
,	"[34~",	I,	/* F20	*/
,	"OP",	HOP,	/* PF1	*/
,	"OQ",	SU,	/* PF2	*/
,	"OR",	SD,	/* PF3	*/
,	"OS",	I,	/* PF4	*/
,	/* SUN */
,	"[208z",	grave,		/* R1 */
,	"[209z",	circumflex,	/* R2 */
,	"[210z",	acute,		/* R3 */
,	"[211z",	diaeresis,	/* R4 */
,	"[212z",	tilde,		/* R5 */
,	"[213z",	angstrom,	/* R6 */
,	"[214z",	SU,	/* R7	*/
,	"[216z",	PU,	/* R9	*/
,	"[218z",	HOP,	/* R11	*/
,	"[220z",	SD,	/* R13	*/
,	"[222z",	PD,	/* R15	*/
,	"[254z",	GOMA,	/* - */
,	"[253z",	MARK,	/* + */
,	"[250z",	YA,	/* Enter */
,	"[249z",	DT,	/* Del */
,	"[247z",	PT,	/* Ins */
,	"[2z",		PT,	/* Ins (NeWS) */
,	"[192z",	MARK,	/* Stop */
,	"[193z",	I,	/* Again */
,	"[194z",	FS,	/* Props */
,	"[195z",	I,	/* Undo */
,	"[197z",	YA,	/* Copy */
,	"[199z",	PT,	/* Paste */
,	"[200z",	RS,	/* Find */
,	"[201z",	DT,	/* Cut */
,	"[196z",	HELP,	/* Help */
,	"[225z",	I,	/* F2 */
,	"[226z",	I,	/* F3 */
,	"[227z",	I,	/* F4 */
,	"[228z",	I,	/* F5 */
,	"[229z",	PU,	/* F6 */
,	"[230z",	PD,	/* F7 */
,	"[231z",	SFW,	/* F8 */
,	"[232z",	RS,	/* F9 */
,	"[233z",	I,	/* F10 */
,	"[234z",	I,	/* F11 */
,	"[235z",	I,	/* F12 */
,	/* Iris */
,	"[209q",	MARK,	/* Print Screen */
,	"[213q",	YA,	/* Scroll Lock */
,/*	"[217q",	I,	/* Pause */
,	"[139q",	PT,	/* Insert, Ins */
,	"[P",	DT,	/* Del */
,	"[H",	SU,	/* Home */
,	"[150q",	PU,	/* PgUp */
,	"[146q",	SD,	/* End */
,	"[154q",	PD,	/* PgDn */
,	"[000q",	HOP,	/* 5 */
,	"[001q",	I,	/* F1 */
,	"[002q",	I,	/* F2 */
,	"[005q",	I,	/* F5 */
,	"[006q",	I,	/* F6 */
,	"[007q",	I,	/* F7 */
,	"[008q",	SFW,	/* F8 */
,	"[009q",	RS,	/* F9 */
,	"[022q",	grave,		/* Shift-F10 */
,	"[023q",	circumflex,	/* Shift-F11 */
,	"[024q",	acute,		/* Shift-F12 */
,	"[010q",	diaeresis,	/* F10 */
,	"[011q",	tilde,		/* F11 */
,	"[012q",	angstrom,	/* F12 */
,	/* VT100 emulator at IBM-PC */
,	"M",		PU,	/* Pg Up */
,	"D",		PD,	/* Pg Dn */
,/*	"[H",		SU,	/* Home	, same at Iris */
,	"[24;1H",	SD,	/* End	*/
,	"1",		HOP,	/* Ins	*/
,		/* cursor keys and F1-4 same as VT100 */
,	/* crttool */
,	"m",		DIRECT,	/* direct cursor address */
,	NIL_PTR
,};
,
,#define MAXCODELEN 7 /* max. length of function key sequence to be detected, 
,			depending on the keycode table => used in mined1.c */
,
,#endif
,
,/*  ==================================================================	*
, *				End					*
, *  ==================================================================	*/
EOSED

echo ---------------------- extracting mined.h -----------------
sed 's/^,//' << \EOSED > mined.h
,/*  ====================================================================  *
, *				Mined.h					  *
, *  ====================================================================  */
,
,#ifndef minedH
,#define minedH
,
,#define msdos
,#ifdef unix
,#  undef msdos
,#endif
,#ifdef vms
,#  undef msdos
,#endif
,
,#ifdef msdos
,/* With Turbo-C, compile with memory model >= Compact */
,/* #define conio doesn't work with current combined positioning/output method */
,extern far * getenv ();
,extern far * getcwd ();
,#  define u_char unsigned char
,#  include <fcntl.h>
,#  define abort()	exit (1)
,#  define FUNcmd	'\000'
,#endif
,
,#ifdef vms
,#  define u_char unsigned char
,#  include <unixio.h>
,#  include <file.h>	/* for the O_... attributes to open () */
,#  include <unixlib.h>
,#  undef putchar
,#  undef FALSE
,#  undef TRUE
,#  define CURSES
,#  define FUNcmd	'\200'
,#endif
,
,#ifdef unix
,#  include <stdio.h>
,#  include <fcntl.h>
,#  undef putchar
,#  undef NULL
,#  undef EOF
,#  define FUNcmd	'\200'
,#endif
,
,/*------------------------------------------------------------------------*/
,
,extern clear_screen ();
,extern clear_eol ();
,extern scroll_forward ();
,extern scroll_reverse ();
,extern add_line (/* y */);
,extern delete_line (/* y */);
,extern move_cursor (/* x, y */);
,extern reverse_on ();
,extern reverse_off ();
,extern start_screen_mode ();
,extern end_screen_mode ();
,extern get_term ();
,extern getwinsize ();
,extern inputreadyafter ();
,extern __readchar ();
,
,/*------------------------------------------------------------------------*/
,
,/* Set cursor at coordinates x, y */
,#define set_cursor(nx, ny)	move_cursor(nx, ny)
,
,/* Screen size and display definitions. Coordinates start at 0, 0 */
,#ifdef msdos
,#  define maxYMAX		64
,#  define maxXMAX		132
,#else
,#  define maxYMAX		126	/* 73 */
,#  define maxXMAX		279	/* 163 */
,#endif
,
,extern short YMAX;
,extern short XMAX;
,#define SCREENMAX	(YMAX - 1)	/* last line displayed (first is 0) */
,#define XBREAK		(XMAX - 1)	/* Shift line display at this column */
,#define SHIFT_SIZE	25		/* Number of chars to shift */
,#define maxLINE_LEN	(maxXMAX + 1)	/* max screen line length */
,#define screen_BUFL	(maxXMAX * maxYMAX)	/* Size of I/O buffering */
,
,#define MAX_CHARS	1024		/* max chars on one line of text */
,		/* LINE_START must be rounded up to the lowest SHIFT_SIZE */
,#define LINE_START	(((-MAX_CHARS - 1) / SHIFT_SIZE) * SHIFT_SIZE \
,  				   - SHIFT_SIZE)
,#define LINE_END	(MAX_CHARS + 1)	/* Highest x-coordinate for line */
,
,#define BLOCK_SIZE	1024
,
,/* Return values of functions */
,#define ERRORS		-1
,#define NO_LINE		(ERRORS - 1)	/* Must be < 0 */
,#define FINE	 	(ERRORS + 1)
,#define NO_INPUT	(ERRORS + 2)
,
,#define STD_IN		0		/* Input file # */
,#define STD_OUT	 	1		/* Terminal output file # */
,#define STD_ERR		2
,
,#define REPORT	2		/* Report change of lines on # lines */
,
,/*
, * Common enum type for all flags used in mined.
, */
,typedef enum {
,/* General flags */
,  FALSE,
,  TRUE,
,  OFF,
,  ON,
,/* yank_status and other */
,  NOT_VALID,
,  VALID,
,
,/* Expression flags */
,  FORWARD,
,  REVERSE,
,
,/* Yank flags */
,  SMALLER,
,  BIGGER,
,  SAME,
,/*  EMPTY, */
,  NO_DELETE,
,  DELETE,
,  READ,
,  WRITE
,} FLAG;
,
,/*
, * The Line structure. Each line entry contains a pointer to the next line,
, * a pointer to the previous line, a pointer to the text and an unsigned char
, * telling at which offset of the line printing should start (usually 0).
, */
,struct Line {
,  struct Line * next;
,  struct Line * prev;
,  char * text;
,  unsigned char shift_count;
,};
,
,typedef struct Line LINE;
,
,/* Dummy line indicator */
,#define DUMMY		0x80
,#define DUMMY_MASK	0x7F
,
,/* Expression definitions */
,#define NO_MATCH	0
,#define MATCH		1
,#define REG_ERROR	2
,
,#define BEGIN_LINE	(2 * REG_ERROR)
,#define END_LINE	(2 * BEGIN_LINE)
,
,/*
, * The regex structure. Status can be any of 0, BEGIN_LINE or REG_ERROR. In
, * the last case, the result.err_mess field is assigned. Start_ptr and end_ptr
, * point to the match found. For more details see the documentation file.
, */
,struct regex {
,  union {
,  	char * err_mess;
,  	int * expression;
,  } result;
,  char status;
,  char * start_ptr;
,  char * end_ptr;
,};
,
,typedef struct regex REGEX;
,
,/* NULL definitions */
,#define NIL_PTR		((char *) 0)
,#define NIL_LINE	((LINE *) 0)
,#define NIL_REG		((REGEX *) 0)
,#define NIL_INT		((int *) 0)
,
,/*
, * Forward declarations
, */
,extern int nlines;		/* Number of lines in file */
,extern LINE * header;		/* Head of line list */
,extern LINE * tail;		/* Last line in line list */
,extern LINE * top_line;		/* First line of screen */
,extern LINE * bot_line;		/* Last line of screen */
,extern LINE * cur_line;		/* Current line in use */
,extern char * cur_text;		/* Pointer to char on current line in use */
,extern int last_y;		/* Last y of screen, usually SCREENMAX */
,
,extern int x, y;		/* x, y coordinates on screen */
,extern FLAG modified;		/* Set when file is modified */
,extern FLAG viewonly;		/* Set when view only mode is selected */
,extern FLAG quit;		/* Set when quit character is typed */
,extern FLAG intr;		/* Set when intr character is typed */
,extern FLAG winchg;		/* Set when the window size changes */
,extern FLAG waitingforinput;	/* Set while waiting for the next command key */
,extern FLAG isscreenmode;	/* Set when screen mode is on */
,extern int out_count;		/* Index in output buffer */
,extern char text_buffer [MAX_CHARS];	/* Buffer for modifying text */
,extern int input_fd;		/* File descriptors for terminal dialog */
,extern int output_fd;
,extern char SHIFT_MARK;
,extern char blank_line [];	/* For line clearance, in case terminal cannot do it */
,extern int fprot;		/* To be used for all file creatings */
,
,extern char yank_file [];	/* Temp. file for buffer */
,extern char yankie_file [];	/* Temp. file for inter-window buffer */
,extern char panic_file [];	/* file for panic-write-back */
,extern FLAG yank_status;	/* Status of yank_file */
,extern long chars_saved;	/* # of chars saved in buffer */
,
,extern int hop_flag;		/* set to 2 by HOP key function */
,
,extern FLAG can_add_line, can_delete_line, can_clear_eol;
,extern FLAG cansuspendmyself;
,extern char * get_line_err1;
,extern char * get_line_err2;
,extern char * serror ();
,extern char * serrorof ();
,extern int geterrno ();
,
,extern LINE * proceed ();
,extern LINE * match ();
,extern LINE * line_insert ();
,extern char * num_out ();
,extern get_digits ();
,extern char * basename ();
,extern u_char promptyn ();
,extern FLAG checkoverwrite ();
,extern delete_file ();
,extern char * unnull ();
,
,#define putchar(c)	__putchar (c)
,extern __putchar ();	/* do not use _putchar! it may conflict with curses */
,extern writechar ();
,extern putstring ();
,extern writestring ();
,extern flush ();
,extern flush_buffer ();
,
,extern char * alloc ();
,
,/*
, * String functions
, */
,#define streq(s1, s2)		(strcmp (s1, s2) == 0)
,#define strisprefix(s1, s2)	(strncmp (s2, s1, strlen (s1)) == 0)
,
,/*
, * Empty output buffer
, */
,#define clear_buffer()		(out_count = 0)
,
,/*
, * Ring bell on terminal
, */
,#define ring_bell()		putchar ('\07')
,
,#ifdef UNUSED	/* putchar, putstring, flush, and #include <curses.h> 
,		   are now in minedio.c */
,/*
, * Print character on terminal	- obsolete due to new putchar macro
, */
,#ifdef CURSES
,#  define putchar(c)		addch (c)
,#else
,#  define putchar(c)		writechar (output_fd, (c))
,#endif
,/*
, * Print string on terminal
, */
,#ifdef CURSES
,#  define putstring(str)	addstr (str)
,#else
,#  define putstring(str)	writestring (output_fd, (str))
,#endif
,/*
, * Flush output buffer
, */
,#ifdef CURSES
,#  define flush()		refresh ()
,#else
,#  define flush()		flush_buffer (output_fd)
,#endif
,
,#endif UNUSED
,
,/*
, * Print line on terminal at offset 0 and clear tail of line
, */
,#define line_print(line)	put_line (line, 0, TRUE)
,
,/*
, * Functions handling status_line. ON means in reverse video.
, */
,#define status_msg(str)		status_line (str, NIL_PTR)
,#define status_line(str1, str2)		\
,	bottom_line (ON, (str1), (str2), NIL_PTR, FALSE)
,#define status_beg(str)			\
,	bottom_line (ON, (str), NIL_PTR, NIL_PTR, TRUE)
,#define error(str1, str2)		\
,	bottom_line (ON, (str1), (str2), NIL_PTR, FALSE)
,#define get_string(str1, str2, fl)	\
,	bottom_line (ON, (str1), NIL_PTR, (str2), fl)
,#define clear_status()			\
,	bottom_line (OFF, NIL_PTR, NIL_PTR, NIL_PTR, FALSE)
,
,/*
, * Print info about current file and buffer.
, */
,#define fstatus(mess, cnt)	\
,	file_status ((mess), (cnt), file_name, nlines, writable, modified, viewonly)
,
,/*
, * Build formatted string.
, * If this definition is left out, a routine will be defined in mined1.c.
, */
,#define build_string sprintf /**/
,
,/*
, * Get real shift value.
, */
,#define get_shift(cnt)		((cnt) & DUMMY_MASK)
,
,/*
, * Special character.
, */
,#define QUITCHAR '\034' /* ^\ */
,
,/*------------------------------------------------------------------------*/
,#endif
,/*------------------------------------------------------------------------*/
EOSED

echo ---------------------- extracting mined.c -----------------
sed 's/^,//' << \EOSED > mined.c
,/* mined single compilation version for my attempts with Turbo-C
,   (since I don't know how to compile separately with it)
, */
,
,#define single_pass_compilation
,#include "minedmp.c"
,#include "mined1.c"
,#include "mined2.c"
,#include "minedio.c"
EOSED

echo ---------------------- extracting mined.prj -----------------
sed 's/^,//' << \EOSED > mined.prj
,mined1.c
,mined2.c
,minedio.c
EOSED

exit 0
Newsgroups: comp.editors