Компиляция Программы

Тема в разделе "Общие вопросы по С и С++", создана пользователем Barraga, 26 дек 2012.

  1. Barraga

    Barraga Гость

    Добрый вечер форумчане, прога ругается на компиляцию в C++Builder 6.

    Программа форматирует двадцатую дорожку диска, создавая на ней сектора размером 256 байтов. После форматирования программа записывает в первый сектор нестандартной дорожки строку, введенную с клавиатуры. Затем для контроля содержимое этого сектора считывается и отображается на экране.

    Код (C++):
    #include <stdio.h>
    #include <conio.h>
    #include <dos.h>
    #include <stdlib.h>
    #include <bios.h>
    #include "sysp.h"

    // Номер форматируемой дорожки

    #define TRK 20

    // Код размера сектора - 256 байт

    #define SEC_SIZE 1

    union REGS inregs, outregs;
    char _far diskbuf[512];
    char _far diskbuf1[512];
    char buf[80];

    void main(void);
    void main(void) {

    struct diskinfo_t di;
    unsigned status;
    unsigned char old_sec_size, old_fill_char, old_eot;
    int i, j;
    DPT _far *dpt_ptr;

    printf("nПрограмма уничтожит содержимое"
    "n20-й дорожки диска А:."
    "nЖелаете продолжить? (Y,N)n");

    // Ожидаем ответ оператора и анализируем его

    i = getch();
    if((i != 'y') && (i != 'Y')) exit(-1);

    // Получаем адрес таблицы параметров дискеты

    dpt_ptr = get_dpt();

    // Сохраняем старые значения из таблицы параметров

    old_sec_size = dpt_ptr->sec_size;
    old_fill_char = dpt_ptr->fill_char;
    old_eot   = dpt_ptr->eot;

    // Устанавливаем в таблице параметров дискеты
    // код размера сектора, символ заполнения при
    // форматировании, количество секторов на дорожке

    dpt_ptr->sec_size = SEC_SIZE;
    dpt_ptr->fill_char = 0x77;
    dpt_ptr->eot      = 15;

    // Устанавливаем тип диска

    inregs.h.ah = 0x17;
    inregs.h.al = 3;
    inregs.h.dl = 0;
    int86(0x13, &inregs, &outregs);

    // Устанавливаем среду для форматирования

    inregs.h.ah = 0x18;
    inregs.h.ch = TRK;
    inregs.h.cl = dpt_ptr->eot;
    inregs.h.dl = 0;
    int86(0x13, &inregs, &outregs);

    // Подготавливаем параметры для функции форматирования

    di.drive    = 0;
    di.head  = 0;
    di.track    = TRK;
    di.sector  = 1;
    di.nsectors = 15;
    di.buffer  = diskbuf;

    // Подготавливаем буфер формата для 15-ти секторов

    for(i=0, j=1; j<16; i += 4, j++) {
    diskbuf[i]  = TRK;
    diskbuf[i+1] = 0;
    diskbuf[i+2] = j;
    diskbuf[i+3] = SEC_SIZE;
    }

    // Вызываем функцию форматирования дорожки

    status = _bios_disk(_DISK_FORMAT, &di) >> 8;
    printf("nФорматирование завершилось с кодом: %d",status);

    // Записываем информацию в нестандартный сектор

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

    gets(buf);
    strcpy(diskbuf,buf);

    di.drive    = 0;
    di.head  = 0;
    di.track    = 20;
    di.sector  = 1;
    di.nsectors = 1;
    di.buffer  = diskbuf;

    status = _bios_disk(_DISK_WRITE, &di) >> 8;

    if(status) {
    printf("nОшибка при записи в нестандартный сектор: %d",
    status);
    exit(-1);
    }

    di.drive    = 0;
    di.head  = 0;
    di.track    = 20;
    di.sector  = 1;
    di.nsectors = 1;
    di.buffer  = diskbuf1;

    for(i = 0; i < 3; i++) {
    status = _bios_disk(_DISK_READ, &di) >> 8;
    if( !status ) break;
    }

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

    // Восстанавливаем старые значения в
    // таблице параметров дискеты

    dpt_ptr->sec_size = old_sec_size;
    dpt_ptr->fill_char = old_fill_char;
    dpt_ptr->eot      = old_eot;

    exit(0);
    }
     
Загрузка...

Поделиться этой страницей