Home | History | Annotate | Line # | Download | only in runtime
rtstr.c revision 1.1
      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