240-2285 (Автоматизированное рабочее место регистрации и документирования комплекса средств автоматизации), страница 17

2016-07-31СтудИзба

Описание файла

Документ из архива "Автоматизированное рабочее место регистрации и документирования комплекса средств автоматизации", который расположен в категории "". Всё это находится в предмете "информатика" из , которые можно найти в файловом архиве . Не смотря на прямую связь этого архива с , его также можно найти и в других разделах. Архив можно найти в разделе "рефераты, доклады и презентации", в предмете "информатика, программирование" в общих файлах.

Онлайн просмотр документа "240-2285"

Текст 17 страницы из документа "240-2285"

Объем памяти, занимаемый программой равен: V = 64 Кбайта.

В организационно-экономической части дипломного проекта было проведено планирование разработки с построением сетевого графика, расчет договорной цены разработки, обоснована экономическая целесообразность темы.

Договорная цена разработки составляет: Цд = 916 152 руб. в ценах 1998г.

В разделе “Охрана труда и техника безопасности” был выбран оптимальный режим освещенности и проведен расчет информационной нагрузки оператора.

Значение информационной нагрузки оператора АРМ РД составляет 0.6 бит/с.

В разделе “Гражданская оборона” были приведены требования по инженерной защите оператора и оборудования ПЭВМ от воздействия высоких температур при взрывах в ЧС мирного времени.

В разделе “Эргономика” была произведена оценка рабочего места оператора и разработано оптимальное рабочее место оператора.

Приложение 1

Схемы алгоритмов программ

Приложение 2

Тексты программ

// inquiry.prj

//INQUIRY\inquiry.c

// main(),initsearch(),mem_args()

// программа обработки запросов

#include

#include

#include

#include

#include

#include

#include

#include

#include "pxengine.h"

TABLEHANDLE tblh; // дескриптор таблицы

RECORDNUMBER low,high; // границы интервала поиска

int nflds; // кол-во полей в таблице

int nformat; // формат результата

int handle; // дескриптор файла

void interval(long date1,long date2,char *time1, char *time2); // определение границ интервала поиска

void search3(char *argv[],int *x); // поиск с перечислениями

void search2(char *argv[],int *x,int n); // поиск без перечислений

void search1(void); // поиск только по дате и времени

void initsearch(char *argv[],int *x,int p,int n); // выбор варианта поиска

void recprint(int nformat); // расшифровка записи БД в строку и запись этой строки в файл

char sag[7][81]={

" ДАТА ВРЕМЯ ТЕКСТ СООБЩЕНИЯ \r\n",

" ДАТА ВРЕМЯ НАПР-Е А N РР ИСТ ВС ТЕКСТ СООБЩЕНИЯ \r\n",

" ДАТА ВРЕМЯ НАПР-Е N РР ТЕКСТ СООБЩЕНИЯ \r\n",

" ДАТА ВРЕМЯ НАПР-Е К-ВО ВС 1СЛ 2СЛ 3СЛ 4СЛ ТЕКСТ СООБЩЕНИЯ \r\n",

" ДАТА ВРЕМЯ ТИП-У П ВС ТЕКСТ СООБЩЕНИЯ \r\n",

" ДАТА ВРЕМЯ КСУМ0 КСУМ1 КСУМ2 КСУМ3 \r\n",

" ДАТА ВРЕМЯ КСУП1 КСУС1 КСУП2 КСУС2 КСУП3 КСУС3 \r\n"

}; // шапки таблиц

char *inqstr; // строки запроса

/* строка аргументов функции main:

argv[1] - имя файла БД; или "!", означающий, что строка аргументов передается через память;

argv[2] - вариант поиска; 0 - поиск по всей БД, 1 - поиск в едином интервале по дате и времени, 2 - поиск в интервале времени по каждому дню интервала дат, 3 - поиск за один день в интервале времени;

argv[3] - дата;

argv[4] - время;

argv[5] и далее - искомые значения полей БД ( argv[5] - третьего поля, argv[6] - четвертого поля и т.д. ); "-" обоз-

начает любое значение данного поля; в случае нескольких искомых значений по одному полю (перечисление) они разделяются запятыми; пробелы в значениях заменены на '_'. */

void main(int argc,char *argv[])

{

int *x; // x[i] - количество искомых значений по i-му полю

int n=0; // количество полей, для которых заданы значения для поиска

int p=0; // количество полей c перечислениями

// значения x,n,p определяются без учета полей даты и времени

char *name[]={"all_inf","opi","shk","sbkdg","fk","ksum","ksum0"};

// имена баз данных

long date1,date2; // граничные значения интервала дат

int a,i,j,k;

char *c;

char **mem_args(void);

RECORDHANDLE rech;

RECORDNUMBER num;

// Получение аргументов в случае их передачи через память

if(argv[1][0]=='!')

{

argv=mem_args();

for(argc=0;argv[argc]!=NULL;++argc);

}

// определение формата записи для базы данных, к которой

// произведен запрос

for(i=0;i<=6;++i)

if(!strcmp(name[i],argv[1]) || !strcmp(name[i],argv[1]+5))

{ nformat=i;break;}

// открытие файла результатов запроса (inquiry.res) и

// запись в него строк запроса и шапки таблицы

for(i=argc-1;argv[i][0]=='-';--i) argc--;

handle=open("inquiry.res",

O_CREAT | O_TRUNC | O_WRONLY,S_IREAD | S_IWRITE );

for(i=1,j=0;i

{

inqstr=(char *)calloc(82,1);

memset(inqstr+1,' ',79);

inqstr[79]='\r';

inqstr[80]='\n';

inqstr[81]='\0';

for(c=inqstr;i

{

if(strlen(inqstr)+strlen(argv[i])>78+j)

{

if(strlen(argv[i])>50 && (strlen(inqstr)78))

{

for(k=j+77-strlen(inqstr);argv[i][k]!=',';--k);

strcat(c," ");

strncat(c,argv[i]+j,k+1-j);

j=k+1;

}

break;

}

strcat(c," ");

strcat(c,argv[i]+j);

j=0;

}

inqstr[strlen(inqstr)]=' ';

_write(handle,inqstr,81);

free(inqstr);

}

_write(handle,sag[nformat],81);

// инициализация работы с БД

j=coreleft()/1024-50;

if(j>256) j=256;

if(a=PXSetDefaults(j,1,30,MAXLOCKHANDLES,3,SortOrderAscii)) printf("\n%s",PXErrMsg(a));

if(a=PXInit()) printf("\n%s",PXErrMsg(a));

if(a=PXTblOpen(argv[1],&tblh,0,0)) printf("\n%s",PXErrMsg(a));

PXRecNFlds(tblh,&nflds);

x=(int *)calloc(argc+1,sizeof(int));

// разбор аргументов запроса

for(i=5;i

{

if(argv[i][0]=='-') continue;

++n;

for(c=argv[i],j=1;*c!='\0';++c)

{

if(*c==',') ++j;

if(*c=='_') *c=' ';

}

x[i-2]=j;

if(j>1)++p;

}

// главный блок

switch(argv[2][0])

{

case '0': low=1;PXTblNRecs(tblh,&high);

initsearch(argv,x,p,n);

break;

case '1':

PXDateEncode(atoi(argv[3]),atoi(argv[3]+3),atoi(argv[3]+6),&date1);

PXDateEncode(atoi(argv[3]+11),atoi(argv[3]+14),atoi(argv[3]+17),&date2);

interval(date1,date2,argv[4],argv[4]+9);

initsearch(argv,x,p,n);

break;

case '2':

PXDateEncode(atoi(argv[3]),atoi(argv[3]+3),atoi(argv[3]+6),&date1);

PXDateEncode(atoi(argv[3]+11),atoi(argv[3]+14),atoi(argv[3]+17),&date2);

interval(date1,date2,argv[4],argv[4]+9);

if(low==1 && !high) break;

if(low==1)

{

PXRecBufOpen(tblh,&rech);

PXRecGet(tblh,rech);

PXGetDate(rech,1,&date1);

PXRecBufClose(rech);

}

PXTblNRecs(tblh,&num);

if(high==num)

{

PXRecBufOpen(tblh,&rech);

PXRecLast(tblh);

PXRecGet(tblh,rech);

PXGetDate(rech,1,&date2);

PXRecBufClose(rech);

}

for(;date1<=date2;++date1)

{

interval(date1,date1,argv[4],argv[4]+9);

if(low>high) continue;

initsearch(argv,x,p,n);

}

break;

case '3':

PXDateEncode(atoi(argv[3]),atoi(argv[3]+3),atoi(argv[3]+6),&date1);

interval(date1,date1,argv[4],argv[4]+9);

initsearch(argv,x,p,n);

}

free(x);

if(a=PXTblClose(tblh)) printf("\n%s",PXErrMsg(a));

PXExit();

close(handle);

}

// initsearch

// выбор функции поиска

void initsearch(char *argv[],int *x,int p,int n)

{

if(low>high) return;

if(p) search3(argv+5,x);

else if(n) search2(argv,x,n);

else search1();

}

// Функция mem_args возвращает адрес строки параметров в случае ее передачи через память

#include "conn_mem.h"

char **mem_args()

{

char ***dat;

dat=(char ***)conn_mem();

return dat[ARGS_OFF/4];

}

// bs2_inq.prj

//INQUIRY\interval.c

// interval()

// определение граничных номеров интервала поиска

#include

#include

#include "pxengine.h"

#include "def.h"

void interval (long date1,long date2,char *time1,char *time2)

{

RECORDHANDLE rech;

itoa(atoi(time2+6)+1,time2+6,10);

PXRecBufOpen(tblh,&rech);

PXPutDate(rech,1,date2);

PXPutAlpha(rech,2,time2);

if(PXRecInsert(tblh,rech))printf("error");

PXRecNum(tblh,&high);

--high;

PXRecDelete(tblh);

PXPutDate(rech,1,date1);

PXPutAlpha(rech,2,time1);

if(PXRecInsert(tblh,rech))printf("error");

if(PXRecNum(tblh,&low))printf("error");

PXRecDelete(tblh);

PXRecBufClose(rech);

}

// inquiry.prj

//INQUIRY\recprint.c

// recprint()

// форматирование и запись в файл найденной строки

#include

#include

#include

#include

#include "pxengine.h"

#include "def.h"

#include "disp.h"

void recprint()

{

long date;

int month,day,year;

int format[7][7]= { {21,0,0,0,0,0,0},{21,28,30,35,38,42,46},

{21,29,34,37,0,0,0},{ 21,29,35,38,43,48,53 },

{ 21,27,29,33,0,0,0 },{ 21,28,35,42,49,0,0 },

{ 21,28,35,42,49,56,63 } };

static char string[82]; // результирующая строка

RECORDHANDLE rech;

union REGS r;

int a,i;

memset(string,' ',82);

PXRecBufOpen(tblh,&rech);

PXRecGet(tblh,rech);

PXGetDate(rech,1,&date);

PXDateDecode(date,&month,&day,&year);

sprintf(string,"%.02d\\%.02d\\%.04d ",month,day,year);

PXGetAlpha(rech,2,10,string+11);

for(i=3;i<=nflds;++i)

PXGetAlpha(rech,i,sizeof(string)-format[nformat][i-2],

string+format[nformat][i-3]-1);

for(i=0;i<=80;++i) if(string[i]=='\0') string[i]=' ';

string[79]='\r';

string[80]='\n';

_write(handle,string,81);

PXRecBufClose(rech);

// передача управления диспетчеру

// (только для передачи cимвола на принтер!)

// после каждой найденной записи

r.h.ah=1;

int86(DISP,&r,&r);

}

// inquiry.prj

//INQUIRY\search12.c

// search1(),search2(),(search3() см в файле search3.c)

// search1 - все записи в заданном интервале

// search2 - задано не более одного искомого значения по каждому полю

// search3 - более одного искомого значения xотя бы по одному полю

/* исходные данные:

int *x; ,где x[i] - количество искомых значений по i-му полю ( только для search2 )

char *argv[] - см. комментарии в inquiry.c (только для search2)

RECORDNUMBER low,high; - границы интервала поиска */

#include

#include "pxengine.h"

#include "def.h"

void search2(char *argv[],int *x,int n)

{

int a,i,j=0,*y;

int yes;

char *c,*c2;

char arg[10];

RECORDHANDLE *rec;

RECORDNUMBER *s,max=low;

s=(long *)calloc(n,sizeof(RECORDNUMBER));

rec=(unsigned int *)calloc(n,sizeof(RECORDHANDLE));

y=(int *)calloc(n,sizeof(int));

for(i=3;j

{

if(!x[i]) continue;

PXRecBufOpen(tblh,rec+j);

PXPutAlpha(rec[j],i,argv[i+2]);

y[j++]=i;

}

while(1)

{

for(i=0;i

{

if(max==1)

{

if (!(a=PXSrchFld(tblh,rec[i],y[i],SEARCHFIRST)))

PXRecNum(tblh,&s[i]);

}

else

if(s[i]

{

PXRecGoto(tblh,max-1);

if(!(a=PXSrchFld(tblh,rec[i],y[i],SEARCHNEXT)))

PXRecNum(tblh,&s[i]);

}

if(a||s[i]>high)

{

free(s);free(rec);free(y);

return;

}

}

for(i=1,yes=1,max=s[0];i

{

if(s[i]!=max) yes=0;

if(s[i]>max) max=s[i];

}

if(yes) { ++max;recprint(); }

}

}

void search1(void)

{

RECORDNUMBER i;

for(i=low;i<=high;++i)

{

recprint();

PXRecNext(tblh);

}

}

// inquiry.prj

//INQUIRY\search3.c

// search3()

// поиск

/* исходные данные:

int *x; ,где x[i] - количество искомых значений по i-му полю

char *args[] - искомые значения полей БД ( args[0] - третьего поля, argv[1] - четвертого поля и т.д. );

RECORDNUMBER low,high; - границы интервала поиска */

// search1 - все записи в заданном интервале

// search2 - не более одного искомого значения по каждому полю

// search3 - более одного искомого значения xотя бы по одному полю

#include

#include

#include "pxengine.h"

#include "def.h"

void search3(char *args[],int *x)

{

/*

rec - массив массивов буферов для поиска,его размерность равна количеству полей в таблице. Размерность каждого из массивов rec[i] равна количеству искомых значений по i-му полю таблицы (то есть == х[i]). В каждый буфер заносится одно искомое значение ( например, в rec[3][0] - заносится первое искомое значение по 3-му полю таблицы).

Каждому буферу ( rec[i][j] )соответствует элемент массива массивов z ( z[i][j] ), в котором хранится текущий номер

найденной записи по данному буферу (то есть записи, в соответствующем поле которой находится значение, равное значению, занесенному в буфер).

В массиве s хранятся текущие номера найденных строк по каждому полю ( s[i] минимум из всех z[i][j] по этому i).

max - текущий номер записи при поиске ( то есть записи с номерами меньше max уже просмотрены ).

*/

RECORDHANDLE **rec;

int i,j,k;

int yes;

char *c1,*c2;

char arg[10];

RECORDNUMBER *s,**z,max=low;

int a;

// выделение памяти под массивы rec,z,s

// и открытие буферов

s=(long *)calloc(nflds,sizeof(RECORDNUMBER));

rec=(unsigned int **)calloc(nflds,sizeof(RECORDHANDLE *));

z=(long **)calloc(nflds,sizeof(RECORDNUMBER *));

for(i=3;i<=nflds;++i)

if(x[i])

{

rec[i]=(unsigned int *)calloc(x[i],sizeof(RECORDHANDLE));

z[i]=(long *)calloc(x[i],sizeof(RECORDNUMBER));

for(j=0;j

}

// заносим в буфера значения из args

// ( значения для одного поля разделены в args запятыми )

for(i=3;i<=nflds;++i)

{

if(!x[i]) continue;

if(x[i]==1)

PXPutAlpha(rec[i][0],i,args[i-3]);

else

{

c1=args[i-3];

for(k=0;k

{

c2=arg;

while(*c1!=',' && *c1!='\0') *c2++=*c1++;

*c2='\0'; ++c1;

PXPutAlpha(rec[i][k],i,arg);

}

}

}

// цикл поиска

while(1) {

for(i=3;i<=nflds;++i)

{

// 1) Для каждого буфера находим запись с значением равным занесенному в этот буфер и с номером >= max.

// Найденные номера заносим в соотвествующие z[i][k]

// Если искомых записей по данному буферу нет, заносим в z[i][k] номер, превышающий верхнюю

// границу интервала поиска

if(!x[i]) continue;

for(k=0;k

{

if(max==1)

{

if(PXSrchFld(tblh,rec[i][k],i,SEARCHFIRST))z[i][k]=high+1;

else PXRecNum(tblh,&z[i][k]);

}

else

if (z[i][k]

{

PXRecGoto(tblh,max-1);

if(PXSrchFld(tblh,rec[i][k],i,SEARCHNEXT)) z[i][k]=high+1;

else PXRecNum(tblh,&z[i][k]);

}

}

// 2) Для каждого поля определяем значение s[i]

// Если хотя бы по одному полю произошел выход за пределы интервала поиска, значит поиск закончен

s[i]=z[i][0];

for(k=1;kz[i][k]) s[i]=z[i][k];

if(s[i]>high)

{

for(i=3;i<=nflds;++i)

if(x[i])

{

for(j=0;j

free(rec[i]); free(z[i]);

}

free(s); free(rec); free(z);

return;

}

}

// 3), 4)

// Проверяем совпадение значений s[i].

// Если значения s[i] совпадают для всех полей по которым производится поиск, значит найдена искомая

// ( т.е. удовлетворяющая заданным условиям ) запись, в этом случае вызываем функцию recprint

// Определяем значение max для следующей итерации, это значение равно максимуму из s[i].

for(i=3;!x[i];++i);

max=s[i];

for(++i,yes=1;i

{

if(!x[i]) continue;

if(s[i]!=max) yes=0;

if(s[i]>max) max=s[i];

}

if(yes) { PXRecGoto(tblh,max);++max;recprint(); }

}

}

// bs2_inq.prj

// BS2_INQ\bs2_inq.c

// main()

// программа обработки запросов для второй формы байтов состояний

#include

#include

#include

#include

#include

#include

#include

#include "pxengine.h"

#include "devices.h"

TABLEHANDLE tblh; // дескриптор таблицы

RECORDNUMBER low,high; // границы интервала поиска

int nflds; // кол-во полей в таблице

int handle; // дескриптор файла

void interval(long date1,long date2,char *time1, char *time2); // определение границ интервала поиска

void search(char *type); // поиск

void recprint(void); // расшифровка записи БД в строку и запись этой строки в файл

char *sag; // шапкa таблицы

char *sag2; // шапкa таблицы-вторая строка

char *inqstr; // строка запроса

int length; // длина строки в таблице

/* строка аргументов функции main:

argv[1] - не используется

argv[2] - вариант поиска; 0 - поиск по всей БД, 1 - поиск в едином интервале по дате и времени, 2 - поиск в интервале

времени по каждому дню интервала дат, 3 - поиск за один день в интервале времени;

argv[3] - дата;

argv[4] - время;

argv[5] - тип устройства */

void main(int argc,char *argv[])

{

long date1,date2; // граничные значения интервала дат

int a,i;

char *c;

RECORDHANDLE rech;

RECORDNUMBER num;

// открытие файла результатов запроса (inquiry.res) и запись в него строки запроса и шапки таблицы

handle=open("inquiry.res",

O_CREAT | O_TRUNC | O_WRONLY,S_IREAD | S_IWRITE );

for(i=0;strcmp(devices[i].type,argv[5]) && i<20;++i);

switch(i)

{

case 0: //ШЭ-00

case 8: //ШЭ-08

sag=(char *)calloc(81,1);

strcpy(sag," ДАТА ВРЕМЯ ТИП_У П ВС СОСТОЯНИЕ_ШКАФА СЕТЬ1 СЕТЬ2 \r\n");

break;

case 1: //ШП-01

case 9: //ШП-09

sag=(char *)calloc(81,1);

strcpy(sag," ДАТА ВРЕМЯ ТИП_У П ВС СОСТОЯНИЕ_ШКАФА \r\n");

break;

case 4: //ШК-04

case 12: //ШК-12

sag=(char *)calloc(100,1);

strcpy(sag," ДАТА ВРЕМЯ ТИП_У П ВС КАНАЛЫ ЛИНИИ КНОН ФКДТ НСПД ФЗ ПИТАНИЕ Д-Ж К--Ы Б---ЫЕ К--Ы \r\n");

break;

case 2: //РМ-02

sag=(char *)calloc(81,1);

sag2=(char *)calloc(81,1);

strcpy(sag, " ДАТА ВРЕМЯ ТИП_У П ВС БЛОКИРОВКА ЕСТЬ СВЯЗЬ С ВК \r\n");

strcpy(sag2," ПЭВМ1 по ФК по ЛС1 по ЛС3 \r\n");

break;

case 10: //РМ-10

sag=(char *)calloc(81,1);

sag2=(char *)calloc(81,1);

strcpy(sag, " ДАТА ВРЕМЯ ТИП_У П ВС БЛОКИРОВКА ЕСТЬ_СВЯЗЬ_С_ВК \r\n");

strcpy(sag2," ПЭВМ2 по ФК по ЛС2 по ЛС4 \r\n");

break;

case 5: //РМ05Г

case 13: //РМ13П

sag=(char *)calloc(81,1);

strcpy(sag," ДАТА ВРЕМЯ ТИП_У П ВС ЛИНИИ КНОН ФКДТ НСПД ФЗ \r\n");

break;

case 3: //В

case 6: //КС1

case 14: //КС2

case 15: //АС

sag=(char *)calloc(81,1);

strcpy(sag," ДАТА ВРЕМЯ ТИП_У П ВС КАНАЛЫ ЛИНИИ ФКДТ НСПД ФЗ \r\n");

break;

case 7: //ВМ

sag=(char *)calloc(81,1);

strcpy(sag," ДАТА ВРЕМЯ ТИП_У П ВС АВАРИЯ ПИТАНИЯ НЕИСПР КАН КАНАЛЫ \r\n");

break;

case 16: //ВУ16

case 17: //ВУ17

case 18: //ВУ18

case 19: //ВУ19

sag=(char *)calloc(81,1);

strcpy(sag," ДАТА ВРЕМЯ ТИП_У П ВС МАГИСТРАЛЬ ПРИЕМА КНОН \r\n");

break;

}

length=strlen(sag);

inqstr=(char *)calloc(length+1,1);

memset(inqstr+1,' ',length);

for(c=inqstr,i=1;i

{

strcat(c," ");

strcat(c,argv[i]);

}

inqstr[strlen(inqstr)]=' ';

strcpy(inqstr+length-2,"\r\n");

_write(handle,inqstr,length);

_write(handle,sag,length);

_write(handle,sag2,length);

// инициализация работы с БД

i=coreleft()/1024-50;

if(i>256) i=256;

if(a=PXSetDefaults(i,1,30,MAXLOCKHANDLES,3,SortOrderAscii)) printf("\n%s",PXErrMsg(a));

if(a=PXInit()) printf("\n%s",PXErrMsg(a));

if(a=PXTblOpen("fk",&tblh,0,0)) printf("\n%s",PXErrMsg(a));

PXRecNFlds(tblh,&nflds);

// главный блок

if (argv[2][0]=='0')

{

low=1;PXTblNRecs(tblh,&high);

search(argv[5]);

}

else

if (argv[2][0]=='1')

{

PXDateEncode(atoi(argv[3]),atoi(argv[3]+3),atoi(argv[3]+6),&date1);

PXDateEncode(atoi(argv[3]+11),atoi(argv[3]+14),atoi(argv[3]+17),&date2);

interval(date1,date2,argv[4],argv[4]+9);

search(argv[5]);

}

else

if (argv[2][0]=='2')

{

PXDateEncode(atoi(argv[3]),atoi(argv[3]+3),atoi(argv[3]+6),&date1);

PXDateEncode(atoi(argv[3]+11),atoi(argv[3]+14),atoi(argv[3]+17),&date2);

interval(date1,date2,argv[4],argv[4]+9);

if(low==1 && !high)

if(low==1)

{

PXRecBufOpen(tblh,&rech);

PXRecGet(tblh,rech);

PXGetDate(rech,1,&date1);

PXRecBufClose(rech);

}

PXTblNRecs(tblh,&num);

if(high==num)

{

PXRecBufOpen(tblh,&rech);

PXRecLast(tblh);

PXRecGet(tblh,rech);

PXGetDate(rech,1,&date2);

PXRecBufClose(rech);

}

for(;date1<=date2;++date1)

{

interval(date1,date1,argv[4],argv[4]+9);

if(low>high) continue;

search(argv[5]);

}

}

else

if (argv[2][0]=='3')

{

PXDateEncode(atoi(argv[3]),atoi(argv[3]+3),atoi(argv[3]+6),&date1);

interval(date1,date1,argv[4],argv[4]+9);

search(argv[5]);

}

if(a=PXTblClose(tblh)) printf("\n%s",PXErrMsg(a));

PXExit();

close(handle);

}

// bs2_inq.prj

// BS2_INQ\form2.c

// form2()

// расшифровка байтов состояния

#include

#include "devices.h"

void form2(char *Type,char *bytes,char *text)

{

/* Type; тип устройства

bytes; нерасшифрованные байты состояния

text; буфер для расшифрованных БС */

int i;

for(i=0;strcmp(devices [i].type,Type) && i<20;++i);

switch(i)

{

case 0: // ШЭ-00

if(bytes[5]&0x04) strcpy(text,"НЕИСПРАВЕН");

else strcpy(text,"ИСПРАВЕН");

if(bytes[4]&0x02) strcpy(text+16,"CETЬ1");

break;

case 8: // ШЭ-08

if(bytes[5]&0x04) strcpy(text,"НЕИСПРАВЕН");

else strcpy(text,"ИСПРАВЕН");

if(bytes[4]&0x04) strcpy(text+22,"СЕТЬ2");

break;

case 1: // ШП-01

case 9: // ШП-09

if(bytes[5]&0x04) strcpy(text,"НЕИСПРАВЕН");

else strcpy(text,"ИСПРАВЕН");

break;

case 4: // ШК-04

case 12: // ШК-12

if(bytes[4]&0x04) strcpy(text,"К1");

if(bytes[4]&0x02) strcpy(text+2,"К2");

if(bytes[4]&0x01) strcpy(text+4,"К3");

if(bytes[5]&0x04) strcpy(text+7,"Л1");

if(bytes[5]&0x02) strcpy(text+9,"Л2");

if(bytes[5]&0x01) strcpy(text+11,"Л3");

if(bytes[3]&0x01) strcpy(text+14,"КНОН");

if(bytes[3]&0x02) strcpy(text+19,"ФКДТ");

if(bytes[3]&0x04) strcpy(text+24,"НСПД");

if(bytes[2]&0x01) strcpy(text+29,"ФЗ");

if(bytes[12]&0x04) strcpy(text+32,"П1");

if(bytes[12]&0x02) strcpy(text+34,"П2");

if(bytes[12]&0x01) strcpy(text+36,"П3");

if(bytes[11]&0x04) strcpy(text+40,"ДК1");

if(bytes[11]&0x02) strcpy(text+43,"ДК2");

if(bytes[11]&0x01) strcpy(text+46,"ДК3");

if(bytes[10]&0x04) strcpy(text+51,"БК1");

if(bytes[10]&0x02) strcpy(text+54,"БК2");

if(bytes[10]&0x01) strcpy(text+57,"БК3");

break;

case 3: // В

case 6: // КС1

case 14: // КС2

if(bytes[4]&0x04) strcpy(text,"К1");

if(bytes[4]&0x02) strcpy(text+2,"К2");

if(bytes[4]&0x01) strcpy(text+4,"К3");

if(bytes[5]&0x04) strcpy(text+7,"Л1");

if(bytes[5]&0x02) strcpy(text+9,"Л2");

if(bytes[5]&0x01) strcpy(text+11,"Л3");

if(bytes[3]&0x02) strcpy(text+14,"ФКДТ");

if(bytes[3]&0x04) strcpy(text+19,"НСПД");

if(bytes[2]&0x01) strcpy(text+24,"ФЗ");

break;

case 2: // РМ-02

if(bytes[5]&0x01) strcpy(text+3,"ЕСТЬ");

else strcpy(text+3,"НЕТ");

if(bytes[3]&0x04) strcpy(text+17,"НЕТ");

else strcpy(text+17,"ЕСТЬ");

if(bytes[2]&0x02) strcpy(text+24,"НЕТ");

else strcpy(text+24,"ЕСТЬ");

break;

case 10: // РМ-10

if(bytes[5]&0x01) strcpy(text+3,"ЕСТЬ");

else strcpy(text+3,"НЕТ");

if(bytes[2]&0x01) strcpy(text+17,"НЕТ");

else strcpy(text+17,"ЕСТЬ");

if(bytes[2]&0x04) strcpy(text+24,"НЕТ");

else strcpy(text+24,"ЕСТЬ");

break;

case 5: // РМ05Г

case 13: // РМ13П

if(bytes[5]&0x04) strcpy(text,"Л1");

if(bytes[5]&0x02) strcpy(text+2,"Л2");

if(bytes[5]&0x01) strcpy(text+4,"Л3");

if(bytes[3]&0x01) strcpy(text+7,"КНОН");

if(bytes[3]&0x02) strcpy(text+12,"ФКДТ");

if(bytes[3]&0x04) strcpy(text+17,"НСПД");

if(bytes[2]&0x01) strcpy(text+22,"ФЗ");

break;

case 7: // ВМ

if(bytes[5]&0x02) strcpy(text,"АВАРИЯ ПИТАНИЯ");

if(bytes[5]&0x04) strcpy(text+15,"НЕИСПР КАН");

if(bytes[4]&0x04) strcpy(text+26,"К1");

if(bytes[4]&0x01) strcpy(text+28,"К2");

if(bytes[4]&0x02) strcpy(text+30,"К3");

break;

case 16: // ВУ16

case 17: // ВУ17

case 18: // ВУ18

case 19: // ВУ19

if(bytes[5]&0x04) strcpy(text,"НЕИСПР МАГ ПРИЕМА");

if(bytes[3]&0x01) strcpy(text+18,"КНОН");

break;

case 15: // АС

//Подкорректировать после согласования байта состояния

if(bytes[4]&0x04) strcpy(text,"К1");

if(bytes[4]&0x02) strcpy(text+2,"К2");

if(bytes[4]&0x01) strcpy(text+4,"К3");

if(bytes[5]&0x04) strcpy(text+7,"Л1");

if(bytes[5]&0x02) strcpy(text+9,"Л2");

if(bytes[5]&0x01) strcpy(text+11,"Л3");

if(bytes[3]&0x02) strcpy(text+14,"ФКДТ");

if(bytes[3]&0x04) strcpy(text+19,"НСПД");

if(bytes[2]&0x01) strcpy(text+24,"ФЗ");

break;

}

}

// bs2_inq.prj

//BS2_INQ\interval.c

// interval()

// определение граничных номеров интервала поиска

#include

#include

#include "pxengine.h"

#include "def.h"

void interval (long date1,long date2,char *time1,char *time2)

{

RECORDHANDLE rech;

itoa(atoi(time2+6)+1,time2+6,10);

PXRecBufOpen(tblh,&rech);

PXPutDate(rech,1,date2);

PXPutAlpha(rech,2,time2);

if(PXRecInsert(tblh,rech))printf("error");

PXRecNum(tblh,&high);

--high;

PXRecDelete(tblh);

PXPutDate(rech,1,date1);

PXPutAlpha(rech,2,time1);

if(PXRecInsert(tblh,rech))printf("error");

if(PXRecNum(tblh,&low))printf("error");

PXRecDelete(tblh);

PXRecBufClose(rech);

}

// bs2_inq.prj

// recprint.c

// BS2_INQ\recprint()

// форматирование и запись в файл найденной строки

#include

#include

#include

#include

#include

#include "pxengine.h"

#include "def.h"

#include "disp.h"

void form2(char *,char *,char *);

// расшифровка байтов состояния

void recprint()

{

long date; // дата в формате БД

int month,day,year; // расшифрованная дата

char *string; // результирующая строка

char *bytes; // нерасшифрованные байты состояния

RECORDHANDLE rech; // дескриптор записи

int a,i;

union REGS r;

string=(char *)calloc(length+1,1);

bytes=(char *)calloc(45,1);

PXRecBufOpen(tblh,&rech);

PXRecGet(tblh,rech);

PXGetDate(rech,1,&date);

PXDateDecode(date,&month,&day,&year);

sprintf(string,"%.02d\\%.02d\\%.04d ",month,day,year);

PXGetAlpha(rech,2,9,string+11); //t

PXGetAlpha(rech,3,6,string+20); //тип_у

PXGetAlpha(rech,4,2,string+26); //п

PXGetAlpha(rech,5,4,string+28); //вс

PXGetAlpha(rech,6,45,bytes); //бс

form2(string+20,bytes+16,string+31);

for(i=0;i<=length;++i) if(string[i]=='\0') string[i]=' ';

strcpy(string+length-2,"\r\n");

_write(handle,string,strlen(string));

PXRecBufClose(rech);

free(bytes);

free(string);

// передача управления диспетчеру

// (только для передачи cимвола на принтер!)

// после каждой найденной записи

//r.h.ah=1;

// int86(DISP,&r,&r);

}

// bs2_inq.prj

//BS2_INQ\search.c

// search()

// поиск

#include

#include "pxengine.h"

#include "def.h"

void search(char *type)

{

int a,i,y[2];

RECORDHANDLE rec[2];

RECORDNUMBER s[2],max=low;

PXRecBufOpen(tblh,&rec[0]);

PXRecBufOpen(tblh,&rec[1]);

PXPutAlpha(rec[0],3,type);

PXPutAlpha(rec[1],5,"БС ");

y[0]=3;y[1]=5;s[1]=s[0]=0;

while(1)

{

for(i=0;i<=1;++i)

{

if(max==1)

{

if (!(a=PXSrchFld(tblh,rec[i],y[i],SEARCHFIRST)))

PXRecNum(tblh,&s[i]);

}

else

if(s[i]

{

PXRecGoto(tblh,max-1);

if(!(a=PXSrchFld(tblh,rec[i],y[i],SEARCHNEXT)))

PXRecNum(tblh,&s[i]);

}

if(a||s[i]>high)

{

PXRecBufClose(rec[0]);

PXRecBufClose(rec[1]);

return;

}

}

if(s[1]==s[0]) { ++max; recprint(); }

else if(s[1]>s[0]) max=s[1];

else max=s[0];

}

}

// bs3_inq.prj

// BS3_INQ\bs3_inq.c

// main()

// программа обработки запросов для третьей формы байтов состояния

// вызывается из:

// 1) main.prj, mloop2.c, bszapros()

// 2) makeinq.prj, makeinq.c, makeinq()

#include

#include

#include

#include

#include "pxengine.h"

#include

void form3(char *,char *,int);

// расшифровка байтов состояния для третьей формы представления и их запись в файл результатов

/* аргументы функции main :

argv[1] - тип устройства */

void main(int argc,char *argv[])

{

int a;

int i;

int handle; // дескриптор файла результатов поиска

static char bytes[45]; // буфер для нерасшифрованных байтов состояния

RECORDHANDLE rec; // дескриптор записи

TABLEHANDLE tblh; // дескриптор таблицы

// открытие файла результатов изапись в него типа устройства

handle=open("inquiry.res",

O_CREAT | O_TRUNC | O_WRONLY,S_IREAD | S_IWRITE );

write(handle,argv[1],strlen(argv[1]));

//if(strlen(argv[1])==1) write(handle," ",2);

//if(strlen(argv[1])==2) write(handle," ",1);

write(handle,"\r\n",2);

// поиск и обработка результатов поиска

/* находится последняя по времени запись байтов

состояния для данного устройства */

if(a=PXInit()) printf("\n%s",PXErrMsg(a));

if(a=PXTblOpen("fk",&tblh,0,0)) printf("\n%s",PXErrMsg(a));

PXRecBufOpen(tblh,&rec);

PXPutAlpha(rec,5,"БС");

PXPutAlpha(rec,3,argv[1]);

if((a=PXSrchFld(tblh,rec,3,SEARCHFIRST))!=PXSUCCESS)

{ if(a==PXERR_RECNOTFOUND)

PXRecBufClose(rec);

if(a=PXTblClose(tblh)) printf("\n%s",PXErrMsg(a));

PXExit();

close(handle);

return;

}

else while(!(a=PXSrchFld(tblh,rec,3,SEARCHNEXT)));

PXRecGet(tblh,rec);

PXGetAlpha(rec,6,45,bytes);

form3(argv[1],bytes+16,handle);

PXRecBufClose(rec);

if(a=PXTblClose(tblh)) printf("\n%s",PXErrMsg(a));

PXExit();

close(handle);

}

// bs3_inq.prj

// BS3_INQ\form3.c

// form3()

// расшифровка байтов состояния

#include

#include

#include "devices.h"

#include

void form3(char *Type,char *bytes,int handle)

{

/* Type - тип устройства

bytes - нерасшифрованные байты состояния

handle - дескриптор файла результатов */

int i;

/*

struct date d;

struct time t;

getdate(&d);

gettime(&t);

z.bd1.date[0]=d.da_mon;

z.bd1.date[1]=d.da_day;

z.bd1.date[2]=d.da_year;

PXRecBufOpen(tblh,&rech);

PXRecGet(tblh,rech);

PXGetDate(rech,1,&date);

PXDateDecode(date,&month,&day,&year);

sprintf(string,"%.02d\\%.02d\\%.04d ",month,day,year);

*/

for(i=0;strcmp(devices[i].type,Type) && i

switch(i)

{

case 0: // ШЭ-00

if(bytes[5]&0x04)

write(handle," Шкаф НЕИСПРАВЕН \r\n",76);

else

write(handle," Шкаф ИСПРАВЕН \r\n",76);

if(bytes[4]&0x02)

write(handle,"НЕИСПРАВНОСТЬ первичной сети электропитания СЕТЬ 1 \r\n",76);

break;

case 8: // ШЭ-08

if(bytes[5]&0x04)

write(handle," Шкаф НЕИСПРАВЕН \r\n",76);

else

write(handle," Шкаф ИСПРАВЕН \r\n",76);

if(bytes[4]&0x02)

write(handle,"НЕИСПРАВНОСТЬ первичной сети электропитания СЕТЬ 2 \r\n",76);

break;

case 1: // ШП-01

case 9: // ШП-09

if(bytes[5]&0x04)

write(handle," Шкаф НЕИСПРАВЕН \r\n",76);

else

write(handle," Шкаф ИСПРАВЕН \r\n",76);

break;

case 4: // ШК-04

case 12: // ШК-12

if(bytes[0]&0x01)

write(handle,"ОСНОВНОЙ - шкаф ШК-12 \r\n",76);

else

write(handle,"ОСНОВНОЙ - шкаф ШК-04 \r\n",76);

write(handle," \r\n",76);

write(handle," ТЕХНИЧЕСКОЕ СОСТОЯНИЕ ШКАФА \r\n",76);

write(handle," \r\n",76);

if(bytes[5]&0x01)

write(handle," Шкаф РАБОТОСПОСОБЕН \r\n",76);

if(bytes[5]&0x02)

write(handle," Шкаф НЕИСПРАВЕН \r\n",76);

if(bytes[5]&0x04)

write(handle," Шкаф ЗАБЛОКИРОВАН по НСД \r\n",76);

if((!(bytes[5]&0x01))&&(!(bytes[5]&0x02))&&(!(bytes[5]&0x04)))

write(handle," Шкаф ИСПРАВЕН \r\n",76);

write(handle," \r\n",76);

if(bytes[4]&0x01)

write(handle,"НЕИСПРАВЕН 1-й канал АД \r\n",76);

if(bytes[4]&0x02)

write(handle,"НЕИСПРАВЕН 2-й канал АД \r\n",76);

if(bytes[4]&0x04)

write(handle,"НЕИСПРАВЕН 3-й канал АД \r\n",76);

if(bytes[3]&0x01)

write(handle,"НЕИСПРАВЕН 1-й канал УХК \r\n",76);

if(bytes[3]&0x02)

write(handle,"НЕИСПРАВЕН 2-й канал УХК \r\n",76);

if(bytes[3]&0x04)

write(handle,"НЕИСПРАВЕН 3-й канал УХК \r\n",76);

if(bytes[2]&0x01)

write(handle,"НЕИСПРАВНОСТЬ логической части ШК \r\n",76);

if(bytes[2]&0x02)

{write(handle,"НЕИСПРАВЕН хотя бы один или несколько элементов ИГП \r\n",76);

write(handle,"Для уточнения считай ячейку ВБШК1.ПФЗ для ШК1 или ВБШК2.ПФЗ для ШК2 \r\n",76);

}

if(bytes[2]&0x04)

{write(handle,"НЕИСПРАВНО УХК - установлена единица в 8-ом разряде уточненого слова \r\n",76);

write(handle,"состояния УХК \r\n",76);

}

if(bytes[1]&0x01)

write(handle,"БОЗУ занято более 3-х секунд \r\n",76);

if(bytes[1]&0x02)

{write(handle,"НЕИСПРАВНО УХК (неправильное сочетание 3 и 10 разрядов уточненого слова \r\n",76);

write(handle,"состояния УХК) \r\n",76);

}

if(bytes[1]&0x04)

{write(handle,"УХК ЗАБЛОКИРОВАН по причине работы с носителем 83т015. Получен 9 или 11 \r\n",76);

write(handle,"разряд в ИСС УХК (см. п.4.7.1. протокола инв.30337) \r\n",76);

}

if((!(bytes[12]&0x01))&&(!(bytes[12]&0x02)))

write(handle,"ПУ-1 ИСПРАВЕН \r\n",76);

if(bytes[12]&0x01)

write(handle,"Нажата кнопка ОБНАРУЖЕНА НЕИСПРАВНОСТЬ на ПУ-1 \r\n",76);

if(bytes[12]&0x02)

write(handle,"Неисправно направление связи, соединяющее с ПУ-1 \r\n",76);

if((!(bytes[12]&0x04))&&(!(bytes[11]&0x01)))

write(handle,"ПУ-2 ИСПРАВЕН \r\n",76);

if(bytes[12]&0x04)

write(handle,"Нажата кнопка ОБНАРУЖЕНА НЕИСПРАВНОСТЬ на ПУ-2 \r\n",76);

if(bytes[11]&0x01)

write(handle,"Неисправно направление связи, соединяющее с ПУ-2 \r\n",76);

if((!(bytes[11]&0x04))&&(!(bytes[11]&0x02)))

write(handle,"ПУ-3 ИСПРАВЕН \r\n",76);

if(bytes[11]&0x02)

write(handle,"Нажата кнопка ОБНАРУЖЕНА НЕИСПРАВНОСТЬ на ПУ-3 \r\n",76);

if(bytes[11]&0x04)

write(handle,"Неисправно направление связи, соединяющее с ПУ-3 \r\n",76);

if((!(bytes[10]&0x01))&&(!(bytes[10]&0x02)))

write(handle,"ПУ-4 ИСПРАВЕН \r\n",76);

if(bytes[10]&0x01)

write(handle,"Нажата кнопка ОБНАРУЖЕНА НЕИСПРАВНОСТЬ на ПУ-4 \r\n",76);

if(bytes[10]&0x02)

write(handle,"Неисправно направление связи, соединяющее с ПУ-4 \r\n",76);

if(bytes[10]&0x04)

write(handle,"Неисправен 1-й канал схемных узлов БУ-695 \r\n",76);

if(bytes[9]&0x01)

write(handle,"Неисправен 2-й канал схемных узлов БУ-695 \r\n",76);

if(bytes[9]&0x02)

write(handle,"Неисправен 3-й канал схемных узлов БУ-695 \r\n",76);

if(bytes[9]&0x04)

write(handle,"Неисправен 1-й канал ПРЦ \r\n",76);

if(bytes[8]&0x01)

write(handle,"Неисправен 2-й канал ПРЦ \r\n",76);

if(bytes[8]&0x02)

write(handle,"Неисправен 3-й канал ПРЦ \r\n",76);

if(bytes[8]&0x04)

{write(handle,"Неисправно направление связи С1 по передаче от ВМ к ШК и/или по приему \r\n",76);

write(handle,"от ШК к ВМ и/или по причине не получения от ШК кодограмм по времени. \r\n",76);

write(handle,"Формирует ФК-читай слово памяти ВБШК1(2).ПФЗ \r\n",76);

if(bytes[7]&0x01)

write(handle,"ШК забракован функциональной задачей - читай слово памяти ВБШК1(2).ПФЗ \r\n",76);

write(handle," \r\n",76);

write(handle," ИНФОРМАЦИОННОЕ СОСТОЯНИЕ ШКАФА \r\n",76);

write(handle," \r\n",76);

if(bytes[26]&0x02)

write(handle," Шкаф НЕИСПРАВЕН ПО ИНФОРМАЦИОННОМУ СОСТОЯНИЮ \r\n",76);

else

write(handle," Шкаф ИСПРАВЕН ПО ИНФОРМАЦИОННОМУ СОСТОЯНИЮ \r\n",76);

write(handle," \r\n",76);

write(handle," Состояние БХХХХХ ШХХХХХ и КХХХХ \r\n",76);

write(handle," \r\n",76);

write(handle," БХХХХХ ШХХХХХ 1-го массива СХХ \r\n",76);

if((!(bytes[15]&0x01))&&(!(bytes[15]&0x02)))

write(handle," НЕ ЗАПИСАНЫ \r\n",76);

if((bytes[15]&0x01)&&(bytes[15]&0x02))

write(handle," УНИЧТОЖЕНЫ \r\n",76);

if((bytes[15]&0x01)&&(!(bytes[15]&0x02)))

write(handle," СОХРАНЕНЫ \r\n",76);

if((bytes[15]&0x02)&&(!(bytes[15]&0x01)))

write(handle," РАЗРУШЕНЫ \r\n",76);

write(handle," БХХХХХ ШХХХХХ 2-го массива СХХ \r\n",76);

if((!(bytes[17]&0x04))&&(!(bytes[16]&0x01)))

write(handle," НЕ ЗАПИСАНЫ \r\n",76);

if((bytes[17]&0x04)&&(bytes[16]&0x01))

write(handle," УНИЧТОЖЕНЫ \r\n",76);

if((bytes[17]&0x04)&&(!(bytes[16]&0x01)))

write(handle," СОХРАНЕНЫ \r\n",76);

if((bytes[16]&0x01)&&(!(bytes[17]&0x04)))

write(handle," РАЗРУШЕНЫ \r\n",76);

write(handle," БХХХХХ КХХХХ ОХХ \r\n",76);

if((!(bytes[18]&0x04))&&(!(bytes[18]&0x02)))

write(handle," НЕ ЗАПИСАНЫ \r\n",76);

if((bytes[18]&0x04)&&(bytes[18]&0x02))

write(handle," УНИЧТОЖЕНЫ \r\n",76);

if((bytes[18]&0x02)&&(!(bytes[18]&0x04)))

write(handle," СОХРАНЕНЫ \r\n",76);

if((bytes[18]&0x04)&&(!(bytes[18]&0x02)))

write(handle," РАЗРУШЕНЫ \r\n",76);

write(handle," БХХХХХ КХХХХ УХХ \r\n",76);

if((!(bytes[19]&0x02))&&(!(bytes[19]&0x01)))

write(handle," НЕ ЗАПИСАНЫ \r\n",76);

if((bytes[19]&0x02)&&(bytes[19]&0x01))

write(handle," УНИЧТОЖЕНЫ \r\n",76);

if((bytes[19]&0x01)&&(!(bytes[19]&0x02)))

write(handle," СОХРАНЕНЫ \r\n",76);

if((bytes[19]&0x02)&&(!(bytes[19]&0x01)))

write(handle," РАЗРУШЕНЫ \r\n",76);

write(handle," БХХХХХ КХХХХ УХ \r\n",76);

if((!(bytes[22]&0x02))&&(!(bytes[22]&0x01)))

write(handle," НЕ ЗАПИСАНЫ \r\n",76);

if((bytes[22]&0x02)&&(bytes[22]&0x01))

write(handle," УНИЧТОЖЕНЫ \r\n",76);

if((bytes[22]&0x01)&&(!(bytes[22]&0x02)))

write(handle," СОХРАНЕНЫ \r\n",76);

if((bytes[22]&0x02)&&(!(bytes[22]&0x01)))

write(handle," РАЗРУШЕНЫ \r\n",76);

write(handle," БХХХХХ КХХХХ РХХ \r\n",76);

if((!(bytes[23]&0x01))&&(!(bytes[24]&0x04)))

write(handle," НЕ ЗАПИСАНЫ \r\n",76);

if((bytes[23]&0x01)&&(bytes[24]&0x04))

write(handle," УНИЧТОЖЕНЫ \r\n",76);

if((bytes[24]&0x04)&&(!(bytes[23]&0x01)))

write(handle," СОХРАНЕНЫ \r\n",76);

if((bytes[23]&0x01)&&(!(bytes[24]&0x04)))

write(handle," РАЗРУШЕНЫ \r\n",76);

write(handle," \r\n",76);

write(handle," Состояние УХХХХХ ШХХХХХ и КХХХХ \r\n",76);

write(handle," \r\n",76);

write(handle," УХХХХХ ШХХХХХ 1-го массива СХХ \r\n",76);

if((!(bytes[14]&0x01))&&(!(bytes[15]&0x04)))

write(handle," НЕ ЗАПИСАНЫ \r\n",76);

if((bytes[14]&0x01)&&(bytes[15]&0x04))

write(handle," УНИЧТОЖЕНЫ \r\n",76);

if((bytes[15]&0x04)&&(!(bytes[14]&0x01)))

write(handle," СОХРАНЕНЫ \r\n",76);

if((bytes[14]&0x01)&&(!(bytes[15]&0x04)))

write(handle," РАЗРУШЕНЫ \r\n",76);

write(handle," УХХХХХ ШХХХХХ 2-го массива СХХ \r\n",76);

if((!(bytes[16]&0x04))&&(!(bytes[16]&0x02)))

write(handle," НЕ ЗАПИСАНЫ \r\n",76);

if((bytes[16]&0x04)&&(bytes[16]&0x02))

write(handle," УНИЧТОЖЕНЫ \r\n",76);

if((bytes[16]&0x02)&&(!(bytes[16]&0x04)))

write(handle," СОХРАНЕНЫ \r\n",76);

if((bytes[16]&0x04)&&(!(bytes[16]&0x02)))

write(handle," РАЗРУШЕНЫ \r\n",76);

write(handle," УХХХХХ КХХХХ ОХХ \r\n",76);

if((!(bytes[17]&0x02))&&(!(bytes[17]&0x01)))

write(handle," НЕ ЗАПИСАНЫ \r\n",76);

if((bytes[17]&0x02)&&(bytes[17]&0x01))

write(handle," УНИЧТОЖЕНЫ \r\n",76);

if((bytes[17]&0x01)&&(!(bytes[17]&0x02)))

write(handle," СОХРАНЕНЫ \r\n",76);

if((bytes[17]&0x02)&&(!(bytes[17]&0x01)))

write(handle," РАЗРУШЕНЫ \r\n",76);

write(handle," УХХХХХ КХХХХ УХХ \r\n",76);

if((!(bytes[19]&0x04))&&(!(bytes[18]&0x01)))

write(handle," НЕ ЗАПИСАНЫ \r\n",76);

if((bytes[19]&0x04)&&(bytes[18]&0x01))

write(handle," УНИЧТОЖЕНЫ \r\n",76);

if((bytes[19]&0x04)&&(!(bytes[18]&0x01)))

write(handle," СОХРАНЕНЫ \r\n",76);

if((bytes[18]&0x01)&&(!(bytes[19]&0x04)))

write(handle," РАЗРУШЕНЫ \r\n",76);

write(handle," УХХХХХ КХХХХ УХ \r\n",76);

if((!(bytes[21]&0x01))&&(!(bytes[22]&0x04)))

write(handle," НЕ ЗАПИСАНЫ \r\n",76);

if((bytes[21]&0x01)&&(bytes[22]&0x04))

write(handle," УНИЧТОЖЕНЫ \r\n",76);

if((bytes[22]&0x04)&&(!(bytes[21]&0x01)))

write(handle," СОХРАНЕНЫ \r\n",76);

if((bytes[21]&0x01)&&(!(bytes[22]&0x04)))

write(handle," РАЗРУШЕНЫ \r\n",76);

write(handle," УХХХХХ КХХХХ РХХ \r\n",76);

if((!(bytes[23]&0x02))&&(!(bytes[23]&0x04)))

write(handle," НЕ ЗАПИСАНЫ \r\n",76);

if((bytes[23]&0x02)&&(bytes[23]&0x04))

write(handle," УНИЧТОЖЕНЫ \r\n",76);

if((bytes[23]&0x02)&&(!(bytes[23]&0x04)))

write(handle," СОХРАНЕНЫ \r\n",76);

if((bytes[23]&0x04)&&(!(bytes[23]&0x02)))

write(handle," РАЗРУШЕНЫ \r\n",76);

write(handle," \r\n",76);

write(handle," НАВЯЗЫВАНИЕ ЛОЖНОЙ ИНФОРМАЦИИ \r\n",76);

write(handle," \r\n",76);

if(bytes[24]&0x02)

write(handle,"Есть НЛИ по массиву N1 шххххх СХХ \r\n",76);

if(bytes[24]&0x01)

write(handle,"Есть НЛИ по массиву N2 шххххх СХХ \r\n",76);

if(bytes[25]&0x04)

write(handle,"Есть НЛИ по массиву кхххх УХХ \r\n",76);

if(bytes[25]&0x01)

write(handle,"Есть НЛИ по массиву кхххх УХ \r\n",76);

if(bytes[26]&0x04)

write(handle,"Есть НЛИ по массиву кхххх РХХ \r\n",76);

if((!(bytes[24]&0x02))&&(!(bytes[24]&0x01))&&(!(bytes[25]&0x04))

&&(!(bytes[25]&0x02))&&(!(bytes[25]&0x01))&&(!(bytes[26]&0x04)))

write(handle,"НЛИ ОТСУТСТВУЕТ по всем массивам \r\n",76);

break;

case 3: // В

case 6: // КС1

case 14: // КС2

if(bytes[5]&0x04)

write(handle," КС НЕИСПРАВЕН \r\n",76);

else

write(handle," КС ИСПРАВЕН \r\n",76);

write(handle," \r\n",76);

if(bytes[19]&0x01)

write(handle,"Прием от АК1 трех кодограмм подряд с признаком К2 \r\n",76);

if(bytes[19]&0x02)

write(handle,"Прием от АК1 трех кодограмм подряд с ВПС=1010 \r\n",76);

if(bytes[19]&0x04)

write(handle,"Отсутствие информации от АК1 на входе ПУ более 12 сек \r\n",76);

if(bytes[18]&0x01)

write(handle,"Прием от АК1 трех кодограмм подряд с признаком получения УС \r\n",76);

if(bytes[18]&0x02)

write(handle,"Отсутствие связи в тракте от ЦКС1 до АК1 \r\n",76);

if(bytes[18]&0x04)

write(handle,"Отсутствие связи в тракте от ЦКС1 до ЦКС2 для АК1 \r\n",76);

if(bytes[17]&0x01)

write(handle,"Отсутствие связи в тракте от АК1 до ЦКС1 \r\n",76);

write(handle," \r\n",76);

if(bytes[23]&0x01)

write(handle,"Прием от АК3 трех кодограмм подряд с признаком К2 \r\n",76);

if(bytes[23]&0x02)

write(handle,"Прием от АК3 трех кодограмм подряд с ВПС=1010 \r\n",76);

if(bytes[23]&0x04)

write(handle,"Отсутствие информации от АК3 на входе ПУ более 12 сек \r\n",76);

if(bytes[22]&0x01)

write(handle,"Прием от АК3 трех кодограмм подряд с признаком получения УС \r\n",76);

if(bytes[22]&0x02)

write(handle,"Отсутствие связи в тракте от ЦКС1 до АК3 \r\n",76);

if(bytes[22]&0x04)

write(handle,"Отсутствие связи в тракте от ЦКС1 до ЦКС2 для АК3 \r\n",76);

if(bytes[21]&0x01)

write(handle,"Отсутствие связи в тракте от АК3 до ЦКС1 \r\n",76);

write(handle," \r\n",76);

if(bytes[26]&0x01)

write(handle,"Прием от АК6 трех кодограмм подряд с признаком К2 \r\n",76);

if(bytes[26]&0x02)

write(handle,"Прием от АК6 трех кодограмм подряд с ВПС=1010 \r\n",76);

if(bytes[26]&0x04)

write(handle,"Отсутствие информации от АК6 на входе ПУ более 12 сек \r\n",76);

if(bytes[25]&0x01)

write(handle,"Прием от АК6 трех кодограмм подряд с признаком получения УС \r\n",76);

if(bytes[25]&0x02)

write(handle,"Отсутствие связи в тракте от ЦКС1 до АК6 \r\n",76);

if(bytes[25]&0x04)

write(handle,"Отсутствие связи в тракте от ЦКС1 до ЦКС2 для АК6 \r\n",76);

if(bytes[24]&0x01)

write(handle,"Отсутствие связи в тракте от АК6 до ЦКС1 \r\n",76);

write(handle," \r\n",76);

if(bytes[16]&0x01)

write(handle,"Прием от ВПУ трех кодограмм подряд с признаком К2 \r\n",76);

if(bytes[16]&0x02)

write(handle,"Прием от ВПУ трех кодограмм подряд с ВПС=1010 \r\n",76);

if(bytes[16]&0x04)

write(handle,"Отсутствие информации от ВПУ на входе ПУ более 12 сек \r\n",76);

if(bytes[15]&0x01)

write(handle,"Прием от АК6 трех кодограмм подряд с признаком получения УС \r\n",76);

if(bytes[15]&0x02)

write(handle,"Отсутствие связи в тракте от ЦКС1 до ВПУ \r\n",76);

if(bytes[15]&0x04)

write(handle,"Отсутствие связи в тракте от ЦКС1 до ЦКС2 для ВПУ \r\n",76);

if(bytes[14]&0x01)

write(handle,"Отсутствие связи в тракте от ВПУ до ЦКС1 \r\n",76);

write(handle," \r\n",76);

if(bytes[17]&0x04)

write(handle,"Отсутствие связи в тракте от ЦКС1 до ПУ \r\n",76);

write(handle," \r\n",76);

if(bytes[10]&0x02)

write(handle,"Отсутствие приема кодограмм в заданный интервал времени \r\n",76);

write(handle," \r\n",76);

if((bytes[12]&0x07)&&(!(bytes[11]&0x07)))

write(handle,"Прием кодограмм с признаком отсутствия связи от ПУ до М486 \r\n",76);

if((bytes[11]&0x07)&&(!(bytes[12]&0x07)))

{

write(handle,"Прием кодограмм с признаком искажения информации от ЦКС до М486 и/или \r\n",76);

write(handle,"прием кодограмм с признаком отсутствия импульса БИ \r\n",76);

}

if((bytes[11]&0x07)&&(bytes[12]&0x07))

{

write(handle,"Прием кодограмм с признаком отсутствия связи от ПУ до М486 и/или \r\n",76);

write(handle,"прием кодограмм с признаком искажения информации от ЦКС до М486 и/или \r\n",76);

write(handle,"прием кодограмм с признаком отсутствия импульса БИ \r\n",76);

}

break;

case 2: // РМ-02

write(handle," \r\n",76);

if(bytes[5]&0x01)

write(handle,"АРМ ЗАБЛОКИРОВАНО по ФК оператором \r\n",76);

write(handle," \r\n",76);

if(bytes[5]&0x04)

write(handle,"НЕТ СВЯЗИ МЕЖДУ ПЭВМ1 и ВК \r\n",76);

if(bytes[4]&0x02)

write(handle,"Нет связи с ВК по одной из линий связи ЛС1 или ЛС3 \r\n",76);

if(bytes[3]&0x04)

write(handle,"Нет связи с ВК по линии связи ЛС1 \r\n",76);

if(bytes[2]&0x02)

write(handle,"Нет связи с ВК по линии связи ЛС3 \r\n",76);

break;

case 10: // РМ-10

write(handle," \r\n",76);

if(bytes[5]&0x01)

write(handle,"АРМ ЗАБЛОКИРОВАНО по ФК оператором \r\n",76);

write(handle," \r\n",76);

if(bytes[5]&0x04)

write(handle,"НЕТ СВЯЗИ МЕЖДУ ПЭВМ2 и ВК \r\n",76);

if(bytes[4]&0x02)

write(handle,"Нет связи с ВК по одной из линий связи ЛС2 или ЛС4 \r\n",76);

if(bytes[2]&0x01)

write(handle,"Нет связи с ВК по линии связи ЛС2 \r\n",76);

if(bytes[2]&0x04)

write(handle,"Нет связи с ВК по линии связи ЛС4 \r\n",76);

break;

case 5: // РМ05Г

case 13: // РМ13П

if(bytes[19]&0x01)

write(handle,"ОСНОВНОЙ АРМ - РМ-13П \r\n",76);

else

write(handle,"ОСНОВНОЙ АРМ - РМ-05Г \r\n",76);

write(handle," \r\n",76);

if(bytes[5]&0x04)

write(handle," АРМ НЕИСПРАВЕН \r\n",76);

else

write(handle," АРМ ИСПРАВЕН \r\n",76);

write(handle," \r\n",76);

if(bytes[16]&0x02)

write(handle,"Основное АРМ ИСПРАВНО \r\n",76);

if(bytes[16]&0x01)

write(handle,"Основное АРМ НЕИСПРАВНО \r\n",76);

if(bytes[16]&0x04)

write(handle,"Основное АРМ ЗАБЛОКИРОВАНО \r\n",76);

if(bytes[15]&0x01)

write(handle,"Основное АРМ РАЗБЛОКИРОВАНО \r\n",76);

if(bytes[19]&0x04)

write(handle,"Резервное АРМ ИСПРАВНО \r\n",76);

if(bytes[19]&0x02)

write(handle,"Резервное АРМ НЕИСПРАВНО \r\n",76);

if(bytes[18]&0x01)

write(handle,"Резервное АРМ ЗАБЛОКИРОВАНО \r\n",76);

if(bytes[18]&0x02)

write(handle,"Резервное АРМ РАЗБЛОКИРОВАНО \r\n",76);

if(bytes[5]&0x01)

write(handle,"АРМ ЗАБЛОКИРОВАНО по ФК оператором \r\n",76);

write(handle," \r\n",76);

if(bytes[4]&0x02)

write(handle,"Неисправна одна из трех линий магистрали обмена \r\n",76);

else

write(handle,"Все три линии магистрали обмена исправны \r\n",76);

if(bytes[12]&0x04)

write(handle,"Неисправна 1-я линия магистрали приема \r\n",76);

if(bytes[12]&0x02)

write(handle,"Неисправна 2-я линия магистрали приема \r\n",76);

if(bytes[12]&0x01)

write(handle,"Неисправна 3-я линия магистрали приема \r\n",76);

if(bytes[10]&0x02)

write(handle,"Отсутствует прием информации в ВМ от данного АРМ-1 \r\n",76);

break;

case 7: // ВМ

if(bytes[5]&0x02)

write(handle,"Авария электропитания в одном или нескольких каналах ШП-614 \r\n",76);

if(bytes[4]&0x04)

write(handle,"Неисправность 1 канала ШП-614 \r\n",76);

if(bytes[3]&0x01)

write(handle,"Неисправность 2 канала ШП-614 \r\n",76);

if(bytes[3]&0x02)

write(handle,"Неисправность 3 канала ШП-614 \r\n",76);

if(bytes[3]&0x04)

write(handle,"Произошел ПРОГРАММНЫЙ СБОЙ \r\n",76);

if(bytes[2]&0x01)

write(handle,"Авария питания 1 канала \r\n",76);

if(bytes[2]&0x02)

write(handle,"Авария питания 1 канала \r\n",76);

if(bytes[2]&0x04)

write(handle,"Авария питания 1 канала \r\n",76);

if(bytes[0]&0x01)

write(handle,"Нарушена целостность программного изделия-кассеты КП-610 - \r\n",76);

write(handle,"подсчитанная контрольная сумма не совпадает с эталоном \r\n",76);

break;

case 16: // ВУ16

case 17: // ВУ17

case 18: // ВУ18

case 19: // ВУ19

if(bytes[5]&0x01)

write(handle,"ПУ заблокировано оператором по ФК \r\n",76);

if(bytes[5]&0x04)

write(handle,"Нажата КНОПКА ОБНАРУЖЕНИЯ НЕИСПРАВНОСТИ \r\n",76);

break;

case 15: // АС

//Подкорректировать после согласования

//байта состояния

if(bytes[5]&0x04)

write(handle,"АРМ-РД НЕИСПРАВЕН - не работают обе ПЭВМ \r\n",76);

if(bytes[4]&0x01)

write(handle,"АРМ-РД РАБОТОСПОСОБЕН - работает одна из двух ПЭВМ \r\n",76);

if(bytes[4]&0x02)

write(handle,"Нет связи хотя бы по одной из линий связи ЛС1,ЛС2,ЛС3,ЛС4 \r\n",76);

if(bytes[4]&0x04)

write(handle,"Неисправен КСП-0 \r\n",76);

if(bytes[3]&0x01)

write(handle,"Неисправен КСП-1 \r\n",76);

if(bytes[3]&0x02)

write(handle,"Неисправен КСП-2 \r\n",76);

if(bytes[3]&0x04)

write(handle,"Нет связи по линии связи ЛС1 \r\n",76);

if(bytes[2]&0x01)

write(handle,"Нет связи по линии связи ЛС2 \r\n",76);

if(bytes[2]&0x02)

write(handle,"Нет связи по линии связи ЛС3 \r\n",76);

if(bytes[2]&0x04)

write(handle,"Нет связи по линии связи ЛС4 \r\n",76);

break;

}

}

// bs2_out.prj

// bs2_out.c

// main()

// выдача результатов запроса по 2-й форме байтов состояния на экран

// ( из файла ) или форматирование и постановка в очередь для выдачи

// на принтер

#include

#include "cxlkey.h"

#include "disp.h"

extern void resScr(void);

// выдача результатов запроса из файла на экран

extern void resPrn(void);

// выдача результатов запроса из файла на принтер

void main(int argc,char *argv[])

{

void z(void);

setkbloop(z);

if(argv[1][0]=='э') resScr();

else resPrn();

}

void z(void)

{

union REGS r;

r.h.ah=0;

int86(DISP,&r,&r);

}

#include

#include "cxlkey.h"

#include "disp.h"

extern void resScr(void);

// выдача результатов запроса из файла на экран

extern void resPrn(void);

// выдача результатов запроса из файла на принтер

void main(int argc,char *argv[])

{

void z(void);

setkbloop(z);

if(argv[1][0]=='э') resScr();

else resPrn();

}

void z(void)

{

union REGS r;

r.h.ah=0;

int86(DISP,&r,&r);

}

// inq_out.prj

// INQ_OUT.C

// main()

// выдача результатов запроса на экран ( из файла )

// или форматирование и постановка в очередь для выдачи на принтер

#include

#include

#include "cxlkey.h"

#include "cxldef.h"

extern void resScr(void);

// выдача результатов запроса из файла на экран

extern void resPrn(void);

// выдача результатов запроса из файла на принтер

void main(int argc,char *argv[])

{

void z(void);

setkbloop(z);

if(argv[1][0]=='э') resScr();

else resPrn();

}

#include

#include "disp.h"

void z(void)

{

union REGS r;

r.h.ah=0;

int86(DISP,&r,&r);

}

// inq_out.prj

// res_scr.C

// res_scr()

// выдача результатов запроса на экран ( из файла )

#include

#include

#include "cxlwin.h"

#include "cxlkey.h"

#include "cxlvid.h"

#define LEN 81

#define TXTATTR _CYAN

#define UP 0x4800

#define DOWN 0x5000

#define PGUP 0x4900

#define PGDOWN 0x5100

#define ESC 0x011b

void resScr(void)

{

FILE *f; // дескриптор файла результатов

int down; // номер текущей строки в файле

int ch; // код клавиши

int i;

char string[LEN];

int mwup; // количество строк над основным окном

// вывод на экран строки запроса и шапки таблицы

f=fopen("inquiry.res","r++");

fgets(string,LEN,f);

for(mwup=0;strncmp(string+3,"ДАТА",4);++mwup)

{

wopen(mwup,0,mwup,79,5,BLUE|_LGREY,BLUE|_LGREY);

wprintf("%.79s",string);

fgets(string,LEN,f);

}

wopen(mwup,0,mwup,79,5,YELLOW|_BLUE,YELLOW|_BLUE);

wprintf(" %.78s",string);

// основное окно

wopen(++mwup,0,25,79,5,LCYAN|_BLUE,TXTATTR);

//wshadow(LGREY);

// вывод результатов запроса из файла на экран

for(down=mwup;down<25 && fgets(string,LEN,f)!=NULL;++down)

wprints(down-mwup,1,TXTATTR,string);

hidecur();

// цикл просмотра результатов

while((ch=getxch())!=ESC)

switch(ch)

{

case UP: if(down<=25) break;

down--;

fseek(f,(long)(down-25+mwup)*LEN,0);

fgets(string,LEN,f);

wscroll(1,D_DOWN);

wprints(0,1,TXTATTR,string);

break;

case DOWN: if(fseek(f,(long)down*LEN,0)) break;

if(fgets(string,LEN,f)==NULL) break;

wscroll(1,D_UP);

wprints(24-mwup,1,TXTATTR,string);

down++;

break;

case PGUP: for(i=0;i<=24-mwup;++i)

{

if(down<=25) break;

down--;

fseek(f,(long)(down-25+mwup)*LEN,0);

fgets(string,LEN,f);

wscroll(1,D_DOWN);

wprints(0,1,TXTATTR,string);

}

break;

case PGDOWN: for(i=0;i<=24-mwup;++i)

{

if(fseek(f,(long)down*LEN,0)) break;

if(fgets(string,LEN,f)==NULL) break;

wscroll(1,D_UP);

wprints(24-mwup,1,TXTATTR,string);

down++;

}

break;

}

fclose(f);

wcloseall();

}

// bs2_out.prj

// res_scr_.c

// res_scr()

// выдача результатов запроса по 2-й форме байтов состояния на экран

// ( из файла )

#include

#include

#include "cxlwin.h"

#include "cxlkey.h"

#include "cxlvid.h"

#define LEN 100

#define TXTATTR _CYAN

#define UP 0x4800

#define DOWN 0x5000

#define PGUP 0x4900

#define PGDOWN 0x5100

#define RIGHT 0x4d00

#define LEFT 0x4b00

#define HOME 0x4700

#define END 0x4F00

#define ESC 0x011b

FILE *f; // дескриптор файла результатов

int down; // номер текущей строки в файле

char string[LEN];

int length; // длина строк в файле

int w1; // дескриптор окна

void screen_move(int right);

void resScr(void)

{

int right=0; // горизонтальное смещение

int ch; // код клавиши

int i;

// вывод на экран строки запроса и шапки таблицы

f=fopen("inquiry.res","r++");

wopen(0,0,0,79,5,BLUE|_LGREY,BLUE|_LGREY);

fgets(string,LEN,f);

wprints(0,1,BLUE|_LGREY,string);

w1=wopen(1,0,1,79,5,YELLOW|_BLUE,YELLOW|_BLUE);

fgets(string,LEN,f);

wprints(0,1,YELLOW|_BLUE,string);

length=strlen(string)+1;

// основное окно

wopen(2,0,25,79,5,LCYAN|_BLUE,TXTATTR);

hidecur();

//wshadow(LGREY);

// вывод результатов запроса из файла на экран

for(down=2;down<25 && fgets(string,LEN,f)!=NULL;++down)

{

string[right+80]='\0';

wprints(down-2,1,TXTATTR,string);

}

// цикл просмотра результатов

while((ch=getxch())!=ESC)

switch(ch)

{

case UP: if(down<=25) break;

down--;

fseek(f,(long)(down-23)*length,0);

fgets(string,LEN,f);

string[right+79]='\0';

wscroll(1,D_DOWN);

wprints(0,1,TXTATTR,string+right);

break;

case DOWN: if(fseek(f,(long)down*length,0)) break;

if(fgets(string,LEN,f)==NULL) break;

wscroll(1,D_UP);

string[right+80]='\0';

wprintc(22,0,TXTATTR,' ');

down++;

break;

case PGUP: for(i=0;i<=22;++i)

{

if(down<=25) break;

down--;

fseek(f,(long)(down-23)*length,0);

fgets(string,LEN,f);

wscroll(1,D_DOWN);

string[right+80]='\0';

wprints(0,1,TXTATTR,string+right);

wprintc(1,0,TXTATTR,' ');

}

break;

case PGDOWN: for(i=0;i<=22;++i)

{

if(fseek(f,(long)down*length,0)) break;

if(fgets(string,LEN,f)==NULL) break;

wscroll(1,D_UP);

string[right+80]='\0';

wprints(22,1,TXTATTR,string+right);

down++;

}

break;

case LEFT: if(right) screen_move(--right);break;

case RIGHT: if(right+82

case END: if(right+82

case HOME: if(right) screen_move(right=0);break;

}

fclose(f);

wcloseall();

}

// горизонтальная прокрутка

void screen_move(int right)

{

int i;

fseek(f,length,0);

fgets(string,LEN,f);

string[right+80]='\0';

wwprints(w1,0,1,YELLOW|_BLUE,string+right);

if(down-22>2) fseek(f,(long)(down-22)*length,0);

for(i=0;i<=22 && fgets(string,length,f)!=NULL;++i)

{

string[right+80]='\0';

wprints(i,1,TXTATTR,string+right);

}

}

#include

#include

#include "cxlwin.h"

#include "cxlkey.h"

#include "cxlvid.h"

#define LEN 80

#define ESC 0x011b

FILE *f; // дескриптор файла результатов

char string[LEN]; // буфер для чтения из файла

void resScr(void)

{

int i;

int maxlen; // максимальная длина строки в файле результатов запроса

int startpos; // столбец окна с которого печатается текст

// открытие файла результатов запроса и

// определение размера самой длинной строки в этом файле

f=fopen("inquiry.res","r++");

for(maxlen=0,i=0;fgets(string,LEN,f)!=NULL;++i)

if(strlen(string)>maxlen) maxlen=strlen(string);

fseek(f,0,0);

// черный фон

wopen(0,0,24,79,5,0,0);

// открытие окна

wopen((20-i)/2,5,(20-i)/2+i+2,75,1,YELLOW|_BLUE,_CYAN);

hidecur();

// чтение типа устройства и его использование в качестве титула окна

fgets(string+1,LEN,f);

string[0]=' ';

for(i=2;i<=6;++i)

if(string[i]=='\r' || string[i]=='\n') string[i]=' ';

wtitle(string,TCENTER,_LGREY);

// вывод результатов запроса из файла в окно

startpos=(70-maxlen)/2;

for(i=2;fgets(string,LEN,f)!=NULL;++i)

{

wgotoxy(i,startpos);

wprintf("%s",string);

}

// окно находится на экране пока не будет нажато ESC

while(getxch()!=ESC);

fclose(f);

wcloseall();

}

Список литературы

  1. Глушков В. М. “Основы безбумажной информатики”, М. Наука, 1987 г.;

  2. “Человек и вычислительная техника” под ред. Глушкова В. М., М. Наука, 1971 г.;

  3. “Организационные вопросы автоматизации управления” (перевод с английского) Глушкова В. М., М. Экономика, 1972 г.;

  4. Мартин Дж. “Организация баз данных в вычислительных системах”, М. Мир, 1980 г.;

  5. Бойко В. В., Савинков В. М. “Проектирование баз данных информационных систем”, М. Финансы и статистика, 1989 г.;

  6. Шураков В. В. “Надежность программного обеспечения систем обработки данных”, М. Финансы и статистика, 1987 г.;

  7. Уинер Р. “Язык Турбо СИ”, М. Мир, 1991 г.;

  8. Paradox Engine. Документация: описание, список функций для создания и работы с БД.;

  9. “Турбо СИ. Описание редактора, стандартные и графические функции”, изд. Иститута проблем информатики, М. 1989 г.;

  10. Хьюз Дж., Мичтом Дж. “Структурный подход к программированию”. Изд. Мир, М., 1980 г.;

  11. “Выполнение организационно-экономической части дипломных проектов”. Учебное пособие, изд. МИРЭА, 1994 г.;

  12. “Выполнение организационно-экономической части дипломных проектов”. Учебное пособие, изд. МИРЭА, 1987 г.;

  13. “Сетевые графики в планировании”. Разумов И. М., Белова Л. Д., и др., М. Высшая школа, 1981 г.;

  14. “Основы финансового менеджмента. Как управлять капиталом?” Балабанов И. Т., М. “Финансы и статистика”, 1994 г.;

  15. Мотузко Ф. Я. “Охрана труда”, М. Высшая школа, 1969 г.;

  16. Самгин Э. Б. “Освещение рабочих мест”, изд. МИРЭА, 1989 г.;

  17. Сибаров Ю. Б. “Охрана труда в вычислительных центрах” и др., М. Машиностроение, 1990 г.;

  18. Методические указания по дипломному проектированию раздела “Охрана труда и окру­жающей среды” под ред. Мотузко Ф. Я., МИРЭА, 1980 г.;

  19. “Основы инженерной психологии” под ред. Ломова Б. Ф., М. Высшая школа, 1986 г.;

  20. Демиденко и др. “Защита объектов народного хозяйства от оружия массового поражения” Справочник, Киев "Высшая школа" 1989 г.;

  21. Методические указания по безопасности жизнедеятельности. “Особенности ведения аварийно-спасательных работ на промышленном объекте в ЧС мирного времени”, изд. МИРЭА.;

  22. Атаманюк В. Г., Ширшев Л. Г. и др. “Гражданская оборона. Учебник для ВТУЗов”, М. Высшая школа. 1987г.;

  23. “Введение в практическую эргономику. Учебное пособие.” под ред. Зинченко В. П., Моргунова Е. Б., изд. МИРЭА, 1990г.

4


Свежие статьи
Популярно сейчас
А знаете ли Вы, что из года в год задания практически не меняются? Математика, преподаваемая в учебных заведениях, никак не менялась минимум 30 лет. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5168
Авторов
на СтудИзбе
438
Средний доход
с одного платного файла
Обучение Подробнее