Скачиваний:
38
Добавлен:
01.05.2014
Размер:
4.42 Кб
Скачать
#include <dos.h>
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <io.h>
#include "sysp.h"

void main(int argc, char *argv[]);
void show(DFCB far *);

void main(int argc, char *argv[]) {

	 CVT far *cvt;
	 DFT far *dft;
	 unsigned i,j,k;
	 DFCB far *dfcb, far *file_dfcb;
	 int handle, flag, disk;

	 BOOT far *boot_rec;
	 int status;
	 char *buf;

	 char drive[_MAX_DRIVE], dir[_MAX_DIR];
	 char fname[_MAX_FNAME], ext[_MAX_EXT];
	 char name[12];

	 printf("€­д®а¬ жЁп ®Ў ®вЄалвле д ©« е DOS\n"
			  "Copyright Frolov A. (C),1990\n");

	 printf("€бб«Ґ¤гҐ¬ а бЇ®«®¦Ґ­ЁҐ д ©«  '%s'\n", argv[1]);

// ЋвЄалў Ґ¬ д ©«, ¤«п Є®в®а®Ј® Ўг¤Ґ¬ Ї®«гз вм бЇЁб®Є Є« бвҐа®ў

	 handle = open(argv[1], O_BINARY);
	 if(handle == 0) {
		printf("ЋиЁЎЄ  ЇаЁ ®вЄалвЁЁ д ©« !\n");
		exit(-1);
	 }

// ђ §ЎЁў Ґ¬ Їгвм д ©«  ­  б®бв ў«пойЁҐ Є®¬Ї®­Ґ­вл:
//   - ЎгЄў  ¤ЁбЄ ;
//   - Є в «®Ј;
//   - Ё¬п д ©« ;
//   - а биЁаҐ­ЁҐ Ё¬Ґ­Ё

	 _splitpath(argv[1], drive, dir, fname, ext);

// Љ®¬ЎЁ­Ёа㥬 бва®Єг Ё§ Ё¬Ґ­Ё Ё а биЁаҐ­Ёп

	 strcpy(name,fname);
	 for(i=0; i<8; i++) {
		if(name[i] == 0) break;
	 }
	 for(; i<8; i++) name[i] = ' ';
	 name[8] = 0;
	 strcat(name, &ext[1]);

// ЏаҐ®Ўа §гҐ¬ бва®Єг Ё¬Ґ­Ё ў § Ј« ў­лҐ ЎгЄўл

	 strupr(name);

// ‚лзЁб«пҐ¬ ­®¬Ґа ¤ЁбЄ®ў®¤ 

	 drive[0] = toupper(drive[0]);
	 disk = drive[0] - 'A';

	 printf("%s - %s - %s - %s : %s\n",
		drive, dir, fname, ext, name);


	 cvt=get_mcvt();     // Ђ¤аҐб ўҐЄв®а­®© в Ў«Ёжл бўп§Ё
	 dft=get_fdft(cvt);  // Ђ¤аҐб ­ з «  в Ў«Ёжл д ©«®ў

// ‘Ўа блў Ґ¬ д« Ј Ї®ЁбЄ  д ©« 

	 flag = 0;

	 for(;;) {
		if(dft == (DDCB far *)0) break;  // Љ®­Ґж в Ў«Ёжл д ©«®ў

		i=dft->file_count;

		for(j=0;j<i;j++) {   // –ЁЄ« Ї® д ©«®ўл¬ гЇа ў«пойЁ¬ Ў«®Є ¬

			dfcb=(&(dft->dfcb))+j; // Ђ¤аҐб DFCB д ©« 

// €йҐ¬ д ©« ў в Ў«ЁжҐ ®вЄалвле д ©«®ў

			k = memcmp(name,dfcb->filename,11);
			if(k == 0) {

				printf("” ©« ­ ©¤Ґ­!\n");
				printf("\nDFCB д ©« : %Fp\n\n",dfcb);

// ‡ Ї®¬Ё­ Ґ¬  ¤аҐб в Ў«Ёжл ¤«п ­ ©¤Ґ­­®Ј® д ©« 

				file_dfcb = dfcb;

// Џ®Є §лў Ґ¬ ᮤҐа¦Ё¬®Ґ в Ў«Ёжл ¤«п ­ ©¤Ґ­­®Ј® д ©« 

				show(file_dfcb);
				flag = 1;
				break;
			}

		 }
		 dft=get_ndft(dft);

		 if(flag == 1) break;
	 }

	 if(flag == 0) {
		printf("” ©« ­Ґ ­ ©¤Ґ­");
		close(handle);
		exit(-1);
	 }

// ‡ Є §лў Ґ¬ ЎгдҐа ¤«п з⥭Ёп BOOT-§ ЇЁбЁ.
// Ђ¤аҐб ЎгдҐа  ЇаЁбў Ёў Ґ¬ FAR-гЄ § вҐ«о.

	 boot_rec = malloc(sizeof(*boot_rec));

// —Ёв Ґ¬ § Ја㧮з­го § ЇЁбм ў ЎгдҐа

	 status = getboot((BOOT far*)boot_rec, disk);

// ‚лзЁб«пҐ¬ а §¬Ґа Є« бвҐа  ў Ў ©в е

	 i = boot_rec->bpb.clustsize * boot_rec->bpb.sectsize;
	 printf("\nђ §¬Ґа Є« бвҐа , Ў ©в®ў : %d",i);

// …б«Ё Їа®Ё§®и«  ®иЁЎЄ  (­ ЇаЁ¬Ґа, ­ҐЇа ўЁ«м­® гЄ § ­®
// ®Ў®§­ зҐ­ЁҐ ¤ЁбЄ ), § ўҐаи Ґ¬ а Ў®вг Їа®Ја ¬¬л

	 if(status) {
		printf("\nЋиЁЎЄ  ЇаЁ з⥭ЁЁ BOOT-ᥪв®а ");
		close(handle);
		exit(-1);
	 }

	 buf = malloc(i);

	 printf("\n‘ЇЁб®Є Є« бвҐа®ў д ©« :\n");

// —Ёв Ґ¬ д ©« Ї® Є« бвҐа ¬, ўлў®¤Ё¬ ­®¬Ґа
// Ї®б«Ґ¤­ҐЈ® Їа®зЁв ­­®Ј® Є« бвҐа , Є®в®ал©
// ЎҐаҐ¬ Ё§ в Ў«Ёжл д ©«®ў

	 for(;;) {

		read(handle, buf, i);
		if(eof(handle)) break;
		printf("%d ",file_dfcb->last_clu);

	 }

	 close(handle);
	 free(boot_rec);
	 free(buf);
	 exit(0);
}

// ”г­ЄжЁп ¤«п ®в®Ўа ¦Ґ­Ёп ᮤҐа¦Ё¬®Ј® в Ў«Ёжл д ©«®ў

void show(DFCB far *dfcb) {

	int k;

	printf("€¬п д ©« : ");
	for(k=0;k<11;k++) {
		putchar(dfcb->filename[k]);
	}

	printf("\nЉ®«ЁзҐбвў® file handles:       %d\n"
		"ђҐ¦Ё¬ ¤®бвгЇ :                 %d\n"
			"Џ®«Ґ reserv1:                  %04X\n"
			"€­д®а¬ жЁп ®Ў гбва®©б⢥:      %04X\n"
			"Ђ¤аҐб ¤а ©ўҐа :                %Fp\n"
			"Ќ з «м­л© Є« бвҐа:             %d\n"
			"‚६п:                         %04X\n"
			"„ в :                          %04X\n"
			"ђ §¬Ґа д ©«  ў Ў ©в е:         %ld\n"
			"’ҐЄг饥 ᬥ饭ЁҐ ў д ©«Ґ:      %ld\n"
			"Џ®«Ґ reserv2:                  %04X\n"
			"Џ®б«Ґ¤­Ё© Їа®зЁв ­­л© Є« бвҐа: %d\n"
			"‘ҐЈ¬Ґ­в PSP ў« ¤Ґ«мж  д ©« :   %04X\n"
			"Џ®«Ґ reserv7:                  %d\n"
			"--------------------------------------\n\n",
			dfcb->handl_num,
			dfcb->access_mode,
			dfcb->reserv1,
			dfcb->dev_info,
			dfcb->driver,
			dfcb->first_clu,
			dfcb->time,
			dfcb->date,
			dfcb->fl_size,
			dfcb->offset,
			dfcb->reserv2,
			dfcb->last_clu,
			dfcb->ownr_psp,
			dfcb->reserv7);
}
Соседние файлы в папке SHOW_DFT