C-API языка CLIP представляет собой набор C-функций, позволяющих
использовать C вместе с CLIP. Это может понадобиться, например, для
написания функций, критичных по скорости выполнения; для написания
функций-оболочек для существующих функций или библиотек, и т.д.
Знание C-API даст вам более полное представление о внутренней структуре
CLIP.
C-функции, которые предполагается использовать с CLIP (т.е. те которые
можно вызывать из CLIP-функций, в дальнейшем 'экспортируемые функции'),
располагаются в отдельном исходном файле C, или нескольких файлах. В этих
файлах должно быть включение заголовочного файла "clip.h", в котором
находятся прототипы функций C-API и описания структур.
Имя экспортируемой функции должно иметь префикс 'clip_', а само имя
функции должно быть написано заглавными буквами. Она должна возвращать
значение типа 'int', а получать один единственный параметр типа
'ClipMachine *' - указательна структуру, содержащую контекст текущей
Виртуальной Машины CLIP.
Экспортируемая функция должна возвращать 0 (ноль) в случае успеха,
или соответствующий код ошибки (описанные в error.ch, имеющие префикс 'EG_').
Пример:
/* my.c */
#include <stdio.h>
#include "clip.h"
int clip_MYFUNCTION(ClipMachine *cm)
{
printf("Hello from MyFunction()\n");
return 0;
}
/* end of my.c */
/* test.prg */
MyFunction()
/* end of test.prg */
Compilation:
gcc -c -I${CLIPROOT}/include my.c
clip -eM test.prg my.o
Running:
#./test
Hello from MyFunction
#
_CLIP_PARND() | Принимает числовой параметр как double. |
_CLIP_PARNI() | Принимает числовой параметр как int. |
_CLIP_PARNL() | Принимает числовой параметр как long. |
_CLIP_RETND() | Возвращает значение арифметического выражения типа double. |
_CLIP_RETNI() | Возвращает значение арифметического выражения типа int. |
_CLIP_RETNL() | Возвращает значение арифметического выражения типа long. |
_CLIP_STORND() | |
_CLIP_STORNI() | |
_CLIP_STORNL() |
double _clip_parnd(ClipMachine * cm,int num)
_clip_parnd() возващает значение указанного параметр как double.
_clip_parnd() принимает числовое значение переданное в качестве параметра из CLIP и преобразует его в double.
#include "clip.h" int clip_MYFUNCTION(ClipMachine * cm) { double num = _clip_parnd(cm,1); /* ... */ return 0; }
int _clip_parni(ClipMachine * cm,int num)
_clip_parni() возващает значение указанного параметр как int.
_clip_parni() принимает числовое значение переданное в качестве параметра из CLIP и преобразует его в int.
#include "clip.h" int clip_MYFUNCTION(ClipMachine * cm) { int num = _clip_parni(cm,1); /* ... */ return 0; }
long _clip_parnl(ClipMachine * cm,int num)
_clip_parnl() возващает значение указанного параметр как long.
_clip_parnl() принимает числовое значение переданное в качестве параметра из CLIP и преобразует его в long.
#include "clip.h" int clip_MYFUNCTION(ClipMachine * cm) { long num = _clip_parnl(cm,1); /* ... */ return 0; }
void _clip_retnd(ClipMachine * cm,double n)
_clip_retnd() не имеет возвращаемого значения.
_clip_retnd() используется для переноса числового значения в область возвращаемых значений CLIP. Позднее, когда экспортируемая функция, написанная на C, возвратит управление в вызвавшую ее CLIP программу, перенесенное арифметическое значение будет доступным точно так же, как если бы оно было непосредственно возвращено из CLIP-функции.
#include "clip.h" int clip_MYFUNCTION(ClipMachine * cm) { double n; /* ... */ _clip_retnd(cm,n); return 0; }
void _clip_retni(ClipMachine * cm,int n)
_clip_retni() не имеет возвращаемого значения.
_clip_retni() используется для переноса числового значения в область возвращаемых значений CLIP. Позднее, когда экспортируемая функция, написанная на C, возвратит управление в вызвавшую ее CLIP программу, перенесенное арифметическое значение будет доступным точно так же, как если бы оно было непосредственно возвращено из CLIP-функции.
#include "clip.h" int clip_MYFUNCTION(ClipMachine * cm) { int n; /* ... */ _clip_retni(cm,n); return 0; }
void _clip_retnl(ClipMachine * cm,long n)
_clip_retnl() не имеет возвращаемого значения.
_clip_retnl() используется для переноса числового значения в область возвращаемых значений CLIP. Позднее, когда экспортируемая функция, написанная на C, возвратит управление в вызвавшую ее CLIP программу, перенесенное арифметическое значение будет доступным точно так же, как если бы оно было непосредственно возвращено из CLIP-функции.
#include "clip.h" int clip_MYFUNCTION(ClipMachine * cm) { long n; /* ... */ _clip_retnl(cm,n); return 0; }
Пред. | Начало | След. |
SYSTEM | Уровень выше | ARRAY |