Subversion Repositories Kolibri OS

Rev

Rev 6200 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. use32
  2.         org 0x0
  3.         db 'MENUET01'
  4.         dd 1,start,i_end
  5.         dd mem,stacktop
  6.         dd 0,cur_dir_path
  7.  
  8. include '../../../../../proc32.inc'
  9. include '../../../../../macros.inc'
  10. include '../../../../../KOSfuncs.inc'
  11. include '../../../../../develop/libraries/box_lib/load_lib.mac'
  12. include '../../../../../dll.inc'
  13. include '../opengl_const.inc'
  14. include '../../../../../develop/info3ds/info_fun_float.inc'
  15.  
  16. @use_library_mem mem.Alloc,mem.Free,mem.ReAlloc,dll.Load
  17.  
  18. struct FileInfoBlock
  19.         Function dd ?
  20.         Position dd ?
  21.         Flags    dd ?
  22.         Count    dd ?
  23.         Buffer   dd ?
  24.                 db ?
  25.         FileName dd ?
  26. ends
  27.  
  28. align 4
  29. open_b rb 560
  30. image_data_toolbar dd 0
  31. IMAGE_TOOLBAR_ICON_SIZE equ 21*21*3
  32.  
  33. ;макрос для загрузки изображений
  34. ; path - может быть переменной или строковым параметром
  35. ; buf - переменная куда будет записан указатель на изображение в формате rgb
  36. ; img_w, img_h - переменные куда будут записаны размеры открываемого
  37. ;    изображения, не обязательные параметры
  38. macro load_image_file path, buf, img_w, img_h
  39. {
  40. if path eqtype '' ;проверяем задан ли строкой параметр path
  41.         local .path_str
  42.         jmp @f
  43.                 .path_str db path ;формируем локальную переменную
  44.                 db 0
  45.         @@:
  46.         ;32 - стандартный адрес по которому должен быть буфер с системным путем
  47.         copy_path .path_str,[32],file_name,0
  48. else
  49.         copy_path path,[32],file_name,0 ;формируем полный путь к файлу изображения, подразумеваем что он в одной папке с программой
  50. end if
  51.     mov [run_file_70.Function], SSF_GET_INFO
  52.     mov [run_file_70.Position], 0
  53.     mov [run_file_70.Flags], 0
  54.     mov dword[run_file_70.Count], 0
  55.     mov dword[run_file_70.Buffer], open_b
  56.     mov byte[run_file_70+20], 0
  57.     mov dword[run_file_70.FileName], file_name
  58.     mcall SF_FILE,run_file_70
  59.         or eax,eax
  60.         jnz @f
  61.  
  62.     mov ecx,dword[open_b+32] ;+32 qword: размер файла в байтах
  63.     stdcall mem.Alloc,ecx ;выделяем память для изображения
  64.         mov [buf],eax
  65.         mov [run_file_70.Function], SSF_READ_FILE
  66.         mov [run_file_70.Position], 0
  67.         mov [run_file_70.Flags], 0
  68.         mov [run_file_70.Count], ecx
  69.         mov [run_file_70.Buffer], eax
  70.         mov byte[run_file_70+20], 0
  71.         mov [run_file_70.FileName], file_name
  72.         mcall SF_FILE,run_file_70 ;загружаем файл изображения
  73.         cmp ebx,0xffffffff
  74.         je @f
  75.                 ;определяем вид изображения и пишем его параметры
  76.                 stdcall [img_decode], [buf],ebx,0
  77.                 mov ebx,eax
  78.                 ;определяем размер декодированного изображения
  79.                 mov ecx,[eax+4] ;+4 = image width
  80. if img_w eq
  81. else
  82.                 mov dword[img_w],ecx
  83. end if
  84. if img_h eq
  85.                 imul ecx,[eax+8] ;+8 = image height
  86. else
  87.                 mov eax,[eax+8] ;+8 = image height
  88.                 mov dword[img_h],eax
  89.                 imul ecx,eax
  90. end if
  91.                 imul ecx,3 ;need for r,g,b
  92.                 stdcall mem.ReAlloc,[buf],ecx ;изменяем размер для буфера
  93.                 mov [buf],eax
  94.                 stdcall [img_to_rgb2], ebx,[buf] ;преобразуем изображение к формату rgb
  95.                 stdcall [img_destroy], ebx ;удаляем временный буфер с параметрами изображения
  96.         @@:
  97. }
  98.  
  99. offs_zbuf_pbuf equ 24 ;const. from 'zbuffer.inc'
  100.  
  101. align 4
  102. start:
  103. load_libraries l_libs_start,l_libs_end
  104.         ;проверка на сколько удачно загузились библиотеки
  105.         mov     ebp,lib_0
  106.         .test_lib_open:
  107.         cmp     dword [ebp+ll_struc_size-4],0
  108.         jz      @f
  109.                 mcall SF_TERMINATE_PROCESS
  110.         @@:
  111.         add ebp,ll_struc_size
  112.         cmp ebp,l_libs_end
  113.         jl .test_lib_open
  114.  
  115.         mcall SF_STYLE_SETTINGS,SSF_GET_COLORS,sc,sizeof.system_colors
  116.         mcall SF_SET_EVENTS_MASK,0x27
  117.  
  118.         stdcall [kosglMakeCurrent], 5,30,[buf_ogl.w],[buf_ogl.h],ctx1
  119.         stdcall [glEnable], GL_DEPTH_TEST
  120.         stdcall [glEnable], GL_NORMALIZE ;делам нормали одинаковой величины во избежание артефактов
  121.         stdcall [gluNewQuadric]
  122.         mov [qObj],eax
  123.         stdcall [gluQuadricDrawStyle], eax,GLU_FILL
  124.         stdcall [gluQuadricTexture], eax,GL_TRUE
  125.  
  126.         stdcall [glClearColor], 0.0,0.0,0.0,0.0
  127.         stdcall [glShadeModel], GL_SMOOTH
  128.  
  129.         mov eax,dword[ctx1] ;eax -> TinyGLContext.GLContext
  130.         mov eax,[eax] ;eax -> ZBuffer
  131.         mov eax,[eax+offs_zbuf_pbuf] ;eax -> ZBuffer.pbuf
  132.         mov dword[buf_ogl],eax
  133.  
  134.         load_image_file 'font8x9.bmp', image_data_toolbar
  135.         stdcall [buf2d_create_f_img], buf_1,[image_data_toolbar] ;создаем буфер
  136.         stdcall mem.Free,[image_data_toolbar] ;освобождаем память
  137.         stdcall [buf2d_conv_24_to_8], buf_1,1 ;делаем буфер прозрачности 8 бит
  138.         stdcall [buf2d_convert_text_matrix], buf_1
  139.  
  140.         load_image_file 'toolb_1.png', image_data_toolbar
  141.         load_image_file 'text_3.png', texture, text_w,text_h ;открытие файла текстуры
  142.  
  143.         ;* Setup texturing *
  144.         stdcall [glTexEnvi], GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL
  145.  
  146.         ;* generate texture object IDs *
  147.         stdcall [glGenTextures], 1, TexObj
  148.         stdcall [glBindTexture], GL_TEXTURE_2D, [TexObj]
  149.         stdcall [glTexImage2D], GL_TEXTURE_2D, 0, 3, [text_w], [text_h],\
  150.                 0, GL_RGB, GL_UNSIGNED_BYTE, [texture]
  151.    
  152.         stdcall [glTexParameteri], GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST
  153.         stdcall [glTexParameteri], GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST
  154.         stdcall [glTexParameteri], GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT
  155.         stdcall [glTexParameteri], GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT
  156.         stdcall [glBindTexture], GL_TEXTURE_2D, [TexObj]
  157.         stdcall [glEnable], GL_TEXTURE_2D
  158.  
  159.         call draw_3d
  160.  
  161. align 4
  162. red_win:
  163.         call draw_window
  164.  
  165. align 4
  166. still:
  167.         mcall SF_WAIT_EVENT
  168.         cmp al,1
  169.         jz red_win
  170.         cmp al,2
  171.         jz key
  172.         cmp al,3
  173.         jz button
  174.         jmp still
  175.  
  176. align 4
  177. draw_window:
  178.         pushad
  179.         mcall SF_REDRAW,SSF_BEGIN_DRAW
  180.         mcall SF_CREATE_WINDOW,(50 shl 16)+420,(30 shl 16)+410,0x33ffffff,,caption
  181.  
  182.         mov esi,[sc.work_button]
  183.         mcall SF_DEFINE_BUTTON,(6 shl 16)+19,(6 shl 16)+19,3+0x40000000 ;масштаб +
  184.         mcall ,(36 shl 16)+19,,4+0x40000000 ;масштаб -
  185.  
  186.         mov ebx,[image_data_toolbar]
  187.         add ebx,3*IMAGE_TOOLBAR_ICON_SIZE
  188.         mcall SF_PUT_IMAGE,,(21 shl 16)+21,(5 shl 16)+5 ;масштаб +
  189.         add ebx,IMAGE_TOOLBAR_ICON_SIZE
  190.         mcall ,,,(35 shl 16)+5 ;масштаб -
  191.  
  192.         stdcall [kosglSwapBuffers]
  193.         mcall SF_REDRAW,SSF_END_DRAW
  194.         popad
  195.         ret
  196.  
  197. align 4
  198. key:
  199.         mcall SF_GET_KEY
  200.  
  201.         cmp ah,27 ;Esc
  202.         je button.exit
  203.  
  204.         cmp ah,61 ;+
  205.         jne @f
  206.                 call but_zoom_p
  207.                 jmp still
  208.         @@:
  209.         cmp ah,45 ;-
  210.         jne @f
  211.                 call but_zoom_m
  212.                 jmp still
  213.         @@:
  214.         cmp ah,176 ;Left
  215.         jne @f
  216.                 finit
  217.                 fld dword[angle_y]
  218.                 fadd dword[delt_size]
  219.                 fst dword[angle_y]
  220.                 mov word[NumberSymbolsAD],2
  221.                 fstp qword[Data_Double]
  222.                 call DoubleFloat_to_String
  223.                 mov byte[txt_angle_y.v],0
  224.                 stdcall str_cat, txt_angle_y.v,Data_String
  225.                 call draw_3d
  226.                 stdcall [kosglSwapBuffers]
  227.         @@:
  228.         cmp ah,179 ;Right
  229.         jne @f
  230.                 finit
  231.                 fld dword[angle_y]
  232.                 fsub dword[delt_size]
  233.                 fst dword[angle_y]
  234.                 mov word[NumberSymbolsAD],2
  235.                 fstp qword[Data_Double]
  236.                 call DoubleFloat_to_String
  237.                 mov byte[txt_angle_y.v],0
  238.                 stdcall str_cat, txt_angle_y.v,Data_String
  239.                 call draw_3d
  240.                 stdcall [kosglSwapBuffers]
  241.         @@:
  242.         cmp ah,178 ;Up
  243.         jne @f
  244.                 finit
  245.                 fld dword[angle_x]
  246.                 fadd dword[delt_size]
  247.                 fst dword[angle_x]
  248.                 mov word[NumberSymbolsAD],2
  249.                 fstp qword[Data_Double]
  250.                 call DoubleFloat_to_String
  251.                 mov byte[txt_angle_x.v],0
  252.                 stdcall str_cat, txt_angle_x.v,Data_String
  253.                 call draw_3d
  254.                 stdcall [kosglSwapBuffers]
  255.         @@:
  256.         cmp ah,177 ;Down
  257.         jne @f
  258.                 finit
  259.                 fld dword[angle_x]
  260.                 fsub dword[delt_size]
  261.                 fst dword[angle_x]
  262.                 mov word[NumberSymbolsAD],2
  263.                 fstp qword[Data_Double]
  264.                 call DoubleFloat_to_String
  265.                 mov byte[txt_angle_x.v],0
  266.                 stdcall str_cat, txt_angle_x.v,Data_String
  267.                 call draw_3d
  268.                 stdcall [kosglSwapBuffers]
  269.         @@:
  270.  
  271.         jmp still
  272.  
  273. align 4
  274. button:
  275.         mcall SF_GET_BUTTON
  276.         cmp ah,3
  277.         jne @f
  278.                 call but_zoom_p
  279.                 jmp still
  280.         @@:
  281.         cmp ah,4
  282.         jne @f
  283.                 call but_zoom_m
  284.                 jmp still
  285.         @@:
  286.         cmp ah,1
  287.         jne still
  288. .exit:
  289.         stdcall [gluDeleteQuadric], [qObj]
  290.         stdcall mem.Free,[image_data_toolbar]
  291.         mcall SF_TERMINATE_PROCESS
  292.  
  293. align 4
  294. but_zoom_p:
  295.         finit
  296.         fld dword[scale]
  297.         fadd dword[delt_sc]
  298.         fst dword[scale]
  299.         mov word[NumberSymbolsAD],3
  300.         fstp qword[Data_Double]
  301.         call DoubleFloat_to_String
  302.         mov byte[txt_scale.v],0
  303.         stdcall str_cat, txt_scale.v,Data_String
  304.         call draw_3d
  305.         stdcall [kosglSwapBuffers]
  306.         ret
  307.  
  308. align 4
  309. but_zoom_m:
  310.         finit
  311.         fld dword[scale]
  312.         fsub dword[delt_sc]
  313.         fst dword[scale]
  314.         mov word[NumberSymbolsAD],3
  315.         fstp qword[Data_Double]
  316.         call DoubleFloat_to_String
  317.         mov byte[txt_scale.v],0
  318.         stdcall str_cat, txt_scale.v,Data_String
  319.         call draw_3d
  320.         stdcall [kosglSwapBuffers]
  321.         ret
  322.  
  323. align 4
  324. caption db 'Test textures, [Esc] - exit, [<-],[->],[Up],[Down] - rotate',0
  325. align 4
  326. ctx1 db 28 dup (0) ;TinyGLContext or KOSGLContext
  327. ;sizeof.TinyGLContext = 28
  328.  
  329. align 4
  330. draw_3d:
  331. stdcall [glClear], GL_COLOR_BUFFER_BIT + GL_DEPTH_BUFFER_BIT ;очистим буфер цвета и глубины
  332.  
  333. stdcall [glPushMatrix]
  334.         stdcall [glScalef], [scale], [scale], [scale]
  335.         stdcall [glScalef], 1.0, 1.0, 0.1 ;прижимаем сферу, что-бы сразу не вылазила при увеличении
  336.         stdcall [glRotatef], [angle_y],0.0,1.0,0.0
  337.         stdcall [glRotatef], [angle_x],1.0,0.0,0.0
  338.  
  339.         ; рисование панорамы
  340.         stdcall [gluSphere], [qObj], 1.0, 64,64
  341. stdcall [glPopMatrix]
  342.  
  343.         stdcall [buf2d_draw_text], buf_ogl, buf_1,txt_scale,5,5,0xffff00
  344.         stdcall [buf2d_draw_text], buf_ogl, buf_1,txt_angle_y,5,15,0xffff00
  345.         stdcall [buf2d_draw_text], buf_ogl, buf_1,txt_angle_x,5,25,0xffff00
  346.         ret
  347.  
  348. qObj dd 0
  349. TexObj dd 0 ;массив указателей на текстуры (в данном случае 1 шт.)
  350. texture dd 0 ;указатель на память с текстурой
  351. text_w dd 0
  352. text_h dd 0
  353.  
  354. scale dd 1.5
  355. delt_sc dd 0.05
  356. angle_z dd 0.0
  357. angle_x dd 90.0
  358. angle_y dd 0.0
  359. delt_size dd 3.0
  360.  
  361. ;--------------------------------------------------
  362. align 4
  363. import_lib_tinygl:
  364.  
  365. macro E_LIB n
  366. {
  367.         n dd sz_#n
  368. }
  369. include '../export.inc'
  370.         dd 0,0
  371. macro E_LIB n
  372. {
  373.         sz_#n db `n,0
  374. }
  375. include '../export.inc'
  376.  
  377. align 4
  378. import_buf2d:
  379.         dd sz_init0
  380.         buf2d_create dd sz_buf2d_create
  381.         buf2d_create_f_img dd sz_buf2d_create_f_img
  382.         buf2d_clear dd sz_buf2d_clear
  383.         buf2d_draw dd sz_buf2d_draw
  384.         buf2d_delete dd sz_buf2d_delete
  385.         buf2d_resize dd sz_buf2d_resize
  386.         buf2d_line dd sz_buf2d_line
  387.         buf2d_rect_by_size dd sz_buf2d_rect_by_size
  388.         buf2d_filled_rect_by_size dd sz_buf2d_filled_rect_by_size
  389.         buf2d_circle dd sz_buf2d_circle
  390.         buf2d_img_hdiv2 dd sz_buf2d_img_hdiv2
  391.         buf2d_img_wdiv2 dd sz_buf2d_img_wdiv2
  392.         buf2d_conv_24_to_8 dd sz_buf2d_conv_24_to_8
  393.         buf2d_conv_24_to_32 dd sz_buf2d_conv_24_to_32
  394.         buf2d_bit_blt dd sz_buf2d_bit_blt
  395.         buf2d_bit_blt_transp dd sz_buf2d_bit_blt_transp
  396.         buf2d_bit_blt_alpha dd sz_buf2d_bit_blt_alpha
  397.         buf2d_curve_bezier dd sz_buf2d_curve_bezier
  398.         buf2d_convert_text_matrix dd sz_buf2d_convert_text_matrix
  399.         buf2d_draw_text dd sz_buf2d_draw_text
  400.         buf2d_crop_color dd sz_buf2d_crop_color
  401.         buf2d_offset_h dd sz_buf2d_offset_h
  402.         buf2d_flood_fill dd sz_buf2d_flood_fill
  403.         buf2d_set_pixel dd sz_buf2d_set_pixel
  404.         dd 0,0
  405.         sz_init0 db 'lib_init',0
  406.         sz_buf2d_create db 'buf2d_create',0
  407.         sz_buf2d_create_f_img db 'buf2d_create_f_img',0
  408.         sz_buf2d_clear db 'buf2d_clear',0
  409.         sz_buf2d_draw db 'buf2d_draw',0
  410.         sz_buf2d_delete db 'buf2d_delete',0
  411.         sz_buf2d_resize db 'buf2d_resize',0
  412.         sz_buf2d_line db 'buf2d_line',0
  413.         sz_buf2d_rect_by_size db 'buf2d_rect_by_size',0
  414.         sz_buf2d_filled_rect_by_size db 'buf2d_filled_rect_by_size',0
  415.         sz_buf2d_circle db 'buf2d_circle',0
  416.         sz_buf2d_img_hdiv2 db 'buf2d_img_hdiv2',0
  417.         sz_buf2d_img_wdiv2 db 'buf2d_img_wdiv2',0
  418.         sz_buf2d_conv_24_to_8 db 'buf2d_conv_24_to_8',0
  419.         sz_buf2d_conv_24_to_32 db 'buf2d_conv_24_to_32',0
  420.         sz_buf2d_bit_blt db 'buf2d_bit_blt',0
  421.         sz_buf2d_bit_blt_transp db 'buf2d_bit_blt_transp',0
  422.         sz_buf2d_bit_blt_alpha db 'buf2d_bit_blt_alpha',0
  423.         sz_buf2d_curve_bezier db 'buf2d_curve_bezier',0
  424.         sz_buf2d_convert_text_matrix db 'buf2d_convert_text_matrix',0
  425.         sz_buf2d_draw_text db 'buf2d_draw_text',0
  426.         sz_buf2d_crop_color db 'buf2d_crop_color',0
  427.         sz_buf2d_offset_h db 'buf2d_offset_h',0
  428.         sz_buf2d_flood_fill db 'buf2d_flood_fill',0
  429.         sz_buf2d_set_pixel db 'buf2d_set_pixel',0
  430.  
  431. align 4
  432. import_libimg:
  433.         dd alib_init1
  434.         img_is_img  dd aimg_is_img
  435.         img_info    dd aimg_info
  436.         img_from_file dd aimg_from_file
  437.         img_to_file dd aimg_to_file
  438.         img_from_rgb dd aimg_from_rgb
  439.         img_to_rgb  dd aimg_to_rgb
  440.         img_to_rgb2 dd aimg_to_rgb2
  441.         img_decode  dd aimg_decode
  442.         img_encode  dd aimg_encode
  443.         img_create  dd aimg_create
  444.         img_destroy dd aimg_destroy
  445.         img_destroy_layer dd aimg_destroy_layer
  446.         img_count   dd aimg_count
  447.         img_lock_bits dd aimg_lock_bits
  448.         img_unlock_bits dd aimg_unlock_bits
  449.         img_flip    dd aimg_flip
  450.         img_flip_layer dd aimg_flip_layer
  451.         img_rotate  dd aimg_rotate
  452.         img_rotate_layer dd aimg_rotate_layer
  453.         img_draw    dd aimg_draw
  454.  
  455.         dd 0,0
  456.         alib_init1   db 'lib_init',0
  457.         aimg_is_img  db 'img_is_img',0 ;определяет по данным, может ли библиотека сделать из них изображение
  458.         aimg_info    db 'img_info',0
  459.         aimg_from_file db 'img_from_file',0
  460.         aimg_to_file db 'img_to_file',0
  461.         aimg_from_rgb db 'img_from_rgb',0
  462.         aimg_to_rgb  db 'img_to_rgb',0 ;преобразование изображения в данные RGB
  463.         aimg_to_rgb2 db 'img_to_rgb2',0
  464.         aimg_decode  db 'img_decode',0 ;автоматически определяет формат графических данных
  465.         aimg_encode  db 'img_encode',0
  466.         aimg_create  db 'img_create',0
  467.         aimg_destroy db 'img_destroy',0
  468.         aimg_destroy_layer db 'img_destroy_layer',0
  469.         aimg_count   db 'img_count',0
  470.         aimg_lock_bits db 'img_lock_bits',0
  471.         aimg_unlock_bits db 'img_unlock_bits',0
  472.         aimg_flip    db 'img_flip',0
  473.         aimg_flip_layer db 'img_flip_layer',0
  474.         aimg_rotate  db 'img_rotate',0
  475.         aimg_rotate_layer db 'img_rotate_layer',0
  476.         aimg_draw    db 'img_draw',0
  477.  
  478. ;--------------------------------------------------
  479. system_dir_0 db '/sys/lib/'
  480. lib_name_0 db 'tinygl.obj',0
  481. system_dir_1 db '/sys/lib/'
  482. lib_name_1 db 'buf2d.obj',0
  483. system_dir_2 db '/sys/lib/'
  484. lib_name_2 db 'libimg.obj',0
  485. err_msg_found_lib_0 db 'Sorry I cannot load library ',39,'tinygl.obj',39,0
  486. err_msg_found_lib_1 db 'Sorry I cannot load library ',39,'buf2d.obj',39,0
  487. err_msg_found_lib_2 db 'Sorry I cannot load library ',39,'libimg.obj',39,0
  488. head_f_i:
  489. head_f_l db 'System error',0
  490. err_msg_import_0 db 'Error on load import library ',39,'tinygl.obj',39,0
  491. err_msg_import_1 db 'Error on load import library ',39,'buf2d.obj',39,0
  492. err_msg_import_2 db 'Error on load import library ',39,'libimg.obj',39,0
  493. ;--------------------------------------------------
  494.  
  495. txt_scale:
  496. db 'Scale: '
  497. .v:
  498. db 0
  499. rb 10
  500.  
  501. txt_angle_z:
  502. db 'Rotate z: '
  503. .v:
  504. db 0
  505. rb 10
  506.  
  507. txt_angle_x:
  508. db 'Rotate x: '
  509. .v:
  510. db 0
  511. rb 10
  512.  
  513. txt_angle_y:
  514. db 'Rotate y: '
  515. .v:
  516. db 0
  517. rb 10
  518.  
  519. align 4
  520. buf_ogl:
  521.         dd 0 ;указатель на буфер изображения
  522.         dw 10,10 ;+4 left,top
  523. .w: dd 400
  524. .h: dd 350
  525.         dd 0,24 ;+16 color,bit in pixel
  526.  
  527. align 4
  528. buf_1:
  529.         dd 0 ;указатель на буфер изображения
  530.         dw 25,25 ;+4 left,top
  531.         dd 128,144 ;+8 w,h
  532.         dd 0,24 ;+16 color,bit in pixel
  533.  
  534. align 4
  535. l_libs_start:
  536.         lib_0 l_libs lib_name_0, cur_dir_path, library_path,  system_dir_0,\
  537.                 err_msg_found_lib_0, head_f_l, import_lib_tinygl,err_msg_import_0,head_f_i
  538.         lib_1 l_libs lib_name_1, cur_dir_path, library_path,  system_dir_1,\
  539.                 err_msg_found_lib_1, head_f_l, import_buf2d,  err_msg_import_1,head_f_i
  540.         lib_2 l_libs lib_name_2, cur_dir_path, library_path, system_dir_2,\
  541.                 err_msg_found_lib_2, head_f_l, import_libimg, err_msg_import_2, head_f_i
  542. l_libs_end:
  543.  
  544. align 4
  545. i_end:
  546.         run_file_70 FileInfoBlock
  547.         sc system_colors
  548. align 16
  549.         rb 4096
  550. stacktop:
  551.         cur_dir_path rb 4096
  552.         library_path rb 4096
  553.         file_name rb 4096
  554. mem:
  555.