home *** CD-ROM | disk | FTP | other *** search
/ Best Objectech Shareware Selections / UNTITLED.iso / boss / word / text / 019 / buffer.h < prev    next >
C/C++ Source or Header  |  1993-01-19  |  5KB  |  150 lines

  1. /*
  2.  *  Copyright (c) 1992 John E. Davis  (davis@amy.tch.harvard.edu)
  3.  *  All Rights Reserved.
  4.  */
  5. #ifndef __JED_BUFFER_H_  
  6. #define  __JED_BUFFER_H_  
  7. #include <stdlib.h>
  8.  
  9. #ifdef msdos
  10. #include <alloc.h>
  11. #define FREE(block)  farfree((void far *)(block))
  12. #define MALLOC(x) farmalloc((unsigned long) (x))
  13. #define REALLOC(b, n) farrealloc((void far *) (b), (unsigned long) (n))
  14. #define CALLOC(n, m) farcalloc((unsigned long) (n), (unsigned long) (m))
  15. extern int show_memory(void);
  16. #else
  17. #define FREE free
  18. #define MALLOC malloc
  19. #define REALLOC realloc
  20. #define CALLOC calloc
  21. #endif
  22.  
  23. #include "keymap.h"
  24.  
  25. typedef struct Line
  26.   {
  27.       struct Line *next;               /* pointer to next line */
  28.       struct Line *prev;               /* pointer to prev line */
  29.       unsigned char *data;             /* data for the line */
  30.       int len;                         /* actual length of line */
  31.       int space;                       /* space allocated for line */
  32.   } Line;
  33.  
  34. /* This is the price we pay for a linked list approach.  With straight
  35.    buffer gap, this would be an integer.  Sigh. */
  36. typedef struct Mark
  37.   {
  38.       Line *line;                      /* line that marker points at */
  39.       int point;                       /* offset from beginning */
  40.       struct Mark *next;
  41.   }
  42. Mark;
  43.       
  44. typedef struct Buffer
  45.   {
  46.      Line *line;               /* current line */
  47.      Line *beg;                   /* Top line of buffer */
  48.      Line *end;                   /* Bottom line */
  49.      int point;                   /* current offset */
  50.      char file[255];               /* filename sans dir */
  51.      char dir[255];               /* directory of file */
  52.      char name[50];               /* name of this buffer */
  53.      int flags;                   /* flags  (autosave, etc...) */
  54.      Line *beg1;               /* beg1, end1, beg2, end2 are used by the */
  55.      Line *end1;               /* narrow to region commands.  Thus the  */
  56.      Line *beg2;               /* buffer is represented as: */
  57.      Line *end2;               /* beg1/end1/beg/end/beg2/end2  */
  58.      Mark *marks;
  59.      Mark *spots;
  60.      int modes;                   /* c-mode, wrap, etc... */
  61.      Key_Type *keymap;               /* keymap attached to this buffer */
  62.      struct Buffer *next;           /*  */
  63.      struct Buffer *prev;
  64.      char mode_str[13];
  65.      unsigned int hits;            /* number of hits on buffer since 
  66.                                            last autosave.  A hit is the number
  67.                        of times the buffer was hit on at top level  */
  68.      unsigned long m_time;           /* time when buffer first modified */
  69.      unsigned long c_time;           /* time when buffer first created or  */
  70.                        /* when file visited */
  71.   } Buffer;
  72.  
  73. /* flags */
  74. #define BUFFER_TRASHED 0x01
  75. #define AUTO_SAVE_BUFFER 0x02
  76. /* these two flags are to tell user that the buffer and the file on disk
  77.    have been modified--- see update_marks and main editor loop */
  78. #define FILE_MODIFIED 0x04
  79. #define BUFFER_FILE_CONFLICT 0x08
  80.  
  81. #define NO_MODE 0x00
  82. #define WRAP_MODE 0x01
  83. #define TEXT_MODE 0x01
  84. #define C_MODE 0x02
  85. #define LANG_MODE 0x03               /* to be a replacement for C_MODE */
  86.  
  87. extern Buffer *CBuf;
  88. extern Line *CLine;
  89.  
  90.  
  91. extern int bob(void);
  92. extern int eob(void);                  /* point to end of buffer */
  93. extern int bol(void);
  94. extern int eol(void);
  95.  
  96. extern int bobp(void);
  97. extern int eobp(void);
  98. extern int eolp(void);
  99. extern int bolp(void);
  100.  
  101. extern int prevline(int *);
  102. extern int nextline(int *);
  103.  
  104. extern int forwchars(int *);
  105. extern int backwchars(int *);
  106. extern void goto_line(int *);
  107.  
  108. extern Line *make_line1(int);
  109. extern unsigned char *make_line(int);
  110. extern unsigned char *remake_line(int);
  111.  
  112. extern Buffer *make_buffer(void);
  113. extern void uniquely_name_buffer(char *);
  114. extern void buffer_filename(char *, char *);
  115. extern Buffer *find_file_buffer(char *);
  116. extern Buffer *find_buffer(char *);
  117. extern int delete_line(void);
  118. extern void delete_buffer(Buffer *);
  119. extern int switch_to_buffer(Buffer *);
  120. extern int get_percent(void);
  121. extern int what_line(void);
  122. extern int erase_buffer(void);
  123. extern void mark_buffer_modified(int *);
  124. extern Line *dup_line(Line *);
  125. extern void free_line(Line *);
  126. extern void check_buffers(void);
  127. extern int Point;
  128. extern int Number_Zero;
  129. extern int Number_One;
  130. extern int Number_Two;
  131.  
  132. /* some systems do not prototype these functions which cause warnings */
  133.  
  134. /*
  135. extern int fclose(FILE *);
  136. #ifndef VMS
  137. extern FILE *fopen(char *, char *);
  138. #endif
  139. extern int fflush(FILE *);
  140. extern int fprintf(FILE *, char *, ...);
  141. extern int fwrite(char *, int, int,  FILE *);
  142. extern int fread(char *, int, int,  FILE *);
  143. extern int sscanf(char *, char *, ...);
  144. extern int fputs(char *, FILE *);
  145.  
  146. */
  147.  
  148.  
  149. #endif
  150.