| version 1.4, 2004/01/10 17:36:07 | version 1.8, 2004/01/22 01:10:04 | 
| Line 1 | Line 1 | 
 | #include        "compiler.h" | #include        "compiler.h" | 
 |  |  | 
 |  | #if defined(SUPPORT_HOSTDRV) | 
 |  |  | 
 | #if defined(OSLANG_EUC) | #if defined(OSLANG_EUC) | 
 | #include        "codecnv.h" | #include        "codecnv.h" | 
 | #endif | #endif | 
| Line 8 | Line 11 | 
 | #include        "hostdrvs.h" | #include        "hostdrvs.h" | 
 |  |  | 
 |  |  | 
| static const HDRVDIR hddroot = {"           ", 0, 0, 0x10, {0}, {0}}; | static const HDRVDIR hddroot = {"           ", 0, 0, 0, 0x10, {0}, {0}}; | 
 |  |  | 
 | static const BYTE dospathchr[] = { | static const BYTE dospathchr[] = { | 
 | 0xfa, 0x23,             // '&%$#"!  /.-,+*)( | 0xfa, 0x23,             // '&%$#"!  /.-,+*)( | 
| Line 100  static BOOL hddsea(void *vpItem, void *v | Line 103  static BOOL hddsea(void *vpItem, void *v | 
 | return(FALSE); | return(FALSE); | 
 | } | } | 
 |  |  | 
 |  | static BOOL hddseadir(void *vpItem, void *vpArg) { | 
 |  |  | 
 |  | if ((((HDRVLST)vpItem)->di.attr & 0x10) && | 
 |  | (!memcmp(((HDRVLST)vpItem)->di.fcbname, vpArg, 11))) { | 
 |  | return(TRUE); | 
 |  | } | 
 |  | return(FALSE); | 
 |  | } | 
 |  |  | 
 | LISTARRAY hostdrvs_getpathlist(const char *realpath) { | LISTARRAY hostdrvs_getpathlist(const char *realpath) { | 
 |  |  | 
 | FLISTH          flh; | FLISTH          flh; | 
| Line 125  LISTARRAY hostdrvs_getpathlist(const cha | Line 137  LISTARRAY hostdrvs_getpathlist(const cha | 
 | break; | break; | 
 | } | } | 
 | CopyMemory(hdd->di.fcbname, fcbname, 11); | CopyMemory(hdd->di.fcbname, fcbname, 11); | 
 |  | hdd->di.exist = 1; | 
 | hdd->di.caps = fli.caps; | hdd->di.caps = fli.caps; | 
 | hdd->di.size = fli.size; | hdd->di.size = fli.size; | 
 | hdd->di.attr = fli.attr; | hdd->di.attr = fli.attr; | 
 | hdd->di.date = fli.date; | hdd->di.date = fli.date; | 
 | hdd->di.time = fli.time; | hdd->di.time = fli.time; | 
 | milstr_ncpy(hdd->realname, fli.path, sizeof(hdd->realname)); | milstr_ncpy(hdd->realname, fli.path, sizeof(hdd->realname)); | 
| TRACEOUT(("%s -> %11s", fli.path, fcbname)); | //                      TRACEOUT(("%s -> %11s", fli.path, fcbname)); | 
 | } | } | 
 | } while(file_listnext(flh, &fli) == SUCCESS); | } while(file_listnext(flh, &fli) == SUCCESS); | 
 | if (listarray_getitems(ret) == 0) { | if (listarray_getitems(ret) == 0) { | 
| Line 237  hdsgrp_err: | Line 250  hdsgrp_err: | 
 | return(FAILURE); | return(FAILURE); | 
 | } | } | 
 |  |  | 
| BOOL hostdrvs_newrealpath(HDRVPATH *hdp, char *dospath) { | BOOL hostdrvs_getrealdir(char *path, int size, char *fcb, char *dospath) { | 
 |  |  | 
 | char            path[MAX_PATH]; |  | 
 | LISTARRAY       lst; | LISTARRAY       lst; | 
 | HDRVLST         hdl; | HDRVLST         hdl; | 
 | char            fcbname[11]; |  | 
 | char            dosname[16]; |  | 
 | UINT            i; |  | 
 | char            *p; |  | 
 |  |  | 
| file_cpyname(path, np2cfg.hdrvroot, sizeof(path)); | file_cpyname(path, np2cfg.hdrvroot, size); | 
| lst = NULL; | if (dospath[0] == '\\') { | 
| if (dospath[0] != '\\') { | file_setseparator(path, size); | 
| goto hdsgrp_err; | dospath++; | 
|  | } | 
|  | else if (dospath[0] != '\0') { | 
|  | goto hdsgrd_err; | 
 | } | } | 
 | while(1) { | while(1) { | 
| file_setseparator(path, sizeof(path)); | dospath = dospath2fcb(fcb, dospath); | 
| dospath++; |  | 
| if (dospath[0] == '\0') { |  | 
| goto hdsgrp_err; |  | 
| } |  | 
| dospath = dospath2fcb(fcbname, dospath); |  | 
 | if (dospath[0] != '\\') { | if (dospath[0] != '\\') { | 
 | break; | break; | 
 | } | } | 
 | listarray_destroy(lst); |  | 
 | lst = hostdrvs_getpathlist(path); | lst = hostdrvs_getpathlist(path); | 
| hdl = (HDRVLST)listarray_enum(lst, hddsea, fcbname); | hdl = (HDRVLST)listarray_enum(lst, hddseadir, fcb); | 
| if ((hdl == NULL) || (!(hdl->di.attr & 0x10))) { | if (hdl != NULL) { | 
| goto hdsgrp_err; | file_catname(path, hdl->realname, size); | 
 | } | } | 
| file_catname(path, hdl->realname, sizeof(path)); | listarray_destroy(lst); | 
|  | if (hdl == NULL) { | 
|  | goto hdsgrd_err; | 
|  | } | 
|  | file_setseparator(path, size); | 
|  | dospath++; | 
 | } | } | 
 | if (dospath[0] != '\0') { | if (dospath[0] != '\0') { | 
| goto hdsgrp_err; | goto hdsgrd_err; | 
|  | } | 
|  | return(SUCCESS); | 
|  |  | 
|  | hdsgrd_err: | 
|  | return(FAILURE); | 
|  | } | 
|  |  | 
|  | BOOL hostdrvs_newrealpath(HDRVPATH *hdp, char *dospath) { | 
|  |  | 
|  | char            path[MAX_PATH]; | 
|  | char            fcb[11]; | 
|  | LISTARRAY       lst; | 
|  | HDRVLST         hdl; | 
|  | char            dosname[16]; | 
|  | UINT            i; | 
|  | char            *p; | 
|  |  | 
|  | if ((hostdrvs_getrealdir(path, sizeof(path), fcb, dospath) != SUCCESS) || | 
|  | (fcb[0] == ' ')) { | 
|  | return(FAILURE); | 
 | } | } | 
 | listarray_destroy(lst); |  | 
 | lst = hostdrvs_getpathlist(path); | lst = hostdrvs_getpathlist(path); | 
| hdl = (HDRVLST)listarray_enum(lst, hddsea, fcbname); | hdl = (HDRVLST)listarray_enum(lst, hddsea, fcb); | 
 | if (hdl != NULL) { | if (hdl != NULL) { | 
 | file_catname(path, hdl->realname, sizeof(path)); | file_catname(path, hdl->realname, sizeof(path)); | 
 | if (hdp) { | if (hdp) { | 
| Line 285  BOOL hostdrvs_newrealpath(HDRVPATH *hdp, | Line 314  BOOL hostdrvs_newrealpath(HDRVPATH *hdp, | 
 | } | } | 
 | else { | else { | 
 | p = dosname; | p = dosname; | 
| for (i=0; (i<8) && (fcbname[i] != ' '); i++) { | for (i=0; (i<8) && (fcb[i] != ' '); i++) { | 
| *p++ = fcbname[i]; | *p++ = fcb[i]; | 
 | } | } | 
| if (fcbname[8] != ' ') { | if (fcb[8] != ' ') { | 
 | *p++ = '.'; | *p++ = '.'; | 
| for (i=8; (i<11) && (fcbname[i] != ' '); i++) { | for (i=8; (i<11) && (fcb[i] != ' '); i++) { | 
| *p++ = fcbname[i]; | *p++ = fcb[i]; | 
 | } | } | 
 | } | } | 
 | *p = '\0'; | *p = '\0'; | 
 | file_catname(path, dosname, sizeof(path)); | file_catname(path, dosname, sizeof(path)); | 
 | if (hdp) { | if (hdp) { | 
| CopyMemory(hdp->di.fcbname, fcbname, 11); | ZeroMemory(&hdp->di, sizeof(hdp->di)); | 
| hdp->di.size = 0; | CopyMemory(hdp->di.fcbname, fcb, 11); | 
| hdp->di.attr = 0; |  | 
 | file_cpyname(hdp->path, path, sizeof(hdp->path)); | file_cpyname(hdp->path, path, sizeof(hdp->path)); | 
 | } | } | 
 | } | } | 
 | listarray_destroy(lst); | listarray_destroy(lst); | 
 | return(SUCCESS); | return(SUCCESS); | 
 |  |  | 
 | hdsgrp_err: |  | 
 | listarray_destroy(lst); |  | 
 | return(FAILURE); |  | 
 | } | } | 
 |  |  | 
 |  |  | 
 | // ---- | // ---- | 
 |  |  | 
 | void hostdrvs_fhdlreopen(LISTARRAY fhdl) { |  | 
 |  |  | 
 | (void)fhdl; |  | 
 | } |  | 
 |  |  | 
 | static BOOL fhdlallclose(void *vpItem, void *vpArg) { | static BOOL fhdlallclose(void *vpItem, void *vpArg) { | 
 |  |  | 
 | long    fh; | long    fh; | 
| Line 363  HDRVFILE hostdrvs_fhdlsea(LISTARRAY fhdl | Line 382  HDRVFILE hostdrvs_fhdlsea(LISTARRAY fhdl | 
 | return(ret); | return(ret); | 
 | } | } | 
 |  |  | 
 |  | #endif | 
 |  |  |