(* Copyright by Lemongrass - Carolina Stöckli & Marc Pancera *)
(* if this Code is used by others, please refer to our Names!*)

PROCEDURE Faltblatt;

VAR
	textString:STRING;
	myChar:CHAR;
	textNum:INTEGER;
	iLetter:INTEGER;

	zufallH:BOOLEAN;
	zufallW:BOOLEAN;
	zufallDepth:BOOLEAN;
	zufallsfaktor:REAL;

	Absatz:STRING;
	Einzug:INTEGER;
	Format:STRING;
	pageW:INTEGER;
	pageH:INTEGER;
	pageX:INTEGER;
	
	StartH:INTEGER;
	EndH:INTEGER;
	StartW:INTEGER;
	EndW:INTEGER;

	LetterX:INTEGER;
	LetterY:INTEGER;
	LetterH:INTEGER;
	LetterW:INTEGER;
	LetterSpace:INTEGER;
	LetterGap:INTEGER;
	LetterDepth:INTEGER;
	TextLength:INTEGER;
	SteigungDepth:INTEGER;
	SteigungW:INTEGER;
	SteigungH:INTEGER;

{_____ Hier werden globale Programmteile (Subroutienen) geschrieben, welche z.B. mehrmals
			gebraucht werden. So kann man den Code überschaubar halten und er bleibt einfacher
			zu editieren. Hier sind auch alle Buchstaben als einzelne SubRoutienen zu finden. _____}

(*____Stiftformate:
		{___Stift auf schneiden ______ setzen___}
		penFore(0,0,0);
		penPat(2);
		{___Stift auf "falten" -.-.-.- setzen___}
		penFore(65535,0,0);
		penPat(2);
		{___Stift auf "ritzen" ------- setzen___}
		penFore(0,65535,0);
		penPat(2);
___*)

PROCEDURE Blatt(pageW,pageH,pageX:INTEGER);
	BEGIN
		{___Stift auf schneiden setzen___}
		penFore(0,0,0);
		penPat(2);
		moveto(pageX+0,-pageH/2);
		lineto(pageX+pageW,-pageH/2);
		lineto(pageX+pageW,-pageH/2+pageH);
		lineto(pageX+0,-pageH/2+pageH);
		lineto(pageX+0,-pageH/2);

		(*diese Faltkante wird in den Buchstaben direkt gezeichnet...
		{___Stift auf "falten" -.-.-.- setzen___}
		penFore(65535,0,0);
		penPat(2);
		moveto(pageX+0,-pageH/2+pageH/2);
		lineto(pageX+pageW,-pageH/2+pageH/2);*)
	END;

{$include SubProcedures.vss}

{_____ Hier geht der eigentliche HauptProgrammcode los. Eventuelle Subroutienen werden hier nur noch
			aufgerufen. ____}

BEGIN
	
	LetterH:=pLetterH;
	LetterW:=pLetterW;
	LetterGap:=pLetterGap;
	LetterDepth:=pLetterDepth;
	SteigungDepth:=pSteigungDepth;
	SteigungW:=pSteigungW;
	SteigungH:=pSteigungH;
	LetterX:=0;
	LetterY:=0;

	{______Textabfrageschlaufe_______}
	
	textString:=ptextString; {Möglichkeiten: ABCDEFGHIJKLMNOPQRSTUVWXYZ_ siehe "SubProcedures.vss"}
	textNum:=Len(textString);		{Len() gibt als Wert die Länge der Variablen in der Klammer zurück}

	FOR iLetter:=1 TO textNum DO BEGIN
		myChar:=Copy(textString, iLetter, 1); 		{Mit Copy() wird die jeweils i'te Position von testString an}
																{die Variable myChar übergeben, beginnend bei 1}
		UprString(myChar);							{so wird der Buchstabe in einen GROSSBUCHSTABEN umgewandelt}

		zufallH:=pzufallH;
		zufallW:=pzufallW;
		zufallDepth:=pzufallDepth;
		zufallsfaktor:=pzufallsfaktor;
		
		IF zufallH=true THEN BEGIN
			LetterH:=Random*zufallsfaktor+10;
		END
		ELSE BEGIN
			LetterH:=LetterH+SteigungH;
		END;
		IF zufallW=true THEN BEGIN
			LetterW:=Random*zufallsfaktor+10;
		END
		ELSE BEGIN
			LetterW:=LetterW+SteigungW;
		END;
		IF zufallDepth=true THEN BEGIN
			LetterDepth:=Random*zufallsfaktor+10;
		END
		ELSE BEGIN
			LetterDepth:=LetterDepth+SteigungDepth;
		END;

		LetterY:=pageH/2-LetterDepth;
		penFore(65535,0,0);										{hier wird die Faltkante des Blattes jeweils zwischen den Buchstaben gezeichnet}
		penPat(2);
		MoveTo	(LetterX,LetterY+LetterDepth);
		LineTo	(LetterX-LetterGap,LetterY+LetterDepth);

		CASE myChar OF
		'A':		BEGIN
						A(LetterW, LetterH, LetterX, LetterY, LetterDepth);
						LetterSpace:=LetterW*1;
					END;
		'B':		BEGIN
						B(LetterW, LetterH, LetterX, LetterY, LetterDepth);
						LetterSpace:=LetterW*0.7;
					END;
		'C':		BEGIN
						C(LetterW, LetterH, LetterX, LetterY, LetterDepth);
						LetterSpace:=LetterW*0.6;
					END;
		'D':		BEGIN
						D(LetterW, LetterH, LetterX, LetterY, LetterDepth);
						LetterSpace:=LetterW*0.7;
					END;
		'E':		BEGIN
						E(LetterW, LetterH, LetterX, LetterY, LetterDepth);
						LetterSpace:=LetterW*0.6;
					END;
		'F':		BEGIN
						F(LetterW, LetterH, LetterX, LetterY, LetterDepth);
						LetterSpace:=LetterW*0.6;
					END;
		'G':		BEGIN
						G(LetterW, LetterH, LetterX, LetterY, LetterDepth);
						LetterSpace:=LetterW*0.7;
					END;
		'H':		BEGIN
						H(LetterW, LetterH, LetterX, LetterY, LetterDepth);
						LetterSpace:=LetterW*0.7;
					END;
		'I':		BEGIN
						I(LetterW, LetterH, LetterX, LetterY, LetterDepth);
						LetterSpace:=LetterW*0.2;
					END;
		'J':		BEGIN
						J(LetterW, LetterH, LetterX, LetterY, LetterDepth);
						LetterSpace:=LetterW*0.6;
					END;
		'K':		BEGIN
						K(LetterW, LetterH, LetterX, LetterY, LetterDepth);
						LetterSpace:=LetterW*0.7;
					END;
		'L':		BEGIN
						L(LetterW, LetterH, LetterX, LetterY, LetterDepth);
						LetterSpace:=LetterW*0.7;
					END;
		'M':		BEGIN
						M(LetterW, LetterH, LetterX, LetterY, LetterDepth);
						LetterSpace:=LetterW*1.0;
					END;
		'N':		BEGIN
						N(LetterW, LetterH, LetterX, LetterY, LetterDepth);
						LetterSpace:=LetterW*0.7;
					END;
		'O':		BEGIN
						O(LetterW, LetterH, LetterX, LetterY, LetterDepth);
						LetterSpace:=LetterW*0.7;
					END;
		'P':		BEGIN
						P(LetterW, LetterH, LetterX, LetterY, LetterDepth);
						LetterSpace:=LetterW*0.7;
					END;
		'Q':		BEGIN
						Q(LetterW, LetterH, LetterX, LetterY, LetterDepth);
						LetterSpace:=LetterW*0.7;
					END;
		'R':		BEGIN
						R(LetterW, LetterH, LetterX, LetterY, LetterDepth);
						LetterSpace:=LetterW*0.7;
					END;
		'S':		BEGIN
						S(LetterW, LetterH, LetterX, LetterY, LetterDepth);
						LetterSpace:=LetterW*0.7;
					END;
		'T':		BEGIN
						T(LetterW, LetterH, LetterX, LetterY, LetterDepth);
						LetterSpace:=LetterW*0.7;
					END;
		'U':		BEGIN
						U(LetterW, LetterH, LetterX, LetterY, LetterDepth);
						LetterSpace:=LetterW*0.7;
					END;
		'V':		BEGIN
						V(LetterW, LetterH, LetterX, LetterY, LetterDepth);
						LetterSpace:=LetterW*0.7;
					END;
		'W':		BEGIN
						W(LetterW, LetterH, LetterX, LetterY, LetterDepth);
						LetterSpace:=LetterW*1.0;
					END;
		'X':		BEGIN
						X(LetterW, LetterH, LetterX, LetterY, LetterDepth);
						LetterSpace:=LetterW*0.7;
					END;
		'Y':		BEGIN
						Y(LetterW, LetterH, LetterX, LetterY, LetterDepth);
						LetterSpace:=LetterW*0.7;
					END;
		'Z':		BEGIN
						Z(LetterW, LetterH, LetterX, LetterY, LetterDepth);
						LetterSpace:=LetterW*0.7;
					END;
		' ':		BEGIN
						leer(LetterW, LetterH, LetterX, LetterY, LetterDepth);
						LetterSpace:=LetterW*0.4;
					END;

		OTHERWISE Message('bitte verwenden sie keine Umlaute oder Sonderzeichen');
		END;

	{______Schlaufeninterne wachsende/schrumpfende Werte_______}
	
		LetterX:=			LetterX+LetterSpace+LetterGap;
		TextLength:=		TextLength+LetterSpace+LetterGap;

	END;
	
	penFore(65535,0,0);										{hier wird die Faltkante des Blattes jeweils zwischen den Buchstaben gezeichnet}
	penPat(2);
	MoveTo	(TextLength-LetterGap,LetterY+LetterDepth-SteigungW);
	LineTo	(TextLength,LetterY+LetterDepth-SteigungW);

	{______Blattformatsteuerung_______}
	
	Format:=pFormat;

	IF Format='A3 hoch' THEN BEGIN pageH:=420; pageW:=297; END;
	IF Format='A3 quer' THEN BEGIN pageH:=297; pageW:=420; END;
	IF Format='A4 hoch' THEN BEGIN pageH:=297; pageW:=210; END;
	IF Format='A4 quer' THEN BEGIN pageH:=210; pageW:=297; END;
	IF Format='A5 hoch' THEN BEGIN pageH:=210; pageW:=148; END;
	IF Format='A5 quer' THEN BEGIN pageH:=148; pageW:=210; END;
	IF Format='A6 hoch' THEN BEGIN pageH:=148; pageW:=105; END;
	IF Format='A6 quer' THEN BEGIN pageH:=105; pageW:=148; END;
	IF Format='benutzerdefiniert' THEN BEGIN pageH:=ppageH; pageW:=ppageW; END;

	{______Absatzformat_______}

	Absatz:=pAbsatz;
	Einzug:=pEinzug;

	IF Absatz='links' 		THEN BEGIN pageX:=-LetterGap-Einzug; END;
	IF Absatz='zentriert' 	THEN BEGIN pageX:=(TextLength)/2-pageW/2; END;
	IF Absatz='rechts' 		THEN BEGIN pageX:=(TextLength)-pageW+Einzug; END;

	Blatt(pageW,pageH,pageX);

	{______Warnungen_______}

	IF pageW <= (TextLength+LetterGap) THEN BEGIN
	Message('Text ist zu lang für das gewählte Papierformat, mind benötigte Seitenbreite ', TextLength+LetterGap,'mm');
	END;
	IF pageH <= (LetterH+Letterdepth) THEN BEGIN
	Message('Text ist insgesamt zu hoch für das gewählte Papierformat, mind benötigte Seitenhöhe ', LetterH+SteigungH+Letterdepth,'mm');
	END;

END;
RUN(Faltblatt);