Subversion Repositories Kolibri OS

Rev

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