/* os_msdos.c */
void mch_set_normal_colors(void);
void mch_update_cursor(void);
long_u mch_avail_mem(int special);
void mch_delay(long msec, int ignoreinput);
void mch_write(char_u *s, int len);
int mch_inchar(char_u *buf, int maxlen, long time, int tb_change_cnt);
int mch_char_avail(void);
void mch_suspend(void);
void mch_init(void);
int mch_check_win(int argc, char **argv);
int mch_input_isatty(void);
void fname_case(char_u *name, int len);
long mch_get_pid(void);
int mch_FullName(char_u *fname, char_u *buf, int len, int force);
void slash_adjust(char_u *p);
int mch_isFullName(char_u *fname);
void mch_early_init(void);
void mch_exit(int r);
void mch_settmode(int tmode);
void mch_setmouse(int on);
int mch_screenmode(char_u *arg);
int mch_get_shellsize(void);
void mch_set_shellsize(void);
void mch_new_shellsize(void);
void mch_check_columns(void);
int mch_call_shell(char_u *cmd, int options);
void mch_breakcheck(void);
int mch_has_exp_wildcard(char_u *p);
int mch_has_wildcard(char_u *p);
int mch_chdir(char *path);
char *djgpp_setlocale(void);
int clip_mch_own_selection(VimClipboard *cbd);
void clip_mch_lose_selection(VimClipboard *cbd);
void clip_mch_request_selection(VimClipboard *cbd);
void clip_mch_set_selection(VimClipboard *cbd);
long mch_getperm(char_u *name);
int mch_setperm(char_u *name, long perm);
void mch_hide(char_u *name);
int mch_isdir(char_u *name);
int mch_can_exe(char_u *name, char_u **path, int use_path);
int mch_nodetype(char_u *name);
int mch_dirname(char_u *buf, int len);
int mch_remove(char_u *name);
char_u *mch_getenv(char_u *name);
int mch_get_user_name(char_u *s, int len);
void mch_get_host_name(char_u *s, int len);
/* vim: set ft=c : */
