home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / tasm / chapxmpl.arc / STRINGUP.C < prev    next >
Encoding:
C/C++ Source or Header  |  1988-10-09  |  1.5 KB  |  68 lines

  1. #pragma    inline
  2. #include    <stdio.h>
  3.  
  4. /* Funktionsprototyp  für StringToUpper */
  5. extern    unsigned int    StringToUpper 
  6.         (
  7.         unsigned char far * Ziel, 
  8.         unsigned char far * Quelle
  9.         ) ;
  10.  
  11. #define    MAX_STRING_LENGTH    100
  12. char    *TestString = "Das ist ein String mit Kleinbuchstaben!" ;
  13. char    UpperCaseString [MAX_STRING_LENGTH] ;
  14.  
  15. main ()
  16.     {
  17.     unsigned int    StringLength ;
  18.  
  19.     StringLength = StringToUpper ( UpperCaseString, TestString ) ;
  20.     printf ( "Original-String:\n%s\n\n", TestString ) ;
  21.     printf ( "String in Großbuchstaben:\n%s\n\n", UpperCaseString ) ;
  22.     printf ( "Anzahl an Zeichen: %d\n\n", StringLength ) ;
  23.     }
  24.  
  25. /*
  26.     Funktion für eine superschnelle Umwandlung von einem String
  27.     in Großbuchstaben
  28.  
  29.     Eingabewerte:
  30.         Ziel    -        Array, in dem der String mit Großbuchstaben
  31.                     gespeichert wird (ASCIIZ)
  32.         Quelle    -    Array in dem Der string mit Kleinbuchstaben
  33.                     vorliegt
  34.  
  35.     Ergebnis:
  36.         Die Länge des Strings in Zeichen ohne NUL
  37. */
  38. unsigned int    StringToUpper        (    unsigned char far * Ziel,
  39.                                 unsigned char far * Quelle)
  40.     {
  41.     unsigned int    AnzahlZeichen ;
  42.  
  43. #define    KLEINES_A    'a'
  44. #define    KLEINES_Z    'z'
  45.     
  46.     asm    KORREKTUR_WERT    EQU    20h ;
  47.     asm    cld ;
  48.     asm    push    ds ;
  49.     asm    lds    si,Quelle ;
  50.     asm    les    di,Ziel ;
  51.     AnzahlZeichen = 0 ;
  52. Schleife:
  53.     asm    lodsb ;
  54.     asm    cmp    al,KLEINES_A ;
  55.     asm    jb    ZeichenSpeichern ;
  56.     asm    cmp    al,KLEINES_Z ;
  57.     asm    ja    ZeichenSpeichern ;
  58.     asm    sub    al,KORREKTUR_WERT ;
  59. ZeichenSpeichern:
  60.     asm    stosb ;
  61.     AnzahlZeichen++ ;
  62.     asm    and    al,al ;
  63.     asm    jnz    Schleife ;
  64.     AnzahlZeichen-- ;
  65.     asm     pop    ds ;
  66.     return    (AnzahlZeichen) ;
  67.     }
  68.