
- •Int main()
- •Int OpenFk()
- •Void FreeMem()
- •Void ErrObr(int n_err)
- •Void ClearAprkFreeZone()
- •Void ReadFreeZone()
- •Void ReadKdr(int n_kdr)
- •Void WriteFizAp(int n_kdr_t, int canal, float fiz_ap)
- •Void WriteFizRk(int n_kdr_t, int canal, int razr, unsigned long value)
- •Void WriteKdr(int n_kdr_t)
- •Void WriteParam(int n_kdr_t, int canal, int typ)
- •Void ReadSsfk()
- •Void WriteSsfk(int ss_bit)
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