/* os_mswin.c */
extern void mch_exit __ARGS((int r));
extern void mch_early_init __ARGS((void));
extern int mch_input_isatty __ARGS((void));
extern void mch_settitle __ARGS((char_u *title, char_u *icon));
extern void mch_restore_title __ARGS((int which));
extern int mch_can_restore_title __ARGS((void));
extern int mch_can_restore_icon __ARGS((void));
extern int mch_FullName __ARGS((char_u *fname, char_u *buf, int len, int force));
extern int mch_isFullName __ARGS((char_u *fname));
extern void slash_adjust __ARGS((char_u *p));
extern int vim_stat __ARGS((const char *name, struct stat *stp));
extern void mch_settmode __ARGS((int tmode));
extern int mch_get_shellsize __ARGS((void));
extern void mch_set_shellsize __ARGS((void));
extern void mch_new_shellsize __ARGS((void));
extern void mch_suspend __ARGS((void));
extern void display_errors __ARGS((void));
extern int mch_has_exp_wildcard __ARGS((char_u *p));
extern int mch_has_wildcard __ARGS((char_u *p));
extern int mch_chdir __ARGS((char *path));
extern int can_end_termcap_mode __ARGS((int give_msg));
extern int mch_screenmode __ARGS((char_u *arg));
extern int mch_libcall __ARGS((char_u *libname, char_u *funcname, char_u *argstring, int argint, char_u **string_result, int *number_result));
extern int utf8_to_ucs2 __ARGS((char_u *instr, int inlen, short_u *outstr, int *unconvlenp));
extern int ucs2_to_utf8 __ARGS((short_u *instr, int inlen, char_u *outstr));
extern void MultiByteToWideChar_alloc __ARGS((UINT cp, DWORD flags, LPCSTR in, int inlen, LPWSTR *out, int *outlen));
extern void WideCharToMultiByte_alloc __ARGS((UINT cp, DWORD flags, LPCWSTR in, int inlen, LPSTR *out, int *outlen, LPCSTR def, LPBOOL useddef));
extern int clip_mch_own_selection __ARGS((VimClipboard *cbd));
extern void clip_mch_lose_selection __ARGS((VimClipboard *cbd));
extern short_u *enc_to_ucs2 __ARGS((char_u *str, int *lenp));
extern char_u *ucs2_to_enc __ARGS((short_u *str, int *lenp));
extern void clip_mch_request_selection __ARGS((VimClipboard *cbd));
extern void acp_to_enc __ARGS((char_u *str, int str_size, char_u **out, int *outlen));
extern void clip_mch_set_selection __ARGS((VimClipboard *cbd));
extern void DumpPutS __ARGS((const char *psz));
extern int mch_get_winpos __ARGS((int *x, int *y));
extern void mch_set_winpos __ARGS((int x, int y));
extern void mch_print_cleanup __ARGS((void));
extern int mch_print_init __ARGS((prt_settings_T *psettings, char_u *jobname, int forceit));
extern int mch_print_begin __ARGS((prt_settings_T *psettings));
extern void mch_print_end __ARGS((prt_settings_T *psettings));
extern int mch_print_end_page __ARGS((void));
extern int mch_print_begin_page __ARGS((char_u *msg));
extern int mch_print_blank_page __ARGS((void));
extern void mch_print_start_line __ARGS((int margin, int page_line));
extern int mch_print_text_out __ARGS((char_u *p, int len));
extern void mch_print_set_font __ARGS((int iBold, int iItalic, int iUnderline));
extern void mch_print_set_bg __ARGS((long_u bgcol));
extern void mch_print_set_fg __ARGS((long_u fgcol));
extern char_u *mch_resolve_shortcut __ARGS((char_u *fname));
extern void win32_set_foreground __ARGS((void));
extern void serverInitMessaging __ARGS((void));
extern void serverSetName __ARGS((char_u *name));
extern char_u *serverGetVimNames __ARGS((void));
extern int serverSendReply __ARGS((char_u *name, char_u *reply));
extern int serverSendToVim __ARGS((char_u *name, char_u *cmd, char_u **result, void *ptarget, int asExpr, int silent));
extern void serverForeground __ARGS((char_u *name));
extern char_u *serverGetReply __ARGS((HWND server, int *expr_res, int remove, int wait));
extern void serverProcessPendingMessages __ARGS((void));
extern char *charset_id2name __ARGS((int id));
extern int get_logfont __ARGS((LOGFONT *lf, char_u *name, HDC printer_dc, int verbose));
/* vim: set ft=c : */
