Автоматизированное рабочее место регистрации и документирования комплекса средств автоматизации
Аргумент нормальной функции распределения вероятностей равен 0,32. Используя таблицу интеграла Фурье, находим значение функции Рк = 0,63. Так как значение Рк попадает в интервал 0,35 < Рк < 0,65, то сетевой график не нуждается в оптимизации.
Рис.2.1 Сетевой график.
Приложение 1
Тексты программ
// 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;
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<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; нерасшифрованные байты состояния
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 <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)
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 <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)
_LGREY);
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';
wprints (i,1,TXTATTR,string+right);
}
}
#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 ();
}
Список литературы
Глушков В.М. “Основы безбумажной информатики", М. Наука, 1987 г.;
“Человек и вычислительная техника" под ред. Глушкова В.М., М. Наука, 1971 г.;
“Организационные вопросы автоматизации управления” (перевод с английского) Глушкова В.М., М. Экономика, 1972 г.;
Мартин Дж. “Организация баз данных в вычислительных системах", М. Мир, 1980 г.;
Бойко В.В., Савинков В.М. “Проектирование баз данных информационных систем”, М. Финансы и статистика, 1989 г.;
Шураков В.В. “Надежность программного обеспечения систем обработки данных”, М. Финансы и статистика, 1987 г.;
Уинер Р. “Язык Турбо СИ", М. Мир, 1991 г.;
Paradox Engine. Документация: описание, список функций для создания и работы с БД.;
“Турбо СИ. Описание редактора, стандартные и графические функции”, изд. Иститута проблем информатики, М. 1989 г.;
Хьюз Дж., Мичтом Дж. “Структурный подход к программированию”. Изд. Мир, М., 1980 г.;
“Выполнение организационно-экономической части дипломных проектов". Учебное пособие, изд. МИРЭА, 1994 г.;
“Выполнение организационно-экономической части дипломных проектов". Учебное пособие, изд. МИРЭА, 1987 г.;
“Сетевые графики в планировании". Разумов И.М., Белова Л.Д., и др., М. Высшая школа, 1981 г.;
“Основы финансового менеджмента. Как управлять капиталом? ” Балабанов И.Т., М. “Финансы и статистика”, 1994 г.;
Мотузко Ф.Я. “Охрана труда", М. Высшая школа, 1969 г.;
Самгин Э.Б. “Освещение рабочих мест”, изд. МИРЭА, 1989 г.;
Сибаров Ю.Б. “Охрана труда в вычислительных центрах" и др., М. Машиностроение, 1990 г.;
Методические указания по дипломному проектированию раздела “Охрана труда и окружающей среды" под ред. Мотузко Ф.Я., МИРЭА, 1980 г.;
“Основы инженерной психологии” под ред. Ломова Б.Ф., М. Высшая школа, 1986 г.;
Демиденко и др. “Защита объектов народного хозяйства от оружия массового поражения" Справочник, Киев "Высшая школа" 1989 г.;
Методические указания по безопасности жизнедеятельности. “Особенности ведения аварийно-спасательных работ на промышленном объекте в ЧС мирного времени”, изд. МИРЭА.;
Атаманюк В.Г., Ширшев Л.Г. и др. “Гражданская оборона. Учебник для ВТУЗов”, М. Высшая школа. 1987г.;
“Введение в практическую эргономику. Учебное пособие. ” под ред. Зинченко В.П., Моргунова Е.Б., изд. МИРЭА, 1990г.
Страницы: 1 , 2 , 3 , 4 , 5 , 6 , 7