/* cds utilities */ /* #include "types.h" */ #include "sysvar.h" #include "cds.h" #include "dpb.h" #include #include "jointype.h" extern struct sysVarsType SysVars ; char fGetCDS(i, pLCDS) int i ; struct CDSType *pLCDS ; { struct CDSType far *cptr ; int j ; /* Get pointer to CDS */ if (i >= 0 && i < SysVars.cCDS) { *(long *)(&cptr) = SysVars.pCDS + (i * sizeof(*pLCDS)) ; /* Copy CDS to our program */ for (j=0 ; j < sizeof(*pLCDS) ; j++) *((char *)pLCDS+j) = *((char far *)cptr+j) ; return TRUE ; } ; return FALSE ; } char fPutCDS(i, pLCDS) int i ; struct CDSType *pLCDS ; { struct CDSType far *cptr ; int j ; if (i >= 0 && i < SysVars.cCDS) { *(long *)(&cptr) = SysVars.pCDS + (i * sizeof(*pLCDS)) ; for (j=0 ; j < sizeof(*pLCDS) ; j++) *((char far *)cptr+j) = *((char *)pLCDS+j) ; return TRUE ; } ; return FALSE ; } /* returns TRUE if drive i is a physical drive. Physical means that logical * drive n corresponds with physical drive n. This is the case ONLY if the * CDS is inuse and the DPB corresponding to the CDS has the physical drive * equal to the original drive. */ char fPhysical(i) int i ; { struct DPBType DPB ; struct DPBType *pd = &DPB ; struct DPBType far *dptr ; int j ; struct CDSType CDS ; if (!fGetCDS(i, &CDS)) return FALSE ; if (TESTFLAG(CDS.flags,CDSNET | CDSSPLICE | CDSLOCAL)) return FALSE ; *(long *)(&dptr) = CDS.pDPB ; for (j=0 ; j < sizeof(DPB) ; j++) *((char *)pd+j) = *((char far *)dptr+j) ; return(i == DPB.drive) ; } /* return TRUE if the specified drive is a network drive. i is a 0-based * quantity */ /* MODIFICATION HISTORY * * M000 June 5/85 Barrys * Removed extra net check. */ char fNet(i) int i ; { union REGS ir ; register union REGS *iregs = &ir ; /* Used for DOS calls */ struct CDSType CDS ; if (!fGetCDS(i, &CDS)) return FALSE ; iregs->x.ax = IOCTL9 ; /* Function 0x4409 */ iregs->x.bx = i + 1 ; intdos(iregs, iregs) ; /*** M000 return(TESTFLAG(CDS.flags,CDSNET) || TESTFLAG(iregs->x.dx,0x1000)) ; /***/ return(TESTFLAG(CDS.flags,CDSNET)) ; } /* return TRUE if the specified drive is a shared drive. i is a 0-based * quantity */ char fShared(i) int i ; { struct CDSType CDS ; union REGS ir ; register union REGS *iregs = &ir ; /* Used for DOS calls */ if (!fGetCDS(i, &CDS)) return FALSE ; iregs->x.ax = IOCTL9 ; /* Function 0x4409 */ iregs->x.bx = i + 1 ; intdos(iregs, iregs) ; return TESTFLAG(CDS.flags,CDSNET) || TESTFLAG(iregs->x.dx,0x0200) ; }