+static void ParseLabelArg (StrBuf* T, unsigned Arg attribute ((unused)))
+/* Parse the %g format specifier */
+{
+ /* We expect an identifier separated by a comma */
+ ConsumeComma ();
+ if (CurTok.Tok != TOK_IDENT) {
+
+ Error ("Label name expected");
+
+ } else {
+
+ /* Add a new label symbol if we don't have one until now */
+ SymEntry* Entry = AddLabelSym (CurTok.Ident, SC_REF);
+
+ /* Append the label name to the buffer */
+ SB_AppendStr (T, LocalLabelName (Entry->V.Label));
+
+ /* Eat the label name */
+ NextToken ();
+
+ }
+}
+
+
+
+static void ParseStrArg (StrBuf* T, unsigned Arg attribute ((unused)))
+/* Parse the %s format specifier */
+{
+ ExprDesc Expr;
+ char Buf [64];
+
+ /* We expect an argument separated by a comma */
+ ConsumeComma ();
+
+ /* Check what comes */
+ switch (CurTok.Tok) {
+
+ case TOK_IDENT:
+ /* Identifier */
+ SB_AppendStr (T, CurTok.Ident);
+ NextToken ();
+ break;
+
+ case TOK_SCONST:
+ /* String constant */
+ SB_AppendStr (T, GetLiteral (CurTok.IVal));
+ ResetLiteralPoolOffs (CurTok.IVal);
+ NextToken ();
+ break;
+
+ default:
+ ConstAbsIntExpr (hie1, &Expr);
+ xsprintf (Buf, sizeof (Buf), "%ld", Expr.IVal);
+ SB_AppendStr (T, Buf);
+ break;
+ }
+}
+
+
+