Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

122 lines
3.6 KiB

/* SIM v1.0
*
* SIM32.H
* SIM32 constants and prototypes
*
* History
* Created 05-Feb-91 by Chandan Chauhan and Jeff Parsons
*/
/* Public function prototypes
*
* These functions are true pascal functions in the 16-bit case,
* but conform to the default convention (cdecl) for the 32-bit case.
*/
#ifndef FAR
#define FAR
#endif
#ifndef PASCAL
#define PASCAL
#endif
USHORT FAR PASCAL Sim32SendSim16(PULONG);
USHORT FAR PASCAL Sim32GetVDMMemory(ULONG, USHORT, PVOID);
USHORT FAR PASCAL Sim32SetVDMMemory(ULONG, USHORT, PVOID);
PSZ FAR PASCAL Sim32GetVDMPSZPointer(ULONG);
VOID FAR PASCAL Sim32FreeVDMPointer(PVOID);
/* Private function prototypes
*/
VOID Initialize();
USHORT Xceive(IN USHORT, IN USHORT);
/* Simulator replacement macros
*/
#define SENDVDM(pvp) WOW32Receive()
#define RECEIVEVDM(pvp) Sim32SendSim16(pvp)
#ifdef ALLOCA
#define GETPTR(vp,cb,p) ((p=alloca(cb))?Sim32GetVDMMemory(vp, (USHORT)(cb), p):FALSE)
#define GETARGPTR(vp,cb,p) if (p=alloca(cb)) { Sim32GetVDMMemory(vp+OFFSETOF(VDMFRAME,bArgs), (USHORT)(cb), p)
#ifdef WIN_16
#define EQNULL
#define GETPSZPTR(vp,pcb,p) if (vp) if (p=alloca(*pcb=128)) Sim32GetVDMMemory(vp, (USHORT)*pcb, p); else goto Error
#define FREEPSZPTR(p)
#else
#define EQNULL = NULL
#define GETPSZPTR(vp,pcb,p) if (vp) if (!(p=Sim32GetVDMPSZPointer(vp))) goto Error
#define FREEPSZPTR(p) if (p) Sim32FreeVDMPointer(p)
#endif
#define FLUSHPTR(vp,cb,p) Sim32SetVDMMemory(vp, (USHORT)(cb), p)
#define FREEPTR(p)
#define FREEARGPTR(p) ;}
#else
#define EQNULL = NULL
#define GETPTR(vp,cb,p) ((p=malloc(cb))?Sim32GetVDMMemory(vp, (USHORT)(cb), p):FALSE)
#define GETARGPTR(vp,cb,p) if (p=malloc(cb)) { Sim32GetVDMMemory(vp+OFFSETOF(VDMFRAME,bArgs), (USHORT)(cb), p)
#ifdef WIN_16
#define GETPSZPTR(vp,pcb,p) if (vp) if (p=malloc(*pcb=128)) Sim32GetVDMMemory(vp, (USHORT)*pcb, p); else goto Error
#define FREEPSZPTR(p) if (p) free(p)
#else
#define GETPSZPTR(vp,pcb,p) if (vp) if (!(p=Sim32GetVDMPSZPointer(vp))) goto Error
#define FREEPSZPTR(p) if (p) Sim32FreeVDMPointer(p)
#endif
#define FLUSHPTR(vp,cb,p) Sim32SetVDMMemory(vp, (USHORT)(cb), p)
#ifndef DEBUG
#define FREEPTR(p) free(p)
#define FREEARGPTR(p) free(p);}
#else
#define FREEPTR(p) free(p); p=NULL
#define FREEARGPTR(p) free(p); p=NULL;}
#endif
#endif
#define GETOPTPTR(vp,cb,p) if (vp) if (p=malloc(cb)) Sim32GetVDMMemory(vp, (USHORT)(cb), p); else goto Error
#define GETVDMPTR(vp,cb,p) if (p=malloc(cb)) Sim32GetVDMMemory(vp, (USHORT)(cb), p); else goto Error
#define ALLOCVDMPTR(vp,cb,p) if (!(p=malloc(cb))) goto Error
#define FLUSHVDMPTR(vp,cb,p) Sim32SetVDMMemory(vp, (USHORT)(cb), p)
#ifndef DEBUG
#define FREEVDMPTR(p) if (p) free(p)
#else
#define FREEVDMPTR(p) if (p) {free(p); p=NULL;}
#endif
#define GETVDMMEMORY(vp,cb,p) Sim32GetVDMMemory(vp, (USHORT)(cb), p)
#define SETVDMMEMORY(vp,cb,p) Sim32SetVDMMemory(vp, (USHORT)(cb), p)
#ifdef SIM_32 // BUGBUG -- Use the macros in nt header files
#undef FIRSTBYTE
#undef SECONDBYTE
#undef THIRDBYTE
#undef FOURTHBYTE
#endif
#define FIRSTBYTE(VALUE) (VALUE & LO_MASK)
#define SECONDBYTE(VALUE) ((VALUE >> 8) & LO_MASK)
#define THIRDBYTE(VALUE) ((VALUE >> 16) & LO_MASK)
#define FOURTHBYTE(VALUE) ((VALUE >> 24) & LO_MASK)
#define LO_MASK 0x000000FF
#define MAXSIZE 1024 // maximum buffer size
#define MAXTRY 10 // for Transport
/* Packet Codes
*/
#define SOH 1 // start of header ie Pkt
#define EOT 4 // end of transmission
#define ToWOW32 1
#define GETMEM 2
#define SETMEM 3
#define WAKEUP 4
#define RESP 5
#define ACK 6
#define NAK 7
#define PSZLEN 8
#define GOOD 1
#define BAD 0
#define BADSIZE 2