Subversion Repositories Kolibri OS

Rev

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

  1. ; 15/III 2010 staper@inbox.ru
  2.  
  3. appname equ 'Программируемый микрокалькулятор '
  4. version   equ ''
  5.  
  6. include 'macros.inc'
  7.  
  8. header '01',1,START,I_END,(D_END+0x100),(D_END+0x100),0,cur_dir_path
  9.  
  10. include 'opcodes.inc'
  11. include 'proc32.inc'
  12. include 'MASMFpuLib.asm'
  13. include 'editbox_ex.mac'
  14. include 'load_lib.mac'
  15. include 'macroPRMK.inc'
  16.  
  17. _flags = 0x0
  18. ;0  1 - исполнение программы
  19. ;1  1 - аварийный останов, не используется
  20. ;2-
  21. ;3  1 - нажата F
  22. ;4  1 - нажата K
  23. ;5  1 - режим программирования
  24. ;6  1 - заполнение экспоненты
  25. ;7  1 - регистры подняты
  26. ;8  1 - дополнение команды (0х4?,0х6? и пр.)
  27. ;9  1 - дозапись команды (адрес перехода после ОПКОДа)
  28. ;10 1 - необходимо обнулить экранную строку, но не показывать её, поднять регистры
  29. ;11 1 - нажата П
  30. ;12 1 - нажата ИП
  31. ;13 1 - скрывать регистры и программу
  32. ;25-27 - используются в диалоге сохранениея/загрузки
  33. ;28-
  34. ;29 - "sk" в key
  35. ;30 0 - трансцендентые функции представлены в радианах, иначе 31
  36. ;31 0/1 - трансцендентые функции представлены в градах/градусах
  37.  
  38. START:
  39.         load_library    boxlib_name,cur_dir_path,buf_cmd_lin,system_path,\
  40.         err_message_found_lib,head_f_l,myimport,err_message_import,head_f_i
  41.  
  42.         mcall   40,0x7
  43.         mcall   48,4
  44.         mov     [scin_height],eax
  45.  
  46. ;определяем длину строки с параметрами
  47.         mov     esi,buf_cmd_lin
  48.         xor     ecx,ecx
  49. @@:     cmp     byte [esi+ecx],0
  50.         je      @f
  51.         inc     ecx
  52.         jmp     @b
  53. @@:     mov     dword [edit2.size],ecx
  54.         mov     dword [edit2.pos],ecx
  55.  
  56.         mcall   68,11
  57.         cmp     dword [edit2.pos],0
  58.         je      @f
  59.         call    load_prog
  60. @@:
  61.  
  62. red:
  63.         call draw_window
  64. still:
  65.         test    [flags],(1 shl 0)
  66.         jnz     main_loop
  67.         mcall   10
  68. .0:     dec     eax
  69.         jz      red
  70.         dec     eax
  71.         jz      key
  72.         dec     eax
  73.         jz      button
  74.         sub     eax,3
  75.         jz      mouse
  76.         jmp     still
  77. main_loop:
  78.         mcall   11
  79.         test    eax,eax
  80.         jnz     still.0
  81.         cmp     [schk],-1
  82.         jne     @f
  83.         btr     [flags],0
  84.         mcall   55,55,,,sound_data
  85.         jmp     still
  86. @@:     movzx   esi,[schk]
  87.         movzx   eax, byte [esi+PMEM]
  88.         shl     eax,2
  89.         add     eax,OPCODEtable
  90.         call    dword [eax]
  91.         call    draw_schk
  92.         call    draw_prog
  93.         test    [flags],(1 shl 0)
  94.         jz      @f
  95.         mcall   5,[_pause]
  96.         jmp     still
  97. @@:     mcall   55,55,,,sound_data
  98.         jmp     still
  99.  
  100. mouse:  if 0
  101.         push    dword scroll_bar_data_vertical
  102.         call    [scrollbar_ver_mouse]
  103.         endf
  104.         jmp     still
  105.  
  106. button:
  107.         mcall   17
  108.         dec     ah
  109.         jnz     @f
  110.         mcall   -1
  111. @@:     cmp     ah,31
  112.         jae     .grd
  113.         movzx   eax,ah
  114.         cmp     eax,30
  115.         jg      still
  116.         shl     eax,2
  117.         call    dword [eax+but_table-4]
  118.         test    [flags],(1 shl 5)
  119.         jz      @f
  120.         call    ftos
  121.         call    draw_string
  122.         call    draw_prog
  123. @@:     call    draw_schk
  124.         jmp     still
  125. .grd:   cmp     ah,31
  126.         jne     @f
  127.         btr     [flags],30
  128.         call    set_but
  129.         jmp     still
  130. @@:     cmp     ah,32
  131.         jne     @f
  132.         bts     [flags],30
  133.         btr     [flags],31
  134.         call    set_but
  135.         jmp     still
  136. @@:     cmp     ah,33
  137.         jne     @f
  138.         bts     [flags],30
  139.         bts     [flags],31
  140.         call    set_but
  141. @@:     cmp     ah,34
  142.         jne     @f
  143.         btc     [flags],13
  144.         jc      .331
  145.         mcall   67,-1,-1,198,-1
  146.         jmp     still
  147.         .331:
  148.         mcall   67,-1,-1,485,-1
  149. @@:     jmp     still
  150.  
  151. key:
  152.         mcall   2
  153. @@:     cmp     ah,12           ;load
  154.         jne     @f
  155.         bt      [flags],27
  156.         jc      still
  157.         bt      [flags],26
  158.         jc      still
  159.         bts     [flags],25
  160.         call    window_load_save
  161.         jmp     still
  162. @@:     cmp     ah,19           ;save
  163.         jne     @f
  164.         bt      [flags],27
  165.         jc      still
  166.         bt      [flags],26
  167.         jc      still
  168.         btr     [flags],25
  169.         call    window_load_save
  170.         jmp     still
  171.  
  172. @@:     push    dword edit1
  173.         call    [edit_box_key]
  174.  
  175. .0:     call    draw_schk
  176.  
  177.         cmp     [edit1.pos],2
  178.         jb      still
  179.         test    [flags],(1 shl 29)
  180.         jnz     @f
  181.         cmp     word [txt.edbox],"sk"; or "BP" or "Bp" or "bP"
  182.         jne     @f
  183.         bts     [flags],29
  184.         mov     word [txt.edbox],0x2020
  185.         mov     [edit1.size],0
  186.         mov     [edit1.pos],0
  187.         push    dword edit1
  188.         call    [edit_box_draw]
  189.         jmp     key.0
  190. @@:     mov     ah,[txt.edbox]
  191.         sub     ah,48
  192.         cmp     ah,9
  193.         jbe     .1
  194.         sub     ah,7
  195.         cmp     ah,15
  196.         jbe     .1
  197.         sub     ah,32
  198. .1:     mov     al,[txt.edbox+1]
  199.         sub     al,48
  200.         cmp     al,9
  201.         jbe     .2
  202.         sub     al,7
  203.         cmp     al,15
  204.         jbe     .1
  205.         sub     al,32
  206. .2:     shl     al,4
  207.         shr     ax,4
  208.         mov     [edit1.size],0
  209.         mov     [edit1.pos],0
  210.         test    [flags],(1 shl 29)
  211.         jnz     .4
  212.         movzx   ebx,[schk]
  213.         add     ebx,PMEM
  214.         mov     [ebx],al
  215.         inc     [schk]
  216.         jmp     .3
  217. .4:     mov     [schk],al
  218.         btr     [flags],29
  219. .3:     call    draw_schk
  220.         mov     word [txt.edbox],0x2020
  221.         push    dword edit1
  222.         call    [edit_box_draw]
  223.         call    draw_prog
  224.         test    [flags],(1 shl 5)
  225.         jz      @f
  226.         call    ftos
  227.         call    draw_string
  228. @@:     jmp     key.0
  229.  
  230.  
  231.  align 4
  232.  
  233. but_table:
  234.  
  235. dd      .Cx,    .vp,    .sign,  .dot,   .0
  236. dd      .up,    .xy,    _3_,    _2_,    _1_
  237. dd      .min,   .div,   _6_,    _5_,    _4_
  238. dd      .plus,  .x,     _9_,    _8_,    _7_
  239. dd      .PP,    .BP,    .p,     .ip,    .K
  240. dd      .Sp,    .Vo,    .shgl,  .shgr,  .F
  241.  
  242. .BP:    test [flags],(1 shl 5)
  243.         jnz @f
  244.         bts [flags],9
  245.         ret    
  246.     @@: movzx eax,[schk]
  247.         add eax,PMEM
  248.         inc [schk]
  249.         test [flags],(1 shl 3)
  250.         jnz @f
  251.         test [flags],(1 shl 4)
  252.         jz .BP0
  253.                 mov [dop8],0x80
  254.                 bts [flags],8
  255.                 btr [flags],4
  256.                 ret
  257.         .BP0:   mov byte [eax],0x51
  258.                 bts [flags],9
  259.                 ret
  260.         @@:     mov byte [eax],0x58
  261.                 bts [flags],9
  262.                 btr [flags],3
  263.                 ret
  264. .shgl:  test [flags],(1 shl 5)
  265.         jnz @f
  266.         ret
  267.     @@: test [flags],(1 shl 3)
  268.         jnz @f
  269.         test [flags],(1 shl 4)
  270.         jz .shgl0
  271.         mov [dop8],0xE0
  272.         bts [flags],8
  273.         btr [flags],4
  274.         ret
  275.         .shgl0:
  276.         dec [schk]
  277.         ret
  278.     @@: movzx eax,[schk]
  279.         add eax,PMEM
  280.         inc [schk]
  281.         mov byte [eax],0x5E
  282.         bts [flags],9
  283.         btr [flags],3
  284.         ret
  285.  
  286. .shgr:  test [flags],(1 shl 5)
  287.         jnz @f
  288.         ret
  289.     @@: test [flags],(1 shl 3)
  290.         jnz @f
  291.         test [flags],(1 shl 4)
  292.         jz .shgr0
  293.         mov [dop8],0xC0
  294.         bts [flags],8
  295.         btr [flags],4
  296.         ret
  297.         .shgr0:
  298.         inc [schk]
  299.         ret
  300.     @@: movzx eax,[schk]
  301.         add eax,PMEM
  302.         inc [schk]
  303.         mov byte [eax],0x5C
  304.         bts [flags],9
  305.         btr [flags],3
  306.         ret
  307.  
  308. .PP:    test [flags],(1 shl 5)
  309.         jnz .PPprg
  310.         mov eax,0x53
  311.         jmp .to_opcode
  312.         .PPprg:
  313.         movzx eax,[schk]
  314.         add eax,PMEM
  315.         inc [schk]
  316.         test [flags],(1 shl 3)
  317.         jnz @f
  318.         test [flags],(1 shl 4)
  319.         jz .PP0
  320.         mov [dop8],0xA0
  321.         bts [flags],8
  322.         btr [flags],4
  323.         dec [schk]
  324.         ret
  325.         .PP0:
  326.         mov byte [eax],0x53
  327.         bts [flags],9
  328.         ret
  329.     @@: mov byte [eax],0x5A
  330.         bts [flags],9
  331.         btr [flags],3
  332.         ret
  333. .Vo:    test [flags],(1 shl 5)
  334.         jnz .Voprg
  335.         mov eax,0x52
  336.         jmp .to_opcode
  337.         .Voprg:
  338.         movzx eax,[schk]
  339.         add eax,PMEM
  340.         inc [schk]
  341.         test [flags],(1 shl 3)
  342.         jnz @f
  343.         test [flags],(1 shl 4)
  344.         jz .Vo0
  345.         mov [dop8],0x90
  346.         bts [flags],8
  347.         btr [flags],4
  348.         dec [schk]
  349.         ret
  350.         .Vo0:
  351.         mov byte [eax],0x52
  352.         ret
  353.     @@: mov byte [eax],0x59
  354.         bts [flags],9
  355.         btr [flags],3
  356.         ret
  357.  
  358. .Sp:    test [flags],(1 shl 5)
  359.         jnz .Spprg
  360.         mov eax,0x50
  361.         jmp .to_opcode
  362.         .Spprg:
  363.         movzx eax,[schk]
  364.         add eax,PMEM
  365.         inc [schk]
  366.         test [flags],(1 shl 3)
  367.         jnz @f
  368.         test [flags],(1 shl 4)
  369.         jz .Sp0
  370.         mov [dop8],0x70
  371.         bts [flags],8
  372.         btr [flags],4
  373.         dec [schk]
  374.         ret
  375.         .Sp0:
  376.         mov byte [eax],0x50
  377.         ret
  378.     @@: mov byte [eax],0x57
  379.         bts [flags],9
  380.         btr [flags],3
  381.         ret
  382. .ip:    test [flags],(1 shl 5)
  383.         jnz .ipprg
  384.         bts [flags],12
  385.         ret
  386.         .ipprg:
  387.         test [flags],(1 shl 3)
  388.         jnz @f
  389.         test [flags],(1 shl 4)
  390.         jz .ip0
  391.         mov [dop8],0xD0
  392.         bts [flags],8
  393.         btr [flags],4
  394.         ret
  395.         .ip0:
  396.         mov [dop8],0x60
  397.         bts [flags],8
  398.         ret
  399.     @@: movzx eax,[schk]
  400.         add eax,PMEM
  401.         inc [schk]
  402.         mov byte [eax],0x5D
  403.         bts [flags],9
  404.         btr [flags],3
  405.         ret
  406.  
  407.  
  408.  
  409. .p:     test [flags],(1 shl 5)
  410.         jnz .pprg
  411.         bts [flags],11
  412. .nop:   ret
  413.         .pprg:
  414.         test [flags],(1 shl 3)
  415.         jnz @f
  416.         test [flags],(1 shl 4)
  417.         jz .p0
  418.         mov [dop8],0xB0
  419.         bts [flags],8
  420.         btr [flags],4
  421.         ret
  422.         .p0:
  423.         mov [dop8],0x40
  424.         bts [flags],8
  425.         ret
  426.     @@: movzx eax,[schk]
  427.         add eax,PMEM
  428.         inc [schk]
  429.         mov byte [eax],0x5B
  430.         bts [flags],9
  431.         btr [flags],3
  432.         ret
  433.  
  434.  
  435.  
  436. .F:     bts [flags],3
  437.         ret
  438. .K:     bts [flags],4
  439.         ret
  440. .Cx:    test [flags],(1 shl 5)
  441.         jnz .Cxprg
  442.         test [flags],(1 shl 11)
  443.         jnz .cx4d
  444.         test [flags],(1 shl 12)
  445.         jnz .cx6d
  446.         test [flags],(1 shl 9)
  447.         jnz .Cx0
  448.         mov eax,0x0D
  449.         jmp .to_opcode
  450.                 .cx4d:  mov eax,0x4d
  451.                 jmp .to_opcode
  452.                 .cx6d:  mov eax,0x6d
  453.                 jmp .to_opcode
  454.         .Cxprg:
  455.         test [flags],(1 shl 8)
  456.         jz .Cx0
  457.         add [dop8],0x0D
  458.         jmp .dop8
  459.         .Cx0:
  460.         test [flags],(1 shl 9)
  461.         jz .Cx1
  462.         mov al,0x0D
  463.         jmp .dop9
  464.         .Cx1:
  465.         movzx eax,[schk]
  466.         add eax,PMEM
  467.         mov byte [eax],0x0D
  468.         inc [schk]
  469.         ret
  470. .vp:    test [flags],(1 shl 3)
  471.         jnz .vpsetprg
  472.         test [flags],(1 shl 5)
  473.         jnz .vpprg
  474.         test [flags],(1 shl 11)
  475.         jnz .vp4c
  476.         test [flags],(1 shl 12)
  477.         jnz .vp6c
  478.         test [flags],(1 shl 9)
  479.         jnz .vp0
  480.         mov eax,0x0C
  481.         jmp .to_opcode
  482.                 .vp4c:  mov eax,0x4c
  483.                 jmp .to_opcode
  484.                 .vp6c:  mov eax,0x6c
  485.                 jmp .to_opcode
  486.         .vpsetprg:
  487.         test [flags],(1 shl 5)
  488.         jz @f
  489.         ret
  490.         .vpprg:
  491.         test [flags],(1 shl 8)
  492.         jz .vp0
  493.         add [dop8],0x0c
  494.         jmp .dop8
  495.         .vp0:
  496.         test [flags],(1 shl 9)
  497.         jz .vp1
  498.         mov al,0x0C
  499.         jmp .dop9
  500.         .vp1:
  501.         movzx eax,[schk]
  502.         add eax,PMEM
  503.         mov byte [eax],0x0C
  504.         inc [schk]
  505.         ret
  506.     @@: bts [flags],5
  507.         btr [flags],3
  508.         ret
  509. .sign:  test [flags],(1 shl 5)
  510.         jnz .signprg
  511.         test [flags],(1 shl 11)
  512.         jnz .sign4b
  513.         test [flags],(1 shl 12)
  514.         jnz .sign6b
  515.         test [flags],(1 shl 9)
  516.         jnz .sign0
  517.         mov eax,0x0B
  518.         jmp .to_opcode
  519.                 .sign4b:        mov eax,0x4b
  520.                                 jmp .to_opcode
  521.                 .sign6b:        mov eax,0x6b
  522.                                 jmp .to_opcode
  523.         .signprg:
  524.         test [flags],(1 shl 8)
  525.         jz .sign0
  526.                 add [dop8],0x0B
  527.                 jmp .dop8
  528.         .sign0: test [flags],(1 shl 9)
  529.                 jz .sign1
  530.                         mov al,0x0B
  531.                         jmp .dop9
  532.         .sign1: test [flags],(1 shl 3)
  533.                 jnz @f
  534.                         movzx eax,[schk]
  535.                         add eax,PMEM
  536.                         mov byte [eax],0x0B
  537.                         inc [schk]
  538.                         ret
  539.         @@:     btr [flags],5
  540.                 btr [flags],3
  541.                 fld qword [S.X]
  542.                 call ftos
  543.                 call draw_string
  544.                 ret
  545. .up:    test [flags],(1 shl 5)
  546.         jnz .upprg
  547.         test [flags],(1 shl 3)
  548.         jnz .up0f
  549.         test [flags],(1 shl 4)
  550.         jnz .upK
  551.         test [flags],(1 shl 11)
  552.         jnz .up4e
  553.         test [flags],(1 shl 12)
  554.         jnz .up6e
  555.         test [flags],(1 shl 9)
  556.         jnz .up0
  557.         mov eax,0x0E
  558.         jmp .to_opcode
  559.                 .up0f:  mov eax,0x0F
  560.                 jmp .to_opcode
  561.                 .up4e:  mov eax,0x4e
  562.                 jmp .to_opcode
  563.                 .up6e:  mov eax,0x6e
  564.                 jmp .to_opcode
  565.         .upprg:
  566.         test [flags],(1 shl 8)
  567.         jz .up0
  568.                 add [dop8],0x0E
  569.                 jmp .dop8
  570.         .up0:   test [flags],(1 shl 9)
  571.                 jz .up1
  572.                         mov al,0x0E
  573.                         jmp .dop9
  574.         .up1:   movzx eax,[schk]
  575.                 add eax,PMEM
  576.                 inc [schk]
  577.                 test [flags],(1 shl 3)
  578.                 jnz @f
  579.                 mov byte [eax],0x0E
  580.                 ret
  581.         @@:     mov byte [eax],0x0F
  582.                 btr [flags],3
  583.                 ret
  584.         .upK:   mov eax,0x3B
  585.                 jmp .to_opcode
  586.  
  587. .xy:    test [flags],(1 shl 5)
  588.         jnz .xyprg
  589.         test [flags],(1 shl 3)
  590.         jnz .xy24
  591.         mov eax,0x14
  592.         jmp .to_opcode
  593.                 .xy24:  mov eax,0x24
  594.                 jmp .to_opcode
  595.         .xyprg:
  596.                 movzx eax,[schk]
  597.                 add eax,PMEM
  598.                 inc [schk]
  599.                 test [flags],(1 shl 3)
  600.                 jnz @f
  601.                 mov byte [eax],0x14
  602.                 ret
  603.         @@:     mov byte [eax],0x24
  604.                 btr [flags],3
  605.                 ret
  606. .min:   test [flags],(1 shl 5)
  607.         jnz .minprg
  608.         test [flags],(1 shl 3)
  609.         jnz .min21
  610.         test [flags],(1 shl 9)
  611.         jnz .min0
  612.         mov eax,0x11
  613.         jmp .to_opcode
  614.                 .min21: mov eax,0x21
  615.                 jmp .to_opcode
  616.         .minprg:
  617.                 test [flags],(1 shl 8)
  618.                 jz .min0
  619.                         add [dop8],0x0F
  620.                         jmp .dop8
  621.         .min0:  test [flags],(1 shl 9)
  622.                 jz .min1
  623.                         mov al,0x0F
  624.                         jmp .dop9
  625.         .min1:  movzx eax,[schk]
  626.                 add eax,PMEM
  627.                 inc [schk]
  628.                 test [flags],(1 shl 3)
  629.                 jnz @f
  630.                 mov byte [eax],0x11
  631.                 ret
  632.         @@:     mov byte [eax],0x21
  633.                 btr [flags],3
  634.                 ret
  635. .div:   test [flags],(1 shl 5)
  636.         jnz .divprg
  637.         test [flags],(1 shl 3)
  638.         jnz .div23
  639.         mov eax,0x13
  640.         jmp .to_opcode
  641.                 .div23: mov eax,0x23
  642.                 jmp .to_opcode
  643.         .divprg:
  644.         movzx eax,[schk]
  645.         add eax,PMEM
  646.         inc [schk]
  647.         test [flags],(1 shl 3)
  648.         jnz @f
  649.         mov byte [eax],0x13
  650.         ret
  651.     @@: mov byte [eax],0x23
  652.         btr [flags],3
  653.         ret
  654. .plus:  test [flags],(1 shl 5)
  655.         jnz .plusprg
  656.         test [flags],(1 shl 3)
  657.         jnz .plus10
  658.         mov eax,0x10
  659.         jmp .to_opcode
  660.                 .plus10:        mov eax,0x20
  661.                 jmp .to_opcode
  662.         .plusprg:
  663.         movzx eax,[schk]
  664.         add eax,PMEM
  665.         inc [schk]
  666.         test [flags],(1 shl 3)
  667.         jnz @f
  668.         mov byte [eax],0x10
  669.         ret
  670.     @@: mov byte [eax],0x20
  671.         btr [flags],3
  672.         ret
  673. .x:     test [flags],(1 shl 5)
  674.         jnz .xprg
  675.         test [flags],(1 shl 3)
  676.         jnz .x22
  677.         mov eax,0x12
  678.         jmp .to_opcode
  679.                 .x22:   mov eax,0x22
  680.                 jmp .to_opcode
  681.         .xprg:
  682.         movzx eax,[schk]
  683.         add eax,PMEM
  684.         inc [schk]
  685.         test [flags],(1 shl 3)
  686.         jnz @f
  687.         mov byte [eax],0x12
  688.         ret
  689.     @@: mov byte [eax],0x22
  690.         btr [flags],3
  691.         ret
  692. .dot:   test [flags],(1 shl 5)
  693.         jnz .dotprg
  694.         test [flags],(1 shl 3)
  695.         jnz .dot25
  696.         test [flags],(1 shl 11)
  697.         jnz .dot4a
  698.         test [flags],(1 shl 12)
  699.         jnz .dot6a
  700.         test [flags],(1 shl 9)
  701.         jnz .dot0
  702.         mov eax,0x0A
  703.         jmp .to_opcode
  704.                 .dot25: mov eax,0x25
  705.                 jmp .to_opcode
  706.                 .dot4a: mov eax,0x4a
  707.                 jmp .to_opcode
  708.                 .dot6a: mov eax,0x6a
  709.                 jmp .to_opcode
  710.         .dotprg:
  711.                 test [flags],(1 shl 8)
  712.                 jz .dot0
  713.                         add [dop8],0x0A
  714.                         jmp .dop8
  715.         .dot0:  test [flags],(1 shl 9)
  716.                 jz .dot1
  717.                 mov al,0x0A
  718.                 jmp .dop9
  719.         .dot1:  movzx eax,[schk]
  720.                 add eax,PMEM
  721.                 inc [schk]
  722.                 test [flags],(1 shl 3)
  723.                 jnz @f
  724.                 mov byte [eax],0x0A
  725.                 ret
  726.         @@:     mov byte [eax],0x25
  727.                 btr [flags],3
  728.                 ret
  729.  
  730. .0:     test [flags],(1 shl 5)
  731.         jnz .0prg
  732.         test [flags],(1 shl 3)
  733.         jnz .015
  734.         test [flags],(1 shl 11)
  735.         jnz .040
  736.         test [flags],(1 shl 12)
  737.         jnz .060
  738.         test [flags],(1 shl 9)
  739.         jnz .00
  740.         mov eax,0
  741.         jmp .to_opcode
  742.                 .015:   mov eax,0x15
  743.                 jmp .to_opcode
  744.                 .040:   mov eax,0x40
  745.                 jmp .to_opcode
  746.                 .060:   mov eax,0x60
  747.                 jmp .to_opcode
  748.         .0prg:
  749.                 test [flags],(1 shl 8)
  750.                 jz .00
  751.                         add [dop8],0x00
  752.                         jmp .dop8
  753.         .00:    test [flags],(1 shl 9)
  754.                 jz .01
  755.                         mov al,0
  756.                         jmp .dop9
  757.         .01:    movzx eax,[schk]
  758.                 add eax,PMEM
  759.                 inc [schk]
  760.                 test [flags],(1 shl 4)
  761.                 jz @f
  762.                 mov ebx,0
  763.                 test [flags],(1 shl 8)
  764.                 jnz .dop8
  765.                 test [flags],(1 shl 9)
  766.                 jnz .dop9
  767.                 mov byte [eax],0x54
  768.                 bts [flags],4
  769.                 ret
  770.         @@:     test [flags],(1 shl 3)
  771.                 jnz @f
  772.                 mov byte [eax],0x00
  773.                 ret
  774.         @@:     mov byte [eax],0x15
  775.                 btr [flags],3
  776.                 ret
  777.  
  778. .dop8:  movzx eax,[schk]
  779.         add eax,PMEM
  780.         inc [schk]
  781.         mov bl,[dop8]
  782.         mov byte [eax],bl
  783.         btr [flags],8
  784.         ret
  785. .dop9:  cmp [mov3],0
  786.         jne @f
  787.         inc [mov3]
  788.         shl al,4
  789.         mov [dop9],al
  790.         ret
  791.     @@: mov [mov3],0
  792.         add al,[dop9]
  793.         test [flags],(1 shl 5)
  794.         jz @f
  795.         movzx ebx,[schk]
  796.         add ebx,PMEM
  797.         mov [ebx],al
  798.         inc [schk]
  799.         btr [flags],9
  800.         ret
  801.     @@: mov [schk],al
  802.         btr [flags],9
  803.         call draw_prog
  804.         ret
  805.        
  806.  align 4
  807. .to_opcode:
  808.         shl eax,2
  809.         add eax,OPCODEtable
  810.         mov ebx,[eax]
  811.         jmp ebx
  812.  
  813. dop8 db 0
  814. dop9 db 0
  815. mov3 db 0
  816.  
  817.  
  818. _1_:    buttabnum 1,0x16,0x41,0x61,0
  819. _2_:    buttabnum 2,0x17,0x42,0x62,0
  820. _3_:    buttabnum 3,0x18,0x43,0x63,0
  821. _4_:    buttabnum 4,0x19,0x44,0x64,0x31
  822. _5_:    buttabnum 5,0x1A,0x45,0x65,0x32
  823. _6_:    buttabnum 6,0x1B,0x46,0x66,0
  824. _7_:    buttabnum 7,0x1C,0x47,0x67,0x34
  825. _8_:    buttabnum 8,0x1D,0x48,0x68,0x35
  826. _9_:    buttabnum 9,0x1E,0x49,0x69,0x36
  827.  
  828.  
  829.  
  830.  
  831.  align 4
  832. stof:
  833.         mov esi,string
  834.         inc esi
  835.         cmp word [esi],0x2030
  836.         je .null
  837.         mov dword [buf],0
  838.         mov dword [buf+4],0
  839.         mov word [buf+8],0
  840.         xor ecx,ecx
  841. @@:     cmp byte [esi+ecx],'.'
  842.         je .dot
  843.         cmp byte [esi+ecx],0x20
  844.         je .int
  845.         inc ecx
  846.         cmp ecx,8
  847.         jne @b
  848. .int:   dec ecx
  849.         call .tobcd
  850.         fbld [buf]
  851.         jmp .tosign
  852.  
  853. .dot:   push ecx
  854.         dec ecx
  855.         call .tobcd
  856.         fbld [buf]
  857.         pop ecx
  858.         add esi,ecx
  859.         inc esi
  860.         mov ebx,ecx
  861.         dec ebx
  862.         xor ecx,ecx
  863. @@:     cmp byte [esi+ecx],0x20
  864.         je @f
  865.         cmp ebx,8
  866.         je @f
  867.         inc ecx
  868.         inc ebx
  869.         jmp @b
  870. @@:     cmp ecx,0
  871.         je .tosign
  872.         push ecx
  873.         dec ecx
  874.         mov dword [buf],0
  875.         mov dword [buf+4],0
  876.         mov word [buf+8],0
  877.         call .tobcd
  878.         fbld [buf]
  879.         pop ecx
  880.         mov [perem],10
  881. @@:     fidiv [perem]
  882.         loop @b
  883.         faddp
  884.         jmp .tosign
  885.  
  886.  
  887. .tobcd:
  888.         mov edi,buf
  889. @@:     mov al,[esi+ecx]
  890.         sub al,48
  891.         test ecx,ecx
  892.         jz @f
  893.         shl al,4
  894.         mov ah,[esi+ecx-1]
  895.         sub ah,48
  896.         shr ax,4
  897.         mov [edi],al
  898.         inc edi
  899.         dec ecx
  900.         jz .tobcd1
  901.         dec ecx
  902.         jnz @b
  903.         mov al,[esi]
  904.         sub al,48
  905. @@:     mov [edi],al
  906. .tobcd1:
  907. ret
  908.  
  909.  
  910. .tosign:
  911.         cmp byte [string],'-'
  912.         jne @f
  913.         fchs
  914. @@:     cmp byte [string+12],0x20
  915.         je .ret
  916.         cmp byte [string+12],0x30
  917.         jne @f
  918.         cmp byte [string+11],0x30
  919.         je .ret
  920. @@:     mov al,[string+12]
  921.         sub al,48
  922.         mov ah,[string+11]
  923.         sub ah,48
  924.         shl al,4
  925.         shr ax,4
  926.         mov [buf],al
  927.         mov dword [buf+1],0
  928.         mov dword [buf+5],0
  929.         fbld [buf]
  930.         fistp [perem]
  931.         mov ecx,[perem]
  932.         mov [perem],10
  933.         cmp byte [string+10],'-'
  934.         je  .@@f
  935. @@:     fimul [perem]
  936.         loop @b
  937.         ret
  938. .@@f:   fidiv [perem]
  939.         loop .@@f
  940. .ret:   ret
  941. .null:  fldz
  942. ret
  943.  
  944.  align 4
  945. ftos:
  946.         test [flags],(1 shl 5)
  947.         jnz .prg
  948.         mov esi,string
  949.         mov dword [esi],0x20202020
  950.         mov dword [esi+4],0x20202020
  951.         mov dword [esi+8],0x20202020
  952.         mov byte [esi+12],0x20
  953. ;       fld st0
  954. ;       fxtract
  955. ;       fstp st0
  956. ;       fabs
  957. ;       fistp [perem]
  958. ;       mov eax,[perem]
  959. ;       cmp eax,0x1a
  960. ;       jg .1
  961. ;       stdcall FpuFLtoA,0,8,buf2,SRC1_FPU or SRC1_REAL; or STR_SCI
  962. ;       mov ecx,9
  963. ;       mov esi,string
  964. ;       mov edi,buf2
  965. ;@@:    mov al,[edi]
  966. ;       test al,al
  967. ;       jz @f
  968. ;       mov [esi],al
  969. ;       inc esi
  970. ;       inc edi
  971. ;       loop @b
  972. ;@@:    ret
  973.  
  974. .1:     stdcall FpuFLtoA,0,8,buf2,SRC1_FPU or SRC1_REAL or STR_SCI
  975.         mov ecx,10
  976.         mov esi,string
  977.         mov edi,buf2
  978. @@:     mov al,[edi]
  979.         test al,al
  980.         jz .ret
  981.         mov [esi],al
  982.         inc esi
  983.         inc edi
  984.         loop @b
  985. ;       add edi,9
  986. @@:     cmp byte [edi],0
  987.         je @f
  988.         inc edi
  989.         jmp @b
  990. @@:     mov ax,[edi-2]
  991.         mov [string+11],ax
  992.         mov al,[edi-5]
  993.         mov [string+10],al
  994. .ret:
  995. ;        cmp word [string+11],0x2020
  996. ;        je .ret2
  997.         cmp byte [string+10],'-'
  998.         je .ret2
  999.         mov ax,[string+11]
  1000.         sub ax,0x3030
  1001.         xchg ah,al
  1002.         shl al,4
  1003.         shr ax,4
  1004.         cmp al,7
  1005.         jge .ret2
  1006.         mov word [string+10],'  '
  1007.         mov byte [string+12],' '
  1008.         cmp al,0
  1009.         je .ret2
  1010.         xor edx,edx
  1011. @@:     mov bl,[string+2+edx]
  1012.         mov bh,[string+2+edx+1]
  1013.         xchg bh,bl
  1014.         mov [string+2+edx],bx
  1015.         inc edx
  1016.         dec al
  1017.         jnz @b
  1018. .ret2:  mov ecx,7
  1019. @@:     cmp byte [string+2+ecx],'0'
  1020.         jne @f
  1021.         mov byte [string+2+ecx],' '
  1022.         loop @b
  1023. @@:     cmp byte [string+2+ecx],'.'
  1024.         jne @f
  1025.         mov byte [string+2+ecx],' '
  1026. @@:     cmp byte [string+10],'+'
  1027.         jne @f
  1028.         mov byte [string+10],' '
  1029. @@:
  1030. ret
  1031. .toascii:
  1032.         shl ax,4
  1033.         shr al,4
  1034.         cmp al,10
  1035.         sbb al,69h
  1036.         das
  1037.         rol ax,8
  1038.         cmp al,10
  1039.         sbb al,69h
  1040.         das
  1041.         ret
  1042. .prg:   mov eax,0x20202020
  1043.         mov dword [string],eax
  1044.         mov dword [string+4],eax
  1045.         mov dword [string+8],eax
  1046.         xor eax,eax
  1047.         mov al,[schk]
  1048.         mov ebx,eax
  1049.         call .toascii
  1050.         mov [string+11],ax
  1051.         cmp     [schk],3
  1052.         jb @f
  1053.         movzx eax,byte [PMEM+ebx-3]
  1054.         call .toascii
  1055.         mov [string+8],ax
  1056. @@:     cmp     [schk],2
  1057.         jb @f
  1058.         movzx eax,byte [PMEM+ebx-2]
  1059.         call .toascii
  1060.         mov [string+5],ax
  1061. @@:     cmp     [schk],1
  1062.         jb @f
  1063.         movzx eax,byte [PMEM+ebx-1]
  1064.         call .toascii
  1065.         mov [string+2],ax
  1066. @@:
  1067. ret
  1068.  
  1069.  
  1070. ;   *********************************************
  1071. ;   ******* WINDOW DEFINITIONS AND DRAW *********
  1072. ;   *********************************************
  1073.  
  1074. draw_window:
  1075.         mcall   12,1
  1076.  
  1077.         mcall   48,3,sc,sizeof.system_colors
  1078.  
  1079.         mov     edx,[sc.work]
  1080.         or      edx,0x34000000
  1081.         mov     ecx,200
  1082.         shl     ecx,16
  1083.         add     ecx,[scin_height]
  1084.         add     ecx,343
  1085.         mcall   0,160 shl 16+485,,,,title
  1086.  
  1087.         mov     ebp,smesh
  1088.         mcall   65,bmp_file+8,185*65536+262,2*65536+75,4,palitra
  1089.  
  1090.         mcall   13,13*65536+122,24*65536+20,0xffffff
  1091.  
  1092.         call    draw_string
  1093.  
  1094.         mcall   13,137*65536+32,48*65536+12,0x888888
  1095.  
  1096.         call    set_but
  1097.         call    draw_registers
  1098.         call    draw_stack
  1099.         call    draw_prog
  1100.  
  1101.         mcall   8,176*65536+11,61*65536+10,35,0xdadada
  1102.  
  1103.         mov     edi,[sc.work]
  1104.         or      edi,0x34000000
  1105.         mcall   4,133*65536+63,0x81000000,txt.perek
  1106.         mcall   ,403*65536+4,,txt.prog
  1107.         mcall   ,403*65536+12,,txt.prog1
  1108.         mcall   ,380*65536+323,,txt.sk
  1109.  
  1110.         if 0
  1111.         mov     [scroll_bar_data_vertical.all_redraw],1
  1112.         push    dword scroll_bar_data_vertical
  1113.         call    [scrollbar_ver_draw]
  1114.         mov     [scroll_bar_data_vertical.all_redraw],0
  1115.         endf
  1116.         push    dword edit1
  1117.         call    [edit_box_draw]
  1118.  
  1119.         ;CK
  1120.         call    draw_schk
  1121.  
  1122.         ;обозначения регистров
  1123.         mcall   4,240*65536+4,0x81000000,txt.regs
  1124.         mov     word [perem],"0:"
  1125.         mov     byte [perem+2],0
  1126.         mov     ebx,210*65536+20
  1127.         mov     edx,perem
  1128.         push    dword 15
  1129. @@:     cmp     dword [esp],5
  1130.         je      @f
  1131. .prevr: int     0x40
  1132.         add     ebx,12
  1133.         inc     byte [perem]
  1134.         dec     dword [esp]
  1135.         jnz     @b
  1136.         jmp     .nextr
  1137. @@:     add     byte [perem],7
  1138.         jmp     .prevr
  1139. .nextr: add     esp,4
  1140.  
  1141.         ;обозначения стека
  1142.         mcall   4,240*65536+220,0x81000000,txt.stk
  1143.         mov     word [perem],"T:"
  1144.         mov     byte [perem+2],0
  1145.         mov     ebx,210*65536+240
  1146.         mov     edx,perem
  1147.         push    dword 5
  1148. .firsts:        cmp     dword [esp],4
  1149.         jne     @f
  1150.         mov     byte [perem],"Z"
  1151.         jmp     .prevs
  1152. @@:     cmp     dword [esp],3
  1153.         jne     @f
  1154.         mov     byte [perem],"Y"
  1155.         jmp     .prevs
  1156. @@:     cmp     dword [esp],2
  1157.         jne     @f
  1158.         mov     byte [perem],"X"
  1159.         jmp     .prevs
  1160. @@:     cmp     dword [esp],1
  1161.         jne     .prevs
  1162.         mov     dword [perem],"X1"
  1163. .prevs: int     0x40
  1164.         add     ebx,12
  1165.         dec     dword [esp]
  1166.         jnz     .firsts
  1167. .nexts: add     esp,4
  1168.  
  1169.         mcall   12,2
  1170. ret
  1171.  
  1172.  align 4
  1173. draw_string:
  1174. ;       mov     edi,[sc.work]
  1175.         or      edi,0x34ffffff
  1176.         mov     edx,edi
  1177.         mcall   13,20*65536+105,30*65536+7
  1178.         mcall   4,20*65536+30,0x900000ff,string,,
  1179. ret
  1180.  
  1181.  align 4
  1182. draw_schk:
  1183.         test    [flags],(1 shl 13)
  1184.         jnz     .ret
  1185.         mov     edi,[sc.work]
  1186.         or      edi,0x34000000
  1187.         movzx   ecx,[schk]
  1188.         mcall   47,0x020100,,400*65536+323,0x50000000,
  1189. .ret:
  1190. ret
  1191.  
  1192.  align 4
  1193. set_but:
  1194.         mov     ecx,34
  1195.         mov     eax,8
  1196. @@:     push    ecx
  1197.         lea     ebx,[ecx+0x80000000+1]
  1198.         int     0x40
  1199.         pop     ecx
  1200.         loop    @b
  1201.  
  1202.         xor     edi,edi
  1203.         mov     esi,0xffffff
  1204.         bt      [flags],30
  1205.         jnc     @f
  1206.         mov     esi,0x0
  1207. @@:     mcall   8,140*65536+7,50*65536+7,32
  1208.         mov     esi,0x0
  1209.         add     ebx,9*65536
  1210.         inc     edx
  1211.         bt      [flags],30
  1212.         jnc     @f
  1213.         bt      [flags],31
  1214.         jc      @f
  1215.         mov     esi,0xffffff
  1216. @@:     mcall
  1217.         mov     esi,0
  1218.         add     ebx,9*65536
  1219.         inc     edx
  1220.         bt      [flags],30
  1221.         jnc     @f
  1222.         bt      [flags],31
  1223.         jnc     @f
  1224.         mov     esi,0xffffff
  1225. @@:     mcall
  1226.  
  1227.         mov     ecx,30
  1228.         push    ecx
  1229.         mov     ecx,89*65536+22
  1230. .00:    mov     ebx,8*65536+27
  1231. .0:     pop     eax
  1232.         lea     edx,[eax+(1 shl 30) + 1]
  1233.         push    eax
  1234.         mcall   8,,,
  1235.         mov     eax,ecx
  1236.         pop     ecx
  1237.         dec     ecx
  1238.         jz      .ret
  1239.         push    ecx
  1240.         cmp     ecx,5
  1241.         je      .1
  1242.         cmp     ecx,10
  1243.         je      .1
  1244.         cmp     ecx,15
  1245.         je      .1
  1246.         cmp     ecx,20
  1247.         je      .1
  1248.         cmp     ecx,25
  1249.         je      .1
  1250.         add     ebx,36*65536
  1251.         mov     ecx,eax
  1252.         jmp     .0
  1253. .1:     add     eax,42*65536
  1254.         mov     ecx,eax
  1255.         jmp     .00
  1256. .ret:
  1257. ret
  1258.  
  1259.  align 4
  1260. draw_registers:
  1261.         test    [flags],(1 shl 13)
  1262.         jnz     .ret
  1263.         mov     esi,R.0
  1264.         mov     ecx,15
  1265.         mov     edx,[sc.work]
  1266.         or      edx,0x34000000
  1267.         push    edx
  1268.         mov     ebx,220*65536+150
  1269.         push    ebx
  1270.         mov     ebx,20*65536+9
  1271.         push    ebx
  1272.         push    esi ecx
  1273. @@:     call    .ftoa
  1274.         mov     ebx,[esp+12]
  1275.         mov     ecx,[esp+8]
  1276.         mov     edx,[esp+16]
  1277.         mcall   13
  1278.         mov     ebx,[esp+12]
  1279.         mov     eax,[esp+8]
  1280.         shr     eax,16
  1281.         mov     bx,ax
  1282.         mov     ecx,0;[esp+16]
  1283.         add     ecx,0x80000000
  1284.         mov     edx,buf2
  1285.         mcall   4
  1286.         dec     dword [esp]
  1287.         jz      @f
  1288.         add     dword [esp+4],8
  1289.         mov     esi,[esp+4]
  1290.         add     dword [esp+8],12*65536
  1291.         jmp     @b
  1292. @@:     add     esp,20
  1293. .ret:
  1294. ret
  1295.  
  1296. .ftoa:
  1297.         fld qword [esi]
  1298.         fld st0
  1299.         fabs
  1300.         fxtract
  1301.         fstp st0
  1302.         fabs
  1303.         fistp [perem]
  1304.         mov eax,[perem]
  1305.         cmp eax,0x1a+16383
  1306.         jge @f
  1307.         cmp eax,0x1a
  1308.         jge @f
  1309.         stdcall FpuFLtoA,0,8,buf2,SRC1_FPU or SRC1_REAL; or STR_SCI
  1310.         fstp st0
  1311.         ret
  1312. @@:     stdcall FpuFLtoA,0,8,buf2,SRC1_FPU or SRC1_REAL or STR_SCI
  1313.         fstp st0
  1314.         ret
  1315.  
  1316.  align 4
  1317. draw_stack:
  1318. ;       test    [flags],(1 shl 13)
  1319. ;       jnz     .ret
  1320.         mov     esi,S.T
  1321.         mov     ecx,5
  1322.         mov     edx,[sc.work]
  1323.         or      edx,0x34000000
  1324.         push    edx
  1325.         mov     ebx,220*65536+150
  1326.         push    ebx
  1327.         mov     ebx,240*65536+9
  1328.         push    ebx
  1329.         push    esi ecx
  1330. @@:     call    draw_registers.ftoa
  1331.         mov     ebx,[esp+12]
  1332.         mov     ecx,[esp+8]
  1333.         mov     edx,[esp+16]
  1334.         mcall   13
  1335.         mov     ebx,[esp+12]
  1336.         mov     eax,[esp+8]
  1337.         shr     eax,16
  1338.         mov     bx,ax
  1339.         mov     ecx,0;[esp+16]
  1340.         add     ecx,0x80000000
  1341.         mov     edx,buf2
  1342.         mcall   4
  1343.         dec     dword [esp]
  1344.         jz      @f
  1345.         sub     dword [esp+4],8
  1346.         mov     esi,[esp+4]
  1347.         add     dword [esp+8],12*65536
  1348.         jmp     @b
  1349. @@:     add     esp,20
  1350. ;.ret:
  1351. ret
  1352.  
  1353.  align 4
  1354. draw_prog:
  1355.         test    [flags],(1 shl 13)
  1356.         jnz     .ret
  1357.         pushd   26
  1358.         movzx   eax,[schk]
  1359.         mov     [.sprog2],al
  1360.         xor     edx,edx
  1361.         div     dword [esp]
  1362.         xor     edx,edx
  1363.         mul     dword [esp]
  1364.         mov     [.sprog],al
  1365.         mov     edi,[sc.work]
  1366.         or      edi,0x34000000
  1367.         movzx   ecx, [.sprog]
  1368.         add     ecx,26
  1369.         sub     ecx,[esp]
  1370.         mov     esi,0x5000459a
  1371.         push    esi
  1372.         cmp     cl,[.sprog2]
  1373.         jne     @f
  1374.         mov     esi,0x50cc0000
  1375. @@:     mcall   47,0x020100,,400*65536+24,,
  1376.         pop     esi
  1377.         add     edx,30*65536
  1378.         movzx   ecx,[.sprog]
  1379.         add     ecx,PMEM+26
  1380.         sub     ecx,[esp]
  1381.         movzx   ecx, byte [ecx]
  1382.         mcall
  1383.         sub     edx,30*65536
  1384. @@:     add     edx,11
  1385.         dec     dword [esp]
  1386.         jz      @f
  1387.         movzx   ecx, [.sprog]
  1388.         add     ecx,26
  1389.         sub     ecx,[esp]
  1390.         push    esi
  1391.         cmp     cl,[.sprog2]
  1392.         jne     .2
  1393.         mov     esi,0x50cc0000
  1394. .2:     mcall
  1395.         pop     esi
  1396.         add     edx,30*65536
  1397.         movzx   ecx,[.sprog]
  1398.         add     ecx,PMEM+26
  1399.         sub     ecx,[esp]
  1400.         movzx   ecx, byte [ecx]
  1401.         mcall
  1402.         sub     edx,30*65536
  1403.         jmp     @b
  1404. @@:     pop     eax
  1405. .ret:
  1406. ret
  1407. .sprog db 0
  1408. .sprog2 db 0
  1409.  
  1410.  
  1411.  
  1412.  
  1413.  
  1414. window_load_save:
  1415.         popad
  1416.         mcall   51,1,.thread,(.threat_stack+32*4)
  1417.         pushad
  1418.         ret
  1419. .thread:
  1420.         bts     [flags],26
  1421. .red:
  1422.         mcall   12,1
  1423.         mov     edi,txt.load
  1424.         bt      [flags],25
  1425.         jc      @f
  1426.         mov     edi,txt.save
  1427. @@:     mcall   0,50*65536+300,0x70*65536+60,(0x34ffffff),,
  1428.         mcall   8,<245,43>,<2,14>,100,0xaaaaaa
  1429.         mcall   4,<252,5>,(0x80000000),txt.enter
  1430.         push    dword edit2
  1431.         call    [edit_box_draw]
  1432.         mcall   12,2
  1433. .still:
  1434.         mcall   10
  1435.         dec     al
  1436.         jz      .red
  1437.         dec     al
  1438.         jz      .key
  1439.         dec     al
  1440.         jz      .button
  1441.         jmp     .still
  1442. .button:
  1443.         mcall   17,1
  1444.         cmp     ah,1
  1445.         jne     @f
  1446.   .end: btr     [flags],26
  1447.         mcall   -1
  1448.   @@:   cmp     ah,100
  1449.         jne     .still
  1450.         bt      [flags],25
  1451.         jc      .ld
  1452.   .sv:  call    save_prog
  1453.         jnc     .end
  1454.         jmp     .err
  1455.   .ld:  call    load_prog
  1456.         jnc     .end
  1457.   .err: mcall   4,<5,19>,(0x80000000),txt.error
  1458.         jmp     .still
  1459.  
  1460.  
  1461. .key:
  1462.         mcall   2
  1463.         cmp     ah,13
  1464.         jne     @f
  1465.         bt      [flags],25
  1466.         jc      .ld
  1467.         jmp     .sv
  1468.    @@:  cmp     ah,27
  1469.         je      .end
  1470.         push    dword edit2
  1471.         call    [edit_box_key]
  1472.         jmp     .still
  1473.  
  1474. .threat_stack: times 32 dd 0
  1475.  
  1476.  
  1477. save_prog:
  1478.         mov     [_size],256+8*(15+5)+6*3
  1479.         mcall   68,12,[_size]
  1480.         test    eax,eax
  1481.         jnz     @f
  1482.         stc
  1483.         ret
  1484.  
  1485. @@:     mov     [_buffer],eax
  1486.         mov     esi,S.X1
  1487.         mov     edi,eax
  1488.         mov     byte [edi],"<"
  1489.         mov     dword [edi+1],"СТЕК"
  1490.         mov     byte [edi+5],">"
  1491.         add     edi,6
  1492.         mov     ecx,5*2
  1493.         cld
  1494. @@:     movsd
  1495.         loop    @b
  1496.         mov     esi,R.0
  1497.         mov     byte [edi],"<"
  1498.         mov     dword [edi+1],"РГСТ"
  1499.         mov     byte [edi+5],">"
  1500.         add     edi,6
  1501.         mov     ecx,15*2
  1502.         cld
  1503. @@:     movsd
  1504.         loop    @b
  1505.         mov     esi,PMEM
  1506.         mov     byte [edi],"<"
  1507.         mov     dword [edi+1],"ПРГМ"
  1508.         mov     byte [edi+5],">"
  1509.         add     edi,6
  1510.         mov     ecx,256/4
  1511.         cld
  1512. @@:     movsd
  1513.         loop    @b
  1514.  
  1515.         mov     [func_70.func_n],2
  1516.         push    [_size]
  1517.         pop     [func_70.param3]
  1518.         push    [_buffer]
  1519.         pop     [func_70.param4]
  1520.         mov     [func_70.name],buf_cmd_lin
  1521.         mcall   70,func_70
  1522.         cmp     al,0                    ;сохранён удачно?
  1523.         je      @f
  1524.         mcall   68,13,[_buffer]
  1525.         stc
  1526.         ret
  1527. @@:     mcall   68,13,[_buffer]
  1528.         clc
  1529. ret
  1530.  
  1531. load_prog:
  1532.         mov     [func_70.func_n],5
  1533.         mov     [func_70.param3],0
  1534.         mov     [func_70.param4],bufferfinfo
  1535.         mov     [func_70.name],buf_cmd_lin
  1536.         mcall   70,func_70
  1537.         test    al,al           ;файл найден?
  1538.         jz      @f
  1539.         stc
  1540.         ret
  1541.   @@:   mov     eax, dword [bufferfinfo+32]     ;копируем размер файла
  1542.         cmp     eax,256+8*(15+5)+6*3
  1543.         jbe     @f
  1544.         stc
  1545.         ret
  1546.  
  1547. _size dd 0
  1548. _buffer dd 0
  1549.  
  1550. @@:     mov     [_size],eax
  1551.         mcall   68,12,[_size]
  1552.         test    eax,eax
  1553.         jnz     @f
  1554.         stc
  1555.         ret     ;ошибка на выделение блока
  1556.   @@:
  1557.         mov     [_buffer],eax
  1558.         mov     [func_70.func_n],0
  1559.         mov     [func_70.name],buf_cmd_lin
  1560.         push    dword [_size]
  1561.         pop     dword [func_70.param3]
  1562.         push    dword [_buffer]
  1563.         pop     dword [func_70.param4]
  1564.         mcall   70,func_70
  1565.         test    eax,eax
  1566.         jz      @f
  1567.         stc
  1568.         ret     ;ошибка чтения
  1569. @@:
  1570.  
  1571.         mov     esi,[_buffer]
  1572.         mov     ecx,[_size]
  1573. @@:     cmp     byte [esi],"<"
  1574.         je      .@f1
  1575.         inc     esi
  1576.         loop    @b
  1577. .end:   mcall   68,13,[_buffer]
  1578.         clc
  1579.         ret
  1580. .@f1:   inc     esi
  1581.         cmp     dword [esi],"СТЕК"
  1582.         je      .st
  1583.         cmp     dword [esi],"РГСТ"
  1584.         je      .rg
  1585.         cmp     dword [esi],"ПРГМ"
  1586.         je      .pr
  1587.         jmp     @b
  1588. .st:    mov     edi,S.X1
  1589.         add     esi,5
  1590.         mov     ebx,5*2*4
  1591.         cld
  1592.  .st@:  movsb
  1593.         cmp     byte [esi],"<"
  1594.         jne     .stB
  1595.         inc     esi
  1596.         cmp     dword [esi],"РГСТ"
  1597.         je      .rg
  1598.         cmp     dword [esi],"ПРГМ"
  1599.         je      .pr
  1600.         dec     esi
  1601.  .stB:  dec     ecx
  1602.         jz      .end
  1603.         dec     ebx
  1604.         jnz     .st@
  1605.         jmp     @b
  1606. .rg:    mov     edi,R.0
  1607.         add     esi,5
  1608.         mov     ebx,15*2*4
  1609.         cld
  1610.  .rg@:  movsb
  1611.         cmp     byte [esi],"<"
  1612.         jne     .rgB
  1613.         inc     esi
  1614.         cmp     dword [esi],"СТЕК"
  1615.         je      .st
  1616.         cmp     dword [esi],"ПРГМ"
  1617.         je      .pr
  1618.         dec     esi
  1619.  .rgB:  dec     ecx
  1620.         jz      .end
  1621.         dec     ebx
  1622.         jnz     .rg@
  1623.         jmp     @b
  1624. .pr:    mov     edi,PMEM
  1625.         mov     eax,0
  1626.         mov     ebx,256/4
  1627.  .pr0:  mov     [edi],eax
  1628.         add     edi,4
  1629.         dec     ebx
  1630.         jnz     .pr0
  1631.         mov     edi,PMEM
  1632.         add     esi,5
  1633.         mov     ebx,256
  1634.         cld
  1635.  .pr@:  movsb
  1636.         cmp     byte [esi],"<"
  1637.         jne     .prB
  1638.         inc     esi
  1639.         cmp     dword [esi],"СТЕК"
  1640.         je      .st
  1641.         cmp     dword [esi],"РГСТ"
  1642.         je      .rg
  1643.         dec     esi
  1644.  .prB:  dec     ecx
  1645.         jz      .end
  1646.         dec     ebx
  1647.         jnz     .pr@
  1648. jmp     @b
  1649.  
  1650.  
  1651.  
  1652.  
  1653.  
  1654.  
  1655. align 4
  1656.  
  1657. S:
  1658. .X1: dq 0.0
  1659. .X: dq 0.0
  1660. .Y: dq 0.0
  1661. .Z: dq 0.0
  1662. .T: dq 0.0
  1663.  
  1664. RS:
  1665. times 10 db 0
  1666.  
  1667. align 4
  1668. R:
  1669. .0: dq 0.0
  1670. .1: dq 0.0
  1671. .2: dq 0.0
  1672. .3: dq 0.0
  1673. .4: dq 0.0
  1674. .5: dq 0.0
  1675. .6: dq 0.0
  1676. .7: dq 0.0
  1677. .8: dq 0.0
  1678. .9: dq 0.0
  1679. .A: dq 0.0
  1680. .B: dq 0.0
  1681. .C: dq 0.0
  1682. .D: dq 0.0
  1683. .E: dq 0.0
  1684. .F: dq 0.0
  1685. dq 0.0
  1686.  
  1687.  
  1688. align 4
  1689. myimport:
  1690. edit_box_draw   dd      aEdit_box_draw
  1691. edit_box_key    dd      aEdit_box_key
  1692. edit_box_mouse  dd      aEdit_box_mouse
  1693. version_ed      dd      aVersion_ed
  1694.  
  1695. scrollbar_ver_draw      dd aScrollbar_ver_draw
  1696. scrollbar_ver_mouse     dd aScrollbar_ver_mouse
  1697. version_scrollbar       dd aVersion_scrollbar
  1698.  
  1699.                 dd      0
  1700.                 dd      0
  1701.  
  1702. aEdit_box_draw  db 'edit_box',0
  1703. aEdit_box_key   db 'edit_box_key',0
  1704. aEdit_box_mouse db 'edit_box_mouse',0
  1705. aVersion_ed     db 'version_ed',0
  1706.  
  1707. aScrollbar_ver_draw     db 'scrollbar_v_draw',0
  1708. aScrollbar_ver_mouse    db 'scrollbar_v_mouse',0
  1709. aVersion_scrollbar      db 'version_scrollbar',0
  1710.  
  1711. if 0
  1712.  
  1713. align 4
  1714. scroll_bar_data_vertical:
  1715. .x:
  1716. .size_x     dw 15;+0
  1717. .start_x    dw 455 ;+2
  1718. .y:
  1719. .size_y     dw 284 ;+4
  1720. .start_y    dw 19 ;+6
  1721. .btn_high   dd 15 ;+8
  1722. .type       dd 1  ;+12
  1723. .max_area   dd 300+20  ;+16
  1724. .cur_area   dd 50  ;+20
  1725. .position   dd 0  ;+24
  1726. .bckg_col   dd 0xAAAAAA ;+28
  1727. .frnt_col   dd 0xCCCCCC ;+32
  1728. .line_col   dd 0  ;+36
  1729. .redraw     dd 0  ;+40
  1730. .delta      dw 0  ;+44
  1731. .delta2     dw 0  ;+46
  1732. .run_x:
  1733. .r_size_x   dw 0  ;+48
  1734. .r_start_x  dw 0  ;+50
  1735. .run_y:
  1736. .r_size_y   dw 0 ;+52
  1737. .r_start_y  dw 0 ;+54
  1738. .m_pos      dd 0 ;+56
  1739. .m_pos_2    dd 0 ;+60
  1740. .m_keys     dd 0 ;+64
  1741. .run_size   dd 0 ;+68
  1742. .position2  dd 0 ;+72
  1743. .work_size  dd 0 ;+76
  1744. .all_redraw dd 0 ;+80
  1745. .ar_offset      dd 10 ;+84
  1746.  
  1747. endf
  1748.  
  1749. func_70:
  1750.  .func_n dd ?
  1751.  .param1 dd 0
  1752.  .param2 dd 0
  1753.  .param3 dd ?
  1754.  .param4 dd ?
  1755.  .rezerv db 0
  1756.  .name dd ?
  1757.  
  1758. flags dd _flags
  1759.  
  1760. _pause dd 10
  1761. string_zero db " 0           ",0
  1762. buf: times 10 db 0
  1763. perem dd 0
  1764. buf2: times 25 db 0
  1765. string: db " 0           ",0
  1766. buf3: times 25 db 0
  1767. schk db 0
  1768.  
  1769. title db appname,version,0
  1770.  
  1771. txt:
  1772. .save db 'Сохранить (Ctrl+S)',0
  1773. .error db 'Ошибка',0
  1774. .load db 'Загрузить (Ctrl+L)',0
  1775. .enter db 'Enter',0
  1776. .regs db "Регистры",0
  1777. .stk db "Стек",0
  1778. .perek db "Р ГРД Г >",0
  1779. .prog db "Программа",0
  1780. .prog1 db "Шаг Код",0
  1781. .sk db "СК:",0
  1782. .edbox db "  ",0
  1783.  
  1784. system_path db '/sys/lib/'
  1785. boxlib_name db 'box_lib.obj',0
  1786. head_f_i:
  1787. head_f_l        db 'error',0
  1788. err_message_found_lib   db 'box_lib.obj was not found',0
  1789. err_message_import      db 'box_lib.obj was not imported',0
  1790.  
  1791. edit1 edit_box 20,427,320,0xffffff,0x6a9480,0,0xAABBCC,0,2,txt.edbox,ed_focus,ed_focus,0,0
  1792. edit2 edit_box 240,2,2,0xffffff,0x6a9480,0,0xAABBCC,0,4096,buf_cmd_lin,ed_focus,2,0,0
  1793.  
  1794. virtual at 0
  1795. file 'MK_b3-34_hand.BMP':0xA,4
  1796. load offbits dword from 0
  1797. end virtual
  1798.  
  1799. palitra:
  1800.         file 'MK_b3-34_hand.BMP':0x36,offbits-0x36
  1801.  
  1802. sizey = 262
  1803. sizex = 185 + 7
  1804. smesh = 3
  1805.  
  1806. bmp_file:
  1807.     file 'MK_b3-34_hand.BMP':110
  1808. repeat sizey/2
  1809. y = % - 1
  1810. z = sizey - %
  1811. repeat sizex/2/4
  1812. load a dword from $ - sizex*sizey/2 + sizex*y/2+(%-1)*4
  1813. load b dword from $ - sizex*sizey/2 + sizex*z/2+(%-1)*4
  1814. store dword a at $ - sizex*sizey/2 + sizex*z/2+(%-1)*4
  1815. store dword b at $ - sizex*sizey/2 + sizex*y/2+(%-1)*4
  1816. end repeat
  1817. end repeat
  1818.  
  1819. sound_data:
  1820. db      40
  1821. dw      670
  1822. db 0
  1823.  
  1824. I_END:
  1825.  
  1826. sc     system_colors
  1827.  
  1828. procinfo:       rb 1024
  1829. buf_cmd_lin     rb 0
  1830. cur_dir_path    rb 4096
  1831.  
  1832.  
  1833. PMEM:   rb 256
  1834.  
  1835. bufferfinfo     rb 40
  1836. scin_height     rd 1
  1837.  
  1838. D_END: