//retorna objeto no arquivo void* getObject(char* pathName, int indice, void (*reader)(void* obj, int seek, void* arq), void* (*allocar)()){ FILE *arq; int c = 0; int pos, block; long int qtd; void* ob; char str[6], bn; mark emp; arq = fopen(pathName, "r+b"); if(arq==NULL) return NULL; fread(&qtd, sizeof(long int), 1, arq); fread(&block, sizeof(int), 1, arq); int primeiroItem = ftell(arq); rewind(arq); pos = fseek(arq, primeiroItem, 0); qtd = fseek(arq, (primeiroItem + indice*(block + sizeof(mark))), SEEK_SET); fread(&emp, sizeof(mark), 1, arq); if(emp == empty) return NULL; ob = allocar(); reader(ob, ftell(arq), arq); // fread(ob, block, 1, arq); fclose(arq); return ob; }
//retorna um vetor com todos os objetos do arquivo e ultima posição nula void* getAll(char* pathName, void (*reader)(void* obj, int seek, void* arq), void* (*allocar)()){ FILE *arq; int block, pos; long int qtd; mark emp; Lista lista = Lista_createLista(); arq = fopen(pathName, "r+b"); fread(&qtd, sizeof(long int), 1, arq); fread(&block, sizeof(int), 1, arq); int primeiroItem = ftell(arq); //preenche lista rewind(arq); pos = fseek(arq, primeiroItem, 0); for(int c=0; c<qtd; c++){ fseek(arq, (primeiroItem + c*(block + sizeof(mark))), SEEK_SET); fread(&emp, sizeof(mark), 1, arq); if(emp == full){ void *ob; ob = allocar(); reader(ob, ftell(arq), arq); // fread(ob, block, 1, arq); Lista_insert(lista, ob); } } fclose(arq); return lista; }
int start(personagem *per,char **map){ char test,test2; int slot,i; do{ printf("BEM VINDO AO JUMUNCHIKIN\nNOVO JOGO(n)/CARREGAR JOGO(c):"); scanf("%c",&test); }while(test!='c' && test!='n'); if(test=='c'){ do{ printf("digite o slot que sera carregado:\n"); scanf("%i",&slot); }while(slot<0 || slot>3); if(load(per,slot)){ printf("slot invalido.\n"); return 2; } system("pause"); }//carrega um jogo if(test=='n'){ printf("digite o nome do seu personagem:"); scanf("%*c"); gets((*per).nome); newGame(per); test2=save(*per); system("pause"); }//cria um novo personagem test=allocar(map,*per); if(test){ printf("erro na alocacao do mapa\n"); return 1; }//aloca mapa test2=invSet((*per).slot);//seleciona inventario if(test2){ return 1; } return 0; }//inicializa o jogo e o personagem com new game ou load game