/****************************************************************/ /* */ /* Jedec.c - enthält Routinen zum Laden und Speichern der */ /* GAL-Daten im Jedec-Format */ /* */ /* compilieren: cc Jedec.c */ /* */ /****************************************************************/ #include "exec/types.h" #include "exec/memory.h" #include #include #include #include "GALer.h" extern int MaxFuseAdr; extern int GALType; extern UBYTE GadgetSBuff[60]; struct JedecStruct Jedec; int bitnum, linenum; UBYTE *actptr, *buffend; /* PutJedec: liest aus dem GAL die Jedec-Struktur ein und schreibt das Jedec-File Aufruf: PutJedec(); filename: Zeiger auf Filenamen (ohne ".jed") */ PutJedec() { if (MyRequest(ASK_REQ,(UBYTE *)"Jedec erstellen: Bitte GAL einsetzen")) { if (MyRequest(SAVE_REQ,(UBYTE *)"Bitte Namen für Jedec-File eingeben")) { ReadGALToJedec(); /*GAL einlesen*/ WriteJedecFile(); } } } /* WriteJedecFile: erstellt aus der Jedec-Struktur das Jedec-File Aufruf: WriteJedecFile(); */ WriteJedecFile() { UBYTE filenamebuff[64]; FILE *fp; int n, m, bitnum; strcpy(&filenamebuff,&GadgetSBuff); /*.jed an Dateinamen anfügen*/ strcat(&filenamebuff,(UBYTE *)".jed"); if (fp=fopen(&filenamebuff,(UBYTE *)"w")) { bitnum = 0; for (m=0; mbuffend) { /*Dateiende?, dann Fehler*/ JedecError(2); return(-1); } while ((*actptr==' ')||(*actptr==0x09)) /*Zeiger auf nächstes Zeichen*/ actptr++; if (actptr>buffend) { /*Dateiende?, dann Fehler*/ JedecError(2); return(-1); } if (!(sscanf (actptr,"%d",&jedec_bit))) { JedecError(3); return(-1); /*kein Zahl nach *L */ } if (jedec_bit!=bitnum) { JedecError(4); return(-1); /*Jedec-Adresse ist falsch*/ } while (isdigit(*actptr)) actptr++; if (actptr>buffend) { /*Dateiende?, dann Fehler*/ JedecError(2); return(-1); } break; } default : { JedecError(5); return(-1); /*unerlaubtes Zeichen*/ } } } } /*überprüfe, ob sich zwischen "actptr" und Dateiende noch Zeichen befinden Aufruf: answer=CheckFileEnd(); answer: 1=Dateiende erreicht; 0=Dateiende nicht erreicht */ CheckFileEnd() { UBYTE *ptr; ptr = actptr; /*auf Dateiende testen*/ while (isspace(*ptr)) ptr++; if (ptr>=buffend) return(1); else return(0); } /*gibt Fehlermeldung aus*/ JedecError(errornum) int errornum; { PrintErrorLine(linenum); switch (errornum) { case 1: { PrintText((UBYTE *)"Buchstabe 'L' erwartet"); break; } case 2: { PrintText((UBYTE *)"unerwartetes Dateiende"); break; } case 3: { PrintText((UBYTE *)"Zahl (Bit-Nummer) erwartet"); break; } case 4: { PrintText((UBYTE *)"Bit-Nummer stimmt mit Bit-Anzahl nicht überein"); break; } case 5: { PrintText((UBYTE *)"unerlaubtes Zeichen gefunden"); break; } case 6: { PrintText((UBYTE *)"Datei für eingestellten GAL-Typ zu lang"); break; } case 7: { PrintText((UBYTE *)"Datei für eingestellten GAL-Typ zu kurz"); break; } } ErrorReq(5); }