Xreferat.com » Рефераты по информатике и программированию » Автоматизированное рабочее место регистрации и документирования комплекса средств автоматизации

Автоматизированное рабочее место регистрации и документирования комплекса средств автоматизации

strcat(c," ");

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

j=k+1;

}

break;

}

strcat(c," ");

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

j=0;

}

inqstr[strlen(inqstr)]=' ';

_write(handle,inqstr,81);

free(inqstr);

}

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


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

j=coreleft()/1024-50;

if(j>256) j=256;

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

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

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

PXRecNFlds(tblh,&nflds);


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


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

for(i=5;i

{

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

++n;

for(c=argv[i],j=1;*c!='';++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

//INQUIRYinterval.c

// interval()

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


#include

#include

#include "pxengine.h"

#include "def.h"


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

{

RECORDHANDLE rech;


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


PXRecBufOpen(tblh,&rech);

PXPutDate(rech,1,date2);

PXPutAlpha(rech,2,time2);

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

PXRecNum(tblh,&high);

--high;

PXRecDelete(tblh);


PXPutDate(rech,1,date1);

PXPutAlpha(rech,2,time1);

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

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

PXRecDelete(tblh);


PXRecBufClose(rech);

}


// inquiry.prj

//INQUIRYrecprint.c

// recprint()

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


#include

#include

#include

#include

#include "pxengine.h"

#include "def.h"

#include "disp.h"


void recprint()

{

long date;

int month,day,year;


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

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

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

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


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

RECORDHANDLE rech;

union REGS r;

int a,i;


memset(string,' ',82);

PXRecBufOpen(tblh,&rech);

PXRecGet(tblh,rech);

PXGetDate(rech,1,&date);

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

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

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

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

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

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

for(i=0;i<=80;++i) if(string[i]=='') 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

//INQUIRYsearch12.c

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

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

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

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

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

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

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

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


#include

#include "pxengine.h"

#include "def.h"


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

{

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

int yes;

char *c,*c2;

char arg[10];

RECORDHANDLE *rec;

RECORDNUMBER *s,max=low;


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

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

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


for(i=3;j

{

if(!x[i]) continue;

PXRecBufOpen(tblh,rec+j);

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

y[j++]=i;

}


while(1)

{

for(i=0;i

{

if(max==1)

{

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

PXRecNum(tblh,&s[i]);

}

else

if(s[i]

{

PXRecGoto(tblh,max-1);

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

PXRecNum(tblh,&s[i]);

}

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

{

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

return;

}

}


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

{

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

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

}

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

}

}


void search1(void)

{

RECORDNUMBER i;


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

{

recprint();

PXRecNext(tblh);

}

}

// inquiry.prj

//INQUIRYsearch3.c

// search3()

// поиск

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

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

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

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

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

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

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


#include

#include

#include "pxengine.h"

#include "def.h"


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

{

/*

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

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

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

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

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

*/

RECORDHANDLE **rec;

int i,j,k;

int yes;

char *c1,*c2;

char arg[10];

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

int a;


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

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

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

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

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


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

if(x[i])

{

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

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

for(j=0;j

}


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

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

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

{

if(!x[i]) continue;

if(x[i]==1)

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

else

{

c1=args[i-3];

for(k=0;k

{

c2=arg;

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

*c2=''; ++c1;

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

}

}

}

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

while(1) {

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

{

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

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

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

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

if(!x[i]) continue;

for(k=0;k

{

if(max==1)

{

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

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

}

else

if (z[i][k]

{

PXRecGoto(tblh,max-1);

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

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

}

}

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

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

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

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

if(s[i]>high)

{

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

if(x[i])

{

for(j=0;j

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

}

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

return;

}

}

// 3), 4)

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

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

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

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

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

max=s[i];


for(++i,yes=1;i

{

if(!x[i]) continue;

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

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

}

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

}

}


// bs2_inq.prj

// BS2_INQbs2_inq.c

// main()

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


#include

#include

#include

#include

#include

#include

#include

#include "pxengine.h"

#include "devices.h"


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

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

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

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


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

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

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


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

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

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

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


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

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

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

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

argv[3] - дата;

argv[4] - время;

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


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

{

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

int a,i;

char *c;

RECORDHANDLE rech;

RECORDNUMBER num;


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

handle=open("inquiry.res",

O_CREAT | O_TRUNC | O_WRONLY,S_IREAD | S_IWRITE );

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

switch(i)

{

case 0: //ШЭ-00

case 8: //ШЭ-08

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

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

break;

case 1: //ШП-01

case 9: //ШП-09

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

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

break;

case 4: //ШК-04

case 12: //ШК-12

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

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

break;

case 2: //РМ-02

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

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

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

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

break;

case 10: //РМ-10

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

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

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

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

break;

case 5: //РМ05Г

case 13: //РМ13П

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

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

break;

case 3: //В

case 6: //КС1

case 14: //КС2

case 15: //АС

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

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

break;

case 7: //ВМ

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

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

break;

case 16: //ВУ16

case 17: //ВУ17

case 18: //ВУ18

case 19: //ВУ19

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

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

break;

}

length=strlen(sag);

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

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

for(c=inqstr,i=1;i

{

strcat(c," ");

strcat(c,argv[i]);

}

inqstr[strlen(inqstr)]=' ';

strcpy(inqstr+length-2,"rn");

_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_INQform2.c

// form2()

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


#include

#include "devices.h"


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

Если Вам нужна помощь с академической работой (курсовая, контрольная, диплом, реферат и т.д.), обратитесь к нашим специалистам. Более 90000 специалистов готовы Вам помочь.
Бесплатные корректировки и доработки. Бесплатная оценка стоимости работы.

Поможем написать работу на аналогичную тему

Получить выполненную работу или консультацию специалиста по вашему учебному проекту

Похожие рефераты: