diff options
Diffstat (limited to 'win32/ntport.h')
-rw-r--r-- | win32/ntport.h | 511 |
1 files changed, 511 insertions, 0 deletions
diff --git a/win32/ntport.h b/win32/ntport.h new file mode 100644 index 0000000000000..d78fbf684a519 --- /dev/null +++ b/win32/ntport.h @@ -0,0 +1,511 @@ +/*$Header: /p/tcsh/cvsroot/tcsh/win32/ntport.h,v 1.14 2010/05/23 17:20:32 amold Exp $*/ +/*- + * Copyright (c) 1980, 1991 The Regents of the University of California. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +// ntport.h +// the main header. +// -amol +// +// +#ifndef NTPORT_H +#define NTPORT_H +#define WIN32_LEAN_AND_MEAN +#include <windows.h> +#include <stdio.h> +#include <stdlib.h> +#include <time.h> +#include <sys/types.h> +#include <sys/stat.h> +#include <io.h> +#include <direct.h> +#include "dirent.h" +#include "version.h" + +#ifndef WINDOWS_ONLY +#define STRSAFE_NO_DEPRECATE +#endif /* WINDOWS_ONLY*/ +#define STRSAFE_LIB +#define STR_NO_CCH_FUNCTIONS +#include <strsafe.h> + +// These needed for fork(), which controls the heap management. +#pragma data_seg(".fusrdata") +#define INIT_ZERO =0 +#define INIT_ZERO_STRUCT ={0} +#define malloc fmalloc +#define calloc fcalloc +#define realloc frealloc +#define free ffree +#undef min +#undef max + +#define heap_alloc(s) HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,(s)) +#define heap_free(p) HeapFree(GetProcessHeap(),0,(p)) +#define heap_realloc(p,s) HeapReAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,(p),(s)) + +#pragma warning(disable:4018) //signed-unsigned mismatch +#define HAVENOLIMIT + +/* os-dependent stuff. belongs in tc.os.h, but I never said this would be +pretty */ + +#define lstat stat +#ifdef S_IFMT +# if !defined(S_ISDIR) && defined(S_IFDIR) +# define S_ISDIR(a) (((a) & S_IFMT) == S_IFDIR) +# endif /* ! S_ISDIR && S_IFDIR */ +# if !defined(S_ISCHR) && defined(S_IFCHR) +# define S_ISCHR(a) (((a) & S_IFMT) == S_IFCHR) +# endif /* ! S_ISCHR && S_IFCHR */ +# if !defined(S_ISBLK) && defined(S_IFBLK) +# define S_ISBLK(a) (((a) & S_IFMT) == S_IFBLK) +# endif /* ! S_ISBLK && S_IFBLK */ +# if !defined(S_ISREG) && defined(S_IFREG) +# define S_ISREG(a) (((a) & S_IFMT) == S_IFREG) +# endif /* ! S_ISREG && S_IFREG */ +# if !defined(S_ISFIFO) && defined(S_IFIFO) +# define S_ISFIFO(a) (((a) & S_IFMT) == S_IFIFO) +# endif /* ! S_ISFIFO && S_IFIFO */ +# if !defined(S_ISNAM) && defined(S_IFNAM) +# define S_ISNAM(a) (((a) & S_IFMT) == S_IFNAM) +# endif /* ! S_ISNAM && S_IFNAM */ +# if !defined(S_ISLNK) && defined(S_IFLNK) +# define S_ISLNK(a) (((a) & S_IFMT) == S_IFLNK) +# endif /* ! S_ISLNK && S_IFLNK */ +# if !defined(S_ISSOCK) && defined(S_IFSOCK) +# define S_ISSOCK(a) (((a) & S_IFMT) == S_IFSOCK) +# endif /* ! S_ISSOCK && S_IFSOCK */ +#endif /* S_IFMT */ + +/* port defines */ +#define getpid GetCurrentProcessId +#define getpgrp GetCurrentProcessId +#define tcgetpgrp(a) GetCurrentProcessId() +#define tcsetpgrp(a,b) 0 +#define setpgid(a,b) 0 + + +#define close(a) nt_close(a) +#define execv(a,b) nt_exec((a),(b)) +#define execve(a,b,c) nt_execve((a),(b),(c)) + +#define open nt_open +#define read(f,b,n) nt_read((f),(b),(n)) +#define write(f,b,n) nt_write((f),(b),(n)) +#define creat(f,m) nt_creat((f),(m)) +#define _exit(a) ExitProcess((a)) + +#define chdir(a) nt_chdir(a) + +#undef putc +#undef putchar +#define fgetc(a) nt_fgetc(a) +#define fputs(a,b) nt_fputs((a),(b)) +#define putc(a,b) nt_putc((char)(a),(b)) +#define fflush(a) nt_fflush((a)) +#define fputc(a,b) nt_fputc((char)(a),(b)) +#define fprintf nt_fprintf +#define puts(a) nt_puts(a) +#define putchar(a) nt_putchar((char)(a)) +#define fclose(p) nt_fclose(p) +#define _get_osfhandle __nt_get_osfhandle +#define _open_osfhandle __nt_open_osfhandle +#define clearerr nt_clearerr +#define dup2 nt_dup2 +#define fdopen nt_fdopen +#define fgets nt_fgets +#define fileno nt_fileno +#define fopen nt_fopen +#define fread nt_fread +#define fseek nt_fseek +#define ftell nt_ftell +#define fwrite nt_fwrite +#define isatty nt_isatty +#define lseek nt_lseek +#define printf nt_printf +#define access nt_access +#define fstat(a,b) nt_fstat((a),(b)) +#define stat(a,b) nt_stat((a),(b)) + +#define setvbuf(a,b,c,d) +#define setpgrp(a,b) (-1) +#define tcsetattr(a,b,c) 0 + +#define inline __inline + +#undef stdin +#undef stdout +#undef stderr +#define stdin ((FILE*)my_stdin) +#define stdout ((FILE*)my_stdout) +#define stderr ((FILE*)my_stderr) + +#define dup(f) nt_dup((f)) +#define sleep(a) Sleep((a)*1000) + +#define getcwd(a,b) forward_slash_get_cwd((a),(b)) + + +#define L_SET SEEK_SET +#define L_XTND SEEK_END +#define L_INCR SEEK_CUR +#define S_IXUSR S_IEXEC +#define S_IXGRP S_IEXEC +#define S_IXOTH S_IEXEC + +#define NOFILE 64 +#define ARG_MAX 1024 +#define MAXSIG NSIG + +/* +mode Value Checks File For + +00 Existence only +02 Write permission +04 Read permission +06 Read and write permission +*/ +#define F_OK 0 +#define X_OK 1 +#define W_OK 2 +#define R_OK 4 +#define XD_OK 9 //executable and not directory + +/* base key mappings + ctrl-key mappings + alt-key mappings */ +/* see nt.bind.c to figure these out */ +/* 256 + + 4*24 (fkeys) + + 4*4 (arrow) + + 4*2 (pgup/dn) + + 4*2 (home/end) + + 4*2 (ins/del) +*/ +#define NT_NUM_KEYS 392 + +#define NT_SPECIFIC_BINDING_OFFSET 256 /* where our bindings start */ + +#define KEYPAD_MAPPING_BEGIN 24 /* offset from NT_SPECIFIC + where keypad mappings begin */ +#define INS_DEL_MAPPING_BEGIN 32 + +#define SINGLE_KEY_OFFSET 0 /*if no ctrl or alt pressed */ +#define CTRL_KEY_OFFSET 34 +#define ALT_KEY_OFFSET (34*2) +#define SHIFT_KEY_OFFSET (34*3) + +typedef int pid_t; +typedef int speed_t; +typedef unsigned char u_char; +typedef size_t caddr_t; +typedef int sig_atomic_t; +typedef int mode_t; +typedef UINT32 uint32_t; + +struct timeval{ + long tv_sec; + long tv_usec; +}; +struct termios; +/* +struct timezone{ + int tz_minuteswest; + int dsttime; +}; +*/ +struct rusage { + + struct timeval ru_utime; /* user time used */ + struct timeval ru_stime; /* system time used */ + long ru_maxrss; /* maximum resident set size */ + long ru_ixrss; /* integral shared memory size */ + long ru_idrss; /* integral unshared data size */ + long ru_isrss; /* integral unshared stack size */ + long ru_minflt; /* page reclaims */ + long ru_majflt; /* page faults */ + long ru_nswap; /* swaps */ + long ru_inblock; /* block input operations */ + long ru_oublock; /* block output operations */ + long ru_msgsnd; /* messages sent */ + long ru_msgrcv; /* messages received */ + long ru_nsignals; /* signals received */ + long ru_nvcsw; /* voluntary context switches */ + long ru_nivcsw; /* involuntary context switches */ +}; +typedef int uid_t; +typedef int gid_t; +typedef long ssize_t; + +struct passwd { + char *pw_name; /* user name */ + char *pw_passwd; /* user password */ + uid_t pw_uid; /* user id */ + gid_t pw_gid; /* group id */ + char *pw_gecos; /* real name */ + char *pw_dir; /* home directory */ + char *pw_shell; /* shell program */ +}; +struct group { + char *gr_name; /* group name */ + char *gr_passwd; /* group password */ + gid_t gr_gid; /* group id */ + char **gr_mem; /* group members */ +}; + +#ifndef _INTPTR_T_DEFINED +#ifdef _WIN64 +typedef __int64 intptr_t; +#else +typedef int intptr_t; +#endif +#define _INTPTR_T_DEFINED +#endif +/* ntport.c */ +extern char * ttyname(int); +extern struct passwd* getpwuid(uid_t ) ; +extern struct group * getgrgid(gid_t ) ; +extern struct passwd* getpwnam(const char* ) ; +extern struct group* getgrnam(char* ) ; +extern gid_t getuid(void) ; +extern gid_t getgid(void) ; +extern gid_t geteuid(void) ; +extern gid_t getegid(void) ; + +#ifdef NTDBG +extern void dprintf(char *,...); +#define DBreak() __asm {int 3} +#else +#define dprintf (void) +#endif NTDBG + +#define pipe(a) nt_pipe(a) + + +/* support.c */ +extern void nt_init(void); +extern int gethostname(char*,int); +extern char* forward_slash_get_cwd(char *,size_t len ); +extern int nt_chdir(char*); +extern void nt_execve(char *,char**,char**); +extern void nt_exec(char *,char**); +extern int quoteProtect(char *, char *,unsigned long) ; +extern char* fix_path_for_child(void) ; +extern void restore_path(char *) ; +extern int copy_quote_and_fix_slashes(char *,char *, int * ); +extern char* concat_args_and_quote(char **,char**,char **,unsigned int *, char **, + unsigned int *) ; + + +extern int is_nt_executable(char*,char*); +/* io.c */ +extern int force_read(int, unsigned char*,size_t); +extern int nt_read(int, unsigned char*,size_t); +extern int nt_write(int, const unsigned char*,size_t); +extern int stringtable_read(int,char*,size_t); + +/* tparse.c */ +extern int tc_putc(char,FILE*); + + +void nt_cleanup(void); + +/* stdio.c */ +extern int nt_creat(const char*,int); +extern int nt_close(int); +extern int nt_open(const char*,int ,...); +extern int nt_pipe(int*); +extern void restore_fds(void ) ; +extern void copy_fds(void); +extern void close_copied_fds(void ) ; +extern int nt_fgetc(FILE*); +extern int nt_dup(int); +extern int nt_fputs(char*,FILE*); +extern int nt_putc(char,FILE*); +extern int nt_fflush(FILE*); +extern int nt_fputc(char, FILE*); +extern int nt_fprintf(FILE*,char*,...); +extern int nt_puts(char*); +extern int nt_putchar(char); +extern int nt_fclose(FILE*); +extern int nt_fputs(char *, FILE*); +extern intptr_t __nt_get_osfhandle(int); +extern int __nt_open_osfhandle(intptr_t, int); +extern int nt_clearerr(FILE*); +extern int nt_dup2(int,int ); +extern FILE* nt_fdopen(int,char*); +extern char * nt_fgets(char *,int, FILE*); +extern int nt_fileno(FILE*); +extern FILE *nt_fopen(char *,char*); +extern int nt_fread(void *,size_t,size_t,FILE*); +extern int nt_fwrite(void*,size_t,size_t,FILE*); +extern int nt_fseek(FILE*,long,int); +extern long nt_ftell(FILE*); +extern int nt_isatty(int); +extern int nt_lseek(int,long,int); +extern int nt_printf(char*,...); +extern int nt_access(char*,int); +extern int nt_fstat(int, struct stat *) ; +extern int nt_stat(const char *, struct stat *) ; +extern void nt_close_on_exec(int , int); +extern void init_stdio(void) ; +extern int is_resource_file(int); +#ifndef STDIO_C +extern void *my_stdin,*my_stdout,*my_stderr; +#endif STDIO_C + + +/* nt.char.c */ +extern unsigned char oem_it(unsigned char ); +extern char *nt_cgets(int,int,char*); +extern void nls_dll_init(void); +extern void nls_dll_unload(void); +extern void nt_autoset_dspmbyte(void); + +/* fork.c */ +extern int fork_init(void); +extern int fork(void); +extern void *sbrk(int); +extern void *fmalloc(size_t); +extern void ffree(void *); +extern void *frealloc(void*,size_t); +extern void *fcalloc(size_t,size_t); +extern void set_stackbase(void*); + +/* console.c */ +extern void do_nt_cooked_mode(void ); +extern void do_nt_raw_mode(void ) ; +extern int do_nt_check_cooked_mode(void); +extern void set_cons_attr (char *); +extern void NT_MoveToLineOrChar(int ,int ) ; +extern void nt_term_init(void); +extern void nt_term_cleanup(void); +extern void nt_set_size(int,int); +//extern DWORD set_cooked_mode(HANDLE); +//extern void set_raw_mode(HANDLE); +//extern void set_arbitrary_mode(HANDLE,DWORD); +extern void set_attributes(const unsigned char *color); + +/* ../sh.exec.c */ +extern int nt_check_if_windir(char *); +extern void nt_check_name_and_hash(int ,char *,int); + + +/* clip.c */ +extern void cut_clip(void); +extern int paste_clip(void); +extern void init_clipboard(void); +extern HANDLE create_clip_writer_thread(void) ; +extern HANDLE create_clip_reader_thread(void) ; + +/* signal.c */ +extern int kill(int,int); +extern int nice(int); +extern void nt_init_signals(void) ; +extern void nt_cleanup_signals(void) ; +extern void start_sigchild_thread(HANDLE , DWORD ) ; + +/* nt.who.c */ +extern void start_ncbs(short **); +extern void cleanup_netbios(void); + +/* ntfunc.c */ +struct command; +extern void dostart(short **,struct command *); +extern void docls(short **,struct command *); +extern void dotitle(short **, struct command * ) ; +extern void dostacksize(short**,struct command *); +extern void dosourceresource(short **, struct command * ) ; +extern void doprintresource(short **, struct command * ) ; +#ifdef NTDBG +extern void dodebugbreak(short **, struct command * ) ; +#endif NTDBG +extern void nt_set_env(const short *, const short*); +extern char *hb_subst(char *) ; +extern void init_hb_subst() ; +extern void init_shell_dll(void) ; +extern void try_shell_ex(char**,int,BOOL); +extern int nt_try_fast_exec(struct command *); +extern int nt_feed_to_cmd(char*,char**); +extern short nt_translate_bindkey(const short*); + +extern struct biltins *nt_check_additional_builtins(short *); +extern void nt_print_builtins(size_t); + +/* ps.c */ +extern void init_plister(void); +extern void dops(short **,struct command *); +extern void doshutdown(short **,struct command *); +extern int kill_by_wm_close(int ) ; + +/* globals.c */ +extern int is_gui(char*); +extern int is_9x_gui(char*); + + +/* Global variables */ +extern unsigned short __nt_want_vcode,__nt_vcode,__nt_really_exec; +extern int __dup_stdin; +extern int __nt_only_start_exes; +extern unsigned short __nt_child_nohupped; +extern DWORD gdwPlatform,gdwVersion; +extern int is_dev_clipboard_active; +extern HANDLE ghdevclipthread; +extern DWORD gdwStackSize; + +// bogus +#define getppid() 0 + +struct tms { + clock_t tms_utime; + clock_t tms_stime; + clock_t tms_cutime; + clock_t tms_cstime; +}; +#define UT_UNKNOWN 0 +#define DEAD_PROCESS 7 +#define USER_PROCESS 8 +#define UT_LINESIZE 16 +#define UT_NAMESIZE 8 +#define UT_HOSTSIZE 16 + +struct utmp { + short ut_type; /* type of login */ + pid_t ut_pid; + char ut_line[UT_LINESIZE]; /* device pref'/dev/' */ + char ut_id[2]; /*abbrev tty name */ + time_t ut_time; /* login time */ + char ut_user[UT_NAMESIZE]; /* user name */ + char ut_host[UT_HOSTSIZE]; /* hostname for rlogin */ + long ut_addr; /*ipaddr of remote host */ +}; + + +#define ut_name ut_user +#define killpg kill + +#endif NTPORT_H |