Home | History | Annotate | Download | only in runtime
      1 /*++
      2 
      3 Copyright (c) 1998  Intel Corporation
      4 
      5 Module Name:
      6 
      7     str.c
      8 
      9 Abstract:
     10 
     11     String runtime functions
     12 
     13 
     14 Revision History
     15 
     16 --*/
     17 
     18 #include "lib.h"
     19 
     20 #ifndef __GNUC__
     21 #pragma RUNTIME_CODE(RtAcquireLock)
     22 #endif
     23 INTN
     24 RUNTIMEFUNCTION
     25 RtStrCmp (
     26     IN CONST CHAR16   *s1,
     27     IN CONST CHAR16   *s2
     28     )
     29 // compare strings
     30 {
     31     while (*s1) {
     32         if (*s1 != *s2) {
     33             break;
     34         }
     35 
     36         s1 += 1;
     37         s2 += 1;
     38     }
     39 
     40     return *s1 - *s2;
     41 }
     42 
     43 #ifndef __GNUC__
     44 #pragma RUNTIME_CODE(RtStrCpy)
     45 #endif
     46 VOID
     47 RUNTIMEFUNCTION
     48 RtStrCpy (
     49     IN CHAR16   *Dest,
     50     IN CONST CHAR16   *Src
     51     )
     52 // copy strings
     53 {
     54     while (*Src) {
     55         *(Dest++) = *(Src++);
     56     }
     57     *Dest = 0;
     58 }
     59 
     60 #ifndef __GNUC__
     61 #pragma RUNTIME_CODE(RtStrCat)
     62 #endif
     63 VOID
     64 RUNTIMEFUNCTION
     65 RtStrCat (
     66     IN CHAR16   *Dest,
     67     IN CONST CHAR16   *Src
     68     )
     69 {
     70     RtStrCpy(Dest+StrLen(Dest), Src);
     71 }
     72 
     73 #ifndef __GNUC__
     74 #pragma RUNTIME_CODE(RtStrLen)
     75 #endif
     76 UINTN
     77 RUNTIMEFUNCTION
     78 RtStrLen (
     79     IN CONST CHAR16   *s1
     80     )
     81 // string length
     82 {
     83     UINTN        len;
     84 
     85     for (len=0; *s1; s1+=1, len+=1) ;
     86     return len;
     87 }
     88 
     89 #ifndef __GNUC__
     90 #pragma RUNTIME_CODE(RtStrSize)
     91 #endif
     92 UINTN
     93 RUNTIMEFUNCTION
     94 RtStrSize (
     95     IN CONST CHAR16   *s1
     96     )
     97 // string size
     98 {
     99     UINTN        len;
    100 
    101     for (len=0; *s1; s1+=1, len+=1) ;
    102     return (len + 1) * sizeof(CHAR16);
    103 }
    104 
    105 #ifndef __GNUC__
    106 #pragma RUNTIME_CODE(RtBCDtoDecimal)
    107 #endif
    108 UINT8
    109 RUNTIMEFUNCTION
    110 RtBCDtoDecimal(
    111     IN  UINT8 BcdValue
    112     )
    113 {
    114     UINTN   High, Low;
    115 
    116     High    = BcdValue >> 4;
    117     Low     = BcdValue - (High << 4);
    118 
    119     return ((UINT8)(Low + (High * 10)));
    120 }
    121 
    122 
    123 #ifndef __GNUC__
    124 #pragma RUNTIME_CODE(RtDecimaltoBCD)
    125 #endif
    126 UINT8
    127 RUNTIMEFUNCTION
    128 RtDecimaltoBCD (
    129     IN  UINT8 DecValue
    130     )
    131 {
    132     UINTN   High, Low;
    133 
    134     High    = DecValue / 10;
    135     Low     = DecValue - (High * 10);
    136 
    137     return ((UINT8)(Low + (High << 4)));
    138 }
    139 
    140 
    141