This is buffer.h in view mode; [Download] [Up]
/*
* Copyright (c) 1992, 1995 John E. Davis (davis@space.mit.edu)
* All Rights Reserved.
*/
#ifndef __JED_BUFFER_H_
#define __JED_BUFFER_H_
#ifndef sequent
#include <stdlib.h>
#endif
#include "slang.h"
#include "keymap.h"
#include "undo.h"
#include "indent.h"
/*
#define sprintf simple_sprintf
extern char *simple_sprintf(char *, char *, ...);
*/
typedef struct Line
{
struct Line *next; /* pointer to next line */
struct Line *prev; /* pointer to prev line */
unsigned char *data; /* data for the line */
int len; /* actual length of line */
#ifdef KEEP_SPACE_INFO
int space; /* space allocated for line */
#endif
#ifdef JED_LINE_ATTRIBUTES
unsigned int flags;
#define JED_LINE_MARK 0x0001
#define JED_LINE_READONLY 0x0002
#define JED_LINE_HIDDEN 0x0003
#endif
} Line;
/* This is the price we pay for a linked list approach. With straight
buffer gap, this would be an integer. Sigh. */
typedef struct Mark
{
Line *line; /* line that marker points at */
int point; /* offset from beginning */
unsigned int n; /* line number in buffer */
struct Mark *next;
unsigned int flags; /* visible mark if non-zero */
#define MARK_INVALID 0x1
#define VISIBLE_MARK 0x2
}
Mark;
extern unsigned int LineNum; /* current line number */
extern unsigned int Max_LineNum; /* max line number */
typedef struct Narrow_Type
{
struct Narrow_Type *next;
unsigned int nup, ndown; /* (relative) lines above this narrow */
Line *beg, *end; /* pointers to lines to linkup with */
Line *beg1, *end1; /* beg and end before narrow */
int is_region;
} Narrow_Type;
typedef struct Buffer
{
Line *beg; /* Top line of buffer */
Line *end; /* Bottom line */
Line *line; /* current line */
int point; /* current offset */
unsigned int linenum; /* current line number */
unsigned int max_linenum; /* lines in buffer */
char file[256]; /* filename sans dir */
char dir[256]; /* directory of file */
#ifdef REAL_UNIX_SYSTEM
int device; /* inode and device of DIRECTORY that file
* resides in */
int inode;
#endif
char name[50]; /* name of this buffer */
unsigned int flags; /* flags (autosave, etc...) */
Narrow_Type *narrow; /* info for use by widen */
unsigned int nup; /* lines above narrow (absolute) */
unsigned int ndown; /* lines below narrow */
Mark *marks;
Mark *spots;
Mark *user_marks;
unsigned int modes; /* c-mode, wrap, etc... */
SLKeyMap_List_Type *keymap; /* keymap attached to this buffer */
struct Buffer *next; /* */
struct Buffer *prev;
char mode_str[13];
int hits; /* number of hits on buffer since
* last autosave. A hit is the number
* of times the buffer was hit on at top level */
unsigned long m_time; /* time when buffer first modified */
unsigned long c_time; /* time when buffer first created or */
/* when file visited */
Undo_Type *undo; /* pointer to undo ring */
/* local variables */
int tab; /* tab setting for buffer */
int sd; /* selective display */
#define SPOT_ARRAY_SIZE 4
Mark spot_array[SPOT_ARRAY_SIZE];
Mark mark_array[SPOT_ARRAY_SIZE];
int mark_ptr;
int spot_ptr;
int vis_marks; /* number of visible marks */
char status_line[80];
SLang_Name_Type *par_sep; /* paragraph sep function */
SLang_Name_Type *indent_hook;
SLang_Name_Type *newline_indent_hook;
SLang_Name_Type *wrap_hook;
#ifdef COLOR_COLUMNS
unsigned int coloring_style;
unsigned char *column_colors;
#endif
#ifdef HAS_ABBREVS
int abbrev_table_handle;
#endif
Syntax_Table_Type *syntax_table;
#ifdef HAS_SUBPROCESSES
int subprocess; /* 1 + subprocess id */
int locked;
#endif
} Buffer;
extern char Default_Status_Line[80];
/* flags */
#define BUFFER_TRASHED 0x01
/* This flag cannot be used with the AUTO_SAVE_JUST_SAVE flag */
#define AUTO_SAVE_BUFFER 0x02
/* these two flags are to tell user that the buffer and the file on disk
have been modified--- see update_marks and main editor loop */
#define FILE_MODIFIED 0x04
#define READ_ONLY 0x08
#define OVERWRITE_MODE 0x10
#define UNDO_ENABLED 0x20
/* skip this buffer if looking for a pop up one. */
#define BURIED_BUFFER 0x40
/* Instead of autosaving saving the buffer, just save it. This flag
* is only used when SIGHUP or something like that hits. It is also
* used when exiting the editor. It will cause the buffer to be silently
* saved. It is possible that I need another flag for this.
*/
#define AUTO_SAVE_JUST_SAVE 0x80
#define NO_BACKUP_FLAG 0x100
#define BINARY_FILE 0x200
#define ADD_CR_ON_WRITE_FLAG 0x400
#define ABBREV_MODE 0x800
#ifndef VMS
#define MAP_CR_TO_NL_FLAG 0x1000
#endif
extern char *Read_Only_Error;
extern char *Line_Read_Only_Error;
#ifdef JED_LINE_READONLY
#define CHECK_READ_ONLY\
if (CBuf->flags & READ_ONLY) { msg_error(Read_Only_Error); return(1);}\
if (CLine->flags & JED_LINE_READONLY) {msg_error(Line_Read_Only_Error); return 1;}
#else
#define CHECK_READ_ONLY\
if (CBuf->flags & READ_ONLY) { msg_error(Read_Only_Error); return(1);}
#endif
#ifdef JED_LINE_READONLY
#define CHECK_READ_ONLY_VOID\
if (CBuf->flags & READ_ONLY) { msg_error(Read_Only_Error); return;}\
if (CLine->flags & JED_LINE_READONLY) {msg_error(Line_Read_Only_Error); return;}
#else
#define CHECK_READ_ONLY_VOID\
if (CBuf->flags & READ_ONLY) { msg_error(Read_Only_Error); return;}
#endif
#define NO_MODE 0x00
#define WRAP_MODE 0x01
#define C_MODE 0x02
#define LANG_MODE 0x04 /* to be a replacement for C_MODE */
#define SL_MODE 0x08 /* S-Lang mode (ored with C_MODE) */
#define F_MODE 0x10 /* Fortran mode */
#define TEX_MODE 0x20 /* ored with TEXT_MODE */
typedef struct User_Variable_Type
{
int wrap_column;
int tab; /* tab size, if 0 display as ^I */
int c_indent; /* indent level past brace */
int c_brace; /* indent of brace */
int max_hits; /* autosave interval */
}
User_Variable_Type;
/* These are buffer local variables that slang can access */
typedef struct
{
int tab; /* tab width */
int sd; /* selective display */
} Buffer_Local_Type;
extern Buffer_Local_Type Buffer_Local;
extern User_Variable_Type User_Vars;
extern Buffer *CBuf;
extern Line *CLine;
extern int bob(void);
extern int eob(void); /* point to end of buffer */
extern int bol(void);
extern int eol(void);
extern int bobp(void);
extern int eobp(void);
extern int eolp(void);
extern int bolp(void);
extern int prevline(int *);
extern int nextline(int *);
extern int forwchars(int *);
extern int backwchars(int *);
extern void goto_line(int *);
extern Line *make_line1(int);
extern unsigned char *make_line(int);
extern unsigned char *remake_line(int);
extern Buffer *make_buffer(void);
extern void uniquely_name_buffer(char *);
extern void buffer_filename(char *, char *);
extern Buffer *find_file_buffer(char *);
extern Buffer *find_buffer(char *);
extern int delete_line(void);
extern void delete_buffer(Buffer *);
extern int switch_to_buffer(Buffer *);
extern int get_percent(void);
extern int what_line(void);
extern int erase_buffer(void);
extern void mark_buffer_modified(int *);
extern Line *dup_line(Line *);
extern void free_line(Line *);
extern void check_buffers(void);
extern int buffer_exists(Buffer *);
extern int Point;
extern int Number_Zero;
extern int Number_One;
extern int Number_Two;
extern int Number_Ten;
extern void mark_undo_boundary(Buffer *);
extern void delete_undo_ring(Buffer *);
extern int Batch; /* JED used in batch mode. */
extern void touch_screen(void);
extern void check_line(void);
extern Buffer *MiniBuffer;
#endif
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.