Newsgroups: comp.sources.misc From: Peter Reilley Subject: v22i013: beav - Binary file editor and viewer, Part04/09 Message-ID: <1991Aug14.200728.5718@sparky.IMD.Sterling.COM> X-Md4-Signature: 2ba7e5d92e90987c001b46153d21203e Date: Wed, 14 Aug 1991 20:07:28 GMT Approved: kent@sparky.imd.sterling.com Submitted-by: Peter Reilley Posting-number: Volume 22, Issue 13 Archive-name: beav/part04 Environment: UNIX, AIX, MSDOS #! /bin/sh # This is a shell archive. Remove anything before this line, then unpack # it by saving it into a file and typing "sh file". To overwrite existing # files, type "sh file -c". You can also feed this as standard input via # unshar, or by typing "sh 'file.c' <<'END_OF_FILE' X/* X* File commands. X*/ X#include "def.h" X Xchar load_file (); Xchar readin (); Xvoid makename (); Xbool writeout (); Xbool parse_f_name (); XA32 ffseek (); X Xextern char MSG_rd_file[]; Xextern char MSG_trash[]; Xextern char MSG_ins_file[]; Xextern char MSG_not_fnd[]; Xextern char MSG_visit[]; Xextern char MSG_view[]; Xextern char MSG_buf_ex[]; Xextern char MSG_old_buf[]; Xextern char MSG_buf_nam[]; Xextern char MSG_cnt_cr[]; Xextern char MSG_reading[]; Xextern char MSG_read_lx[]; Xextern char MSG_no_mem_rd[]; Xextern char MSG_wr_file[]; Xextern char MSG_no_fn[]; Xextern char MSG_bk_err[]; Xextern char MSG_writing[]; Xextern char MSG_wrot_n[]; Xextern char MSG_fil_nam[]; Xextern char MSG_null[]; Xextern char ERR_parse_fn[]; Xextern char ERR_addr_neg[]; Xextern char ERR_f_size[]; X Xstatic int ughlyflag = FALSE; X X/* X* Read a file into the current X* buffer. This is really easy; all you do it X* find the name of the file, and call the standard X* "read a file into the current buffer" code. X*/ Xchar fileread () X{ X register char s; X char fname[NFILEN]; X A32 start, end; X X if ((s = ereply (MSG_rd_file, fname, NFILEN, NULL)) != TRUE) X return (s); X if (parse_f_name (fname, &start, &end)) X { X adjustcase (fname); X return (readin (fname, start, end)); X } X return (TRUE); X} X X X/* insert file into current buffer - use readin, and yank X*/ Xchar fileinsert () X{ X register char s; X char bname[NBUFN], X fname[NFILEN]; X A32 start, end; X register char *trash = MSG_trash; X X strcpy (bname, curbp -> b_bname);/* save current buffer */ X if ((s = _usebuffer (trash)) == 0)/* temp buffer */ X return (s); X if ((s = ereply (MSG_ins_file, fname, NFILEN, NULL)) != TRUE) X return (s); X /* if file name and starting and ending addresses are good */ X if (parse_f_name (fname, &start, &end)) X { X adjustcase (fname); X if ((s = readin (fname, start, end)) == 0) X { X writ_echo (MSG_not_fnd); X _usebuffer (bname); X _killbuffer (trash); X return (s); X } X if ((s = _usebuffer (bname)) == 0) X { X _killbuffer (trash); X return (s); X } X if ((s = _yankbuffer (trash)) == 0) X { X _killbuffer (trash); X return (s); X } X writ_echo (okmsg); X } X else X { X _usebuffer (bname); X _killbuffer (trash); X return (FALSE); X } X if ((s = _killbuffer (trash)) == 0) X return (s); X wind_on_dot (curwp); X return (s); X} X X X/* X* Select a file for editing. X* Look around to see if you can find the X* fine in another buffer; if you can find it X* just switch to the buffer. If you cannot find X* the file, create a new buffer, read in the X* text, and switch to the new buffer. X* X* also various hacked versions for auto load, and X* file-vist with auto window split, and readonly (view-file) (jam) X*/ Xchar file_visit (f, n, k) X{ X char fname[NFILEN]; X char s; X A32 start, end; X if ((s = ereply (MSG_visit, fname, NFILEN, NULL)) != TRUE) X return (s); X if (!parse_f_name (fname, &start, &end)) X return (FALSE); X X splitwind (); X return (load_file (fname, start, end)); X} X X X/* like filevisit, only read only X*/ Xchar viewfile () X{ X char fname[NFILEN]; X char s; X A32 start, end; X X if ((s = ereply (MSG_view, fname, NFILEN, NULL)) != TRUE) X return (s); X ughlyflag = TRUE; X if (!parse_f_name (fname, &start, &end)) X return (FALSE); X X s = load_file (fname, start, end); X if (s) X curbp -> b_flag |= BFVIEW; X ughlyflag = FALSE; X return (s); X} X X Xchar filevisit () X{ X char fname[NFILEN]; X char s; X A32 start, end; X X if ((s = ereply (MSG_visit, fname, NFILEN, NULL)) != TRUE) X return (s); X if (!parse_f_name (fname, &start, &end)) X return (FALSE); X X return (load_file (fname, start, end)); X} X X Xchar load_file (fname, start, end) /* jam */ Xchar *fname; XA32 start, end; X{ X register BUFFER * bp; X register WINDOW * wp; X register LINE * lp; X register int i; X char s; X char bname[NBUFN]; X extern int initial_load; /* jam */ X static int append = 0; X X adjustcase (fname); X for (bp = bheadp; bp != NULL; bp = bp -> b_bufp) X { X if (strcmp (bp -> b_fname, fname) == 0) X { X if (ughlyflag == TRUE) X { X writ_echo (MSG_buf_ex); X return (FALSE); X } X if (--curbp -> b_nwnd == 0) X { X curbp -> b_type = BTFILE; X curbp -> b_dotp = curwp -> w_dotp; X curbp -> b_doto = curwp -> w_doto; X curbp -> b_unit_offset = curwp -> w_unit_offset; X curbp -> b_markp = curwp -> w_markp; X curbp -> b_marko = curwp -> w_marko; X } X curbp = bp; X curwp -> w_bufp = bp; X if (bp -> b_nwnd++ == 0) X { X curwp -> w_dotp = bp -> b_dotp; X curwp -> w_doto = bp -> b_doto; X curwp -> w_unit_offset = bp -> b_unit_offset; X curwp -> w_markp = bp -> b_markp; X curwp -> w_marko = bp -> b_marko; X } X else X { X wp = wheadp; X while (wp != NULL) X { X if (wp != curwp && wp -> w_bufp == bp) X { X curwp -> w_dotp = wp -> w_dotp; X curwp -> w_doto = wp -> w_doto; X curwp -> w_unit_offset = wp -> w_unit_offset; X curwp -> w_markp = wp -> w_markp; X curwp -> w_marko = wp -> w_marko; X break; X } X wp = wp -> w_wndp; X } X } X lp = curwp -> w_dotp; X i = curwp -> w_ntrows / 2; X while (i-- && lback (lp) != curbp -> b_linep) X lp = lback (lp); X curwp -> w_linep = lp; X curwp -> w_flag |= WFMODE | WFHARD; X if (kbdmop == NULL) X { X writ_echo (MSG_old_buf); X } X return (TRUE); X } X } X X makename (bname, fname); /* New buffer name. */ X while ((bp = bfind (bname, FALSE)) != NULL) X { X if (initial_load) /* patch old name */ X { X funky_name (bname, append++); X bp = NULL; X break; X } X s = ereply (MSG_buf_nam, bname, NBUFN, NULL); X if (s == ABORT) /* ^G to just quit */ X return (s); X if (strcmp (bp -> b_bname, bname) == 0 || s == FALSE) X { X /* CR to clobber it */ X makename (bname, fname); X break; X } X } X if (bp == NULL && (bp = bfind (bname, TRUE)) == NULL) X { X err_echo (MSG_cnt_cr); X return (FALSE); X } X if (--curbp -> b_nwnd == 0) X { X /* Undisplay. */ X curbp -> b_type = BTFILE; X curbp -> b_dotp = curwp -> w_dotp; X curbp -> b_doto = curwp -> w_doto; X curbp -> b_unit_offset = curwp -> w_unit_offset; X curbp -> b_markp = curwp -> w_markp; X curbp -> b_marko = curwp -> w_marko; X } X curbp = bp; /* Switch to it. */ X curwp -> w_bufp = bp; X curbp -> b_nwnd++; X return (readin (fname, start, end)); /* Read it in. */ X} X X X/* X* Read the file "fname" into the current buffer. X* Make all of the text in the buffer go away, after checking X* for unsaved changes. This is called by the "read" command, the X* "visit" command, and the mainline (for "beav file"). If the X* BACKUP conditional is set, then this routine also does the read X* end of backup processing. The BFBAK flag, if set in a buffer, X* says that a backup should be taken. It is set when a file is X* read in, but not on a new file (you don't need to make a backup X* copy of nothing). Return a standard status. Print a summary X* (lines read, error message) out as well. X*/ Xchar readin (fname, start, end) Xchar fname[]; XA32 start, end; X{ X register LINE * lp1; X register LINE * lp2; X register LPOS i; X register WINDOW * wp; X register BUFFER * bp; X register char s, m; X long byte_cnt; X LPOS req_chars; X char buf[80], buf1[80]; X A32 temp; X X m = TRUE; X byte_cnt = 0; X bp = curbp; /* Cheap. */ X if ((s = bclear (bp)) != TRUE)/* Might be old. */ X return (s); X#if BACKUP X bp -> b_flag &= ~(BFCHG | BFBAK);/* No change, backup. */ X#else X bp -> b_flag &= ~BFCHG; /* No change. */ X#endif X if ((start == 0L) && (end == MAXPOS)) X strcpy (bp -> b_fname, fname); X else X strcpy (bp -> b_fname, MSG_null); X bp -> b_file_size = 0; X bp -> b_type = BTFILE; X if ((s = ffropen (fname)) == FIOERR || s == FIOFNF)/* jam */ X goto out; X bp -> b_file_size = file_len (); /* get the file lenth */ X sprintf (buf, MSG_reading, fname);/* jam */ X writ_echo (buf); X temp = ffseek (start); X if (temp != start) X { X sprintf (buf1, ERR_f_size, R_POS_FMT(curwp)); X sprintf (buf, buf1, temp); X writ_echo (buf); X return (FALSE); X } X /* only read the requested number of characters */ X if ((end - start) > NLINE) X req_chars = NLINE; X else X req_chars = (int)(end - start); X X if ((lp1 = lalloc(req_chars)) == NULL) X { X bp -> b_flag |= BFVIEW; /* if no memory set to read only mode */ X X m = FALSE; /* flag memory allocation error */ X } X else X { X while ((s = ffgetline (lp1->l_text, lp1->l_size, &lp1->l_used)) == FIOSUC) X { X /* this code breaks rules for knowing how lines * are stored and linked X together, oh well */ X lp2 = lback (curbp -> b_linep); X lp2 -> l_fp = lp1; X lp1 -> l_fp = curbp -> b_linep; X lp1 -> l_bp = lp2; X curbp -> b_linep -> l_bp = lp1; X lp1 -> l_file_offset = byte_cnt; /* file offset from begining */ X byte_cnt += (long) lp1 -> l_used; /* number of bytes read in */ X start += (long) lp1 -> l_used; X if (end <= start) X break; X /* stop reading after the requested number of characters */ X if (end < start + req_chars) X { X req_chars = end - start; X } X if ((lp1 = lalloc(req_chars)) == NULL) X { X bp -> b_flag |= BFVIEW; /* if no memory set to read only mode */ X X m = FALSE; /* flag memory allocation error */ X break; X } X if ((byte_cnt & 0x7fff) == 0) X { X sprintf (buf1, MSG_read_lx, R_POS_FMT(curwp)); X sprintf (buf, buf1, (ulong)byte_cnt); X writ_echo (buf); X /* check if we should quit */ X if (ttkeyready ()) X { X wind_on_dot_all(); X if (ttgetc () == CTL_G) /* was it an abort key? */ X { X s = FIOERR; X break; X } X } X } X } X } X ffclose (); /* Ignore errors. */ X if (s == FIOEOF && kbdmop == NULL) X { X /* Don't zap an error. */ X sprintf (buf1, MSG_read_lx, R_POS_FMT(curwp)); X sprintf (buf, buf1, byte_cnt); X writ_echo (buf); X } X if (m == FALSE && kbdmop == NULL) X { X /* Don't zap an error. */ X sprintf (buf, MSG_no_mem_rd); X err_echo (buf); X } X X#if BACKUP X curbp -> b_flag |= BFBAK; /* Need a backup. */ X#endif Xout: X for (wp = wheadp; wp != NULL; wp = wp -> w_wndp) X { X if (wp -> w_bufp == curbp) X { X wp -> w_linep = lforw (curbp -> b_linep); X wp -> w_dotp = lforw (curbp -> b_linep); X wp -> w_doto = 0; X wp -> w_unit_offset = 0; X wp -> w_markp = NULL; X wp -> w_marko = 0; X wp -> w_flag |= WFMODE | WFHARD; X } X } X /* so tell yank-buffer about it */ X if ((blistp -> b_nwnd != 0) && /* update buffer display */ X (blistp -> b_type == BTLIST)) X listbuffers (); X if (s == FIOERR || s == FIOFNF)/* False if error. */ X return (FALSE); X return (TRUE); X} X X X/* X* Take a file name, and from it X* fabricate a buffer name. This routine knows X* about the syntax of file names on the target system. X* BDC1 left scan delimiter. X* BDC2 optional second left scan delimiter. X* BDC3 optional right scan delimiter. X*/ Xvoid makename (bname, fname) Xchar bname[]; Xchar fname[]; X{ X register char *cp1; X register char *cp2; X X cp1 = &fname[0]; X while (*cp1 != 0) X ++cp1; X#ifdef BDC2 X while (cp1 != &fname[0] && cp1[-1] != BDC1 && cp1[-1] != BDC2) X --cp1; X#else X while (cp1 != &fname[0] && cp1[-1] != BDC1) X --cp1; X#endif X cp2 = &bname[0]; X#ifdef BDC3 X while (cp2 != &bname[NBUFN - 1] && *cp1 != 0 && *cp1 != BDC3) X *cp2++ = *cp1++; X#else X while (cp2 != &bname[NBUFN - 1] && *cp1 != 0) X *cp2++ = *cp1++; X#endif X *cp2 = 0; X} X X X/* X* Ask for a file name, and write the X* contents of the current buffer to that file. X* Update the remembered file name and clear the X* buffer changed flag. This handling of file names X* is different from the earlier versions, and X* is more compatable with Gosling EMACS than X* with ITS EMACS. X*/ Xchar filewrite () X{ X register WINDOW * wp; X register char s; X char fname[NFILEN]; X A32 start, end; X X if ((s = ereply (MSG_wr_file, fname, NFILEN, NULL)) != TRUE) X return (s); X if (!parse_f_name (fname, &start, &end)) X return (FALSE); X X adjustcase (fname); X if ((s = writeout (fname, start, end)) == TRUE) X { X strcpy (curbp -> b_fname, fname); X curbp -> b_flag &= ~BFCHG; X wp = wheadp; /* Update mode lines. */ X while (wp != NULL) X { X if (wp -> w_bufp == curbp) X wp -> w_flag |= WFMODE; X wp = wp -> w_wndp; X } X } X X#if BACKUP X curbp -> b_flag &= ~BFBAK; /* No backup. */ X#endif X return (s); X} X X X/* X* Save the contents of the current buffer back into X* its associated file. Do nothing if there have been no changes X* (is this a bug, or a feature). Error if there is no remembered X* file name. If this is the first write since the read or visit, X* then a backup copy of the file is made. X*/ Xchar filesave () X{ X register WINDOW * wp; X register char s; X X if ((curbp -> b_flag & BFCHG) == 0)/* Return, no changes. */ X return (TRUE); X if (curbp -> b_fname[0] == 0)/* Must have a name. */ X { X if (!(curbp -> b_type == BTSAVE))/* yanked buffer */ X { X writ_echo (MSG_no_fn); X } X return (FALSE); X } X#if BACKUP X if ((curbp -> b_flag & BFBAK) != 0) X { X s = fbackupfile (curbp -> b_fname); X if (s == ABORT) /* Hard error. */ X return (s); X if (s == FALSE /* Softer error. */ X && (s = eyesno (MSG_bk_err)) != TRUE) X return (s); X } X X#endif X if ((s = writeout (curbp -> b_fname, 0L, MAXPOS)) == TRUE) X { X curbp -> b_flag &= ~BFCHG;/* No change. */ X curbp -> b_flag &= ~BFBAD;/* if it was trashed, forget it now */ X wp = wheadp; /* Update mode lines. */ X while (wp != NULL) X { X if (wp -> w_bufp == curbp) X wp -> w_flag |= WFMODE; X wp = wp -> w_wndp; X } X } X X#if BACKUP X curbp -> b_flag &= ~BFBAK; /* No backup. */ X#endif X return (s); X} X X/* X* This function performs the details of file X* writing. Uses the file management routines in the X* "fileio.c" package. The number of lines written is X* displayed. Sadly, it looks inside a LINE; provide X* a macro for this. Most of the grief is error X* checking of some sort. X*/ Xbool writeout (fn, start, end) Xchar *fn; XA32 start, end; X{ X register int s, num_chars; X register LINE * lp; X register long nbytes; X char buf[80], buf1[80]; X A32 temp; X X if ((s = ffwopen (fn)) != FIOSUC)/* Open writes message. */ X return (FALSE); X temp = ffseek (start); X if (temp != start) X { X sprintf (buf1, ERR_f_size, R_POS_FMT(curwp)); X sprintf (buf, buf1, temp); X writ_echo (buf); X return (FALSE); X } X sprintf (buf, MSG_writing, fn);/* jam */ X writ_echo (buf); X X /* insure that the help screen reflects the latest bindings */ X if (curbp == blistp) X wallchart (0, 0, 0); X X lp = lforw (curbp -> b_linep);/* First line. */ X nbytes = 0; /* Number of bytes. */ X temp = end - start; /* number of bytes to write */ X while (lp != curbp -> b_linep) X { X if (curbp == blistp) X { X /* special list buffer */ X num_chars = HENDCOL; /* limit line length */ X lp -> l_text[num_chars - 1] = '\n'; X } X else X { X /* standard buffer */ X if (nbytes + (long)llength (lp) > temp) X num_chars = (int)(temp - nbytes); X else X num_chars = llength (lp); X } X if ((s = ffputline (&lp -> l_text[0], num_chars)) != FIOSUC) X break; X nbytes += num_chars; X if (temp <= nbytes) X break; X lp = lforw (lp); X X if ((nbytes & 0x7fff) == 0) X { X sprintf (buf1, MSG_wrot_n, R_POS_FMT(curwp)); X sprintf (buf, buf1, (ulong)nbytes); X writ_echo (buf); X /* check if we should quit */ X if (ttkeyready ()) X { X wind_on_dot_all(); X if (ttgetc () == CTL_G) /* was it an abort key? */ X { X s = FIOERR; X break; X } X } X } X } X if (s == FIOSUC) X { X /* No write error. */ X s = ffclose (); X if (s == FIOSUC && kbdmop == NULL) X { X sprintf (buf1, MSG_wrot_n, R_POS_FMT(curwp)); X sprintf (buf, buf1, (long) nbytes); X writ_echo (buf); X } X } X else /* Ignore close error */ X ffclose (); /* if a write error. */ X curbp -> b_file_size = nbytes; /* update file size */ X if ((blistp -> b_nwnd != 0) && /* update buffer display */ X (blistp -> b_type == BTLIST)) X listbuffers (); X if (s != FIOSUC) /* Some sort of error. */ X return (FALSE); X return (TRUE); X} X X/* X* The command allows the user X* to modify the file name associated with X* the current buffer. It is like the "f" command X* in UNIX "ed". The operation is simple; just zap X* the name in the BUFFER structure, and mark the windows X* as needing an update. You can type a blank line at the X* prompt if you wish. X*/ Xchar filename () X{ X register WINDOW * wp; X register char s; X char fname[NFILEN]; X A32 start, end; X X if ((s = ereply (MSG_fil_nam, fname, NFILEN, NULL)) == ABORT) X return (s); X if (!parse_f_name (fname, &start, &end)) X return (FALSE); X X adjustcase (fname); X curbp -> b_flag |= BFCHG; /* jam - on name change, set modify */ X BUF_START(curwp) = start; X l_fix_up (curbp -> b_linep -> l_fp); /* adjust file offsets from first line */ X strcpy (curbp -> b_fname, fname);/* Fix name. */ X wp = wheadp; /* Update mode lines. */ X while (wp != NULL) X { X if (wp -> w_bufp == curbp) X wp -> w_flag |= WFMODE; X wp = wp -> w_wndp; X } X#if BACKUP X curbp -> b_flag &= ~BFBAK; /* No backup. */ X#endif X return (TRUE); X} X X/* X* Get the length parameters that were entered with the file name. X* There can be the file name only. X* There can be a file name and a starting position. X* There can be a name a starting position and an ending position. X* There can be a name a starting position and a length. X* X* input: X* fn pointer to file name string to parse. X* X* output: X* fn pointer to null terminated file name. X* start pointer to the starting point in file (default = 0) X* end pointer to the end point in file (default = -1) X* return FALSE if file name or addresses are bad. X*/ Xbool parse_f_name (fn, start, end) Xchar *fn; XA32 *start, *end; X{ X char buf[NFILEN], buf1[80], fmt[10]; X int i_cnt; X A32 temp; X X /* build up format string according to the current screen format */ X sprintf (fmt, "%s %s %s", "%s", R_POS_FMT(curwp), R_POS_FMT(curwp)); X X *start = 0L; X *end = MAXPOS; X sscanf (fn, fmt, buf, start, end); X X if (*end != MAXPOS) X { X for (i_cnt = strlen (fn) - 1; i_cnt >= 0; i_cnt--) X { X if (fn[i_cnt] == '+') X { X *end += *start; X break; X } X } X } X /* start should preceed end */ X if (*start > *end) X { X sprintf (buf1, ERR_parse_fn, R_POS_FMT(curwp), R_POS_FMT(curwp)); X sprintf (buf, buf1, *start, *end); X writ_echo (buf); X return (FALSE); X } X X /* error if addresses are negative */ X if ((*start < 0) || (*end < 0)) X { X writ_echo (ERR_addr_neg); X return (FALSE); X } X X /* deposit null terminated file name */ X strcpy (fn, buf); X return (TRUE); X} END_OF_FILE if test 18927 -ne `wc -c <'file.c'`; then echo shar: \"'file.c'\" unpacked with wrong size! fi # end of 'file.c' fi if test -f 'symbol.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'symbol.c'\" else echo shar: Extracting \"'symbol.c'\" \(18831 characters\) sed "s/^X//" >'symbol.c' <<'END_OF_FILE' X/* X* Symbol table stuff. X* Symbol tables, and keymap setup. X* The terminal specific parts of building the X* keymap has been moved to a better place. X*/ X#define LINT_ARGS 1 /* enable lint type checking */ X#include "def.h" X Xvoid keyadd (); Xvoid keydup (); X X Xextern char MSG_byte_shift[]; Xextern char MSG_back_char[]; Xextern char MSG_quit[]; Xextern char MSG_forw_del_char[]; Xextern char MSG_toggle_swap[]; Xextern char MSG_forw_char[]; Xextern char MSG_abort[]; Xextern char MSG_ins_self[]; Xextern char MSG_back_del_char[]; Xextern char MSG_refresh[]; Xextern char MSG_forw_line[]; Xextern char MSG_back_line[]; Xextern char MSG_quote[]; Xextern char MSG_recall[]; Xextern char MSG_twiddle[]; Xextern char MSG_forw_page[]; Xextern char MSG_kill_region[]; Xextern char MSG_yank[]; Xextern char MSG_down_window[]; Xextern char MSG_ins_toggle[]; Xextern char MSG_display_buffers[]; Xextern char MSG_quit[]; Xextern char MSG_exit_flush_all[]; Xextern char MSG_set_file_name[]; Xextern char MSG_file_insert[]; Xextern char MSG_buf_size_lock[]; Xextern char MSG_flush_all[]; Xextern char MSG_down_window[]; Xextern char MSG_up_window[]; Xextern char MSG_file_read[]; Xextern char MSG_file_save[]; Xextern char MSG_file_visit[]; Xextern char MSG_file_write[]; Xextern char MSG_swap_dot_and_mark[]; Xextern char MSG_shrink_window[]; Xextern char MSG_display_position[]; Xextern char MSG_start_macro[]; Xextern char MSG_end_macro[]; Xextern char MSG_help[]; Xextern char MSG_only_window[]; Xextern char MSG_del_window[]; Xextern char MSG_split_window[]; Xextern char MSG_use_buffer[]; Xextern char MSG_spawn_cli[]; Xextern char MSG_execute_macro[]; Xextern char MSG_goto_line[]; Xextern char MSG_ins_unit[]; Xextern char MSG_kill_buffer[]; Xextern char MSG_load_bindings[]; Xextern char MSG_forw_window[]; Xextern char MSG_back_window[]; Xextern char MSG_view_file[]; Xextern char MSG_enlarge_window[]; Xextern char MSG_ascii_mode[]; Xextern char MSG_binary_mode[]; Xextern char MSG_buffer_name[]; Xextern char MSG_decimal_mode[]; Xextern char MSG_ebcdic_mode[]; Xextern char MSG_hex_mode[]; Xextern char MSG_back_del_unit[]; Xextern char MSG_octal_mode[]; Xextern char MSG_display_version[]; Xextern char MSG_unit_size1[]; Xextern char MSG_unit_size2[]; Xextern char MSG_unit_size4[]; Xextern char MSG_reposition_window[]; Xextern char MSG_set_mark[]; Xextern char MSG_goto_eob[]; Xextern char MSG_goto_bob[]; Xextern char MSG_next_buff[]; Xextern char MSG_prev_buff[]; Xextern char MSG_query_replace[]; Xextern char MSG_display_bindings[]; Xextern char MSG_auto_save[]; Xextern char MSG_back_unit[]; Xextern char MSG_compare[]; Xextern char MSG_forw_del_unit[]; Xextern char MSG_forw_unit[]; Xextern char MSG_link_windows[]; Xextern char MSG_print[]; Xextern char MSG_back_search[]; Xextern char MSG_forw_search[]; Xextern char MSG_back_page[]; Xextern char MSG_copy_region[]; Xextern char MSG_extended_command[]; Xextern char MSG_up_window[]; Xextern char MSG_search_again[]; Xextern char MSG_bind_to_key[]; Xextern char MSG_file_visit_split[]; Xextern char MSG_yank_buffer[]; Xextern char MSG_save_region[]; Xextern char MSG_use_buffer_split[]; Xextern char MSG_no_f_tb[]; Xextern char MSG_n_split[]; Xextern char MSG_n_combine[]; Xextern char MSG_show_save_buf[]; X X/* X* Defined by "main.c". X*/ Xextern char ctrlg (); /* Abort out of things */ Xextern char quit (); /* Quit */ Xextern char ctlxlp (); /* Begin macro */ Xextern char ctlxrp (); /* End macro */ Xextern char ctlxe (); /* Execute macro */ Xextern char showversion (); /* Show version numbers, etc. */ Xextern char flushnquit (); /* Flush buffers & exit (fitz) */ Xextern char flush_all (); /* Flush buffers (jam) */ Xextern char autosave (); /* autosave function (jam) */ X X/* X* Defined by "search.c". X*/ Xextern char forwsearch (); /* Search forward */ Xextern char backsearch (); /* Search backwards */ Xextern char searchagain (); /* Repeat last search command */ Xextern char queryrepl (); /* Query replace */ Xextern char compare (); /* Compare two windows */ Xextern char recall (); /* Recall last search string */ X X/* X* Defined by "basic.c". X*/ Xextern char backchar (); /* Move backward by characters */ Xextern char forwchar (); /* Move forward by characters */ Xextern char gotobob (); /* Move to start of buffer */ Xextern char gotoeob (); /* Move to end of buffer */ Xextern char forwline (); /* Move forward by lines */ Xextern char backline (); /* Move backward by lines */ Xextern char forwpage (); /* Move forward by pages */ Xextern char backpage (); /* Move backward by pages */ Xextern char setmark (); /* Set mark */ Xextern char swapmark (); /* Swap "." and mark */ Xextern char gotoline (); /* Go to a specified line. */ X X/* X* Defined by "buffer.c". X*/ Xextern char listbuffers (); /* Display list of buffers */ Xextern char showsavebuf (); /* Show the save buffer contents */ Xextern char usebuffer (); /* Switch a window to a buffer */ Xextern char use_buffer (); /* ditto, plus window split */ Xextern char killbuffer (); /* Make a buffer go away. */ Xextern char next_buf (); /* goto next buffer */ Xextern char prev_buf (); /* goto prev buffer */ Xextern char yank_buffer (); /* yank buffer by name */ Xextern char buffername (); /* change buffer name */ Xextern char bufsizlock (); /* lock buffer size */ X X/* X* Defined by "file." X*/ Xextern char fileread (); /* Get a file, read only */ Xextern char filevisit (); /* Get a file, read write */ Xextern char file_visit (); /* ditto , plus window split */ Xextern char filewrite (); /* Write a file */ Xextern char filesave (); /* Save current file */ Xextern char filename (); /* Adjust file name */ Xextern char fileinsert (); /* insert file to cursor (jam ) */ Xextern char viewfile (); /* readonly file visit (jam) */ X X/* X* Defined by "random.c". X*/ X Xextern char dispshift (); /* Increment display shift */ Xextern char selfinsert (); /* Insert character */ Xextern char insert_toggle (); /* toggle insert mode (jam) */ Xextern char insertunit (); /* insert unit (pvr) */ Xextern char showcpos (); /* Show the cursor position */ Xextern char twiddle (); /* Twiddle units */ Xextern char forwdel (); /* Forward delete */ Xextern char backdel (); /* Backward delete */ Xextern char quote (); /* Insert literal */ Xextern char asciimode (); /* display ASCII data */ Xextern char ebcdicmode (); /* display EBCDIC data */ Xextern char decimalmode (); /* display DECIMAL data */ Xextern char hexmode (); /* display HEX data */ Xextern char octalmode (); /* display OCTAL data */ Xextern char binarymode (); /* display BINARY data */ Xextern char dispsize1 (); /* display in BYTE format */ Xextern char dispsize2 (); /* display in WORD format */ Xextern char dispsize4 (); /* display in DWORD format*/ Xextern char dispswapbyte (); /* Display swaped bytes pvr */ Xextern char yank (); /* Yank back from killbuffer. */ Xextern char linkwind (); /* Link all windows on one buffer. */ Xextern char n_way_split (); /* Split buffer into n buffers. */ Xextern char n_way_combine (); /* Combine n buffers into one. */ X X/* X* Defined by "region.c". X*/ Xextern char killregion (); /* Kill region. */ Xextern char copyregion (); /* Copy region to kill buffer. */ Xextern char save_region (); /* Save region in named buffer. */ X X/* X* Defined by "spawn.c". X*/ Xextern char spawncli (); /* Run CLI in a subjob. */ Xextern char clock (); /* display time in modeline */ X X/* X* Defined by "window.c". X*/ Xextern char reposition (); /* Reposition window */ Xextern char refresh (); /* Refresh the screen */ Xextern char nextwind (); /* Move to the next window */ Xextern char prevwind (); /* Move to the previous window */ Xextern char mvdnwind (); /* Move window down */ Xextern char mvupwind (); /* Move window up */ Xextern char onlywind (); /* Make current window only one */ Xextern char delwind (); /* Delete current window */ Xextern char splitwind (); /* Split current window */ Xextern char enlargewind (); /* Enlarge display window. */ Xextern char shrinkwind (); /* Shrink window. */ X X/* X* Defined by "word.c". X*/ Xextern char backunit (); /* Backup by units */ Xextern char forwunit (); /* Advance by units */ Xextern char delfunit (); /* Delete forward unit. */ Xextern char delbunit (); /* Delete backward unit. */ X X/* X* Defined by "extend.c". X*/ Xextern char extend (); /* Extended commands. */ Xextern char help (); /* Help key. */ Xextern char bindtokey (); /* Modify key bindings. */ Xextern char wallchart (); /* Make wall chart. */ Xextern void check_extend (); /* load extended key file */ Xextern char load_extend (); /* load extended file by name */ X X/* X* Defined by "display.c X*/ Xextern char print (); /* print window from mark to dot */ X Xtypedef struct X{ X X short k_key; /* Key to bind. */ X char (*k_funcp) (); /* Function. */ X char *k_name; /* Function name string. */ X char k_modify; /* modify bit */ X} KEY; X X/* X* Default key binding table. This contains X* the function names, the symbol table name, and (possibly) X* a key binding for the builtin functions. There are no X* bindings for C-U or C-X. These are done with special X* code, but should be done normally. X*/ XKEY key[] = X{ X KCTRL | 'A', dispshift, MSG_byte_shift, 0, X KCTRL | 'B', backchar, MSG_back_char, SSRCH | SRPLC, X KCTRL | 'C', quit, MSG_quit, 0,/* pvr */ X KCTRL | 'D', forwdel, MSG_forw_del_char, SMOD | SSIZE | SSRCH | SRPLC, X KCTRL | 'E', dispswapbyte, MSG_toggle_swap, SSRCH | SRPLC,/* pvr */ X KCTRL | 'F', forwchar, MSG_forw_char, SSRCH | SRPLC, X KCTRL | 'G', ctrlg, MSG_abort, SSRCH | SRPLC, X KCTRL | 'I', selfinsert, MSG_ins_self, SMOD | SSRCH | SRPLC, X KCTRL | 'H', backdel, MSG_back_del_char, SMOD | SSIZE | SSRCH | SRPLC, X KCTRL | 'L', refresh, MSG_refresh, SSRCH | SRPLC, X KCTRL | 'N', forwline, MSG_forw_line, SSRCH | SRPLC, X KCTRL | 'P', backline, MSG_back_line, SSRCH | SRPLC, X KCTRL | 'Q', quote, MSG_quote, 0, X KCTRL | 'R', recall, MSG_recall, SSRCH | SRPLC, X KCTRL | 'T', twiddle, MSG_twiddle, SMOD | SSRCH | SRPLC, X KCTRL | 'V', forwpage, MSG_forw_page, SRPLC, X KCTRL | 'W', killregion, MSG_kill_region, SMOD | SSIZE, X KCTRL | 'Y', yank, MSG_yank, SMOD | SSIZE, X KCTRL | 'Z', mvdnwind, MSG_down_window, 0,/* fitz */ X KCTLX | KCTRL | 'A', insert_toggle, MSG_ins_toggle, SSRCH | SRPLC, X KCTLX | KCTRL | 'B', listbuffers, MSG_display_buffers, 0, X KCTLX | KCTRL | 'C', quit, MSG_quit, 0, X KCTLX | KCTRL | 'E', flushnquit, MSG_exit_flush_all, 0,/* fitz */ X KCTLX | KCTRL | 'F', filename, MSG_set_file_name, SMOD,/* jam */ X KCTLX | KCTRL | 'I', fileinsert, MSG_file_insert, SMOD | SSIZE, X KCTLX | KCTRL | 'L', bufsizlock, MSG_buf_size_lock, 0, X KCTLX | KCTRL | 'M', flush_all, MSG_flush_all, 0, X KCTLX | KCTRL | 'N', mvdnwind, MSG_down_window, 0, X KCTLX | KCTRL | 'P', mvupwind, MSG_up_window, 0, X KCTLX | KCTRL | 'R', fileread, MSG_file_read, 0, X KCTLX | KCTRL | 'S', filesave, MSG_file_save, 0, X KCTLX | KCTRL | 'V', filevisit, MSG_file_visit, 0, X KCTLX | KCTRL | 'W', filewrite, MSG_file_write, 0, X KCTLX | KCTRL | 'X', swapmark, MSG_swap_dot_and_mark, 0, X KCTLX | KCTRL | 'Z', shrinkwind, MSG_shrink_window, 0, X KCTLX | '=', showcpos, MSG_display_position, 0, X KCTLX | '(', ctlxlp, MSG_start_macro, 0, X KCTLX | ')', ctlxrp, MSG_end_macro, 0, X KCTLX | '?', help, MSG_help, 0, X KCTLX | '0', delwind, MSG_del_window, 0, X KCTLX | '1', onlywind, MSG_only_window, 0, X KCTLX | '2', splitwind, MSG_split_window, 0, X KCTLX | 'B', usebuffer, MSG_use_buffer, 0, X KCTLX | 'C', spawncli, MSG_spawn_cli, 0,/* fitz */ X KCTLX | 'E', ctlxe, MSG_execute_macro, 0, X KCTLX | 'G', gotoline, MSG_goto_line, 0, X KCTLX | 'I', insertunit, MSG_ins_unit, SMOD | SSIZE | SSRCH | SRPLC, X KCTLX | 'K', killbuffer, MSG_kill_buffer, 0, X KCTLX | 'L', load_extend, MSG_load_bindings, 0, X KCTLX | 'N', nextwind, MSG_forw_window, 0, X KCTLX | 'P', prevwind, MSG_back_window, 0, X KCTLX | 'V', viewfile, MSG_view_file, 0,/* jam */ X KCTLX | 'Z', enlargewind, MSG_enlarge_window, 0, X KMETA | KCTRL | 'A', asciimode, MSG_ascii_mode, SSRCH | SRPLC, /* pvr */ X KMETA | KCTRL | 'B', binarymode, MSG_binary_mode, SSRCH | SRPLC, /* pvr */ X KMETA | KCTRL | 'F', n_way_combine, MSG_n_combine, SSIZE | SMOD, /* pvr */ X KMETA | KCTRL | 'N', buffername, MSG_buffer_name, 0, X KMETA | KCTRL | 'D', decimalmode, MSG_decimal_mode, SSRCH | SRPLC, /* pvr */ X KMETA | KCTRL | 'E', ebcdicmode, MSG_ebcdic_mode, SSRCH | SRPLC, /* pvr */ X KMETA | KCTRL | 'H', hexmode, MSG_hex_mode, SSRCH | SRPLC, /* pvr */ X KMETA | KCTRL | 'K', delbunit, MSG_back_del_unit, SMOD | SSIZE | SSRCH | SRPLC, X KMETA | KCTRL | 'O', octalmode, MSG_octal_mode, SSRCH | SRPLC, /* pvr */ X KMETA | KCTRL | 'S', n_way_split, MSG_n_split, 0, /* pvr */ X KMETA | KCTRL | 'V', showversion, MSG_display_version, 0, X KMETA | KCTRL | 'W', showsavebuf, MSG_show_save_buf, 0, X KMETA | '1', dispsize1, MSG_unit_size1, SSRCH | SRPLC,/* pvr */ X KMETA | '2', dispsize2, MSG_unit_size2, SSRCH | SRPLC,/* pvr */ X KMETA | '4', dispsize4, MSG_unit_size4, SSRCH | SRPLC,/* pvr */ X KMETA | '!', reposition, MSG_reposition_window, 0, X KMETA | '.', setmark, MSG_set_mark, 0, X KMETA | '>', gotoeob, MSG_goto_eob, SSRCH | SRPLC, X KMETA | '<', gotobob, MSG_goto_bob, SSRCH | SRPLC, X KMETA | '+', next_buf, MSG_next_buff, 0, X KMETA | '-', prev_buf, MSG_prev_buff, 0, X KMETA | '%', queryrepl, MSG_query_replace, SMOD, X KMETA | '?', wallchart, MSG_display_bindings, 0, X KMETA | 'A', autosave, MSG_auto_save, 0, X KMETA | 'B', backunit, MSG_back_unit, SSRCH | SRPLC, X KMETA | 'C', compare, MSG_compare, 0, X KMETA | 'D', delfunit, MSG_forw_del_unit, SMOD | SSIZE | SSRCH | SRPLC, X KMETA | 'F', forwunit, MSG_forw_unit, SSRCH | SRPLC, X KMETA | 'G', use_buffer, MSG_use_buffer_split, 0, X KMETA | 'K', bindtokey, MSG_bind_to_key, 0, X KMETA | 'L', linkwind, MSG_link_windows, 0, X KMETA | 'O', save_region, MSG_save_region, 0, X KMETA | 'P', print, MSG_print, 0, X KMETA | 'R', backsearch, MSG_back_search, 0, X KMETA | 'S', forwsearch, MSG_forw_search, 0, X KMETA | 'T', searchagain, MSG_search_again, 0, X KMETA | 'U', file_visit, MSG_file_visit_split, 0, X KMETA | 'V', backpage, MSG_back_page, SRPLC, X KMETA | 'W', copyregion, MSG_copy_region, 0, X KMETA | 'X', extend, MSG_extended_command, 0, X KMETA | 'Y', yank_buffer, MSG_yank_buffer, SMOD | SSIZE, X KMETA | 'Z', mvupwind, MSG_up_window, 0 X}; X X#define NKEY (sizeof(key) / sizeof(key[0])) X X/* X* Symbol table lookup. X* Return a pointer to the SYMBOL node, or NULL if X* the symbol is not found. X*/ XSYMBOL * symlookup (cp) Xregister char *cp; X{ X register SYMBOL * sp; X X sp = symbol[symhash (cp)]; X while (sp != NULL) X { X if (strcmp (cp, sp -> s_name) == 0) X return (sp); X sp = sp -> s_symp; X } X return (NULL); X} X X X/* X* Take a string, and compute the symbol table X* bucket number. This is done by adding all of the characters X* together, and taking the sum mod NSHASH. The string probably X* should not contain any GR characters; if it does the "*cp" X* may get a nagative number on some machines, and the "%" X* will return a negative number! X*/ Xint symhash (cp) Xregister char *cp; X{ X register int c; X register int n; X X n = 0; X while ((c = *cp++) != 0) X n += c; X return (n % NSHASH); X} X X X/* X* Build initial keymap. The funny keys X* (commands, odd control characters) are mapped using X* a big table and calls to "keyadd". The printing characters X* are done with some do-it-yourself handwaving. The terminal X* specific keymap initialization code is called at the X* very end to finish up. All errors are fatal. X*/ Xvoid keymapinit () X{ X register SYMBOL * sp; X register KEY * kp; X register int i; X register int hash; X X for (i = 0; i < NKEYS; ++i) X binding[i] = NULL; X for (kp = &key[0]; kp < &key[NKEY]; ++kp) X keyadd (kp -> k_key, kp -> k_funcp, kp -> k_name, kp -> k_modify); X keydup (KCTLX | KCTRL | 'G', MSG_abort); X keydup (KMETA | KCTRL | 'G', MSG_abort); X keydup (0x7F, MSG_back_del_char); X keydup (KMETA | 'Q', MSG_quote); X keydup (KMETA | 0x7F, MSG_back_del_unit); X /* X * Should be bound by "tab" already. X */ X if ((sp = symlookup (MSG_ins_self)) == NULL) X abort (); X for (i = 0x20; i < 0x7F; ++i) X { X if (binding[i] != NULL) X abort (); X binding[i] = sp; X ++sp -> s_nkey; X } X ttykeymapinit (); X} X X X/* X* Create a new builtin function "name" X* with function "funcp". If the "new" is a real X* key, bind it as a side effect. All errors X* are fatal. X*/ Xvoid keyadd (new, funcp, name, modify) Xbool (*funcp) (); Xchar *name; X{ X register SYMBOL * sp; X register int hash; X X if ((sp = (SYMBOL *) malloc (sizeof (SYMBOL))) == NULL) X abort (); X hash = symhash (name); X sp -> s_symp = symbol[hash]; X symbol[hash] = sp; X sp -> s_nkey = 0; X sp -> s_name = name; X sp -> s_funcp = funcp; X sp -> s_modify = modify; X if (new >= 0) X { X /* Bind this key. */ X if (binding[new] != NULL) X abort (); X binding[new] = sp; X ++sp -> s_nkey; X } X} X X/* X* Bind key "new" to the existing X* routine "name". If the name cannot be found, X* or the key is already bound, abort. X*/ Xvoid keydup (new, name) Xregister int new; Xchar *name; X{ X register SYMBOL * sp; X X if (binding[new] != NULL || (sp = symlookup (name)) == NULL) X { X printf (MSG_no_f_tb, name); X abort (); X } X binding[new] = sp; X ++sp -> s_nkey; X} END_OF_FILE if test 18831 -ne `wc -c <'symbol.c'`; then echo shar: \"'symbol.c'\" unpacked with wrong size! fi # end of 'symbol.c' fi if test -f 'text.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'text.c'\" else echo shar: Extracting \"'text.c'\" \(15253 characters\) sed "s/^X//" >'text.c' <<'END_OF_FILE' X/* X* This file contains all text srtings X*/ X#include "def.h" X X/* in basic.c */ Xchar MSG_mark_set[] = "Mark set"; Xchar MSG_no_mark[] = "No mark in this window"; Xchar MSG_go_b_n[] = "Goto byte number: "; Xchar MSG_bad_num[] = "ERROR: Bad number"; Xchar MSG_lX[] = "%lX"; Xchar MSG_lO[] = "%lO"; Xchar MSG_lD[] = "%lD"; X X/* in buffer.c */ Xchar MSG_use_b[] = "Enter name of buffer to goto: "; Xchar MSG_kill_b[] = "Enter name of buffer to delete: "; Xchar MSG_no_del_m[] = "ERROR: Can't delete 'main'"; Xchar MSG_buf_disp[] = "ERROR: Buffer is displayed - continue"; Xchar MSG_main[] = "main"; Xchar MSG_l_buf_h[] = "S T Size Buffer File"; Xchar MSG_l_buf_h1[] = "- - ------ ------ ----"; Xchar MSG_no_chg[] = "Discard changes"; Xchar MSG_yank_b[] = "Yank from buffer: "; Xchar MSG_no_buf[] = "ERROR: no such buffer"; Xchar MSG_no_s_yank[] = "ERROR: can't yank to self!"; Xchar MSG_buf_nam[] = "Buffer name: "; Xchar MSG_bad_l[] = "ERROR: Bad line!"; Xchar MSG_pick[] = "%s: G(oto) or K(ill) S(ave) "; Xchar MSG_siz_chg[] = "Current buffer size may be changed"; Xchar MSG_no_siz_chg[]= "Current buffer size is locked"; Xchar MSG_up_arrow[] = "^"; Xchar MSG_null[] = ""; Xchar MSG_cnt_al_b[] = "ERROR: Cannot allocate BUFFER block"; Xchar MSG_ins_cnt[] = "Insert %s bytes, Hit Ctl-G to quit."; X X/* in display.c */ Xchar MSG_prn_to[] = "Print to: "; Xchar MSG_disp_r_n[] = "\r\n"; Xchar MSG_11lX[] = "%11lX:"; Xchar MSG_11lo[] = "%11lo:"; Xchar MSG_11ld[] = "%11ld:"; Xchar MSG_03o[] = "%03o"; Xchar MSG_06o[] = "%06o"; Xchar MSG_011lo[] = "%011lo"; Xchar MSG_03u[] = "%03u"; Xchar MSG_05u[] = "%05u"; Xchar MSG_010lu[] = "%010lu"; Xchar MSG_02X[] = "%02X"; Xchar MSG_04X[] = "%04X"; Xchar MSG_08lX[] = "%08lX"; Xchar MSG_prog_name[] = "BEAV"; Xchar MSG_disp_b_lst[]= " Buffer List "; Xchar MSG_file[] = "File: "; Xchar MSG_RO[] = " [RO]"; Xchar MSG_WL[] = " [WL]"; Xchar MSG_RW[] = " [RW]"; Xchar MSG_AU[] = "[AU]"; Xchar MSG_NOT_AU[] = " "; Xchar MSG_curs_asc[] = "CURSOR=%08lX, ASCII"; Xchar MSG_curs_ebc[] = "CURSOR=%08lX, EBCDIC"; Xchar MSG_curs_hex[] = "CURSOR=%08lX,%2X HEX"; Xchar MSG_curs_bin[] = "CURSOR=%08lX,%2X BIN"; Xchar MSG_curs_dec[] = "CURSOR=%08lu,%2u DEC"; Xchar MSG_curs_oct[] = "CURSOR=%08lo,%2o OCTAL"; Xchar MSG_siz_8[] = " 8 "; Xchar MSG_siz_16[] = " 16"; Xchar MSG_siz_32[] = " 32"; Xchar MSG_siz_null[] = " "; Xchar MSG_int_shift[] = " S%X"; Xchar MSG_mot_shift[] = " %X"; Xchar MSG_print1[] = "Writing: %s; Hit Ctl-G to quit"; Xchar MSG_print2[] = "Wrote %s lines"; X X/* in ebcdic.c */ X#if RUNCHK Xchar ERR_ebcdic[] = X"ERROR: Character %s not found in EBCDIC table\n"; X#endif X X/* in echo.c */ Xchar MSG_y_n[] = "%s [y/n]? "; Xchar MSG_hex_dig[] = "0123456789ABCDEF"; Xchar MSG_hit_key[] = " Hit Ctl-G to continue"; X X/* in extend.c */ Xchar MSG_not_now[] = "Not now"; Xchar MSG_func[] = "Function: "; Xchar MSG_unk_func[] = "ERROR: Unknown function for binding"; Xchar MSG_cmd_t_ex[] = "Command to execute: "; Xchar MSG_unk_ext[] = "ERROR: Unknown extended command"; Xchar MSG_d_b[] = X"Display key binding for which key? (hit key now!)"; Xchar MSG_unbd[] = "%s is unbound"; Xchar MSG_bnd_to[] = "%s is bound to %s"; Xchar MSG_ins_self[] = "ins-self"; Xchar MSG_bnd_file[] = "Binding file: "; Xchar MSG_bld_wall[] = "Building help buffer"; Xchar MSG_wall_head[] = "# Function name Key binding Key code"; Xchar MSG_beavrc[] = "beavrc"; X X/* in file.c */ Xchar MSG_rd_file[] = "Read file: "; Xchar MSG_trash[] = "#tempbuf#"; Xchar MSG_ins_file[] = "Insert file: "; Xchar MSG_not_fnd[] = "Not found"; Xchar MSG_visit[] = "Visit file: "; Xchar MSG_view[] = "View file (read only): "; Xchar MSG_buf_ex[] = "ERROR: Buffer exists"; Xchar MSG_old_buf[] = "ERROR: Old buffer"; Xchar MSG_cnt_cr[] = "ERROR: Cannot create buffer"; Xchar MSG_reading[] = "reading <%s>"; Xchar MSG_read_lx[] = "Read %s bytes, Hit Ctl-G to quit."; Xchar MSG_no_mem_rd[] = X"ERROR: Insufficient memory, buffer set to read only"; Xchar MSG_wr_file[] = "Write file: "; Xchar MSG_no_fn[] = "ERROR: No file name"; Xchar MSG_bk_err[] = "ERROR: Backup error, save anyway"; Xchar MSG_writing[] = "writing <%s>"; Xchar MSG_wrot_n[] = "Wrote %s bytes, Hit Ctl-G to quit."; Xchar MSG_fil_nam[] = "File name: "; X#if RUNCHK Xchar ERR_parse_fn[] = X"ERROR: Starting address (%s) must preceede ending address (%s)"; Xchar ERR_addr_neg[] = "ERROR: Addresses cannot be negative"; Xchar ERR_f_size[] = X"ERROR: Cannot access past end of file. (file size = %s)"; X#endif X X/* in fileio.c */ Xchar MSG_cnt_wr[] = "ERROR: Cannot open file for writing"; Xchar MSG_wr_io_er[] = "ERROR: Write I/O error"; Xchar MSG_rd_er[] = "ERROR: File read error"; Xchar MSG_bak[] = ".bak"; Xchar MSG_backup[] = "Back-up of %s to %s"; Xchar MSG_back_er[] = "ERROR: Back-up of %s to %s FAILED !!"; Xchar MSG_back_of[] = "%s - Back-up of <%s> to <%s>\n"; X X/* in format.c */ Xchar hex_str[] = "%X"; Xchar hex_l_str[] = "%lX"; Xchar octal_str[] = "%o"; Xchar octal_l_str[] = "%lo"; Xchar decimal_str[] = "%u"; Xchar decimal_l_str[] = "%lu"; Xchar char_str[] = "%c"; X X/* in kbd.c */ Xchar MSG_tab[] = "Tab"; Xchar MSG_ret[] = "Return"; Xchar MSG_bksp[] = "Backspace"; Xchar MSG_space[] = "Space"; Xchar MSG_rubout[] = "Rubout"; X X/* in line.c */ Xchar MSG_cnt_alloc[] = "ERROR: Cannot allocate %s bytes for a line"; Xchar MSG_save_buf[] = "save-buffer"; X X/* in main.c */ Xchar MSG_ok[] = "ok"; Xchar MSG_no_mod[] = "ERROR: Buffer can not be modified"; Xchar MSG_no_s_chg[] = "ERROR: Buffer size can not be changed"; Xchar MSG_auto_fl[] = "Doing auto buffer flush"; Xchar MSG_quit[] = "quit-no-save"; Xchar MSG_st_mac[] = "Start macro"; Xchar MSG_end_mac[] = "End macro"; Xchar MSG_num_mod[] = "Number of modifcations per update: "; Xchar version[] = "BEAV, Ver 1.30, 08/01/91"; X X/* in random.c */ Xchar MSG_sh_pos[] = X"Cursor: %s, Mark: %s, Buffer Size: %s, File Size: %s"; Xchar MSG_sh_pos1[] = X"Cursor: %s, No Mark, Buffer Size: %s, File Size: %s"; Xchar MSG_f_str[] = ", File: <%s>"; Xchar MSG_3u[] = "%3u"; Xchar MSG_5u[] = "%5u"; Xchar MSG_lu[] = "%lu"; Xchar MSG_lnk[] = "All windows on buffer <%s> are %s"; Xchar MSG_unlink[] = "unlinked"; Xchar MSG_link[] = "linked"; Xchar MSG_bad_key[] = "ERROR: bad key = "; Xchar MSG_esc[] = "Esc,"; Xchar MSG_ctl_x[] = "Ctl-X,"; Xchar MSG_ctl[] = "Ctl-"; Xchar MSG_fn[] = "FN,"; Xchar MSG_key_code[] = "%s, %s"; Xchar MSG_w_not_empty[] = "Destination buffer must be empty and modifiable"; Xchar MSG_procing[] = "Processing at %s, Hit Ctl-G to quit."; X X/* in region.c */ Xchar MSG_sv_in_b[] = "Save in buffer: "; Xchar MSG_sav_slf[] = "ERROR: Can't save to self!"; X X/* in search.c */ Xchar MSG_sch_str[] = " Search String"; Xchar MSG_bsrc_str[] = "Back Search String"; Xchar MSG_rpl_str[] = "Replace String"; Xchar MSG_pat_fnd[] = "Pattern found at %s"; Xchar MSG_no_srch[] = "ERROR: No last search"; Xchar MSG_fnd_at[] = X"Found at %s, (R)eplace, (S)kip, (A)ll, (O)ne, (Q)uit."; Xchar MSG_no_rpl[] = "No replacements done"; Xchar MSG_1_rpl[] = "1 replacement done"; Xchar MSG_n_rpl[] = "%s replacements done"; Xchar MSG_srcing[] = "Searching at %s, Hit Ctl-G to quit."; Xchar MSG_curs[] = "%s; Curs = %s, %s Len = %s => "; Xchar MSG_cmp_end[] = "Compare reached the end of a buffer"; Xchar MSG_cmp_term[] = "Compare terminated by user"; Xchar MSG_cmp_dif[] = X"Difference is detected at the two cursor positions"; Xchar MSG_only_2[] = X"ERROR: There must be exactly two windows displayed to use Compare"; Xchar MSG_cmping[] = "Comparing at %s, Hit Ctl-G to quit."; X X/* in spawn.c */ Xchar MSG_shell[] = "COMSPEC"; Xchar MSG_def_shell[] = "/command.com"; Xchar MSG_pmpt[] = "PROMPT=[BEAV]"; Xchar MSG_pt[] = "PROMPT"; Xchar MSG_pme[] = "PROMPT="; X X/* in symbol.c */ Xchar MSG_byte_shift[] = "display-byte-shift"; Xchar MSG_back_char[] = "move-back-char"; Xchar MSG_forw_del_char[] = "delete-forw-char"; Xchar MSG_toggle_swap[] = "display-swap-order"; Xchar MSG_forw_char[] = "move-forw-char"; Xchar MSG_abort[] = "abort-cmd"; Xchar MSG_back_del_char[] = "delete-back-char"; Xchar MSG_refresh[] = "refresh-screen"; Xchar MSG_forw_line[] = "move-forw-line"; Xchar MSG_back_line[] = "move-back-line"; Xchar MSG_quote[] = "insert-literally"; Xchar MSG_recall[] = "recall-srch-string"; Xchar MSG_twiddle[] = "unit-twiddle"; Xchar MSG_forw_page[] = "move-forw-page"; Xchar MSG_kill_region[] = "delete-mark-to-cursor"; Xchar MSG_yank[] = "yank"; Xchar MSG_down_window[] = "move-window-down"; Xchar MSG_ins_toggle[] = "insert-toggle"; Xchar MSG_display_buffers[] = "buffers-display"; Xchar MSG_exit_flush_all[] = "quit-save-all"; Xchar MSG_set_file_name[] = "buffer-set-file-name"; Xchar MSG_file_insert[] = "insert-file"; Xchar MSG_buf_size_lock[] = "buffer-size-lock"; Xchar MSG_flush_all[] = "save-all-buffers"; Xchar MSG_up_window[] = "move-window-up"; Xchar MSG_file_read[] = "file-read"; Xchar MSG_file_save[] = "file-save"; Xchar MSG_file_visit[] = "file-visit"; Xchar MSG_file_write[] = "file-write"; Xchar MSG_swap_dot_and_mark[] = "swap-cursor-and-mark"; Xchar MSG_shrink_window[] = "window-shrink"; Xchar MSG_display_position[] = "show-position"; Xchar MSG_start_macro[] = "macro-start"; Xchar MSG_end_macro[] = "macro-end"; Xchar MSG_help[] = "binding-for-key"; Xchar MSG_only_window[] = "window-single"; Xchar MSG_del_window[] = "window-delete"; Xchar MSG_split_window[] = "window-split"; Xchar MSG_use_buffer[] = "change-buffer"; Xchar MSG_spawn_cli[] = "spawn-shell"; Xchar MSG_execute_macro[] = "macro-execute"; Xchar MSG_goto_line[] = "move-to-byte"; Xchar MSG_ins_unit[] = "insert-unit"; Xchar MSG_kill_buffer[] = "kill-buffer"; Xchar MSG_load_bindings[] = "bindings-load"; Xchar MSG_forw_window[] = "change-window-forw"; Xchar MSG_back_window[] = "change-window-back"; Xchar MSG_view_file[] = "file-view"; Xchar MSG_enlarge_window[] = "window-enlarge"; Xchar MSG_ascii_mode[] = "display-ascii"; Xchar MSG_binary_mode[] = "display-binary"; Xchar MSG_n_combine[] = "n-way-combine"; Xchar MSG_buffer_name[] = "buffer-set-name"; Xchar MSG_decimal_mode[] = "display-decimal"; Xchar MSG_ebcdic_mode[] = "display-ebcdic"; Xchar MSG_hex_mode[] = "display-hex"; Xchar MSG_back_del_unit[] = "delete-back-unit"; Xchar MSG_octal_mode[] = "display-octal"; Xchar MSG_n_split[] = "n-way-split"; Xchar MSG_display_version[] = "show-version"; Xchar MSG_show_save_buf[] = "show-save-buf"; Xchar MSG_unit_size1[] = "display-bytes"; Xchar MSG_unit_size2[] = "display-words"; Xchar MSG_unit_size4[] = "display-double-words"; Xchar MSG_reposition_window[] = "window-reposition"; Xchar MSG_set_mark[] = "mark-set"; Xchar MSG_goto_eob[] = "move-to-end"; Xchar MSG_goto_bob[] = "move-to-begining"; Xchar MSG_next_buff[] = "change-to-next-buffer"; Xchar MSG_prev_buff[] = "change-to-prev-buffer"; Xchar MSG_query_replace[] = "replace"; Xchar MSG_display_bindings[] = "help"; Xchar MSG_auto_save[] = "auto-save"; Xchar MSG_back_unit[] = "move-back-unit"; Xchar MSG_compare[] = "compare"; Xchar MSG_forw_del_unit[] = "delete-forw-unit"; Xchar MSG_forw_unit[] = "move-forw-unit"; Xchar MSG_link_windows[] = "window-link"; Xchar MSG_print[] = "print-mark-to-cursor"; Xchar MSG_back_search[] = "search-back"; Xchar MSG_forw_search[] = "search-forw"; Xchar MSG_back_page[] = "move-back-page"; Xchar MSG_copy_region[] = "copy-mark-to-cursor"; Xchar MSG_extended_command[] = "extended-command"; Xchar MSG_search_again[] = "search-again"; Xchar MSG_bind_to_key[] = "bind-to-key"; Xchar MSG_file_visit_split[] = "file-visit-split"; Xchar MSG_yank_buffer[] = "yank-buffer"; Xchar MSG_save_region[] = "save-mark-to-cursor"; Xchar MSG_use_buffer_split[] = "move-to-buffer-split"; Xchar MSG_no_f_tb[] = X"ERROR: Could not find <%s> in look up table\n"; X X/* in ttykbd.c */ Xchar MSG_sp_key[] = "%u special keys bound\n"; X X/* in window.c */ Xchar MSG_no_splt[] = "ERROR: Cannot split a %s line window"; Xchar MSG_cnt_al_w[] = "ERROR: Cannot allocate WINDOW block"; Xchar MSG_one_w[] = "ERROR: Only one window"; Xchar MSG_imp_chg[] = "ERROR: Impossible change"; X X#if RUNCHK X/* in basic.c */ Xchar ERR_bas_1[] = "ERROR: unknown r_type in basic #1"; X X/* in display.c */ Xchar ERR_disp_1[] = "ERROR: unknown r_type in display #1"; Xchar ERR_disp_2[] = "ERROR: unknown r_type in display #2"; Xchar ERR_disp_3[] = "ERROR: row less than zero\n"; Xchar ERR_disp_4[] = "ERROR: row greater then window size\n"; Xchar ERR_disp_5[] = "ERROR: unknown r_type in display #3"; Xchar ERR_disp_6[] = "ERROR: unknown r_size in display "; X/* in line.c */ Xchar ERR_no_alloc[] = X"ERROR: new line was allocated during read pattern\n"; Xchar ERR_db_dalloc[] = X"ERROR: line was deallocated during read pattern\n"; Xchar ERR_lock[] = "ERROR: This is size locked, cannot insert."; Xchar ERR_lock_del[] = "ERROR: This is size locked, cannot delete."; X/* in random.c */ Xchar ERR_rnd_1[] = "ERROR: unknown r_type in random #1"; Xchar ERR_rnd_2[] = "ERROR: unknown r_size in random #2"; Xchar ERR_rnd_3[] = "ERROR: unknown r_type in random #3"; Xchar ERR_rnd_4[] = "ERROR: unknown r_size in random #4"; Xchar ERR_rnd_5[] = "ERROR: unknown r_size in random #5"; Xchar ERR_rnd_6[] = "ERROR: unknown r_size in random #6"; Xchar ERR_rnd_7[] = "ERROR: unknown r_size in random #7"; X/* in search.c */ Xchar ERR_rdpat[] = "ERROR: bad r_type in readpattern\n"; Xchar ERR_mask[] = "ERROR: size of mask pattern, pat=%d, mask=%d\n"; Xchar ERR_m_cl[] = "ERROR: in ascii mode mask byte was not cleared\n"; X/* in ttyio.c */ Xchar ERR_bd_pl[] = "ERROR: bad call to putline\n"; X#endif END_OF_FILE if test 15253 -ne `wc -c <'text.c'`; then echo shar: \"'text.c'\" unpacked with wrong size! fi # end of 'text.c' fi echo shar: End of archive 4 \(of 9\). cp /dev/null ark4isdone MISSING="" for I in 1 2 3 4 5 6 7 8 9 ; do if test ! -f ark${I}isdone ; then MISSING="${MISSING} ${I}" fi done if test "${MISSING}" = "" ; then echo You have unpacked all 9 archives. rm -f ark[1-9]isdone ark[1-9][0-9]isdone else echo You still need to unpack the following archives: echo " " ${MISSING} fi ## End of shell archive. exit 0 -- >>>>>>>>>>>>>>>> Peter Reilley ..... pvr@wang.com <<<<<<<<<<<<<<<<<<<<<<< Well, that about says it. exit 0 # Just in case... -- Kent Landfield INTERNET: kent@sparky.IMD.Sterling.COM Sterling Software, IMD UUCP: uunet!sparky!kent Phone: (402) 291-8300 FAX: (402) 291-4362 Please send comp.sources.misc-related mail to kent@uunet.uu.net.