Logo Search packages:      
Sourcecode: levee version File versions  Download package

levee.h

/*
 * LEVEE, or Captain Video;  A vi clone
 *
 * Copyright (c) 1980-2008 David L Parsons
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, without or
 * without modification, are permitted provided that the above
 * copyright notice and this paragraph are duplicated in all such
 * forms and that any documentation, advertising materials, and
 * other materials related to such distribution and use acknowledge
 * that the software was developed by David L Parsons (orc@pell.chi.il.us).
 * My name may not be used to endorse or promote products derived
 * from this software without specific prior written permission.
 * THIS SOFTWARE IS PROVIDED AS IS'' AND WITHOUT ANY EXPRESS OR
 * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
 * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
 * PURPOSE.
 *
 *                  Levee v3.C
 *   C version for Unix/Atari ST/MS-DOS/OS-2/FlexOs/iRMX/etc
 *            Pascal version for UCSD Pascal 4.X
 *
 *    written fall 82' - now (approx) by David L. Parsons.
 *
 *            many patches, suggestions,
 *          and impractical design goals by:
 *                Jim Bolland,
 *                John Plocher,
 *                John Tainter
 */
#ifndef LEVEE_D

#define LEVEE_D

#include "config.h"

#ifndef TRUE
#define     TRUE  (1)   /* Nobody defines TRUE & FALSE, so I will do */
#define     FALSE (0)   /* it myself */
#endif

#define     HANDLE      int   /* default file handle type */

#define PROC            /* for magic function types (MSDOS) */
#define VOID      void  /* ancient creaking C compilers won't understand void */

/*
 * Compilation defines for different systems.
 */

#if OS_ATARI

#include <stdio.h>

#define     void  int   /* Alcyon C don't know void */

/* extractions from osbind.h */
#define OPEN_OLD(n)           gemdos(0x3d,n,/*open mode*/0)
#define OPEN_NEW(n)           gemdos(0x3c,n,/*permissions*/0)
#define CLOSE_FILE(f)         gemdos(0x3e,f)
#define SEEK_POSITION(f,o,m)  gemdos(0x42,(long)(o),f,m)
#define READ_TEXT(f,b,c)      gemdos(0x3f,f,(long)(c),b)
#define WRITE_TEXT(f,b,c)     gemdos(0x40,f,(long)(c),b)

extern char *malloc();
extern long gemdos();

#endif /*OS_ATARI*/

#if OS_RMX
#include <:inc:stdio.h>
#include <:inc:udi.h>

#define OPEN_OLD(n)           open(n, /*open mode*/0)
#define OPEN_NEW(n)           creat(n,/*permissions*/0)
#define CLOSE_FILE(f)         close(f)
#define SEEK_POSITION(f,o,m)  lseek((f),(long)(o),(m))
#define READ_TEXT(f,p,c)      read((f),(p),(unsigned)(c))
#define WRITE_TEXT(f,p,c)     write((f),(p),(unsigned)(c))

#define zwrite(p,s)     write(1,(p), (unsigned)(s))

#endif /*OS_RMX*/

#if OS_DOS

#include <stdio.h>
#include <fcntl.h>

#define OPEN_OLD(n)           open(n, O_RDONLY|O_BINARY)
#define OPEN_NEW(n)           open(n, O_WRONLY|O_CREAT|O_TRUNC|O_BINARY, 0666)
#define CLOSE_FILE(f)         close(f)
#define SEEK_POSITION(f,o,m)  lseek(f, (long)(o), (m))
#define READ_TEXT(f,p,c)      read(f, p, (int)(c))
#define WRITE_TEXT(f,p,c)     write(f, p, (int)(c))

#define zwrite(p,s)     WRITE_TEXT(fileno(stdout), p, s)

#undef PROC
#define PROC      _fastcall

#include "proto.h"

#endif /*OS_DOS*/

#if OS_UNIX

#include <stdio.h>
#include <fcntl.h>
#include <sys/types.h>
#include <unistd.h>
#include <ctype.h>

#define OPEN_OLD(n)           open(n, O_RDONLY)
#define OPEN_NEW(n)           open(n, O_WRONLY|O_CREAT|O_TRUNC, 0666)
#define CLOSE_FILE(f)         close(f)
#define SEEK_POSITION(f,o,m)  lseek(f, (long)(o), (m))
#define READ_TEXT(f,p,c)      read(f, p, (int)(c))
#define WRITE_TEXT(f,p,c)     write(f, p, (int)(c))

#define zwrite(p,s)           fwrite(p, 1, s, stdout)

#endif /*OS_UNIX*/

#if OS_FLEXOS

#include <stdio.h>

#define OPEN_OLD(n)           s_open(m,0x08)          /* note reversed parameters! */
#define OPEN_NEW(n)           s_create(0,0,n,0,0/*mode*/,0)
#define CLOSE_FILE(f)         s_close(0,f)            /* Full close on handle */
#define SEEK_POSITION(f,o,m)  s_seek((m&03)<<9, f, o)
#define     READ_TEXT(f,p,c)  s_read(0x0100,(long)(f),p,(long)(c),0L)
#define     WRITE_TEXT(f,p,c) s_write(0x0101,(long)(f),p,(long)(c),0L)

#define     zwrite(p,s)       s_write(0x0101, 1L, p, (long)(s),0L)

#define     unlink(n)         s_delete(0, n)
#define     rename(a,b)       s_rename(0, a, b)

/* OPEN_OLD mode flags */

#undef      HANDLE
#define     HANDLE      long

#endif /*OS_FLEXOS*/

#define bool int

/* ttydef stuff */
#if !(OS_ATARI | USE_TERMCAP)

#ifndef LINES
#define LINES     25
#endif  /*LINES*/
#define COLS      79

#endif

#define     YES   1
#define     NO    0

#define UPARROW   11
#define DNARROW   10
#define LTARROW   erase
#define RTARROW   12

#if !USE_TERMCAP
#define CA  TRUE
#if !(OS_DOS||OS_FLEXOS)
#define canUPSCROLL 1
#endif
#endif

/* nospecific stuff */
#define MAGICNUMBER  42
#define hell_freezes_over  FALSE
#define BUGS      7     /* sometime when you least expect it.. */

#define DW  23    /* Delete Word */
#define EOL 10    /* End Of Line */
#define DLE 16    /* Space compression lead-in */
#define ESC 27    /* Escape */

/* hardwired line kill and erase character for non-unix machines */
#define DEL 21    /* ^U */
#if RMX
#define ERASE     127
#else
#define ERASE     8     /* ^H */
#endif

#define TAB 9
    
      /* variable types */
#define VBOOL     0
#define VINT      1
#define VSTR      2

#define ERR (-1)

            /* Undostack commands */
#define U_ADDC    'A'
#define U_MOVEC   'M'
#define U_DELC    'D'

            /* magic things for find */
#define MAXPAT    ((int)300)

            /* exec mode commands */
#define     EX_CR       (ERR-1)
#define EX_PR           0
#define EX_QUIT         1
#define EX_READ         2
#define EX_EDIT         3
#define EX_WRITE  4
#define EX_WQ           5
#define EX_NEXT   6
#define EX_SUBS   7
#define EX_XIT          8
#define EX_FILE   9
#define EX_SET          10
#define EX_RM           11
#define EX_PREV   12
#define EX_DELETE 13
#define EX_LINE         14
#define EX_YANK         15
#define EX_PUT          16
#define EX_VI           17
#define EX_EX           18
#define EX_INSERT 19
#define EX_OPEN         20
#define EX_CHANGE 21
#define EX_UNDO         22
#define EX_ESCAPE 23
#define EX_MAP          24
#define EX_UNMAP  25
#define EX_SOURCE 26
#define EX_VERSION      27
#define EX_ARGS         28
#define     EX_REWIND   29

            /* movement return states */
#define LEGALMOVE 0
#define BADMOVE         1
#define ESCAPED         2
#define findstates char

            /* command codes */
#define BAD_COMMAND     0
            /*visual movement*/
#define GO_RIGHT  1
#define GO_LEFT         2
#define GO_UP           3
#define GO_DOWN         4
#define FORWD           5
#define TO_WD           6
#define BACK_WD         7
#define BTO_WD          8
#define NOTWHITE  9
#define TO_COL          10
#define TO_EOL          11
#define MATCHEXPR 12
#define TO_CHAR         13
#define UPTO_CHAR 14
#define BACK_CHAR 15
#define BACKTO_CHAR     16
#define SENT_FWD  17
#define SENT_BACK 18
#define PAGE_BEGIN      19
#define PAGE_END  20
#define PAGE_MIDDLE     21
#define CR_FWD          22
#define CR_BACK         23
#define PATT_FWD  24
#define PATT_BACK 25
#define FSEARCH         26
#define BSEARCH         27
#define GLOBAL_LINE     28
#define TO_MARK         29
#define TO_MARK_LINE    30
#define PARA_FWD  31
#define PARA_BACK 32
            /*modifications*/
#define DELETE_C  39
#define EXEC_C          40
#define ADJUST_C  41
#define CHANGE_C  42
#define YANK_C          43
#define INSERT_C  44
#define APPEND_C  45
#define I_AT_NONWHITE   46
#define A_AT_END  47
#define OPEN_C          48
#define OPENUP_C  49
#define REPLACE_C 50
#define TWIDDLE_C 51
#define RESUBST_C 52
#define JOIN_C          53
#define UNDO_C          54
#define BIG_REPL_C      55
#define PUT_BEFORE      56
#define PUT_AFTER 57
            /*everything else*/
#define HARDMACRO 70
#define REWINDOW  71
#define ZZ_C            72
#define DEBUG_C         73
#define FILE_C          74
#define WINDOW_UP 75
#define WINDOW_DOWN     76
#define REDRAW_C  77
#define MARKER_C  78
#define REDO_C          79
#define EDIT_C          80
#define COLIN_C         81
                /*macros*/
#define SOFTMACRO 100
#define INSMACRO  101
#define cmdtype         char

            /* exec mode states */
#define E_VISUAL 0
#define E_INIT     1
#define E_EDIT     2
#define exec_type char

            /* various sizes */
#define INSSIZE    ((int)80)        /* Insert string size */
#define FSIZE      ((int)39)        /* File string size */
#ifndef SIZE
# define SIZE      ((int)32760)           /* Edit buffer size */
#endif

#define SBUFSIZE  ((int)4096)       /* Incore yank buffer size */
#define MAXMACROS 32                /* Maximum # of macros */
#define NMACROS     9               /* Nexting level for macros */

#define PAGESIZE ((int)1024)        /* Bytes per block */

struct coord {          /* Screen Coordinate */
    int x,y;
};

struct ybuf {           /* Yank Buffer */
    int size;                       /* Bytes yanked */
    bool lines,                     /* Yanked whole lines? */
      has_eol;                /* Yanked a EOL? */
    char stuff[SBUFSIZE];           /* The stuff */
};

struct undostack {      /* Undo Stack Descriptor */
    int blockp,                     /* block address of core block */
      ptr;                    /* offset within coreblock */
    int coreblock[PAGESIZE];        /* core block */
};

union optionrec { /* Black Magic Option Structure */
    int valu;                       /* if integer, the value */
    char *strp;                     /* or if string, a pointer to it */
};

struct macrecord {      /* Macro Descriptor */
    char token;                     /* Character mapped */
    cmdtype oldmap;                 /* Old value in movemap */
    char *m_text;             /* Replacement text */
};
                
struct tmacro {         /* For running a macro */
    char *mtext,  /* Pointer to macro text */
       *ip;       /* Pointer into macro text */
    int  m_iter;  /* Number of times to execute */
};

#define V_CONST   1     /* this option cannot be modified */
#define V_DISPLAY 2     /* this option affects the display */

struct variable { /* Settable Variable Record */
    char *v_name;       /* full name */
    char *v_abbr;       /* abbreviated name */
    int v_tipe;               /* what kind of variable */
    int v_flags;        /* special attributes... */
    union optionrec *u;       /* pointer to it */
};
#endif /*LEVEE_D*/

Generated by  Doxygen 1.6.0   Back to index