示例#1
0
int TAP_Main(void)
{
	char* path = "fileTest.txt";
	char line[512];
	UFILE *fp;
	TYPE_File *tf;

	printf("Starting file tester...\r\n");
	PrintMem();

	initFile(_INFO);
	PrintMem();

	if (fp = fopen(path, "w"))
	{
		if (fputs("This is a test message1\n", fp) == EOF)
			ShowError();
	//TAP_Print("1. File is %d bytes\r\n", TAP_Hdd_Flen(fp->fd));
		if (fputs("This is a test message2\n", fp) == EOF)
			ShowError();
	//TAP_Print("2. File is %d bytes\r\n", TAP_Hdd_Flen(fp->fd));
		fclose(fp);
	}
	PrintMem();

	tf = TAP_Hdd_Fopen("fileTest.txt");
	TAP_Print("re-opened file is %d bytes\r\n", TAP_Hdd_Flen(tf));
	TAP_Hdd_Fclose(tf);

	printf("Ending file tester...\r\n");
	return 0;

}
示例#2
0
void PrintAll(mlink * h)
{
	mlink *p = h;
	puts("====== Memory info =======(You)\n");
	while (NULL != p) {
		PrintMem(p);
		p = p->next;
	}
	puts("++++++++++++++++++++++++++++++\n");
}
示例#3
0
int main(int argc, char** argv){ ///OK
    int flagS = 0, flagR = 0, flagL = 0, flagM = 0, flagP = 0, flagErro = 0, flagHelp = 0; //boleanos

    int valorM; //recebe o argumento de M
    int valorP[2]; //recebem o argumento de P
    int opcao; //recebe a saida de getopt

    opterr = 0; //desliga erros default
    while ( (opcao = getopt(argc, argv, "hsrlm:p:")) != -1 ){ //interpreta os argumentos do terminal
        long int valor1 = 0,valor2 = 0; //auxiliares
        char* auxptr;

        switch(opcao){
            case 'h': //help
                flagHelp = 1;
                break;
            case 's': //silencioso
                flagS = 1;
                break;
            case 'r': //registradores
                flagR = 1;
                break;
            case 'l': //log
                flagL = 1;
                break;

            case 'm': //memoria maxima
                valor1 = strtol(optarg, &auxptr, 10);
                if ( strcmp(auxptr,"") != 0){
                    fprintf(stderr, "Erro: Valor de memória inválido\n"); //pq não aceita null?!
                    flagErro = 1;
                }
                else if (valor1 < 1){
                    fprintf(stderr, "Erro: O valor de memória mínimo é 1\n");
                    flagErro = 1;
                }
                else if (valor1 > 4096){
                    fprintf(stderr, "Erro: O valor de memória máximo é 4096\n");
                    flagErro = 1;
                }
                else {
                    valorM = valor1;
                    flagM = 1;
                }
                break;

            case 'p': //partição
                valor1 = strtol(optarg, &auxptr, 10);
                if ( strcmp(auxptr,"") == 0 ){
                    fprintf(stderr, "Erro: Apenas um valor foi especificado em -p\n");
                    fprintf(stderr, " *Use -p valor1/valor1 para observar um único endereço\n");
                    flagErro = 1;
                }
                else if ( auxptr[0] != '/'){
                    fprintf(stderr, "Erro: Os valores em -p devem ser separados por \"/\"\n");
                    flagErro = 1;
                }
                else {
                    auxptr++; //pula a barrinha
                    valor2 = strtol(auxptr, &auxptr, 10);
                    if ( strcmp(auxptr, "") != 0){
                        fprintf(stderr, "Erro: Valor inválido no argumento de -p\n");
                        flagErro = 1;
                    }
                    else {
                        if ( (valor1 > -1) && (valor1 < 4096) && (valor2 < 4096) ){
                            if (valor1 <= valor2){
                                valorP[0] = valor1;
                                valorP[1] = valor2;
                                flagP = 1;
                            }
                            else {
                                fprintf(stderr, "Erro: Os valores em -p devem estar em ordem crescente\n");
                                flagErro = 1;
                            }
                        }
                        else {
                            fprintf(stderr, "Erro: O intervalo especificado em -p ultrapassa os limites da memória\n");
                            flagErro = 1;
                        }
                    }
                }
                break;

            case '?': //erro
                if(optopt == 'm'){
                    fprintf(stderr, "Erro: Falta o argumento para -m\n");
                    fprintf(stderr, "Uso: -m <valor>\n");
                    flagErro = 1;
                }
                else if(optopt == 'p'){
                    fprintf(stderr, "Erro: Falta o argumento para -p\n");
                    fprintf(stderr, "Uso: -p <valor1/valor2>\n");
                    flagErro = 1;
                }
                else{
                    fprintf(stderr, "Erro: Opção -%c desconhecida\n", optopt);
                    fprintf(stderr, "Use -h para obter ajuda\n");
                    flagErro = 1;
                }
                break;
            default:
                fprintf(stderr, "Johnny, la gente esta muy loca!\n"); //Erro totalmente desconhecido (e improvavel)
                flagErro = 1;
        }
    }
//chega de flags!!!

    char* nomeArquivoFull; //recebe o nome completo do arquivo alvo
    char nomeArquivo[TAM_MAX_LINHA] = ""; //recebe apenas o nome do arquivo (sem extensão) -- não pode ser ponteiro
    char caminhoArquivo[TAM_MAX_LINHA] = ""; //recebe apenas o caminho do arquivo (se houver) -- não pode ser ponteiro

    if (argc > (optind+1)){
        fprintf(stderr, "Erro: Há mais parametros que o esperado\n");
        fprintf(stderr, "Uso: iasmas [opções] <arquivo>\n");
        flagErro = 1;
    }
    else if (argc == optind){
        if (flagErro == 0){ //ainda não houve erro e não tem -h..
            if (flagHelp == 0){
                fprintf(stderr, "Erro: Falta o nome do arquivo alvo\n");
                fprintf(stderr, "Uso: iasmas [opções] <arquivo>\n");
                flagErro = 1;
            }
        }
    }
    else {
        nomeArquivoFull = argv[optind];
        if (InterpretaAlvo(nomeArquivoFull) == 0){
            fprintf(stderr, "Erro: O arquivo especificado não é válido\n");
            flagErro = 1;
        }
        else if (InterpretaAlvo(nomeArquivoFull) == 1){
            ExtrairNome(nomeArquivoFull, nomeArquivo);
        }
        else if (InterpretaAlvo(nomeArquivoFull) == 2){
            ExtrairCaminho(nomeArquivoFull, caminhoArquivo);
            ExtrairNome(nomeArquivoFull, nomeArquivo);
        }
    }

//Resultado das flags
    if (flagHelp){
        printf("Uso: iasmas [opçoes] arquivo\n");
        printf("Opções:\n");
        printf(" -h                  Exibe esta informação\n");
        printf(" -s                  Reduz a quantidade de informações durante a execução\n");
        printf(" -l                  Grava as informações sobre a execução em um arquivo de texto\n");
        printf(" -r                  Mostra o estado de todos os registradores a cada ciclo\n");
        printf(" -m <valor>          Define o tamanho da memória acessível (0 a 4096)\n");
        printf(" -p <valor1.valor2>  Define um intervalo de memória que será exibido constantemente\n\n");
        printf("Atenção:\n");
        printf(" A opção -m não afeta os valores permitidos em -p\n"); //valores inacessiveis serão sempre 00
        printf(" A opção -s anula a opção -r\n");
        return 0;
    }

    if (flagErro){
        fprintf(stderr, "Execução abortada!\n");
        return 1;
    }

    if (flagS && flagR) flagR = 0; //não pode ser silencioso com -r

    printf("Condições de simulação:\n");
    printf("\tCaminho de trabalho:   %s\n", caminhoArquivo);
    printf("\tCódigo fonte:          %s.ias\n", nomeArquivo);
    printf("\tCódigo objeto:         %s.hex\n", nomeArquivo);
    if (flagL) printf("\tArquivo de log:        %s.log\n", nomeArquivo);
    printf("\n");
    if (flagM) printf("\tA memória será limitada a %d endereços\n", valorM);
    if (flagP) printf("\tO conteúdo da memória nos endereços %d a %d será monitorado\n", valorP[0], valorP[1]);
    if (flagS) printf("\tSerá exibido o mínimo de informações durante a execução\n");
    if (flagR) printf("\tSerão exibidas informações detalhadas durante a execução\n");


    printf("Continuar? [s/n] "); //pede confirmação para iniciar tradução
    char resposta = getc(stdin);
    if ((resposta == 'n') || (resposta == 'N')){
        printf("\n#partiu\n");
        printf("Execução cancelada pelo usuário!\n");
        return 0;
    }
    else if ((resposta == 's') || (resposta == 'S')){
        printf("\nIniciando geração do código objeto...\n");
        if (Tradutor(caminhoArquivo, nomeArquivo) == 0){
            fprintf(stderr, "Ocorreram erros durante o processo de tradução.\nExecução abortada!\n");
            return 1;
        }
        else printf("Arquivo objeto criado com sucesso!\n\n");
    }
    else {
        printf("\nNenhuma resposta foi fornecida.\n");
        printf("Execução cancelada!\n");
        return 0;
    }


    printf("\nCarregando dados na memoria...\n");
    int inicioPrograma = Carregador(caminhoArquivo, nomeArquivo);
    if (inicioPrograma == -1){
        fprintf(stderr, "Ocorreram erros durante o carregamento.\n");
        return 1; //provavelmente o usuário estragou o HEX..
    }
    else {
        printf("Programa carregado com sucesso!\n");
        printf("Iniciando execução...\n\n");

        FILE *logfile; //só pra não perder o escopo
        if (flagL) { //Prepara o arquivo de log
            char nomeArquivoLog[TAM_MAX_LINHA] = ""; //Prepara o nome de arquivo
            strcat(nomeArquivoLog, caminhoArquivo);
            strcat(nomeArquivoLog, nomeArquivo);
            strcat(nomeArquivoLog, ".log");

            logfile = fopen(nomeArquivoLog, "w"); //cria um .LOG para gravação
            if (logfile == NULL){
                fprintf(stderr, "Erro: Arquivo \"%s\" não pôde ser criado!\nExecução abortada!\n", nomeArquivoLog);
                return 1; //não permite criação ou escrita
            }
            //LOG foi aberto..
        }
        else logfile = NULL;


        int resultadoSim = Processador(inicioPrograma, logfile, flagS, flagR, flagP, valorP);
        if (resultadoSim == 0){
            fprintf(stderr, "Simulação finalizada devido a erros!\n");
            return 1; //só pra ficar um numero vermelho bonitinho no terminal
        }
        else {
            if ((flagP) && (flagS)) PrintMem(valorP); //se estava no modo Silent mostra a partição só no final
            printf("Simulação completa!\n\n");
            Estatistica();
            return 0; //FIM -- Yo yo yo this is it!!
        }

        if (logfile != NULL) fclose(logfile); //se está aberto feche
    }
}
示例#4
0
int TAP_Main(void)
{
	char buffer[MAX_LEN];
	char iniBuff[MAX_LEN];
	int length, i;
	char last = '\0';
	char* nextKey;
	char* appname = "test";
	char* filename = "testINI.ini";


	printf("Starting TestINI test...\r\n\r\n");
	PrintMem();

	printf("initing utils package...\r\n");
	initUtils(_INFO);
	PrintMem();

	//this *should* delete the entire section
	//ret = WritePrivateProfileString(appname, (char*) NULL, buffer, filename);
	
	/*
	if (!TAP_Hdd_Exist(filename))
	{
		TAP_Hdd_Create(filename, ATTR_NORMAL);
	}

	if (WritePrivateProfileString(appname, "key1", "value1", filename) > 0)
	{
		//WritePrivateProfileString(appname, "key2", "value2", filename);
	}
	else
	{
		printf("Error from WritePrivateProfileString: %s\r\n", GetLastErrorString());
		return 0;
	}
	printf("after writeprivate...\r\n");
	PrintMem();
	*/

	buffer[0]='\0';

	printf("calling GetPrivateProileString, appname = %s\r\n", appname);
	if ((length = GetPrivateProfileString(appname, (char*) NULL, (char*) NULL, 
				buffer, sizeof(buffer), filename)) <= 0) {
		printf("Error from GetPrivateProfile: %s\r\n", GetLastErrorString());
		return 0;
	}

	printf("Getting keys...\r\n");
	nextKey = buffer;  // final dir is marked with double null
	while(strlen(nextKey)>0)
	{
		printf("Found keys = %s. Getting value\r\n", nextKey);

		if (GetPrivateProfileString(appname, nextKey, "", iniBuff, sizeof(iniBuff), filename) > 0)
		{
			printf("Found %s = %s\r\n", nextKey, iniBuff);
			//check for commas in next version
			//attach to key structure
		}
		nextKey += strlen(nextKey) + 1;
	}
	printf("Ending test\r\n");
	PrintMem();
 	return 0;
}