#include "complex.h" #include "arh.h" word_s f_o(word_s uf,char *nfl,cpr *mac,char *buf); /*------------------------------------------------------------------------*/ /* инициализация файла */ /*------------------------------------------------------------------------*/ word_s inic_fa(cpr *mac,char *nfl,char *buf,word_s del) { word_s kz,uf; long tz; /* откpытие файла аpхива */ uf=sopen(nfl,O_BINARY | O_RDWR, SH_DENYNO, S_IREAD | S_IWRITE ); if (uf==-1 || del) /* создание и очистка файла */ uf=f_o(uf,nfl,mac,buf); else { /* файл уже существует */ mac->tbl=-1; do { /* поиск нулевой записи */ kz=read (uf,(char *)&tz,sizeof(long)); o_kz_f(kz,nfl); kz=lseek(uf,(long)(mac->dlbl-sizeof(long)),SEEK_CUR); o_kz_f(kz,nfl); mac->tbl++; } while (memcmp(buf,&tz,sizeof(long))!=0 && mac->tbl!=mac->kbl); if (mac->tbl==mac->kbl) return(-1); /* kz=lseek(uf,(long)mac->tbl*mac->dlbl,SEEK_SET); o_kz_f(kz,nfl); */ } return(uf); } word_s f_o(word_s uf,char *nfl,cpr *mac,char *buf) { word_s kz,i; uf=sopen(nfl,O_BINARY | O_RDWR | O_CREAT,SH_DENYNO, S_IREAD | S_IWRITE); o_kz_f(uf,nfl); if (uf!=-1){ for (i=0;ikbl;i++) { kz=write(uf,buf,mac->dlbl); o_kz_f(kz,nfl); } mac->tbl=0; kz=lseek(uf,0L,SEEK_SET); o_kz_f(kz,nfl); close(uf); uf=sopen(nfl,O_BINARY | O_RDWR ,SH_DENYNO, S_IREAD | S_IWRITE ); } return(uf); }