/*

   Example
      vsDllExport("_command void proc1(int i,VSPSZ i,VSHVAR x)",0,0);

   Syntax:

   [_command] [return-type] func-name([type [var-name] [,type [var-name]...])

   type
      VSPVOID        Pointer to something  Slick-C can't call this.
      VSPSZ          NULL terminated string
      VSPLSTR        See typedef below.
      int
      long
      VSHVAR           Handle to interpreter variable
      VSHREFVAR        Call by reference handle to interpreter variable.
                       This type can be used as input to functions which
                       accept VSHVAR parameters.

   return-type may be one of the following
      VSPSZ
      VSPLSTR
      int
      long
      void

   Performance considerations:

      For best performance, use the VSHVAR or VSREFVAR param-type when
      operating on long strings instead of VSPSZ or VSPLSTR.  Then
      use the "vsHvarGetLstr" function to return a pointer to the
      interpreter variable. WARNING:  Pointers to interpreter variables
      returned by the vsHvarGetLstr function are NOT VALID after any
      interpreter variable is set.  Be sure to reset any pointer after
      setting other interpreter variables or calling other macros.
      You may modify the contents of the VSPLSTR pointer returned by
      vsHvarGetLstr so long as you do not make the string any longer.

      We suspect that using the int and long parameter types are no
      slower than using the VSHVAR type and converting the parameter yourself.
*/
#ifndef VSAPI_H
#define VSAPI_H

#if  defined(OS2386APP)
   #define INCL_DEV
   #define INCL_WIN
   #define INCL_GPI
   #define INCL_GPILCIDS
   #define INCL_WINPOINTERS
   #define INCL_GPILOGCOLORTABLE
   #define INCL_WINSYS
   #define INCL_DOSPROCESS
   #define INCL_ERRORS
   #include <os2.h>

   #define VSAPI _System
   #define VSUNIX  0
   #define VSOS2   1
   #define VSNT    0
#elif defined(WIN32)
   #ifndef _WINDOWS_
      #include <windows.h>
      #include <windowsx.h>
   #endif
   #define VSAPI  __stdcall
   #define VSUNIX  0
   #define VSOS2   0
   #define VSNT    1
#else
   #define VSAPI
   #define VSUNIX  1
   #define VSOS2   0
   #define VSNT    0
#endif

#include <rc.h>

#define VSMAXLSTR  1024
  typedef struct {
     int len;
     unsigned char str[VSMAXLSTR];
  } VSLSTR, *VSPLSTR;

#if !defined(VSXLATDLLNAMES)
   #define VSNOXLATDLLNAMES
#else
   #undef VSNOXLATDLLNAMES
#endif

#define HVAR   int
#define VSHVAR  int
#define VSHREFVAR VSHVAR
//typedef void *VSPVOID;
//typedef char *VSPSZ;

#define VSPVOID void *
#define VSPSZ char *

extern "C" {

#define VSOI_MDI_FORM          1
#define VSOI_FORM              2
#define VSOI_TEXT_BOX          3
#define VSOI_CHECK_BOX         4
#define VSOI_COMMAND_BUTTON    5
#define VSOI_RADIO_BUTTON      6
#define VSOI_FRAME             7
#define VSOI_LABEL             8
#define VSOI_LIST_BOX          9
#define VSOI_HSCROLL_BAR       10
#define VSOI_VSCROLL_BAR       11
#define VSOI_COMBO_BOX         12
#define VSOI_HTHELP            13
#define VSOI_PICTURE_BOX       14
#define VSOI_IMAGE             15
#define VSOI_GAUGE             16
#define VSOI_SPIN              17
#define VSOI_MENU              18
#define VSOI_MENU_ITEM         19
#define VSOI_TREE_VIEW         20
#define VSOI_SSTAB             21
#define VSOI_DESKTOP           22
#define VSOI_SSTAB_CONTAINER   23
#define VSOI_EDITOR            24

#define VSSC_SIZE         0xF000
#define VSSC_MOVE         0xF010
#define VSSC_MINIMIZE     0xF020
#define VSSC_MAXIMIZE     0xF030
#define VSSC_NEXTWINDOW   0xF040
#define VSSC_PREVWINDOW   0xF050
#define VSSC_CLOSE        0xF060
#define VSSC_RESTORE      0xF120

// RefreshFlags
#define VSREFRESH_BUFNAME    0x0002
#define VSREFRESH_MODENAME   0x0004
#define VSREFRESH_READONLY   0x0008
#define VSREFRESH_LINE       0x0010
#define VSREFRESH_COL        0x0020
#define VSREFRESH_INSERTMODE 0x10000
#define VSREFRESH_RECORDING  0x20000


#define VSSTATUSFLAG_READONLY    0x0001
#define VSSTATUSFLAG_INSERTMODE  0x0002
#define VSSTATUSFLAG_RECORDING   0x0004

#define VSNULLSEEK      0x7fffffffl

#define VSRC_HVAR  1


#define VSP_CANCEL              0   /* boolean*/
#define VSP_DEFAULT             1   /* boolean*/
#define VSP_ENABLED             2   /* boolean*/
#define VSP_FONTBOLD            3   /* boolean*/
#define VSP_FONTITALIC          4   /* boolean*/
#define VSP_FONTSIZE            5   /* boolean*/
#define VSP_FONTSTRIKETHRU      6   /* boolean*/
/* #define                       7 */
#define VSP_FONTUNDERLINE       8   /* boolean*/
#define VSP_MAXBUTTON           9   /* boolean*/
#define VSP_MINBUTTON           10  /* boolean*/
#define VSP_VISIBLE             11  /* boolean*/
#define VSP_TABSTOP             12  /* boolean*/
#define VSP_CONTROLBOX          13  /* boolean*/
/* #define                       14 */ /* boolean*/
#define VSP_STYLE               15   /* int */
#define VSP_BORDERSTYLE         16   /* int */
#define VSP_DRAWSTYLE           17   /* int */
#define VSP_SCROLLBARS          18   /* int */
#define VSP_MULTISELECT         19   /* int */
#define VSP_INITSTYLE           20   /* int */
/* #define                       21 */
#define VSP_ALIGNMENT           22   /* int */
#define VSP_WINDOWSTATE         23   /* string. */
#define VSP_MOUSEPOINTER        24   /* int */
#define VSP_INITINFO            25   /* int */
#define VSP_VALIDATEINFO        26   /* int */
#define VSP_EVENTTAB            27   /* int */
#define VSP_NAME                28   /* string */
#define VSP_CAPTION             29   /* string */
#define VSP_FONTNAME            30   /* string. */
#define VSP_BACKCOLOR           31   /* int */
/* #define                         32 *//* int */
#define VSP_DRAWMODE            33   /* int */
#define VSP_DRAWWIDTH           34   /* int */
#define VSP_FORECOLOR           35   /* int */
#define VSP_HEIGHT              36   /* int */
#define VSP_INTERVAL            37   /* int */
#define VSP_TABINDEX            38   /* int */
#define VSP_WIDTH               39   /* int */
#define VSP_X                   40   /* int */
#define VSP_Y                   41   /* int */
#define VSP_VALUE               42   /* int */
#define VSP_INFROMLEFT          43   /* int */
#define VSP_DOWNFROMTOP         44   /* int */
#define VSP_INFROMRIGHT         45   /* int */
#define VSP_UPFROMBOTTOM        46   /* int */
#define VSP_SCALEMODE           47   /* int */
#define VSP_X1                  48   /* int */
#define VSP_Y1                  49   /* int */
#define VSP_X2                  50   /* int */
#define VSP_Y2                  51   /* int */
#define VSP_TEXT                52   /* string */
#define VSP_PICPOINTSCALE       53   /* int */
#define VSP_AFTERPICINDENTX     54   /* int */
#define VSP_PICSPACEY           55   /* int */
#define VSP_PICINDENTX          56   /* int */
#define VSP_PICTURE             57   /* int */
#define VSP_CBACTIVE            58   /* int */
#define VSP_STRETCH             59   /* boolean */
#define VSP_FONTPRINTER         60   /* boolean */
#define VSP_AUTOSIZE            61   /* boolean */
#define VSP_CBPICTURE           62   /* int */
#define VSP_CBLISTBOX           63   /* int */
#define VSP_CBTEXTBOX           64   /* int */
#define VSP_CB                  65   /* int */
#define VSP_OBJECT              66   /* string*/
#define VSP_CHILD               67   /* int */
#define VSP_NEXT                68   /* int */
#define VSP_CLIPCONTROLS        69   /* boolean */
#define VSP_WORDWRAP            70   /* boolean */
#define VSP_ADEFAULT            71   /* boolean */
#define VSP_EDIT                72   /* boolean */
#define VSP_SELECTED            73   /* boolean */
#define VSP_OBJECTMODIFY        74   /* boolean */
#define VSP_FILLSTYLE           75   /* int */
#define VSP_EVENTTAB2           76   /* int */
#define VSP_MIN                 77   /* int */
#define VSP_MAX                 78   /* int */
#define VSP_LARGECHANGE         79   /* int */
#define VSP_SMALLCHANGE         80   /* int */
#define VSP_DELAY               81   /* int */
#define VSP_CBEXTENDEDUI        82   /* boolean */
#define VSP_NOFSTATES           83   /* int */
#define VSP_ACTIVEFORM          84   /* int */
#define VSP_TEMPLATE            85   /* int */
#define VSP_COMPLETION          86   /* string */
#define VSP_MAXCLICK            87   /* int */
#define VSP_NOFSELECTED         88   /* int */
#define VSP_AUTOSELECT          89   /* boolean */
#define VSP_INCREMENT           90   /* int */
#define VSP_PREV                91   /* int */
#define VSP_COMMAND             92   /* string */
#define VSP_MESSAGE             93   /* string */
#define VSP_CATEGORIES          94   /* string */
#define VSP_CHECKED             95   /* boolean */


#define VSP_TILEID               100  /* int */
#define VSP_WINDOWFLAGS          101  /* int */
#define VSP_VSBBYTEDIVS          102  /* int */
#define VSP_WINDOWID             103  /* int */
#define VSP_LEFTEDGE             104  /* int */
#define VSP_CURSORX              105  /* int */
#define VSP_CURSORY              106  /* int */
#define VSP_LINE                 107  /* int */
#define VSP_NOFLINES             108  /* int */
#define VSP_COL                  109  /* int */
#define VSP_BUFNAME              110  /* string */
#define VSP_MODIFY               111  /* int */
#define VSP_BUFID                112  /* int */
#define VSP_MARGINS              113  /* string */
#define VSP_TABS                 114  /* string */
#define VSP_MODENAME             115  /* string */
#define VSP_BUFWIDTH             116  /* int */
#define VSP_WORDWRAPSTYLE        117  /* int */
#define VSP_SHOWTABS             118  /* int */
#define VSP_INDENTWITHTABS       119  /* boolean */
#define VSP_BUFFLAGS             120  /* int */
#define VSP_NEWLINE              121  /* string */
#define VSP_UNDOSTEPS            122  /* int */
#define VSP_INDEX                123  /* int */
#define VSP_BUFSIZE              124  /* int */
#define VSP_CHARHEIGHT           125  /* int */
#define VSP_CHARWIDTH            126  /* int */
#define VSP_VSBMAX               127  /* int */
#define VSP_HSBMAX               128  /* int */
#define VSP_FONTHEIGHT           129  /* int */
#define VSP_FONTWIDTH            130  /* int */
#define VSP_CLIENTHEIGHT         131  /* int */
#define VSP_CLIENTWIDTH          132  /* int */
#define VSP_OLDX                 133  /* int */
#define VSP_OLDY                 134  /* int */
#define VSP_OLDWIDTH             135  /* int */
#define VSP_OLDHEIGHT            136  /* int */
#define VSP_ONEVENT              137  /* int */
#define VSP_SELLENGTH            138  /* int */
#define VSP_SELSTART             139  /* int */
#define VSP_CURRENTX             140  /* int */
#define VSP_CURRENTY             141  /* int */
#define VSP_PARENT               142  /* int */
#define VSP_MDICHILD             143  /* int */
#define VSP_WINDENTX             144  /* int */
#define VSP_FIXEDFONT            145  /* int */
#define VSP_RELLINE              146  /* int */
#define VSP_SCROLLLEFTEDGE       147  /* int */
#define VSP_DISPLAYXLAT          148  /* string */
#define VSP_UNDOVISIBLE          149  /* int */
#define VSP_MODAL                150  /* int */
#define VSP_NOFWINDOWS           151  /* int */
#define VSP_USER                 152  /* string */
#define VSP_USER2                153  /* string */
#define VSP_NOSELECTCOLOR        154  /* boolean */
#define VSP_VIEWID               155  /* int */
#define VSP_INDENTSTYLE          156  /* int */
#define VSP_MODEEVENTTAB         157  /* int */
#define VSP_XYSCALEMODE          158  /* int */
#define VSP_XYPARENT             159  /* int */
#define VSP_BUTTONBAR            160  /* int */
#define VSP_ISBUTTONBAR          161  /* int */
#define VSP_MENUHANDLE           163  /* int */
#define VSP_FILEDATE             164  /* string */
#define VSP_REDRAW               165  /* boolean */
#define VSP_WORDCHARS            166  /* string */
#define VSP_LEXERNAME            167  /* string */
#define VSP_BUSER                168  /* string */
#define VSP_COLORFLAGS           169  /* int */
#define VSP_HWND                 170  /* long */
#define VSP_HWNDFRAME            171  /* long */



#define VSP_BINARY              172   /* boolean */
#define VSP_SHOWEOF             173   /* boolean */
//#define I_SHOWNLCHARS         174
#define VSP_READONLYMODE       175    /* boolean */
#define VSP_HEXNIBBLE          176    /* boolean */
#define VSP_HEXMODE            177    /* boolean */
#define VSP_HEXFIELD           178    /* int */
#define VSP_HEXNOFCOLS         179    // int
#define VSP_HEXTOPPAGE         180    // int
#define VSP_NOFHIDDEN          181    // int
#define VSP_LINENUMBERSLEN     182    // int
#define VSP_READONLYSETBYUSER  183    // boolean

#define VSP_WINDENT_Y          184    // int
#define VSP_NOFSELDISPBITMAPS  185    // int
#define VSP_LINESTYLE          186    // int
#define VSP_LEVELINDENT        187    // int
#define VSP_SPACEY             188    // int
#define VSP_EXPANDPICTURE      189    // int
#define VSP_COLLAPSEPICTURE    190    // int
#define VSP_SHOWROOT           191    // int
//#define VSP_CHECKLISTBOX       192    not supported


//#define VSP_PASSWORD            198   not supported
#define VSP_READONLY            199   // boolean
#define VSP_SHOWSPECIALCHARS    200   // int
#define VSP_MOUSEACTIVATE       201   // int
#define VSP_MODIFYFLAGS         202   // int
#define VSP_OLDLINENUMBER       203   // int
#define VSP_NOFNOSAVE           204   // int
#define VSP_CAPTIONCLICK        205   // boolean
#define VSP_RLINE               206   // int
#define VSP_RNOFLINES           207   // int


// SSTab properties
#define VSP_ACTIVETAB           208   // int
#define VSP_ORIENTATION         209   // int
#define VSP_TABSPERROW          210   // int
#define VSP_MULTIROW            211   // boolean
#define VSP_NOFTABS             212   // int
#define VSP_ACTIVEORDER         213   // int
#define VSP_ACTIVECAPTION       214   // int
#define VSP_ACTIVEPICTURE       215   // int
#define VSP_ACTIVEHELP          216   // string
#define VSP_RBUFSIZE            217   // int
#define VSP_ACTIVEENABLED       218   // boolean
#define VSP_PICTUREONLY         219   // boolean
#define VSP_SOURCERECORDING     220   // boolean

/* Completion arguments */
    /* "!" indicates last argument. */
#define VSMORE_ARG     "*"      /* Indicate more arguments. */
#define VSWORD_ARG     "w"      /* Match what was typed. */
#define VSFILE_ARG     "f:18"   /* Match one file. 18=FILE_CASE_MATCH|AUTO_DIR_MATCH*/
#define VSMULTI_FILE_ARG  FILE_ARG'*'
#define VSBUFFER_ARG     "b:2"    /* Match buffer. */
#define VSCOMMAND_ARG    "c"
#define VSPICTURE_ARG    "_pic"
#define VSFORM_ARG       "_form"
#define VSOBJECT_ARG     "_object"
#define VSMODULE_ARG     "m"
#define VSPC_ARG         "pc"     /* look for procedure or command . */
                      /* look Slick-C tag cmd,proc,form */
#define VSMACROTAG_ARG   "mt:8"   /* Any find-proc item. 8=REMOVE_DUPS_MATCH */
#define VSMACRO_ARG      "k"      /* Recorded macro command. */
#define VSPCB_TYPE_ARG   "pcbt"   /* list proc,command, and built-in types. */
#define VSVAR_ARG        "v"      /* look for variable. Global vars not included.*/
#define VSENV_ARG        "e"      /* look for environment variables. */
#define VSMENU_ARG       "_menu"
#define VSHELP_ARG       "h:37" /* (TERMINATE_MATCH|ONE_ARG_MATCH|NO_SORT_MATCH) */
   /* Match tag used by push-tag command. */
#define VSTAG_ARG        "tag:37" /* (REMOVE_DUPS_MATCH|NO_SORT_MATCH|TERMINATE_MATCH) */



#define VSNCW_ARG2      0x1    // Command allowed when there are no MDI child windows.
#define VSICON_ARG2     0x2    // Command allowed when active window is icon.
#define VSCMDLINE_ARG2  0x4    // Command allowed/operates on command line.
#define VSMARK_ARG2     0x8    // ON_SELECT psuedo event should pass control on
                               // to this command and not deselect text first.
#define VSREAD_ONLY_ARG2 0x10  // Command is allowed in read-only mode
#define VSQUOTE_ARG2     0x40  // Indicates that this command must be quoted when
                               // called during macro recording.  Needed only if
                               // command name is an invalid identifier or
                               // keyword.
#define VSLASTKEY_ARG2  0x80   // Command requires last_event value to be set
                               // when called during macro recording.
#define VSMACRO_ARG2     0x100      // This is a recorded macro command. Used for completion.
#define VSHELP_ARG2      0x200      // Not used. Here for backward compatibility.
#define VSHELPSALL_ARG2  0x400      // Not used. Here for backward compatibility.
#define VSTEXT_BOX_ARG2  0x800      // function operates on text box control.
#define VSNOEXIT_SCROLL_ARG2 0x1000 // Do not exit scroll caused by using scroll bars.
#define VSEDITORCTL_ARG2   0x2000   // Command allowed in editor control.

/* name_type flags. */
#define VSPROC_TYPE      0x1
#define VSVAR_TYPE       0x4
#define VSEVENTTAB_TYPE  0x8
#define VSCOMMAND_TYPE   0x10
#define VSGVAR_TYPE      0x20
#define VSGPROC_TYPE     0x40
#define VSMODULE_TYPE    0x80
#define VSPICTURE_TYPE   0x100
#define VSBUFFER_TYPE    0x200
#define VSOBJECT_TYPE    0x400
#define VSOBJECT_MASK    0xf800
#define VSOBJECT_SHIFT   11
#define VSINFO_TYPE      0x10000
#define VSMISC_TYPE      0x20000000
#define DLLCALL_TYPE     0x40000   /* Entries with this flag MUST also have the
                                  COMMAND_TYPE or PROC_TYPE flag. */
#define DLLMODULE_TYPE   0x80000
#define VSBUILT_IN_TYPE  0x40000000


#define VSHIDDEN_VIEWID -9
// p_buf_flags
#define VSHIDE_BUFFER        0x1  /* NEXT_BUFFER won't switch to this buffer */
#define VSTHROW_AWAY_CHANGES 0x2  /* Allow quit without prompting on modified buffer */
#define VSKEEP_ON_QUIT 0x4  /* Don't delete buffer on QUIT.  */
#define VSREVERT_ON_THROW_AWAY 0x10
#define VSPROMPT_REPLACE_BFLAG 0x20
#define VSDELETE_BUFFER_ON_CLOSE 0x40   /* Indicates whether a list box/ */

// Predefined object handles

#define VSWID_DESKTOP       1
#define VSWID_APP           2
#define VSWID_MDI           3
#define VSWID_CMDLINE       4
#define VSWID_HIDDEN        5

// VSP_WINDOWFLAGS
#define VSWINDOWFLAG_HIDDEN  0x1


#define VSSELECT_INCLUSIVE     0x1
#define VSSELECT_NONINCLUSIVE  0x2
#define VSSELECT_CURSOREXTENDS 0x4
#define VSSELECT_BEGINEND      0x8
#define VSSELECT_PERSISTENT    0x10


#define VSSELECT_LINE   1
#define VSSELECT_CHAR   2
#define VSSELECT_BLOCK  4
// Only supported by vsSetSelectType
#define VSSELECT_NONINCLUSIVEBLOCK 8


#define VSOPTION_WARNING_ARRAY_SIZE    1
#define VSOPTION_WARNING_STRING_LENGTH 2
#define VSOPTION_VERTICAL_LINE_COL     3
#define VSOPTION_WEAK_ERRORS           4
#define VSOPTION_MAXIMIZE_FIRST_MDICHILD  5
#define VSOPTION_MAXTABCOL             6
#define VSOPTION_CURSOR_BLINK          7
#define VSOPTION_DISPLAY_TEMP_CURSOR   8
#define VSOPTION_LEFT_MARGIN           9
#define VSOPTION_DISPLAY_TOP_OF_FILE   10
#define VSOPTION_HORIZONTAL_SCROLL_BAR 11
#define VSOPTION_VERTICAL_SCROLL_BAR   12
#define VSOPTION_HIDE_MOUSE            13
#define VSOPTION_ALT_ACTIVATES_MENU    14
#define VSOPTION_DRAW_BOX_AROUND_CURRENT_LINE 15
#define VSOPTION_MAX_MENU_FILENAME_LEN 16
#define VSOPTION_PROTECT_READONLY_MODE 17
#define VSOPTION_PROCESS_BUFFER_CR_ERASE_LINE 18
#define VSOPTION_ENABLE_FONT_FLAGS     19
#define VSOPTION_APIFLAGS              20
#define VSOPTION_HAVECMDLINE           21
#define VSOPTION_QUIET                 22
#define VSOPTION_SHOWTOOLTIPS          23
#define VSOPTION_TOOLTIPDELAY          24

#define VSOPTIONZ_PAST_EOF               1000
#define VSOPTIONZ_SPECIAL_CHAR_XLAT_TAB  1001

   #define VSSPECIALCHAR_EOLCH1  0
   #define VSSPECIALCHAR_EOLCH2  1
   #define VSSPECIALCHAR_TAB     2
   #define VSSPECIALCHAR_SPACE   3
   #define VSSPECIALCHAR_VIRTUALSPACE 4
   #define VSSPECIALCHAR_EOF     5

   #define VSSPECIALCHAR_MAX     20

int VSAPI vsLoadFiles(int wid,VSPSZ pszCmdline);
int VSAPI vsGetText(int wid,int Nofbytes,long seekpos,VSPSZ pszBuf);
int VSAPI vsGetLine(int wid,VSPSZ pszBuf,int BufLen);
int VSAPI vsDeleteLine(int wid);
void VSAPI vsInsertLine(int wid,char *pBuf,int BufLen);
void VSAPI vsReplaceLine(int wid,char *pBuf,int BufLen);
void VSAPI vsMessage(VSPSZ psz);
void VSAPI vsTop(int wid);
void VSAPI vsBottom(int wid);
int VSAPI vsDown(int wid,int Noflines);
int VSAPI vsUp(int wid,int Noflines);
int VSAPI vsActivateView(int view_id);
int VSAPI vsQLineLength(int wid,int IncludeNLChars);
int VSAPI vsAllocSelection(int AllocBookmark);
int VSAPI vsFreeSelection(int markid);

int VSAPI vsDeselect(int markid=(-1));
int VSAPI vsSelectLine(int wid,int markid=-1,int SelectFlags=0);
int VSAPI vsSelectChar(int wid,int markid=-1,int SelectFlags=0);
int VSAPI vsSelectBlock(int wid,int markid=-1,int SelectFlags=0);
void VSAPI vsCopyToCursor(int wid,int markid=-1,int MustBeMinusOne=(-1));

// pszOptions--> Start an undo step/Record Macro Source/Do refresh/Async shell
// This default options are great for Menu Items and Tool bar
// buttons.  Don't use SMD options in the middle of a macro.
long VSAPI vsExecute(int wid,VSPSZ pszCommand,VSPSZ pszOptions="SMDA");

int VSAPI vsQTextWidth(int wid,char *pText,int TextLen);
int VSAPI vsColWidthGet(int wid,int i,int *pwidth);
int VSAPI vsColWidthSet(int wid,int i,int width);
int VSAPI vsColWidthClear(int wid);

#define VSTREE_ADD_BEFORE     0x1 /* Add a node before sibling in order */
#define VSTREE_ADD_AS_CHILD   0x2
//These sort flags cannot be used in combination with each other
#define VSTREE_ADD_SORTED_CS       0x4
#define VSTREE_ADD_SORTED_CI       0x8
#define VSTREE_ADD_SORTED_FILENAME 0x10

int VSAPI vsTreeSetUserInfo(int wid,int iHandle,VSHVAR hvar);
int VSAPI vsTreeAddItem(int wid,int  iRelativeIndex,VSPSZ pszCaption,int  iFlags,
                        int  iCollapsedBMIndex,int  iExpandedBMIndex,
                        int  iState);
#define VSCOLORINDEX unsigned char

VSCOLORINDEX VSAPI vsAllocColor(int wid);
void VSAPI vsFreeColor(int wid,VSCOLORINDEX ColorIndex);
void VSAPI vsSetTextColor(int wid,VSCOLORINDEX *pColor,int ColorLen);
void VSAPI vsGetTextColor(int wid,VSCOLORINDEX *pColor,int ColorLen);


#define VSCFG_SELECTION          1
#define VSCFG_WINDOW_TEXT        2
#define VSCFG_CLINE              3
#define VSCFG_SELECTED_CLINE     4
#define VSCFG_MESSAGE            5
#define VSCFG_STATUS             6
#define VSCFG_CMDLINE            7
#define VSCFG_CURSOR             8
//VSCFG_CMDLINE_SELECT   = 9
//VSCFG_LIST_BOX_SELECT  = 10
//VSCFG_LIST_BOX         = 11
//VSCFG_ERROR
#define VSCFG_MODIFIED_LINE       13
#define VSCFG_INSERTED_LINE       14
//G_INSERTED_LINE      =15
//G_INSERTED_LINE      =16
#define VSCFG_KEYWORD             17
#define VSCFG_LINENUM             18
#define VSCFG_NUMBER              19
#define VSCFG_STRING              20
#define VSCFG_COMMENT             21
#define VSCFG_PPKEYWORD           22
#define VSCFG_SYMBOL1             23
#define VSCFG_SYMBOL2             24
#define VSCFG_SYMBOL3             25
#define VSCFG_SYMBOL4             26
#define VSCFG_IMAGINARY_LINE      27
#define VSCFG_NOSAVE_LINE         27
#define VSCFG_FUNCTION            28
#define VSCFG_FILENAME            30
#define VSCFG_HILIGHT             31

#define  VSFONTFLAG_BOLD    0x1
#define  VSFONTFLAG_ITALIC  0x2
#define  VSFONTFLAG_STRIKE_THRU 0x4
#define  VSFONTFLAG_UNDERLINE   0x8
#define  VSFONTFLAG_PRINTER     0x200
void VSAPI vsDeleteSelection(int wid,int markid,int Reserved=-1);
int VSAPI vsDuplicateSelection(int wid,int markid);
void VSAPI vsShowSelection(int markid);
void VSAPI vsExpandTabsC(int wid,
                   VSPSZ pszDest,
                   int *pDestLen,
                   int StartCol,
                   int ColWidth,
                   char Option);
int VSAPI vsTextColC(int wid,int col,char option='L');
int VSAPI vsSetSelectType(int markid,int type,char option='L' /* T L */);
int VSAPI vsQSelectType(int markid= -1,char option='T' /* T S P I U W*/);
long VSAPI vsQROffset(int wid);
int VSAPI vsGoToROffset(int wid,long offset);
int VSAPI vsGetText2(int wid,int Nofbytes,long point,VSPSZ pszBuf,int *pNofbytesRead=0);
void VSAPI vsGoToOldLineNumber(int wid,int OldLineNum,int Reserved=1);
void VSAPI vsSetAllOldLineNumbers(int wid,int Reserved=1);
int VSAPI vsDeleteText(int wid,int DelLen,char option=0);
int VSAPI vsInsertText(int wid,char *pBuf,int BufLen=-1,int Binary=0,unsigned char NLCh1='\r',unsigned char NLCh2='\n');

int VSAPI vsGoToPoint(int wid,long Point,long DownCount=0,int LineNum=(-1));
void VSAPI vsQPoint(int wid,long *pPoint,long *pDownCount,char Option='P');
long VSAPI vsQOffset(int wid);

int VSAPI vsSearch(int wid,VSPSZ pszSearchString,VSPSZ pszOptions=0,VSPSZ pszReplaceString=0,int *pNofchanges=0);
int VSAPI vsRepeatSearch(int wid,VSPSZ pszOptions=0,int StartCol=0);

#ifndef COMMENTINFOMASK_LF
   #define COMMENTINFOMASK_LF 0x1f
   #define NOSAVE_LF         0x00000040   //Display this line in no save color
   #define VIMARK_LF         0x00000080   //Used by VImacro to mark lines
   //#define UNDOMASK_LF     (COMMENTINFOMASK_LF|ALLDEBUGBITMAPS_LF)
   // Line flags below likely to be saved in file.
   #define MODIFY_LF         0x00000100   //Line has been modified
   #define INSERTED_LINE_LF  0x00000200   //Line was inserted
   #define HIDDEN_LF         0x00000400
   #define MINUSBITMAP_LF    0x00000800
   #define PLUSBITMAP_LF     0x00001000
   #define BREAKPOINTBITMAP_LF  0x00002000
   #define EXECPOINTBITMAP_LF   0x00004000
   #define STACKEXECBITMAP_LF         0x00008000
   #define BREAKPOINTNOTACTIVEBITMAP_LF  0x00010000
   #define ALLDEBUGBITMAPS_LF     (BREAKPOINTBITMAP_LF|EXECPOINTBITMAP_LF|STACKEXECBITMAP_LF|BREAKPOINTNOTACTIVEBITMAP_LF)
   #define vsDebugBitmapIndex(bl_flags)  (((bl_flags) & ALLDEBUGBITMAPS_LF)>>13)
   #define LEVEL_LF             0x007E0000
   #define NEXTLEVEL_LF         0x00020000
   #define LINEFLAGSMASK_LF     0x007fffff

   #define vsLevelIndex(bl_flags)  (((bl_flags) & LEVEL_LF)>>17)
   #define vsIndex2Level(level)   ((level)<<17)
#endif
int VSAPI vsQLineFlags(int wid);
void VSAPI vsSetLineFlags(int wid,int Flags,int Mask=0);
void VSAPI vsRefresh(int wid=0,char Option='A');
void VSAPI vsQuitView(int wid);
void VSAPI vsDeleteBuffer(int wid);
int VSAPI vsQMaxTabCol();
void VSAPI vsExpandTabs(int wid,
                   VSPSZ pszDest,
                   int *pDestLen,
                   char *pSource,
                   int SrcLen,
                   int StartCol,
                   int ColWidth,
                   char Option);
int VSAPI vsSaveFile(int wid,VSPSZ pszCmdLine);

#define VSRC_HVAR    1
#define VSDOT_HVAR   2


   typedef struct {
      int kind;
 #define VSARG_INT      0
 #define VSARG_LONG     1
 #define VSARG_HREFVAR  2
 #define VSARG_PSZ      3
 #define VSARG_PLSTR    4
 #define VSARG_HVAR     5
      union {
         int i;
         long l;
         VSHVAR hVar;
         char *psz;
         VSLSTR *plstr;
      }u;
   } VSARGTYPE;

VSHVAR VSAPI vsHvarArrayEl(VSHVAR hVarArrayEl,int i);
VSHVAR VSAPI vsHvarHashtabEl(VSHVAR hVarHashtab,char *pBuf,int BufLen=-1);
VSPLSTR VSAPI vsHvarGetLstr(VSHVAR hVar);
int VSAPI vsHvarGetI(VSHVAR hVar);
int VSAPI vsHvarSetI(VSHVAR hVar,int value);
int VSAPI vsHvarSetB(VSHVAR hVar,void *pBuf,int BufLen);
int VSAPI vsHvarSetZ(VSHVAR hVar,VSPSZ pszValue);
void VSAPI vsDllInit(void);
void VSAPI vsDllExit(void);
int VSAPI vsLIBExport(char *func_proto_p,char *name_info_p,int arg2,void *pfn);
int VSAPI vsDllExport(VSPSZ pszFuncProto,VSPSZ pszNameInfo,int arg2);
int VSAPI vsPropGetI(int wid,int prop_id);
int VSAPI vsPropGetZ(int wid,int prop_id,VSPSZ pszValue,int ValueLen);
int VSAPI vsPropGetB(int wid,int prop_id,void *pBuf,int BufLen);

void VSAPI vsPropSetI(int wid,int prop_id,int value);
void VSAPI vsPropSetZ(int wid,int prop_id,VSPSZ pszValue);
void VSAPI vsPropSetB(int wid,int prop_id,void *pBuf,int BufLen);

int VSAPI vsFileOpen(VSPSZ pszFilename,int option);
int VSAPI vsFileClose(int fh);
int VSAPI vsFileRead(int fh,void *pBuf,int BufLen);
int VSAPI vsFileWrite(int fh,void *pBuf,int BufLen);
long VSAPI vsFileSeek(int fh,long seekpos,int option);
int VSAPI vsFileFlush(int fh);

int VSAPI vsFindIndex(VSPSZ pszName,int flags);
void VSAPI vsCallIndex(int wid,int index,int Nofargs,VSARGTYPE *pArgList);

void VSAPI vsFree(void *pBuf);
void *VSAPI vsAlloc(int len);
void *VSAPI vsRealloc(void *pBuf,int len);

VSHVAR VSAPI vsGetVar(int index);

VSHVAR VSAPI vsArg(int ParamNum);

VSPSZ VSAPI vsZLstrcpy(VSPSZ pszDest,VSPLSTR plstrSource,int DestLen);


int VSAPI vsHvarFree(VSHVAR hVar);
VSHVAR VSAPI vsHvarAlloc(VSHVAR InitTohVar=0);
int VSAPI vsHvarGetLstr2(VSHVAR hVar,VSLSTR **pplstr,VSLSTR *ptemps);

int VSAPI vsHvarGetBool(VSHVAR hVar,int *pbool);
int VSAPI vsHvarGetI2(VSHVAR hVar,int *pi);
int VSAPI vsHvarIsInt(VSHVAR hVar);
int VSAPI vsHvarSetL(VSHVAR hVar,long i);
int VSAPI vsHvarSetLstr(VSHVAR hVar,VSLSTR *plstr);


int VSAPI vsHvarFormat(VSHVAR hVar);

int vsShell(char *pszCommand,char *pszOptions,char *pszAltShell);

void VSAPI vsPropSetL(int wid,int prop_id,long value);
long VSAPI vsPropGetL(int wid,int prop_id);
int VSAPI vsTopLstr(VSPLSTR *pplstr);


int VSAPI vsPosInit(int LineOffset);
void VSAPI vsPosGetLinePointers(unsigned char **pp,unsigned char **ppBeginLine,
                            unsigned char **ppEndLine,int *pRelLine);
int VSAPI vsPosIsEOL(int offset,int ReturnWhenBetweenNLChars=0);
void VSAPI vsPosSetPointer(unsigned char *p);
int VSAPI vsPosRelPGoTo(unsigned char *p);
int VSAPI vsPosNextBOL(int Noflines);
int VSAPI vsPosSave(void *pSavePos);
int VSAPI vsPosRestore(void *pSavePos);
int VSAPI vsPosIsEOR(int offset);
void VSAPI vsPosGetPointers(unsigned char **pp,unsigned char **ppEndLine,
                            unsigned char **ppEndBuf=0);
int VSAPI vsPosSetCurLine();
int VSAPI vsPosQCol();
}
#endif