Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.05.2011, 23:08   #1
tiger
Пользователь
 
Регистрация: 30.03.2008
Сообщений: 52
По умолчанию форматирование 81 дорожки дискеты...

Здравствуйте! Нужно сдать прогу форматирования 81 дорожки и записывания туда пароля на запуск программы. И вторую которая будет проверять этот пароль. Код я нашел, немного переделал. Но как мне проверить работу программы если windows напрямую не разрешает выполнение таких функций? Ниже код первой программы.
Код:
#include <dos.h>
#include <stdio.h>
#include <conio.h>
#include <malloc.h>
#include <string.h>
#include <errno.h>
#include <process.h>

typedef struct _EBPB_
{
  unsigned sectsize;
  char clustsize;
  unsigned ressecs;
  char fatcnt;
  unsigned rootsize;
  unsigned totsecs;
  char media;
  unsigned fatsize;
  unsigned seccnt;
  unsigned headcnt;
  unsigned hiddensec_low;
  unsigned hiddensec_hi;
  unsigned long drvsecs;
} EBPB;

typedef struct _TRK_LY_
{
  unsigned no;
  unsigned size;
} TRK_LY;

typedef struct _DPB_
{
  char spec;
  char devtype;
  unsigned devattr;
  unsigned numofcyl;
  char media_type;
  EBPB bpb;
  char reserved[6];
  unsigned trkcnt;
  TRK_LY trk[100];
} DPB;

typedef struct _DPB_FORMAT_
{
  char spec;
  unsigned head;
  unsigned track;
} DPB_FORMAT;

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 far *dbp;
  DPB_FORMAT far *dbp_f;
  DPB_WR far *dbp_wr;
  int sectors, i;

  printf("\nПрограма відформатує 80 доріжку диску A"
   "\nБажаєте продовжити? (Y,N)\n");

  i = getch();
  putch(i);

  if((i != 'y') && (i != 'Y'))
   return (0);
   else
   {
 // exit(1);
  // return (-1);

  // pamjat dlja bloka parametrov ustrojstv
  dbp = (DPB far*)farmalloc(sizeof(DPB));

  // pamjat dlja bloka parametrov ustrojstva, jake bude vidformatovano
  dbp_f = (DPB_FORMAT far*)
    farmalloc(sizeof(DPB_FORMAT));

  if(dbp == NULL || dbp_f == NULL)
  {
    printf("\nНедостатньо пам'яті");
    return(-1);
  }

  // potochni parametry disky А:
  dbp->spec = 0;
  reg.x.ax = 0x440d;
  reg.h.bl = 1;
  reg.x.cx = 0x0860;
  reg.x.dx =  FP_OFF(dbp);
  segreg.ds = FP_SEG(dbp);
  intdosx(&reg, &reg, &segreg);

  if(reg.x.cflag != 0)
  {
    printf("\nError: %d", reg.x.ax);
    return(-1);
  }

  // Zapovnennja bloka parametriv dlja formatuvannja
  dbp->spec = 5;

  // zchityjemo kilkist sektoriv na dorozhtsi
  sectors = dbp->bpb.seccnt;

  // gotuemo tablichu z formatom dorizhki

  // zapisuemo kilkist sektoriv na dorizhtsi
  dbp->trkcnt = sectors;

  // dlja kozhnogo sektora nomer ta rozmir
  for(i = 0; i < sectors; i++)
  {
    dbp->trk[i].no   = i+1;
    dbp->trk[i].size = 512;
  }

  // novi parametri dlja А:
  reg.x.ax = 0x440d;
  reg.h.bl = 1;
  reg.x.cx = 0x0840;
  reg.x.dx =  FP_OFF(dbp);
  segreg.ds = FP_SEG(dbp);
  intdosx(&reg, &reg, &segreg);

  if(reg.x.cflag != 0)
  {
    printf("\nError: %d", reg.x.ax);
    return(-1);
  }

  // Parametri dlja perevirky mozhlivosti formatuvannja
  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(&reg, &reg, &segreg);

  if(reg.x.cflag != 0)
  {
    printf("\nError: %d", reg.x.ax);
    return(-1);
  }

  // jakso format ne pidtrimyjetsja
  if(dbp_f->spec != 0)
  {
    printf("\nФормат дорожки не підтримується");
    return(-1);
  }

  // parametri formatuvannja
  dbp_f->spec = 0;
  dbp_f->head = 0;
  dbp_f->track = 81;

  // golivka 0, format
  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(&reg, &reg, &segreg);

  if(reg.x.cflag != 0)
  {
    printf("\nError: %d", reg.x.ax);
    return(-1);
  }

  // Zvilnjaemo pamjat
  farfree(dbp);
  farfree(dbp_f);


   dbp_wr = (DPB_WR far*)farmalloc(sizeof(DPB_WR));

  if(dbp_wr == NULL)
  {
    printf("\nNot enough memory");
    return(-1);
  }

  // write information
  printf("\nВведіть ваш пароль"
    "\n->");

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

  // parametri dlja zapisy
  dbp_wr->spec    = 0;
  dbp_wr->head    = 0;
  dbp_wr->track   = 81;
  dbp_wr->sector  = 0;
  dbp_wr->sectcnt = 1;
  dbp_wr->buffer  = buf;

  // zapis
  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("\nWriting error: %d", reg.x.ax);
    return(-1);
  }

  farfree(dbp_wr);

  return(0);
  }
}
tiger вне форума Ответить с цитированием
Старый 15.05.2011, 23:48   #2
Son Of Pain
Участник клуба
 
Регистрация: 23.12.2010
Сообщений: 1,129
По умолчанию

Загрузиться в дос. Или на виртуалке. Или в досбокс, если он настолько хорошо эмулирует.
Son Of Pain вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Cоздание загрузочной дискеты Foken Помощь студентам 0 30.05.2010 20:59
Программа автоматизации селективного вырезания участков аудио-дорожки. code_name Мультимедиа в Delphi 0 03.02.2010 19:46
Как запортить дискеты и диски? :) IvanBoroda Компьютерное железо 14 25.10.2009 11:52
Чтение корневого каталога с дискеты alien9356 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 4 12.06.2009 17:22
Сохранение проигрываемой дорожки SaimaN Мультимедиа в Delphi 0 26.11.2008 22:32