Subversion Repositories Kolibri OS

Rev

Rev 485 | Rev 592 | 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.67.18
  4. ; memory to compile: 3.0/9.0 MBytes (without/with size optimizations)
  5. ; version:           4.0.4
  6. ; last update:       2007-02-08 (Feb 08, 2007)
  7. ; minimal kernel:    revision #270 (svn://kolibrios.org/kernel)
  8. ;-----------------------------------------------------------------------------
  9. ; originally by:     Ville Michael Turjanmaa >> villemt@aton.co.jyu.fi
  10. ; maintained by:     Mike Semenyako          >> mike.dld@gmail.com
  11. ;                    Ivan Poddubny           >> ivan-yar@bk.ru
  12. ;-----------------------------------------------------------------------------
  13. ; TODO (4.1.0):
  14. ;   - optimize drawing (reduce flickering)
  15. ;   - add vertical selection, undo, goto position, overwrite mode
  16. ;   - improve window drawing with small dimensions
  17. ;   - save settings to ini file, not to executable
  18. ;   - add prompt to save file before closing/opening
  19. ;   - other bug-fixes and speed/size optimizations
  20. ;
  21. ; HISTORY:
  22. ; 4.0.4 (mike.dld)
  23. ;   bug-fixes:
  24. ;     - statusbar contained hint after dialog operation cancelled
  25. ;     - small drawing fix for gutter and line saved/modified markers
  26. ;       (incorrect calculations)
  27. ;     - incorrect lines marking on Ctrl+V
  28. ;     - put filename of current tab into open/save dialog (noticed by Maxxxx32)
  29. ;   changes:
  30. ;     - editor and other modifications to ease parts placement changing,
  31. ;       including changes in look
  32. ;     - modified/saved colors now match those in MSVS
  33. ;     - function 70 for *all* file operations (including diamond's fixes)
  34. ;     - use memory manager instead of statically allocated region
  35. ;     - case-insensitive filenames input, to be able to open/save files with
  36. ;       non-latin chars in name (russian etc.)
  37. ;     - reduced flickering (changes checker)
  38. ;     - overall code cleanup
  39. ;   new features:
  40. ;     - recode tables between CP866, CP1251 and KOI8-R (suggested by Victor)
  41. ;     - tabbed interface, ability to open several files in one app instance
  42. ;       (thanks IRC guys for ideas and testing)
  43. ;     - make any tab default to compile it disregarding currently active tab
  44. ;     - configuration dialog (colors, tabs positioning)
  45. ; 4.0.3 (mike.dld)
  46. ;   bug-fixes:
  47. ;     - 1-char selection if pressing <BS> out of real line length
  48. ;     - fault in `writepos`, added call to function 9
  49. ;     - main menu items weren't highlighted if popup opened and cursor
  50. ;       isn't in main menu item's area
  51. ;     - statusbar and textboxes drawing fixes (wrong colors)
  52. ;     - perform no redraw while pressing Shift, Ctrl, Alt keys
  53. ;     - data length from DOCPAK in string representation (fixed by diamond)
  54. ;     - compare file extension case-insensitively (fixed by diamond)
  55. ;   changes:
  56. ;     - function 70 instead of 58 for files loading/saving
  57. ;     - clientarea-relative drawing (less code)
  58. ;     - every line's dword is now splitted into 2 words;
  59. ;       low word - line block length, so max line length is 65535 now
  60. ;       high word - various flags. for now, only 2 of 16 bits are used:
  61. ;         if bit #0 is set, line was modified since file open
  62. ;         if bit #1 is set, line was saved after last modification
  63. ;       high word could also be further used for code collapsing and different
  64. ;         line marking features (breakpoints, errors, bookmarks, etc.)
  65. ;   new features:
  66. ;     - line markers for modified and saved lines
  67. ;     - status messages for various actions
  68. ; 4.0.2 (mike.dld)
  69. ;   bug-fixes:
  70. ;     - program terminates if started with parameters (fine for DOCPAK)
  71. ; 4.0.1 (mike.dld)
  72. ;   bug-fixes:
  73. ;     - unable to run program after exiting from main menu (Alt+X)
  74. ;   new features:
  75. ;     - integration with DOCPAK
  76. ; 4.0 (mike.dld)
  77. ;   bug-fixes:
  78. ;     - main menu popups' "on show" was called only for first shown popup
  79. ;     - clear selection on left/right arrow keys
  80. ;   new features:
  81. ;     - "replace" dialog (w/o "skip", "replace all")
  82. ;     - line numbers display
  83. ;     - options (except "appearance" and "smart tabulation")
  84. ;     - options saving (colors, window position, "Options" popup triggers)
  85. ; 4.0 beta 2 (mike.dld)
  86. ;   bug-fixes:
  87. ;     - unable to start if /rd/1/example.asm is missing (from Halyavin)
  88. ;     - clicking on menu items draws main window in popup (from Rohan)
  89. ;     - passed parameters aren't taken into account (from Mario79)
  90. ;     - background isn't erased if text lines < screen lines after
  91. ;       selection deletion (from Rohan)
  92. ; 4.0 beta 1 (mike.dld)
  93. ;   menu bar and popup menu;
  94. ;     removed buttons from the top and input fields from the bottom since
  95. ;     now they're accesible through main/popup menu;
  96. ;   improved keyboard handling (using 66th function);
  97. ;     support for almost all FASMW keyboard shourtcuts;
  98. ;   added text selection ability, standard selection operations
  99. ;     (copy,cut,paste);
  100. ;   new integrated dialogs (open, save, find)
  101. ;   fix to collapse SPACEs into TABs only for *.asm and *.inc files
  102. ; 3.78a (mike.dld)
  103. ;   fixed termination while typing in x positions higher than (line_length+10);
  104. ;   improved drawing on small heights
  105. ;     don't draw window while its height = 0 (Kolibri "minimize" support)
  106. ; 3.78 (mike.dld)
  107. ;   now lines may be of ANY length;
  108. ;     optimized memory usage (less memory for internal file representation)
  109. ;       after loading file, it's internal size equals to its real size
  110. ;       plus 14 bytes for each line (4 bytes for line length
  111. ;         and 10 spaced to the end - to reduce data relocations count);
  112. ;     completely rewritten keyboard handling;
  113. ;     added horizontal scrollbar;
  114. ;   all line feed formats are supported: WIN(CRLF),*NIX(LF),MAC(CR);
  115. ;   etc.
  116. ; 3.77 (mike.dld)
  117. ;   changed save_string to collapse SPACEs into TABs;
  118. ;   rewrote drawfile from scratch (speed++)
  119. ;     through some drawing improvements  needed
  120. ;     (some checkups to reduce flickering);
  121. ;   writepos (size--);
  122. ;   fixed drawing window while height < 100px, and for non-asm files;
  123. ;   several small fixes; speed/size optimizations
  124. ; 3.76 (mike.dld)
  125. ;   changed loadfile/loadhdfile to expand TABs into SPACEs;
  126. ;   changed TAB,ENTER,DELETE,BSPACE keys behaviour (rewritten from scratch);
  127. ;   vertical scrollbar;
  128. ;   extra window resizing capabilities (added a couple of constants);
  129. ;   completely new text cursor management & moving text cursor with mouse;
  130. ;   improved search function, moving cursor to beginning of text found;
  131. ;   adjustable max line width (change LINE_WIDTH & recompile) // (obsolet)
  132. ; 3.75a
  133. ;   fixed converting char to upper case in read_string
  134. ; 3.75
  135. ;   rewrote save_file from scratch; bugfix in loadfile;
  136. ; 3.74
  137. ;   optimisation
  138. ; 3.73
  139. ;   completly new load_file function
  140. ; 3.72
  141. ;   speed++
  142. ; 3.71
  143. ;   error beep
  144. ; 3.6,3.7:
  145. ;   many bugs fixed
  146. ;   simple toolbar
  147. ;   compile, run applications from TINYPAD, all fasm output is in debug board
  148. ;   TAB button
  149. ;   auto-indent
  150. ;   Ctrl+L - insert comment string
  151. ;-----------------------------------------------------------------------------
  152.  
  153. include 'lang.inc'
  154. include '..\..\..\macros.inc' ; useful stuff
  155. ;include 'proc32.inc'
  156. include 'tinypad.inc'
  157. ;purge mov,add,sub            ;  SPEED
  158.  
  159. header '01',1,@CODE,TINYPAD_END,STATIC_MEM_END,MAIN_STACK,@PARAMS,self_path
  160.  
  161. APP_VERSION equ '4.0.4'
  162.  
  163. ;include 'debug.inc'
  164. ;define __DEBUG__ 1
  165. ;define __DEBUG_LEVEL__ 1
  166. ;include 'debug-fdo.inc'
  167.  
  168. ASEPC = '-'  ; separator character (char)
  169. ATOPH = 19   ; menu bar height (pixels)
  170. SCRLW = 16   ; scrollbar widht/height (pixels)
  171. ATABW = 8    ; tab key indent width (chars)
  172. LINEH = 10   ; line height (pixels)
  173. PATHL = 256  ; maximum path length (chars) !!! don't change !!!
  174. AMINS = 8    ; minimal scroll thumb size (pixels)
  175. LCHGW = 3    ; changed/saved marker width (pixels)
  176.  
  177. STATH = 16   ; status bar height (pixels)
  178. TBARH = 18   ; tab bar height (pixels)
  179.  
  180. ;-----------------------------------------------------------------------------
  181. section @OPTIONS ;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  182. ;-----------------------------------------------------------------------------
  183.  
  184. label color_tbl dword
  185.   .text:       RGB(  0,  0,  0)
  186.   .back:       RGB(255,255,255)
  187.   .text.sel:   RGB(255,255,255)
  188.   .back.sel:   RGB( 10, 36,106)
  189.   .symbol:     RGB( 48, 48,240)
  190.   .number:     RGB(  0,144,  0)
  191.   .string:     RGB(176,  0,  0)
  192.   .comment:    RGB(128,128,128)
  193.   .line.moded: RGB(255,238, 98)
  194.   .line.saved: RGB(108,226,108)
  195.  
  196. ins_mode db 1
  197. tab_pos  db 2
  198.  
  199. options  db OPTS_AUTOINDENT+OPTS_OPTIMSAVE+OPTS_SMARTTAB
  200.  
  201. mainwnd_pos:
  202.   .x dd 250
  203.   .y dd 75
  204.   .w dd 6*80+6+SCRLW+5  ;- 220
  205.   .h dd 402             ;- 220
  206.  
  207. ;-----------------------------------------------------------------------------
  208. section @CODE ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  209. ;-----------------------------------------------------------------------------
  210.  
  211. ;       fninit
  212.  
  213. ;       stdcall ini.get_int,finfo_ini,ini_sec_window,ini_window_left,50
  214. ;       mov     [mainwnd_pos.x],eax
  215. ;       stdcall ini.get_int,finfo_ini,ini_sec_window,ini_window_top,50
  216. ;       mov     [mainwnd_pos.y],eax
  217. ;       stdcall ini.get_int,finfo_ini,ini_sec_window,ini_window_right,350
  218. ;       sub     eax,[mainwnd_pos.x]
  219. ;       mov     [mainwnd_pos.w],eax
  220. ;       stdcall ini.get_int,finfo_ini,ini_sec_window,ini_window_bottom,450
  221. ;       sub     eax,[mainwnd_pos.y]
  222. ;       mov     [mainwnd_pos.h],eax
  223.  
  224.         cld
  225.         mov     edi,@UDATA
  226.         mov     ecx,@PARAMS-@UDATA
  227.         mov     al,0
  228.         rep     stosb
  229.  
  230.         mov     al,[tab_pos]
  231.         mov     [tab_bar.Style],al
  232.  
  233.         mcall   68,11
  234.         or      eax,eax
  235.         jz      key.alt_x.close
  236.  
  237.         mov     eax,65536
  238.         call    mem.Alloc
  239.         mov     [temp_buf],eax
  240.  
  241.         inc     [do_not_draw]
  242.  
  243.         mov     dword[app_start],7
  244.  
  245.         mov     esi,s_example
  246.         mov     edi,tb_opensave.text
  247.         mov     ecx,s_example.size
  248.         mov     [tb_opensave.length],cl
  249.         rep     movsb
  250.  
  251.         mov     esi,s_still
  252.         mov     edi,s_search
  253.         mov     ecx,s_still.size
  254.         mov     [s_search.size],ecx
  255.         rep     movsb
  256.  
  257.         cmp     byte[@PARAMS],0
  258.         jz      no_params
  259.  
  260. ;// Willow's code to support DOCPAK [
  261.  
  262.         cmp     byte[@PARAMS],'*'
  263.         jne     .noipc
  264.  
  265. ;// diamond [ (convert size from decimal representation to dword)
  266. ;--     mov     edx,dword[@PARAMS+1]
  267.         mov     esi,@PARAMS+1
  268.         xor     edx,edx
  269.         xor     eax,eax
  270.     @@: lodsb
  271.         test    al,al
  272.         jz      @f
  273.         lea     edx,[edx*4+edx]
  274.         lea     edx,[edx*2+eax-'0']
  275.         jmp     @b
  276.     @@:
  277. ;// diamond ]
  278.  
  279.         add     edx,20
  280.  
  281.         mov     eax,edx
  282.         call    mem.Alloc
  283.         mov     ebp,eax
  284.         push    eax
  285.  
  286.         mov     dword[ebp+0],0
  287.         mov     dword[ebp+4],8
  288.         mcall   60,1,ebp
  289.         mcall   40,1000000b
  290.  
  291.         mcall   23,200
  292.  
  293.         cmp     eax,7
  294.         jne     key.alt_x.close
  295.         mov     byte[ebp],1
  296.  
  297.         mov     ecx,[ebp+12]
  298.         lea     esi,[ebp+16]
  299.         call    create_tab
  300.         call    load_from_memory
  301.  
  302.         pop     ebp
  303.         mov     eax,ebp
  304.         call    mem.Free
  305.  
  306.         jmp     @f
  307.   .noipc:
  308.  
  309. ;// Willow's code to support DOCPAK ]
  310.  
  311.         mov     esi,@PARAMS
  312.         mov     edi,tb_opensave.text
  313.         mov     ecx,PATHL
  314.         rep     movsb
  315.         mov     edi,tb_opensave.text
  316.         mov     ecx,PATHL
  317.         xor     al,al
  318.         repne   scasb
  319.         jne     key.alt_x.close
  320.         lea     eax,[edi-tb_opensave.text-1]
  321.         mov     [tb_opensave.length],al
  322.         call    load_file
  323.         jnc     @f
  324.  
  325.   no_params:
  326.         call    create_tab
  327.  
  328.     @@:
  329.         mov     [s_status],0
  330.         dec     [do_not_draw]
  331.         mcall   66,1,1
  332.         mcall   40,00100111b
  333. red:
  334.         call    drawwindow
  335.  
  336. ;-----------------------------------------------------------------------------
  337.  
  338. still:
  339.         call    draw_statusbar ; write current position & number of strings
  340.  
  341.   .skip_write:
  342.         mcall   10      ; wait here until event
  343.         cmp     [main_closed],0
  344.         jne     key.alt_x
  345.         dec     eax     ; redraw ?
  346.         jz      red
  347.         dec     eax     ; key ?
  348.         jz      key
  349.         dec     eax     ; button ?
  350.         jz      button
  351.         sub     eax,3   ; mouse ?
  352.         jz      mouse
  353.  
  354.         jmp     still.skip_write
  355.  
  356. ;-----------------------------------------------------------------------------
  357. func start_fasm ;/////////////////////////////////////////////////////////////
  358. ;-----------------------------------------------------------------------------
  359. ; BL = run after compile
  360. ;-----------------------------------------------------------------------------
  361. ; FASM infile,outfile,/path/to/files[,run]
  362. ;-----------------------------------------------------------------------------
  363.         cmp     [cur_editor.AsmMode],0
  364.         jne     @f
  365.         ret
  366.     @@:
  367.         mov     eax,[tab_bar.Default.Ptr]
  368.         or      eax,eax
  369.         jnz     @f
  370.         mov     eax,[tab_bar.Current.Ptr]
  371.     @@: cmp     byte[eax+TABITEM.Editor.FilePath],'/'
  372.         je      @f
  373.         ret
  374.     @@:
  375.         mov     edi,fasm_parameters
  376.         push    eax
  377.  
  378.         cld
  379.  
  380.         lea     esi,[eax+TABITEM.Editor.FilePath]
  381.         add     esi,[eax+TABITEM.Editor.FileName]
  382.         push    esi esi
  383.     @@: lodsb
  384.         cmp     al,0
  385.         je      @f
  386.         stosb
  387.         cmp     al,'.'
  388.         jne     @b
  389.         mov     ecx,esi
  390.         jmp     @b
  391.     @@:
  392.         mov     al,','
  393.         stosb
  394.  
  395.         pop     esi
  396.         sub     ecx,esi
  397.         dec     ecx
  398.         jz      @f
  399.         rep     movsb
  400.     @@:
  401.         mov     al,','
  402.         stosb
  403.  
  404.         pop     ecx esi
  405.         add     esi,TABITEM.Editor.FilePath
  406.         sub     ecx,esi
  407.         rep     movsb
  408.  
  409.         cmp     bl,0 ; run outfile ?
  410.         je      @f
  411.         mov     dword[edi],',run'
  412.         add     edi,4
  413.     @@:
  414.         mov     al,0
  415.         stosb
  416.  
  417.         mov     [app_start.filename],app_fasm
  418.         mov     [app_start.params],fasm_parameters
  419. start_ret:
  420.         mcall   70,app_start
  421.         ret
  422. endf
  423.  
  424. ;-----------------------------------------------------------------------------
  425. func open_debug_board ;///////////////////////////////////////////////////////
  426. ;-----------------------------------------------------------------------------
  427.         mov     [app_start.filename],app_board
  428.         mov     [app_start.params],0
  429.         jmp     start_ret
  430. endf
  431.  
  432. ;-----------------------------------------------------------------------------
  433. func open_sysfuncs_txt ;//////////////////////////////////////////////////////
  434. ;-----------------------------------------------------------------------------
  435.         mov     [app_start.filename],app_docpak
  436.         mov     [app_start.params],sysfuncs_param
  437.         call    start_ret
  438.         cmp     eax,0xfffffff0
  439.         jb      @f
  440.         mov     [app_start.filename],app_tinypad
  441.         mov     [app_start.params],sysfuncs_filename
  442.         call    start_ret
  443.     @@: ret
  444. endf
  445.  
  446. set_opt:
  447.  
  448.   .dialog:
  449.         mov     [bot_mode],1
  450.         mov     [bot_dlg_height],128
  451.         mov     [bot_dlg_handler],optsdlg_handler
  452.         mov     [focused_tb],tb_color
  453.         mov     al,[tb_color.length]
  454.         mov     [tb_color.pos.x],al
  455.         mov     [tb_color.sel.x],0
  456.         mov     [tb_casesen],1
  457.         mov     [cur_part],0
  458.         m2m     [cur_color],dword[color_tbl.text]
  459.         mov     esi,color_tbl
  460.         mov     edi,cur_colors
  461.         mov     ecx,10
  462.         cld
  463.         rep     movsd
  464.         call    drawwindow
  465.         ret
  466.  
  467.   .line_numbers:
  468.         mov     al,OPTS_LINENUMS
  469.         jmp     .main
  470.   .optimal_fill:
  471.         mov     al,OPTS_OPTIMSAVE
  472.         jmp     .main
  473.   .auto_indents:
  474.         mov     al,OPTS_AUTOINDENT
  475.         jmp     .main
  476.   .auto_braces:
  477.         mov     al,OPTS_AUTOBRACES
  478.         jmp     .main
  479.   .secure_sel:
  480.         mov     al,OPTS_SECURESEL
  481.  
  482.   .main:
  483.         xor     [options],al
  484.         ret
  485.  
  486. ;-----------------------------------------------------------------------------
  487.  
  488. include 'tp-defines.inc'
  489.  
  490. include 'tp-draw.asm'
  491. include 'tp-key.asm'
  492. include 'tp-button.asm'
  493. include 'tp-mouse.asm'
  494. include 'tp-files.asm'
  495. include 'tp-common.asm'
  496. include 'tp-dialog.asm'
  497. include 'tp-popup.asm'
  498. include 'tp-tbox.asm'
  499. include 'tp-tabctl.asm'
  500. include 'tp-editor.asm'
  501. include 'tp-recode.asm'
  502.  
  503. ;include 'lib-ini.asm'
  504.  
  505. ;-----------------------------------------------------------------------------
  506. section @DATA ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  507. ;-----------------------------------------------------------------------------
  508.  
  509. vscrl_capt dd -1
  510. hscrl_capt dd -1
  511. body_capt  dd -1
  512.  
  513. key0 db \
  514.   0x00,0x00,0x02,0x03,0x04,0x05,0x06,0x07,\
  515.   0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x00,0x00,\
  516.   0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,\
  517.   0x18,0x19,0x1A,0x1B,0x00,0x00,0x1E,0x1F,\
  518.   0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,\
  519.   0x28,0x29,0x00,0x2B,0x2C,0x2D,0x2E,0x2F,\
  520.   0x30,0x31,0x32,0x33,0x34,0x35,0x00,0x00,\
  521.   0x00,0x39,0x00,0x00,0x00,0x00,0x00,0x00
  522.   times 12*16 db 0x00
  523.  
  524. accel_table_main dd                 \
  525.   0x0000000E,key.bkspace           ,\ ; BackSpace
  526.   0x0000000F,key.tab               ,\ ; Tab
  527.   0x0000001C,key.return            ,\ ; Return
  528.   0x0000003D,key.f3                ,\ ; F3
  529.   0x00000043,key.f9                ,\ ; F9
  530.   0x00000147,key.home              ,\ ; Home
  531.   0x00000148,key.up                ,\ ; Up
  532.   0x00000149,key.pgup              ,\ ; PageUp
  533.   0x0000014B,key.left              ,\ ; Left
  534.   0x0000014D,key.right             ,\ ; Right
  535.   0x0000014F,key.end               ,\ ; End
  536.   0x00000150,key.down              ,\ ; Down
  537.   0x00000151,key.pgdn              ,\ ; PageDown
  538.   0x00000152,key.ins               ,\ ; Insert
  539.   0x00000153,key.del               ,\ ; Delete
  540.   0x00010043,key.shift_f9          ,\ ; Shift+F9
  541.   0x00010147,key.shift_home        ,\ ; Shift+Home
  542.   0x00010148,key.shift_up          ,\ ; Shift+Up
  543.   0x00010149,key.shift_pgup        ,\ ; Shift+PageUp
  544.   0x0001014B,key.shift_left        ,\ ; Shift+Left
  545.   0x0001014D,key.shift_right       ,\ ; Shift+Right
  546.   0x0001014F,key.shift_end         ,\ ; Shift+End
  547.   0x00010150,key.shift_down        ,\ ; Shift+Down
  548.   0x00010151,key.shift_pgdn        ,\ ; Shift+PageDown
  549.   0x00010153,key.del               ,\ ; Shift+Delete
  550.   0x0002000F,key.ctrl_tab          ,\ ; Ctrl+Tab
  551.   0x00020015,key.ctrl_y            ,\ ; Ctrl+Y
  552.   0x00020018,key.ctrl_o            ,\ ; Ctrl+O
  553.   0x0002001E,key.ctrl_a            ,\ ; Ctrl+A
  554.   0x0002001F,key.ctrl_s            ,\ ; Ctrl+S
  555.   0x00020020,key.ctrl_d            ,\ ; Ctrl+D
  556.   0x00020021,key.ctrl_f            ,\ ; Ctrl+F
  557.   0x00020022,key.ctrl_g            ,\ ; Ctrl+G
  558.   0x00020023,key.ctrl_h            ,\ ; Ctrl+H
  559. \;0x00020026,key.ctrl_l            ,\ ; Ctrl+L
  560.   0x0002002D,key.ctrl_x            ,\ ; Ctrl+X
  561.   0x0002002E,key.ctrl_c            ,\ ; Ctrl+C
  562.   0x0002002F,key.ctrl_v            ,\ ; Ctrl+V
  563.   0x00020031,key.ctrl_n            ,\ ; Ctrl+N
  564.   0x0002003E,key.ctrl_f4           ,\ ; Ctrl+F4
  565.   0x00020043,key.ctrl_f9           ,\ ; Ctrl+F9
  566.   0x00020147,key.ctrl_home         ,\ ; Ctrl+Home
  567. \;0x00020148,key.ctrl_up           ,\ ; Ctrl+Up
  568.   0x00020149,key.ctrl_pgup         ,\ ; Ctrl+PageUp
  569.   0x0002014B,key.ctrl_left         ,\ ; Ctrl+Left
  570.   0x0002014D,key.ctrl_right        ,\ ; Ctrl+Right
  571.   0x0002014F,key.ctrl_end          ,\ ; Ctrl+End
  572. \;0x00020150,key.ctrl_down         ,\ ; Ctrl+Down
  573.   0x00020151,key.ctrl_pgdn         ,\ ; Ctrl+PageDown
  574.   0x00020153,key.del               ,\ ; Ctrl+Del
  575.   0x0003000F,key.shift_ctrl_tab    ,\ ; Shift+Ctrl+Tab
  576.   0x0003001F,key.shift_ctrl_s      ,\ ; Shift+Ctrl+S
  577.   0x00030147,key.shift_ctrl_home   ,\ ; Shift+Ctrl+Home
  578. \;0x00030148,key.shift_ctrl_up     ,\ ; Shift+Ctrl+Up
  579.   0x00030149,key.shift_ctrl_pgup   ,\ ; Shift+Ctrl+PageUp
  580.   0x0003014B,key.shift_ctrl_left   ,\ ; Shift+Ctrl+Left
  581.   0x0003014D,key.shift_ctrl_right  ,\ ; Shift+Ctrl+Right
  582.   0x0003014F,key.shift_ctrl_end    ,\ ; Shift+Ctrl+End
  583. \;0x00030150,key.shift_ctrl_down   ,\ ; Shift+Ctrl+Down
  584.   0x00030151,key.shift_ctrl_pgdn   ,\ ; Shift+Ctrl+PageDown
  585.   0x0004002D,key.alt_x             ,\ ; Alt+X
  586.   0
  587.  
  588. accel_table_textbox dd              \
  589. \;0x00000001,key.tb.escape         ,\ ; Escape
  590.   0x0000000E,key.tb.bkspace        ,\ ; BackSpace
  591. \;0x0000000F,key.tb.tab            ,\ ; Tab
  592. \;0x0000001C,key.tb.return         ,\ ; Return
  593.   0x00000147,key.tb.home           ,\ ; Home
  594.   0x0000014B,key.tb.left           ,\ ; Left
  595.   0x0000014D,key.tb.right          ,\ ; Right
  596.   0x0000014F,key.tb.end            ,\ ; End
  597.   0x00000153,key.tb.del            ,\ ; Delete
  598.   0x00010147,key.tb.shift_home     ,\ ; Shift+Home
  599.   0x0001014B,key.tb.shift_left     ,\ ; Shift+Left
  600.   0x0001014D,key.tb.shift_right    ,\ ; Shift+Right
  601.   0x0001014F,key.tb.shift_end      ,\ ; Shift+End
  602.   0x00010153,key.tb.del            ,\ ; Shift+Del
  603.   0
  604.  
  605. accel_table2 dd           \
  606.   1    ,key.alt_x        ,\
  607.   'VSL',btn.vscroll_up   ,\
  608.   'VSG',btn.vscroll_down ,\
  609.   'HSL',btn.hscroll_up   ,\
  610.   'HSG',btn.hscroll_down ,\
  611.   'TBL',btn.tabctl_right ,\
  612.   'TBG',btn.tabctl_left  ,\
  613.   0
  614.  
  615. accel_table2_botdlg dd     \
  616.   1    ,key.alt_x         ,\
  617.   20001,btn.bot.cancel    ,\
  618.   20002,btn.bot.opensave  ,\
  619.   20003,btn.bot.find      ,\
  620.   20004,btn.bot.appearance,\
  621.   21001,btn.bot.tabpos    ,\
  622.   0
  623.  
  624. add_table:
  625.   times $1A db -$20
  626.   times $25 db -$00
  627.   times $10 db -$20
  628.   times $30 db -$00
  629.   times $10 db -$50
  630.   times $04 db -$00,-$01
  631.   times $08 db -$00
  632.  
  633. s_status dd 0
  634.  
  635. @^
  636. fasm_start:
  637.         dd      7
  638.         dd      0
  639.         dd      fasm_parameters
  640.         dd      0
  641.         dd      0
  642.         db      '/sys/DEVELOP/FASM',0
  643. board_start:
  644.         dd      7
  645.         dd      0
  646.         dd      0
  647.         dd      0
  648.         dd      0
  649.         db      '/sys/DEVELOP/BOARD',0
  650. tinypad_start:
  651.         dd      7
  652.         dd      0
  653.         dd      ?
  654.         dd      0
  655.         dd      0
  656.         db      '/sys/TINYPAD',0
  657. docpak_start:
  658.         dd      7
  659.         dd      0
  660.         dd      sysfuncs_param
  661.         dd      0
  662.         dd      0
  663.         db      '/sys/DOCPAK',0
  664. ^@
  665.  
  666. sz app_fasm    ,'/sys/DEVELOP/FASM',0
  667. sz app_board   ,'/sys/DEVELOP/BOARD',0
  668. sz app_tinypad ,'/sys/TINYPAD',0
  669. sz app_docpak  ,'/sys/DOCPAK',0
  670.  
  671. sz sysfuncs_param,'g',0
  672.  
  673. include 'tp-locale.inc'
  674.  
  675. ;// options dialog data [
  676. label optsdlg_editor at $-EDITOR.Bounds
  677. ; rb PATHL     ; FilePath       db PATHL dup(?)
  678. ; dd 0         ; FileName       dd ?
  679.   dd ?,?,?,?   ; Bounds         RECT
  680.   dd @f        ; Lines          dd ?
  681.   dd ?         ; Lines.Size     dd ?
  682.   dd 9         ; Lines.Count    dd ?
  683.   dd 21        ; Columns.Count  dd ?
  684.   dd 0,4       ; Caret          POINT
  685.   dd 100,4     ; SelStart       POINT
  686.   dd 0,0       ; TopLeft        POINT
  687.   dd 0,0       ; VScroll        SCROLLBAR
  688.   dd 0,0       ; HScroll        SCROLLBAR
  689.   dd 0         ; Gutter.Width   dd ?
  690.   db 0         ; Gutter.Visible db ?
  691.   db 1         ; AsmMode        db ?
  692.   db 0         ; Modified       db ?
  693.  
  694. @@:
  695.   dd 0x00000000+1
  696.   db ' '
  697.   dd 0x00010000+9
  698.   db ' org 100h'
  699.   dd 0x00000000+1
  700.   db ' '
  701.   dd 0x00000000+20
  702.   db ' mov ah,09h  ; write'
  703.   dd 0x00000000+12
  704.   db ' mov dx,text'
  705.   dd 0x00000000+8
  706.   db ' int 21h'
  707.   dd 0x00030000+8
  708.   db ' int 20h'
  709.   dd 0x00000000+1
  710.   db ' '
  711.   dd 0x00000000+21
  712.   db ' text db "Hello!",24h'
  713.   dd 0
  714.  
  715. optsdlg_editor_parts:   ; left,top,right,bottom,type
  716.   db 0, 12, 13, 29, 22
  717.   db 0, 12, 33, 47, 42
  718.   db 0, 12, 53, 29, 72
  719.   db 0, 12, 83, 53, 92
  720.   db 2, 12, 43, 77, 52
  721.   db 3,  4, 43,148, 52
  722.   db 4, 48, 33, 53, 42
  723.   db 4,108, 83,113, 92
  724.   db 5, 36, 13, 59, 22
  725.   db 5, 54, 33, 71, 42
  726.   db 5, 36, 53, 53, 72
  727.   db 5,114, 83,131, 92
  728.   db 6, 60, 83,107, 92
  729.   db 7, 84, 33,125, 42
  730.   db 8,  1, 13,  5, 22
  731.   db 9,  1, 63,  5, 72
  732.   db 1,  1,  1,148,105
  733.   db -1
  734. ;// ]
  735.  
  736. sz symbols_ex,';?.%"',"'"
  737. sz symbols   ,'#&*\:/<>|{}()[]=+-, '
  738.  
  739. sz ini_sec_window   ,'Window',0
  740. sz ini_window_top   ,'Top',0
  741. sz ini_window_left  ,'Left',0
  742. sz ini_window_right ,'Right',0
  743. sz ini_window_bottom,'Bottom',0
  744.  
  745. TINYPAD_END:     ; end of file
  746.  
  747. self_path rb PATHL
  748.  
  749. ;-----------------------------------------------------------------------------
  750. section @UDATA ;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  751. ;-----------------------------------------------------------------------------
  752.  
  753. app_start:
  754.            dd ?,?
  755.  .params   dd ?
  756.            dd ?,?
  757.            db ?
  758.  .filename dd ?
  759.  
  760. f_info.length dd ?
  761. f_info.path:
  762.     times PATHL+1 db ?
  763. f_info70 rd 7
  764.  
  765. file_info FILEINFO
  766.  
  767. checker_ed    EDITOR
  768. checker_ed_ll dd ?
  769.  
  770. tab_bar      TABCTL
  771. virtual at tab_bar.Current
  772.   cur_tab      TABITEM
  773. end virtual
  774. virtual at tab_bar.Current.Editor
  775.   cur_editor   EDITOR
  776. end virtual
  777.  
  778. lines.scr     dd ?    ; number of lines on the screen
  779. columns.scr   dd ?    ; number of columns on the screen
  780. top_ofs       dd ?    ; height occupied by top buttons
  781. bot_ofs       dd ?    ; height occupied by bottom buttons
  782.               dw ?
  783. left_ofs      dd ?    ;
  784. __rc          dd ?,?,?,?
  785. copy_count    dd ?    ; number of lines for copying (Ctrl+E)
  786. copy_size     dd ?    ; size of data to copy
  787. s_title.size  dd ?    ; caption length
  788.  
  789. cur_line_len  dd ?
  790. h_popup       dd ?
  791. bot_dlg_handler dd ?
  792.  
  793. sel.begin.x   dd ?
  794. sel.begin.y   dd ?
  795. sel.end.x     dd ?
  796. sel.end.y     dd ?
  797. sel.selected  db ?
  798.  
  799. in_sel        db ?
  800.  
  801. do_not_draw   db ?    ; draw top and bottom buttons?
  802. main_closed   db ?    ; main window closed?
  803. tb_casesen    db ?    ; focused textbox is case-sensitive?
  804.  
  805. draw_blines   db ?
  806.  
  807. align 4
  808. s_fname.size  dd ?
  809. s_fname       rb PATHL+1
  810. align 4
  811. s_search.size dd ?
  812. s_search      rb PATHL+1
  813.  
  814. s_title       rb PATHL+11  ; window caption
  815.  
  816. chr db ?
  817. ext db ?
  818. shi dd ?
  819.  
  820. align 4
  821. cl_3d_normal dd ?
  822. cl_3d_pushed dd ?
  823. cl_3d_outset dd ?
  824. cl_3d_inset  dd ?
  825. cl_3d_grayed dd ?
  826.  
  827. tb_color     TBOX
  828. tb_opensave  TBOX
  829. tb_find      TBOX
  830. tb_replace   TBOX
  831. tb_gotorow   TBOX
  832. tb_gotocol   TBOX
  833.  
  834. focused_tb   dd ?
  835.  
  836. key1 rb 256
  837.  
  838. mst  db ?
  839. mst2 db ?
  840. mev  db ?
  841. mouse_captured  db ?
  842. just_from_popup db ?
  843.  
  844. bot_mode db ?
  845.  
  846. align 4
  847.  
  848. bot_dlg_height dd ?
  849. bot_dlg_mode2  db ?
  850.  
  851. temp_buf dd ?
  852. copy_buf dd ?
  853.  
  854. ;-----------------------------------------------------------------------------
  855. section @PARAMS ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  856. ;-----------------------------------------------------------------------------
  857.  
  858. fasm_parameters:
  859.  
  860. p_info  process_information
  861. p_info2 process_information
  862. sc      system_colors
  863.  
  864. rb 1024*4
  865. MAIN_STACK:
  866. rb 1024*4
  867. POPUP_STACK:
  868.  
  869. STATIC_MEM_END:
  870.  
  871. diff10 'Main memory size',0,$
  872.