Да здравствует BASIC! долгое время я не лазил на сайт rowley. а тут слазил. надо же было посмотреть что они выкатили нового в
ctl. в
ctl особо и ничего. зато они наваяли
BASIC.
некая мистика. оно всё идёт в исходниках. более 300к само ядро. (тринадцать с половиной тыщ строк кода!!!) к этому всему идёт ещё сотня(!!) файликов "драйверов" различных устройств и просто расширения языка.
например. пишут они драйвер графического дисплея с расширением набора токенов.
фигачат дополнительные токены языка:
#define NB_GRAPHICS_TOKENS \
NB_TOKEN("GFX", NB_TOKEN_GFX), \
NB_TOKEN("RED%", NB_TOKEN_RED_PERCENT), \
NB_TOKEN("GREEN%", NB_TOKEN_GREEN_PERCENT), \
NB_TOKEN("BLUE%", NB_TOKEN_BLUE_PERCENT), \
NB_TOKEN("COLOR$", NB_TOKEN_COLOR_STRING), \
NB_TOKEN("RGB", NB_TOKEN_RGB), \
NB_TOKEN("CLG", NB_TOKEN_CLG), \
NB_TOKEN("ORIGIN", NB_TOKEN_ORIGIN), \
NB_TOKEN("SCALE", NB_TOKEN_SCALE), \
NB_TOKEN("ANGLE", NB_TOKEN_ANGLE), \
NB_TOKEN("MOVE", NB_TOKEN_MOVE), \
NB_TOKEN("LINE", NB_TOKEN_LINE), \
NB_TOKEN("PLOT", NB_TOKEN_PLOT), \
NB_TOKEN("FILL", NB_TOKEN_FILL), \
NB_TOKEN("RECTANGLE", NB_TOKEN_RECTANGLE), \
NB_TOKEN("CIRCLE", NB_TOKEN_CIRCLE), \
NB_TOKEN("FONT", NB_TOKEN_FONT), \
NB_TOKEN("COLOR", NB_TOKEN_COLOR), \
NB_TOKEN("DRAW", NB_TOKEN_DRAW), \
NB_TOKEN("CONTRAST", NB_TOKEN_CONTRAST), \
NB_TOKEN("BACKLIGHT", NB_TOKEN_BACKLIGHT), \
NB_TOKEN("FORWARD", NB_TOKEN_FORWARD), \
NB_TOKEN("BACK", NB_TOKEN_BACK), \
NB_TOKEN("TURTLE", NB_TOKEN_TURTLE), \
NB_TOKEN("%BLACK", NB_TOKEN_PERCENT_BLACK), \
NB_TOKEN("%RED", NB_TOKEN_PERCENT_RED), \
NB_TOKEN("%GREEN", NB_TOKEN_PERCENT_GREEN), \
NB_TOKEN("%BLUE", NB_TOKEN_PERCENT_BLUE), \
NB_TOKEN("%YELLOW", NB_TOKEN_PERCENT_YELLOW), \
NB_TOKEN("%CYAN", NB_TOKEN_PERCENT_CYAN), \
NB_TOKEN("%MAGENTA", NB_TOKEN_PERCENT_MAGENTA), \
NB_TOKEN("%WHITE", NB_TOKEN_PERCENT_WHITE), \
NB_TOKEN("%COLOR", NB_TOKEN_PERCENT_COLOR)
дальше идёт код под всё это и в конце висит примерчик:
10 INSTALL "GRAPHICS-SHIELD"
40 ORIGIN 160, 120
50 FOR I = 1 TO 90 STEP 0.03
60 COLOR RGB(RND 1, RND 1, RND 1)
70 CALL SQUARE(I)
80 TURTLE RIGHT 5
90 NEXT I
110 END
120 DEFPROC SQUARE(N) USING I
130 FOR I = 1 TO 4
140 TURTLE FORWARD N; RIGHT 90
150 NEXT I
160 ENDPROC
или вот делают они компасс. в сишном файле вижу стандартную структуру для подключения драйвера в сам бейсик:
const NB_DRIVER_t nb_tilt_compass_driver =
{
.specific_name = "TILT-COMPASS",
.init = nb_tilt_compass_init,
.fini = nb_tilt_compass_fini,
.get = nb_tilt_compass_get
};
а ниже пример использования:
10 INSTALL "MPU-6050" AS IMU
20 INSTALL "AHRS" USING IMU AS AHRS
30 INSTALL "UART BAUD=19200" AS UART
35 AHRS.B = 1
40 FOR K = 1 TO 2000
45 IF K = 250 THEN AHRS.B = 0.1 : PRINT "Range change"
50 ' Get quaternion representation
60 Q = AHRS.Q
70 ' Convert it to an array
80 V = [RE Q] & IM Q
90 ' Now need to create strings for each real in the array
100 TXT = ""
110 FOR EACH I IN V
120 TXT = TXT + REDUCE(&, HEX EXPAND MKF I) + ","
130 NEXT I
140 UART.WRITE = TXT + CHR(13) + CHR(10)
150 'PRINT TXT; CHR(13); CHR(10);
160 NEXT K
170 END
и таких вот дописанных и недописанных файлов - за сотню. вижу примеры расширения функционала языка, файликом добавляют токены DFT и IDFT в язык.
большая часть всех расширений кажется пока что рассчитывается на поддержку ардуинных модульков. кроме бейсика ровлеевцы где-то или купили, или таки сами написали толстые либы TCP/IP и файловую систему (это они уже продают). и бейсик этот они разрабатывают как часть полной системы, с сетью и файловов системой!!!
вот заметил файлик с расширением для сети. вижу в нём стуктуру:
static const NB_DRIVER_t network_driver =
{
/* .specific_name = */ "NETWORK-DRIVER",
/* .common_name = */ "NETWORK-DRIVER",
/* .category = */ 0,
/* .interfaces = */ 0,
/* .init = */ 0,
/* .fini = */ 0,
/* .get = */ network_get,
/* .set = */ network_set,
/* .array_get = */ network_array_get,
/* .array_set = */ network_array_set,
};
и тут же расширения токенов языка:
#define NB_NETWORK_TOKENS \
NB_TOKEN("NET", NB_TOKEN_NET), \
NB_TOKEN("MAIL", NB_TOKEN_MAIL), \
NB_TOKEN("DNS", NB_TOKEN_DNS), \
NB_TOKEN("IP$", NB_TOKEN_IP_STRING), \
NB_TOKEN("SOCKET", NB_TOKEN_SOCKET), \
NB_TOKEN("HELP", NB_TOKEN_HELP), \
NB_TOKEN("WEB", NB_TOKEN_WEB), \
NB_TOKEN("EXAMPLE", NB_TOKEN_EXAMPLE), \
NB_TOKEN("NEWS", NB_TOKEN_NEWS)
вижу, что из бейсика можно будет отправить мыло!
Evgeny_CD, что скажете? )))