Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программа_текст.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
160.77 Кб
Скачать

Void ClearAprkFreeZone()

{ int n_kdr; // Nomep kadpa

for (n_kdr=0; n_kdr <= dl_fk; n_kdr++) // kadp nposmotpeN?

{ WriteFizAP(n_kdr, UKR18, 0); // obNuleNie daNNux kaNalov

WriteFizAP(n_kdr, RKO24, 0);

WriteFizAP(n_kdr, UKR38, 0);

WriteFizAP(n_kdr, RKO40, 0);

WriteFizAP(n_kdr, UKR51, 0);

WriteFizAP(n_kdr, UKR52, 0);

WriteFizAP(n_kdr, 53, 0);

WriteFizAP(n_kdr, UKR55, 0);

WriteFizAP(n_kdr, RKO56, 0);

WriteFizAP(n_kdr, UKR60, 0);

}

}

// chteNie daNNux free-zoNu iz massivov i nepeNos v stpyktypu

Void ReadFreeZone()

{ short n_kdr, kn, rz, bit; // Nomep kadpa, kaNal, pazpjad, bit

if ((sst_fk & FIZ_AP) != FIZ_AP) // fail-konia Ne v fizike?

ErrObr(E_PARKDR_RW_NOFIZ);

for (n_kdr=0; n_kdr < dl_fk; n_kdr++) // koNec faila-konija?

{ ReadKdr((int)n_kdr); // chteNie daNNux kadpa

for (kn=0; kn < dl_bur_kdr; kn++) // koNec kadpa?

{ if (p_AP[kn] != (struct AP *) 0) // stpyktypa An inicializipovaNa

p_AP[kn]->fz[n_kdr] = mas_free_pi[kn]; // zanolNeNie massiva

if (p_RK[kn] != (struct RK *) 0) // stpyktypa PK inicializipovaNa

for (rz=0; rz < 32; rz++) // pazpjadu nposmotpeNu?

if (p_RK[kn]->fz[rz] != 0) // massiv fiziki vudeleN?

{ bit = (mas_free_rk[kn] >> rz) & 01; // vudeleNie PK

p_RK[kn]->fz[rz][n_kdr] = (char)bit; // zanolNeNie massiva

}

}

}

}

// chteNie kadpa faila-konii v massivu

// n_kdr - Nomep kadpa dlja chteNia daNNux

Void ReadKdr(int n_kdr)

{ long poz; // smescheNie npi nozicioNipovaNii

poz = (long)sz_spb + (long)n_kdr*(long)sz_kdr; // paschet smescheNja Nachala chteNija

if (lseek(d_fk, poz, SEEK_SET) != poz) // oshibka nozicioNipovaNja?

ErrObr(E_LSEEK_READKDR);

if ((read(d_fk, (void *)mas_bur_pi, sz_kdr)) != sz_kdr) // oshibka chteNija?

ErrObr(E_PARKDR_RW_READKDR);

}

// zanis fiziki aNalogovogo napametpa v fail-koniu

// n_kdr_t - tekyschij Nomep kadpa

// canal - kaNal

// fiz_ap - fizika An

Void WriteFizAp(int n_kdr_t, int canal, float fiz_ap)

{ long poz; // smescheNie npi nozicioNipovaNija

poz = (long)sz_spb + (long)n_kdr_t*(long)sz_kdr + (long)sz_bur_kdr + (long)(canal*sizeof(float));

// paschet smescheN.Nach.zanisi

if (lseek(d_fk, poz, SEEK_SET) != poz) // oshibka nozicioNipovaNja?

ErrObr(E_LSEEK_WRFIZAP);

if (write(d_fk, &fiz_ap, BYTE_4) != BYTE_4) // oshibka zanisi?

ErrObr(E_PARKDR_RW_WRFIZAP);

}

// zanis fiziki pazovoi komaNdu v fail-koniu

// n_kdr_t - tekyschij Nomep kadpa

// canal - kaNal PK

// razr - pazpjad PK

// value - zNacheNie PK

Void WriteFizRk(int n_kdr_t, int canal, int razr, unsigned long value)

{ unsigned long word_kan, bit_rk; // slovo kaNala/bit PK

long poz; // smescheNie npi nozicioNipovaNii

ReadKdr(n_kdr_t); // chteNie kadpa

bit_rk = value << razr; // bit PK v iNfopmacioNNom slove kaNala

word_kan = (bit_rk == 0)? mas_free_rk[canal]&(~bit_rk) : mas_free_rk[canal]|bit_rk; // zaNeseN.bita PK v iNfopmacioN.slovo kaNala

poz = (long)sz_spb + (long)n_kdr_t*(long)sz_kdr + (long)sz_bur_kdr + (long)(canal*sizeof(long)); // paschet smescheN.Nach.zanisi

if (lseek(d_fk, poz, SEEK_SET) != poz) // oshibka nozicioNipovaNja?

ErrObr(E_LSEEK_WRFIZRK);

if (write(d_fk, &word_kan, BYTE_4) != BYTE_4) // oshibka zanisi?

ErrObr(E_PARKDR_RW_WRFIZRK);

}

// zanis free-zoNu kadpa v fail-koniu

// n_kdr_t - Nomep tekyschego kadpa dlja zanisi daNNux