"Fossies" - the Fresh Open Source Software Archive

Member "schily-2021-09-18/ved/ved.h" (20 Aug 2021, 10658 Bytes) of package /linux/privat/schily-2021-09-18.tar.bz2:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) C and C++ source code syntax highlighting (style: standard) with prefixed line numbers and code folding option. Alternatively you can here view or download the uninterpreted source code file.

    1 /* @(#)ved.h    1.49 21/08/20 Copyr 1984-86, 88-89,97, 2000-2018 J. Schilling */
    2 /*
    3  *  Main include file for VED
    4  *
    5  *  Copyright (c) 1984, 85, 86, 88, 89, 97, 2000-2018 J. Schilling
    6  */
    7 /*
    8  * The contents of this file are subject to the terms of the
    9  * Common Development and Distribution License, Version 1.0 only
   10  * (the "License").  You may not use this file except in compliance
   11  * with the License.
   12  *
   13  * See the file CDDL.Schily.txt in this distribution for details.
   14  * A copy of the CDDL is also available via the Internet at
   15  * http://www.opensource.org/licenses/cddl1.txt
   16  *
   17  * When distributing Covered Code, include this CDDL HEADER in each
   18  * file and include the License file CDDL.Schily.txt from this distribution.
   19  */
   20 
   21 #include <schily/mconfig.h>
   22 #include <schily/stdio.h>
   23 #include <schily/stdlib.h>
   24 #include <schily/unistd.h>
   25 #include <schily/string.h>
   26 #include <schily/utypes.h>
   27 #include <schily/standard.h>
   28 #include <schily/nlsdefs.h>
   29 #include <schily/limits.h>  /* for  MB_LEN_MAX  */
   30 #include <schily/ctype.h>   /* For isprint()    */
   31 #include <schily/wchar.h>   /* wchar_t      */
   32 #include <schily/wctype.h>  /* For iswprint()   */
   33 #define GT_COMERR       /* #define comerr gtcomerr */
   34 #define GT_ERROR        /* #define error gterror   */
   35 #include <schily/schily.h>
   36 #include <schily/nlsdefs.h>
   37 
   38 #define C   (char *)
   39 #define UC  (unsigned char *)
   40 #define CP  (char **)
   41 #define UCP (unsigned char **)
   42 #define CPP (char ***)
   43 #define UCPP    (unsigned char ***)
   44 
   45 #ifndef DO_WCHAR
   46 #undef  MB_LEN_MAX
   47 #define MB_LEN_MAX  1
   48 #endif
   49 
   50 #if MB_LEN_MAX > 1          /* This is multi byte mode    */
   51 typedef wchar_t     echar_t;    /* A ved internal character   */
   52 typedef wint_t      eint_t;     /* A ved internal "getc()" result */
   53 
   54 #else                   /* This is single byte mode   */
   55 typedef unsigned char   echar_t;    /* A ved internal character   */
   56 typedef int     eint_t;     /* A ved internal "getc()" result */
   57 #endif
   58 
   59 /*#define   USE_LONGLONG_POS*/
   60 
   61 #if defined(HAVE_LARGEFILES) || defined(USE_LONGLONG_POS)
   62 /*
   63  * do not use long long to allow compilation on non long long
   64  * aware systems.
   65  */
   66 /*typedef   long long   epos_t;*/
   67 /*typedef   long long   ecnt_t;*/
   68 /*
   69  * Rather use the "best effort" long long "Llong"
   70  */
   71 typedef Llong       epos_t;
   72 typedef Llong       ecnt_t;
   73 #else
   74 typedef long        epos_t;
   75 typedef long        ecnt_t;
   76 #endif
   77 
   78 #ifdef  TESTLONGLONG
   79 enum nicht { blau, besoffen };
   80 
   81 /*typedef   long        epos_t;*/
   82 /*typedef   Llong       epos_t;*/
   83 /*typedef   double      epos_t;*/
   84 /*typedef   char        epos_t;*/
   85 /*typedef   enum nicht  epos_t;*/
   86 
   87 /*typedef   double  ecnt_t;*/
   88 /*typedef   Llong   ecnt_t;*/
   89 #endif
   90 
   91 /*
   92  * We do our own buffering for outout to the screen to make ved
   93  * fast on all operating systems independent of the I/O implementation.
   94  * Our output buffer size should be more than the size of a usual screen.
   95  * As most lines are shorter that 40 characters, a bufsize of 4096 chars
   96  * will be sufficient for a 100 line display.
   97  */
   98 #define BFSIZE  8192
   99 
  100 #ifdef  BFSIZE
  101 typedef struct {
  102     short   _count;
  103     Uchar   _buf[BFSIZE];
  104     Uchar   *_ptr;
  105 } iobuf_t;
  106 
  107 extern  iobuf_t _bb;
  108 
  109 #ifdef  putchar
  110 #undef  putchar
  111 #endif
  112 #ifdef  JOS
  113 #define putchar(c) {if (--_bb._count >= 0) *_bb._ptr++ = (c); \
  114                 else _bflush(c); }
  115 #else
  116 #define putchar(c) (--_bb._count >= 0 ? *_bb._ptr++ = (c): _bflush(c))
  117 #endif
  118 
  119 #ifdef  flush
  120 #undef  flush
  121 #endif
  122 #define flush() _bufflush()
  123 #endif  /* BFSIZE */
  124 
  125 #ifdef  JOS
  126 #define ENOENT  ENOFILE
  127 #endif
  128 
  129 #define SP  0x20                /* The vanilla space    */
  130 #define TAB 0x09                /* The TAB character    */
  131 #define DEL 0x7F                /* The DEL character    */
  132 #define SP8 0xA0                /* The non-breakable space */
  133 #ifdef  USE_DEL8
  134 #define DEL8    0xFF                /* Bef. y diaresis was added */
  135 #endif
  136 
  137 #define TABNONE 255             /* No table     */
  138 #define TABFIRST CTAB               /* The first table  */
  139 #define CTAB    0               /* The chartable    */
  140 #define ESCTAB  1               /* The ESC table    */
  141 #define ALTTAB  2               /* The ALT table    */
  142 #define AESCTAB 3               /* The ALT-ESC table    */
  143 #define XTAB    4               /* The X table      */
  144 #define TABLAST XTAB                /* The last table number */
  145 #define NCTAB   (TABLAST+1)         /* The number of tables */
  146 
  147 /*
  148  * XXX Only correct on a two's complement machine.
  149  */
  150 #define MAXULONG    (~((unsigned long)0))
  151 #define MAXLONG     (MAXULONG >> 1)
  152 
  153 #undef  min
  154 #define min(x, y)   (((x) < (y)) ? (x) : (y))
  155 #undef  max
  156 #define max(x, y)   (((x) < (y)) ? (y) : (x))
  157 /*#define   abs(x)  (((x) > 0) ? (x) : (-x))*/
  158 
  159 #define TMPNSIZE    28  /* Size of temporary filename buffers   */
  160 #define NAMESIZE    256 /* Size of several temporary buffers    */
  161 #define FNAMESIZE   1024    /* Size of edited filename      */
  162 
  163 #ifdef  JOS
  164 #define DEFSHELL    "/bin/command"
  165 #define HELPFILE    UC "/doc/cmds/ved.help"
  166 #else
  167 #define DEFSHELL    "/bin/sh"
  168 #define HELPFILE    UC "/opt/schily/share/man/help/ved.help"
  169 #endif
  170 
  171 /*
  172  * A pair of horizontal and vertical position.
  173  */
  174 typedef struct {
  175     int hp;
  176     int vp;
  177 } cpos_t;
  178 
  179 typedef struct {
  180     /*
  181      * Current Window status.
  182      */
  183     epos_t  dot;        /* The byte offset of the cursor position   */
  184     epos_t  eof;        /* The byte offset of the last character + 1 */
  185     epos_t  mark;       /* The byte offset of the selection mark    */
  186     epos_t  window;     /* The byte offset of the window start      */
  187     epos_t  ewindow;    /* The byte offset of the window end        */
  188 
  189     int eflags;     /* XXX                      */
  190     BOOL    markvalid;  /* if true: there is a mark         */
  191     BOOL    overstrikemode; /* if true: overwrite in favor of insert    */
  192     BOOL    visible;    /* if true: make TAB, CR, EOL, EOF visible  */
  193     BOOL    dosmode;    /* if true: supress '\r' in \r\n sequence   */
  194     BOOL    raw8;       /* if true: do not map non acsii 8bit chars */
  195     BOOL    markwrap;   /* if true: mark linewraps with a '\\' at eol */
  196 
  197     int pmargin;    /* Max Abstand vom oberen/unteren Rand      */
  198     int tabstop;    /* Breite eines 'tabs'              */
  199     int optline;    /* Vorzugszeile fuer Window - Adjust        */
  200 
  201     int wrapmargin; /* autowrap based on margin from linelen    */
  202     int maxlinelen; /* autowrap based on linelen            */
  203     BOOL    autoindent; /* whether to indent next line like current */
  204 
  205     void    *bhead;     /* Head of the linked list of used headers  */
  206     void    *gaplink;   /* Pointer to the header where the gap starts */
  207     epos_t  gap;        /* Byte offset of first char after the gap   */
  208     int gapoff;     /* Offset within the header the gap starts in */
  209 
  210                 /* Three variables used by findpos() only   */
  211     void    *winlink;   /* Header containing the start of the window */
  212     epos_t  winpos;     /* Byte offset of the current window start  */
  213     epos_t  winoff;     /* Byte offset for start of data in winlink */
  214 
  215     Uchar   *curfile;   /* current file name                */
  216     FILE    *curfp;     /* current file pointer (if file is locked) */
  217     long    curftime;   /* last modification time of current file   */
  218     int curfd;      /* fd used to hold writelock to current file */
  219     echar_t lastch;     /* a global copy of the last read char      */
  220     BOOL    magic;      /* wether to search in 'magic' mode     */
  221     long    modflg;     /* number of modifications since last save  */
  222     ecnt_t  curnum;     /* mult # fot next edit command         */
  223     ecnt_t  number;     /* curnum is copied from this mult # master */
  224     int column;     /* the remembered not mapped hp of the cursor */
  225     /*
  226      * Global stuff.
  227      */
  228     int psize;      /* page size of the screen          */
  229     int llen;       /* line length of the screen            */
  230 } ewin_t;
  231 
  232 extern  cpos_t  cursor;     /* position of cursor in window hp not mapped */
  233 extern  cpos_t  cpos;       /* real pos of cursor on screen hp mapped   */
  234 
  235 #define COLUPDATE   0x0001  /* if set: update 'column' to current hp    */
  236 #define SAVENUM     0x0002  /* if set: keep value in 'number'       */
  237 #define SAVEDEL     0x0004  /* if set: keep next del in delete buffer   */
  238 #define KEEPDEL     0x0010  /* if set: keep content of delete buffer    */
  239 #define DELDONE     0x0020  /* if set: last command filled delete buffer */
  240 
  241 #define FREADONLY   0x10000 /* if set: forced readonly on current file  */
  242 #define FNOLOCK     0x20000 /* if set: could not lock file          */
  243 #define FLOCKLOCAL  0x40000 /* if set: lock to file is local only       */
  244 
  245 #ifdef  notused
  246 #define MARKVALID   0x0008  /* if set: there is a mark          */
  247 #define OVERSTRIKE  0x0100  /* if set: overwrite in favor of insert     */
  248 #define VISIBLE     0x0200  /* if set: make TAB, CR, EOL, EOF visible   */
  249 #define DOSMODE     0x0400  /* if set: supress '\r' in \r\n sequence    */
  250 #define RAW8        0x0800  /* if set: do not map non acsii 8bit chars  */
  251 #define MARKWRAP    0x1000  /* if set: mark linewraps with a '\\' at eol */
  252 #endif
  253 
  254 #define LOCK_OK     2   /* A networkwide file lock is present       */
  255 #define LOCK_LOCAL  1   /* The lock is local only because of flock() */
  256 #define LOCK_CANNOT 0   /* The system does not support to lock      */
  257 #define LOCK_ALREADY    -1  /* The file is already locked           */
  258 
  259 
  260 extern  int pid;        /* process id used for unique tmp file names */
  261 
  262 extern  int mflag;      /* if > 0 : take characters from macro      */
  263 
  264 
  265 /*
  266  * Used by ved.c and io.c
  267  */
  268 extern  char    ved_version[];
  269 
  270 /*
  271  * Used by ved.c and *cmds.c
  272  */
  273 extern  FILE    *takefile;  /* FILE * of current take buffer        */
  274 extern  epos_t  takesize;   /* file size of current take buffer     */
  275 extern  Uchar   takename[TMPNSIZE]; /* file name of current take buffer     */
  276 
  277 extern  FILE    *delfile;   /* FILE * of delete buffer          */
  278 extern  epos_t  delsize;    /* file size of delete buffer           */
  279 extern  Uchar   delname[TMPNSIZE]; /* file name of delete buffer        */
  280 
  281 extern  FILE    *rubfile;   /* FILE * of rubout buffer          */
  282 extern  epos_t  rubsize;    /* file size of rubout buffer           */
  283 extern  Uchar   rubname[TMPNSIZE]; /* file name of rubout buffer        */
  284 
  285 extern  int ReadOnly;   /* if > 0 : do not allow to write back mods */
  286 extern  int nobak;      /* Es wird kein ___.bak angelegt        */
  287 extern  int nolock;     /* Es wird kein record locking versucht     */
  288 extern  int noedtmp;    /* Kein .vedtmp.* erzeugen          */
  289 extern  int recover;    /* altes File reparieren            */
  290 extern  BOOL    autodos;    /* wp->dosmode aus isdos() bestimmen        */
  291 extern  int nfiles;     /* Anzahl der zu editierenden Files     */
  292 extern  int fileidx;    /* Index des editierten Files           */
  293 extern  Uchar   **files;    /* Array der zu editierenden Files      */
  294 
  295 /*
  296  * Used by io.c and screen.c
  297  */
  298 extern  BOOL    markon;     /* if true: we are just printing the mark    */
  299 
  300 /*
  301  * Used by ved.c, message.c and cmdline.c
  302  */
  303 extern  BOOL    updatemsg;  /* infostr is temporary             */
  304 extern  BOOL    updateerr;  /* errorstr is temporary            */
  305 extern  BOOL    updatesysline;  /* whole systemline should be redrawn       */
  306 
  307 /*
  308  * Used by ved.c and executecmds.c
  309  */
  310 extern Uchar execname[TMPNSIZE]; /* file name of execute buffer         */
  311 
  312 /*
  313  * Used by ved.c and filecmds.c
  314  */
  315 extern Uchar curfname[FNAMESIZE]; /* global file name storage space     */
  316 
  317 /*
  318  * Used by tags.c and coloncmdsds.c
  319  */
  320 extern int taglength;       /* Maxnimum number of chars to compare      */
  321 extern Uchar tags[];        /* List of files to search for tags     */
  322 
  323 /*
  324  * Make function prototypes available for all.
  325  */
  326 #include "func.h"