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