• Viernes 8 de Noviembre de 2024, 23:13

Autor Tema:  Str2morse  (Leído 1511 veces)

Enko

  • Miembro de PLATA
  • *****
  • Mensajes: 1562
  • Nacionalidad: 00
    • Ver Perfil
Str2morse
« en: Miércoles 18 de Abril de 2007, 00:21 »
0
Lo que hace el programa es convertir una cadena de caracteres al codigo morse.
Se me ocurió hacerlo por:
http://foros.solocodigo.com/index.php?showtopic=28012

La cadena entrada solo debe contener mayusculas y espacios, los otros caracteres serán ignorados. Como estoy en el trabajo y no encontré la funcion para pasar de minusculas a mayusculas, y mia no quice hacer. (en la msvcrt hay una, pero bue...)

Lo hice porque vi la solucion en JavaScript de una pagina que hacía unos 30 ifs..... no se como que no da
Código: Text
  1.  
  2. format PE GUI 4.0
  3. entry start
  4.  
  5. include '..\include\win32a.inc'
  6.  
  7. section '.data' data readable writeable
  8.    hInstance    dd 0
  9.    szString     db 1024 dup 0   &#59;cadena salida
  10.    szMessage    db 'AAA AAA', 0 &#59;solo mayusculas señores
  11.    szFormat     db '%s%s', 0
  12.    szSpace      db '|',0
  13.    length       dd 0
  14.   &#59;vector con cadenas de letras de morse alineado a 8 bytes
  15.    szMorse      db '.- ',0 ,0,0,0,0,\&#59;A 0
  16.                    '-... ',0,0,0,\&#59;B 1
  17.                    '-.-. ',0,0,0,\&#59;C 2
  18.                    '-.. ',0,0,0,0,\&#59;D 3
  19.                    '. ',0,0,0,0,0,0,\&#59;E 4
  20.                    '..-. ',0,0,0,\&#59;F 5
  21.                    '--. ',0,0,0,0,\&#59;G 6
  22.                    '.... ',0,0,0,\&#59;H 7
  23.                    '.. ',0,0,0,0,0,\&#59;I 8
  24.                    '.--- ',0,0,0,\&#59;J 9
  25.                    '-.- ',0,0,0,0,\&#59;K 10
  26.                    '.-.. ',0,0,0,\&#59;L 11
  27.                    '-- ',0,0,0,0,0,\&#59;M 12
  28.                    '-. ',0,0,0,0,0,\&#59;N 13
  29.                    '--- ',0,0,0,0,\&#59;0 14
  30.                    '.--. ',0,0,0,\&#59;P 15
  31.                    '--.- ',0,0,0,\&#59;Q 16
  32.                    '.-. ',0,0,0,0,\&#59;R 17
  33.                    '... ',0,0,0,0,\&#59;S 18
  34.                    '- ',0,0,0,0,0,0,\&#59;T 19
  35.                    '..- ',0,0,0,0,\&#59;U 20
  36.                    '...- ',0,0,0,\&#59;V 21
  37.                    '.-- ',0,0,0,0,\&#59;W 22
  38.                    '-..- ',0,0,0,\&#59;X 23
  39.                    '-.-- ',0,0,0,\&#59;Y 24
  40.                    '--.. ',0,0,0  &#59;Z
  41.  
  42. section '.code' data readable
  43.  
  44.   start:
  45.  
  46.         invoke  GetModuleHandle,0
  47.         mov     [hInstance], eax
  48.         stdcall str2morse, szMessage, szString
  49.         invoke  MessageBox, 0, szString, szMessage, MB_OK
  50.         invoke  ExitProcess,0
  51.  
  52.  
  53. proc  str2morse strin, strout
  54.       push esi edi ebx
  55.      &#59;tamaño cadena entrada
  56.       invoke lstrlen, [strin]
  57.       mov    [length], eax
  58.       xor    ebx, ebx
  59.       mov    esi, [strin]
  60.       mov    edi, [strout]
  61.   for_i:
  62.       mov    eax, [esi + ebx]
  63.       and    eax, 0x000000FF
  64.  
  65.      &#59;aca iria una funcion tipo StrUpper
  66.  
  67.      &#59;verificamos si es un espacio, si lo es se imprime una barra
  68.       cmp    eax, 32
  69.       jne    notspace
  70.       invoke wsprintf, edi, szFormat, [strout], szSpace
  71.     notspace:
  72.      &#59;verificamos que este entre A..Z
  73.       cmp    eax, 65
  74.       jl     next
  75.       cmp    eax, 90
  76.       jg     next
  77.  
  78.      &#59;como la letra A es 65 y el arreglo comienza desde 0
  79.      &#59;se resta 65
  80.       sub    eax, 65
  81.      &#59;multiplicamos por 8 porque esta alineado a 8
  82.       imul   eax, 8
  83.       lea    edx, [szMorse+ eax]
  84.      &#59;strSalida = strSalida + ChrToMorse(strEntrada[ebx]);
  85.       invoke wsprintf, edi, szFormat, [strout], edx
  86.   next:
  87.      &#59;cosas del bucle
  88.       inc     ebx
  89.       cmp     ebx, [length]
  90.       jle     for_i
  91.       xor     eax, eax
  92.   end_for:
  93.       pop  ebx edi esi
  94.       ret
  95. endp
  96.  
  97. section '.idata' import data readable writeable
  98.  
  99.   library kernel32,'KERNEL32.DLL',\
  100.           user32,'USER32.DLL'
  101.   include '..\include\api\kernel32.inc'
  102.   include '..\include\api\user32.inc'      
  103.  
  104.  

Bicholey

  • Moderador
  • ******
  • Mensajes: 1234
    • Ver Perfil
Re: Str2morse
« Respuesta #1 en: Miércoles 18 de Abril de 2007, 01:50 »
0
:blink:  :smartass:  :rolleyes:  :huh:

Ahora ya todos podremos participar en el dicho foro y colocar nuestras opiniones en morse...


Hablando de tonterias que no seria buena idea eso de subir programas hechos para que los usuarios del foro ya no estuvieran pidiendo, no tienen un programa de esto de lo otro de aquello, de seguro muchos de nosotros no tenemos mas que programas ociosos que no hace nada importante pero son muy didacticos...
[size=109]LOS GATOS SIEMPRE CAEMOS DE PIE !!![/size]