Здравствуйте! Нужно сдать прогу форматирования 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(®, ®, &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(®, ®, &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(®, ®, &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(®, ®, &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(®, ®, &segreg);
if(reg.x.cflag != 0)
{
printf("\nWriting error: %d", reg.x.ax);
return(-1);
}
farfree(dbp_wr);
return(0);
}
}