main.html

#include <stdio.h>
#include <stdlib.h>
#include <dos.h>
void main(void) {
union REGS regs_ent, regs_saida;
struct SREGS segs;
int i, j;
int tam_estrutura;
struct SystemTableEntry {
struct SystemTableEntry far *proximo;
unsigned conta_arq;
unsigned conta_indic;
unsigned modo_abertura;
char atributo_arq;
unsigned local_remoto;
unsigned far *DPD;
unsigned agrupamento_inicial;
unsigned hora;
unsigned data;
long tam_arquivo;
long desloc_atual;
unsigned agrupamento_relativo;
long num_setor_diretorio;
char desloc_entrada_diretorio;
char nomearq_ext[11];
} far *tabela_ptr, far *arquivo;
long far *tabela_sistema;
regs_ent.x.ax = 0x3001;
intdos(®s_ent, ®s_saida);
if(regs_saida.h.al < 3) {
printf(
"Este programa requer o DOS versão 3 ou posterior\n"
);
exit(1);
}
else if(regs_saida.h.al == 3)
tam_estrutura = 0x35;
else if(regs_saida.h.al >= 4)
tam_estrutura = 0x3B;
regs_ent.h.ah = 0x52;
intdos(®s_ent, ®s_saida, &segs);
tabela_sistema=MK_FP(segs.es, regs_saida.x.bx+4);
tabela_ptr = (struct SystemTableEntry far*) *tabela_sistema;
do {
printf("%d entradas na tabela\n", tabela_ptr->conta_arq);
for(i=0; i<tabela_ptr->conta_arq; i++) {
arquivo = MK_FP(
FP_SEG(tabela_ptr),
FP_OFF(tabela_ptr) + (i+tam_estrutura)
);
if(arquivo->conta_indic) {
for(j=0; j<8; j++)
if(arquivo->nomearq_ext[j] != ' ')
putchar(arquivo->nomearq_ext[j]);
else
break;
if(arquivo->nomearq_ext[8] != ' ')
putchar('.');
for(j=8; j<11; j++)
if(arquivo->nomearq_ext[j] != ' ')
putchar(arquivo->nomearq_ext[j]);
printf(
"%ld bytes %x atributo %d referências\n",
arquivo->tam_arquivo,
arquivo->atributo_arq,
arquivo->conta_indic
);
}
}
tabela_ptr = tabela_ptr->proximo;
} while(FP_OFF(tabela_ptr) != 0xFFFF);
}
Comentários
Postar um comentário
Your Theme Here.