} DOS4;
} var;
} *DFCB;
/* змiннi */
//byte DOS; /* Номер версi• DOS */
int DFCB_size; /* Розмiр DFCB */
word sft_seg, sft_off; /* Сегм.,змiщ. початку */
int files; /* Лiчильник файлiв */
int need_mem_size; /* Обсяг пам`ятi для розширення */
/* системно• таблицi файлiв */
union REGS rr;
struct SREGS sr;
void main()
{
char i,j; /* допоможнi змiннi */
char f_name[10]; /* iм`я файла */
char std_name[4]="file"; /* Стандартна частина iм`я */
int in[50], /* 50 iдентифiкаторiв файлiв */
axx; /* Сегментний адрес розширення */
char *msgf={"ЗАПИСАНО 50 ФАЙЛЎВ"}; /* записуїться у кожний файл*/
p_psp = (psp far *) MK_FP (_psp,0x0);
clrscr ();
cout << "Old JFT:" << endl;
ViewJFT ();
if(inc_JFT(60)==0)
{
DFCB_size=(_version > 3)?59:53;
/* Отримання адреси першо• таблицi файлiв */
get_SFT();
files=0; /* Лiчильник файлiв */
while(FP_OFF(sft)!=0xffff)
{ /* змiщення FFFF - ознака кiнця списка */
files+=sft->n_files;
sftx=sft;
if(FP_OFF(sft->next)==0xffff)
break;
sft=sft->next;
}
cout << "JFT after resizing:" << endl;
ViewJFT ();
need_mem_size=16 +(60-files)*DFCB_size;
if (files < 60)
{
rr.h.ah=0x48;
rr.x.bx=need_mem_size/16+1;
intdos(&rr,&rr); /* Видiляїмо дод. пам`ять */
axx=rr.x.ax; /* Адреса сегменту видiлено• пам`ятi */
if(rr.x.cflag){
printf("Помилка видiлення пам`ятi\n");
if(rr.x.ax==7)
printf("Керуючi блоки пам'ятi зруйнованi! \n");
else
if(rr.x.ax==8)
printf("Недостатньо пам'ятi! \n");
else
printf("Код помилки: %d",rr.x.ax);
exit(0);
}
sft->next=(SFT*) MK_FP(axx,0);
sft=sft->next;
sft->next=(SFT*) MK_FP(axx,0xffff);
sft->n_files=60-files;
DFCB=(struct DFCB *)((byte *)(sft+1));
for (i=0; i<sft->n_files; i++)
DFCB[i].n_handles=0;
}
/* Створюїмо 50 файлiв */
strcpy(f_name,std_name);
_fmode=O_BINARY;
for(i=1;i<51;i++)
{
/* Формування iм'я чергового файлу */
j=i/10;
f_name[4]=j+48;
j=i%10;
f_name[5]=j+48;
f_name[6]='\0';
/* Створення файла */
in[i-1]=_creat(f_name,0);
if (in[i-1] < 0)
cout << "ERROR";
}
for(i=1;i<51;i++)
write(in[i-1],msgf,19);
cout << "JFT after added new file:" << endl;
ViewJFT ();
for(i=0;i<50;i++)
_close(in[i]);
cout << "JFT closed new file:" << endl;
ViewJFT ();
textattr(0x0C);
gotoxy(55,9);
sftx->next=(SFT*) MK_FP(0,0xFFFF);
rr.h.ah=0x49;
sr.es=axx;
intdosx(&rr,&rr,&sr);
getch();
exit(0);
}
}
int inc_JFT(int num){
if(_version > 2) {
rr.h.ah=0x67;
rr.x.bx=num;
intdos(&rr,&rr);
if(rr.x.cflag)
{
printf("Помилка функцi• DOS 67h:\n");
switch(rr.x.ax)
{
case 0x04:printf("Занадто багато вiдкритих файлiв!\n");break;
case 0x08:printf("Недостатньо пам`ятi!\n");break;
case 0x12:printf("Невiрний формат!\n");break;
default:printf("Error code ->%xh",rr.x.ax);
}
return(-1);
}
else
return(0);
}
return -1;
}
void get_SFT(void)
{
rr.h.ah=0x52;
intdosx(&rr,&rr,&sr);
sft_off=peek(sr.es,rr.x.bx+4);
sft_seg=peek(sr.es,rr.x.bx+6);
sft=(struct SFT *)MK_FP(sft_seg,sft_off);
}
void ViewJFT ()
{
for (int i = 0; i < p_psp->JFT_size; i++)
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.