gno/bin/vi/stevie.h
gdr-ftp 784e3de7cd Initial checkin of aroff, binprint, center, less, ls, make, makemake,
passwd, ps, purge, shutdown, stty, upper, and vi.  These sources are
for the versions of the utils shipped with GNO v2.0.4.
1998-03-09 08:30:21 +00:00

346 lines
7.5 KiB
C

/*
* STEVIE - Simply Try this Editor for VI Enthusiasts
*
* Code Contributions By : Tim Thompson twitch!tjt
* Tony Andrews onecom!wldrdg!tony
* G. R. (Fred) Walter watmath!grwalter
*/
#ifdef __ORCAC__
#ifndef MAINSEG
#pragma noroot
#endif
#pragma optimize 9
#endif
#include "env.h"
#include <stdio.h>
#ifndef ATARI
# ifndef UNIX
# include <stdlib.h>
# endif
#endif
#include <ctype.h>
#ifndef MWC
# include <string.h>
#endif
#include "ascii.h"
#include "keymap.h"
#include "param.h"
#include "term.h"
#include "macros.h"
#ifdef AMIGA
/*
* This is used to disable break signal handling.
*/
#include <signal.h>
#endif
/*extern char *strchr();*/
#define NORMAL 0
#define CMDLINE 1
#define INSERT 2
#define REPLACE 3
#define APPEND 4
#define UNDO 5
#define REDO 6
#define PUT 7
#define FORWARD 8
#define BACKWARD 9
#define VALID 10
#define NOT_VALID 11
#define VALID_TO_CURSCHAR 12
#define UPDATE_CURSOR 13
#define UPDATE_ALL 14
/*
* Boolean type definition and constants
*/
typedef int bool_t;
#ifndef TRUE
# define FALSE (0)
# define TRUE (1)
#endif
#define SORTOF (2)
#define YES TRUE
#define NO FALSE
#define MAYBE SORTOF
/*
* Maximum screen dimensions
*/
#define MAX_COLUMNS 140L
/*
* Buffer sizes
*/
#define CMDBUFFSIZE MAX_COLUMNS /* size of the command processing buffer */
#define LSIZE 512 /* max. size of a line in the tags file */
#define IOSIZE (1024+1) /* file i/o and sprintf buffer size */
#define YANKSIZE 5200 /* yank buffer size */
#define INSERT_SIZE 5300 /* insert, redo and undo buffer size must be
* bigger than YANKSIZE */
#define REDO_UNDO_SIZE 5400 /* redo, undo and (undo an undo) buffer size
* must be bigger than INSERT_SIZE */
#define READSIZE 5500 /* read buffer size must be bigger than
* YANKSIZE and REDO_UNDO_SIZE */
/*
* SLOP is the amount of extra space we get for text on a line during editing
* operations that need more space. This keeps us from calling alloc every
* time we get a character during insert mode. No extra space is allocated
* when the file is initially read.
*/
#define SLOP 10
/*
* LINEINC is the gap we leave between the artificial line numbers. This
* helps to avoid renumbering all the lines every time a new line is
* inserted.
*
* Since line numbers are stored in longs (32 bits), a LINEINC of 10000
* lets us have > 200,000 lines and we won't have to renumber very often.
*/
#define LINEINC 10000
#define CHANGED Changed = TRUE
#define UNCHANGED Changed = FALSE
#define S_NOT_VALID NumLineSizes = -1
#define S_LINE_NOT_VALID LineNotValid = TRUE
#define S_CHECK_TOPCHAR_AND_BOTCHAR CheckTopcharAndBotchar = TRUE
#define S_MUST_UPDATE_BOTCHAR MustUpdateBotchar = TRUE
#define S_VALID_TO_CURSCHAR ValidToCurschar = TRUE
struct line {
struct line *next; /* next line */
struct line *prev; /* previous line */
char *s; /* text for this line */
int size; /* actual size of space at 's' */
unsigned long num; /* line "number" */
};
#define LINEOF(x) ((x)->linep->num)
struct lptr {
struct line *linep; /* line we're referencing */
int index; /* position within that line */
};
typedef struct line LINE;
typedef struct lptr LPtr;
struct charinfo {
char ch_size;
char *ch_str;
};
extern struct charinfo chars[];
#ifdef AMIGA
extern int Aux_Device;
#endif
extern int State;
extern int Rows;
extern int Columns;
extern int CheckTopcharAndBotchar;
extern int MustUpdateBotchar;
extern int ValidToCurschar;
extern int LineNotValid;
extern int NumLineSizes;
extern LINE **LinePointers;
extern char *LineSizes;
extern char *Filename;
extern LPtr *Filemem;
extern LPtr *Filetop;
extern LPtr *Fileend;
extern LPtr *Topchar;
extern LPtr *Botchar;
extern LPtr *Curschar;
extern LPtr *Insstart;
extern int Cursrow;
extern int Curscol;
extern int Cursvcol;
extern int Curswant;
extern bool_t set_want_col;
extern int Prenum;
extern bool_t Changed;
extern bool_t RedrawingDisabled;
extern bool_t UndoInProgress;
extern char *IObuff;
extern char *Insbuffptr;
extern char *Insbuff;
extern char *Readbuffptr;
extern char *Readbuff;
extern char *Redobuffptr;
extern char *Redobuff;
extern char *Undobuffptr;
extern char *Undobuff;
extern char *UndoUndobuffptr;
extern char *UndoUndobuff;
extern char *Yankbuffptr;
extern char *Yankbuff;
extern char last_command;
extern char last_command_char;
/* alloc.c */
char *alloc(unsigned size);
char *strsave(char *);
void screenalloc(void);
void filealloc(void);
void freeall(void);
LINE *newline(int);
bool_t canincrease(int);
/* cmdline.c */
void readcmdline(char,char *);
void dotag(char *, bool_t);
void msg(char *s);
void emsg(char *);
void smsg(char *s,...);
void gotocmdline(bool_t, char);
void wait_return(void);
/* dec.c */
int dec(LPtr *lp);
/* edit.c */
void edit(void);
void insertchar(char);
void getout(int);
void scrollup(int);
void scrolldown(int);
void beginline(bool_t);
bool_t oneright(void);
bool_t oneleft(void);
bool_t oneup(int);
bool_t onedown(n);
/* fileio.c */
void filemess(char *);
void renum(void);
bool_t readfile(char *,LPtr *,bool_t);
bool_t writeit(char *, LPtr *, LPtr *);
/* s_io.c */
void s_cursor_off(void);
void s_cursor_on(void);
void s_clear(void);
void s_refresh(int);
void NotValidFromCurschar(void);
void Update_Botchar(void);
/* help.c */
bool_t help(void);
/* inc.c */
int inc(LPtr *);
/* linefunc.c */
LPtr *nextline(LPtr *);
LPtr *prevline(LPtr *);
void coladvance(LPtr *,int);
/* main.c */
void stuffReadbuff(char *);
void stuffnumReadbuff(int);
char vgetc(void);
char vpeekc(void);
/* mark.c */
void setpcmark(void);
void clrall(void);
void clrmark(LINE *);
bool_t setmark(char);
LPtr *getmark(char);
/* misccmds.c */
bool_t OpenForward(int);
bool_t OpenBackward(int);
void fileinfo(void);
void inschar(char);
void insstr(char *);
void delline(int);
bool_t delchar(bool_t, bool_t);
int cntllines(LPtr *, LPtr *);
int plines(char *);
LPtr *gotoline(int);
/* normal.c */
void normal(char);
void ResetBuffers(void);
void AppendToInsbuff(char *);
void AppendToRedobuff(char *);
void AppendNumberToRedobuff(int);
void AppendToUndobuff(char *);
void AppendNumberToUndobuff(int);
void AppendPositionToUndobuff(int,int);
void AppendToUndoUndobuff(char *);
void AppendNumberToUndoUndobuff(int);
void AppendPositionToUndoUndobuff(int,int);
bool_t linewhite(LPtr *);
/* mk.c */
char *mkstr(char);
char *mkline(int);
/* param.c */
void doset(char *,bool_t);
/* screen.c */
void cursupdate(int);
/* search.c */
void doglob(LPtr *,LPtr *,char *);
void dosub(LPtr *,LPtr *,char *);
void searchagain(int);
bool_t dosearch(int,char *);
bool_t repsearch(bool_t);
bool_t searchc(char,int,int);
bool_t crepsearch(int);
bool_t findfunc(int);
LPtr *showmatch(void);
LPtr *fwd_word(LPtr *,int);
LPtr *bck_word(LPtr *,int);
LPtr *end_word(LPtr *,int);
/* format_l.c */
char *format_line(char *, int *);
/*
* Machine-dependent routines.
*/
#ifdef AMIGA
# include "amiga.h"
#endif
#ifdef BSD
# include "bsd.h"
#endif
#ifdef UNIX
# include "unix.h"
#endif
#ifdef TOS
# include "tos.h"
#endif
#ifdef OS2
# include "os2.h"
#endif
#ifdef DOS
# include "dos.h"
#endif
#ifdef GSOS
# include "gsos.h"
#endif