Перекрёстный вызов процедур Tibbo BASIC и C
Подпрограммы и функции Tibbo BASIC можно вызывать из Tibbo C, а функции Tibbo C - из Tibbo BASIC. Это называется «перекрёстным вызовом».
Массивы и структуры Tibbo BASIC несовместимы с массивами и структурами Tibbo C, поэтому перекрёстно вызывать процедуры, у которых аргументы или возвращаемое значение являются массивами или структурами, нельзя.
Типы аргументов и возвращаемых значений между языками не сверяются. В объявлении на BASIC можно задать f как аргумент типа word, а в реализации на C сделать его строкой, или наоборот. TIDE такое расхождение не обнаружит. Будьте очень внимательны!
Помочь при перекрёстных вызовах может следующая таблица - в ней сопоставлены соответствующие элементы языков Tibbo BASIC и C:
| Tibbo BASIC | Tibbo C |
| Подпрограммы и функции | |
sub name() end sub | void name(){ } |
function name() assimple_type end function | simple_type name(){ } |
| Передача аргументов: | |
| sub name(x as simple_type)... | void name(simple_type x)... |
| sub name(ByVal x as simple_type)... | void name(simple_type x)... |
| sub name(ByRef x as simple_type) | void name(simple_type *x)... |
Пример вызова двух функций C из BASIC:
declare function c_increment(x as byte) as byte
declare sub c_str_double(byref s as string) 'notice how byref becomes * on C side
sub on_sys_init
dim x as byte=5
x=c_increment(x) 'x will be 6
dim s as string="TIBBO"
c_str_double(s) 's will be "TIBBOTIBBO"
end sub
unsigned char c_increment(unsigned char x){
return ++x;
}
void c_str_double(string *s){
*s=*s+*s;
}
То же самое, но наоборот - C вызывает функцию и подпрограмму на BASIC:
function basic_increment(x as byte) as byte
basic_increment=x+1
end function
sub basic_str_double(byref s as string)
s=s+s
end sub
unsigned char basic_increment(unsigned char x);
void basic_str_double(string *s);
void on_sys_init(){
unsigned char x=5;
x=basic_increment(x);
string s="TIBBO";
basic_str_double(&s);
}