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

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

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

Пример для функции atrdbl

Программа вывода всех описаний таблицы КОТ из БД номер 2 на экран может выглядеть следующим образом:

static char buf[600];

static int i,j,l,k;
static char r_kot[]={"KOT"},user_name[]={"i-am-owner"};
struct tab_opis {
                  int n_tup;
                  int n_attr;
                  int tup_len;
                  int n_plan;
                 char r_type;
                 char stat;
                } r_opis;
struct attr_opis {
                  char at_len;
                  char at_type;
                   int at_offset;
                 } *a_opis;

main()
  {
   if(i=inidbl(2)) pr_err(i,"DB2");
   if((k=ropdbl(r_kot,user_name))<0) pr_err(k,"ROPDBL");
   if(i=rlpdbl(&r_opis,k) pr_err(i,"RLPDBL");

/*  OUTPUT TABLE DESCRIPTION  */
   printf("n_tup=%d  n_attr=%d  n_plan=%d  tup_len=%d  r_type=%x
      stat=%x\n",r_opis.n_tup,r_opis.n_attr,r_opis.n_plan,
      r_opis.tup_len,r_opis.r_type&255,r_opis.stat&255);

/*  OUTPUT TUPLE NAMES  */
   for(j=1;j<=r_opis.n_tup;j++)
     {
      if((i=tupdbl(buf,sizeof(buf),j,k))<0) pr_err(i,"TUPDBL");
      printf(" %s\n",buf);
     }

/*  OUTPUT ATTRIBUTES INFORMATION  */
   (char*)a_opis=buf;
   for(j=1;j<=r_opis.n_attr;j++)
     {
      if((i=atrdbl(buf,sizeof(buf),j,k))<0) pr_err(i,"ATRDBL");

      printf("at_len=%d at_type=%d at_offset=%x %s\n",
        a_opis.at_len,a_opis.at_type,a_opis.at_offset,
          buf+sizeof(struct attr_opis));
     }
   rcldbl(k);
  }
pr_err(i,s)
 int i;
 char *s;
  {
   printf("%s --> %x\n",i,s);
   exit(0);
  }

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