Тема: OARX(list)(list)LISP

Поскажите как передать из Lisp в OARX и обратно
список. Целые, строки, веществ. получается а со списком никак не разберусь. Код для целого привожу ниже, если можно поправьте его для получения списка или если можно ссылку на примеры
Заранее благодарен
static int repeat (int p)
{
int s;int f;
      for (s = 0; s restype == RTSHORT)
    {
        x = rb->resval.rint;
    }
    else
    {
        acdbFail("Аргумент должен быть целым");
        return RTERROR;
    }
     acedRetInt(repeat (x));
    Return RTNORM;
}

Re: OARX(list)(list)LISP

Все примеры по приему и передаче списков достаточно хорошо расписаны в документациях.
До 12 версии на русском языке она поставлялась только в печатном виде. С 13 версии и выше документация идет в электронном виде и на английском языке.
Ну а если лень копаться в поисках вот простейшие примеры:

// Пример приема (функция '(строка целое_число) точка)
int primer1()
{
     struct resbuf *rb;
     int c;
     ads_point pt;
     ads_real r;
     char str[_MAX_PATH];

     // Выборка аргументов
     rb = ads_getargs();
// --- Проверка и запись в переменные аргументов ---
     if (rb == NULL) {
         ads_fail("Нет аргументов");
         return RTERROR;
     }
     if (rb->restype != RTLB) {          // проверка аргумента
         ads_fail("Первый аргумент должен быть списком");
         return RTERROR;
     }
     rb = rb->rbnext; // следующий аргумент
     if (rb->restype == RTSTR) {          // проверка аргумента
         strcpy(str, rb->resval.rstring); // Сохраняем в локальной переменной
     } else {
         ads_fail("Первый аргумент в списке должен быть строкой");
         return RTERROR;
     }
     rb = rb->rbnext; // следующий аргумент
     if (rb->restype == RTSHORT) { // проверка аргумента   
         c = rb->resval.rint;      // Сохраним в локальной переменной
     } else {
         ads_fail("Второй аргумент в списке должен быть целым числом.");
         return RTERROR;
     }
     rb = rb->rbnext; // следующий аргумент
     if (rb->restype != RTLE) {          // проверка аргумента
         ads_fail("Первый аргумент должен быть списком из 2-х элементов");
         return RTERROR;
     }
     rb = rb->rbnext; // следующий аргумент
     if (rb == NULL) {
         ads_fail("Недостаточное количество аргументов");
         return RTERROR;
     }
     if (rb->restype == RTPOINT !!
         rb->restype == RT3DPOINT) {          // проверка аргумента
         ads_point_set(rb->resval.rpoint,pt); // Сохраняем в локальной переменной
     } else {
         ads_fail("Второй аргумент должен быть 2-х или 3-х мерной точкой.");
         return RTERROR;
     }
// Проверка числа аргументов
     rb = rb->rbnext;
     if (rb != NULL) {
         ads_fail("Избыточное число аргументов");
         return RTERROR;
     }
// --- конец проверки аргументов ---

.................................

     return RTNORM;
}

// Создание статического списка - строка, число, точка
int primer2()
{
     struct resbuf *res_list;
     int c=5;
     ads_point pt = {100.0, 200.0, 0.0};
     char *str = "Строка";

     if ((res_list = ads_buildlist(RTSTR,str,RTSHORT,c,
                                   RT3DPOINT,pt,0)) == NULL) {
        ads_fail("Не могу создать список.");
        return RTERROR;
     }
     ads_retlist(res_list); // возврат списка Автолиспу
     ads_relrb(res_list);   // освобождает память,выделенную буферу результату
     return RTNORM;
}

// Создание динамического списка из десяти целых чисел
int primer3()
{
     struct resbuf *rb1, *rb2;
     struct resbuf *res_list;
     int i=0;

     res_list = rb2 = rb1 = NULL;
     for(i=0; i resval.rint = i;
         res_list = rb2 = rb1;
       } else {        // другие атомы
         if ((rb1 = ads_newrb(RTSHORT)) == NULL) {
           ads_fail("Не могу выделить память для буфера.");
           return RTERROR;
         }
         rb1->resval.rint = i;
         rb2->rbnext = rb1;
         rb2 = rb1;
       }
     }
     ads_retlist(res_list); // возврат списка Автолиспу
     ads_relrb(res_list); // освобождает память,выделенную буферу результату
     rb2 = rb1 = res_list;
     return RTNORM;
}

Re: OARX(list)(list)LISP

Что-то прошел сбой в 3 примере

// Создание динамического списка из десяти целых чисел
int primer3()
{
     struct resbuf *rb1, *rb2;
     struct resbuf *res_list;
     int i=0;

     res_list = rb2 = rb1 = NULL;
     for(i=0; i resval.rint = i;
         res_list = rb2 = rb1;
       } else {        // другие атомы
         if ((rb1 = ads_newrb(RTSHORT)) == NULL) {
           ads_fail("Не могу выделить память для буфера.");
           return RTERROR;
         }
         rb1->resval.rint = i;
         rb2->rbnext = rb1;
         rb2 = rb1;
       }
     }
     ads_retlist(res_list); // возврат списка Автолиспу
     ads_relrb(res_list); // освобождает память,выделенную буферу результату
     rb2 = rb1 = res_list;
     return RTNORM;
}

Re: OARX(list)(list)LISP

Опять сбой, ну значит не судьба

Re: OARX(list)(list)LISP

vektor большое спасибо за примеры, сбой не важен, подкорректировал и все пошло. По помощи то я лазил, только вот времени потерял много(которого и так нет), но ничего нормального не нашел. Еще раз большое спасибо.