Introduce get_cds1 to merge common code that checks for 0=default_drive,1=A,etc.

Make load_transfer() static.


git-svn-id: https://svn.code.sf.net/p/freedos/svn/kernel/trunk@1414 6ac86273-5f31-0410-b378-82cca8765d1b
This commit is contained in:
Bart Oldeman 2009-06-01 14:55:11 +00:00
parent eb318177c1
commit b10d86bcaa
3 changed files with 15 additions and 18 deletions

View File

@ -113,13 +113,21 @@ struct cds FAR *get_cds(unsigned drive)
return cdsp; return cdsp;
} }
/* same, but on input drv is 0 for default or 1=A, 2=B, etc. */
struct cds FAR *get_cds1(unsigned drv)
{
if (drv-- == 0) /* get default drive or convert to 0 = A:, 1 = B:, ... */
drv = default_drive;
return get_cds(drv);
}
#ifdef WITHFAT32 #ifdef WITHFAT32
struct dpb FAR * GetDriveDPB(UBYTE drive, COUNT * rc) struct dpb FAR * GetDriveDPB(UBYTE drive, COUNT * rc)
{ {
struct dpb FAR *dpb; struct dpb FAR *dpb;
struct cds FAR *cdsp; struct cds FAR *cdsp;
cdsp = get_cds(drive == 0 ? default_drive : drive - 1); cdsp = get_cds1(drive);
if (cdsp == NULL) if (cdsp == NULL)
{ {
@ -736,12 +744,9 @@ UWORD DosGetFree(UBYTE drive, UWORD * navc, UWORD * bps, UWORD * nc)
COUNT rg[4]; COUNT rg[4];
UWORD spc; UWORD spc;
/* next - "log" in the drive */
drive = (drive == 0 ? default_drive : drive - 1);
/* first check for valid drive */ /* first check for valid drive */
spc = -1; spc = -1;
cdsp = get_cds(drive); cdsp = get_cds1(drive);
if (cdsp == NULL) if (cdsp == NULL)
return spc; return spc;
@ -897,7 +902,7 @@ COUNT DosGetCuDir(UBYTE drive, BYTE FAR * s)
/* next - "log" in the drive */ /* next - "log" in the drive */
/* first check for valid drive */ /* first check for valid drive */
cdsp = get_cds(drive == 0 ? default_drive : drive - 1); cdsp = get_cds1(drive);
if (cdsp == NULL) if (cdsp == NULL)
return DE_INVLDDRV; return DE_INVLDDRV;

View File

@ -118,6 +118,7 @@ int idx_to_sft_(int SftIndex);
sft FAR *idx_to_sft(int SftIndex); sft FAR *idx_to_sft(int SftIndex);
int get_sft_idx(UCOUNT hndl); int get_sft_idx(UCOUNT hndl);
struct cds FAR *get_cds(unsigned dsk); struct cds FAR *get_cds(unsigned dsk);
struct cds FAR *get_cds1(unsigned dsk);
COUNT DosTruename(const char FAR * src, char FAR * dest); COUNT DosTruename(const char FAR * src, char FAR * dest);
/* dosidle.asm */ /* dosidle.asm */

View File

@ -233,15 +233,6 @@ void child_psp(seg para, seg cur_psp, int psize)
p->ps_cmd.ctBuffer[0] = 0xd; /* command tail */ p->ps_cmd.ctBuffer[0] = 0xd; /* command tail */
} }
STATIC UBYTE chkdrv(unsigned drive) /* from FCB: 0 = default, 1 = A:, ... */
{
if (drive)
drive--; /* 0 = A:, 1 = B:, ... */
else
drive = default_drive;
return get_cds(drive) ? 0 : 0xff; /* return 0 if drive is valid, else 0xff */
}
STATIC UWORD patchPSP(UWORD pspseg, UWORD envseg, exec_blk FAR * exb, STATIC UWORD patchPSP(UWORD pspseg, UWORD envseg, exec_blk FAR * exb,
BYTE FAR * fnam) BYTE FAR * fnam)
{ {
@ -295,11 +286,11 @@ set_name:
pspmcb->m_name[i] = '\0'; pspmcb->m_name[i] = '\0';
/* return value: AX value to be passed based on FCB values */ /* return value: AX value to be passed based on FCB values */
return chkdrv(psp->ps_fcb1.fcb_drive) | return (get_cds1(psp->ps_fcb1.fcb_drive) ? 0 : 0xff) |
(chkdrv(psp->ps_fcb2.fcb_drive) << 8); (get_cds1(psp->ps_fcb2.fcb_drive) ? 0 : 0xff00);
} }
int load_transfer(UWORD ds, exec_blk *exp, UWORD fcbcode, COUNT mode) STATIC int load_transfer(UWORD ds, exec_blk *exp, UWORD fcbcode, COUNT mode)
{ {
psp FAR *p = MK_FP(ds, 0); psp FAR *p = MK_FP(ds, 0);
psp FAR *q = MK_FP(cu_psp, 0); psp FAR *q = MK_FP(cu_psp, 0);