This is what I use and it works correctly:

AsciiPrint("%a",Variable);

Thanks,
Evan

-----Original Message-----
From: Andrew Fish [mailto:af...@apple.com] 
Sent: Monday, March 25, 2013 4:22 PM
To: edk2-devel@lists.sourceforge.net
Subject: Re: [edk2] AsciiPrint() and %s

Print() is a Unicode format string. AsciiPrint() is an Ascii format string.  
UEFI strings are all Unicode, so %s defaults to Unicode. 

Print(L"Hello World");
AsciiPrint ("Hello World");

The %types are the same in both cases you can get more info at:
https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2/MdePkg/Include/Library/PrintLib.h
 

  The Print Library functions provide a simple means to produce formatted output
  strings.  Many of the output functions use a format string to describe how to
  format the output of variable arguments.  The format string consists of normal
  text and argument descriptors.  There are no restrictions for how the normal
  text and argument descriptors can be mixed.  The following end of line(EOL)
  translations must be performed on the contents of the format string:
  
     - '\\r' is translated to '\\r'
     - '\\r\\n' is translated to '\\r\\n'
     - '\\n' is translated to '\\r\\n' 
     - '\\n\\r' is translated to '\\r\\n'
  
  This does not follow the ANSI C standard for sprint().  The format of argument
  descriptors is described below.  The ANSI C standard for sprint() has been
  followed for some of the format types, and has not been followed for others.  
  The exceptions are noted below.

    %[flags][width][.precision]type

  [flags]:
    - -       
      - The field is left justified.  If not flag is not specified, then the 
        field is right justified.
    - space   
      - Prefix a space character to a number.  Only valid for types X, x, and d.
    - + 
      - Prefix a plus character to a number.  Only valid for types X, x, and d. 
 
        If both space and + are specified, then space is ignored.
    - 0
      - Pad with 0 characters to the left of a number.  Only valid for types 
        X, x, and d.
    - ,
      - Place a comma every 3rd digit of the number.  Only valid for type d.
        If 0 is also specified, then 0 is ignored.
    - L, l
      - The number being printed is a UINT64.  Only valid for types X, x, and d.
        If this flag is not specified, then the number being printed is a int.
    - NOTE: All invalid flags are ignored.

  [width]:

    - *
      - The width of the field is specified by a UINTN argument in the 
        argument list.
    - number
      - The number specified as a decimal value represents the width of 
        the field.
    - NOTE: If [width] is not specified, then a field width of 0 is assumed.

  [.precision]:

    - *
      - The precision of the field is specified by a UINTN argument in the 
        argument list.
    - number
      - The number specified as a decimal value represents the precision of 
        the field.
    - NOTE: If [.precision] is not specified, then a precision of 0 is assumed.

  type:

    - %
      - Print a %%.
    - c
      - The argument is a Unicode character.  ASCII characters can be printed 
        using this type too by making sure bits 8..15 of the argument are set 
to 0.
    - x
      - The argument is a hexadecimal number.  The characters used are 0..9 and 
        A..F.  If the flag 'L' is not specified, then the argument is assumed 
        to be an int.  This does not follow ANSI C.
    - X
      - The argument is a hexadecimal number and the number is padded with 
        zeros.  This is equivalent to a format string of "0x". If the flag 
        'L' is not specified, then the argument is assumed to be an int.  
        This does not follow ANSI C.
    - d
      - The argument is a decimal number.  If the flag 'L' is not specified, 
        then the argument is assumed to be an int.  
    - p
      - The argument is a pointer that is a (VOID *), and it is printed as a 
        hexadecimal number  The characters used are 0..9 and A..F.
    - a
      - The argument is a pointer to an ASCII string.  
        This does not follow ANSI C.
    - S, s
      - The argument is a pointer to a Unicode string.  
        This does not follow ANSI C.
    - g
      - The argument is a pointer to a GUID structure.  The GUID is printed 
        in the format XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX.  
        This does not follow ANSI C.
    - t
      - The argument is a pointer to an EFI_TIME structure.  The time and 
        date are printed in the format "mm/dd/yyyy hh:mm" where mm is the 
        month zero padded, dd is the day zero padded, yyyy is the year zero 
        padded, hh is the hour zero padded, and mm is minutes zero padded.  
        This does not follow ANSI C. 
    - r
      - The argument is a RETURN_STATUS value.  This value is converted to 
        a string following the table below.  This does not follow ANSI C. 
      - RETURN_SUCCESS               
        - "Success"
      - RETURN_LOAD_ERROR            
        - "Load Error"
      - RETURN_INVALID_PARAMETER     
        - "Invalid Parameter"
      - RETURN_UNSUPPORTED           
        - "Unsupported"
      - RETURN_BAD_BUFFER_SIZE       
        - "Bad Buffer Size"
      - RETURN_BUFFER_TOO_SMALL      
        - "Buffer Too Small"
      - RETURN_NOT_READY             
        - "Not Ready"
      - RETURN_DEVICE_ERROR          
        - "Device Error"
      - RETURN_WRITE_PROTECTED       
        - "Write Protected"
      - RETURN_OUT_OF_RESOURCES      
        - "Out of Resources"
      - RETURN_VOLUME_CORRUPTED      
        - "Volume Corrupt"
      - RETURN_VOLUME_FULL           
        - "Volume Full"
      - RETURN_NO_MEDIA              
        - "No Media"
      - RETURN_MEDIA_CHANGED         
        - "Media changed"
      - RETURN_NOT_FOUND             
        - "Not Found"
      - RETURN_ACCESS_DENIED         
        - "Access Denied"
      - RETURN_NO_RESPONSE           
        - "No Response"
      - RETURN_NO_MAPPING            
        - "No mapping"
      - RETURN_TIMEOUT               
        - "Time out"
      - RETURN_NOT_STARTED           
        - "Not started"
      - RETURN_ALREADY_STARTED       
        - "Already started"
      - RETURN_ABORTED               
        - "Aborted"
      - RETURN_ICMP_ERROR            
        - "ICMP Error"
      - RETURN_TFTP_ERROR            
        - "TFTP Error"
      - RETURN_PROTOCOL_ERROR        
        - "Protocol Error"
      - RETURN_WARN_UNKNOWN_GLYPH    
        - "Warning Unknown Glyph"
      - RETURN_WARN_DELETE_FAILURE   
        - "Warning Delete Failure"
      - RETURN_WARN_WRITE_FAILURE    
        - "Warning Write Failure"
      - RETURN_WARN_BUFFER_TOO_SMALL 
        - "Warning Buffer Too Small"



Andrew Fish


On Mar 25, 2013, at 4:04 PM, Tim Lewis <tim.le...@insyde.com> wrote:

> Try %a for ASCII
> 
> -----Original Message-----
> From: Stephen Polkowski [mailto:step...@centtech.com]
> Sent: Monday, March 25, 2013 4:02 PM
> To: edk2-devel@lists.sourceforge.net
> Subject: [edk2] AsciiPrint() and %s
> 
> Hello,
> 
>       I'm trying to print a simple ASCII string to the console.  I decided 
> to try
> AsciiPrint() from the MDE package.  I started having problems right away.  
> The function wouldn't print an Ascii string.  Here's my code:
> 
> #include <Uefi.h>
> #include <Library/UefiLib.h>
> #include <Library/ShellCEntryLib.h>
> 
> INTN EFIAPI ShellAppMain (IN UINTN Argc, IN CHAR16 **Argv) {
> 
>   char world[] = "world";
>   AsciiPrint("hello %s\n", world);
>   return 0;
> 
> }
> 
>       After some digging around, I noticed that AsciiPrint calls the 
> BasePrintLibSPrintMarker function which defaults to Unicode for %s.  Is this 
> correct?  The documentation for AsciiPrint in the MDE document states that it 
> will print a formatted ASCII string to the console.  However, it makes no 
> mention of the type of strings supported in the VA list.  In my mind it 
> should be supporting ASCII.  Is this a bug or the intended behavior?
> 
> Thanks,
> 
> Stephen
> 
> 
> BasePrintLib/PrintLibInternal.c:
> 
>       case 's':
>       case 'S':
>         Flags |= ARGUMENT_UNICODE;
>         //
>         // break skipped on purpose
>         //
>       case 'a':
> 
> 
>       
> 
> ----------------------------------------------------------------------
> -------- Own the Future-Intel&reg; Level Up Game Demo Contest 2013 
> Rise to greatness in Intel's independent game demo contest.
> Compete for recognition, cash, and the chance to get your game on Steam. $5K 
> grand prize plus 10 genre and skill prizes. 
> Submit your demo by 6/6/13. http://p.sf.net/sfu/intel_levelupd2d
> _______________________________________________
> edk2-devel mailing list
> edk2-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/edk2-devel
> 
> ----------------------------------------------------------------------
> -------- Own the Future-Intel&reg; Level Up Game Demo Contest 2013 
> Rise to greatness in Intel's independent game demo contest.
> Compete for recognition, cash, and the chance to get your game on 
> Steam. $5K grand prize plus 10 genre and skill prizes.
> Submit your demo by 6/6/13. http://p.sf.net/sfu/intel_levelupd2d
> _______________________________________________
> edk2-devel mailing list
> edk2-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/edk2-devel


------------------------------------------------------------------------------
Own the Future-Intel&reg; Level Up Game Demo Contest 2013 Rise to greatness in 
Intel's independent game demo contest.
Compete for recognition, cash, and the chance to get your game on Steam. $5K 
grand prize plus 10 genre and skill prizes. 
Submit your demo by 6/6/13. http://p.sf.net/sfu/intel_levelupd2d
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/edk2-devel

------------------------------------------------------------------------------
Own the Future-Intel&reg; Level Up Game Demo Contest 2013
Rise to greatness in Intel's independent game demo contest.
Compete for recognition, cash, and the chance to get your game 
on Steam. $5K grand prize plus 10 genre and skill prizes. 
Submit your demo by 6/6/13. http://p.sf.net/sfu/intel_levelupd2d
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/edk2-devel

Reply via email to