You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

237 lines
5.9 KiB

/*
** se.h --- definitions for the screen editor
**
** This file is part of mse, under GPLv3.
*/
#ifndef __SE_H
#define __SE_H
#include <stdio.h>
#include <ctype.h>
#include <signal.h>
/* some standard definitions used throughout the screen editor */
#include "constdefs.h"
#include "ascii.h" /* definitions of ascii characters */
/* new data types */
typedef struct ldesc { /* line descriptor */
unsigned Seekaddr; /* scratch file seek address / 8 */
unsigned Lineleng : 16; /* line length including NL EOS */
unsigned Globmark : 1; /* mark for global commands */
unsigned Markname : 7; /* mark name associated with line */
} LINEDESC;
/* Language extensions */
#define min(a,b) ((a)<(b)?(a):(b))
#define max(a,b) ((a)>(b)?(a):(b))
#define SKIPBL(l,i) while (l[i] == ' ') (i)++
/* save a little procedure call overhead... */
#define remark(text) mesg(text, REMARK_MSG)
/* Arbitrary definitions */
#define BACKWARD -1
#define FORWARD 0
#define NOSTATUS 1
#define NOMORE 0
#define NEWLINE '\n'
#define TAB '\t'
#define RETERR 1
#define RETOK 0
/* Array dimensions and other limit values */
#define MAXBUF 8192
#define MAXTOBUF 512
#define MAXCHARS 10
#define MAXROWS 200
#define MINROWS 16
#define MAXCOLS 200
#define MAXLINE 512
#define MAXPAT 512
#define GARB_FACTOR 2
#define GARB_THRESHOLD 1000
#define BUFENT 1
#define KEYSIZE 11
/* Message classes for status line at bottom of screen */
#define NOMSG 0
#define REMARK_MSG 1
#define CHAR_MSG 2
#define CASE_MSG 3
#define INS_MSG 4
#define TIME_MSG 5
#define FILE_MSG 6
#define COL_MSG 7
#define LINE_MSG 8
#define COMPRESS_MSG 9
#define HELP_MSG 10
#define MODE_MSG 11
#define CRYPT_MSG 12
/* Characters typed by the user */
#define ANYWAY '!'
#define APPENDCOM 'a'
#define UCAPPENDCOM 'A'
#define BACKSCAN '?'
#define BACKSEARCH '<'
#define CHANGE 'c'
#define UCCHANGE 'C'
#define COPYCOM 't'
#define UCCOPYCOM 'T'
#define CURLINE '.'
#define DEFAULTNAME ' '
#define DELCOM 'd'
#define UCDELCOM 'D'
#define ENTER 'e'
#define UCENTER 'E'
#define ESCAPE '\\'
#define EXCLUDE 'x'
#define UCEXCLUDE 'X'
#define GLOBAL 'g'
#define UCGLOBAL 'G'
#define GMARK '\''
#define HELP 'h'
#define UCHELP 'H'
#define INSERT 'i'
#define UCINSERT 'I'
#define JOINCOM 'j'
#define UCJOINCOM 'J'
#define LASTLINE '$'
#define LOCATECMD 'l'
#define UCLOCATECMD 'L'
#define MARKCOM 'k'
#define UCMARKCOM 'K'
#define MOVECOM 'm'
#define UCMOVECOM 'M'
#define NAMECOM 'n'
#define UCNAMECOM 'N'
#define NOTINCCL '^'
#define OPTCOM 'o'
#define UCOPTCOM 'O'
#define PAGECOM ':'
#define OVERLAYCOM 'v'
#define UCOVERLAYCOM 'V'
#define PREVLN '^'
#define PREVLN2 '-'
#define PRINT 'p'
#define UCPRINT 'P'
#define PRINTCUR '='
#define PRINTFIL 'f'
#define UCPRINTFIL 'F'
#define QUIT 'q'
#define UCQUIT 'Q'
#define READCOM 'r'
#define UCREADCOM 'R'
#define SCAN '/'
#define SEARCH '>'
#define SUBSTITUTE 's'
#define UCSUBSTITUTE 'S'
#define TLITCOM 'y'
#define UCTLITCOM 'Y'
#define TOPLINE '#'
#define UNDOCOM 'u'
#define UCUNDOCOM 'U'
#define WRITECOM 'w'
#define UCWRITECOM 'W'
#define XMARK '~'
#define MISCCOM 'z'
#define UCMISCCOM 'Z'
#define SHELLCOM '!'
/* Error message numbers. Arbitrary so long as they are different. */
#define EBACKWARD 1
#define ENOPAT 2
#define EBADPAT 3
#define EBADSTR 4
#define EBADSUB 5
#define ECANTREAD 6
#define EEGARB 7
#define EFILEN 8
#define EBADTABS 9
#define EINSIDEOUT 10
#define EKNOTFND 11
#define ELINE1 12
#define E2LONG 13
#define ENOERR 14
#define ENOLIMBO 15
#define EODLSSGTR 16
#define EORANGE 17
#define EOWHAT 18
#define EPNOTFND 19
#define ESTUPID 20
#define EWHATZAT 21
#define EBREAK 22
#define ELINE2 23
#define ECANTWRITE 24
#define ECANTINJECT 25
#define ENOMATCH 26
#define ENOFN 27
#define EBADLIST 28
#define ENOLIST 29
#define ENONSENSE 30
#define ENOHELP 31
#define EBADLNR 32
#define EFEXISTS 33
#define EBADCOL 34
#define ENOLANG 35
#define ETRUNC 36
#define ENOSHELL 37
#define ECANTFORK 38
#define EHANGUP 39
#define ENOSUB 40
#define ENOCMD 41
/* Screen design positions */
#define NAMECOL 5 /* column to put mark name in */
#define BARCOL 6 /* column for "|" divider */
#define POOPCOL 7 /* column for text to start in */
/* Control characters */
/* Leftward cursor motion */
#define CURSOR_LEFT CTRL_H /* left one column */
#define TAB_LEFT CTRL_E /* left one tab stop */
#define SKIP_LEFT CTRL_W /* go to column 1 */
#define SCAN_LEFT CTRL_L /* scan left for a char */
#define G_LEFT CTRL_U /* erase char to left */
#define G_TAB_LEFT FS /* erase to prev tab stop */
#define KILL_LEFT CTRL_Y /* erase to column 1 */
#define G_SCAN_LEFT CTRL_N /* scan left and erase */
/* Rightward cursor motion */
#define CURSOR_RIGHT CTRL_G /* right one column */
#define TAB_RIGHT CTRL_I /* right one tab stop */
#define SKIP_RIGHT CTRL_O /* go to end of line */
#define SCAN_RIGHT CTRL_J /* scan right for char */
#define G_RIGHT CTRL_R /* erase over cursor */
#define G_TAB_RIGHT RS /* erase to next tab */
#define KILL_RIGHT CTRL_T /* erase to end of line */
#define G_SCAN_RIGHT CTRL_B /* scan right and erase */
/* Line termination */
#define T_SKIP_RIGHT CTRL_V /* skip to end and terminate */
#define T_KILL_RIGHT CR /* KILL_RIGHT, SKIP_RIGHT_AND_TERM */
#define FUNNY CTRL_F /* take funny return */
#define CURSOR_UP CTRL_D /* move up one line */
#define CURSOR_DOWN CTRL_K /* move down one line */
#define CURSOR_SAME CTRL_J /* leave cursor on same line */
/* Insertion */
#define INSERT_BLANK CTRL_C /* insert one blank */
#define INSERT_TAB CTRL_X /* insert blanks to next tab */
#define INSERT_NEWLINE US /* insert a newline */
/* Miscellany */
#define TOGGLE_INSERT_MODE CTRL_A /* toggle insert mode flag */
#define SHIFT_CASE CTRL_Z /* toggle case mapping flag */
#define KILL_ALL DEL /* erase entire line */
#define FIX_SCREEN GS /* clear and restore screen */
/* Function for moving around the buffer, either style line handling: */
#define NEXTLINE(k) (((k) < &Buf[Lastln]) ? (k) + 1 : Line0)
#endif