Implement Int 2F/AX=120Bh based on RBIL description
This commit is contained in:
parent
ad3d7802f6
commit
c9300387e7
@ -58,8 +58,10 @@ static BYTE *file_hRcsId =
|
||||
/* bits 2, 3 reserved */
|
||||
|
||||
/* bits 4, 5, 6 sharing modes */
|
||||
/* see PC Mag Nov 15, 1988 "Networked Database" p234 by Frank J Derfler Jr */
|
||||
#define O_SHAREMASK 0x0070 /* mask to isolate shared bits */
|
||||
|
||||
#define O_COMPAT 0x0000 /* default, compatibility mode */
|
||||
#define O_DENYALL 0x0010 /* sharing bits */
|
||||
#define O_DENYWRITE 0x0020 /* " " */
|
||||
#define O_DENYREAD 0x0030 /* " " */
|
||||
|
@ -1797,6 +1797,28 @@ VOID ASMCFUNC int2F_12_handler(struct int2f12regs r)
|
||||
default_drive,
|
||||
r.callerARG1, /* error, from RBIL passed on stack */
|
||||
CDSp[(WORD)default_drive].cdsDpb->dpb_device);
|
||||
r.FLAGS |= FLG_CARRY;
|
||||
if (r.AL == 1) r.FLAGS &= ~FLG_CARRY; /* carry clear if should retry */
|
||||
break;
|
||||
|
||||
case 0x0b: /* sharing violation occurred */
|
||||
{
|
||||
/* ES:DI = SFT for previous open of file */
|
||||
sft FAR *sftp = MK_FP(r.ES, r.DI);
|
||||
/* default to don't retry, ie fail/abort/etc other than retry */
|
||||
r.FLAGS |= FLG_CARRY;
|
||||
/* from RBIL if SFT for FCB or compatibility mode without NOINHERIT call int24h */
|
||||
if ((sftp->sft_mode & O_FCB) || !(sftp->sft_mode & (O_SHAREMASK | O_NOINHERIT)))
|
||||
{
|
||||
r.AL = CriticalError(0x38, /* ignore/retry/fail - ??? */
|
||||
default_drive,
|
||||
r.callerARG1, /* error, from RBIL passed on stack */
|
||||
CDSp[(WORD)default_drive].cdsDpb->dpb_device);
|
||||
/* clear carry if should retry */
|
||||
if (r.AL == 1) r.FLAGS &= ~FLG_CARRY;
|
||||
}
|
||||
r.AX = 0x20; /* error sharing violation */
|
||||
}
|
||||
break;
|
||||
|
||||
case 0x0c: /* perform "device open" for device, set owner for FCB */
|
||||
|
Loading…
Reference in New Issue
Block a user