OpenCores
URL https://opencores.org/ocsvn/1664/1664/trunk

Subversion Repositories 1664

[/] [1664/] [trunk/] [c/] [lista/] [cadena__f.c] - Rev 2

Compare with Previous | Blame | View Log

#include "lista.h"
#include <stdarg.h>
 
void cadena__f(void *scrive(char *, nN), char *cadena, ...)
{
 va_list va_lista;
 va_start(va_lista, cadena);
 nN limite_indise = nN_cuantia__ccadena(cadena);
 
 n8 cuantia_;
 #define carater_cuantia 32
 char carater[carater_cuantia];
 char *cadena_;
 n8 valua;
 nN alinia;
 n1 bool_esatia;
 char *comensa;
 nN i=0;
 while(i<limite_indise)
 {
 
  switch(cadena[i])
  {
   default:
    comensa=cadena+i;
    while((cadena[i]!='\\')&&(cadena[i]!='%')&&(i<limite_indise)) { i++; }
    scrive(comensa, (cadena+i)-comensa);
    break;
 
   case '\\':
    i++;
 
    switch(cadena[i])
    {
     default:
      comensa=cadena+i++;
      while((cadena[i]!='\\')&&(cadena[i]!='%')&&(i<limite_indise)) { i++; }
      scrive(comensa, (cadena+i)-comensa);    
      break;
 
     case 'n':
      i++;
      carater[0]=0x0a;
      scrive(carater, 1);    
      break;
    }
    break;
 
   case '%':
    i++;
 
    if(cadena[i]=='.')
    {
     i++;
     bool_esatia=1;
    }
    else
    {
     bool_esatia=0;
    }
 
    if(cadena[i]=='*')
    {
     i++;
     alinia=va_arg(va_lista, n4); //*__ nN depende de arci
    }
    else
    {
     alinia=0;
    }
 
    switch(cadena[i])
    {
     case 'x':
      i++;
      valua=va_arg(va_lista, n8);
      cuantia_=asciiexadesimal__n8((n1 *)(carater+(carater_cuantia-1)), valua);
      alinia=(alinia>cuantia_) ? alinia-cuantia_ : 0;
 
      if(bool_esatia!=0)
      {
       carater[0]='0';
      }
      else
      {
       carater[0]=' ';
      }
 
      for(; alinia>0; alinia--)
      {
       scrive(carater,1);
      }
 
      scrive(carater+carater_cuantia-cuantia_, cuantia_);
      break;
 
     case 'd':
      i++;
      valua=va_arg(va_lista, n8);
      cuantia_=asciidesimal__n8((n1 *)(carater+(carater_cuantia-1)), valua);
      alinia=(alinia>cuantia_) ? alinia-cuantia_ : 0;
 
      if(bool_esatia!=0)
      {
       carater[0]='0';
      }
      else
      {
       carater[0]=' ';
      }
 
      for(; alinia>0; alinia--)
      {
       scrive(carater,1);
      }
 
      scrive(carater+carater_cuantia-cuantia_, cuantia_);
      break;
 
     case 'c':
      i++;
      carater[1]=(n1)va_arg(va_lista, nN);
      alinia=(alinia>1) ? alinia-1 : 0;
 
      for(carater[0]=' '; alinia>0; alinia--)
      {
       scrive(carater,1);
      }
 
      scrive(carater+1, 1);
      break;
 
     case 's':
      i++;
      cadena_=va_arg(va_lista, char *);
      cuantia_=nN_cuantia__ccadena(cadena_);
      alinia=(alinia!=0) ? alinia : cuantia_;
      cuantia_=(alinia>cuantia_) ? cuantia_ : alinia;
      alinia=(alinia>cuantia_) ? alinia-cuantia_ : 0;
 
      for(carater[0]=' '; alinia>0; alinia--)
      {
       scrive(carater,1);
      }
 
      scrive(cadena_, cuantia_);
      break;
    }
    break;
  }
 }
 va_end(va_lista);
}

Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.