MS-DOS для программиста

         

Программа RW81TRK


Для записи и последующего чтения информации на дополнительную дорожку, созданную предыдущей программой, можно использовать программу RW81TRK (листинг 5.3).

Листинг 5.3. Файл fmt81trk\fmt81trk.cpp

#include <dos.h> #include <stdio.h> #include <string.h> #include <malloc.h> #include <errno.h>

typedef struct _DPB_WR_ { char spec; unsigned head; unsigned track; unsigned sector; unsigned sectcnt; void _far *buffer; } DPB_WR;

char buf[1000]; char buf1[80];

int main(void) { union REGS reg; struct SREGS segreg; DPB_WR far *dbp_wr; int sectors, i;

// Заказываем память для блока параметров // устройства,который будет // использован для чтения и записи dbp_wr = (DPB_WR far*)farmalloc(sizeof(DPB_WR));

if(dbp_wr == NULL) { printf("\nМало памяти"); return(-1); }

// Записываем информацию в нестандартный сектор printf("\nВведите строку для записи " "в нестандартный сектор," "\nдлина строки не должна превышать 80 байт" "\n->");

gets(buf1); strcpy(buf,buf1);

// Заполняем блок параметров для выполнения // операции записи dbp_wr->spec = 0; dbp_wr->head = 0; dbp_wr->track = 81; dbp_wr->sector = 0; dbp_wr->sectcnt = 1; dbp_wr->buffer = buf;

// Выполняем операцию записи reg.x.ax = 0x440d; reg.h.bl = 1; reg.x.cx = 0x0841; reg.x.dx = FP_OFF(dbp_wr); segreg.ds = FP_SEG(dbp_wr); intdosx(&reg, &reg, &segreg);

if(reg.x.cflag != 0) { printf("\nОшибка при записи: %d", reg.x.ax); return(-1); }

// Заполняем блок параметров для выполнения // операции чтения dbp_wr->spec = 0; dbp_wr->head = 0; dbp_wr->track = 81; dbp_wr->sector = 0; dbp_wr->sectcnt = 1; dbp_wr->buffer = buf;

// Выполняем операцию чтения дорожки reg.x.ax = 0x440d; reg.h.bl = 1; reg.x.cx = 0x0861; reg.x.dx = FP_OFF(dbp_wr); segreg.ds = FP_SEG(dbp_wr); intdosx(&reg, &reg, &segreg);

if(reg.x.cflag != 0) { printf("\nОшибка при чтении: %d",reg.x.ax); return(-1); }

printf("\nПрочитано из нестандартного " "сектора:\n%s\n", buf);

// Освобождаем память farfree(dbp_wr);

return(0); }



Содержание раздела