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

Subversion Repositories 1664

[/] [1664/] [trunk/] [c/] [cpu_1664/] [cpu_1664_opera__imita.c] - Rev 2

Compare with Previous | Blame | View Log

#ifdef imita
#include "cpu_1664.h"
#include <time.h>
#include <stdio.h>
 
void cpu_1664_opera__imita(struct cpu_1664 *cpu, n1 bait)
{
 cpu->opera_sicle=2;
 
 n8 c;
 nN desloca;
 nN indise;
 struct lista *fix_nom;
 n1 *datos;
 struct timespec *reg;
 
 switch (bait)
 {
  case cpu_1664_imita_argc:
   cpu->sinia[0]=cpu->imita_argc;
   break;
 
  case cpu_1664_imita_argv:
   cpu_1664_umm(cpu, cpu->sinia[0], (1<<cpu_1664_umm_usor_mapa_permete_scrive), 1, 0);
   desloca=cpu->sinia[0];
   indise=cpu->sinia[1];
 
   if (indise<cpu->imita_argc)
   {
 
    nN i=0; 
    do
    {
 
     cpu_1664_umm(cpu, desloca++, (1<<cpu_1664_umm_usor_mapa_permete_scrive), 1, cpu->imita_argv[indise][i]);
    } while(cpu->imita_argv[indise][i++]!=0); //inclui zero final
   }
 
   break;
 
  case cpu_1664_imita_open:
   fix_nom=lista_nova(128);
 
   indise=0;
   do
   {
    c=cpu_1664_umm(cpu, cpu->sinia[0]+indise++, (1<<cpu_1664_umm_usor_mapa_permete_leje), sizeof(n1), 0);
    lista_ajunta__dato(fix_nom, c);
   } while(c!=0);
 
   cpu->sinia[0]=open((const char *)fix_nom->datos, O_RDWR);
   lista_libri(fix_nom);
   break;
 
  case cpu_1664_imita_close: 
 
   close(cpu->sinia[0]);
   break;
 
  case cpu_1664_imita_read:
 
   datos=memoria_nova(cpu->sinia[2]);
   read(cpu->sinia[0],datos,cpu->sinia[2]);
 
   indise=0;
   while(indise<cpu->sinia[1])
   {
    cpu_1664_umm(cpu, cpu->sinia[1]+indise, (1<<cpu_1664_umm_usor_mapa_permete_scrive), 1, datos[indise]);
    indise++;
   }
 
   memoria_libri(datos);
   break;
 
  case cpu_1664_imita_write:
   indise=0;
 
   datos=memoria_nova(cpu->sinia[2]);
   indise=0;
 
   while(indise<cpu->sinia[2])
   {
    datos[indise]=cpu_1664_umm(cpu, cpu->sinia[1]+indise, (1<<cpu_1664_umm_usor_mapa_permete_leje), 1, 0);
    indise++;
   }
 
   write(cpu->sinia[0],datos,cpu->sinia[2]);
   memoria_libri(datos);
   break;
 
  case cpu_1664_imita_ftruncate:
   cpu->sinia[0]=ftruncate(cpu->sinia[0],cpu->sinia[1]);
   break;
 
  case cpu_1664_imita_lseek:
   cpu->sinia[0]=lseek(cpu->sinia[0],cpu->sinia[1],cpu->sinia[2]);
   break;
 
  case cpu_1664_imita_time:
   cpu->sinia[0]=time(0);
   break;
 
  case cpu_1664_imita_nanosleep:
   reg=(struct timespec *)memoria_nova(sizeof(struct timespec));
 
   if(cpu->sinia[0]>=1000000000)
   {
    reg->tv_sec=cpu->sinia[0]/1000000000;
    reg->tv_nsec=0;
   }
   else
   {
    reg->tv_nsec=cpu->sinia[0];
   }
 
   cpu->sinia[0]=nanosleep(reg, 0);
   memoria_libri((n1 *)reg);
   break;
 
  case cpu_1664_imita_exit:
   _exit(cpu->sinia[0]);
   break;
 
  default:
   break;
 };
}
#endif
 

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.