/*
** Druck-, Vorschau, Sichern eines Etiketts
** $VER: XXEtikett.adrrexx V1.01 (30.07.98)
*/

PARSE ARG ARexxPort;

ADDRESS VALUE ARexxPort;
OPTIONS RESULTS;

/*********************************************************************/
/* Druckerunabhängige Standard-ANSI-Escape-Sequenzen und ASCII-Zeich.*/
/* Siehe auch Workbench-Handbuch (bei OS3.1: Kapitel 9.6.1)				*/
/*********************************************************************/
CR					= '0d'x;							/* Wagenrücklauf				*/
LF					= '0a'x;							/* Zeilenvorschub				*/
FF					= '0c'x;							/* Seitenvorschub				*/
TAB				= '09'x;							/* Tabulator					*/
ESC				= '1b'x;							/* ESC							*/
aRIS				= ESC || "c";					/* Drucker zurücksetzen		*/
aRIN				= ESC || "#1";					/* Drucker initialisieren	*/
aIND				= ESC || "D";					/* Zeilenvorschub				*/
aNEL				= ESC || "E";					/* Wagenruecklauf +			*/
aRI				= ESC || "M";					/* umgekehrter Zeilenvors.	*/
aSGR0				= ESC || "[0m";				/* Normaler Zeichensatz		*/
aSGR3				= ESC || "[3m";				/* Kursivdruck			EIN	*/
aSGR23			= ESC || "[23m";				/* Kursivdruck			AUS	*/
aSGR4				= ESC || "[4m";				/* Unterstreichung	EIN	*/
aSGR24			= ESC || "[24m";				/* Unterstreichung	AUS	*/
aSGR1				= ESC || "[1m";				/* Fettdruck			EIN	*/
aSGR22			= ESC || "[22m";				/* Fettdruck			AUS	*/
aSFC_0			= ESC || "[30m";				/* Farbe Schrift: Schwarz	*/
aSFC_1			= ESC || "[31m";				/* Farbe Schrift: Rot		*/
aSFC_2			= ESC || "[32m";				/* Farbe Schrift: Grün		*/
aSFC_3			= ESC || "[33m";				/* Farbe Schrift: Gelb		*/
aSFC_4			= ESC || "[34m";				/* Farbe Schrift: Violett	*/
aSFC_5			= ESC || "[35m";				/* Farbe Schrift: Magenta	*/
aSFC_6			= ESC || "[36m";				/* Farbe Schrift: Zyan		*/
aSFC_7			= ESC || "[37m";				/* Farbe Schrift: Schwarz	*/
aSFC_8			= ESC || "[38m";				/* Farbe Schrift: Schwarz	*/
aSFC_9			= ESC || "[39m";				/* Farbe Schrift: Schwarz	*/
aSBC_0			= ESC || "[40m";				/* Farbe Hinterg: Weiß		*/
aSBC_1			= ESC || "[41m";				/* Farbe Hinterg: Rot		*/
aSBC_2			= ESC || "[42m";				/* Farbe Hinterg: Grün		*/
aSBC_3			= ESC || "[43m";				/* Farbe Hinterg: Gelb		*/
aSBC_4			= ESC || "[44m";				/* Farbe Hinterg: Violett	*/
aSBC_5			= ESC || "[45m";				/* Farbe Hinterg: Magenta	*/
aSBC_6			= ESC || "[46m";				/* Farbe Hinterg: Zyan		*/
aSBC_7			= ESC || "[47m";				/* Farbe Hinterg: Schwarz	*/
aSBC_8			= ESC || "[48m";				/* Farbe Hinterg: Schwarz	*/
aSBC_9			= ESC || "[49m";				/* Farbe Hinterg: Schwarz	*/
aSHORP0			= ESC || "[0w";				/* Normale Zeichendichte	*/
aSHORP			= ESC || "[2w";				/* Zeichend. "Elite"	EIN	*/
aSHORP1			= ESC || "[1w";				/* Zeichend. "Elite"	AUS	*/
aSHORP4			= ESC || "[4w";				/* Engschrift			EIN	*/
aSHORP3			= ESC || "[3w";				/* Engschrift			AUS	*/
aSHORP6			= ESC || "[6w";				/* Breitdruck			EIN	*/
aSHORP5			= ESC || "[5w";				/* Breitdruck			AUS	*/
aDEN6				= ESC || "[6"||'22'x||"z";	/* Schattendruck		EIN	*/
aDEN5				= ESC || "[5"||'22'x||"z";	/* Schattendruck		AUS	*/
aDEN4				= ESC || "[4"||'22'x||"z";	/* Doppeldruck			EIN	*/
aDEN3				= ESC || "[3"||'22'x||"z";	/* Doppeldruck			AUS	*/
aDEN2				= ESC || "[2"||'22'x||"z";	/* NLQ/LQ				EIN	*/
aDEN1				= ESC || "[1"||'22'x||"z";	/* NLQ/LQ				AUS	*/
aSUS2				= ESC || "[2v";				/* Hochstellung		EIN	*/
aSUS1				= ESC || "[1v";				/* Hochstellung		AUS	*/
aSUS4				= ESC || "[4v";				/* Tiefstellung		EIN	*/
aSUS3				= ESC || "[3v";				/* Tiefstellung		AUS	*/
aSUS0				= ESC || "[0v";				/* Zeile Zurück zu Normal	*/
aPLU				= ESC || "1";					/* Textzeile nach oben		*/
aPLD				= ESC || "K";					/* Textzeile nach unten		*/
aFNT0				= ESC || "(B";					/* Zeichensatz US				*/
aFNT1				= ESC || "(R";					/* Zeichensatz Französisch	*/
aFNT2				= ESC || "(K";					/* Zeichensatz Deutsch		*/
aFNT3				= ESC || "(A";					/* Zeichensatz GB				*/
aFNT4				= ESC || "(E";					/* Zeichensatz Dänisch I	*/
aFNT5				= ESC || "(H";					/* Zeichensatz Schwedisch	*/
aFNT6				= ESC || "(Y";					/* Zeichensatz Italienisch	*/
aFNT7				= ESC || "(Z";					/* Zeichensatz Spanisch		*/
aFNT8				= ESC || "(J";					/* Zeichensatz Japanisch	*/
aFNT9				= ESC || "(6";					/* Zeichensatz Norwegisch	*/
aFNT10			= ESC || "(C";					/* Zeichensatz Dänisch II	*/
aPROP2			= ESC || "[2p";				/* Proportionaldruck	EIN	*/
aPROP1			= ESC || "[1p";				/* Proportionaldruck	AUS	*/
aPROP0			= ESC || "[0p";				/* Proportionaldruck	lösch.*/
aTSS				= ESC;							/* Rand Proport.d. setzen	*/
														/* z.B. Rand5: aTSS || "5E"*/
aJFY5				= ESC || "[5F";				/* Automat. linksbündig 	*/
aJFY7				= ESC || "[7F";				/* Automat. rechtsbünbünd.	*/
aJFY6				= ESC || "[6F";				/* Automat. Randausgleich	*/
aJFY0				= ESC || "[0F";				/* Automat. Formatier. AUS	*/
aJFY3				= ESC || "[3F";				/* Zeichenabstand (format.)*/
aJFY1				= ESC || "[1F";				/* Automat. Zentrieren		*/
aVERP0			= ESC || "[0z";				/* Zeilenabstand 1/8 Zoll	*/
aVERP1			= ESC || "[1z";				/* Zeilenabstand 1/6 Zoll	*/
aSLPP				= ESC || "[";					/* Seitenlänge, z.B. 66 Z.	*/
														/* aSLPP || "66t"				*/
aPERF				= ESC || "[";					/* Perforation überspring.	*/
														/* z.B. aPERF || "5q"		*/
aPERF0			= ESC || "[0q";				/* Perforation übespr. AUS	*/
aLMS				= ESC || "#9";					/* Linken Rand setzen		*/
aRMS				= ESC || "#0";					/* Rechten Rand setzen		*/
aTMS				= ESC || "#8";					/* Oberen Rand setzen		*/
aBMS				= ESC || "#2";					/* Unteren Rand setzen		*/
aSTBM				= ESC || "[";					/* Oberen und unteren Rand	*/
														/* z.B. aSTBM || "5;66r"	*/
aSLRM				= ESC || "[";					/* Linken und rechten Rand	*/
														/* z.B. aSLRM || "5;75s"	*/
aCAM				= ESC || "#3";					/* Ränder löschen				*/
aHTS				= ESC || "H";					/* Horizontaltabulator setz*/
aVTS				= ESC || "J";					/* Vertikaltabulator setzen*/
aTBC0				= ESC || "[0g";				/* Horizontaltab. löschen	*/
aTBC3				= ESC || "[3g";				/* alle Horizontaltab. lös.*/
aTBC1				= ESC || "[1g";				/* Vertikaltab. löschen		*/
aTBC4				= ESC || "[4g";				/* alle Vertikaltab. lösch.*/
aTBCALL			= ESC || "#4";					/* alle Tabulatoren löschen*/
aTBSALL			= ESC || "#5";					/* Standardtab. setzen		*/
aEXTEND_1		= ESC || "[1"||'22'x||"x";	/* Erweiterte Befehle		*/
aEXTEND_2		= ESC || "[2"||'22'x||"x";	/* Erweiterte Befehle		*/
aEXTEND_3		= ESC || "[3"||'22'x||"x";	/* Erweiterte Befehle		*/
aEXTEND_4		= ESC || "[4"||'22'x||"x";	/* Erweiterte Befehle		*/
aEXTEND_5		= ESC || "[5"||'22'x||"x";	/* Erweiterte Befehle		*/
aEXTEND_6		= ESC || "[6"||'22'x||"x";	/* Erweiterte Befehle		*/
aEXTEND_7		= ESC || "[7"||'22'x||"x";	/* Erweiterte Befehle		*/
aEXTEND_8		= ESC || "[8"||'22'x||"x";	/* Erweiterte Befehle		*/
aEXTEND_9		= ESC || "[9"||'22'x||"x";	/* Erweiterte Befehle		*/
aRAW_1			= ESC || "[1"||'22'x||"r";	/* Direkte Befehle			*/
aRAW_2			= ESC || "[2"||'22'x||"r";	/* Direkte Befehle			*/
aRAW_3			= ESC || "[3"||'22'x||"r";	/* Direkte Befehle			*/
aRAW_4			= ESC || "[4"||'22'x||"r";	/* Direkte Befehle			*/
aRAW_5			= ESC || "[5"||'22'x||"r";	/* Direkte Befehle			*/
aRAW_6			= ESC || "[6"||'22'x||"r";	/* Direkte Befehle			*/
aRAW_7			= ESC || "[7"||'22'x||"r";	/* Direkte Befehle			*/
aRAW_8			= ESC || "[8"||'22'x||"r";	/* Direkte Befehle			*/
aRAW_9			= ESC || "[9"||'22'x||"r";	/* Direkte Befehle			*/

/* Oberfläche sperren */
LOCKGUI;

/* Art ermitteln: 0 = Drucken, 1 = Vorschau, 2 = Speichern */
PRINTSTATE;
Druckart = MTR_RESULT;

Ende_Kennzeichen = 'N';

/* Suchen der zu druckenden Daten */
PRINTFIND;
DO WHILE( MTR_RESULT > 0 & Ende_Kennzeichen = 'N');
	SELECT;
		WHEN Druckart = 0 THEN
			CALL DruckRoutine;
		WHEN Druckart = 1 THEN
			CALL VorschauRoutine;
		WHEN Druckart = 2 THEN
			CALL SpeichernRoutine;
		OTHERWISE
			DO;
				ES_TITLE				= "Warnung";
				ES_TEXTFORMAT		= "Druckart wird nicht unterstützt!";
				ES_GADGETFORMAT	= "Ok";
				EASY_REQUEST;
				Ende_Kennzeichen	= 'J';
			END;
	END;

	PRINTFIND;
END;

/* Oberfläche wieder entsperren */
FREEGUI;

EXIT;

/* Routine, die die eigentliche Druckausgabe realisiert */
DruckRoutine:
	IF OPEN(Dru_Dat, "prt:", "write") THEN
		DO;
			CALL DatenAufbereiten;
			WRITECH( Dru_Dat, DruckString );
			CLOSE(Dru_Dat);
		END;
RETURN;


/* Routine, die die Druckvorschau realisiert */
VorschauRoutine:
	IF OPEN(Dru_Dat, "t:MTR_Vorschau", "write") THEN
		DO;
			CALL DatenAufbereiten;
			WRITECH( Dru_Dat, DruckString );
			CLOSE(Dru_Dat);
			PUBSCREEN;
			PubScreenName = MTR_RESULT;
			ADDRESS COMMAND "sys:Utilities/MultiView t:MTR_Vorschau pubscreen=" || PubScreenName;
		END;
RETURN;


/* Routine, die die Druckvorschau realisiert */
SpeichernRoutine:
	ASLFR_TITLETEXT		= "Dateiname des zu druckenden Dokuments";
	ASLFR_INITIALDRAWER	= "ram:";
	ASLFR_INITIALPATTERN	= "#?";
	ASLFR_INITIALFILE		= "MTRSaveDok";
	ASL_FILE_REQUEST;
	IF MTR_RESULT = "" THEN
		Ende_Kennzeichen	= 'J';
	ELSE
		DO;
			IF OPEN(Dru_Dat, MTR_RESULT, "write") THEN
				DO;
					CALL DatenAufbereiten;
					WRITECH( Dru_Dat, DruckString );
					CLOSE(Dru_Dat);
				END;
		END;
RETURN;

DatenAufbereiten:
	Anz_Zeilen	= 1;
	x1 = 5;
	DruckString = LF || ADDRESS.ADDRESS.2;

	i = INDEX( DruckString, LF);
	DO WHILE( i > 0 );
		DruckString = INSERT(COPIES(" ", x1), DruckString, i, x1 );
		i = INDEX( DruckString, LF, i+1);
		Anz_Zeilen	= Anz_Zeilen + 1;
	END;
	DO i = Anz_Zeilen TO 9;
		DruckString = DruckString || LF;
	END;
RETURN;

