/
Crimson2/alias/
Crimson2/area.tmp/
Crimson2/area.tmp/AnomalySpaceDock/
Crimson2/area.tmp/AnomalyStation/
Crimson2/area.tmp/AntHill/
Crimson2/area.tmp/ArcticTerrarium/
Crimson2/area.tmp/BuilderCity/
Crimson2/area.tmp/Dungeon/
Crimson2/area.tmp/MiningDock/
Crimson2/area.tmp/PipeSystem/
Crimson2/area.tmp/RattArea/
Crimson2/area.tmp/RobotFactory/
Crimson2/area.tmp/SilverDale/
Crimson2/area.tmp/StarshipFearless/
Crimson2/area.tmp/StationConduits/
Crimson2/area.tmp/TerrariumAlpha/
Crimson2/area.tmp/TerrariumBeta/
Crimson2/area.tmp/TestArea/
Crimson2/area.tmp/Void/
Crimson2/area/
Crimson2/area/AnomalySpaceDock/
Crimson2/area/AnomalyStation/
Crimson2/area/MiningDock/
Crimson2/area/PipeSystem/
Crimson2/area/SilverDale/
Crimson2/area/StationConduits/
Crimson2/area/Void/
Crimson2/board/
Crimson2/clone/
Crimson2/lib/
Crimson2/mole/
Crimson2/mole/mole_src/HELP/
Crimson2/player/
Crimson2/util/
Crimson2/wldedit/
Crimson2/wldedit/res/
#define EP_ENDLF        1<<0  /* end with a trailing LF */
#define EP_ENDNOLF      1<<1  /* dont end with a trailing LF */
#define EP_ONELINE      1<<2  /* only one line allowed */
#define EP_IMMNEW       1<<3  /* immediately enter new/append mode */
#define EP_ALLOWESCAPE  1<<4  /* Allow $ escape sequences */

struct EditType {                
  STR               *eStr;       /* are we editing something */
  STR              **eStrP;      /* addr of the str field we're editing */
  STR               *eBuf;       /* buffer for changes */
  WORD               eSize;      /* size of edit buffer - static for a given edit */
  BYTE               eName[64];  /* what are we editing */
  FLAG              *eFlag;      /* pointer to flag to set once edit is done */
  FLAG               eBit;       /* bit to set when edit is done */
  FLAG               ePref;      /* editor config prefs */
  LWORD              eInsert;    /* offset we are currently inserting to */
  STR               *eClipBoard; /* persistent storage buffer for copy/paste */
};

/* externally available functions */
extern void   EditSendPrompt(SOCK *sock);
extern void   EditProcess(SOCK *sock, BYTE *arg);
extern void   EditCancel(SOCK *sock);
extern void   EditFree(SOCK *sock);

extern LWORD  EditStr(SOCK *sock, STR **str, LWORD size, BYTE *name, FLAG pref);
extern void   EditFlag(SOCK *sock, FLAG *flag, FLAG bit);
extern LWORD  EditProperty(THING *thing, BYTE *commandName, BYTE *cmd, BYTE *targetName, PROPERTY **pList);
extern LWORD  EditExtra(THING *thing, BYTE *commandName, BYTE *cmd, BYTE *targetName, EXTRA **eList);

typedef struct SetListType {
  BYTE   *sName;
  ULWORD  sOffset;
  ULWORD  sSize;
  ULWORD  sArray;
  LWORD   sArraySize;
  BYTE    sType;
} SETLIST;

#define SET_NUMERIC(base,field)      ( ((ULWORD)&(field)) - ((ULWORD)&(base)) ) , sizeof(field), (ULWORD)NULL, 0,              '\0'
#define SET_FLAG(base, field, array) ( ((ULWORD)&(field)) - ((ULWORD)&(base)) ) , sizeof(field), (ULWORD)array,sizeof(*array), 'F'
#define SET_TYPE(base, field, array) ( ((ULWORD)&(field)) - ((ULWORD)&(base)) ) , sizeof(field), (ULWORD)array,sizeof(*array), 'T'
#define SET_PROPERTYINT(base,field)  ( ((ULWORD)&(field)) - ((ULWORD)&(base)) ) , 0,             (ULWORD)NULL, 0,              'I'
#define SET_PROPERTYSTR(base,field)  ( ((ULWORD)&(field)) - ((ULWORD)&(base)) ) , 0,             (ULWORD)NULL, 0,              'S'

/* Set Call */
extern  LWORD EditSet(THING *thing, BYTE *cmd, void *set, BYTE *setName, SETLIST *setList);

#define EDITSTR(thing, str, size, name, pref) EditStr(BaseControlFind(thing), &str, size, name, pref)
#define EDITFLAG(thing, flag, bit) EditFlag(BaseControlFind(thing), flag, bit)