/**************************************************************************** Mit diesem Programm kann von MicroDOS aus der Funktionstastenspeicher aus dem KC85-Grundgeraet in einer Datei abgespeichert werden. Diese Datei *.KEY kann unter CAOS mit FLOAD oder unter MicroDOS mit den Dienstprogrammen KEYEDIT.COM oder KEYLOAD.COM wieder geladen werden. KEYSAVE ist spapelverarbeitungsfaehig und wird aufgerufen mit KEYSAVE [n/][d:]name[.typ], der Dateityp .KEY wird automatisch ergaenzt, wenn kein Dateityp angegeben wurde. Mario Leubner, Chemnitztalstrasse 25, 09236 Markersdorf, 19. Februar 1994 *****************************************************************************/ #include #define BUFFSIZE 128 /* Puffergroesse 1 Record */ #define MODE 1 /* Datei fuer Schreibzugriff */ FILE *source; char counter, name[20], buffer[BUFFSIZE]; int i, address; main(argc, argv) int argc; char *argv[]; { int key, val, kcount; setup(argc, argv); /* Datei erzeugen */ for(i=0;i 1) { strcpy(name,argv[1]); if(index(name,".") == -1) strcat(name,".KEY"); if((source = creat(name, MODE )) == -1 ) { printf("Datei %s kann nicht erzeugt werden !\n", name); exit(-1); } } else { printf("Aufruf: KEYSAVE [n/][d:]name[.typ]"); exit(-1); } } int writebyt(argv,val) /* Datenbyte in Datei abspeichern */ char *argv[]; char val; { buffer[counter++]=val; /* in Puffer eintragen */ address++; /* naechste Adresse */ if(counter==128) { writrec(argv); /* Record abspeichern */ for(i=0;i<128;i++)buffer[i]=0; /* Puffer loeschen */ counter=0; } } int writrec(argv) /* Record in Datei abspeichern */ char *argv[]; { if(write(source,buffer,1) == -1) { printf("Schreibfehler Datei %s !\7\n",name); exit(-1); } } int nextvalue() /* naechstes Byte aus F-Tastenspeicher holen */ { char wert; char *memanf, *mempuf; memanf=0xffae; /* Quittung fuer Speicherlesen */ mempuf=0xfe00; /* Uebergabezelle */ *memanf=1; /* fuer Quittierung setzen */ bios(4,27); /* Escape */ bios(4,81); /* Funktion fuer 1 Byte lesen */ bios(4,address%256); /* Adresse low */ bios(4,0xb9); /* Adresse High */ do {} while(*memanf!=0); /* Quittung abwarten */ wert= *mempuf; /* Datenbyte */ return(wert); } display(val) /* Zeichen anzeigen */ char val; { char c; c = (val<32 || val>126)? '.' :val; printf("%c",c); } /* ** Ende. */