Subversion Repositories Kolibri OS

Rev

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

  1. ;-----------------------------------------------------------------------------
  2. ; project name:      TINYPAD
  3. ; compiler:          flat assembler 1.64
  4. ; memory to compile: 3.0/11.5 MBytes (without/with size optimizations)
  5. ; version:           4.0
  6. ; last update:       2006-04-13 (Apr 13, 2006)
  7. ;-----------------------------------------------------------------------------
  8. ; originally by:     Ville Michael Turjanmaa >> villemt@aton.co.jyu.fi
  9. ; maintained by:     Ivan Poddubny           >> ivan-yar@bk.ru
  10. ;                    Mike Semenyako          >> mike.dld@gmail.com
  11. ;-----------------------------------------------------------------------------
  12. ; TODO:
  13. ;   optimize drawing (reduce flickering);
  14. ;   optimize memory usage (allocate only needed amount, not static 3 Mbytes);
  15. ;   add block selection ability, undo action;
  16. ;   working with multiple files (add tabs);
  17. ;   other bugfixes and speed/size optimizations
  18. ;
  19. ; HISTORY:
  20. ; 4.0.2 (mike.dld)
  21. ;   bug-fixes:
  22. ;     - program terminates if started with parameters (fine for DOCPAK)
  23. ; 4.0.1 (mike.dld)
  24. ;   bug-fixes:
  25. ;     - unable to run program after exiting from main menu (Alt+X)
  26. ;   new features:
  27. ;     - integration with DOCPAK
  28. ; 4.0 (mike.dld)
  29. ;   bug-fixes:
  30. ;     - main menu popups' "on show" was called only for first shown popup
  31. ;     - clear selection on left/right arrow keys
  32. ;   new features:
  33. ;     - "replace" dialog (w/o "skip", "replace all")
  34. ;     - line numbers display
  35. ;     - options (except "appearance" and "smart tabulation")
  36. ;     - options saving (colors, window position, "Options" popup triggers)
  37. ; 4.0 beta 2 (mike.dld)
  38. ;   bug-fixes:
  39. ;     - unable to start if /rd/1/example.asm is missing (from Halyavin)
  40. ;     - clicking on menu items draws main window in popup (from Rohan)
  41. ;     - passed parameters aren't taken into account (from Mario79)
  42. ;     - background isn't erased if text lines < screen lines after
  43. ;       selection deletion (from Rohan)
  44. ; 4.0 beta 1 (mike.dld)
  45. ;   menu bar and popup menu;
  46. ;     removed buttons from the top and input fields from the bottom since
  47. ;     now they're accesible through main/popup menu;
  48. ;   improved keyboard handling (using 66th function);
  49. ;     support for almost all FASMW keyboard shourtcuts;
  50. ;   added text selection ability, standard selection operations
  51. ;     (copy,cut,paste);
  52. ;   new integrated dialogs (open, save, find)
  53. ;   fix to collapse SPACEs into TABs only for *.asm and *.inc files
  54. ; 3.78a (mike.dld)
  55. ;   fixed termination while typing in x positions higher than (line_length+10);
  56. ;   improved drawing on small heights
  57. ;     don't draw window while its height = 0 (Kolibri "minimize" support)
  58. ; 3.78 (mike.dld)
  59. ;   now lines may be of ANY length;
  60. ;     optimized memory usage (less memory for internal file representation)
  61. ;       after loading file, it's internal size equals to its real size
  62. ;       plus 14 bytes for each line (4 bytes for line length
  63. ;         and 10 spaced to the end - to reduce data relocations count);
  64. ;     completely rewritten keyboard handling;
  65. ;     added horizontal scrollbar;
  66. ;   all line feed formats are supported: WIN(CRLF),*NIX(LF),MAC(CR);
  67. ;   etc.
  68. ; 3.77 (mike.dld)
  69. ;   changed save_string to collapse SPACEs into TABs;
  70. ;   rewrote drawfile from scratch (speed++)
  71. ;     through some drawing improvements still needed
  72. ;     (some checkups to reduce flickering);
  73. ;   writepos (size--);
  74. ;   fixed drawing window while height < 100px, and for non-asm files;
  75. ;   several small fixes; speed/size optimizations
  76. ; 3.76 (mike.dld)
  77. ;   changed loadfile/loadhdfile to expand TABs into SPACEs;
  78. ;   changed TAB,ENTER,DELETE,BSPACE keys behaviour (rewritten from scratch);
  79. ;   vertical scrollbar;
  80. ;   extra window resizing capabilities (added a couple of constants);
  81. ;   completely new text cursor management & moving text cursor with mouse;
  82. ;   improved search function, moving cursor to beginning of text found;
  83. ;   adjustable max line width (change LINE_WIDTH & recompile) // (obsolet)
  84. ; 3.75a
  85. ;   fixed converting char to upper case in read_string
  86. ; 3.75
  87. ;   rewrote save_file from scratch; bugfix in loadfile;
  88. ; 3.74
  89. ;   optimisation
  90. ; 3.73
  91. ;   completly new load_file function
  92. ; 3.72
  93. ;   speed++
  94. ; 3.71
  95. ;   error beep
  96. ; 3.6,3.7:
  97. ;   many bugs fixed
  98. ;   simple toolbar
  99. ;   compile, run applications from TINYPAD, all fasm output is in debug board
  100. ;   TAB button
  101. ;   auto-indent
  102. ;   Ctrl+L - insert comment string
  103. ;-----------------------------------------------------------------------------
  104. ; Memory 0x300000:
  105. ;   stack for popup  0x00dff0 -
  106. ;   stack for help   0x00eff0 -
  107. ;   stack            0x00fff0 -
  108. ;   load position    0x010000 +
  109. ;   edit area        0x080000 +
  110. ;   copy/paste area  0x2f0000 +
  111. ;-----------------------------------------------------------------------------
  112.  
  113. include 'macros.inc' ; useful stuff
  114. include 'tinypad.inc'
  115. purge mov,add,sub            ;  SPEED
  116.  
  117. header '01',1,@CODE,TINYPAD_END,AREA_ENDMEM,MAIN_STACK,@PARAMS,self_path
  118.  
  119. ;include 'debug.inc'
  120.  
  121. ASEPC     = '-'           ; separator character (char)
  122. ATOPH     = POP_IHEIGHT+2 ; menu bar height (pixels)
  123. ;OLEFT    = 50+1          ; left offset (pixels)        !!! don't change !!!
  124. SCRLW     = 16            ; scrollbar widht/height (pixels)
  125. ATABW     = 8             ; tab width (chars)
  126. LINEH     = 10            ; line height (pixels)
  127. PATHL     = 255           ; maximum path length (chars) !!! don't change !!!
  128. AMINS     = 8             ; minimal scroll thumb size (pixels)
  129.  
  130. STATH     = 14            ; status bar height
  131.  
  132. MEV_LDOWN = 1
  133. MEV_LUP   = 2
  134. MEV_RDOWN = 3
  135. MEV_RUP   = 4
  136. MEV_MOVE  = 5
  137.  
  138. ;-----------------------------------------------------------------------------
  139. section @OPTIONS ;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  140. ;-----------------------------------------------------------------------------
  141.  
  142. label color_tbl dword
  143.   RGB(  0,  0,  0) ; RGB(  0,  0,  0) ; RGB(  0,  0,  0) ; text
  144.   RGB(  0,144,  0) ; RGB(  0,144,  0) ; RGB(  0,160,  0) ; numbers
  145.   RGB(176,  0,  0) ; RGB(160,  0,  0) ; RGB(  0,128,255) ; strings
  146.   RGB(128,128,128) ; RGB(144,144,144) ; RGB(160,160,160) ; comments
  147.   RGB( 48, 48,240) ; RGB( 48, 48,240) ; RGB(255,  0,  0) ; symbols
  148.   RGB(255,255,255) ; RGB(224,224,224) ; RGB(255,255,255) ; background
  149.   RGB(255,255,255) ; RGB(255,255,255) ; RGB(255,255,255) ; selection text
  150.   RGB( 10, 36,106) ; RGB(  0,  0,128) ; RGB(  0, 64,128) ; selection background
  151.  
  152. ins_mode db 1
  153.  
  154. options  db OPTS_AUTOINDENT+OPTS_OPTIMSAVE+OPTS_SMARTTAB
  155.  
  156. mainwnd_pos:
  157.   .x dd 100
  158.   .y dd 75
  159.   .w dd 6*80+6+SCRLW+5
  160.   .h dd 402
  161.  
  162. ;-----------------------------------------------------------------------------
  163. section @CODE ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  164. ;-----------------------------------------------------------------------------
  165.  
  166. ;       fninit
  167.  
  168.         cld
  169.         mov     edi,@UDATA
  170.         mov     ecx,@PARAMS-@UDATA
  171.         mov     al,0
  172.         rep     stosb
  173.  
  174.         mov     [left_ofs],40+1
  175.         mov     [f_info+4],0
  176.         mov     [f_info+12],AREA_TEMP
  177.         mov     [f_info+16],AREA_EDIT-AREA_TEMP
  178.  
  179. ;        mov     esi,s_example
  180. ;        mov     edi,s_fname
  181. ;        mov     ecx,s_example.size
  182. ;        mov     [s_fname.size],ecx
  183. ;        rep     movsb
  184.         mov     esi,s_example
  185.         mov     edi,tb_opensave.text
  186.         mov     ecx,s_example.size
  187.         mov     [tb_opensave.length],cl
  188.         rep     movsb
  189.  
  190.         mov     esi,s_still
  191.         mov     edi,s_search
  192.         mov     ecx,s_still.size
  193.         mov     [s_search.size],ecx
  194.         rep     movsb
  195.  
  196.         cmp     byte[@PARAMS],0
  197.         jz      no_params
  198.  
  199. ;// Willow's code to support DOCPAK [
  200.  
  201.         cmp     byte[@PARAMS],'*'
  202.         jne     .noipc
  203. ; convert size from decimal representation to dword
  204.         mov     esi, @PARAMS+1
  205.         xor     edx, edx
  206.         xor     eax, eax
  207. @@:
  208.         lodsb
  209.         test    al, al
  210.         jz      @f
  211.         lea     edx, [edx*4+edx]
  212.         lea     edx, [edx*2+eax]
  213.         jmp     @b
  214. @@:
  215.         add     edx,20
  216.         mcall   60,1,AREA_TEMP-16 ; 0x10000-16
  217.         mov     dword[AREA_TEMP-16+4],8 ; [0x10000-16+4],8
  218.         mcall   40,1000000b
  219.         mcall   23,200
  220.         cmp     eax,7
  221.         jne     key.alt_x.close  ; ¤Єю эр mcall -1 ьхЄър
  222.         mov     esi,AREA_TEMP-16 ; 0x10000-16
  223.         mov     byte[esi],1
  224.         mov     eax,[esi+12]
  225.         inc     eax
  226.         call    load_file.file_found
  227.         jmp     @f
  228. ;       call    file_found  ; чруЁєчър Їрщыр
  229. ;       jmp     do_load_file.restorecursor ; юЄюсЁрцхэшх
  230.   .noipc:
  231.  
  232. ;// Willow's code to support DOCPAK ]
  233.  
  234.     ; parameters are at @PARAMS
  235.         mov     esi,@PARAMS
  236.         mov     edi,tb_opensave.text
  237.         mov     ecx,PATHL
  238.         rep     movsb
  239.         mov     edi,tb_opensave.text
  240.         mov     ecx,PATHL
  241.         xor     al,al
  242.         repne   scasb
  243.         jne     key.alt_x.close
  244.         lea     eax,[edi-tb_opensave.text-1]
  245.         mov     [tb_opensave.length],al
  246.  
  247.   no_params:
  248.         call    btn.load_file;do_load_file
  249.         jnc     @f
  250.         call    new_file
  251.  
  252.     @@:
  253.         call    drawwindow
  254.         mcall   66,1,1
  255.         mcall   40,00100111b
  256.  
  257. ;-----------------------------------------------------------------------------
  258.  
  259. still:
  260.        call    writepos ; write current position & number of strings
  261.  
  262.   .skip_write:
  263.         mcall   10;23,50; wait here until event
  264.         cmp     [main_closed],0
  265.         jne     key.alt_x
  266.         dec     eax     ; redraw ?
  267.         jz      red
  268.         dec     eax     ; key ?
  269.         jz      key
  270.         dec     eax     ; button ?
  271.         jz      button
  272.         sub     eax,3   ; mouse ?
  273.         jz      mouse
  274.  
  275.         jmp     still.skip_write
  276.  
  277. ;-----------------------------------------------------------------------------
  278. func red ;///// window redraw ////////////////////////////////////////////////
  279. ;-----------------------------------------------------------------------------
  280.         call    drawwindow
  281.         call    check_inv_all.skip_check
  282.         jmp     still
  283. endf
  284.  
  285. ;-----------------------------------------------------------------------------
  286. func start_fasm ;/////////////////////////////////////////////////////////////
  287. ;-----------------------------------------------------------------------------
  288. ; BL = run after compile
  289. ;-----------------------------------------------------------------------------
  290.         cmp     [asm_mode],0
  291.         jne     @f
  292.         ret
  293.     @@: mov     esi,f_info.path ; s_fname
  294.         mov     edi,fasm_parameters
  295.  
  296.         cmp     byte[esi],'/'
  297.         je      .yes_systree
  298.  
  299.         mov     ecx,[f_info.length] ; [s_fname.size]
  300.         rep     movsb
  301.  
  302.         mov     al,','
  303.         stosb
  304.  
  305.         mov     ecx,[f_info.length] ; [s_fname.size]
  306.         add     ecx,-4
  307.         mov     esi,f_info.path ; s_fname
  308.         rep     movsb
  309.  
  310.         mov     al,','
  311.         stosb
  312.  
  313.         mov     dword[edi],'/RD/'
  314.         mov     word[edi+4],'1/'
  315.         add     edi,6
  316.  
  317.         mov     al,0
  318.         stosb
  319.  
  320.         jmp     .run
  321.  
  322.  .yes_systree:
  323.         mov     eax,[f_info.length]
  324.         add     esi,eax ; [s_fname.size]
  325.         dec     esi
  326.  
  327.         xor     ecx,ecx
  328.         mov     al,'/'
  329.     @@: cmp     [esi],al
  330.         je      @f
  331.         dec     esi
  332.         inc     ecx
  333.         jmp     @b
  334.     @@: inc     esi
  335.  
  336.         push    esi esi ecx
  337.  
  338.         rep     movsb
  339.  
  340.         mov     al,','
  341.         stosb
  342.  
  343.         pop     ecx esi
  344.  
  345.         add     ecx,-4
  346.         rep     movsb
  347.  
  348.         mov     al,','
  349.         stosb
  350.  
  351.         pop     ecx
  352.         sub     ecx,f_info.path ; s_fname
  353.         mov     esi,f_info.path ; s_fname
  354.  
  355.         rep     movsb
  356.  
  357.         mov     al,0
  358.         stosb
  359.  
  360.  .run:
  361.         cmp     bl,0 ; run outfile ?
  362.         je      @f
  363.         mov     dword[edi-1],',run'
  364.         mov     byte[edi+3],0
  365.     @@: mcall   19,fasm_filename,fasm_parameters
  366.         ret
  367. endf
  368.  
  369. ;-----------------------------------------------------------------------------
  370. func open_debug_board ;///////////////////////////////////////////////////////
  371. ;-----------------------------------------------------------------------------
  372.         mcall   19,debug_filename,0
  373.         ret
  374. endf
  375.  
  376. ;-----------------------------------------------------------------------------
  377. func open_sysfuncs_txt ;//////////////////////////////////////////////////////
  378. ;-----------------------------------------------------------------------------
  379.         mcall   19,docpak_filename,sysfuncs_param
  380.         cmp     eax,0xfffffff0
  381.         jb      @f
  382.         mcall   19,tinypad_filename,sysfuncs_filename
  383.     @@: ret
  384. endf
  385.  
  386. ;-----------------------------------------------------------------------------
  387. func layout  ;///// change keyboard layout ///////////////////////////////////
  388. ;-----------------------------------------------------------------------------
  389.         mcall   19,setup,param_setup
  390.         mcall   5,eax
  391. ;       call    activate_me
  392. ;       ret
  393. ;endf
  394.  
  395. ;func activate_me
  396.         mcall   9,p_info,-1
  397.         inc     eax
  398.         inc     eax
  399.         mov     ecx,eax
  400.         mov     edi,[p_info.PID]
  401.         mov     ebx,p_info
  402.     @@: dec     ecx
  403.         jz      @f    ; counter=0 => not found? => return
  404.         mcall   9
  405.         cmp     edi,[p_info.PID]
  406.         jne     @b
  407.         mcall   18,3
  408.         mcall   5,eax
  409.     @@: ret
  410. endf
  411.  
  412. func set_opt
  413.         test    [options],al
  414.         je      @f
  415.         not     al
  416.         and     [options],al
  417.         ret
  418.     @@: or      [options],al
  419.         ret
  420. endf
  421.  
  422. func set_line_numbers
  423.         mov     al,OPTS_LINENUMS
  424.         call    set_opt
  425.         ret
  426. endf
  427.  
  428. func set_optimal_fill
  429.         mov     al,OPTS_OPTIMSAVE
  430.         call    set_opt
  431.         ret
  432. endf
  433.  
  434. func set_auto_indents
  435.         mov     al,OPTS_AUTOINDENT
  436.         call    set_opt
  437.         ret
  438. endf
  439.  
  440. func set_auto_braces
  441.         mov     al,OPTS_AUTOBRACES
  442.         call    set_opt
  443.         ret
  444. endf
  445.  
  446. func set_secure_sel
  447.         mov     al,OPTS_SECURESEL
  448.         call    set_opt
  449.         ret
  450. endf
  451.  
  452. ;-----------------------------------------------------------------------------
  453.  
  454. include 'tp-draw.asm'
  455. include 'tp-key.asm'
  456. ;include 'tp-key2.asm'
  457. include 'tp-butto.asm'
  458. include 'tp-mouse.asm'
  459. include 'tp-files.asm'
  460. include 'tp-commo.asm'
  461. include 'tp-dialo.asm'
  462. ;include 'tp-find.asm'
  463. include 'tp-popup.asm'
  464. include 'tp-tbox.asm'
  465.  
  466. ;-----------------------------------------------------------------------------
  467. section @DATA ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  468. ;-----------------------------------------------------------------------------
  469.  
  470. ;addr       dd s_fname  ; address of input string
  471. ;temp       dd 0xABCD   ; used in read_string
  472. vscrl_capt dd -1
  473. hscrl_capt dd -1
  474. body_capt  dd -1
  475.  
  476. key0 db \
  477.   0x00,0x00,0x02,0x03,0x04,0x05,0x06,0x07,\
  478.   0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x00,0x00,\
  479.   0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,\
  480.   0x18,0x19,0x1A,0x1B,0x00,0x00,0x1E,0x1F,\
  481.   0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,\
  482.   0x28,0x29,0x00,0x2B,0x2C,0x2D,0x2E,0x2F,\
  483.   0x30,0x31,0x32,0x33,0x34,0x35,0x00,0x00,\
  484.   0x00,0x39,0x00,0x00,0x00,0x00,0x00,0x00
  485.   times 12*16 db 0x00
  486.  
  487. accel_table dd                      \
  488.   0x0000000E,key.bkspace           ,\ ; BackSpace
  489.   0x0000000F,key.tab               ,\ ; Tab
  490.   0x0000001C,key.return            ,\ ; Return
  491.   0x0000003D,key.f3                ,\ ; F3
  492.   0x00000043,key.f9                ,\ ; F9
  493.   0x00000147,key.home              ,\ ; Home
  494.   0x00000148,key.up                ,\ ; Up
  495.   0x00000149,key.pgup              ,\ ; PageUp
  496.   0x0000014B,key.left              ,\ ; Left
  497.   0x0000014D,key.right             ,\ ; Right
  498.   0x0000014F,key.end               ,\ ; End
  499.   0x00000150,key.down              ,\ ; Down
  500.   0x00000151,key.pgdn              ,\ ; PageDown
  501.   0x00000152,key.ins               ,\ ; Insert
  502.   0x00000153,key.del               ,\ ; Delete
  503.   0x00010147,key.shift_home        ,\ ; Shift+Home
  504.   0x00010148,key.shift_up          ,\ ; Shift+Up
  505.   0x00010149,key.shift_pgup        ,\ ; Shift+PageUp
  506.   0x0001014B,key.shift_left        ,\ ; Shift+Left
  507.   0x0001014D,key.shift_right       ,\ ; Shift+Right
  508.   0x0001014F,key.shift_end         ,\ ; Shift+End
  509.   0x00010150,key.shift_down        ,\ ; Shift+Down
  510.   0x00010151,key.shift_pgdn        ,\ ; Shift+PageDown
  511.   0x00010153,key.del               ,\ ; Shift+Delete
  512.   0x00020015,key.ctrl_y            ,\ ; Ctrl+Y
  513.   0x00020018,key.ctrl_o            ,\ ; Ctrl+O
  514.   0x0002001E,key.ctrl_a            ,\ ; Ctrl+A
  515.   0x0002001F,key.ctrl_s            ,\ ; Ctrl+S
  516.   0x00020020,key.ctrl_d            ,\ ; Ctrl+D
  517.   0x00020021,key.ctrl_f            ,\ ; Ctrl+F
  518.   0x00020022,key.ctrl_g            ,\ ; Ctrl+G
  519.   0x00020023,key.ctrl_h            ,\ ; Ctrl+H
  520. \;0x00020026,key.ctrl_l            ,\ ; Ctrl+L
  521.   0x0002002D,key.ctrl_x            ,\ ; Ctrl+X
  522.   0x0002002E,key.ctrl_c            ,\ ; Ctrl+C
  523.   0x0002002F,key.ctrl_v            ,\ ; Ctrl+V
  524.   0x00020031,key.ctrl_n            ,\ ; Ctrl+N
  525.   0x00020043,key.ctrl_f9           ,\ ; Ctrl+F9
  526.   0x00020147,key.ctrl_home         ,\ ; Ctrl+Home
  527. \;0x00020148,key.ctrl_up           ,\ ; Ctrl+Up
  528.   0x00020149,key.ctrl_pgup         ,\ ; Ctrl+PageUp
  529.   0x0002014B,key.ctrl_left         ,\ ; Ctrl+Left
  530.   0x0002014D,key.ctrl_right        ,\ ; Ctrl+Right
  531.   0x0002014F,key.ctrl_end          ,\ ; Ctrl+End
  532. \;0x00020150,key.ctrl_down         ,\ ; Ctrl+Down
  533.   0x00020151,key.ctrl_pgdn         ,\ ; Ctrl+PageDown
  534.   0x00020153,key.del               ,\ ; Ctrl+Del
  535.   0x0003001F,key.shift_ctrl_s      ,\ ; Shift+Ctrl+S
  536.   0x00030147,key.shift_ctrl_home   ,\ ; Shift+Ctrl+Home
  537. \;0x00030148,key.shift_ctrl_up     ,\ ; Shift+Ctrl+Up
  538.   0x00030149,key.shift_ctrl_pgup   ,\ ; Shift+Ctrl+PageUp
  539.   0x0003014B,key.shift_ctrl_left   ,\ ; Shift+Ctrl+Left
  540.   0x0003014D,key.shift_ctrl_right  ,\ ; Shift+Ctrl+Right
  541.   0x0003014F,key.shift_ctrl_end    ,\ ; Shift+Ctrl+End
  542. \;0x00030150,key.shift_ctrl_down   ,\ ; Shift+Ctrl+Down
  543.   0x00030151,key.shift_ctrl_pgdn   ,\ ; Shift+Ctrl+PageDown
  544.   0x0004002D,key.alt_x             ,\ ; Alt+X
  545.   0
  546.  
  547. accel_table_textbox dd              \
  548. \;0x00000001,key.tb.escape         ,\ ; Escape
  549.   0x0000000E,key.tb.bkspace        ,\ ; BackSpace
  550. \;0x0000000F,key.tb.tab            ,\ ; Tab
  551. \;0x0000001C,key.tb.return         ,\ ; Return
  552.   0x00000147,key.tb.home           ,\ ; Home
  553.   0x0000014B,key.tb.left           ,\ ; Left
  554.   0x0000014D,key.tb.right          ,\ ; Right
  555.   0x0000014F,key.tb.end            ,\ ; End
  556.   0x00000153,key.tb.del            ,\ ; Delete
  557.   0x00010147,key.tb.shift_home     ,\ ; Shift+Home
  558.   0x0001014B,key.tb.shift_left     ,\ ; Shift+Left
  559.   0x0001014D,key.tb.shift_right    ,\ ; Shift+Right
  560.   0x0001014F,key.tb.shift_end      ,\ ; Shift+End
  561.   0x00010153,key.tb.del            ,\ ; Shift+Del
  562.   0
  563.  
  564. accel_table2 dd            \
  565.   1,btn.close_main_window ,\
  566. \;10000,btn.compile       ,\
  567. \;10001,btn.compile_run   ,\
  568. \;10002,btn.debug_board   ,\
  569. \;10003,btn.sysfuncs_txt  ,\
  570.   'UP',btn.scroll_up      ,\
  571.   'DN',btn.scroll_down    ,\
  572.   'LT',btn.scroll_left    ,\
  573.   'RT',btn.scroll_right   ,\
  574. \;5,key.ctrl_o            ,\
  575.   0
  576.  
  577. accel_table2_botdlg dd     \
  578.   1,btn.close_main_window ,\
  579.   20001,btn.bot.cancel    ,\
  580.   20002,btn.bot.opensave  ,\
  581.   20003,btn.bot.find      ,\
  582.   0
  583.  
  584. add_table:
  585. ; times $61 db -$00
  586.   times $1A db -$20
  587.   times $25 db -$00
  588.   times $10 db -$20
  589.   times $30 db -$00
  590.   times $10 db -$50
  591.   times $04 db -$00,-$01
  592.   times $08 db -$00
  593.  
  594. ;error_beep      db 0xA0,0x30,0
  595.  
  596. sz s_example,'EXAMPLE.ASM'
  597. sz s_still  ,'still'
  598.  
  599. ;sz param_setup,'LANG',0 ; parameter for SETUP
  600.  
  601. sz fasm_filename   ,'FASM       '
  602. sz debug_filename  ,'BOARD      '
  603. sz tinypad_filename,'TINYPAD    '
  604. sz docpak_filename ,'DOCPAK     '
  605. ;sz setup           ,'SETUP      ' ; to change keyboard layout
  606.  
  607. sz sysfuncs_param,'g',0
  608.  
  609. lsz sysfuncs_filename,\
  610.   ru,<'SYSFUNCR.TXT',0>,\
  611.   en,<'SYSFUNCS.TXT',0>
  612.  
  613. sz htext,'TINYPAD'
  614.  
  615. lszc help_text,b,\
  616.   ru,'КОМАНДЫ:',\
  617.   ru,' ',\
  618.   ru,'  CTRL+F1 : Это окно',\
  619.   ru,'  CTRL+S  : Первая строка для копирования',\
  620.   ru,'  CTRL+E  : Последняя строка для копирования',\
  621.   ru,'  CTRL+P  : Вставить выбранное на текущую позицию',\
  622.   ru,'  CTRL+D  : Удалить строку',\
  623.   ru,'  CTRL+L  : Вставить строку-разделитель',\
  624.   ru,'  CTRL+[  : Перейти в начало файла',\
  625.   ru,'  CTRL+]  : Перейти в конец файла',\
  626.   ru,'  CTRL+F2 : Загрузить файл',\
  627.   ru,'  CTRL+F3 : Поиск',\
  628.   ru,'  CTRL+F4 : Сохранить файл',\
  629.   ru,'  CTRL+F5 : Ввести имя файла',\
  630.   ru,'  CTRL+F6 : Ввести строку для поиска',\
  631.   ru,'  CTRL+F8 : Сменить раскладку клавиатуры',\
  632. \
  633.   en,'COMMANDS:',\
  634.   en,' ',\
  635.   en,'  CTRL+F1 : SHOW THIS WINDOW',\
  636.   en,'  CTRL+S  : SELECT FIRST STRING TO COPY',\
  637.   en,'  CTRL+E  : SELECT LAST STRING TO COPY',\
  638.   en,'  CTRL+P  : PASTE SELECTED TO CURRENT POSITION',\
  639.   en,'  CTRL+D  : DELETE CURRENT LINE',\
  640.   en,'  CTRL+L  : INSERT SEPARATOR LINE',\
  641.   en,'  CTRL+[  : GO TO THE BEGINNING OF FILE',\
  642.   en,'  CTRL+]  : GO TO THE END OF FILE',\
  643.   en,'  CTRL+F2 : LOAD FILE',\
  644.   en,'  CTRL+F3 : SEARCH',\
  645.   en,'  CTRL+F4 : SAVE FILE',\
  646.   en,'  CTRL+F5 : ENTER FILENAME',\
  647.   en,'  CTRL+F6 : ENTER SEARCH STRING',\
  648.   en,'  CTRL+F8 : CHANGE KEYBOARD LAYOUT'
  649. db 0
  650.  
  651. menubar_res main_menu,\
  652.   ru,'Файл'  ,popup_file   ,onshow.file   ,\
  653.   ru,'Правка',popup_edit   ,onshow.edit   ,\
  654.   ru,'Поиск' ,popup_search ,onshow.search ,\
  655.   ru,'Запуск',popup_run    ,onshow.run    ,\
  656.   ru,'Опции' ,popup_options,onshow.options,\
  657. \
  658.   en,'File'   ,popup_file   ,onshow.file  ,\
  659.   en,'Edit'   ,popup_edit   ,onshow.edit  ,\
  660.   en,'Search' ,popup_search ,onshow.search,\
  661.   en,'Run'    ,popup_run    ,onshow.run   ,\
  662.   en,'Options',popup_options,onshow.options
  663.  
  664. popup_res popup_file,\
  665.   ru,'Новый'           ,'Ctrl+N',key.ctrl_n      ,\
  666.   ru,'Открыть...'      ,'Ctrl+O',key.ctrl_o      ,\
  667.   ru,'Сохранить'       ,'Ctrl+S',key.ctrl_s      ,\
  668.   ru,'Сохранить как...',''      ,key.shift_ctrl_s,\
  669.   ru,'-'               ,''      ,0               ,\
  670.   ru,'Выход'           ,'Alt+X' ,key.alt_x       ,\
  671. \
  672.   en,'New'       ,'Ctrl+N',key.ctrl_n      ,\
  673.   en,'Open...'   ,'Ctrl+O',key.ctrl_o      ,\
  674.   en,'Save'      ,'Ctrl+S',key.ctrl_s      ,\
  675.   en,'Save as...',''      ,key.shift_ctrl_s,\
  676.   en,'-'         ,''      ,0               ,\
  677.   en,'Exit'      ,'Alt+X' ,key.alt_x
  678.  
  679. popup_res popup_edit,\
  680.   ru,'Вырезать'    ,'Ctrl+X',key.ctrl_x,\
  681.   ru,'Копировать'  ,'Ctrl+C',key.ctrl_c,\
  682.   ru,'Вставить'    ,'Ctrl+V',key.ctrl_v,\
  683.   ru,'Удалить'     ,''      ,key.del   ,\
  684.   ru,'-'           ,''      ,0         ,\
  685.   ru,'Выделить всё','Ctrl+A',key.ctrl_a,\
  686. \
  687.   en,'Cut'       ,'Ctrl+X',key.ctrl_x,\
  688.   en,'Copy'      ,'Ctrl+C',key.ctrl_c,\
  689.   en,'Paste'     ,'Ctrl+V',key.ctrl_v,\
  690.   en,'Delete'    ,''      ,key.del   ,\
  691.   en,'-'         ,''      ,0         ,\
  692.   en,'Select all','Ctrl+A',key.ctrl_a
  693.  
  694. popup_res popup_search,\
  695.   ru,'Перейти...' ,'Ctrl+G',key.ctrl_g,\
  696.   ru,'-'          ,''      ,0         ,\
  697.   ru,'Найти...'   ,'Ctrl+F',key.ctrl_f,\
  698.   ru,'Найти далее','F3'    ,key.f3    ,\
  699.   ru,'Заменить...','Ctrl+H',key.ctrl_h,\
  700. \
  701.   en,'Position...','Ctrl+G',key.ctrl_g,\
  702.   en,'-'          ,''      ,0         ,\
  703.   en,'Find...'    ,'Ctrl+F',key.ctrl_f,\
  704.   en,'Find next'  ,'F3'    ,key.f3    ,\
  705.   en,'Replace...' ,'Ctrl+H',key.ctrl_h
  706.  
  707. popup_res popup_run,\
  708.   ru,'Запустить'        ,'F9'     ,key.f9           ,\
  709.   ru,'Компилировать'    ,'Ctrl+F9',key.ctrl_f9      ,\
  710.   ru,'-'                ,''       ,0                ,\
  711.   ru,'Доска отладки'    ,''       ,open_debug_board ,\
  712.   ru,'Системные функции',''       ,open_sysfuncs_txt,\
  713. \
  714.   en,'Run'              ,'F9'     ,key.f9           ,\
  715.   en,'Compile'          ,'Ctrl+F9',key.ctrl_f9      ,\
  716.   en,'-'                ,''       ,0                ,\
  717.   en,'Debug board'      ,''       ,open_debug_board ,\
  718.   en,'System functions' ,''       ,open_sysfuncs_txt
  719.  
  720. popup_res popup_options,\
  721.   ru,'Внешний вид...'        ,'',0,\
  722.   ru,'-'                     ,'',0,\
  723.   ru,'Безопасное выделение'  ,'',set_secure_sel,\
  724.   ru,'Автоматические скобки' ,'',set_auto_braces,\
  725.   ru,'Автоматический отступ' ,'',set_auto_indents,\
  726.   ru,'Умная табуляция'       ,'',0,\
  727.   ru,'Оптимальное сохранение','',set_optimal_fill,\
  728.   ru,'-'                     ,'',0,\
  729.   ru,'Номера строк'          ,'',set_line_numbers,\
  730. \
  731.   en,'Appearance...'         ,'',0,\
  732.   en,'-'                     ,'',0,\
  733.   en,'Secure selection'      ,'',set_secure_sel,\
  734.   en,'Automatic brackets'    ,'',set_auto_braces,\
  735.   en,'Automatic indents'     ,'',set_auto_indents,\
  736.   en,'Smart tabulation'      ,'',0,\
  737.   en,'Optimal fill on saving','',set_optimal_fill,\
  738.   en,'-'                     ,'',0,\
  739.   en,'Line numbers'          ,'',set_line_numbers
  740.  
  741. lsz s_modified,\
  742.   ru,'Изменено',\
  743.   en,'Modified'
  744.  
  745. lsz s_2filename,\
  746.   ru,'Имя файла:',\
  747.   en,'Filename:'
  748. lsz s_2open,\
  749.   ru,'Открыть',\
  750.   en,'Open'
  751. lsz s_2save,\
  752.   ru,'Сохранить',\
  753.   en,'Save'
  754. lsz s_2find,\
  755.   ru,'Найти',\
  756.   en,'Find'
  757. db ':'
  758. lsz s_2replace,\
  759.   ru,'Заменить',\
  760.   en,'Replace'
  761. db ':'
  762. lsz s_2cancel,\
  763.   ru,'Отмена',\
  764.   en,'Cancel'
  765.  
  766. sz symbols_ex,';?.%"',"'"
  767. sz symbols   ,'#&*\:/<>|{}()[]=+-, '
  768.  
  769. TINYPAD_END:     ; end of file
  770.  
  771. self_path rb PATHL
  772.  
  773. ;-----------------------------------------------------------------------------
  774. section @UDATA ;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  775. ;-----------------------------------------------------------------------------
  776.  
  777. f_info.length dd ?
  778. f_info dd ?,?,?,?,?;?,0,?,AREA_TEMP,AREA_EDIT-AREA_TEMP
  779.  
  780. f_info.path:
  781.     times PATHL+1 db ?
  782.  
  783. pos.x         dd ?    ; global X position (cursor)
  784. pos.y         dd ?    ; global Y position (cursor)
  785. sel.x         dd ?    ; global X position (selection start)
  786. sel.y         dd ?    ; global Y position (selection start)
  787. lines         dd ?    ; number of lines in file
  788. lines.scr     dd ?    ; number of lines on the screen
  789. columns       dd ?    ; number of columns in file
  790. columns.scr   dd ?    ; number of columns on the screen
  791. top_ofs       dd ?    ; height occupied by top buttons
  792. bot_ofs       dd ?    ; height occupied by bottom buttons
  793.               dw ?
  794. left_ofs      dd ?    ;
  795. top_line      dd ?    ; topmost visible line on screen
  796. left_col      dd ?    ; leftmost visible char on line
  797. vscrl_top     dd ?
  798. vscrl_size    dd ?
  799. hscrl_top     dd ?
  800. hscrl_size    dd ?
  801. skinh         dd ?    ; skin height
  802. __rc          dd ?,?,?,?
  803. ;filelen       dd ?    ; file size (on save) ???
  804. filesize      dd ?    ; file size (on load) ???
  805. ya            dd ?    ; for read_string
  806. ;copy_start    dd ?    ; first line for copying (Ctrl+S)
  807. copy_count    dd ?    ; number of lines for copying (Ctrl+E)
  808. copy_size     dd ?    ; size of data to copy
  809. s_title.size  dd ?    ; caption length
  810.  
  811. draw_blines   dd ?    ; last line to draw
  812.  
  813. cur_line_len  dd ?
  814. h_popup       dd ?
  815. bot_dlg_handler dd ?
  816.  
  817. sel.begin.x   dd ?
  818. sel.begin.y   dd ?
  819. sel.end.x     dd ?
  820. sel.end.y     dd ?
  821. sel.selected  db ?
  822.  
  823. in_sel        db ?
  824.  
  825. asm_mode      db ?    ; ASM highlight?
  826. do_not_draw   db ?    ; draw top and bottom buttons?
  827. main_closed   db ?    ; main window closed?
  828. tb_casesen    db ?    ; focused textbox is case-sensitive?
  829.  
  830. align 4
  831. s_fname.size  dd ?
  832. s_fname       rb PATHL+1
  833. align 4
  834. s_search.size dd ?
  835. s_search      rb PATHL+1
  836.  
  837. s_title       rb PATHL+11  ; window caption
  838.  
  839. chr db ?
  840. ext db ?
  841. shi dd ?
  842.  
  843. align 4
  844. cl_3d_normal dd ?
  845. cl_3d_pushed dd ?
  846. cl_3d_outset dd ?
  847. cl_3d_inset  dd ?
  848. cl_3d_grayed dd ?
  849.  
  850. tb_opensave  TBOX
  851. tb_find      TBOX
  852. tb_replace   TBOX
  853. tb_gotorow   TBOX
  854. tb_gotocol   TBOX
  855.  
  856. focused_tb   dd ?
  857.  
  858. key1 rb 256
  859.  
  860. mst  db ?
  861. mst2 db ?
  862. mev  db ?
  863. mouse_captured  db ?
  864. just_from_popup db ?
  865.  
  866. bot_mode db ?
  867.  
  868. modified db ?
  869.  
  870. align 4
  871.  
  872. bot_dlg_height dd ?
  873. bot_dlg_mode2  db ?
  874.  
  875. ;-----------------------------------------------------------------------------
  876. section @PARAMS ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  877. ;-----------------------------------------------------------------------------
  878.  
  879. fasm_parameters:
  880.  
  881. p_info  process_information
  882. p_info2 process_information
  883. sc      system_colors
  884.  
  885. diff16 'Main memory size',0,$
  886.  
  887. MAIN_STACK  = 0x0000FFF0
  888. POPUP_STACK = 0x0000EFF0
  889.  
  890. AREA_TEMP   = 0x00010000 ; 0x00010000
  891. AREA_EDIT   = 0x000C0000 ; 0x00080000
  892. AREA_TEMP2  = 0x00190000 ; 0x002E0000
  893. AREA_CBUF   = 0x001A0000 ; 0x002F0000
  894. AREA_ENDMEM = 0x001B0000 ; 0x00300000
  895.  
  896. diff10 'Header+options size',0,@CODE
  897. diff10 'Load area size',AREA_TEMP,AREA_EDIT
  898. diff10 'Edit area size',AREA_EDIT,AREA_TEMP2
  899. diff10 'Total memory usage',0,AREA_ENDMEM
  900.  
  901. ;store dword '/hd/' at tb_opensave.text+4*0
  902. ;store dword '1/tp' at tb_opensave.text+4*1
  903. ;store dword 'ad4/' at tb_opensave.text+4*2
  904. ;store dword 'tiny' at tb_opensave.text+4*3
  905. ;store dword 'pad.' at tb_opensave.text+4*4
  906. ;store dword 'asm'  at tb_opensave.text+4*5
  907. ;store byte  23     at tb_opensave.length
  908.