;
;	Microsoft Confidential
;	Copyright (C) Microsoft Corporation 1991
;	All Rights Reserved.
;

;	SCCSID = @(#)dispatch.asm	1.1 85/04/10
;	SCCSID = @(#)dispatch.asm	1.1 85/04/10
;
; Major dispatch code and table for MSDOS 2.X and above.
;
;   Modification history:
;
;	Created: MZ 30 March 1983
;
; The system calls are dispatched to in such a fashion as to have their entire
; register set passed to them except for CS:IP and SS:SP.  This reduces the
; need for retreiving information from the user's stack.
;
; There are also critical sections that need to be observed when running in a
; multitasking environment.  These sections are:
;
;   1	critDisk    any of the disk code that will twiddle the buffer cache
;   2	critDevice  all device drivers
;
;   4	critMem     memory allocation stuff
;   5	critNet     network critical section
;
; The system calls below are noted as to which of these critical sections they
; belong.  The critical sections are noted in the source files by the macros
; EnterCrit and LeaveCrit.
;
; The break-down of the individual system calls into source files is as
; follows (* means done):
;
;   *	handle.asm:	Close, Read, Write, LSeek, XDup, XDup2, FileTimes
;	IOCTL.INC:	IOCTL
;   *	file.asm:	Open, Creat, ChMod, Unlink, Rename, CreateTemp,
;			CreateNew
;   *	srvcall.asm:	$ServerCall
;   *	path.asm:	MkDir, RmDir, ChDir, CurrentDir
;   *	alloc.asm:	$Alloc, $Dealloc, $SetBlock, $AllocOper
;			arena_free_process, arena_next -> LOW LEVEL <-
;			check_signature, Coalesce
;   *	search.asm:	DirSearchFirst, DirSearchNext, FindFirst, FindNext,
;			PackName		 -> LOW LEVEL <-
;   *	proc.asm:	Exec, Exit, Abort, Wait, KeepProcess
;   *	cpmio.asm:	StdConInput, StdConOutput, StdAuxInput, StdAuxOutput,
;			StdPrinterOutput, RawConIO, RawConInput,
;			StdConInputNoEcho, StdConStringInput,
;			StdConStringOutput, StdConInputStatus,
;			StdConInputFlush
;			OUT, BUFOUT, RAWOUT, RAWOUT2	-> LOW LEVEL <-
;   *	fcbio.asm:	FCBOpen, FCBClose, FCBDelete, FCBSeqRead, FCBSeqWrite,
;			FCBCreate, FCBRename, FCBRandomRead, FCBRandomWrite,
;			GetFCBFileLength, GetFCBPosition, FCBRandomReadBlock,
;			FCBRandomWriteBlock
;   *	Time.asm:	GetDate, SetDate, GetTime, SetTime
;   *	Parse.asm:	Parse_file_descriptor, PathParse
;   *	GetSet.asm:	GetInterruptVector, SetInterruptVector,
;			GetVerifyOnWrite, SetVerifyOnWrite, GetDMA, SetDMA,
;			GetVersion, SetCTRLCTrapping, GetDriveFreespace,
;			CharOper, International, SetDefaultDrive,
;			GetDefaultDrive
;   *	Misc.asm:	Sleazefunc, SleazefuncDL, GetDefaultDPB, GetDPB,
;			CreateProcessDataBlock, GetINDOSFlag, GetInVars,
;			SetDPB, DupPDB, DiskReset
;			StrCmp, StrCpy, Ucase		 -> LOW LEVEL <-
;
; STUB MODULES
;	Net.asm 	**** This will get broken down more???
;   *	Share.asm	Share_Check, Share_Violation
;   *	Lock.asm	$LockOper
;			DOS_LOCK,DOS_UNLOCK,Lock_Check, Lock_Violation

; INTERNAL INTERFACE MODULES
;   *	Lock.asm	DOS_LOCK, DOS_UNLOCK   -->> STUBS <<--
;   *	Dinfo.asm	DISK_INFO
;   *	Finfo.asm	GET_FILE_INFO, SET_FILE_ATTRIBUTE
;   *	Create.asm	DOS_CREATE, DOS_CREATE_NEW,
;			Set_Mknd_Err	       --> Low level routine <--
;   *	Dup.asm 	DOS_DUP
;   *	Open.asm	DOS_OPEN,
;			SetBadPathError,       --> Low level routines <--
;			Check_Access_AX, Share_Error, Set_SFT_Mode
;   *	Close.asm	DOS_CLOSE, DOS_COMMIT, DOS_CLOSE_GOT_SFT,
;			Free_SFT	       --> Low level routine <--
;   *	Abort.asm	DOS_ABORT
;   *	ISearch.asm	DOS_SEARCH_FIRST, DOS_SEARCH_NEXT,
;			RENAME_NEXT	       --> Low level routine <--
;   *	Dircall.asm	DOS_MKDIR, DOS_CHDIR, DOS_RMDIR
;   *	Rename.asm	DOS_RENAME
;   *	Delete.asm	DOS_DELETE,
;			REN_DEL_Check	       --> Low level routine <--
;   *	Disk.asm	DOS_READ, DOS_WRITE

; LOW LEVEL MODULES
;   *	Fat.asm 	UNPACK, PACK, MAPCLUSTER, FATREAD_SFT,
;			FATREAD_CDS, FAT_operation
;   *	Ctrlc.asm	--> STD/IBM versions <--
;			FATAL, FATAL1, reset_environment, DSKSTATCHK,
;			SPOOLINT, STATCHK, CNTCHAND, DIVOV, RealDivOv,
;			CHARHARD, HardErr
;   *	Buf.asm 	SETVISIT, ScanPlace, PLACEBUF, PLACEHEAD, PointComp,
;			GETBUFFR, GETBUFFRB, FlushBuf, BufWrite,
;			SKIPVISIT
;   *	Disk.asm	SWAPBACK, SWAPCON, get_io_sft, DirRead, FATSecRd,
;			DskRead, SETUP, BREAKDOWN, DISKREAD, DISKWRITE,
;			FIRSTCLUSTER, DREAD, DWRITE, DSKWRITE,
;			READ_LOCK_VIOLATION, WRITE_LOCK_VIOLATION,
;			SETSFT, SETCLUS, AddRec
;   *	Mknode.asm	BUILDDIR, SETDOTENT, MakeNode, NEWENTRY, FREEENT,
;			NEWDIR, DOOPEN,RENAME_MAKE
;   *	FCB.asm 	MakeFcb, NameTrans, PATHCHRCMP, GetLet, TESTKANJ,
;			NORMSCAN, CHK, DELIM
;   *	Rom.asm 	GET_random_record, GETRRPOS1, GetRRPos, SKPCLP,
;			FNDCLUS, BUFSEC, BUFRD, BUFWRT, NEXTSEC,
;			OPTIMIZE, FIGREC, GETREC, ALLOCATE, RESTFATBYT,
;			RELEASE, RELBLKS, GETEOF
;   *	Dev.asm 	IOFUNC, DEVIOCALL, SETREAD, SETWRITE, GOTDPB,
;			DEVIOCALL2, DEV_CLOSE_SFT, DEV_OPEN_SFT
;   *	Dir.asm 	SEARCH, SETDIRSRCH, GETPATH, ROOTPATH, StartSrch,
;			MatchAttributes, DEVNAME, Build_device_ent,
;			FindEntry, Srch, NEXTENT, GETENTRY, GETENT,
;			NEXTENTRY, GetPathNoSet, FINDPATH
;

; critical section information for the system calls

;   System Call 		      Who takes care of the reentrancy
;   Abort			   0	(flushbuf) DOS_Close
;   Std_Con_Input		   1	DOS_Read
;   Std_Con_Output		   2	DOS_Write
;   Std_Aux_Input		   3	DOS_Read
;   Std_Aux_Output		   4	DOS_Write
;   Std_Printer_Output		   5	DOS_Write
;   Raw_Con_IO			   6	DOS_Read/DOS_Write
;   Raw_Con_Input		   7	DOS_Read
;   Std_Con_Input_No_Echo	   8	DOS_Read
;   Std_Con_String_Output	   9	DOS_Write
;   Std_Con_String_Input	   A	DOS_Read
;   Std_Con_Input_Status	   B	DOS_Read
;   Std_Con_Input_Flush 	   C	DOS_Read
;   Disk_Reset			   D	(FlushBuf, ScanPlace, SkipVisit)
;   Set_Default_Drive		   E	*none*
;   FCB_Open			   F	DOS_Open
;   FCB_Close			  10	DOS_Close
;   Dir_Search_First		  11	DOS_Search_First
;   Dir_Search_Next		  12	DOS_Search_Next
;   FCB_Delete			  13	DOS_Delete
;   FCB_Seq_Read		  14	DOS_Read/DOS_Write
;   FCB_Seq_Write		  15	DOS_Read/DOS_Write
;   FCB_Create			  16	DOS_Create
;   FCB_Rename			  17	DOS_rename
;   Get_Default_Drive		  19	*none*
;   Set_DMA			  1A	*none*
;   Get_Default_DPB		  1F	*none*
;   FCB_Random_Read		  21	DOS_Read/DOS_Write
;   FCB_Random_Write		  22	DOS_Read/DOS_Write
;   Get_FCB_File_Length 	  23	Get_file_info
;   Get_FCB_Position		  24	*none*
;   Set_Interrupt_Vector	  25	*none*
;   Create_Process_Data_Block	  26	*none*
;   FCB_Random_Read_Block	  27	DOS_Read/DOS_Write
;   FCB_Random_Write_Block	  28	DOS_Read/DOS_Write
;   Parse_File_Descriptor	  29	*none*
;   Get_Date			  2A	DEVIOCALL
;   Set_Date			  2B	DEVIOCALL
;   Get_Time			  2C	DEVIOCALL
;   Set_Time			  2D	DEVIOCALL
;   Set_Verify_On_Write 	  2E	*none*
;   Get_DMA			  2F	*none*
;   Get_Version 		  30	*none*
;   Keep_Process		  31	$abort...
;   Get_DPB			  32	*none*
;   Set_CTRL_C_Trapping 	  33	*none*
;   Get_InDOS_Flag		  34	*none*
;   Get_Interrupt_Vector	  35	*none*
;   Get_Drive_Freespace 	  36	Disk_Info
;   Char_Oper			  37	*none*
;   International		  38	*none*
;   MKDir			  39	DOS_MkDir
;   RMDir			  3A	DOS_RmDir
;   CHDir			  3B	DOS_ChDir
;   Creat			  3C	DOS_Create
;   Open			  3D	DOS_Open
;   Close			  3E	DOS_Close
;   Read			  3F	DOS_Read
;   Write			  40	DOS_Write
;   Unlink			  41	DOS_Delete
;   LSeek			  42	*none*
;   CHMod			  43	Get_file_info, Set_File_Attribute
;   IOCtl			  44	DEVIOCALL
;   XDup			  45	*none*
;   XDup2			  46	*none*
;   Current_Dir 		  47	$Current_Dir
;   Alloc			  48	$Alloc
;   Dealloc			  49	$Dealloc
;   Setblock			  4A	$SetBlock
;   Exec			  4B
;   Exit			  4C	$abort...
;   Wait			  4D	*none*
;   Find_First			  4E	DOS_Search_First
;   Find_Next			  4F	DOS_Search_Next
;   Set_Current_PDB		  50	*none*
;   Get_Current_PDB		  51	*none*
;   Get_In_Vars 		  52	*none*
;   SetDPB			  53	*none*
;   Get_Verify_On_Write 	  54	*none*
;   Dup_PDB			  55
;   Rename			  56	DOS_Rename
;   File_Times			  57	*none*
;   AllocOper			  58	*none*
;   GetExtendedError		  59	*none*
;   CreateTempFile		  5A	DOS_Create_New
;   CreateNewFile		  5B	DOS_Create_New
;   LockOper			  5C
;   ServerCall			  5D
;   UserOper			  5E
;   AssignOper			  5F
