Использование библиотек
 
Это выдержка из статьи, опубликованной в журнале "QBXL, с разрешения автора SJ Zero.


Самой сильной FreeBASIC является его способность легко интегрироваться с рядом стандартных библиотек C, сохраняя при этом простоту использования QB. FB имееет встроенную графическую библиотеку, но многие кодеры используют SDL для доступа к процедурам вывода графики и звука. Прошлая версия включала sdl_net и Winsock и ряд кодеров, включая меня, боролся с заголовками, чтобы получить поддержку сети в FreeBASIC. Сегодня я постараюсь как можно проще объяснить, как приступить к работе с тремя передовыми библиотеками: SDL, FMOD и tinyPTC. После понимания основ, вы увидите что библиотеки языка СИ не труднее использовать в FreeBASIC,  чем использование библиотек в QB.



Для чего эти библиотеки?

Эти библиотеки особенно полезны, поскольку они, как правило, обеспечивают функции для игр.

SDL - библиотека для вывода графики с поддержкой ввода, и целая группа вспомогательных библиотек для сети, поддержки шрифтов TrueType, и аудио. Она может использоваться с OpenGL, но я не буду сегодня об этом говорить.

TinyPTC - это графическая библиотека, самая простая из имеющихся. Она дает указатель на буфер с графическими данными для рисования.

FMOD является звуковой библиотекой с поддержкой 3D звука. Хотя ее лицензия ограниченная, она работает приемлемо для воспроизведения звуков и замечательно отражает 3D звук.

Подключение библиотеки

Первый шаг в подключении любой из этих библиотек, это подключить заголовки к вашему проекту.
Для SDL, это так
 '$INCLUDE: "SDL\SDL.bi"
Для FMOD, так
 '$Include: 'fmod.bi'
и для tinyPTC, так
 '$INCLUDE: 'tinyptc.bi'
'2. Инициализируем библиотеку, загружаем файл'

После подключения заголовков, нужно инициализировать библиотеку и загрузить рисунок в память:
CONST SCR_WIDTH = 640
CONST SCR_HEIGHT = 480
DIM MenuScreen AS SDL_Surface ptr 'our bitmap
DIM Shared video AS SDL_Surface ptr 'our screen surface

SDL_Init ( SDL_INIT_VIDEO )
video = SDL_SetVideoMode( SCR_WIDTH, SCR_HEIGHT, 32, 0 ) 'устанавливаем видеорежим для 640x480x32
MenuScreen = SDL_LoadBMP("bitmap.bmp")
Для инициализации FMOD и загрузки звука в память:
DIM sound AS INTEGER 'it's just a handle, so it's an int!

IF FSOUND_GetVersion <= FMOD_VERSION THEN
ErrorQuit "FMOD version " + STR$(FMOD_VERSION) + " or greater required"
End If

If FSOUND_Init(44100, 32, 0) = FALSE Then
ErrorQuit "Can't initialize FMOD"
End If

sound = FSOUND_Sample_Load(FSOUND_FREE,"sound.wav", FSOUND_HW3D, 0, 0)
Наконец, не надо устанавливать никаких лишних форматов данных для загрузки tinyPTC, но инициализация все таки нужна:
const SCR_WIDTH = 320
const SCR_HEIGHT = 200
const SCR_SIZE = SCR_WIDTH*SCR_HEIGHT

if( ptc_open( "tinyPTC test", SCR_WIDTH, SCR_HEIGHT ) = 0 ) then
end -1
end if
Блитирование, Воспроизведение, или Вычерчивание

Самый важный шаг, это отобразить картинку на экран и воспроизвести звук в колонках. Эта часть может измениться в дальнейшем, в зависимости от того, что требуется. Для SDL, отправка изображения на экран выглядит так:

SUB BlitImage(x as integer,y as integer,image as sdl_surface ptr, dest as sdl_surface ptr) 
DIM Rectangle as SDL_Rect 
DIM Rectangle2 as SDL_Rect 


Rectangle.X = 0 
Rectangle.Y = 0 
rectangle.w = image->w 
rectangle.h = image->h 
Rectangle2.x = x 
Rectangle2.y = y 

SDL_BlitSurface image, @rectangle, dest, @rectangle2

END SUB

Для FMOD, воспроизведение звука так же несложно:
FUNCTION fModPlayWave( samp1 as integer ) AS INTEGER 
'where samp1 is the number returned by FSOUND_SampleLoad

DIM position(0 to 2)' as FSound_Vector
DIM vel(0 to 2)' FSound_Vector


fModPlayWave = FSOUND_PlaySoundEx(FSOUND_FREE, samp1, NULL, TRUE)

END FUNCTION
TinyPTC не такая высокоуровневая библиотека, как первые две... Все таки для работы с пикселями можно применить примерно следущее:
SUB putd(BYREF buffer(), BYVAL x AS INTEGER, BYVAL y AS INTEGER, BYVAL colr as INTEGER)
	    buffer((y * SCR_WIDTH) + x) = colr
		ptc_update @buffer(0) 'This is a pageFlip
END SUB


Завершение
Вы должны помнить о закрытии библиотек перед выходом из вашей программы. К счастью, все три библиотеки делают такое одной строчкой:

SDL: SDL_Quit ()
fmod: FSOUND_Close ()
tinyPTC: PTC_Close ()
Как вы можете видеть, нет ничего сложного в использовании библиотек в FreeBASIC!