B.2. Umwandlungsprogramme
Das Format der vom Simulationsprogramm erzeugten Dateien —ihre Namen
enden auf .sim— kann von gängigen Bildbetrachtungsprogrammen nicht
interpretiert werden, hat dafür aber den Vorteil, daß die Dateien relativ kurz
sind.
Um die Simulationsbilder mit fremder Software weiter bearbeiten
zu können, wurde folgendes Programm geschrieben, das sie in das
PGM1-Format
(ascii) umwandelt.2
/* sim2xpm.c
Author: Peter Münster, 1997
Konvertiert ".sim"-Bilder in welche,
die man mit xv bearbeiten kann.
*/
#include <stdio.h>
#include "/home/peter/c/mystd.h"
char progname[DAT_NAME_MAX];
// Die Dimension steht in den ersten 4 Bytes:
// erst X, dann Y
void getdim(int *dim, FILE *fp){
int i, low, high;
for(i = 0; i < 2; ++i){
high=getc(fp);
low=getc(fp);
dim[i]=high*256+low;
}
}
int main(int argc, char *argv[]){
extern char progname[];
register int i;
FILE *fp;
FILE *fpout;
int dim[2], ret_val=1;
unsigned char *feld;
char str[DAT_NAME_MAX];
strncpy(progname, argv[0], DAT_NAME_MAX-1);
while(--argc){
if(!(fp=fopen(argv[argc], "r"))){
FPF("cannot read: %s", argv[argc]);
continue;
}
sprintf(str, "%s.xpm", argv[argc]);
if(!(fpout=fopen(str, "w"))){
FPF("cannot open: %s", str);
fclose(fp);
continue;
}
getdim(dim, fp);
feld=(char *)malloc(dim[0]*dim[1]*SOC);
fread(feld, SOC, dim[0]*dim[1], fp);
fprintf(fpout,
"P2\n#Bitmap-File aus %s\n%d %d\n256\n",
argv[argc], dim[0], dim[1]); // 256=Farbtiefe
for(i=0; i<dim[0]*dim[1]; i++)
fprintf(fpout, "%3d\n", feld[i]);
// Aufräumen
fclose(fp);
fclose(fpout);
free(feld);
ret_val=0; // mindestens ein Erfolg
}
return ret_val;
}