home *** CD-ROM | disk | FTP | other *** search
/ QBasic & Borland Pascal & C / Delphi5.iso / C / Samples / CSAPE32.ARJ / INCLUDE / MENUDECL.H < prev    next >
C/C++ Source or Header  |  1990-09-07  |  12KB  |  361 lines

  1. /*
  2.     menudecl.h
  3.  
  4.     % public header for menu object
  5.  
  6.     written by stephen ng.
  7.  
  8.     C-scape 3.2
  9.     Copyright (c) 1986-1988, by Oakland Group, Inc.
  10.     ALL RIGHTS RESERVED.
  11.  
  12.     Revision History:
  13.     -----------------
  14.     11/16/86 sng    Changed some functions for variable-length fields.
  15.     12/18/86 jmd    Removed some extraneous comments and modified
  16.                     for new textbuf.
  17.      6/06/87 jmd    Added check for bad field numbers (later removed).
  18.      8/20/87 jmd    Added prototyping for functions without arguments
  19.      9/01/87 jmd     added NO_PROTO option
  20.     11/19/87 jmd     Got rid of menu_GetFieldFuncs
  21.      4/10/88 jmd     Got rid of menu_GetSize, added some macros
  22.                     added field moves and deletes
  23.      4/11/88 jmd    added scrollable fields
  24.      4/30/88 jmd    added buffer data to menu struct
  25.      5/09/88 jdc    added parens to some macros
  26.      5/11/88 jmd    added push/pull field funcs
  27.      6/23/88 jmd    removed menu generic data pointer
  28.      6/24/88 jmd    converted to new xarray/iarray calls
  29.      6/28/88 jdc    put #define DEF_COLOR in tbdecl.h
  30.      8/20/88 jmd    add list of screen objects
  31.      8/23/88 jmd    removed some TB commands and changed others
  32.                     added virtual size and dirty bit.
  33.      8/25/88 jdc    added -1 to menu_GetFieldLastCol()
  34.      9/19/88 jmd    added field name support
  35.      9/28/88 jmd    added menu create data
  36.     10/05/88 jmd    added sedptr to menu
  37.     11/05/88 jmd    added menu_Destroy, removed menu_Close and sedptr
  38.     11/28/88 jmd    reorganized headers
  39.     12/11/88 jmd    moved Find funcs to menupriv
  40.     12/14/88 jmd    field_get is now menu_GetField
  41.     12/15/88 jmd    added sedptr to menu (i mean it this time)
  42.      2/08/89 jdc    changed menu_MarkField to menu_SetMark (like field_SetMark)
  43.                     and added real menu_MarkField() (like sed_MarkField())
  44.      3/27/89 jdc    added the menu_GetSed() macro
  45.      3/31/89 jmd    added the menu_GetTextbuf() macro
  46.      4/24/89 jdc    added funcnamea for LNF
  47.      9/11/89 jmd    increased NAME_MAXLEN
  48.  
  49.     12/10/89 jmd    made create data private to menu.c
  50.     12/11/89 jmd    added field hilite macros
  51.      1/21/89 jdc    changed oslist macro (oslist_DelSym)
  52.      3/28/90 jmd    ansi-fied
  53.      8/22/90 jdc    made menu_RemoveName a function 
  54.      9/07/90 jmd    renamed oslist funcs
  55. */
  56.  
  57.  
  58. #define PCT_BUF_LEN        511        /* size of the percent buffer */
  59. #define NAME_MAXLEN         30        /* maximum size of a field name */
  60.  
  61. /* The menu type */
  62. typedef struct menu_struct {
  63.  
  64.     /* menu data */
  65.     int         rowcount;                  /* number of rows       */
  66.     int         colcount;                /* number of columns    */
  67.     unsigned      dirty:1;                /* size dirty bit        */
  68.  
  69.     int            vheight;                /* virtual height         */
  70.     int         vwidth;                    /* virtual width        */
  71.  
  72.     tb_type     textbuf;                /* text buffer             */
  73.  
  74.     xarray        fa;                        /* field xarray            */
  75.     int         fieldcount;                /* number of fields        */
  76.     iarray         fgrid;                    /* array of field rows    */
  77.  
  78.     iarray        boba;                    /* bob iarray            */
  79.     int            bobcount;                /* number of bob objects*/
  80.  
  81.     int             frowcount;                /* field rowcount */
  82.  
  83.     oslist_type    namelist;                /* field name list */
  84.     oslist_type    dptrlist;                /* field data pointer list */
  85.  
  86.     VOID        *varblock;                /* pointer to var memory */
  87.  
  88.        obj_type    sedptr;                    /* pointer to parent sed */
  89.  
  90.     /* state info for building the menu with menu_Printf */
  91.     int            mp_count;                /* number of times menu_Printf
  92.                                            called (for error messages) */
  93.     int         row;                    /* current location    */
  94.     int         col;
  95.     byte         color;                    /* current color    */
  96.     byte        old_color;                /* last color used    */
  97.  
  98.     /* buffers used by the menu */
  99.     char        *token_buf;                /* the token (& scratch) buffer */
  100.     int            token_size;                /* size of the token buffer */
  101.  
  102.     VOID       *create;                    /* creation data (a menu_create struct *) */
  103.  
  104.     iarray        funcnamea;                /* handles to function names for LNF */
  105.     iarray        varnamea;                /* handles to varible names for LNF */
  106.     iarray        functypea;                /* handles to function types for LNF */
  107.  
  108. } *menu_type;
  109.  
  110. /* -------------------------------------------------------------------------- */
  111. /* function prototypes */
  112. extern boolean    menu_Printf(menu_type menu, char *string, ...);
  113.  
  114. /* MENU.C */
  115. extern menu_type  menu_Open(void);
  116. extern void          menu_Flush(menu_type menu);
  117. extern field_type menu_GetField(menu_type menu, int fld);
  118.  
  119. /* MENUCFLD.C */
  120. extern int        menu_CopyField(menu_type dmenu, int row, int col, menu_type smenu, int fldno);
  121.  
  122. /* MENUDEST.C */
  123. extern void        menu_Destroy(menu_type menu);
  124.  
  125. /* MENUDFLD.C */
  126. extern void        menu_DeleteField(menu_type menu, int fieldno);
  127.  
  128. /* MENUDROW.C */
  129. extern void        menu_DeleteRows(menu_type menu, int row, int count);
  130.  
  131. /* MENUIROW.C */
  132. extern boolean  menu_InsertRows(menu_type menu, int row, int count);
  133.  
  134. /* MENUMFLD.C */
  135. extern void        menu_MoveField(menu_type menu, int fieldno, int row, int col);
  136.  
  137. /* MENUMRKF.C */
  138. extern void        menu_MarkField(menu_type menu, int fieldno, char reg, char sel);
  139.  
  140. /* MENUNAME.C */
  141. extern int        menu_AddName(menu_type menu, char *name, int fieldno);
  142. extern void        menu_SetFieldName(menu_type menu, int fieldno, char *name);
  143. extern int        menu_GetNameNo(menu_type menu, char *name);
  144. extern boolean    menu_RemoveFieldName(menu_type menu, int fld);
  145.  
  146. /* MENUPDPL.C */
  147. extern char    *menu_PutDPL(menu_type menu, char *s);
  148.  
  149. /* MENUPUTB.C */
  150. extern boolean      menu_putTB(menu_type menu,int row,int col,char *text,char chr,unsigned slen,byte color,byte old_color,int mode);
  151. extern menu_type    menu_ClearTB(menu_type menu);
  152.  
  153. /* MENUSFB.C */
  154. extern boolean  menu_SetFieldBob(menu_type menu, int fld, bob_type bob);
  155.  
  156. /* MENUSFLD.C */
  157. extern void        menu_SwapFields(menu_type menu, int fieldno_1, int fieldno_2);
  158.  
  159. /* MENUSIZE.C */
  160. extern void        menu_RecalcSize(menu_type menu);
  161.  
  162. /* MENUSORT.C */
  163. extern void        menu_Sort(menu_type menu);
  164.  
  165. /* MENUTB.C */
  166. extern boolean  menu_SetTB(menu_type menu, char *text, unsigned len);
  167.  
  168. /* MENUVARS.C */
  169. extern SIZE_T   menu_GetVarSize(menu_type menu, int fld);
  170.  
  171. /* MENUXFLD.C */
  172. extern void        menu_ExchangeFields(menu_type menu, int f1, int f2);
  173.  
  174. /* -------------------------------------------------------------------------- */
  175. /* macros */
  176.  
  177. /* For 2.0 compatibility */
  178. #define menu_Close(menu)
  179.  
  180. #define menu_GetFieldBox(menu, fldno, box)    \
  181.         field_GetBox(menu_GetField(menu, fldno), box)
  182.  
  183. #define menu_GetFieldRecord(menu, fieldno) \
  184.     field_GetRecord(menu_GetField(menu, fieldno))
  185.  
  186. #define menu_GetDataCount(menu, fieldno) \
  187.     field_GetDataCount(menu_GetField(menu, fieldno))
  188.  
  189. #define menu_GetRecordLen(menu, fieldno) \
  190.     field_GetRecordLen(menu_GetField(menu, fieldno))
  191.  
  192. #define menu_GetMergeLen(menu, fieldno) \
  193.     field_GetMergeLen(menu_GetField(menu, fieldno))
  194.  
  195. #define menu_GetFuncs(menu, fieldno) \
  196.     field_GetFuncs(menu_GetField(menu, fieldno))
  197.  
  198. #define menu_GetVar(menu, fieldno) \
  199.     field_GetVar(menu_GetField(menu, fieldno))
  200.  
  201. #define menu_GetFieldMerge(menu, fieldno) \
  202.     field_GetMerge(menu_GetField(menu, fieldno))
  203.  
  204. #define menu_GetFieldRow(menu, fieldno) \
  205.     field_GetRow(menu_GetField(menu, fieldno))
  206.  
  207. #define menu_GetFieldCol(menu, fieldno) \
  208.     field_GetCol(menu_GetField(menu, fieldno))
  209.  
  210. #define menu_GetFieldWidth(menu, fieldno) \
  211.     field_GetWidth(menu_GetField(menu, fieldno))
  212.  
  213. #define menu_GetFieldLastCol(menu, fieldno) \
  214.     (field_GetLastCol(menu_GetField(menu, fieldno)))
  215.  
  216. #define menu_GetFieldXoffset(menu, fieldno) \
  217.     field_GetXoffset(menu_GetField(menu, fieldno))
  218.  
  219. #define menu_GetFieldRight(menu, fieldno) \
  220.     field_GetRight(menu_GetField(menu, fieldno))
  221.  
  222. #define menu_GetFieldLeft(menu, fieldno) \
  223.     field_GetLeft(menu_GetField(menu, fieldno))
  224.  
  225. #define menu_GetGRow(menu, row) \
  226.     (ia_Get((menu)->fgrid, row))
  227.  
  228. #define menu_GetFieldGCol(menu, fieldno) \
  229.     field_GetGCol(menu_GetField(menu, fieldno))
  230.  
  231. #define menu_GetFieldData(menu, fieldno, datano) \
  232.     field_GetData(menu_GetField(menu, fieldno), datano)
  233.  
  234. #define menu_GetNextFieldPos(menu, fieldno, fieldpos) \
  235.     field_NextChar(menu_GetField(menu, fieldno), fieldpos)
  236.  
  237. #define menu_GetPrevFieldPos(menu, fieldno, fieldpos) \
  238.     field_PrevChar(menu_GetField(menu, fieldno), fieldpos)
  239.  
  240. #define menu_GetFirstFieldPos(menu, fieldno) \
  241.     field_FirstChar(menu_GetField(menu, fieldno))
  242.  
  243. #define menu_GetLastFieldPos(menu, fieldno) \
  244.     field_LastChar(menu_GetField(menu, fieldno))
  245.  
  246. #define    menu_IsProtected(menu, fieldno) \
  247.     field_GetProtected(menu_GetField(menu, fieldno))
  248.  
  249. #define    menu_IsMarked(menu, fieldno) \
  250.     field_GetMarked(menu_GetField(menu, fieldno))
  251.  
  252. #define    menu_IsHiCharOn(menu, fieldno) \
  253.     field_IsHiCharOn(menu_GetField(menu, fieldno))
  254.  
  255. #define menu_GetFieldRegAttr(menu, fieldno) \
  256.     field_GetRegAttr(menu_GetField(menu, fieldno))
  257.  
  258. #define menu_GetFieldSelAttr(menu, fieldno) \
  259.     field_GetSelAttr(menu_GetField(menu, fieldno))
  260.  
  261. #define menu_GetR2M(menu, fieldno, fieldpos) \
  262.     field_GetR2M(menu_GetField(menu, fieldno), fieldpos)
  263.  
  264. #define menu_GetFieldCount(menu)     ((menu)->fieldcount)
  265. #define menu_GetRow(menu)             ((menu)->row)
  266. #define menu_GetCol(menu)             ((menu)->col)
  267.  
  268. #define menu_GetTextbuf(menu)         ((menu)->textbuf)
  269.  
  270. #define menu_SetChar(menu, fieldno, fieldpos, c) \
  271.     field_SetChar(menu_GetField(menu, fieldno), fieldpos, (char) c)
  272.  
  273. #define menu_SetRecord(menu, fieldno, s) \
  274.     field_SetString(menu_GetField(menu, (fieldno)), s)
  275.  
  276. #define menu_SetVar(menu, fieldno, var) \
  277.     field_SetVar(menu_GetField(menu, fieldno), var)
  278.  
  279. #define menu_SetFuncs(menu, fieldno, funcs) \
  280.     field_SetFuncs(menu_GetField(menu, fieldno), funcs)
  281.  
  282. #define menu_SetFieldData(menu, fieldno, datano, data) \
  283.     field_SetData(menu_GetField(menu, fieldno), datano, data)
  284.  
  285. #define menu_ProtectField(menu, fieldno, flag) \
  286.     field_SetProtected(menu_GetField(menu, fieldno), flag)
  287.  
  288. #define menu_SetHiChar(menu, fieldno, no) \
  289.     field_SetHiChar(menu_GetField(menu, fieldno), no)
  290.  
  291. #define menu_GetHiChar(menu, fieldno) \
  292.     field_GetHiChar(menu_GetField(menu, fieldno))
  293.  
  294. #define menu_SetMark(menu, fieldno, flag) \
  295.     field_SetMarked(menu_GetField(menu, fieldno), flag)
  296.  
  297. #define menu_GetScratchPad(menu)     ((menu)->token_buf)
  298. #define menu_GetScratchSize(menu)     ((menu)->token_size)
  299.  
  300. #define menu_PullLeft(menu, fieldno, fpos) \
  301.     field_PullLeft(menu_GetField(menu, fieldno), fpos)
  302.  
  303. #define menu_PullRight(menu, fieldno, fpos) \
  304.     field_PullRight(menu_GetField(menu, fieldno), fpos)
  305.  
  306. #define menu_PushLeft(menu, fieldno, fpos, x) \
  307.     field_PushLeft(menu_GetField(menu, fieldno), fpos, x)
  308.  
  309. #define menu_PushRight(menu, fieldno, fpos, x) \
  310.     field_PushRight(menu_GetField(menu, fieldno), fpos, x)
  311.  
  312. #define menu_SetDirty(menu, d)    ((menu)->dirty = (d))
  313.  
  314. #define menu_IsDirty(menu)        ((menu)->dirty)
  315.  
  316. #define menu_GetRowCount(menu)        \
  317.     (((menu)->rowcount > (menu)->frowcount) ? (menu)->rowcount : (menu)->frowcount)
  318. #define menu_GetColCount(menu)        \
  319.     ((menu)->colcount)
  320.  
  321. #define menu_GetHeight(menu)    \
  322.     (menu_IsDirty(menu) ? (menu_RecalcSize(menu), menu_GetRowCount(menu)) : menu_GetRowCount(menu))
  323.  
  324. #define menu_GetWidth(menu)    \
  325.     (menu_IsDirty(menu) ? (menu_RecalcSize(menu), menu_GetColCount(menu)) : menu_GetColCount(menu))
  326.  
  327.  
  328.  
  329. #define menu_GetWrapWidth(menu)        tb_GetWrapWidth((menu)->textbuf)
  330. #define menu_SetWrapWidth(menu, w)    \
  331.         (tb_SetWrapWidth((menu)->textbuf, (w)), menu_SetDirty(menu, TRUE))
  332.  
  333. #define menu_GetTabSize(menu)        tb_GetTabSize((menu)->textbuf)
  334. #define menu_SetTabSize(menu, t)    \
  335.         (tb_SetTabSize((menu)->textbuf, (t)), menu_SetDirty(menu, TRUE))
  336.  
  337. #define menu_GetSed(menu)            (sed_type)(menu->sedptr)
  338.  
  339. /* name macros */
  340.  
  341. #define    menu_GetFieldNameNo(menu, fieldno) \
  342.         field_GetNameNo(menu_GetField(menu, fieldno))
  343.  
  344. #define    menu_SetFieldNameNo(menu, fieldno, nameno) \
  345.         field_SetNameNo(menu_GetField(menu, fieldno), nameno)
  346.  
  347. #define menu_GetFieldName(m, f) \
  348.         oslist_GetSym((m)->namelist, menu_GetFieldNameNo(m, f))
  349.  
  350. #define    menu_CloseNameList(m)     oslist_Close((m)->namelist)
  351.  
  352. /* bob macros */
  353.  
  354. #define menu_GetFieldBob(menu, fldno)    field_GetBob(menu_GetField(menu, fldno))
  355.  
  356. /* LNF macros */
  357.  
  358. #define menu_SetFuncNameA(menu, a)     (menu->funcnamea = (a))
  359. #define menu_GetFuncNameA(menu)     (menu->funcnamea)
  360.  
  361.