Добавил:
Studfiles2
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:
#include <dos.h>
#include <stdio.h>
#include <malloc.h>
#include <errno.h>
#include "sysp.h"
void main(void);
void main(void) {
union REGS reg;
struct SREGS segreg;
DPB _far *dbp;
DPB_FORMAT _far *dbp_f;
int sectors, i;
printf("\nЏа®Ја ¬¬ гЁз⮦Ёв ᮤҐа¦Ё¬®Ґ"
"\n81-© ¤®а®¦ЄЁ ¤ЁбЄ Ђ:."
"\n†Ґ« ҐвҐ Їа®¤®«¦Ёвм? (Y,N)\n");
// Ћ¦Ё¤ Ґ¬ ®вўҐв ®ЇҐа в®а Ё «Ё§Ёа㥬 ҐЈ®
i = getch();
if((i != 'y') && (i != 'Y')) exit(-1);
// ‡ Є §лў Ґ¬ Ї ¬пвм ¤«п Ў«®Є Ї а ¬Ґва®ў гбва®©бвў
dbp = malloc(sizeof(DPB));
// ‡ Є §лў Ґ¬ Ї ¬пвм ¤«п Ў«®Є Ї а ¬Ґва®ў гбва®©бвў ,
// Є®в®ал© Ўг¤Ґв ЁбЇ®«м§®ў ¤«п д®а¬ вЁа®ў Ёп
dbp_f = malloc(sizeof(DPB_FORMAT));
if(dbp == NULL || dbp_f == NULL) {
printf("\nЊ «® ®ЇҐа вЁў®© Ї ¬пвЁ!");
exit(-1);
}
// Џ®«гз Ґ¬ ⥪гйЁҐ Ї а ¬Ґвал ¤ЁбЄ Ђ:
dbp->spec = 0;
// ‚л§лў Ґ¬ Ї®¤дгЄжЁо 0Dh ¤«п ўлЇ®«ҐЁп
// ®ЇҐа жЁЁ з⥨п ⥪гйЁе Ї а ¬Ґва®ў ¤ЁбЄ Ђ:
reg.x.ax = 0x440d;
reg.h.bl = 1;
reg.x.cx = 0x0860;
reg.x.dx = FP_OFF(dbp);
segreg.ds = FP_SEG(dbp);
intdosx(®, ®, &segreg);
// Џа®ўҐа塞 д« Ј ЇҐаҐ®б
if(reg.x.cflag != 0) {
printf("\nЋиЁЎЄ : %d",reg.x.ax);
exit(-1);
}
// ‡ Ї®«пҐ¬ Ў«®Є Ї ଥва®ў ¤«п д®а¬ вЁа®ў Ёп.
dbp->spec = 5;
// ‘зЁвлў Ґ¬ Ё§ BPB Є®«ЁзҐбвў® ᥪв®а®ў ¤®а®¦ЄҐ
sectors = dbp->bpb.seccnt;
// Џ®¤Ј®в ў«Ёў Ґ¬ в Ў«Ёжг, ®ЇЁблў ойго д®а¬ в ¤®а®¦ЄЁ
// ‡ ЇЁблў Ґ¬ Є®«ЁзҐбвў® ᥪв®а®ў ¤®а®¦ЄҐ
dbp->trkcnt = sectors;
// „«п Є ¦¤®Ј® ᥪв®а ¤®а®¦ЄҐ ў в Ў«Ёжг
// § ЇЁблў Ґ¬ ҐЈ® ®¬Ґа Ё а §¬Ґа.
for(i = 0; i < sectors; i++) {
dbp->trk[i].no = i+1;
dbp->trk[i].size = 512;
}
// “бв ў«Ёў Ґ¬ ®ўлҐ Ї а ¬Ґвал ¤«п ¤ЁбЄ Ђ:
reg.x.ax = 0x440d;
reg.h.bl = 1;
reg.x.cx = 0x0840;
reg.x.dx = FP_OFF(dbp);
segreg.ds = FP_SEG(dbp);
intdosx(®, ®, &segreg);
// Џа®ўҐа塞 д« Ј ЇҐаҐ®б
if(reg.x.cflag != 0) {
printf("\nЋиЁЎЄ : %d",reg.x.ax);
exit(-1);
}
// Џ®¤Ј®в ў«Ёў Ґ¬ Ў«®Є Ї а ¬Ґва®ў гбва®©бвў ,
// Є®в®ал© Ўг¤Ґв ЁбЇ®«м§®ў ЇаЁ ўл§®ўҐ
// ®ЇҐа жЁЁ Їа®ўҐаЄЁ ў®§¬®¦®бвЁ д®а¬ вЁа®ў Ёп
// ¤®а®¦ЄЁ
dbp_f->spec = 1;
dbp_f->head = 0;
dbp_f->track = 81;
reg.x.ax = 0x440d;
reg.h.bl = 1;
reg.x.cx = 0x0842;
reg.x.dx = FP_OFF(dbp_f);
segreg.ds = FP_SEG(dbp_f);
intdosx(®, ®, &segreg);
// Џа®ўҐа塞 д« Ј ЇҐаҐ®б
if(reg.x.cflag != 0) {
printf("\nЋиЁЎЄ : %d",reg.x.ax);
exit(-1);
}
// …б«Ё гЄ § л© д®а¬ в ¤®а®¦ЄЁ Ї®¤¤Ґа¦Ёў Ґвбп,
// Ї®«Ґ бЇҐжЁ «мле дгЄжЁ© Ўг¤Ґв ᮤҐа¦ вм 0.
// Џа®ўҐа塞 нв®.
if(dbp_f->spec != 0) {
printf("\n”®а¬ в ¤®а®¦ЄЁ Ґ Ї®¤¤Ґа¦Ёў Ґвбп!");
exit(-1);
}
// ‡ Ї®«пҐ¬ Ў«®Є Ї а ¬Ґва®ў ¤«п ўлЇ®«ҐЁп
// ®ЇҐа жЁЁ д®а¬ вЁа®ў Ёп
dbp_f->spec = 0;
dbp_f->head = 0;
dbp_f->track = 81;
// ”®а¬ вЁа㥬 ¤®а®¦Єг б ®¬Ґа®¬ 81, Ј®«®ўЄ 0
reg.x.ax = 0x440d;
reg.h.bl = 1;
reg.x.cx = 0x0842;
reg.x.dx = FP_OFF(dbp_f);
segreg.ds = FP_SEG(dbp_f);
intdosx(®, ®, &segreg);
// Џа®ўҐа塞 д« Ј ЇҐаҐ®б
if(reg.x.cflag != 0) {
printf("\nЋиЁЎЄ : %d",reg.x.ax);
exit(-1);
}
// Ћбў®Ў®¦¤ Ґ¬ ЎгдҐа
free(dbp);
free(dbp_f);
exit(0);
}