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