азбука морзе

Discussion in 'WASM.BEGINNERS' started by edemko, May 28, 2011.

  1. edemko

    edemko New Member

    Blog Posts:
    0
    Joined:
    Nov 25, 2009
    Messages:
    454
    одногрупник просил помощи...
    Code (Text):
    1. format pe gui 4.0
    2. include 'win32ax.inc'
    3.  
    4. section '' code executable import readable writable
    5. library kernel32,'kernel32.dll',\
    6.         user32,'user32.dll'
    7. include 'api\kernel32.inc'
    8. include 'api\user32.inc'
    9.  
    10. entry $
    11.         invoke  DialogBoxParamA,0,IDD_DLG1,0,dlg1,0
    12.         invoke  ExitProcess,eax
    13.  
    14. proc dlg1 .wnd,.msg,.wparam,.lparam
    15.         mov     eax,[.msg]
    16.         .if     eax=WM_CLOSE
    17.                 invoke  EndDialog,[.wnd],eax
    18.         .elseif eax=WM_COMMAND
    19.                 mov     eax,[.wparam]
    20.                 .if     eax=BN_CLICKED shl 16 + IDC_BTN1
    21.                         invoke  GetDlgItemTextA,[.wnd],IDC_TXT1,text1,text1.-text1
    22.                         call    code1
    23.                         invoke  SetDlgItemTextA,[.wnd],IDC_TXT2,text2
    24.                 .elseif eax=BN_CLICKED shl 16 + IDC_BTN2
    25.                         invoke  GetDlgItemTextA,[.wnd],IDC_TXT2,text2,text2.-text2
    26.                         call    code2
    27.                         .if     CARRY?
    28.                                 sub     ebx,text2-1
    29.                                 push    ebx
    30.                                 dec     ebx
    31.                                 push    ebx
    32.                                 invoke  SendDlgItemMessageA,[.wnd],IDC_TXT2,EM_SETSEL;,ebx,ebx+1
    33.                                 invoke  MessageBoxA,[.wnd],'шо то було :)',0,MB_ICONASTERISK
    34.                                 jmp     .retz
    35.                         .endif
    36.                         invoke  SetDlgItemTextA,[.wnd],IDC_TXT1,text1
    37.                 .endif
    38.         .endif
    39. .retz:  sub     eax,eax
    40.         ret
    41. endp
    42.  
    43.  
    44. code1:  cld
    45.         mov     edi,text2
    46.         mov     ebx,text1-1
    47.   .loop:inc     ebx
    48.         movzx   eax,byte[ebx]
    49.         cmp     al,0
    50.         jne     .nz
    51.         stosb
    52.         ret     0
    53.   .nz:  lea     eax,[table+eax*8]
    54.         mov     ecx,[eax]
    55.         mov     esi,[eax+4]
    56.         rep     movsb
    57.         jmp     .loop
    58.  
    59. code2:  ;hlt
    60.         cld
    61.         mov     edi,text1
    62.         mov     ebx,text2
    63.   .loop:cmp     byte[ebx],0
    64.         jne     .nz
    65.         mov     byte[edi],0
    66.         ret     0
    67.   .nz:  mov     eax,table
    68.         mov     edx,eax
    69.   .find_biggest_key:
    70.         add     edx,8
    71.         cmp     edx,table+256*8
    72.         ja      .keys_inspected
    73.         mov     ecx,[edx]
    74.         cmp     ecx,[eax]
    75.         jna     .find_biggest_key
    76.         lea     esi,[ebx+ecx]
    77.         cmp     esi,text2.
    78.         jae     .find_biggest_key
    79.         sub     esi,ecx
    80.         push    edi
    81.         mov     edi,[edx+4]
    82.         repe    cmpsb
    83.         pop     edi
    84.         jne     .find_biggest_key
    85.         mov     eax,edx
    86.         jmp     .find_biggest_key
    87.   .keys_inspected:
    88.         cmp     eax,table
    89.         ja      .found_biggest_key
    90.         stc
    91.         ret     0
    92.   .found_biggest_key:
    93.         add     ebx,[eax]
    94.         sub     eax,table
    95.         shr     eax,3
    96.         stosb
    97.         jmp     .loop
    98.  
    99. table:  macro _[strings]{
    100. common
    101.   local cell,last$
    102.   cell=table
    103.   rq 256
    104. forward
    105.   last$=$
    106.   db strings
    107.   store qword last$ shl 32 + $-last$ at cell
    108.   cell=cell+8
    109. }
    110. _\
    111.   ''        ,\;000
    112.   ''        ,\;001
    113.   ''        ,\;002
    114.   ''        ,\;003
    115.   ''        ,\;004
    116.   ''        ,\;005
    117.   ''        ,\;006
    118.   ''        ,\;007
    119.   ''        ,\;008
    120.   ''        ,\;009
    121.   10        ,\;010
    122.   ''        ,\;011
    123.   ''        ,\;012
    124.   13        ,\;013
    125.   ''        ,\;014
    126.   ''        ,\;015
    127.   ''        ,\;016
    128.   ''        ,\;017
    129.   ''        ,\;018
    130.   ''        ,\;019
    131.   ''        ,\;020
    132.   ''        ,\;021
    133.   ''        ,\;022
    134.   ''        ,\;023
    135.   ''        ,\;024
    136.   ''        ,\;025
    137.   ''        ,\;026
    138.   ''        ,\;027
    139.   ''        ,\;028
    140.   ''        ,\;029
    141.   ''        ,\;030
    142.   ''        ,\;031
    143.   '  '      ,\;032 = ' '
    144.   '--..-- ' ,\;033 = '!'
    145.   '.-..-. ' ,\;034 = '"'
    146.   ''        ,\;035 = '#'
    147.   ''        ,\;036 = '$'
    148.   ''        ,\;037 = '%'
    149.   ''        ,\;038 = '&'
    150.   '.----. ' ,\;039 = '''
    151.   ''        ,\;040 = '('
    152.   ''        ,\;041 = ')'
    153.   ''        ,\;042 = '*'
    154.   ''        ,\;043 = '+'
    155.   '.-.-.- ' ,\;044 = ','
    156.   '-....- ' ,\;045 = '-'
    157.   '...... ' ,\;046 = '.'
    158.   '-..-. '  ,\;047 = '/'
    159.   '----- '  ,\;048 = '0'
    160.   '.---- '  ,\;049 = '1'
    161.   '..--- '  ,\;050 = '2'
    162.   '...-- '  ,\;051 = '3'
    163.   '....- '  ,\;052 = '4'
    164.   '..... '  ,\;053 = '5'
    165.   '-.... '  ,\;054 = '6'
    166.   '--... '  ,\;055 = '7'
    167.   '---.. '  ,\;056 = '8'
    168.   '----. '  ,\;057 = '9'
    169.   '---... ' ,\;058 = ':'
    170.   '-.-.-. ' ,\;059 = ';'
    171.   ''        ,\;060 = '<'
    172.   ''        ,\;061 = '='
    173.   ''        ,\;062 = '>'
    174.   '..--.. ' ,\;063 = '?'
    175.   '.--.-. ' ,\;064 = '@'
    176.   '.- '     ,\;065 = 'A'
    177.   '-... '   ,\;066 = 'B'
    178.   '-.-. '   ,\;067 = 'C'
    179.   '-.. '    ,\;068 = 'D'
    180.   '. '      ,\;069 = 'E'
    181.   '..-. '   ,\;070 = 'F'
    182.   '--. '    ,\;071 = 'G'
    183.   '.... '   ,\;072 = 'H'
    184.   '.. '     ,\;073 = 'I'
    185.   '.--- '   ,\;074 = 'J'
    186.   '-.- '    ,\;075 = 'K'
    187.   '.-.. '   ,\;076 = 'L'
    188.   '-- '     ,\;077 = 'M'
    189.   '-. '     ,\;078 = 'N'
    190.   '--- '    ,\;079 = 'O'
    191.   '.--. '   ,\;080 = 'P'
    192.   '--.- '   ,\;081 = 'Q'
    193.   '.-. '    ,\;082 = 'R'
    194.   '... '    ,\;083 = 'S'
    195.   '- '      ,\;084 = 'T'
    196.   '..- '    ,\;085 = 'U'
    197.   '...- '   ,\;086 = 'V'
    198.   '.-- '    ,\;087 = 'W'
    199.   '-..- '   ,\;088 = 'X'
    200.   '-.-- '   ,\;089 = 'Y'
    201.   '--.. '   ,\;090 = 'Z'
    202.   ''        ,\;091 = '['
    203.   ''        ,\;092 = '\'
    204.   ''        ,\;093 = ']'
    205.   ''        ,\;094 = '^'
    206.   ''        ,\;095 = '_'
    207.   ''        ,\;096 = '`'
    208.   '.- '     ,\;097 = 'a'
    209.   '-... '   ,\;098 = 'b'
    210.   '-.-. '   ,\;099 = 'c'
    211.   '-.. '    ,\;100 = 'd'
    212.   '. '      ,\;101 = 'e'
    213.   '..-. '   ,\;102 = 'f'
    214.   '--. '    ,\;103 = 'g'
    215.   '.... '   ,\;104 = 'h'
    216.   '.. '     ,\;105 = 'i'
    217.   '.--- '   ,\;106 = 'j'
    218.   '-.- '    ,\;107 = 'k'
    219.   '.-.. '   ,\;108 = 'l'
    220.   '-- '     ,\;109 = 'm'
    221.   '-. '     ,\;110 = 'n'
    222.   '--- '    ,\;111 = 'o'
    223.   '.--. '   ,\;112 = 'p'
    224.   '--.- '   ,\;113 = 'q'
    225.   '.-. '    ,\;114 = 'r'
    226.   '... '    ,\;115 = 's'
    227.   '- '      ,\;116 = 't'
    228.   '..- '    ,\;117 = 'u'
    229.   '...- '   ,\;118 = 'v'
    230.   '.-- '    ,\;119 = 'w'
    231.   '-..- '   ,\;120 = 'x'
    232.   '-.-- '   ,\;121 = 'y'
    233.   '--.. '   ,\;122 = 'z'
    234.   ''        ,\;123 = '{'
    235.   ''        ,\;124 = '|'
    236.   ''        ,\;125 = '}'
    237.   ''        ,\;126 = '~'
    238.   ''        ,\;127 = ''
    239.   ''        ,\;128 = 'Ђ'
    240.   ''        ,\;129 = 'Ѓ'
    241.   ''        ,\;130 = '‚'
    242.   ''        ,\;131 = 'ѓ'
    243.   ''        ,\;132 = '„'
    244.   ''        ,\;133 = '…'
    245.   ''        ,\;134 = '†'
    246.   ''        ,\;135 = '‡'
    247.   ''        ,\;136 = '?'
    248.   ''        ,\;137 = '‰'
    249.   ''        ,\;138 = 'Љ'
    250.   ''        ,\;139 = '‹'
    251.   ''        ,\;140 = 'Њ'
    252.   ''        ,\;141 = 'Ќ'
    253.   ''        ,\;142 = 'Ћ'
    254.   ''        ,\;143 = 'Џ'
    255.   ''        ,\;144 = 'ђ'
    256.   ''        ,\;145 = '‘'
    257.   ''        ,\;146 = '’'
    258.   ''        ,\;147 = '“'
    259.   ''        ,\;148 = '”'
    260.   ''        ,\;149 = '•'
    261.   ''        ,\;150 = '–'
    262.   ''        ,\;151 = '—'
    263.   ''        ,\;152 = '˜'
    264.   ''        ,\;153 = '™'
    265.   ''        ,\;154 = 'љ'
    266.   ''        ,\;155 = '›'
    267.   ''        ,\;156 = 'њ'
    268.   ''        ,\;157 = 'ќ'
    269.   ''        ,\;158 = 'ћ'
    270.   ''        ,\;159 = 'џ'
    271.   ''        ,\;160 = ' '
    272.   ''        ,\;161 = 'Ў'
    273.   ''        ,\;162 = 'ў'
    274.   ''        ,\;163 = 'Ј'
    275.   ''        ,\;164 = '¤'
    276.   ''        ,\;165 = 'Ґ'
    277.   ''        ,\;166 = '¦'
    278.   ''        ,\;167 = '§'
    279.   ''        ,\;168 = 'Ё'
    280.   ''        ,\;169 = '©'
    281.   ''        ,\;170 = 'Є'
    282.   ''        ,\;171 = '«'
    283.   ''        ,\;172 = '¬'
    284.   ''        ,\;173 = '­'
    285.   ''        ,\;174 = '®'
    286.   ''        ,\;175 = 'Ї'
    287.   ''        ,\;176 = '°'
    288.   ''        ,\;177 = '±'
    289.   '.. '     ,\;178 = 'І'
    290.   '.. '     ,\;179 = 'і'
    291.   ''        ,\;180 = 'ґ'
    292.   ''        ,\;181 = 'µ'
    293.   ''        ,\;182 = '¶'
    294.   ''        ,\;183 = '·'
    295.   ''        ,\;184 = 'ё'
    296.   ''        ,\;185 = '№'
    297.   ''        ,\;186 = 'є'
    298.   ''        ,\;187 = '»'
    299.   ''        ,\;188 = 'ј'
    300.   ''        ,\;189 = 'Ѕ'
    301.   ''        ,\;190 = 'ѕ'
    302.   ''        ,\;191 = 'ї'
    303.   '.- '     ,\;192 = 'А'
    304.   '-... '   ,\;193 = 'Б'
    305.   '.-- '    ,\;194 = 'В'
    306.   '--. '    ,\;195 = 'Г'
    307.   '-.. '    ,\;196 = 'Д'
    308.   '. '      ,\;197 = 'Е'
    309.   '...- '   ,\;198 = 'Ж'
    310.   '--.. '   ,\;199 = 'З'
    311.   '.. '     ,\;200 = 'И'
    312.   '.--- '   ,\;201 = 'Й'
    313.   '-.- '    ,\;202 = 'К'
    314.   '.-.. '   ,\;203 = 'Л'
    315.   '-- '     ,\;204 = 'М'
    316.   '-. '     ,\;205 = 'Н'
    317.   '--- '    ,\;206 = 'О'
    318.   '.--. '   ,\;207 = 'П'
    319.   '.-. '    ,\;208 = 'Р'
    320.   '... '    ,\;209 = 'С'
    321.   '- '      ,\;210 = 'Т'
    322.   '..- '    ,\;211 = 'У'
    323.   '..-. '   ,\;212 = 'Ф'
    324.   '.... '   ,\;213 = 'Х'
    325.   '-.-. '   ,\;214 = 'Ц'
    326.   '---. '   ,\;215 = 'Ч'
    327.   '---- '   ,\;216 = 'Ш'
    328.   '--.- '   ,\;217 = 'Щ'
    329.   '--.-- '  ,\;218 = 'Ъ'
    330.   '-.-- '   ,\;219 = 'Ы'
    331.   '-..- '   ,\;220 = 'Ь'
    332.   '..-.. '  ,\;221 = 'Э'
    333.   '..-- '   ,\;222 = 'Ю'
    334.   '.-.- '   ,\;223 = 'Я'
    335.   '.- '     ,\;224 = 'а'
    336.   '-... '   ,\;225 = 'б'
    337.   '.-- '    ,\;226 = 'в'
    338.   '--. '    ,\;227 = 'г'
    339.   '-.. '    ,\;228 = 'д'
    340.   '. '      ,\;229 = 'е'
    341.   '...- '   ,\;230 = 'ж'
    342.   '--.. '   ,\;231 = 'з'
    343.   '.. '     ,\;232 = 'и'
    344.   '.--- '   ,\;233 = 'й'
    345.   '-.- '    ,\;234 = 'к'
    346.   '.-.. '   ,\;235 = 'л'
    347.   '-- '     ,\;236 = 'м'
    348.   '-. '     ,\;237 = 'н'
    349.   '--- '    ,\;238 = 'о'
    350.   '.--. '   ,\;239 = 'п'
    351.   '.-. '    ,\;240 = 'р'
    352.   '... '    ,\;241 = 'с'
    353.   '- '      ,\;242 = 'т'
    354.   '..- '    ,\;243 = 'у'
    355.   '..-. '   ,\;244 = 'ф'
    356.   '.... '   ,\;245 = 'х'
    357.   '-.-. '   ,\;246 = 'ц'
    358.   '---. '   ,\;247 = 'ч'
    359.   '---- '   ,\;248 = 'ш'
    360.   '--.- '   ,\;249 = 'щ'
    361.   '--.-- '  ,\;250 = 'ъ'
    362.   '-.-- '   ,\;251 = 'ы'
    363.   '-..- '   ,\;252 = 'ь'
    364.   '..-.. '  ,\;253 = 'э'
    365.   '..-- '   ,\;254 = 'ю'
    366.   '.-.- '     ;255 = 'я'
    367. purge _
    368.  
    369.  
    370. display 13,10,'заготовка:'
    371. repeat 255
    372.   display 13,10,"  ''        ,\;", %/100+'0', (%/10) mod 10 +'0', % mod 10 + '0'
    373.   if %>=' '
    374.     display " = '",%,"'"
    375.   end if
    376. end repeat
    377.  
    378.  
    379.  
    380.  
    381. text1 rb 4096
    382.   .:
    383. text2: rb (text1.-text1)*10
    384.   .:
    385.  
    386.  
    387.  
    388.  
    389.  
    390. section '' resource readable
    391. IDD_DLG1 = 0
    392. IDC_TXT1 = 1
    393. IDC_TXT2 = 2
    394. IDC_BTN1 = 3
    395. IDC_BTN2 = 4
    396.  
    397. directory RT_DIALOG,dialogs
    398.  
    399. resource dialogs,\
    400.          IDD_DLG1,0,idd_dlg1
    401.  
    402. dialog idd_dlg1,'MORZE',40,40,344,202,WS_CAPTION+WS_SYSMENU+WS_MINIMIZEBOX,,,'courier new',8
    403.   dialogitem 'edit'   ,''   ,IDC_TXT1 ,4,8,288,90    ,             ES_MULTILINE+ES_WANTRETURN+WS_BORDER+WS_CHILD+WS_TABSTOP+WS_VSCROLL+WS_VISIBLE
    404.   dialogitem 'edit'   ,''   ,IDC_TXT2 ,4,101,288,90  ,ES_NOHIDESEL+ES_MULTILINE+ES_WANTRETURN+WS_BORDER+WS_CHILD+WS_TABSTOP+WS_VSCROLL+WS_VISIBLE
    405.   dialogitem 'button' ,'>>' ,IDC_BTN1 ,296,73,43,25  ,WS_CHILD+WS_TABSTOP+WS_VISIBLE
    406.   dialogitem 'button' ,'<<' ,IDC_BTN2 ,296,104,43,25 ,WS_CHILD+WS_TABSTOP+WS_VISIBLE
    407. enddialog
     
  2. qqwe

    qqwe New Member

    Blog Posts:
    0
    Joined:
    Jan 2, 2009
    Messages:
    2,914
    шо цэ?

    unsigned morze[256] = {
    // ...
    };

    int a2morze(char a, char* out, int out_len){
    unsigned i, m;
    m = morze[a & 0xff];
    for(i = 0; m != 0 && out_len > 0; m >>= 1, out_len--, i++, out++)
    *out = m & 1 ? '-' : '.';
    *out = 0;
    return i;
    }
     
  3. _sheva740

    _sheva740 New Member

    Blog Posts:
    0
    Joined:
    Aug 31, 2005
    Messages:
    1,539
    Location:
    Poland
    Спасибо.