diff src/energize.h @ 0:376386a54a3c r19-14

Import from CVS: tag r19-14
author cvs
date Mon, 13 Aug 2007 08:45:50 +0200
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/energize.h	Mon Aug 13 08:45:50 2007 +0200
@@ -0,0 +1,225 @@
+/****************************************************************************
+ ***
+ ***	Copyright (c) 1990 by Sun/Lucid,	All Rights Reserved.
+ ***	Copyright (c) 1991-1993 by Lucid, Inc.  All Rights Reserved.
+ ***
+ *****************************************************************************/
+
+/* Synched up with: Not in FSF. */
+#ifndef _XEMACS_ENERGIZE_H_
+#define _XEMACS_ENERGIZE_H_
+
+#ifndef ENERGIZE
+ERROR! energize.h is an Energize-only file
+#endif
+
+#include <connection.h>
+#include <editorreq.h>
+#include <editorconn.h>
+#include <editoption.h>
+#include <request.h>
+
+#include "hash.h"
+#include "extents.h"
+
+/* Product name... */
+#ifndef NCR486
+# define IDENTITY_CRISIS "Energize"
+#else
+# define IDENTITY_CRISIS "C++ Workbench"
+#endif
+
+/* This represents the emacs connection to the Energize server.
+ */
+typedef struct {
+  Connection*	conn;		/* connection to Energize */
+  Lisp_Object	proc;		/* Emacs process */
+  c_hashtable	binfo_hash;	/* hashtable for buffers */
+  Lisp_Object	gc_save;	/* Objects saved for GC */
+  int		major;		/* protocol version number */
+  int		minor;
+  c_hashtable image_table;      /* glyphs table */
+} Editor;
+
+
+typedef BITS32 EId;		/* Energize id */
+
+/* In general, we keep positions in Energize form in our data structures,
+   and only convert to Emacs positions as needed for Emacs operations. */
+typedef BITS32 EnergizePos;	/* Energize position = (Emacs position-1) */
+     
+
+
+/* Generic extent data and classes
+   This "seal" junk is a completely bogus data type system that should be
+   replaced with something implemented using Lisp_Records.
+ */
+#define GDATA_CLASS_SEAL 0x12345678
+#define GDATA_SEAL       0x67654321
+#define EXTENT_SEAL      0x45612378
+#define DUP_SEAL         0x13524768
+#define BUF_INFO_SEAL    0x5F7F6F5F
+#define OBJECT_SEAL_MASK 0x7FFFFFFF
+#define OBJECT_FREE_BIT  0x80000000
+
+#define OBJECT_SEAL(x) (((Energize_Extent_Data *)(x))->seal & OBJECT_SEAL_MASK)
+#define OBJECT_FREE(x) (((Energize_Extent_Data *)(x))->seal & OBJECT_FREE_BIT)
+#define SET_OBJECT_FREE(x) \
+{ \
+  /* if (OBJECT_FREE (x)) \
+    error ("Free'ing already freed object 0x%x", x); \
+  ((Energize_Extent_Data *)(x))->seal |= OBJECT_FREE_BIT; \  */ \
+  xfree(x); \
+}
+
+#define CHECK_OBJECT(x) \
+{ /* if (OBJECT_FREE (x)) error ("Using freed object 0x%x", x); */ }
+
+#define PUT_ABLE_OBJECT(x) \
+((OBJECT_SEAL(x) == BUF_INFO_SEAL) || (OBJECT_SEAL(x) == EXTENT_SEAL) || \
+ (OBJECT_SEAL(x) == GDATA_CLASS_SEAL) || (OBJECT_SEAL(x) == GDATA_SEAL))
+
+enum Energize_Object_Free_Type  
+{ OFT_MAPHASH, OFT_STANDALONE, OFT_GC };
+
+typedef struct 
+{
+  int seal;                     /* must be GDATA_CLASS_SEAL */
+  EId id;
+  short flags;
+  GLYPH glyph;
+} GDataClass;
+
+typedef struct 
+{
+  int seal;                     /* must be GDATA_SEAL */
+  EId id;
+  GDataClass *cl;
+  GLYPH glyph;
+  short flags;
+  short attribute;              /* graphic attribute for extent chars */
+  short modified_state;
+} GenericData;
+
+
+#ifdef I18N4
+
+typedef struct
+{
+  Bufpos pos, endpos;		/* emacs buffer start & end positions */
+  int eucsize;			/* number of EUC bytes to encode */
+} WCharMapRec;
+
+typedef struct
+{
+  int valid;			/* flag */
+  int modiff_stamp;		/* val of BUF_MODIFF(buffer) at last update */
+  int mapsize;			/* number of elements in wc_map */
+  WCharMapRec *map;		/* where's the beef? */
+} WCharSizeTable;
+
+#endif 
+
+
+/* Internal, Energize-specific information about each Energize-created extent.
+ */
+
+typedef struct Energize_Extent_Data
+{
+  int seal;                     /* must be EXTENT_SEAL */
+  EId id;
+  int extentType;               /* oneof CEAttribute, CEAbbreviation, etc. */
+  Lisp_Object extent;           /* corresponding extent (never nil) */
+  struct x_pixmap *start_pixmap;
+  struct x_pixmap *end_pixmap;
+  int warn_modify;
+  union
+    {
+      struct
+        {                       /* CEAttribute */
+          int attrValue;
+        } attr;
+      struct 
+        {                       /* CEAbbreviation */
+          Boolean isOpened;
+        } abbrev;
+      struct 
+        {                       /* CEGeneric */
+          GenericData* gData;
+        } generic;
+    } u;
+} Energize_Extent_Data;
+
+
+/* Internal, Energize-specific information about each Energize-created buffer.
+ */
+
+typedef struct 
+{
+  int seal;                     /* must be BUF_INFO_SEAL */
+  EId id;                        /* Energize id for buffer */
+  int flags;                    /* e.g. CBReadOnly or CBStandard */
+  Editor *editor;               /* corresponding editor structure */
+  c_hashtable id_to_object;     /* energize ids to extents, gdata & classes */
+  Lisp_Object emacs_buffer;     /* corresponding emacs buffer */
+  char	modified_state;		/* modified state as notified to Energize */
+  char	editable;		/* Energize authorized user to edit buffer */
+  Lisp_Object output_mark;      /* analog to process_mark (see process.c) */
+  char *buffer_type;            /* string denoting buffer type; see below */
+  int*	p_sheet_ids;		/* psheets associated with the buffer */
+  int	n_p_sheets;		/* number of p_sheets */
+  int*	note_ids;		/* id of opened postit notes */
+  int	n_notes;		/* number of notes */
+  Lisp_Object frame;		/* frame that was created for the buffer */
+#ifdef I18N4
+  WCharSizeTable wcmap;		/* for char_offset <-> buffer_pos xlation  */
+#endif 
+} BufferInfo;
+
+/* "Types" of buffers, according to the Energize server.
+
+   Source files: SOURCE			source_class, source_as_component_class
+   Projects:	 PROJECT		project_class
+   Log Files:	 LOG_FILE		log_file_class
+   Debugger log: DEBUGGER		debugger_tool_class
+   Breakpoints:	 BREAKPOINT		breaklist_class
+   Unix Man:	 UNIX_MANUAL		unix_man_file_class (no longer used?)
+   File:	 FILE			lazy_file_class
+   Energize:	 ENERGIZE_BUFFER	energize_class
+
+   Unspecified:	 UNINITIALIZED_BUFFER_TYPE
+   Unknown:	 UNKNOWN_BUFFER_TYPE
+
+   There should be a BROWSER type as well, but there isn't, so we have
+   a kludge to fake it up in lisp.
+*/
+
+struct buffer_type_struct
+{
+  char *kernel_name;
+  char *elisp_name;
+};
+
+static struct buffer_type_struct
+  kernel_buffer_types_to_elisp_buffer_types_vector[] =
+{ 
+  { "FILE", "energize-source-buffer" }, /* #### Is this necessary? */
+  { "SOURCE", "energize-source-buffer" },
+  { "PROJECT", "energize-project-buffer" },
+  { "LOG_FILE", "energize-log-file-buffer" },
+  { "DEBUGGER", "energize-debugger-buffer" },
+  { "BREAKPOINT", "energize-breakpoint-buffer" },
+  { "UNIX_MANUAL", "energize-unix-manual-buffer" },
+  { "ENERGIZE_BUFFER", "energize-top-level-buffer" },
+/*  { "CADILLAC_BUFFER", "energize-top-level-buffer" }, /* #### rename me */
+/*  { "POSTIT", "energize-postit-buffer-type" }, */
+  /* #### There needs to be a "browser" buffer type in here too */
+  { 0 , 0 }
+};
+
+#define UNINITIALIZED_BUFFER_TYPE "energize-unspecified-buffer"
+#define UNKNOWN_BUFFER_TYPE "energize-unknown-buffer"
+
+Energize_Extent_Data *energize_extent_data (EXTENT);
+
+#endif /* _XEMACS_ENERGIZE_H_ */