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