Элементы рабочего места
оператора
|
Технические
характеристики, предъявляемые к элементу рабочего места оператора
|
На какое требование влияет
данная характеристика
|
Окружаю-щее помещение
|
Экран АЦД,
документы, клавиатура пульта должны быть расположены так, чтобы перепад
яркостей их поверхностей, зависящий от их расположения относительно
источников света, не превышал 1:10 при рекомендуемом значении 1:3. При
яркости изображения на экране 50-100 кд/м (номинальное значение) освещенность
документа должна составлять 300-500 лк. Должны быть исключены слепящие
яркости, блики и отображения от стекла экрана.
При
использовании экранов красновато-желтого цвета с яркостью свечения до 15кд/м2
стену, противоположную экранам, окрашивают в насыщенный темно-коричневый цвет
с коэффициентом отражения =0.2, а остальные
стены - в красно-коричневый цвет с =0.35. При восприятии информации на экране
зеленого цвета стену, на которую направлен взгляд оператора, окрашивают в
оливково-зеленый цвет с =0.4. Окраске
поверхностей следует придавать матовую фактуру.
|
1, 2, 3
|
Заключение
Результатом
данного дипломного проекта является разработка программ формирования и
обработки запросов. Программы разработаны для технических средств АРМ РД и
функционируют совместно с остальным ПО АРМ РД.
В
процессе разработки программ выполнены требования к функциональным
характеристикам, условия эксплуатации и требования к операционной и программной
совместимости. В заключительной части дипломного проекта была дана оценка
результатов работы программ и даны рекомендации оператору АРМ РД.
Объем
памяти, занимаемый программой равен: V = 64 Кбайта.
В организационно-экономической части
дипломного проекта было проведено планирование разработки с построением
сетевого графика, расчет договорной цены разработки, обоснована экономическая
целесообразность темы.
Договорная
цена разработки составляет: Цд = 916 152 руб. в ценах 1998г.
В
разделе “Охрана труда и техника безопасности” был выбран оптимальный режим
освещенности и проведен расчет информационной нагрузки оператора.
Значение
информационной нагрузки оператора АРМ РД составляет 0.6 бит/с.
В
разделе “Гражданская оборона” были приведены требования по инженерной защите
оператора и оборудования ПЭВМ от воздействия высоких температур при взрывах в
ЧС мирного времени.
В
разделе “Эргономика” была произведена оценка рабочего места оператора и
разработано оптимальное рабочее место оператора.
Приложение 1
Схемы алгоритмов программ
Приложение 2
Тексты программ
//
inquiry.prj
//INQUIRY\inquiry.c
//
main(),initsearch(),mem_args()
// программа
обработки запросов
#include
<stdio.h>
#include
<stdlib.h>
#include
<string.h>
#include
<fcntl.h>
#include
<sys/stat.h>
#include
<io.h>
#include
<dos.h>
#include
<alloc.h>
#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<argc;)
{
inqstr=(char
*)calloc(82,1);
memset(inqstr+1,'
',79);
inqstr[79]='\r';
inqstr[80]='\n';
inqstr[81]='\0';
for(c=inqstr;i<argc;++i)
{
if(strlen(inqstr)+strlen(argv[i])>78+j)
{
if(strlen(argv[i])>50 && (strlen(inqstr)<70 ||
strlen(argv[i])>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<argc;++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
<stdio.h>
#include
<stdlib.h>
#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
<stdio.h>
#include
<mem.h>
#include
<io.h>
#include
<dos.h>
#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
<stdlib.h>
#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;
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<n;++i)
{
if(!x[i])
continue;
PXRecBufOpen(tblh,rec+j);
PXPutAlpha(rec[j],i,argv[i+2]);
y[j++]=i;
}
while(1)
{
for(i=0;i<n;++i)
{
if(max==1)
{
if
(!(a=PXSrchFld(tblh,rec[i],y[i],SEARCHFIRST)))
PXRecNum(tblh,&s[i]);
}
else
if(s[i]<max)
{
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<n;++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
<stdlib.h>
#include
<stdio.h>
#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<x[i];++j) PXRecBufOpen(tblh,rec[i]+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<x[i];++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<x[i];++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]<max)
{
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;k<x[i];++k)
if(s[i]>z[i][k]) s[i]=z[i][k];
if(s[i]>high)
{
for(i=3;i<=nflds;++i)
if(x[i])
{
for(j=0;j<x[i];++j) PXRecBufClose(rec[i][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<nflds;++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
<stdio.h>
#include
<stdlib.h>
#include
<string.h>
#include
<fcntl.h>
#include
<sys/stat.h>
#include
<io.h>
#include
<alloc.h>
#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<argc;++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
<string.h>
#include
"devices.h"
void
form2(char *Type,char *bytes,char *text)
{
/* Type;
тип устройства
bytes;
нерасшифрованные байты состояния
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
<stdio.h>
#include
<stdlib.h>
#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
<stdio.h>
#include
<io.h>
#include
<string.h>
#include
<stdlib.h>
#include
<dos.h>
#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
<stdlib.h>
#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]<max)
{
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
<stdio.h>
#include
<fcntl.h>
#include
<sys/stat.h>
#include
<io.h>
#include
"pxengine.h"
#include
<string.h>
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
<io.h>
#include
<string.h>
#include
"devices.h"
#include
<dos.h>
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<CHDEV;++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)
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)
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
<dos.h>
#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
<dos.h>
#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
<string.h>
#include
<process.h>
#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
<dos.h>
#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
<stdio.h>
#include
<string.h>
#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
<stdio.h>
#include
<string.h>
#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<length) screen_move(++right);break;
case END:
if(right+82<length) screen_move(right=length-82);break;
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';
}
}
#include
<stdio.h>
#include
<string.h>
#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г.