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