ok i do appreciate you help so far but 1 more thing....i get everything else you said
what do i cast the return value to for CV_GET_SEQ_ELEM because the documentation for it says...."The macro checks first whether the desired element belongs to the first block of the sequence and returns it if it does; otherwise the macro calls the main function GetSeqElem" tthe documentation for cvGetSeqElem says "Returns a pointer to a sequence element according to its index." so the macro seems to have ability to return 2 separate values but the function cvGetseqElem does not....cvGetSeqElems return is usually cast to other types when its used though....I was hoping you could help me figure out how to cast its return and how to get by the parameters not being declared here i/e to int or double etc

#define CV_GET_SEQ_ELEM( elem_type, seq, index ) CV_SEQ_ELEM( (seq), elem_type, (index) )


I know what these variables are i/e elem_type is an int and sq is a CvSeq*, index is an int....but i have alot glue code to write for macros like this....so if i didnt know what the variables should be declared as ....what do i do.....this will help me master this part of writing my library(gloe code for macros) if you could answer this for me


On Saturday, November 2, 2013 1:14 PM, Frank Gönninger <frank.goenninger@consequor.de> wrote:
A C macro is merely a text replacement, not a function
definition/declaration. So you can not "call" it - neither from C nor from
Lisp.

In every place in C code where CV_SEQ_ELEM() appears the C preprocessor
replaces this *text* with what the macro generates.

Not knowing what this macro really does it will replace

CV_SEQ_ELEM(myseq,int,1)

with

( assert(sizeof((mytype)->first[0]) == sizeof(CvSeqBlock) &&
  (mytype)->elem_size == sizeof(int)), (int*)((mytype)->first &&
(unsigned)1 < (unsigned)((mytype)->first->count) ? (mytype)->first->data +
(1) * sizeof(int) : cvGetSeqElem( (CvSeq*)(mytype), (1) )))

You see, a simple text replacement.

So - all you need to do is to write a C layer that has a function around
this. If you want to do this in Lisp, then you need to manually translate
this into Lisp. You need to have a solid understanding of C and a solid
understanding of Lisp to do that.

Cheers
  Frank

--
  C o n s e q u o r  C o n s u l t i n g  A G
  Frank Gönninger

  Mobil:    +49 175 43 21 058
  E-Mail:    frank.goenninger@consequor.de
  Telefon:  +49 711 781181 10
  Fax:      +49 711 781181 11

  Consequor Consulting AG
  Liebknechtstr. 33
  D-70565 Stuttgart, Germany

  Vorstand: Frank Gönninger
  Aufsichtsratsvorsitzender: Dipl.-Kfm. Matthias Filbinger
  Sitz der Gesellschaft: 70565 Stuttgart, Deutschland
  Registergericht Amtsgericht Stuttgart HRB 727446







Am 02.11.13 19:54 schrieb "Joeish W" unter <joeish80829@yahoo.com>:

>well I have to do a glue layer for it any way because the macro  gets an
>unidentified alien function  error when I try to call it from a defcfun
>in lisp...I write alot of glue code for unidentified alien function
>errors but those are for functions not macros. could you help get me
> started writing a glue layer for this macro i posted so i can call it in
>a defcfun for c....i have no idea how to type  cast the parameters or how
>to do a return on them...btw .sorry if i sent  a reply to your mailbox
>Frank =)
>
>
>
>
>    On Saturday, November 2, 2013 9:23 AM, Frank Gönninger
><frank.goenninger@consequor.de> wrote:

>
>  This is a simple code generation C macro, so this is simple to be
>transcripted into Common Lisp. There are several alternatives to do this.
>
>Either you write the code explicitly in every use occasion or you write a
>Common Lisp macro that does the same.
>
>(defmacro cv-seq-elem( seq elem_type index )
>  `(
> Š
>
>But why do you what to do this in
> Lisp? I would rather write some glue
>layer in C and have much simpler calls from Lisp to C.
>
>Good luck.
>
>Frank
>
>
>Am 02.11.13 16:43 schrieb "Joeish W" unter <joeish80829@yahoo.com>:
>
>>
>>I'm trying to wrap the GET_SEQ_ELEM  macro below can some one give me
>>clues or example how i would go about this easily
>>
>>with a cffi function like defcfun...If there is no clear way i definately
>>propose an addendum to cffi for wrapping macros
>>
>>
>>#define  CV_SEQ_ELEM( seq, elem_type, index )
>                \
>>
>>/* assert gives some guarantee that <seq> parameter is valid */  \
>>
>>(  assert(sizeof((seq)->first[0]) == sizeof(CvSeqBlock) &&      \
>>
>>    (seq)->elem_size == sizeof(elem_type)),                      \
>>
>>    (elem_type*)((seq)->first && (unsigned)index
>> <              \
>>
>>    (unsigned)((seq)->first->count) ?                            \
>>
>>    (seq)->first->data + (index) *
> sizeof(elem_type) :          \
>>
>>    cvGetSeqElem( (CvSeq*)(seq), (index) )))
>>
>>#define CV_GET_SEQ_ELEM( elem_type, seq, index ) CV_SEQ_ELEM( (seq),
>>elem_type, (index) )
>
>
>
>
>
>

>

>
>
>