Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

  1. ;-----------------------------------------------------------------------------
  2. func save_file ;//////////////////////////////////////////////////////////////
  3. ;-----------------------------------------------------------------------------
  4.  
  5.         mov     esi,tb_opensave.text
  6.         mov     edi,f_info.path
  7.         movzx   ecx,[tb_opensave.length]
  8.         mov     [f_info.length],ecx
  9.         cld
  10.         rep     movsb
  11.         mov     byte[edi],0
  12.  
  13.         mov     esi,AREA_EDIT     ; 0x70000 = 448 Kbytes (maximum)
  14.         mov     edi,AREA_TEMP
  15.  
  16.   .new_string:
  17.         call    save_string
  18.         cmp     dword[esi],0
  19.         jne     .new_string
  20.         sub     edi,AREA_TEMP+2   ; minus last CRLF
  21. ;!      mov     [filelen],edi
  22.         cmp     byte[f_info.path],'/'
  23.         je      .systree_save
  24.         mcall   33,f_info.path,AREA_TEMP,edi,0;[filelen],0
  25.         or      eax,eax
  26.         jz      .exit
  27. ;       call    file_not_found
  28.         jmp     .exit.2
  29.  
  30.   .systree_save:
  31. ;!      mov     eax,[filelen]
  32. ;       mov     [f_info+8],edi ;! eax
  33. ;       mov     [f_info+0],1
  34. ;        mov     esi,s_fname
  35. ;        mov     edi,f_info.path
  36. ;        mov     ecx,PATHL
  37. ;        cld
  38. ;        rep     movsb
  39.         ;mcall   58,f_info
  40.  
  41.         mov     [f_info70+0],2
  42.         mov     [f_info70+12],edi
  43.         mov     [f_info70+16],AREA_TEMP
  44.         mov     byte[f_info70+20],0
  45.         mov     [f_info70+21],f_info.path
  46.         mcall   70,f_info70
  47.  
  48.         call    set_status_fs_error
  49.  
  50.         or      eax,eax
  51.         jnz     .exit.2
  52.  
  53.   .exit:
  54.         mov     [modified],0
  55.         clc
  56.         ret
  57.  
  58.   .exit.2:
  59.         stc
  60.         ret
  61. endf
  62.  
  63. ;-----------------------------------------------------------------------------
  64. func save_string ;////////////////////////////////////////////////////////////
  65. ;-----------------------------------------------------------------------------
  66.         movzx   ecx,word[esi]
  67.         test    dword[esi],0x00010000
  68.         jz      @f
  69.         or      dword[esi],0x00020000
  70.     @@: add     esi,4
  71. ;       mov     ecx,eax
  72.  
  73.     @@: cmp     byte[esi+ecx-1],' '
  74.         jne     @f
  75.         loop    @b
  76.     @@: jecxz   .endcopy
  77.         xor     edx,edx
  78.         mov     ebx,edx
  79.         mov     ah,dl
  80.  
  81.   .next_char:
  82.         mov     al,[esi+ebx]
  83.         inc     ebx
  84. ;        cmp     [asm_mode],0
  85. ;        je      .put
  86.         test    [options],OPTS_OPTIMSAVE
  87.         jz      .put
  88.         test    ah,00000001b
  89.         jnz     .char
  90.         cmp     al,'"'
  91.         jne     @f
  92.         xor     ah,00000100b
  93.         jmp     .char
  94.     @@: cmp     al,"'"
  95.         jne     @f
  96.         xor     ah,00000010b
  97.         jmp     .char
  98.     @@: test    ah,00000110b
  99.         jnz     .char
  100.         cmp     al,';'
  101.         jne     @f
  102.         test    ah,00000001b
  103.         jnz     .char
  104.         xor     ah,00000001b
  105.         jmp     .char
  106.     @@: cmp     al,' '
  107.         jne     .char
  108.         inc     edx
  109.         test    ebx,ATABW-1
  110.         jnz     @f
  111.         dec     edx
  112.         jle     .put
  113.         mov     al,9
  114.         xor     edx,edx
  115.         jmp     .put
  116.   .char:
  117.         or      edx,edx
  118.         jz      .put
  119.         push    ecx eax
  120.         mov     ecx,edx
  121.         mov     al,' '
  122.         rep     stosb
  123.         pop     eax ecx
  124.         xor     edx,edx
  125.   .put:
  126.         stosb
  127.     @@: loop    .next_char
  128.  
  129.   .endcopy:
  130.         mov     eax,0x0A0D
  131.         stosw
  132.         movzx   eax,word[esi-4]
  133.         add     esi,eax;[esi-4]
  134.         ret
  135. endf
  136.  
  137. func set_status_fs_error
  138.         push    eax
  139.         mov     esi,s_fs_error
  140.     @@: dec     eax
  141.         js      @f
  142.         movzx   ecx,byte[esi]
  143.         lea     esi,[esi+ecx+1]
  144.         jmp     @b
  145.     @@: inc     esi
  146.         mov     [s_status],esi
  147.         pop     eax
  148.         call    writepos
  149.         ret
  150. endf
  151.  
  152. ;-----------------------------------------------------------------------------
  153. func load_hd_file ;///////////////////////////////////////////////////////////
  154. ;-----------------------------------------------------------------------------
  155.         mov     [f_info+0],0
  156.         mov     [f_info+8],300000/512
  157. ;        mov     esi,s_fname
  158. ;        mov     edi,f_info.path;pathfile_read
  159. ;        mov     ecx,PATHL
  160. ;        cld
  161. ;        rep     movsb
  162.         ;mcall   58,f_info ; fileinfo_read
  163.  
  164.         mov     [f_info70+0],0
  165.         mov     [f_info70+4],0
  166.         mov     [f_info70+8],0
  167.         mov     [f_info70+12],300000;/512
  168.         mov     [f_info70+16],AREA_TEMP
  169.         mov     byte[f_info70+20],0
  170.         mov     [f_info70+21],f_info.path
  171.         mcall   70,f_info70
  172.  
  173.         call    set_status_fs_error
  174.  
  175.         xchg    eax,ebx
  176.         inc     eax
  177.         test    ebx,ebx
  178.         je      load_file.file_found
  179.         cmp     ebx,6            ;// ATV driver fix (6 instead of 5)
  180.         je      load_file.file_found
  181. ;       jmp     file_not_found
  182.         stc
  183.         ret
  184. endf
  185.  
  186. ;-----------------------------------------------------------------------------
  187. func load_file ;//////////////////////////////////////////////////////////////
  188. ;-----------------------------------------------------------------------------
  189.  
  190.         mov     esi,tb_opensave.text
  191.         mov     edi,f_info.path
  192.         movzx   ecx,[tb_opensave.length]
  193.         mov     [f_info.length],ecx
  194.         cld
  195.         rep     movsb
  196.         mov     byte[edi],0
  197.  
  198.         cmp     byte[f_info.path],'/'
  199.         je      load_hd_file
  200.  
  201.         mcall   6,f_info.path,0,16800,AREA_TEMP ; 6 = open file
  202.         inc     eax          ; eax = -1 -> file not found
  203.         jnz     .file_found
  204. ;       jmp     file_not_found
  205.         stc
  206.         ret
  207.  
  208.   .file_found:
  209.         dec     eax
  210.         mov     [filesize],eax
  211.         mov     [lines],1
  212.         mov     [columns],0
  213.         mov     esi,AREA_TEMP
  214.         mov     edi,AREA_EDIT
  215.         mov     edx,eax
  216.  
  217.   .next_line:
  218.         mov     ebx,edi
  219.         add     edi,4
  220.   .next_char:
  221.         or      edx,edx
  222.         jle     .exit
  223.         lodsb
  224.         dec     edx
  225.         cmp     al,13
  226.         je      .CR
  227.         cmp     al,10
  228.         je      .LF
  229.         cmp     al,9
  230.         je      .TB
  231.         cmp     al,0
  232.         je      .exit
  233.         stosb
  234.         jmp     .next_char
  235.  
  236.   .exit:
  237.         mov     ecx,10
  238.         mov     al,' '
  239.         rep     stosb
  240.         lea     eax,[edi-4]
  241.         sub     eax,ebx
  242.         mov     [ebx],eax
  243.         mov     dword[ebx+eax+4],0
  244.         sub     eax,10
  245.         jnz     @f
  246.         inc     eax
  247.     @@: cmp     eax,[columns]
  248.         jbe     @f
  249.         mov     [columns],eax
  250.     @@: mov     [modified],0
  251.         clc
  252.         ret
  253.  
  254.   .CR:  cmp     byte[esi],10
  255.         jne     .LF
  256.         lodsb
  257.         dec     edx
  258.   .LF:  mov     ecx,10
  259.         mov     al,' '
  260.         rep     stosb
  261.         lea     eax,[edi-4]
  262.         sub     eax,ebx
  263.         mov     [ebx],eax
  264.         inc     [lines]
  265.         add     eax,-10
  266.         cmp     eax,[columns]
  267.         jbe     .next_line
  268.         mov     [columns],eax
  269.         jmp     .next_line
  270.  
  271.   .TB:  lea     eax,[edi-4]
  272.         sub     eax,ebx
  273.         mov     ecx,eax
  274.         add     ecx,ATABW
  275.         and     ecx,not(ATABW-1)
  276.         sub     ecx,eax
  277.         mov     al,' '
  278.         rep     stosb
  279.         jmp     .next_char
  280. endf
  281.  
  282. ;-----------------------------------------------------------------------------
  283. func new_file ;///////////////////////////////////////////////////////////////
  284. ;-----------------------------------------------------------------------------
  285. ;       mcall   55,eax,error_beep   ; beep
  286.         mov     [lines],1           ; open empty document
  287.         mov     [columns],1
  288.         xor     eax,eax
  289.         mov     [top_line],eax
  290.         mov     [pos.x],eax
  291.         mov     [pos.y],eax
  292.         mov     edi,AREA_EDIT+4
  293.         mov     ecx,10
  294.         mov     [edi-4],ecx
  295.         mov     [edi+10],eax
  296.         mov     al,' '
  297.         cld
  298.         rep     stosb
  299.  
  300.         mov     [f_info.length],0
  301.         mov     [modified],0
  302.         mov     [asm_mode],0
  303.         call    update_caption
  304.         call    drawwindow
  305.  
  306.         ret
  307. endf