/* LORD OF HOSTS - disk.c --- Lade- und Speicherroutinen */ #include "Lord.h" struct ReqFileRequester MyFileReqStruct; char filename[FCHARS+1]; char directoryname[DSIZE+1]; char load[] = "Wähle Spiel zum Laden..."; char save[] = "Spiel speichern als..."; char testplayers[2][16]; FILE *MyFile; UBYTE testfval[16][8][8],testkval[16][8][8]; int testundopos,testundobot,testredotop,teststatus; struct Piece testpieces[16]; struct Move testmoves[MAXUNDO]; extern struct Piece ThePieces[16]; extern UBYTE fval[16][8][8]; extern UBYTE kval[16][8][8]; extern UBYTE whatsonboard[8][8]; extern struct Move Moves[MAXUNDO]; extern int undopos, undobot, redotop, status, last_error; extern int NumPieces[2]; extern char players[2][16]; extern BOOL joymouse_on, joymouse_allowed; void FileError(int Error) { switch(Error) { case ENOENT: SimpleRequest("Datei/Verzeichnis existiert nicht !"); break; case EBADF: SimpleRequest("Falscher file descriptor !"); break; case ENOMEM: SimpleRequest("Speichermangel !"); break; case ENFILE: SimpleRequest("Zuviele offene Dateien !"); break; case EACCES: SimpleRequest("Zugriff verweigert!"); break; case EIO: SimpleRequest("E/A-Fehler (andere Disk)!"); break; case ENOSPC: SimpleRequest("Diskette voll !"); break; case EROFS: SimpleRequest("Nur Lesen möglich !"); break; case EAGAIN: SimpleRequest("Datei ist leer !"); break; default: SimpleRequest("Diskettenfehler !"); break; } } BOOL checkrange(int Var, int lo, int hi) { if (Var>=lo && Var<=hi) return TRUE; return FALSE; } void SaveGame(void) { char filearray[DSIZE+FCHARS+2]; int intsize=sizeof(int); int p,i,j; BOOL abort=FALSE; filearray[0] = 0; MyFileReqStruct.Title = save; MyFileReqStruct.PathName = filearray; /* gesamter Pfad */ MyFileReqStruct.Dir = directoryname; /* Verzeichnis */ MyFileReqStruct.File = filename; /* File */ MyFileReqStruct.Flags = FRQCACHINGM|FRQSAVINGM; MyFileReqStruct.dirnamescolor = 2; /* andere Farben für Verzeichnisse */ MyFileReqStruct.devicenamescolor = 2; /* und Devices */ MyFileReqStruct.VersionNumber = REQVERSION; if (FileRequester(&MyFileReqStruct)) { MyFile = fopen((const char *)filearray,"rb"); if (MyFile) { fclose(MyFile); if (!TwoGadRequest("Datei existiert bereits.\nÜberschreiben?")) return; } MyFile = fopen((const char *)filearray,"wb"); if (!MyFile) { FileError(errno); return; } fwrite(&undopos,intsize,1,MyFile); if (!ferror(MyFile)) fwrite(&undobot,intsize,1,MyFile); if (!ferror(MyFile)) fwrite(&redotop,intsize,1,MyFile); if (!ferror(MyFile)) fwrite(&status,intsize,1,MyFile); if (!ferror(MyFile)) fwrite(players,1,32,MyFile); if (!ferror(MyFile)) for (p=0; p<=15; ++p) { fwrite(&ThePieces[p],sizeof(struct Piece),1,MyFile); for (i=0; i<=7; ++i) for (j=0; j<=7; ++j) if (!ferror(MyFile)) { fputc(fval[p][i][j],MyFile); fputc(kval[p][i][j],MyFile); } } if (!ferror(MyFile)) for (i=0; i7)]++; whatsonboard[ThePieces[p].x][ThePieces[p].y] = p; SetPiece(ThePieces[p],FALSE,FALSE); } } if (status & PLAYER1_TO_MOVE) { NextPlayer(RED); } else NextPlayer(WHITE); last_error = 0; } }