ГНЦ ИФВЭ
ОУ У-70
Система Управления комплекса У-70  

Распределенная База Данных реального времени ССУДА

Функции работы с описаниями таблицы (вариант для UNIX)

Пример

Пример программы, формирующей и записывающей все данные таблицы TOK, структура строки которой определена bot, после записи следует чтение и печать подтаблицы. Предполагается, что таблица не имеет владельца и состоит из 5 столбцов, 5 строк и 100 плоскостей.

static char buf[9600];
static short i,j,l,k;
static char r_tok[]={"TOK"},user_name[]={""};
struct bot      {
                  short a_1;
                  char a_2[4];
                  char a_3[10];
                  unsigned char a_4;
                  short a_5;
                } *ref_bot;
struct bot d_bot={100,"AAA\0","AAAAAAAAA\0",1,1000};
main()
  {
   if(i=inidbl(2)) pr_err(i,"DB2");
   if((k=ropdbl(r_tok,user_name))<0) pr_err(k,"ROPDBL");
   coord[0]=1;
   coord[1]=100;
   coord[2]=1;
   coord[3]=5;
   coord[4]=1;
   coord[5]=5;
   coord[6]=0;

   (char*)ref_bot=buf;
   for(l=coord[0];l<=coord[1];l++)
      for(j=coord[2];j<=coord[3];j++)
        {
         ref_bot->d_bot.a1++;
         for(i=0;ia2[i]=d_bot.a2[i];
            if((d_bot.a2[i]&255) == 255)
              d_bot.a2[i]='\A';
            else
              if(d_bot.a2[i]) d_bot.a2[i]++;
           }
         for(i=0;ia3[i]=d_bot.a3[i];
            if((d_bot.a3[i]&255) == 255)
              d_bot.a3[i]='\A';
            else
              if(d_bot.a3[i]) d_bot.a3[i]++;
           }
         ref_bot->a4=d_bot.a4++;
         ref_bot->a5=d_bot.a5++;
         ++ref_bot;
         if(((char*)ref_bot+sizeof(struct bot)) >
            (buf+sizeof(buf))) goto bce_wr;
        }
bce_wr:
   if((i=dtwdbl(buf,sizeof(buf),coord,k)<0) pr_err(i,"DTWDBL);
   coord[0]=45;
   coord[1]=87;
   coord[2]=2;
   coord[3]=4;
   coord[4]=2;
   coord[5]=3;
   coord[6]=0;
   if((i=dtrdbl(buf,sizeof(buf),coord,k)<0) pr_err(i,"DTRDBL);
   i=0;
   for(l=coord[0];l<=coord[1];l++)

      for(j=coord[2];j<=coord[3];j++)
        {
         printf(" a2=%s a3=%s\n",buf+i,buf+i+sizeof(d_bot.a2))
         i += sizeof(d_bot.a2)+sizeof(d_bot.a3);
         if(i>sizeof(buf))goto bce_r;
        }
bce_r:
   rcldbl(k);
  }
pr_err(i,s)
 int i;
 char *s;
  {
   printf("%s --> %x\n",s,i);
   exit(0);
  }

Автор © Воеводин В.П.