     1                                  ;	SCCSID = @(#)create.asm 1.6 85/08/19
     2                                  ;TITLE	DOS_CREATE/DOS_CREATE_NEW - Internal CREATE calls for MS-DOS
     3                                  ;NAME	DOS_CREATE
     4                                  ; Internal Create and Create new to create a local or NET file and SFT.
     5                                  ;
     6                                  ;   DOS_CREATE
     7                                  ;   DOS_CREATE_NEW
     8                                  ;   SET_MKND_ERR
     9                                  ;   SET_Media_ID
    10                                  ;   SET_EXT_Mode
    11                                  ;
    12                                  ;   Revision history:
    13                                  ;
    14                                  ;	A000 version 4.00     Jan. 1988
    15                                  ;	A001  D490 -- Change IOCTL subfunctios from 63h,43h to 66h, 46h
    16                                  
    17                                  ;
    18                                  ; get the appropriate segment definitions
    19                                  ;
    20                                  [list -]
    20          ******************       warning: redefining multi-line macro `struc' [-w+pp-macro-redef-multi]
    14                              <4> [list -]
    14                              <3> [list -]
     3                              <2> 
     4                              <2> addsection DOSSTART, align=16 PUBLIC class=DOSSTART
     5                              <2> ; (no prior section) ; DOSSTART		ENDS
     6                              <2> 
     7                              <2> addsection DOSSTARTJUMP, align=1 PUBLIC class=START
     8                              <2> ; (no prior section) ; DOSSTARTJUMP		ENDS
     9                              <2> 
    10                              <2> addsection CONSTANTS, align=2 PUBLIC class=CONST
    11                              <2> ; (no prior section) ; CONSTANTS	ENDS
    12                              <2> 
    13                              <2> addsection DATA, align=2 PUBLIC class=DATA
    14                              <2> ; (no prior section) ; DATA		ENDS
    15                              <2> 
    16                              <2> addsection TABLE, align=2 PUBLIC class=TABLE
    17                              <2> ; (no prior section) ; TABLE		ENDS
    18                              <2> 
    19                              <2> addsection DOSDATATABLE, align=2 PUBLIC class=DOSDATACODE
    20                              <2> ; (no prior section) ; DOSDATATABLE		ENDS
    21                              <2> 
    22                              <2> addsection DOSDATACODE, align=1 PUBLIC class=DOSDATACODE
    23                              <2> ; (no prior section) ; DOSDATACODE		ENDS
    24                              <2> 
    25                              <2> addsection DOSBIODATA, align=2 PUBLIC class=DOSBIODATA
    26                              <2> 
    27                              <2> addsection LAST, align=16 PUBLIC class=LAST
    28                              <2> ; (no prior section) ; LAST		ENDS
    29                              <2> 
    30                              <2> group DOSGROUP DOSSTART DOSSTARTJUMP CONSTANTS DATA TABLE DOSDATATABLE DOSDATACODE DOSBIODATA LAST
     8                              <1> 
     9                              <1> %include "dcodeseg.nas"
     1                              <2> 
     2                              <2> %ifndef DCODESEGNAS
     3                              <2> %assign DCODESEGNAS 1
     4                              <2> 
     5                              <2> section DOSCODETABLE align=2 PUBLIC class=DOSCODE
     6                              <2> ; (no prior section) ; DOSCODETABLE		ENDS
     7                              <2> section DOSCODECODE align=1 PUBLIC class=DOSCODE
     8                              <2> ; (no prior section) ; DOSCODECODE		ENDS
     9                              <2> section DOSBIOCODE align=2 PUBLIC class=DOSCODE
    10                              <2> section BIOCODE	align=2 PUBLIC class=DOSCODE
    11                              <2> 
    12                              <2> %ifnidni DOSENTRYGROUP, DOSCODEGROUP
    13                              <2>  group DOSCODEGROUP DOSCODETABLE DOSCODECODE DOSBIOCODE BIOCODE
    14                              <2> %endif
    15                              <2> 
    16                              <2> %endif
    10                              <1> 
    11                              <1> section LAST
    12                              <1> ; (no prior section) ; LAST		ENDS
    22                                  
    23                                  [list +]
    24                                  section DOSCODECODE
    25                                  [list -]
    25          ******************       warning: out: ... for DOS Version 4.00 ... [-w+user]
    25          ******************       warning: out: BPB.INC... [-w+user]
    25          ******************       warning: out: ... CLONE version build switch on ... [-w+user]
    25          ******************       warning: out: DEVSYM.INC... [-w+user]
    25          ******************       warning: out: ... CLONE version build switch on ... [-w+user]
    33                                  
    34                                  %iassign Installed TRUE
    35                                  
    36                                  	extrn IFS_extopen_shared:near
    37                                  
    38                                  	i_need	NoSetDir,BYTE
    39                                  	i_need	THISSFT,DWORD
    40                                  	i_need	THISCDS,DWORD
    41                                  	I_need	EXTERR,WORD
    42                                  	I_Need	ExtErr_locus,BYTE
    43                                  	I_need	JShare,DWORD
    44                                  	I_need	VOLCHNG_FLAG,BYTE
    45                                  	I_need	SATTRIB,BYTE
    46                                  	I_need	CALLVIDM,DWORD
    47                                  	I_need	OpenBuf,128
    48                                  	I_need	EXTOPEN_ON,BYTE 		  ;AN000; extended open
    49                                  	I_need	NAME1,BYTE			  ;AN000;
    50                                  	I_need	NO_NAME_ID,BYTE 		  ;AN000;
    51                                  	I_need	Packet_Temp,WORD		  ;AN000;
    52                                  	I_need	DOS34_FLAG,WORD 		  ;AN000;
    53                                  	I_need	SAVE_BX,WORD			  ;AN000;
    54                                  	I_need	SAVE_CX,WORD
    55                                  	I_need	create_redirector_called, byte
    56                                  
    57                                   assume nocheck, ss:DOSGROUP
    58                                  
    59                                  ; Inputs:
    60                                  ;	[WFP_START] Points to WFP string ("d:/" must be first 3 chars, NUL
    61                                  ;		terminated)
    62                                  ;	[CURR_DIR_END] Points to end of Current dir part of string
    63                                  ;		( = -1 if current dir not involved, else
    64                                  ;		 Points to first char after last "/" of current dir part)
    65                                  ;	[THISCDS] Points to CDS being used
    66                                  ;		(Low word = -1 if NUL CDS (Net direct request))
    67                                  ;	[THISSFT] Points to SFT to fill in if file created
    68                                  ;		(sf_mode field set so that FCB may be detected)
    69                                  ;	[SATTRIB] Is attribute of search, determines what files can be found
    70                                  ;	AX is Attribute to create
    71                                  ; Function:
    72                                  ;	Try to create the specified file truncating an old one that exists
    73                                  ; Outputs:
    74                                  ;	sf_ref_count is NOT altered
    75                                  ;	CARRY CLEAR
    76                                  ;	    THISSFT filled in.
    77                                  ;		sf_mode = unchanged for FCB, sharing_compat + open_for_both
    78                                  ;	CARRY SET
    79                                  ;	    AX is error code
    80                                  ;		error_path_not_found
    81                                  ;			Bad path (not in curr dir part if present)
    82                                  ;		error_bad_curr_dir
    83                                  ;			Bad path in current directory part of path
    84                                  ;		error_access_denied
    85                                  ;			Attempt to re-create read only file , or
    86                                  ;			create a second volume id or create a dir
    87                                  ;		error_sharing_violation
    88                                  ;			The sharing mode was correct but not allowed
    89                                  ;			generates an INT 24
    90                                  ; DS preserved, others destroyed
    91                                  
    92                                  	procedure   DOS_Create,NEAR
    92          ******************       warning: proc DOS_Create... [-w+user]
    93                                  	DOSAssume   CS,<DS>,"DOS_Create"
    94                                  	ASSUME	ES:NOTHING
    95                                  
    96 00000000 30E4                    	XOR	AH,AH		; Truncate is OK
    97                                  Create_inter:
    98 00000002 A880                    	TEST	AL,~ (attr_all + attr_ignore + attr_volume_id)
    99                                  				; Mask out any meaningless bits
   100 00000004 7512                    	JNZ	AttErr
   101 00000006 A808                    	TEST	AL,attr_volume_id
   102 00000008 7408                    	JZ	NoReset
   103 0000000A 810E[0000]8000          	OR	word [DOS34_FLAG],DBCS_VOLID      ;AN000;FOR dbcs volid
   104 00000010 B008                    	MOV	AL,attr_volume_id
   105                                  NoReset:
   106 00000012 0C20                    	OR	AL,attr_archive ; File changed
   107 00000014 A850                    	TEST	AL,attr_directory + attr_device
   108 00000016 740A                    	JZ	ATT_OK
   109                                  AttErr:
   110 00000018 B80500                  	MOV	AX,5		; Attribute problem
   111                                  Exterr_Locus equ ExtErr_locus	; NASM port label
   112 0000001B C606[0000]01            	MOV	byte [Exterr_Locus],errLOC_Unk
   113 00000020 EB63                    	JMP	SHORT SET_MKND_ERR ; Gotta use MKDIR to make dirs, NEVER allow
   114                                  				   ;	attr_device to be set.
   115                                  ATT_OK:
   116 00000022 C43E[0000]              	LES	DI,[THISSFT]
   117 00000026 06                      	PUSH	ES
   118 00000027 C436[0000]              	LES	SI,[THISCDS]
   119 0000002B 83FEFF                  	CMP	SI,-1
   120 0000002E 7514                    	JNZ	TEST_RE_NET
   121 00000030 07                      	POP	ES
   122                                   assume es:nothing
   123                                  
   124                                  ;Extended open hooks
   125 00000031 F606[0000]01            	TEST	byte [EXTOPEN_ON],ext_open_on    ;AN000;EO. from extnded open
   126 00000036 7403                    	JZ	NOEXTOP 		    ;AN000;EO. no, do normal
   127                                  IFS_extopen:
   128 00000038 E9(0000)                	jmp	IFS_extopen_shared
   129                                  NOEXTOP:				    ;AN000;
   130                                  ;Extended open hooks
   131                                  
   132                                  %IFN Installed
   133                                  	mov byte [create_redirector_called], -1
   134                                  	transfer NET_SEQ_CREATE
   135                                  %ELSE
   136 0000003B 50                      	PUSH	AX
   137                                  multNET equ MultNET	; NASM port equate
   138 0000003C B81811                  	MOV	AX,(multNET << 8) | 24
   139 0000003F CD2F                    	INT	2FH
   140 00000041 5B                      	POP	BX			; BX is trashed anyway
   141 00000042 EB21                    	jmp create_redirector_ret
   142                                  %ENDIF
   143                                  
   144                                  TEST_RE_NET:
   145 00000044 26F744430080            	TEST	word [ES:SI + curdir_flags],curdir_isnet
   146 0000004A 07                      	POP	ES
   147                                   assume es:nothing
   148 0000004B 741E                    	JZ	LOCAL_CREATE
   149                                  
   150 0000004D E8BC00                  	CALL	Set_EXT_mode		    ;AN000;EO.
   151 00000050 7205                    	JC	SHORT dochk		    ;AN000;EO.
   152 00000052 26834D0202              	OR	word [ES:DI + sf_mode],sharing_compat + open_for_both ;IFS.
   153                                  dochk:
   154                                   ;	invoke	IFS_SHARE_CHECK 	    ;AN000;IFS. check share
   155                                   ;	JC	nomore			    ;AN000;IFS. share violation
   156                                  
   157                                  ;Extended open hooks
   158 00000057 F606[0000]01            	TEST	byte [EXTOPEN_ON],ext_open_on    ;AN000;EO. from extnded open
   159 0000005C 75DA                    	JNZ	IFS_extopen		    ;AN000;EO. yes, issue extended open
   160                                  ;Extended open hooks
   161                                  
   162                                  %IFN Installed
   163                                  	mov byte [create_redirector_called], -1
   164                                  	transfer NET_CREATE
   165                                  %ELSE
   166 0000005E 50                      	PUSH	AX
   167 0000005F B81711                  	MOV	AX,(multNET << 8) | 23
   168 00000062 CD2F                    	INT	2FH
   169 00000064 5B                      	POP	BX			; BX is trashed anyway
   170                                  create_redirector_ret:
   171 00000065 C606[0000]FF            	mov byte [create_redirector_called], -1
   172                                  nomore:
   173 0000006A C3                      	return
   174                                  %ENDIF
   175                                  
   176                                  LOCAL_CREATE:
   177 0000006B E89E00                  	CALL	Set_EXT_mode	       ;AN000;EO. set mode if from extended open
   178 0000006E 7205                    	JC	setdone 	       ;AN000;EO.
   179 00000070 26834D0202              	OR	word [ES:DI + sf_mode],sharing_compat+open_for_both
   180                                  setdone:
   181 00000075 E8(0000)                	EnterCrit   critDisk
   182 00000078 E8(0000)                	invoke	MakeNode
   183 0000007B 730F                    	JNC	Create_ok
   184 0000007D C606[0000]FF            	mov	byte [VOLCHNG_FLAG],-1	; indicate no change in volume label
   185 00000082 E8(0000)                	LeaveCrit   critDisk
   186                                  
   187                                  	entry	SET_MKND_ERR
   188                                  	DOSAssume   CS,<DS>,"Set_MkNd_Err"
   189                                  	ASSUME	ES:NOTHING
   190                                  ; Looks up MakeNode errors and converts them. AL is MakeNode
   191                                  ; error, SI is GetPath bad spot return if path_not_found error.
   192                                  
   193 00000085 BB[0000]                	MOV	BX,OFFSET CRTERRTAB
   194 00000088 2ED7                    	cs xlatb
   195                                  CreatBadRet:
   196 0000008A F9                      	STC
   197 0000008B C3                      	return
   198                                  
   199                                  section DOSCODETABLE
   200                                  Public CREAT001S,CREAT001E
   201                                  CREAT001S  label  byte
   202                                  CRTERRTAB LABEL BYTE		; Lookup table for MakeNode returns
   203 00000000 ??                      	DB	?			; none
   204 00000001 05                      	DB	error_access_denied	; MakeNode error 1
   205 00000002 52                      	DB	error_cannot_make	; MakeNode error 2
   206 00000003 50                      	DB	error_file_exists	; MakeNode error 3
   207 00000004 03                      	DB	error_path_not_found	; MakeNode error 4
   208 00000005 05                      	DB	error_access_denied	; MakeNode error 5
   209 00000006 20                      	DB	error_sharing_violation ; MakeNode error 6
   210 00000007 02                      	DB	error_file_not_found	; MakeNode error 7
   211                                  CREAT001E  label byte
   212                                  section DOSCODECODE
   213                                  
   214                                  ;
   215                                  ; We have just created a new file.  This results in the truncation of old
   216                                  ; files.  We must inform the sharer to slash all the open SFT's for this
   217                                  ; file to the current size.
   218                                  ;
   219                                  Create_ok:
   220                                  ; If we created a volume id on the diskette, set the VOLCHNG_FLAG to logical
   221                                  ; drive number to force a Build BPB after Media Check.
   222                                  
   223                                  ;;; FASTOPEN 8/29/86
   224 0000008C E8(0000)                	invoke	FastOpen_Delete
   225                                  ;;; FASTOPEN 8/29/86
   226 0000008F A0[0000]                	mov	al,[SATTRIB]
   227 00000092 A808                    	test	al,attr_volume_id
   228 00000094 741C                    	jz	NoVolLabel
   229 00000096 C43E[0000]              	LES	DI,[THISCDS]
   230 0000009A 268A25                  	mov	ah,byte ptr [ES:DI]	; get drive letter
   231 0000009D 80EC41                  	sub	ah,'A'                  ; convert to drive letter
   232 000000A0 8826[0000]              	mov	[VOLCHNG_FLAG],ah	;Set flag to indicate volid change
   233 000000A4 B701                    	MOV	BH,1			;AN000;>32mb set volume id to boot record
   234 000000A6 E81F00                  	CALL	Set_Media_ID		;AN000;>32mb
   235                                  
   236 000000A9 E8(0000)                	EnterCrit CritDisk
   237 000000AC E8(0000)                	invoke	FatRead_CDS		; force a media check
   238 000000AF E8(0000)                	LeaveCrit CritDisk
   239                                  NoVolLabel:
   240 000000B2 B80200                  	MOV	ax,2
   241                                  ThisSFT equ THISSFT	; NASM port label
   242 000000B5 C43E[0000]              	LES	DI,[ThisSFT]
   243                                  %if installed
   244 000000B9 FF1E[3800]              	call	far [JShare + 14 * 4]
   245                                  %else
   246                                  	Call	ShSU
   247                                  %endif
   248 000000BD E8(0000)                	LeaveCrit   critDisk
   249 000000C0 E9(0000)                	transfer SET_SFT_MODE
   250                                  
   251                                  EndProc DOS_Create
   252                                  
   253                                  ; Inputs:
   254                                  ;	[WFP_START] Points to WFP string ("d:/" must be first 3 chars, NUL
   255                                  ;		terminated)
   256                                  ;	[CURR_DIR_END] Points to end of Current dir part of string
   257                                  ;		( = -1 if current dir not involved, else
   258                                  ;		 Points to first char after last "/" of current dir part)
   259                                  ;	[THISCDS] Points to CDS being used
   260                                  ;		(Low word = -1 if NUL CDS (Net direct request))
   261                                  ;	[THISSFT] Points to SFT to fill in if file created
   262                                  ;		(sf_mode field set so that FCB may be detected)
   263                                  ;	[SATTRIB] Is attribute of search, determines what files can be found
   264                                  ;	AX is Attribute to create
   265                                  ; Function:
   266                                  ;	Try to create the specified file truncating an old one that exists
   267                                  ; Outputs:
   268                                  ;	sf_ref_count is NOT altered
   269                                  ;	CARRY CLEAR
   270                                  ;	    THISSFT filled in.
   271                                  ;		sf_mode = sharing_compat + open_for_both for Non-FCB SFT
   272                                  ;	CARRY SET
   273                                  ;	    AX is error code
   274                                  ;		error_path_not_found
   275                                  ;			Bad path (not in curr dir part if present)
   276                                  ;		error_bad_curr_dir
   277                                  ;			Bad path in current directory part of path
   278                                  ;		error_access_denied
   279                                  ;			Create a second volume id or create a dir
   280                                  ;		error_file_exists
   281                                  ;			Already a file by this name
   282                                  ; DS preserved, others destroyed
   283                                  
   284                                  	procedure   DOS_Create_New,NEAR
   284          ******************       warning: proc DOS_Create_New... [-w+user]
   285                                  	DOSAssume   CS,<DS>,"DOS_Create_New"
   286                                  	ASSUME	ES:NOTHING
   287                                  
   288 000000C3 B401                    	MOV	AH,1		; Truncate is NOT OK
   289 000000C5 E93AFF                  	JMP	Create_inter
   290                                  
   291                                  EndProc DOS_Create_New
   292                                  
   293                                  
   294                                  ; Inputs:
   295                                  ;	NAME1= Volume ID
   296                                  ;	BH= 0, delete volume id
   297                                  ;	    1, set new volume id
   298                                  ;	DS= DOSGROUP
   299                                  ; Function:
   300                                  ;	Set Volume ID to DOS 4.00 Boot record.
   301                                  ; Outputs:
   302                                  ;	CARRY CLEAR
   303                                  ;	    volume id set
   304                                  ;	CARRY SET
   305                                  ;	    AX is error code
   306                                  
   307                                  	procedure   Set_Media_ID,NEAR		   ;AN000;
   307          ******************       warning: proc Set_Media_ID... [-w+user]
   308                                  	DOSAssume   CS,<DS>,"DOS_Create_New"       ;AN000;
   309                                  	ASSUME	ES:NOTHING			   ;AN000;
   310                                  
   311 000000C8 50                      	PUSH	AX		;AN000;;>32mb
   312 000000C9 06                      	PUSH	ES		;AN000;;>32mb
   313 000000CA 57                      	PUSH	DI		;AN000;;>32mb
   314                                  
   315 000000CB FEC4                    	INC	AH		;AN000;;>32mb  bl=drive #
   316 000000CD 88E3                    	MOV	BL,AH		;AN000;;>32mb  bl=drive # (A=1,B=2,,,)
   317 000000CF B00D                    	MOV	AL,0DH		;AN000;;>32mb  generic IOCTL
   318 000000D1 B96608                  	MOV	CX,0866H	;AN001;;>32mb  get media id
   319                                  PACKET_TEMP equ Packet_Temp	; NASM port label
   320 000000D4 BA[0000]                	MOV	DX,OFFSET PACKET_TEMP wrt DOSGROUP	;AN000;>32mb
   321                                  
   322 000000D7 53                      	PUSH	BX		;AN000;;>32mb
   323 000000D8 52                      	PUSH	DX		;AN000;;>32mb
   324 000000D9 30FF                    	XOR	BH,BH		;AN000;;>32mb
   325                                  
   326 000000DB E8(0000)                	invoke	D_IOCTL		;AN000;;>32mb
   327 000000DE 5A                      	POP	DX		;AN000;;>32mb
   328 000000DF 5B                      	POP	BX		;AN000;;>32mb
   329 000000E0 7224                    	JC	geterr		;AN000;;>32mb
   330                                  
   331 000000E2 08FF                    	OR	BH,BH		;AN000;;>32mb delete volume id
   332                                  NoName equ Noname	; NASM port label
   333 000000E4 7405                    	JZ	NoName		;AN000;>32mb yes
   334 000000E6 BE[0000]                	MOV	SI,OFFSET NAME1 wrt DOSGROUP   ;AN000;>32mb
   335 000000E9 EB03                    	JMP	SHORT doset	;AN000;>32mb yes
   336                                  Noname: 			;AN000;
   337 000000EB BE[0000]                	MOV	SI,OFFSET NO_NAME_ID wrt DOSGROUP  ;AN000;>32mb
   338                                  doset:					       ;AN000;
   339 000000EE 89D7                    	MOV	DI,DX		;AN000;;>32mb
   340                                  MEDIA_LABEL equ MEDIA_Label	; NASM port equate
   341 000000F0 83C706                  	ADD	DI,MEDIA_LABEL	;AN000;;>32mb
   342 000000F3 16                      	PUSH	ss		;AN000;;>32mb  move new volume id to packet
   343 000000F4 1F                      	POP	DS		;AN000;;>32mb
   344                                   assume ds:DOSGROUP
   345 000000F5 16                      	PUSH	ss		;AN000;;>32mb
   346 000000F6 07                      	POP	ES		;AN000;;>32mb
   347                                   assume es:DOSGROUP
   348 000000F7 B90B00                  	MOV	CX,11		;AN000;;>32mb
   349 000000FA F3A4                    	REP	MOVSB		;AN000;;>32mb
   350 000000FC B94608                  	MOV	CX,0846H	;AN001;;>32mb
   351 000000FF B00D                    	MOV	AL,0DH		;AN000;;>32mb
   352 00000101 30FF                    	XOR	BH,BH		;AN000;;>32mb
   353 00000103 E8(0000)                	invoke	D_IOCTL		;AN000;;>32mb  set volume id
   354                                  geterr: 			;AN000;
   355 00000106 16                      	PUSH	ss		;AN000;>32mb
   356 00000107 1F                      	POP	DS		;AN000;>32mb   ds= dosgroup
   357                                   assume ds:DOSGROUP
   358                                  
   359 00000108 5F                      	POP	DI		;AN000;;>32mb
   360 00000109 07                      	POP	ES		;AN000;;>32mb
   361                                   assume es:nothing
   362 0000010A 58                      	POP	AX		;AN000;;>32mb
   363 0000010B C3                      	return			;AN000;>32mb
   364                                  
   365                                  EndProc Set_Media_ID		;AN000;
   366                                  
   367                                  
   368                                  ; Inputs:
   369                                  ;	[EXTOPEN_ON]= flag for extende open
   370                                  ;	SAVE_BX= mode specified in Extended Open
   371                                  ; Function:
   372                                  ;	Set mode in ThisSFT
   373                                  ; Outputs:
   374                                  ;	carry set,mode is set if from Extended Open
   375                                  ;	carry clear, mode not set yet
   376                                  
   377                                  %IFN IBMCOPYRIGHT
   378                                  	public Set_EXT_mode
   379                                  %ENDIF
   380                                  
   381                                  	procedure   Set_EXT_mode,NEAR	    ;AN000;
   381          ******************       warning: proc Set_EXT_mode... [-w+user]
   382                                  	ASSUME	ES:NOTHING,DS:NOTHING	    ;AN000;
   383                                  
   384 0000010C 36F606[0000]01          	TEST	byte [ss:EXTOPEN_ON],ext_open_on    ;AN000;EO. from extnded open
   385 00000112 740B                    	JZ	NOTEX			    ;AN000;EO. no, do normal
   386 00000114 50                      	PUSH	AX			    ;AN000;EO.
   387 00000115 36A1[0000]              	MOV	AX,[ss:SAVE_BX]		    ;AN000;EO.
   388 00000119 26094502                	OR	[ES:DI + sf_mode],AX	    ;AN000;EO.
   389 0000011D 58                      	POP	AX			    ;AN000;EO.
   390 0000011E F9                      	STC				    ;AN000;EO.
   391                                  NOTEX:					    ;AN000;
   392 0000011F C3                      	return				    ;AN000;EO.
   393                                  
   394                                  EndProc Set_EXT_mode			    ;AN000;
   395                                  
   396                                      END
   397                                  
   398                                  
