cos1950
26-10-2003, 18:23
Il listato prova.c qui sotto compilato con TurboC 2.00 funziona, con Microsoft C 6.00, non funziona.
Effettua la ricerca del primo file nella directory indicata con una chiamata al servizio 4Eh del DOS, prima perö va settata la DTA (Area di trasferimento del Disco) con una chiamata al servizio 1Ah.
Il problema sono le macro FP_SEG e FP_OFF che evidentemente non generano indirizzi di segmento e offset validi.
Si dovrebbe risolvere il tutto con un cast opportuno, ma solo dio sa qual è...
C'è qualcuno che puö fare le sue veci? :D:D
#include <dos.h>
static char *file = " ";
main()
{
union REGS regs;
struct SREGS sregs;
struct find_t *dta;
int i;
char *s;
dta = (struct find_t *) malloc(sizeof(struct find_t));
strcpy(file, "c:\\c600\\*.*");
strcpy(dta->name, "c:\\c600\\*.*");
regs.h.ah = 0x1a;
regs.x.dx = (unsigned) FP_OFF(dta);
sregs.ds = (unsigned) FP_SEG(dta);
intdosx(®s, ®s, &sregs);
regs.h.ah = 0x4e;
regs.x.dx = (unsigned) FP_OFF(file);
sregs.ds = (unsigned) FP_SEG( file);
regs.x.cx = _A_NORMAL | _A_RDONLY | _A_HIDDEN | _A_SYSTEM | _A_VOLID | _A_SUBDIR | _A_ARCH ;
intdosx(®s, ®s, &sregs);
printf("%d %s\n", regs.x.ax, dta->name);
getch();
}
Il risultato è che in AX c'è il valore 3 (e non 0) che indica che non ü stato trovato alcun file, il carryflag é settato a 1, mentre la Dir contiene almeno 7-8 file.
Lo so che c'é la funzione di libreria findFirst(char *, int); perö il problema resta...
Effettua la ricerca del primo file nella directory indicata con una chiamata al servizio 4Eh del DOS, prima perö va settata la DTA (Area di trasferimento del Disco) con una chiamata al servizio 1Ah.
Il problema sono le macro FP_SEG e FP_OFF che evidentemente non generano indirizzi di segmento e offset validi.
Si dovrebbe risolvere il tutto con un cast opportuno, ma solo dio sa qual è...
C'è qualcuno che puö fare le sue veci? :D:D
#include <dos.h>
static char *file = " ";
main()
{
union REGS regs;
struct SREGS sregs;
struct find_t *dta;
int i;
char *s;
dta = (struct find_t *) malloc(sizeof(struct find_t));
strcpy(file, "c:\\c600\\*.*");
strcpy(dta->name, "c:\\c600\\*.*");
regs.h.ah = 0x1a;
regs.x.dx = (unsigned) FP_OFF(dta);
sregs.ds = (unsigned) FP_SEG(dta);
intdosx(®s, ®s, &sregs);
regs.h.ah = 0x4e;
regs.x.dx = (unsigned) FP_OFF(file);
sregs.ds = (unsigned) FP_SEG( file);
regs.x.cx = _A_NORMAL | _A_RDONLY | _A_HIDDEN | _A_SYSTEM | _A_VOLID | _A_SUBDIR | _A_ARCH ;
intdosx(®s, ®s, &sregs);
printf("%d %s\n", regs.x.ax, dta->name);
getch();
}
Il risultato è che in AX c'è il valore 3 (e non 0) che indica che non ü stato trovato alcun file, il carryflag é settato a 1, mentre la Dir contiene almeno 7-8 file.
Lo so che c'é la funzione di libreria findFirst(char *, int); perö il problema resta...