Subversion Repositories Kolibri OS

Rev

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

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