/*********************************/
/* MatrixGenerator für ShadowRun */
/* written by Thomas Reinhardt   */
/*                               */
/* Input- und Output-Funktionen  */
/*********************************/
#include <time.h>
#include <math.h>
#include <string.h>
#include <exec/interrupts.h>
#include <exec/libraries.h>
#include <exec/lists.h>
#include <exec/memory.h>
#include <exec/nodes.h>
#include <exec/ports.h>
#include <exec/types.h>
#include <intuition/intuition.h>
#include <libraries/dos.h>
#include <libraries/dosextens.h>
#include <proto/dos.h>
#include <proto/exec.h>
#include <proto/graphics.h>
#include <proto/intuition.h>
#include <proto/gadtools.h>
#include <proto/diskfont.h>
#include <stdio.h>
#include <stdlib.h>

#include "MatrixGen.h"
#include "all.h"

extern LONG SaveNamePointer;
extern struct IntuitionBase *IntuitionBase;
extern struct GfxBase *GfxBase;
extern struct Library *DosBase;
extern struct NewScreen MyNewScreen;
extern struct Screen *MyScreen;
extern struct BitMapHeader BMHD;
extern struct ColorRegister Colors[16];
extern struct CommodoreAmiga CAMG;
extern LONG Len,xi,yi,b;
extern ULONG ChunkLen;
extern char *WohinDamit;
extern char GfxName[255];
extern char StatusName[255];
extern char StandardName[255];
extern char TextName[255];
extern char DatenFeld[255];
extern BOOL success,AllDone;
extern int i;
extern char inread[5];
extern int cBitmaps,AnzahlKnoten,AusgangsKnoten,AnzahlWichtigeDaten,Stufenwert;
extern int MaxSAN,AusgangsWichtigeDaten;
extern UBYTE xPos,yPos,MaxFarben,Language,OutputType;
extern struct MatrixKomponenten Matrix[12*12];
extern struct MatrixGenType MatrixDatas[1];
extern BOOL CPUInSystem,Beenden,RandomDSValue,CheckLevelCode;
extern BOOL Zufallsstufen,KeineDatenspeicher,StatusFile,PrefsFile,BlaueKnoten;
extern BOOL Schatten,SaveDatenfeld,InstallNoIC,AlwaysICInfo,AlwaysICDS;
extern UBYTE AnzahlCPU,AnzahlSPU,AnzahlDS,AnzahlSAN,AnzahlSN,AnzahlIOP,Anzahl,AnzahlBlueNodes;

BOOL SaveText(){
LONG OutTextPointer;
char ZWSPName[255];
char InputName[255];
char SrcDat[255];
int i,xx,yy;
BOOL STAT,NOSPACE,HereIsAIC,HereIsWDIC;
FILE *InTextPointer;
UBYTE EOLine[1];
char *PreString[13]={"Error!-","blue-","Blau-","green-","Grün-","orange-","Orange-","red-","Rot-","purple-","Purpur-","black-","Schwarz-"};
char *IceTypeString[22]={"nothing","nichts","Trapped-","Falle-","Access-","Zugang-","Barrier-","Barriere-","Scramble-","Wirbel-","Blaster-","Blaster-","Trace-","Aufspüren-","Killer-","Killer-","Tar Baby-","Teerbaby-","Tar Pit-","Teergrube","Deadly ","tödliches "};
char *IceStufeString[8]={" ","white","weißes","gray","graues","black","schwarzes"};
char *DataString[5]={" ","nothing of interest","keine besonderen Daten","important datas","wichtige Daten"};
char *StufeString[2]={"rating","Stufe"};
	EOLine[0]=10;
	strcpy(TextName,StandardName);
	if(OutputType==0){
		strcat(TextName,".DOC");
		strcpy(SrcDat,"ASC-");
		}
	if(OutputType==1){
		strcat(TextName,".tex");
		strcpy(SrcDat,"TeX-");
		}
	OutTextPointer=Open(TextName,MODE_NEWFILE);
	if(!OutTextPointer){
		DisplayErrorMessage("Error : Save(Text)-Datei!");
		}
	else{
		strcpy(InputName,SrcDat);
		strcat(InputName,"ALL.e");
		if(Language==1){
			strcpy(InputName,SrcDat);
			strcat(InputName,"ALL.g");
			}
		InTextPointer=fopen(InputName,"r");
		if(!InTextPointer){
			sprintf(ZWSPName,"Can´t find %sALL.(l)-Datei ... terminating",SrcDat);
			Close(OutTextPointer);
			DisplayErrorMessage("Error : can´t find ALL.(l)-Datei!");
			}
		STAT=FALSE;
		i=0;
		while(STAT==FALSE){
		  fscanf(InTextPointer,"%s\n",&ZWSPName[0]);
			if((strncmp(&ZWSPName[0],"[END]",5))==0) STAT=TRUE;
			if((strncmp(&ZWSPName[0],"[TOT]",5))==0) sprintf(ZWSPName,"%i",AusgangsKnoten);
			if((strncmp(&ZWSPName[0],"[CPU]",5))==0) sprintf(ZWSPName,"%i CPU",AnzahlCPU);
			if((strncmp(&ZWSPName[0],"[SPU]",5))==0) sprintf(ZWSPName,"%i SPU",AnzahlSPU);
			if((strncmp(&ZWSPName[0],"[IOP]",5))==0) sprintf(ZWSPName,"%i IOP",AnzahlIOP);
			if((strncmp(&ZWSPName[0],"[DS1]",5))==0) sprintf(ZWSPName,"%i DS",AnzahlDS);
			if((strncmp(&ZWSPName[0],"[SAN]",5))==0) sprintf(ZWSPName,"%i SAN",AnzahlSAN);
			if((strncmp(&ZWSPName[0],"[SN1]",5))==0) sprintf(ZWSPName,"%i SN",AnzahlSN);
			if((strncmp(&ZWSPName[0],"[DSN]",5))==0) sprintf(ZWSPName,"%i",CountMoneyDS());
			if(STAT==FALSE){
				if((ZWSPName[0]==0x5c)&&(ZWSPName[1]==0x6e)) Write(OutTextPointer,&EOLine[0],1);
				else{
					Write(OutTextPointer,&ZWSPName[0],strlen(&ZWSPName[0]));
					Write(OutTextPointer," ",1);
					}
				}
			}
		Write(OutTextPointer,&EOLine[0],1);
		fclose(InTextPointer);
		for(i=1;i<AnzahlCPU+1;i++){
			strcpy(InputName,SrcDat);
			strcat(InputName,"CPU.e");
			if(Language==1){
				strcpy(InputName,SrcDat);
				strcat(InputName,"CPU.g");
				}
			InTextPointer=fopen(InputName,"r");
			if(!InTextPointer){
				sprintf(ZWSPName,"Can´t find %sCPU.(l)-Datei ... terminating",SrcDat);
				Close(OutTextPointer);
				DisplayErrorMessage("Error : can´t find CPU-Datei!");
				}
			STAT=FALSE;
			HereIsAIC=FALSE;
			NOSPACE=FALSE;
			while(STAT==FALSE){
			  fscanf(InTextPointer,"%s\n",&ZWSPName[0]);
				if((strncmp(&ZWSPName[0],"[STF]",5))==0) sprintf(ZWSPName,"%i",GetStufe(i,1));
				if((strncmp(&ZWSPName[0],"[END]",5))==0) STAT=TRUE;
				if((strncmp(&ZWSPName[0],"[NUM]",5))==0) sprintf(ZWSPName,"%i",i);
				if((strncmp(&ZWSPName[0],"[TYP]",5))==0){
					NOSPACE=TRUE;
					sprintf(ZWSPName,PreString[GetTypeName(i,1)]);
					}
				if((strncmp(&ZWSPName[0],"[ICT]",5))==0){
					NOSPACE=TRUE;
					if(GetIceName(i,1)<1) sprintf(ZWSPName,"%s",IceTypeString[GetIceName(i,1)]);
					else sprintf(ZWSPName,"%sIC (",IceTypeString[GetIceName(i,1)]);
					HereIsAIC=TRUE;
					}
				if((HereIsAIC==TRUE)&&((strncmp(&ZWSPName[0],"[ICA]",5))==0)){
					if(GetIceNameType(i,1)<1) sprintf(ZWSPName,"%s",IceStufeString[GetIceNameType(i,1)]);
					else sprintf(ZWSPName,"%s IC)",IceStufeString[GetIceNameType(i,1)]);
					HereIsAIC=FALSE;
					}
				if((HereIsAIC==TRUE)&&((strncmp(&ZWSPName[0],"[ICS]",5))==0)){
					if(GetIceStufe(i,1)==0) sprintf(ZWSPName," ");
					else sprintf(ZWSPName,"%s %i,",StufeString[Language],GetIceStufe(i,1));
					}
				if((HereIsAIC==TRUE)&&((strncmp(&ZWSPName[0],"[ICS]",5))==0)){
					if(GetIceNameType(i,1)<1) sprintf(ZWSPName,"%s",IceStufeString[GetIceNameType(i,1)]);
					else sprintf(ZWSPName,"%s IC)",IceStufeString[GetIceNameType(i,1)]);
					HereIsAIC=FALSE;
					}
				if(STAT==FALSE){
					if((ZWSPName[0]==0x5c)&&(ZWSPName[1]==0x6e)) Write(OutTextPointer,&EOLine[0],1);
					else{
						Write(OutTextPointer,&ZWSPName[0],strlen(&ZWSPName[0]));
						if(NOSPACE==FALSE) Write(OutTextPointer," ",1);
						NOSPACE=FALSE;
						}
					}
				}
			fclose(InTextPointer);
			}
		for(i=1;i<AnzahlSPU+1;i++){
			strcpy(InputName,SrcDat);
			strcat(InputName,"SPU.e");
			if(Language==1){
				strcpy(InputName,SrcDat);
				strcat(InputName,"SPU.g");
				}
			InTextPointer=fopen(InputName,"r");
			if(!InTextPointer){
				sprintf(ZWSPName,"Can´t find %sSPU.(l)-Datei ... terminating",SrcDat);
				Close(OutTextPointer);
				DisplayErrorMessage("Error : can´t find -SPU.-Datei!");
				}
			STAT=FALSE;
			HereIsAIC=FALSE;
			NOSPACE=FALSE;
			while(STAT==FALSE){
			  fscanf(InTextPointer,"%s\n",&ZWSPName[0]);
				if((strncmp(&ZWSPName[0],"[STF]",5))==0) sprintf(ZWSPName,"%i",GetStufe(i,2));
				if((strncmp(&ZWSPName[0],"[END]",5))==0) STAT=TRUE;
				if((strncmp(&ZWSPName[0],"[NUM]",5))==0) sprintf(ZWSPName,"%i",i);
				if((strncmp(&ZWSPName[0],"[TYP]",5))==0){
					NOSPACE=TRUE;
					sprintf(ZWSPName,PreString[GetTypeName(i,2)]);
					}
				if((strncmp(&ZWSPName[0],"[ICT]",5))==0){
					NOSPACE=TRUE;
					if(GetIceName(i,2)<1) sprintf(ZWSPName,"%s",IceTypeString[GetIceName(i,2)]);
					else sprintf(ZWSPName,"%sIC (",IceTypeString[GetIceName(i,2)]);
					HereIsAIC=TRUE;
					}
				if((HereIsAIC==TRUE)&&((strncmp(&ZWSPName[0],"[ICA]",5))==0)){
					if(GetIceNameType(i,2)<1) sprintf(ZWSPName,"%s",IceStufeString[GetIceNameType(i,2)]);
					else sprintf(ZWSPName,"%s IC)",IceStufeString[GetIceNameType(i,2)]);
					HereIsAIC=FALSE;
					}
				if((HereIsAIC==TRUE)&&((strncmp(&ZWSPName[0],"[ICS]",5))==0)){
					if(GetIceStufe(i,2)==0) sprintf(ZWSPName," ");
					else sprintf(ZWSPName,"%s %i,",StufeString[Language],GetIceStufe(i,2));
					}
				if((HereIsAIC==TRUE)&&((strncmp(&ZWSPName[0],"[ICS]",5))==0)){
					if(GetIceNameType(i,2)<1) sprintf(ZWSPName,"%s",IceStufeString[GetIceNameType(i,2)]);
					else sprintf(ZWSPName,"%s IC)",IceStufeString[GetIceNameType(i,2)]);
					HereIsAIC=FALSE;
					}
				if(STAT==FALSE){
					if((ZWSPName[0]==0x5c)&&(ZWSPName[1]==0x6e)) Write(OutTextPointer,&EOLine[0],1);
					else{
						Write(OutTextPointer,&ZWSPName[0],strlen(&ZWSPName[0]));
						if(NOSPACE==FALSE) Write(OutTextPointer," ",1);
						NOSPACE=FALSE;
						}
					}
				}
			fclose(InTextPointer);
			}
		for(i=1;i<AnzahlIOP+1;i++){
			strcpy(InputName,SrcDat);
			strcat(InputName,"IOP.e");
			if(Language==1){
				strcpy(InputName,SrcDat);
				strcat(InputName,"IOP.g");
				}
			InTextPointer=fopen(InputName,"r");
			if(!InTextPointer){
				sprintf(ZWSPName,"Can´t find %sIOP.(l)-Datei ... terminating",SrcDat);
				Close(OutTextPointer);
				DisplayErrorMessage("Error : can´t find IOP.(l)-Datei!");
				}
			STAT=FALSE;
			HereIsAIC=FALSE;
			NOSPACE=FALSE;
			while(STAT==FALSE){
			  fscanf(InTextPointer,"%s\n",&ZWSPName[0]);
				if((strncmp(&ZWSPName[0],"[STF]",5))==0) sprintf(ZWSPName,"%i",GetStufe(i,3));
				if((strncmp(&ZWSPName[0],"[END]",5))==0) STAT=TRUE;
				if((strncmp(&ZWSPName[0],"[NUM]",5))==0) sprintf(ZWSPName,"%i",i);
				if((strncmp(&ZWSPName[0],"[TYP]",5))==0){
					NOSPACE=TRUE;
					sprintf(ZWSPName,PreString[GetTypeName(i,3)]);
					}
				if((strncmp(&ZWSPName[0],"[ICT]",5))==0){
					NOSPACE=TRUE;
					if(GetIceName(i,3)<1) sprintf(ZWSPName,"%s",IceTypeString[GetIceName(i,3)]);
					else sprintf(ZWSPName,"%sIC (",IceTypeString[GetIceName(i,3)]);
					HereIsAIC=TRUE;
					}
				if((HereIsAIC==TRUE)&&((strncmp(&ZWSPName[0],"[ICA]",5))==0)){
					if(GetIceNameType(i,3)<1) sprintf(ZWSPName,"%s",IceStufeString[GetIceNameType(i,3)]);
					else sprintf(ZWSPName,"%s IC)",IceStufeString[GetIceNameType(i,3)]);
					HereIsAIC=FALSE;
					}
				if((HereIsAIC==TRUE)&&((strncmp(&ZWSPName[0],"[ICS]",5))==0)){
					if(GetIceStufe(i,3)==0) sprintf(ZWSPName," ");
					else sprintf(ZWSPName,"%s %i,",StufeString[Language],GetIceStufe(i,3));
					}
				if((HereIsAIC==TRUE)&&((strncmp(&ZWSPName[0],"[ICS]",5))==0)){
					if(GetIceNameType(i,3)<1) sprintf(ZWSPName,"%s",IceStufeString[GetIceNameType(i,3)]);
					else sprintf(ZWSPName,"%s IC)",IceStufeString[GetIceNameType(i,3)]);
					HereIsAIC=FALSE;
					}
				if(STAT==FALSE){
					if((ZWSPName[0]==0x5c)&&(ZWSPName[1]==0x6e)) Write(OutTextPointer,&EOLine[0],1);
					else{
						Write(OutTextPointer,&ZWSPName[0],strlen(&ZWSPName[0]));
						if(NOSPACE==FALSE) Write(OutTextPointer," ",1);
						NOSPACE=FALSE;
						}
					}
				}
			fclose(InTextPointer);
			}
		for(i=1;i<AnzahlSAN+1;i++){
			strcpy(InputName,SrcDat);
			strcat(InputName,"SAN.e");
			if(Language==1){
				strcpy(InputName,SrcDat);
				strcat(InputName,"SAN.g");
				}
			InTextPointer=fopen(InputName,"r");
			if(!InTextPointer){
				sprintf(ZWSPName,"Can´t find %sSAN.(l)-Datei ... terminating",SrcDat);
				Close(OutTextPointer);
				DisplayErrorMessage("Error : can´t find SAN.(l)-Datei!");
				}
			HereIsAIC=FALSE;
			STAT=FALSE;
			NOSPACE=FALSE;
			while(STAT==FALSE){
			  fscanf(InTextPointer,"%s\n",&ZWSPName[0]);
				if((strncmp(&ZWSPName[0],"[STF]",5))==0) sprintf(ZWSPName,"%i",GetStufe(i,5));
				if((strncmp(&ZWSPName[0],"[END]",5))==0) STAT=TRUE;
				if((strncmp(&ZWSPName[0],"[NUM]",5))==0) sprintf(ZWSPName,"%i",i);
				if((strncmp(&ZWSPName[0],"[TYP]",5))==0){
					NOSPACE=TRUE;
					sprintf(ZWSPName,PreString[GetTypeName(i,5)]);
					}
				if((strncmp(&ZWSPName[0],"[ICT]",5))==0){
					NOSPACE=TRUE;
					if(GetIceName(i,5)<1) sprintf(ZWSPName,"%s",IceTypeString[GetIceName(i,5)]);
					else sprintf(ZWSPName,"%sIC (",IceTypeString[GetIceName(i,5)]);
					HereIsAIC=TRUE;
					}
				if((HereIsAIC==TRUE)&&((strncmp(&ZWSPName[0],"[ICA]",5))==0)){
					if(GetIceNameType(i,5)<1) sprintf(ZWSPName,"%s",IceStufeString[GetIceNameType(i,5)]);
					else sprintf(ZWSPName,"%s IC)",IceStufeString[GetIceNameType(i,5)]);
					HereIsAIC=FALSE;
					}
				if((HereIsAIC==TRUE)&&((strncmp(&ZWSPName[0],"[ICS]",5))==0)){
					if(GetIceStufe(i,5)==0) sprintf(ZWSPName," ");
					else sprintf(ZWSPName,"%s %i,",StufeString[Language],GetIceStufe(i,5));
					}
				if((HereIsAIC==TRUE)&&((strncmp(&ZWSPName[0],"[ICS]",5))==0)){
					if(GetIceNameType(i,5)<1) sprintf(ZWSPName,"%s",IceStufeString[GetIceNameType(i,5)]);
					else sprintf(ZWSPName,"%s IC)",IceStufeString[GetIceNameType(i,5)]);
					HereIsAIC=FALSE;
					}
				if(STAT==FALSE){
					if((ZWSPName[0]==0x5c)&&(ZWSPName[1]==0x6e)) Write(OutTextPointer,&EOLine[0],1);
					else{
						Write(OutTextPointer,&ZWSPName[0],strlen(&ZWSPName[0]));
						if(NOSPACE==FALSE) Write(OutTextPointer," ",1);
						NOSPACE=FALSE;
						}
					}
				}
			fclose(InTextPointer);
			}
		for(i=1;i<AnzahlSN+1;i++){
			strcpy(InputName,SrcDat);
			strcat(InputName,"SN.e");
			if(Language==1){
				strcpy(InputName,SrcDat);
				strcat(InputName,"SN.g");
				}
			InTextPointer=fopen(InputName,"r");
			if(!InTextPointer){
				sprintf(ZWSPName,"Can´t find %sSN.(l)-Datei ... terminating",SrcDat);
				Close(OutTextPointer);
				DisplayErrorMessage("Error : can´t find SN.(l)-Datei!");
				}
			NOSPACE=FALSE;
			HereIsAIC=FALSE;
			STAT=FALSE;
			while(STAT==FALSE){
			  fscanf(InTextPointer,"%s\n",&ZWSPName[0]);
				if((strncmp(&ZWSPName[0],"[STF]",5))==0) sprintf(ZWSPName,"%i",GetStufe(i,6));
				if((strncmp(&ZWSPName[0],"[END]",5))==0) STAT=TRUE;
				if((strncmp(&ZWSPName[0],"[NUM]",5))==0) sprintf(ZWSPName,"%i",i);
				if((strncmp(&ZWSPName[0],"[TYP]",5))==0){
					NOSPACE=TRUE;
					sprintf(ZWSPName,PreString[GetTypeName(i,6)]);
					}
				if((strncmp(&ZWSPName[0],"[ICT]",5))==0){
					NOSPACE=TRUE;
					if(GetIceName(i,6)<1) sprintf(ZWSPName,"%s",IceTypeString[GetIceName(i,6)]);
					else sprintf(ZWSPName,"%sIC (",IceTypeString[GetIceName(i,6)]);
					HereIsAIC=TRUE;
					}
				if((HereIsAIC==TRUE)&&((strncmp(&ZWSPName[0],"[ICA]",5))==0)){
					if(GetIceNameType(i,6)<1) sprintf(ZWSPName,"%s",IceStufeString[GetIceNameType(i,6)]);
					else sprintf(ZWSPName,"%s IC)",IceStufeString[GetIceNameType(i,6)]);
					HereIsAIC=FALSE;
					}
				if((HereIsAIC==TRUE)&&((strncmp(&ZWSPName[0],"[ICS]",5))==0)){
					if(GetIceStufe(i,6)==0) sprintf(ZWSPName," ");
					else sprintf(ZWSPName,"%s %i,",StufeString[Language],GetIceStufe(i,6));
					}
				if(STAT==FALSE){
					if((ZWSPName[0]==0x5c)&&(ZWSPName[1]==0x6e)) Write(OutTextPointer,&EOLine[0],1);
					else{
						Write(OutTextPointer,&ZWSPName[0],strlen(&ZWSPName[0]));
						if(NOSPACE==FALSE) Write(OutTextPointer," ",1);
						NOSPACE=FALSE;
						}
					}
				}
			fclose(InTextPointer);
			}
		for(i=1;i<AnzahlDS+1;i++){
			strcpy(InputName,SrcDat);
			strcat(InputName,"DS.e");
			if(Language==1){
				strcpy(InputName,SrcDat);
				strcat(InputName,"DS.g");
				}
			InTextPointer=fopen(InputName,"r");
			if(!InTextPointer){
				sprintf(ZWSPName,"Can´t find %sDS.(l)-Datei ... terminating",SrcDat);
				Close(OutTextPointer);
				DisplayErrorMessage("Error : can´t find DS.(l)-Datei!");
				}
			HereIsAIC=FALSE;
			STAT=FALSE;
			NOSPACE=FALSE;
			while(STAT==FALSE){
			  fscanf(InTextPointer,"%s\n",&ZWSPName[0]);
				if((strncmp(&ZWSPName[0],"[END]",5))==0) STAT=TRUE;
				if((strncmp(&ZWSPName[0],"[NUM]",5))==0) sprintf(ZWSPName,"%i",i);
				if((strncmp(&ZWSPName[0],"[STF]",5))==0) sprintf(ZWSPName,"%i",GetStufe(i,4));
				if((strncmp(&ZWSPName[0],"[DFV]",5))==0) sprintf(ZWSPName,"%i",GetDatenWert(i,4));
				if((strncmp(&ZWSPName[0],"[DFS]",5))==0) sprintf(ZWSPName,"%i",GetDatenSize(i,4));
				if((strncmp(&ZWSPName[0],"[TYP]",5))==0){
					NOSPACE=TRUE;
					sprintf(ZWSPName,PreString[GetTypeName(i,4)]);
					}
				if((strncmp(&ZWSPName[0],"[IDT]",5))==0){
					sprintf(ZWSPName,DataString[GetDataInfoWert(i,4)]);
					}
				if((strncmp(&ZWSPName[0],"[ICT]",5))==0){
					NOSPACE=TRUE;
					if(GetIceName(i,4)<1) sprintf(ZWSPName,"%s",IceTypeString[GetIceName(i,4)]);
					else sprintf(ZWSPName,"%sIC (",IceTypeString[GetIceName(i,4)]);
					HereIsAIC=TRUE;
					}
				if((HereIsAIC==TRUE)&&((strncmp(&ZWSPName[0],"[ICA]",5))==0)){
					if(GetIceNameType(i,4)<1) sprintf(ZWSPName,"%s",IceStufeString[GetIceNameType(i,4)]);
					else sprintf(ZWSPName,"%s IC)",IceStufeString[GetIceNameType(i,4)]);
					HereIsAIC=FALSE;
					}
				if((HereIsAIC==TRUE)&&((strncmp(&ZWSPName[0],"[ICS]",5))==0)){
					if(GetIceStufe(i,4)==0) sprintf(ZWSPName," ");
					else sprintf(ZWSPName,"%s %i,",StufeString[Language],GetIceStufe(i,4));
					}
				if((strncmp(&ZWSPName[0],"[WDT]",5))==0){
					NOSPACE=TRUE;
					if(GetWD(i,4)==TRUE){
						sprintf(ZWSPName,"%sIC (",IceTypeString[8+Language]);
						}
					else sprintf(ZWSPName,"nothing");
					HereIsWDIC=TRUE;
					}
				if((HereIsWDIC==TRUE)&&((strncmp(&ZWSPName[0],"[WDA]",5))==0)){
					if(GetWD(i,4)==TRUE){
						sprintf(ZWSPName,"%s IC)",IceStufeString[1+Language]);
						HereIsWDIC=FALSE;
						}
					else sprintf(ZWSPName," ");
					}
				if((HereIsWDIC==TRUE)&&((strncmp(&ZWSPName[0],"[WDS]",5))==0)){
					if(GetWD(i,4)==TRUE){
						sprintf(ZWSPName,"%s %i,",StufeString[Language],GetWDIceStufe(i,4));
						}
					else sprintf(ZWSPName," ");
					}
				if((strncmp(&ZWSPName[0],"[MON]",5))==0){
					for(yy=0;yy<12;yy++){
						for(xx=0;xx<12;xx++){
							if((Matrix[xx+12*yy].Nummer==i)&&(Matrix[xx+12*yy].Type==4)){
								sprintf(ZWSPName,"%i",Matrix[xx+12*yy].Datenwert*Matrix[xx+12*yy].Datensize);
								}
							}
						}
					}
				if(STAT==FALSE){
					if((ZWSPName[0]==0x5c)&&(ZWSPName[1]==0x6e)) Write(OutTextPointer,&EOLine[0],1);
					else{
						Write(OutTextPointer,&ZWSPName[0],strlen(&ZWSPName[0]));
						if(NOSPACE==FALSE) Write(OutTextPointer," ",1);
						NOSPACE=FALSE;
						}
					}
				}
			fclose(InTextPointer);
			}
		if(OutputType==1){
			ZWSPName[0]=0x5c;
			Write(OutTextPointer,&ZWSPName[0],1);
			sprintf(ZWSPName,"end{document}");
			Write(OutTextPointer,&ZWSPName[0],strlen(&ZWSPName[0]));
			Write(OutTextPointer,&EOLine[0],1);
			}
		Close(OutTextPointer);
		}
	return TRUE;
	}

void StatusAusgabe(char *StatName){
LONG StatusFilePointer;
char ZWSPName[255];
	CountNodes();
	CountBlueDS();
	if(StatusFile==TRUE){
		StatusFilePointer=Open(StatName,MODE_NEWFILE);
		if(!StatusFilePointer){
			DisplayErrorMessage("Fehler : Save-Datei nicht anlegbar!");
			}
		else{
			sprintf(ZWSPName,"Status\n");
			Write(StatusFilePointer,&ZWSPName[0],strlen(&ZWSPName[0]));
			sprintf(ZWSPName,"\n");
			Write(StatusFilePointer,&ZWSPName[0],strlen(&ZWSPName[0]));
			sprintf(ZWSPName,"Number Of CPU : %3i\n",AnzahlCPU);
			Write(StatusFilePointer,&ZWSPName[0],strlen(&ZWSPName[0]));
			sprintf(ZWSPName,"Number Of SPU : %3i\n",AnzahlSPU);
			Write(StatusFilePointer,&ZWSPName[0],strlen(&ZWSPName[0]));
			sprintf(ZWSPName,"Number Of IOP : %3i\n",AnzahlIOP);
			Write(StatusFilePointer,&ZWSPName[0],strlen(&ZWSPName[0]));
			sprintf(ZWSPName,"Number Of DS  : %3i\n",AnzahlDS);
			Write(StatusFilePointer,&ZWSPName[0],strlen(&ZWSPName[0]));
			sprintf(ZWSPName,"     Blue DS  :(%3i)\n",AnzahlDS);
			Write(StatusFilePointer,&ZWSPName[0],strlen(&ZWSPName[0]));
			sprintf(ZWSPName,"Number Of SAN : %3i\n",AnzahlSAN);
			Write(StatusFilePointer,&ZWSPName[0],strlen(&ZWSPName[0]));
			sprintf(ZWSPName,"Number Of SN  : %3i\n",AnzahlSN);
			Write(StatusFilePointer,&ZWSPName[0],strlen(&ZWSPName[0]));
			sprintf(ZWSPName,"                ---\n");
			Write(StatusFilePointer,&ZWSPName[0],strlen(&ZWSPName[0]));
			sprintf(ZWSPName,"Number Of :   : %3i\n",AusgangsKnoten);
			Write(StatusFilePointer,&ZWSPName[0],strlen(&ZWSPName[0]));
			sprintf(ZWSPName,"\n");
			Write(StatusFilePointer,&ZWSPName[0],strlen(&ZWSPName[0]));
			for(yi=0;yi<12;yi++){
				for(xi=0;xi<12;xi++){
					if(Matrix[xi+12*yi].Type==4){
						sprintf(ZWSPName,"Pos(%2i,%2i) Wert:%6i Größe:%3i ",xi,yi,Matrix[xi+12*yi].Datenwert,Matrix[xi+12*yi].Datensize);
						Write(StatusFilePointer,&ZWSPName[0],strlen(&ZWSPName[0]));
						if(Matrix[xi+12*yi].WichtigeDaten==TRUE){
							sprintf(ZWSPName,"! important data !");
							Write(StatusFilePointer,&ZWSPName[0],strlen(&ZWSPName[0]));
							}
						sprintf(ZWSPName,"\n");
						Write(StatusFilePointer,&ZWSPName[0],strlen(&ZWSPName[0]));
						}
					}
				}
			Close(StatusFilePointer);
			}
		}
	else{
		printf("Status\n");
		printf("\n");
		printf("Number Of CPU : %3i\n",AnzahlCPU);
		printf("Number Of SPU : %3i\n",AnzahlSPU);
		printf("Number Of IOP : %3i\n",AnzahlIOP);
		printf("Number Of DS  : %3i\n",AnzahlDS);
		printf("     Blue DS  :(%3i)\n",AnzahlBlueNodes);
		printf("Number Of SAN : %3i\n",AnzahlSAN);
		printf("Number Of SN  : %3i\n",AnzahlSN);
		printf("                ---\n");
		printf("Number Of :   : %3i\n",AusgangsKnoten);
		printf("\n");
		for(yi=0;yi<12;yi++){
			for(xi=0;xi<12;xi++){
				if(Matrix[xi+12*yi].Type==4){
					printf("Pos(%2i,%2i) Wert:%6i Größe:%3i ",xi,yi,Matrix[xi+12*yi].Datenwert,Matrix[xi+12*yi].Datensize);
					if(Matrix[xi+12*yi].WichtigeDaten==TRUE){
						printf("! important data !");
						}
					printf("\n");
					}
				}
			}
		}
	}

void ScanPrefs(){
FILE *StatusFilePointer;
char ZWSPName[255];
BOOL STAT;
	if(PrefsFile==TRUE){
		StatusFilePointer=fopen("MatrixGen.pre","r");
		if(!StatusFilePointer){
			printf("\n");
			printf("Prefs-File Not Found! ... Using Standard-Prefs\n");
			printf("\n");
			}
		else{
			STAT=FALSE;
		  fscanf(StatusFilePointer,"%s",&ZWSPName[0]);
			if((strncmp(&ZWSPName[0],"*Header*",8))==0){
				while(STAT==FALSE){
				  fscanf(StatusFilePointer,"%s",&ZWSPName[0]);
					if((strncmp(&ZWSPName[0],"[END]",5))==0) STAT=TRUE;
					if(STAT==FALSE){
						if((strncmp(&ZWSPName[0],"NODES",5))==0){
						  fscanf(StatusFilePointer,"%s",&ZWSPName[0]);
							stcd_i(&ZWSPName[0],&AnzahlKnoten);
							}
						if((strncmp(&ZWSPName[0],"BLUENODES",9))==0){
						  fscanf(StatusFilePointer,"%s",&ZWSPName[0]);
							if((strncmp(&ZWSPName[0],"YES",3))==0){
								BlaueKnoten=TRUE;
								}
							}
						if((strncmp(&ZWSPName[0],"STATUSFILE",10))==0){
						  fscanf(StatusFilePointer,"%s",&ZWSPName[0]);
							if((strncmp(&ZWSPName[0],"YES",3))==0){
								StatusFile=TRUE;
								}
							}
							}
						if((strncmp(&ZWSPName[0],"GERMAN",6))==0){
						  fscanf(StatusFilePointer,"%s",&ZWSPName[0]);
							if((strncmp(&ZWSPName[0],"YES",3))==0){
								MaxFarben=7;
								}
							}
						if((strncmp(&ZWSPName[0],"CHECKDL",7))==0){
						  fscanf(StatusFilePointer,"%s",&ZWSPName[0]);
							if((strncmp(&ZWSPName[0],"YES",3))==0){
								CheckLevelCode=TRUE;
								}
							}
						if((strncmp(&ZWSPName[0],"SHADOW",6))==0){
						  fscanf(StatusFilePointer,"%s",&ZWSPName[0]);
							if((strncmp(&ZWSPName[0],"YES",3))==0){
								Schatten=TRUE;
								}
							}
						if((strncmp(&ZWSPName[0],"ALWAYSIC",6))==0){
						  fscanf(StatusFilePointer,"%s",&ZWSPName[0]);
							if((strncmp(&ZWSPName[0],"YES",3))==0){
								AlwaysICInfo=TRUE;
								}
							}
						if((strncmp(&ZWSPName[0],"ALWAYSDS",6))==0){
						  fscanf(StatusFilePointer,"%s",&ZWSPName[0]);
							if((strncmp(&ZWSPName[0],"YES",3))==0){
								AlwaysICDS=TRUE;
								}
							}
						if((strncmp(&ZWSPName[0],"IMPORTANT",9))==0){
						  fscanf(StatusFilePointer,"%s",&ZWSPName[0]);
							stcd_i(&ZWSPName[0],&AnzahlWichtigeDaten);
							}
						if((strncmp(&ZWSPName[0],"LANGUAGE",8))==0){
						  fscanf(StatusFilePointer,"%s",&ZWSPName[0]);
							if((strncmp(&ZWSPName[0],"ENGLISH",7))==0){
								Language=0;
								}
							if((strncmp(&ZWSPName[0],"DEUTSCH",7))==0){
								Language=1;
								}
							}
						if((strncmp(&ZWSPName[0],"MAXSAN",6))==0){
						  fscanf(StatusFilePointer,"%s",&ZWSPName[0]);
							stcd_i(&ZWSPName[0],&MaxSAN);
							MaxSAN++;
							}
						if((strncmp(&ZWSPName[0],"NOMONEY",7))==0){
						  fscanf(StatusFilePointer,"%s",&ZWSPName[0]);
							if((strncmp(&ZWSPName[0],"YES",3))==0){
								KeineDatenspeicher=TRUE;
								}
							}
						if((strncmp(&ZWSPName[0],"STANDARDUSE",11))==0){
						  fscanf(StatusFilePointer,"%s",&ZWSPName[0]);
							if((strncmp(&ZWSPName[0],"YES",3))==0){
								Zufallsstufen=FALSE;
								}
							}
						if((strncmp(&ZWSPName[0],"NOIC",4))==0){
						  fscanf(StatusFilePointer,"%s",&ZWSPName[0]);
							if((strncmp(&ZWSPName[0],"YES",3))==0){
								InstallNoIC=TRUE;
								}
							}
						if((strncmp(&ZWSPName[0],"STANDARDLEVEL",13))==0){
						  fscanf(StatusFilePointer,"%s",&ZWSPName[0]);
							stcd_i(&ZWSPName[0],&Stufenwert);
							}
						if((strncmp(&ZWSPName[0],"STANDARDFILE",12))==0){
						  fscanf(StatusFilePointer,"%s",&ZWSPName[0]);
							strcpy(StandardName,&ZWSPName[0]);
							strcpy(GfxName,StandardName);
							strcat(GfxName,".IFF");
							strcpy(TextName,StandardName);
							}
						if((strncmp(&ZWSPName[0],"OUTPUT",6))==0){
						  fscanf(StatusFilePointer,"%s",&ZWSPName[0]);
							if((strncmp(&ZWSPName[0],"TEX",3))==0){
								OutputType=1;
								}
							if((strncmp(&ZWSPName[0],"ASCII",3))==0){
								OutputType=0;
								}
							}
						if((strncmp(&ZWSPName[0],"RANDOM",6))==0){
						  fscanf(StatusFilePointer,"%s",&ZWSPName[0]);
							if((strncmp(&ZWSPName[0],"YES",3))==0){
								RandomDSValue=TRUE;
								}
							}
						if((strncmp(&ZWSPName[0],"DATAFIELD",9))==0){
						  fscanf(StatusFilePointer,"%s",&ZWSPName[0]);
							if((strncmp(&ZWSPName[0],"YES",3))==0){
								SaveDatenfeld=TRUE;
								}
							}
						}
					fclose(StatusFilePointer);
					AusgangsWichtigeDaten=AnzahlWichtigeDaten;
					if(AnzahlKnoten<5) DisplayErrorMessage("option -a, too few nodes");
					if(AnzahlKnoten>100) DisplayErrorMessage("option -a, too much nodes");
					if(AnzahlWichtigeDaten<0) DisplayErrorMessage("option -i, greater than 0");
					if(AnzahlWichtigeDaten>100) DisplayErrorMessage("option -i, smaller than 100");
					if(AnzahlWichtigeDaten>AnzahlKnoten) DisplayErrorMessage("option -i, not more than nodes (-a)");
					if(MaxSAN<1) DisplayErrorMessage("option -m, greater than 0");
					if(MaxSAN>20) DisplayErrorMessage("option -m, smaller than 20");
					if(Stufenwert<2) DisplayErrorMessage("option -r, greater than 2");
					if(Stufenwert>MaxFarben) DisplayErrorMessage("option -r, smaller than 5, or 7(if -g)");
					AusgangsKnoten=AnzahlKnoten;
					if(StatusFile==TRUE){
						strcpy(StatusName,StandardName);
						strcat(StatusName,".STAT");
						}
				}
			else{
				printf("\n");
				printf("Prefs-File Has Errors! ... Using Standard-Prefs\n");
				printf("\n");
				fclose(StatusFilePointer);
				}
			}
		}
	}

BOOL SaveIFF(char *OpenFileName){
	ULONG zwsp[1];

	SaveNamePointer=Open(OpenFileName,MODE_NEWFILE);
	if(!SaveNamePointer){
		DisplayErrorMessage("Error : Save-Gfx(IFF)-Datei!");
		}
	else{
		Write(SaveNamePointer,"FORM",4);
		zwsp[0]=4;	/* ILBM */
		zwsp[0]+=sizeof(BMHD)+8; /* BMHD */
		zwsp[0]+=48; /* CMAP */
		zwsp[0]+=8; /* CMAP-Header */
		zwsp[0]+=12; /* CAMG */
		zwsp[0]+=BMHD.Width*BMHD.Height*BMHD.nPlanes/8+8; /* BODY */
		Write(SaveNamePointer,&zwsp[0],4);
		Write(SaveNamePointer,"ILBM",4);
		Write(SaveNamePointer,"BMHD",4);
		BMHD.compression=0;
		BMHD.masking=0;
		zwsp[0]=sizeof(BMHD);
		Write(SaveNamePointer,&zwsp[0],4);
		Write(SaveNamePointer,&BMHD,sizeof(BMHD));
		Write(SaveNamePointer,"CMAP",4);
		zwsp[0]=48;
		Write(SaveNamePointer,&zwsp[0],4);
		Write(SaveNamePointer,&Colors[0],48);
		Write(SaveNamePointer,"CAMG",4);
		zwsp[0]=4;
		Write(SaveNamePointer,&zwsp[0],4);
		zwsp[0]=4;
		Write(SaveNamePointer,&CAMG,4);
		Write(SaveNamePointer,"BODY",4);
		zwsp[0]=BMHD.Width*BMHD.Height*BMHD.nPlanes/8;
		Write(SaveNamePointer,&zwsp[0],4);
		for(yi=0;yi<BMHD.Height;yi++){
			for(b=0;b<BMHD.nPlanes;b++){
				Write(SaveNamePointer,MyScreen->RastPort.BitMap->Planes[b]+yi*(BMHD.Width/8),BMHD.Width/8);
				}
			}
		}
	return TRUE;
	}

void SaveData(char *OpenFileName){
ULONG zwsp[1];
LONG StatNamePointer;

	StatNamePointer=Open(OpenFileName,MODE_NEWFILE);
	if(!StatNamePointer){
		DisplayErrorMessage("Error : Stat-Datas-Datei!");
		}
	else{
		Write(StatNamePointer,"FORM",4);
		zwsp[0]=20;	/* MTRX + DATA + STRT */
		zwsp[0]+=sizeof(struct MatrixGenType); /* DATA */
		zwsp[0]+=144*sizeof(struct MatrixKomponenten); /* DatenFeld */
		Write(StatNamePointer,&zwsp[0],4);
		Write(StatNamePointer,"MTGN",4);
		Write(StatNamePointer,"DATA",4);
		zwsp[0]=sizeof(struct MatrixGenType);
		Write(StatNamePointer,&zwsp[0],4);
		Write(StatNamePointer,&MatrixDatas[0],sizeof(struct MatrixGenType));
		Write(StatNamePointer,"STRT",4);
		zwsp[0]=144*sizeof(struct MatrixKomponenten);
		Write(StatNamePointer,&zwsp[0],4);
		Write(StatNamePointer,&Matrix[0],144*sizeof(struct MatrixKomponenten));
		Close(StatNamePointer);
		}
	}

void LoadData(char *OpenFileName){
ULONG zwsp[255];
LONG StatNamePointer;

	StatNamePointer=Open(OpenFileName,MODE_OLDFILE);
	if(!StatNamePointer){
		DisplayErrorMessage("Error : Stat-Datas-Datei!");
		}
	else{
		Read(StatNamePointer,&zwsp[0],8);
		if(strncmp(&zwsp[0],"FORM",4)==0){
			Read(StatNamePointer,&zwsp[0],12);
			if(strncmp(&zwsp[0],"MTGNDATA",8)==0){
				Read(StatNamePointer,&MatrixDatas[0],sizeof(struct MatrixGenType));
				Read(StatNamePointer,&zwsp[0],8);
				if(strncmp(&zwsp[0],"STRT",4)==0){
					Read(StatNamePointer,&Matrix[0],144*sizeof(struct MatrixKomponenten));
					Close(StatNamePointer);
					if((MatrixDatas[0].Version!=MGVersion)||(MatrixDatas[0].Revision!=MGRevision)){
						DisplayErrorMessage("wrong version!");
						}
					}
				else{
					Close(StatNamePointer);
					DisplayErrorMessage("error in datafield-file");
					}
				}
			else{
				Close(StatNamePointer);
				DisplayErrorMessage("error in datafield-file");
				}
			}
		else{
			Close(StatNamePointer);
			DisplayErrorMessage("error in datafield-file");
			}
		Read(StatNamePointer,&Matrix[0],144*sizeof(struct MatrixKomponenten));
		}
	}
