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; }
void PrintAll(mlink * h) { mlink *p = h; puts("====== Memory info =======(You)\n"); while (NULL != p) { PrintMem(p); p = p->next; } puts("++++++++++++++++++++++++++++++\n"); }
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 } }
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; }