home *** CD-ROM | disk | FTP | other *** search
/ Il CD di internet / CD.iso / SOURCE / AP / JED / JED097-1.TAR / jed / src / buffer.h < prev    next >
Encoding:
C/C++ Source or Header  |  1994-12-12  |  7.3 KB  |  237 lines

  1. /*
  2.  *  Copyright (c) 1992, 1994 John E. Davis  (davis@amy.tch.harvard.edu)
  3.  *  All Rights Reserved.
  4.  */
  5. #ifndef __JED_BUFFER_H_  
  6. #define  __JED_BUFFER_H_
  7.  
  8. #ifndef sequent
  9. #include <stdlib.h>
  10. #endif
  11.  
  12. #include "slang.h"
  13. #include "keymap.h"
  14. #include "undo.h"
  15.  
  16. /* 
  17. #define sprintf simple_sprintf
  18. extern char *simple_sprintf(char *, char *, ...);
  19. */
  20.  
  21. typedef struct Line
  22.   {
  23.       struct Line *next;               /* pointer to next line */
  24.       struct Line *prev;               /* pointer to prev line */
  25.       unsigned char *data;             /* data for the line */
  26.       int len;                         /* actual length of line */
  27.       int space;                       /* space allocated for line */
  28.   } Line;
  29.  
  30. /* This is the price we pay for a linked list approach.  With straight
  31.    buffer gap, this would be an integer.  Sigh. */
  32. typedef struct Mark
  33.   {
  34.      Line *line;                      /* line that marker points at */
  35.      int point;                       /* offset from beginning */
  36.      unsigned int n;               /* line number in buffer */
  37.      struct Mark *next;
  38.      unsigned int flags;           /* visible mark if non-zero */
  39. #define MARK_INVALID 0x1
  40. #define VISIBLE_MARK 0x2
  41.   }
  42. Mark;
  43.  
  44. extern unsigned int LineNum;           /* current line number */
  45. extern unsigned int Max_LineNum;       /* max line number */
  46.  
  47. typedef struct Narrow_Type
  48. {
  49.    struct Narrow_Type *next;
  50.    unsigned int nup, ndown;           /* (relative) lines above this narrow */
  51.    Line *beg, *end;               /* pointers to lines to linkup with */
  52.    Line *beg1, *end1;               /* beg and end before narrow */
  53. } Narrow_Type;
  54.  
  55.  
  56. typedef struct Buffer
  57.   {
  58.      Line *beg;                   /* Top line of buffer */
  59.      Line *end;                   /* Bottom line */
  60.      Line *line;               /* current line */
  61.      int point;                   /* current offset */
  62.      unsigned int linenum;           /* current line number */
  63.      unsigned int max_linenum;           /* lines in buffer */
  64.      char file[256];               /* filename sans dir */
  65.      char dir[256];               /* directory of file */
  66.      char name[50];               /* name of this buffer */
  67.      unsigned int flags;           /* flags  (autosave, etc...) */
  68.      Narrow_Type *narrow;           /* info for use by widen */
  69.      unsigned int nup;               /* lines above narrow (absolute) */
  70.      unsigned int ndown;           /* lines below narrow */
  71.      Mark *marks;
  72.      Mark *spots;
  73.      Mark *user_marks;
  74.      unsigned int modes;           /* c-mode, wrap, etc... */
  75.      SLKeyMap_List_Type *keymap;       /* keymap attached to this buffer */
  76.      struct Buffer *next;           /*  */
  77.      struct Buffer *prev;
  78.      char mode_str[13];
  79.      int hits;                   /* number of hits on buffer since 
  80.                                            last autosave.  A hit is the number
  81.                        of times the buffer was hit on at top level  */
  82.      unsigned long m_time;           /* time when buffer first modified */
  83.      unsigned long c_time;           /* time when buffer first created or  */
  84.                        /* when file visited */
  85.      Undo_Type *undo;               /* pointer to undo ring */
  86.      /* local variables */
  87.      int tab;                   /* tab setting for buffer */
  88.      int sd;                   /* selective display */
  89.      
  90. #define SPOT_ARRAY_SIZE 4
  91.      
  92.      Mark spot_array[SPOT_ARRAY_SIZE];
  93.      Mark mark_array[SPOT_ARRAY_SIZE];
  94.      int mark_ptr;
  95.      int spot_ptr;
  96.      int vis_marks;               /* number of visible marks */
  97.      char status_line[80];
  98.      SLang_Name_Type *par_sep;               /* paragraph sep function */
  99.      SLang_Name_Type *indent_hook;
  100.      SLang_Name_Type *wrap_hook;
  101.      
  102. #ifdef HAS_ABBREVS
  103.      int abbrev_table_handle;
  104. #endif
  105.   } Buffer;
  106.  
  107. extern char Default_Status_Line[80];
  108.  
  109. /* flags */
  110. #define BUFFER_TRASHED 0x01
  111.  
  112. /* This flag cannot be used with the AUTO_SAVE_JUST_SAVE flag */
  113. #define AUTO_SAVE_BUFFER 0x02
  114. /* these two flags are to tell user that the buffer and the file on disk
  115.    have been modified--- see update_marks and main editor loop */
  116. #define FILE_MODIFIED 0x04
  117. #define READ_ONLY 0x08
  118. #define OVERWRITE_MODE 0x10
  119. #define UNDO_ENABLED 0x20
  120.  
  121. /* skip this buffer if looking for a pop up one. */
  122. #define BURIED_BUFFER 0x40
  123.  
  124. /* Instead of autosaving saving the buffer, just save it.  This flag
  125.  * is only used when SIGHUP or something like that hits.  It is also
  126.  * used when exiting the editor.  It will cause the buffer to be silently 
  127.  * saved.  It is possible that I need another flag for this.
  128.  */
  129. #define AUTO_SAVE_JUST_SAVE 0x80
  130. #define NO_BACKUP_FLAG  0x100
  131. #define BINARY_FILE  0x200
  132. #define ADD_CR_ON_WRITE_FLAG 0x400
  133.  
  134. #define ABBREV_MODE 0x800
  135.  
  136. extern char *Read_Only_Error;
  137. #define CHECK_READ_ONLY\
  138.     if (CBuf->flags & READ_ONLY) { msg_error(Read_Only_Error); return(1);}
  139.     
  140. #define CHECK_READ_ONLY_VOID\
  141.     if (CBuf->flags & READ_ONLY) { msg_error(Read_Only_Error); return;}
  142.  
  143.                  
  144.  
  145. #define NO_MODE 0x00
  146. #define WRAP_MODE 0x01
  147. #define C_MODE 0x02
  148. #define LANG_MODE 0x04               /* to be a replacement for C_MODE */
  149. #define SL_MODE 0x08               /* S-Lang mode (ored with C_MODE) */
  150. #define F_MODE 0x10               /* Fortran mode */
  151. #define TEX_MODE 0x20               /* ored with TEXT_MODE */
  152.  
  153. typedef struct User_Variable_Type
  154.   {
  155.       int wrap_column;
  156.       int tab;                /* tab size, if 0 display as ^I */
  157.       int c_indent;            /* indent level past brace */
  158.       int c_brace;            /* indent of brace */
  159.       int max_hits;            /* autosave interval */
  160.   }
  161. User_Variable_Type;
  162.  
  163. /* These are buffer local variables that slang can access */
  164. typedef struct 
  165. {
  166.    int tab;                   /* tab width */
  167.    int sd;                   /* selective display */
  168. } Buffer_Local_Type;
  169.  
  170. extern Buffer_Local_Type Buffer_Local;
  171.  
  172.  
  173. extern User_Variable_Type User_Vars;
  174.  
  175. extern Buffer *CBuf;
  176. extern Line *CLine;
  177.  
  178.  
  179. extern int bob(void);
  180. extern int eob(void);                  /* point to end of buffer */
  181. extern int bol(void);
  182. extern int eol(void);
  183.  
  184. extern int bobp(void);
  185. extern int eobp(void);
  186. extern int eolp(void);
  187. extern int bolp(void);
  188.  
  189. extern int prevline(int *);
  190. extern int nextline(int *);
  191.  
  192. extern int forwchars(int *);
  193. extern int backwchars(int *);
  194. extern void goto_line(int *);
  195.  
  196. extern Line *make_line1(int);
  197. extern unsigned char *make_line(int);
  198. extern unsigned char *remake_line(int);
  199.  
  200. extern Buffer *make_buffer(void);
  201. extern void uniquely_name_buffer(char *);
  202. extern void buffer_filename(char *, char *);
  203. extern Buffer *find_file_buffer(char *);
  204. extern Buffer *find_buffer(char *);
  205. extern int delete_line(void);
  206. extern void delete_buffer(Buffer *);
  207. extern int switch_to_buffer(Buffer *);
  208. extern int get_percent(void);
  209. extern int what_line(void);
  210. extern int erase_buffer(void);
  211. extern void mark_buffer_modified(int *);
  212. extern Line *dup_line(Line *);
  213. extern void free_line(Line *);
  214. extern void check_buffers(void);
  215. extern int buffer_exists(Buffer *);
  216. extern int Point;
  217. extern int Number_Zero;
  218. extern int Number_One;
  219. extern int Number_Two;
  220. extern int Number_Ten;
  221. /*
  222. extern unsigned char Chg_UCase_Lut[256];
  223. extern unsigned char Chg_LCase_Lut[256];
  224. #define UPPER_CASE(x) (Chg_UCase_Lut[(unsigned char) (x)])
  225. #define LOWER_CASE(x) (Chg_LCase_Lut[(unsigned char) (x)])
  226. #define CHANGE_CASE(x) (((x) == Chg_LCase_Lut[(unsigned char) (x)]) ?\
  227.             Chg_UCase_Lut[(unsigned char) (x)] : Chg_LCase_Lut[(unsigned char) (x)])
  228. */
  229. extern void mark_undo_boundary(Buffer *);
  230. extern void delete_undo_ring(Buffer *);
  231.  
  232. extern int Batch;               /* JED used in batch mode. */
  233. extern void touch_screen(void);
  234. extern void check_line(void);
  235. extern Buffer *MiniBuffer;
  236. #endif
  237.