'##############
'IBIS Script
'##############

'80s style IBIS (Integrated Board Information System)

'(c) 15.04.2009 Rüdiger Hülsmann
'(c) 17.01.2011 Marcel Kuhnt

'Script Version: 1.1
'Omsi release: 1.0

'Needs:
'- Cockpit (Batterietrennschalter)
'- Door (Haltestellenbremse)

'Revision History:

'- Rüdiger Hülsmann		05.01.2011		File created based on IBIS.osc (last revision 05.01.2011)
'- Marcel Kuhnt			07.01.2011		Don't show busstops if no route	
'- Marcel Kuhnt			17.01.2011		9xx00 => 9xx04 instead of 9xx35!
'- Rüdiger Hülsmann		24.01.2011		Delay display on IBIS
'- Rüdiger Hülsmann		26.01.2011		IBIS blink bug fixed, "+/- 0 min" removed
'- Rüdiger Hülsmann		06.02.2011		Cabin-display init
'- Marcel Kuhnt			24.02.2011		Announcements from string act_busstop

'--------------------------------------------------------------------------------

'IBIS-Modi:

'	0:	Normal/Haltestellenanzeige
'	1:	Linie/Kurs-Eingabe
'	2:	Routen-Eingabe
'	3:	Ziel-Eingabe
'	4:	Error "Falsche Route"
'	5:	Debug: show Terminus-Matrix
'	6:	Error "Falsches Ziel"
'	7:	Debug: show Line-Matrix
'	8:	Ziel im IBIS anzeigen
'	9:	Datum und Uhrzeit


'----------------------
'	Trigger
'----------------------

{trigger:IBIS_setmode_linie_kurs}

	(L.L.elec_busbar_main)
	{if}
		0 (S.L.IBIS_input) (S.L.IBIS_input_count)
		1 (S.L.IBIS_mode)
		(T.L.ev_IBIS_piep)
	{endif}
	
{end}

{trigger:IBIS_setmode_route}

	(L.L.elec_busbar_main)
	{if}
		0 (S.L.IBIS_input) (S.L.IBIS_input_count)
		2 (S.L.IBIS_mode)
		(T.L.ev_IBIS_piep)
	{endif}
	
{end}

{trigger:IBIS_setmode_ziel}

	(L.L.elec_busbar_main)
	{if}
		0 (S.L.IBIS_input) (S.L.IBIS_input_count)
		3 (S.L.IBIS_mode)
		(T.L.ev_IBIS_piep)
	{endif}
	
{end}

{trigger:IBIS_eingabe}

	(L.L.elec_busbar_main)
	{if}
'***********************
' Eingabe Linie/Kurs:
'***********************
		(L.L.IBIS_mode) 1 =
		{if}
			0 (S.L.IBIS_mode)
			(T.L.ev_IBIS_piep)

' Input teilen...

			(L.L.IBIS_input) s0 (S.L.IBIS_Linie_Complex)

			100 / trunc

			(S.L.IBIS_LinieKurs)

			l0 100 %

			(S.L.IBIS_Linie_Suffix)

'ANNAX-Test:
'			7 (S.L.IBIS_mode)

' Entwerter umstellen:
			(T.L.ev_IBIS_entwerter)
			(M.L.IBIS_SetComplexLineString)

		{else}
'***********************
' Eingabe Route:
'***********************
		(L.L.IBIS_mode) 2 =
		{if}
			(L.L.IBIS_input) s0 (S.L.IBIS_Route)

' Das Folgende soll künftig erst nach "Route" gemacht werden!
			(L.L.IBIS_LinieKurs) 100 * l0 + (M.V.GetRouteIndex) s1
			0 <
			{if}
' Falls kleiner 0, also -1, dann fehlerhaft, dann nicht übernehmen sondern Fehlermeldung ausgeben:
				4 (S.L.IBIS_mode)
'		Blinker aktivieren:
				1 (S.L.IBIS_BlinkOn) (S.L.IBIS_BlinkInitial)
				(L.S.GetTime) (S.L.IBIS_BlinkTimer)
'		Fehler-piepen
				(T.L.ev_IBIS_pieperror)
			{else}
				(T.L.ev_IBIS_piep)
				(M.L.IBIS_SetRoute)
' Bushaltestellen zurücksetzen:
				0 (S.L.IBIS_busstop)			
				(M.L.IBIS_RefreshBusstop)

'ANNAX-Test:
'				7 (S.L.IBIS_mode)

				8 (S.L.IBIS_mode)

' Entwerter umstellen:
				(T.L.ev_IBIS_entwerter)
				(L.L.IBIS_busstop_entwerter_soll) (S.L.IBIS_busstop_entwerter_ist)
			{endif}
		{else}
'***********************
' Eingabe Ziel:
'***********************
		(L.L.IBIS_mode) 3 =
		{if}
' Eingabe ist der Terminus-Code
			(L.L.IBIS_input) (S.L.IBIS_TerminusCode)
' Daraus wird noch der Terminus-Index generiert:
			(M.V.GetTerminusIndex) s0
			0 <
			{if}
' Falls kleiner 0, also -1, dann fehlerhaft, dann nicht übernehmen sondern Fehlermeldung ausgeben:
				6 (S.L.IBIS_mode)
'		Blinker aktivieren:
				1 (S.L.IBIS_BlinkOn) (S.L.IBIS_BlinkInitial)
				(L.S.GetTime) (S.L.IBIS_BlinkTimer)
'		Fehler-piepen
				(T.L.ev_IBIS_pieperror)
			{else}
				8 (S.L.IBIS_mode)
				(T.L.ev_IBIS_piep)
				l0 (S.L.IBIS_TerminusIndex)
				(M.L.IBIS_RefreshTerminusText)
'ANNAX-Test:
'				5 (S.L.IBIS_mode)
			{endif}
		{else}
'***********************
' Eingabe Fehler/Debug:
'***********************
		(L.L.IBIS_mode) 4 =
		(L.L.IBIS_mode) 5 = ||
		(L.L.IBIS_mode) 6 = ||
		(L.L.IBIS_mode) 7 = ||
		{if}
			0 (S.L.IBIS_mode)
			(T.L.ev_IBIS_piep)
		{endif}
		{endif}
		{endif}
		{endif}
	{endif}
	
{end}

{trigger:IBIS_1}
	1 (M.L.IBIS_Zahlentasten)
{end}


{trigger:IBIS_2}
	2 (M.L.IBIS_Zahlentasten)
{end}

{trigger:IBIS_3}
	3 (M.L.IBIS_Zahlentasten)
{end}

{trigger:IBIS_4}
	4 (M.L.IBIS_Zahlentasten)
{end}

{trigger:IBIS_5}
	5 (M.L.IBIS_Zahlentasten)
{end}

{trigger:IBIS_6}
	6 (M.L.IBIS_Zahlentasten)
{end}

{trigger:IBIS_7}
	7 (M.L.IBIS_Zahlentasten)
{end}

{trigger:IBIS_8}
	8 (M.L.IBIS_Zahlentasten)
{end}

{trigger:IBIS_9}
	9 (M.L.IBIS_Zahlentasten)
{end}

{trigger:IBIS_0}
	0 (M.L.IBIS_Zahlentasten)
{end}

{trigger:IBIS_loeschen}
	
	(L.L.elec_busbar_main)
	{if}
		(T.L.ev_IBIS_piep)
		0 (S.L.IBIS_mode)
	{endif}
{end}

{trigger:IBIS_vor}
	(L.L.elec_busbar_main) (L.L.IBIS_mode) s0 0 = l0 8 = || &&
	{if}
		(L.L.IBIS_busstop) 1 + (S.L.IBIS_busstop)
		(M.L.IBIS_RefreshBusstop)
		(M.L.IBIS_PlayAnnouncement)
		(T.L.ev_IBIS_piep)
'		Nullsetzen des Timers für den Zeilenwechsel der LCD-Innenanzeige
		0 (S.L.IBIS_LCD-zeilentimer) (S.L.IBIS_LCD-zeile)
		(M.L.IBIS_LCD-refresh)
	{endif}
{end}

{trigger:IBIS_vor_stumm}
	(L.L.elec_busbar_main) (L.L.IBIS_mode) s0 0 = l0 8 = || &&
	{if}
		(L.L.IBIS_busstop) 1 + (S.L.IBIS_busstop)
		(M.L.IBIS_RefreshBusstop)
		(T.L.ev_IBIS_piep)
'		Nullsetzen des Timers für den Zeilenwechsel der LCD-Innenanzeige
		0 (S.L.IBIS_LCD-zeilentimer) (S.L.IBIS_LCD-zeile)
		(M.L.IBIS_LCD-refresh)
	{endif}
{end}

{trigger:IBIS_rueck}
	(L.L.elec_busbar_main) (L.L.IBIS_mode) s0 0 = l0 8 = || &&
	{if}
		(L.L.IBIS_busstop) 0 > &&
		{if}
			(L.L.IBIS_busstop) 1 - (S.L.IBIS_busstop)
			(M.L.IBIS_RefreshBusstop)
'			Nullsetzen des Timers für den Zeilenwechsel der LCD-Innenanzeige
			0 (S.L.IBIS_LCD-zeilentimer) (S.L.IBIS_LCD-zeile)
			(M.L.IBIS_LCD-refresh)
		{endif}
		(T.L.ev_IBIS_piep)

	{endif}
{end}

'----------------------
'	Init
'----------------------

{macro:IBIS_init}
	"     " (S.$.IBIS_Complex_Line)
	-1 (S.L.IBIS_RouteIndex)

{end}


'----------------------
'	Frame
'----------------------

{macro:IBIS_frame}
	


	(L.L.elec_busbar_main)
	{if}

'----------------
'Anfangsmelodie
		(L.L.IBIS_energy_last) !
		{if}
			(T.L.ev_IBIS-startupsound)
			0 (S.L.IBIS_mode)
		{endif}

'----------------
'Blinker laufen lassen:

		(L.L.IBIS_BlinkTimer) s0 0 <
		{if}
			(L.S.GetTime) (S.L.IBIS_BlinkTimer) s0
		{endif}

' Wenn Zeit abgelaufen:
		(L.S.GetTime) l0 - s0
		1.2 > (L.L.IBIS_BlinkInitial) && l0 0.833 > ||
		{if}
			(L.L.IBIS_BlinkOn) ! (S.L.IBIS_BlinkOn)
			0 (S.L.IBIS_BlinkInitial)
			(L.S.GetTime) (S.L.IBIS_BlinkTimer)
		{endif}



'----------------
'Entwerter-Weiterschaltung:
		(L.L.IBIS_busstop_entwerter_ist) (L.L.IBIS_busstop_entwerter_soll) = ! (L.L.bremse_halte) &&
		{if}
			(L.L.IBIS_busstop_entwerter_soll) (S.L.IBIS_busstop_entwerter_ist)
			(T.L.ev_IBIS_entwerter_weiter)
		{endif}


'----------------
'Display-Darstellung:
		
		(L.L.IBIS_mode) 1 =
		{if}
			"LINIA/KURS    :"
			(L.L.IBIS_input_count) 0 =
			{if}
				(L.$.IBIS_Complex_Line) $+
			{else}
				" " 5 (L.L.IBIS_input_count) - $* $+ (L.L.IBIS_input) "0" (L.L.IBIS_input_count) $IntToStr $+ $IntToStrEnh $+ 
			{endif}
		{else}
		(L.L.IBIS_mode) 2 =
		{if}
			"WARIANT          :" " " 2 (L.L.IBIS_input_count) - $* $+ (L.L.IBIS_input) "0" (L.L.IBIS_input_count) $IntToStr $+ $IntToStrEnh $+ 
		{else}
		(L.L.IBIS_mode) 3 =
		{if}
			"CEL             :" " " 3 (L.L.IBIS_input_count) - $* $+ (L.L.IBIS_input) "0" (L.L.IBIS_input_count) $IntToStr $+ $IntToStrEnh $+ 
		{else}
		(L.L.IBIS_mode) 4 =
		{if}
			(L.L.IBIS_BlinkOn)
			{if}
				" ZLY WARIANT  "
			{else}
				""
			{endif}
		{else}
		(L.L.IBIS_mode) 6 =
		{if}
			(L.L.IBIS_BlinkOn)
			{if}
				"   ZLY CEL    "
			{else}
				""
			{endif}
		{else}
'Testweise den Inhalt der Annax anzeigen:
'		(L.L.IBIS_mode) 5 =
'		{if}
'			(L.$.Matrix_Right)
'		{else}
'Testweise den Inhalt der Linien-Annax anzeigen:
'		(L.L.IBIS_mode) 7 =
'		{if}
'			"--" (L.$.Matrix_Nr) $+ "--" $+ 12 $SetLengthL 16 $SetLengthR
'		{else}
'Anzeigen des Zielschild-Textes auf dem IBIS:
		(L.L.IBIS_mode) 8 =
		{if}
			(L.$.IBIS_terminus_name) 20 $SetLengthL
		{else}
		(L.L.IBIS_mode) 9 =
		{if}
'			"13.11.84   01:21"

'		Tag:
			(L.S.Day) "02" $IntToStrEnh "." $+
'		Monat:
			(L.S.Month) "02" $IntToStrEnh $+ "." $+
'		Jahr:
			(L.S.Year) $IntToStr 2 $SetLengthR $+ "       " $+
'		Stunden:
			(L.S.Time) 3600 / s0 trunc s1 "02" $IntToStrEnh $+ ":" $+
'		Minuten:
			l0 l1 - 60 * trunc "02" $IntToStrEnh $+

'####################################
' RBL-TESTS
'####################################
'Zielschildautomatik:

'		(M.V.GetTTTerminusIndex) (S.L.IBIS_TerminusIndex)
'		(M.V.GetTTLineString) 3 $SetLengthL (S.$.Matrix_Nr) 3 $SetLengthL 20 $SetLengthL

'Verspätung anzeigen:
'
'		"Verspätung: "
'		(M.V.GetTTDelay) 60 / s0
'		0 <
'		{if}
'			"-" $+ l0 /-/ s0
'		{else}
'			" " $+
'		{endif}
'		Minuten:
'			l0 trunc s1 "02" $IntToStrEnh $+ ":" $+
'		Sekunden:
'			l0 l1 - 60 * trunc "02" $IntToStrEnh $+
'
'Haltestellenname/-zeit anzeigen:
'		(M.V.GetTTBusstopIndex) s2 (M.V.GetTTBusstopName)
'		""
'		Stunden:
'			l2 (M.V.GetTTBusstopArr) 3600 / s0 trunc s1 "02" $IntToStrEnh $+ ":" $+
'		Minuten:
'			l0 l1 - 60 * trunc "02" $IntToStrEnh $+
'		" / " $+
'		Stunden:
'			l2 (M.V.GetTTBusstopDep) 3600 / s0 trunc s1 "02" $IntToStrEnh $+ ":" $+
'		Minuten:
'			l0 l1 - 60 * trunc "02" $IntToStrEnh $+
'
'####################################
' Ende RBL-TESTS
'####################################


			20 $SetLengthL
		{else}
			(L.$.IBIS_busstop_name) 20 $SetLengthL
		{endif}
		{endif}
'		{endif}
'		{endif}
		{endif}
		{endif}
		{endif}
		{endif}
		{endif}

		"@" $+

'Linie/Kurs:
		(L.$.IBIS_Complex_Line) $+ " " $+
'Route:
		(L.L.IBIS_Route) "02" $IntToStrEnh $+ " " $+
'Terminus:
		(L.L.IBIS_TerminusCode) "03" $IntToStrEnh $+
		" " $+
'Zone / Entwerter:
		(L.L.IBIS_busstop_entwerter_ist) " 4" $IntToStrEnh $+ " " $+

		(L.L.IBIS_Route) 2 % 0.5 >
		{if}
			"A" $+
		{else}
			"B" $+
		{endif}
		" " $+
	{else}
		"" (S.$.IBIS) (S.$.IBIS_cabindisplay)
	{endif}

	(S.$.IBIS)




'Anzeigen der aktuellen Fahrplanlage:

	(L.L.elec_busbar_main)
	{if}
		""
		(M.V.GetTTDelay) s1 60 / s0

'		Minuten:
		l0 abs trunc " 2" $IntToStrEnh $+  
		(S.$.IBIS_Delay_min)

'		Zehntelminuten:
		l0 abs l0 abs trunc - 10 * " 1"  $IntToStrEnh 
		(S.$.IBIS_Delay_sec)

		l1 abs 6 >=
		{if}
			l0 0 >
			{if}
				"+"
			{else}
				"-"
			{endif}
		{else}
			" "
		{endif}
		(S.$.IBIS_Delay_state)
	{else}
		"" (S.$.IBIS_Delay_min) (S.$.IBIS_Delay_sec) (S.$.IBIS_Delay_state)
	{endif}



'Omsi sagen, dass die Strings-Ausgaben aktualisiert werden sollen:
	1 (S.L.Refresh_Strings)


'----------------
'Microphon-Taster:
	(L.L.Snd_Microphone) (L.L.IBIS_LastMicro) ! &&
	{if}
		(L.L.IBIS_busstop) 1 + (S.L.IBIS_busstop)
		(M.L.IBIS_RefreshBusstop)
		(M.L.IBIS_PlayAnnouncement)

'		Nullsetzen des Timers für den Zeilenwechsel der LCD-Innenanzeige
		0 (S.L.IBIS_LCD-zeilentimer) (S.L.IBIS_LCD-zeile)
		(M.L.IBIS_LCD-refresh)
	{endif}
	(L.L.Snd_Microphone) (S.L.IBIS_LastMicro)

'----------------
'Last energy:
	(L.L.elec_busbar_main) (S.L.IBIS_energy_last)

'----------------
'LCD-Anzeigetimer hochlaufen lassen
	(L.L.IBIS_LCD-zeilentimer) (L.S.Timegap) + (S.L.IBIS_LCD-zeilentimer)
	4 >
	(L.L.elec_busbar_main) &&
	{if}
		(L.L.IBIS_LCD-zeile) ! (S.L.IBIS_LCD-zeile)
		0 (S.L.IBIS_LCD-zeilentimer)
		(M.L.IBIS_LCD-refresh)
	{endif}


	(M.V.GetTTBusstopIndex) s2 (M.V.GetTTBusstopName)
	
	l2 (L.L.IBIS_TTBusStop) = !
	(L.L.IBIS_RouteIndex) (M.V.GetBusstopCount) 1 - (L.L.IBIS_busstop) > &&
	{if}
		(L.L.IBIS_busstop) 1 + (S.L.IBIS_busstop)
		(M.L.IBIS_RefreshBusstop)
		(M.L.IBIS_PlayAnnouncement)

		0 (S.L.IBIS_LCD-zeilentimer) (S.L.IBIS_LCD-zeile)
		1 (S.L.IBIS_reload)
		(M.L.IBIS_LCD-refresh)
		
		l2 (S.L.IBIS_TTBusStop)
	{endif}

{end}




{end}

'----------------------
'	Macros
'----------------------

{macro:IBIS_RefreshBusstop}

	(L.L.IBIS_RouteIndex) 0 <
	{if}
		"" (S.$.act_busstop)
	{else}
	(L.L.IBIS_RouteIndex) (M.V.GetBusstopCount) (L.L.IBIS_busstop) <=
	{if}
'Wenn der Bushaltestellenindex größer oder gleich der Anzahl ist und somit zu groß (der Bushaltestellenindex ist wie alle Indizes nullbasiert), 
'dann wechsele automatisch auf die Gegenroute, sofern der Index 01 oder 02 ist und der jeweilige andere Index existiert. Sonst belasse die Route.
		0 (S.L.IBIS_busstop)
' Entwerter umstellen:
		(T.L.ev_IBIS_entwerter)
		(L.L.IBIS_busstop_entwerter_soll) (S.L.IBIS_busstop_entwerter_ist)

		(L.L.IBIS_Route) s5
		2 % 0.5 >
		{if}
			l5 1 + s6
		{else}
			l5 1 - s6
		{endif}

'Suche den Routeindex:

		(L.L.IBIS_LinieKurs) 100 * l6 + (M.V.GetRouteIndex) s1
		0 >=
		{if}
'Wenn gültig, dann wechsele:
			(M.L.IBIS_SetRoute)
			l6 (S.L.IBIS_Route)
		{endif}
	{else}
		0 (S.L.IBIS_mode)
	{endif}
	{endif}

'Setzen der String-Variable "act_busstop" für die OMSI-interne Berechnung und daraus Ableitung des "globalen" Haltestellenindexes:

	(L.L.IBIS_RouteIndex) (L.L.IBIS_busstop) (M.V.GetRouteBusstopIdent) (S.$.act_busstop)
	(M.V.GetBusstopIndex) (S.L.IBIS_busstop_index)


'Sonst zeige die Bushaltestelle
	(L.L.IBIS_busstop_index) 3 (M.V.GetBusstopString)
	(S.$.IBIS_busstop_name)

'Ausrechnen der neuen Entwerterposition:
	(L.L.IBIS_busstop_offset) (L.L.IBIS_busstop) + (S.L.IBIS_busstop_entwerter_soll)


{end}

{macro:IBIS_PlayAnnouncement}

	(L.L.IBIS_busstop) 0 >
	{if}

		"Ansagen\" (L.$.act_busstop) $+

		(L.L.IBIS_RouteIndex) (M.V.GetBusstopCount) 1 - (L.L.IBIS_busstop) <=
		{if}
			"_#terminus" $+
		{endif}

		".wav" $+
		$msg
		(T.F.ev_IBIS_Ansagen)
	{endif}
{end}

{macro:IBIS_LCD-refresh}

'Formatierung der M125M-Innenanzeige

	(L.L.bremse_halte_sw)
	{if}
	{else}
		(L.L.IBIS_LCD_counter) 4 >=
		(L.L.IBIS_busstop_index) 2 (M.V.GetBusstopString) $length 0 > &&
		{if}
			1 (S.L.IBIS_LCD_counter)
		{endif}
		
		(L.L.IBIS_LCD_counter) 4 >=
		(L.L.IBIS_busstop_index) 2 (M.V.GetBusstopString) $length 0 = &&
		{if}
			2 (S.L.IBIS_LCD_counter)
		{endif}
	{endif}
    
	(L.L.IBIS_LCD-zeile) 1 = 
	{if}
		"" (S.$.IBIS_cabindisplay)
	{else}
		"" (S.$.IBIS_cabindisplay)
	{endif}

	(L.L.bremse_halte_sw)
	(L.L.IBIS_reload) 0 = ||
	{if}
		(L.L.IBIS_reload) 0 >
		{if}
			0 (S.L.IBIS_LCD-zeile)
		{endif}
		
		(L.L.IBIS_RouteIndex) (M.V.GetBusstopCount) 1 - (L.L.IBIS_busstop) >
		{if}
'           Prüfen ob LN einstellig
			(L.L.Matrix_NrAct) 1000 <
			(L.L.IBIS_Linie_Suffix) 00 = &&
			{if}
				(L.$.Matrix_NewNr) 2 $SetLengthL 1 $SetLengthR " " $+ (L.$.IBIS_terminus_name) $+ (S.$.IBIS_interior_display)
				(L.$.Matrix_NewNr) 2 $SetLengthL 1 $SetLengthR " " $+ (L.$.IBIS_terminus_name) $+ 18 $SetLengthL s6
			{else}
				(L.L.Matrix_NrAct) 1000 <
				(L.L.IBIS_Linie_Suffix) 00 = ! &&
				{if}
					(L.$.Matrix_NewNr) 2 $SetLengthR " " $+ (L.$.IBIS_terminus_name) $+ (S.$.IBIS_interior_display)
					(L.$.Matrix_NewNr) 2 $SetLengthR " " $+ (L.$.IBIS_terminus_name) $+ 18 $SetLengthL s6
				{endif}
				
'               Prüfen ob LN zweistellig
				(L.L.Matrix_NrAct) 10000 <
				(L.L.IBIS_Linie_Suffix) 00 = &&
				{if}
					(L.$.Matrix_NewNr) 2 $SetLengthR " " $+ (L.$.IBIS_terminus_name) $+ (S.$.IBIS_interior_display)
					(L.$.Matrix_NewNr) 2 $SetLengthR " " $+ (L.$.IBIS_terminus_name) $+ 18 $SetLengthL s6
				{else}
					(L.$.Matrix_NewNr) 3 $SetLengthR " " $+ (L.$.IBIS_terminus_name) $+ (S.$.IBIS_interior_display)
					(L.$.Matrix_NewNr) 3 $SetLengthR " " $+ (L.$.IBIS_terminus_name) $+ 18 $SetLengthL s6
				{endif}
			{endif}
			
			(L.L.IBIS_RouteIndex) 1 (L.L.IBIS_busstop) >
			{if}
				(L.$.IBIS_interior_display) $length 17 >
				{if}
					(L.L.IBIS_LCD_counter) 1 =
					{if}
						"R&G Mielec" (S.$.IBIS_cabindisplay)
					{endif}
                    
                    (L.L.IBIS_LCD_counter) 2 =
					{if}
						"R&G Mielec" (S.$.IBIS_cabindisplay)
					{endif}

                    (L.L.IBIS_LCD_counter) 3 =
					{if}
'   		 		    Prüfen ob LN einstellig
						(L.L.Matrix_NrAct) 1000 <
						(L.L.IBIS_Linie_Suffix) 00 = &&
						{if}
							"Trasa " (L.$.Matrix_NewNr) 2 $SetLengthL 1 $SetLengthR $+ " Do" $+ (S.$.IBIS_cabindisplay)
						{else}
							(L.L.Matrix_NrAct) 1000 <
							(L.L.IBIS_Linie_Suffix) 00 = ! &&
							{if}
								"Trasa " (L.$.Matrix_NewNr) 2 $SetLengthR $+ " Do" $+ (S.$.IBIS_cabindisplay)
							{endif}
							
'    	 				    Prüfen ob LN zweistellig
							(L.L.Matrix_NrAct) 10000 <
							(L.L.IBIS_Linie_Suffix) 00 = &&
							{if}
								"Trasa " (L.$.Matrix_NewNr) 2 $SetLengthR $+ " Do" $+ (S.$.IBIS_cabindisplay)
							{else}
								"Trasa " (L.$.Matrix_NewNr) 3 $SetLengthR $+ " Do" $+ (S.$.IBIS_cabindisplay)
							{endif}
						{endif}
					{endif}
					
					(L.L.IBIS_LCD_counter) 4 >=
					{if}
						(L.$.IBIS_terminus_name) (S.$.IBIS_cabindisplay)
						0 (S.L.IBIS_LCD-zeile)
						0 (S.L.IBIS_LCD_counter)
					{endif}
				{else}
					(L.L.IBIS_LCD-zeile) 1 =
					{if}
						"Witamy" (S.$.IBIS_cabindisplay)
					{else}
						l6 (S.$.IBIS_cabindisplay)
					{endif}
				{endif}
			{else}
				(L.L.IBIS_LCD_counter) 1 = 
                {if}
                    "Nast. Przyst." (S.$.IBIS_cabindisplay)
                {endif}
                
                (L.L.IBIS_LCD_counter) 2 =
                {if}
                    (L.L.IBIS_LCD-zeile) 
                    (L.L.IBIS_busstop_index) 1 (M.V.GetBusstopString)
                    (S.$.IBIS_cabindisplay)
                    
                    (L.L.IBIS_busstop_index) 2 (M.V.GetBusstopString) $length 0 >
                    {if}
                    {else}
                        0 (S.L.IBIS_LCD_counter)
                    {endif}
                {endif}
                
                (L.L.IBIS_LCD_counter) 3 =
                {if}
                    (L.L.IBIS_LCD-zeile) 
                    (L.L.IBIS_busstop_index) 2 (M.V.GetBusstopString)
                    (S.$.IBIS_cabindisplay)

                    0 (S.L.IBIS_LCD_counter)
                {endif}
			{endif}
		{else}	
			(L.L.IBIS_RouteIndex) 0 >=
			{if}
				(L.L.IBIS_LCD-zeile) 1 = 
				{if}
					"Koniec Trasy" (S.$.IBIS_cabindisplay)
				{else}
					"End of route" (S.$.IBIS_cabindisplay)
				{endif}
			{endif}
		{endif}
		
		0 (S.L.IBIS_reload)
	{else}
        (L.L.IBIS_LCD_counter) 1 = 
        {if}
            (L.$.Matrix_NewNr) "    " $+ (L.S.Time) 3600 / s0 trunc s1 "02" $IntToStrEnh $+ ":" $+ l0 l1 - 60 * trunc "02" $IntToStrEnh $+ (S.$.IBIS_cabindisplay)
        {endif}
        
        (L.L.IBIS_LCD_counter) 2 =
        {if}
            (L.L.IBIS_LCD-zeile) 
            (L.L.IBIS_busstop_index) 1 (M.V.GetBusstopString)
            (S.$.IBIS_cabindisplay)
            
            (L.L.IBIS_busstop_index) 2 (M.V.GetBusstopString) $length 0 >
            {if}
            {else}
                0 (S.L.IBIS_LCD_counter)
            {endif}
        {endif}
        
        (L.L.IBIS_LCD_counter) 3 =
        {if}
            (L.L.IBIS_LCD-zeile) 
            (L.L.IBIS_busstop_index) 2 (M.V.GetBusstopString)
            (S.$.IBIS_cabindisplay)

            0 (S.L.IBIS_LCD_counter)
        {endif}
	{endif}
	 
  
       
    (L.L.IBIS_LinieKurs) 0 =
    {if}
        (L.L.IBIS_LCD-zeile) 1 = 
		{if}
			"" (S.$.IBIS_cabindisplay)
		{else}
			"" (S.$.IBIS_cabindisplay)
		{endif}
	{endif}
   
	(L.L.IBIS_LCD_counter) 1 + (S.L.IBIS_LCD_counter)

{end}


{macro:IBIS_Zahlentasten}
	s0
	(L.L.elec_busbar_main)
	{if}
		(L.L.IBIS_mode) 1 = (L.L.IBIS_input_count) 5 < &&
		(L.L.IBIS_mode) 2 = (L.L.IBIS_input_count) 2 < && ||
		(L.L.IBIS_mode) 3 = (L.L.IBIS_input_count) 3 < && ||
		{if}
			(L.L.IBIS_input) 10 * l0 + (S.L.IBIS_input)
			(L.L.IBIS_input_count) 1 + (S.L.IBIS_input_count)
			(T.L.ev_IBIS_piep)
		{else}
			l0 0 =
			{if}
				9 (S.L.IBIS_mode)
				(T.L.ev_IBIS_piep)
			{endif}
		{endif}
	{endif}
{end}

{macro:IBIS_SetRoute}

' Macro setzt den Routeindex auf den Wert von l1 und führt die nötigen Schritte aus

' Wenn gültig, dann übernehmen:
	l1 (S.L.IBIS_RouteIndex)
' Finden des zugehörigen Ziel-Index':
	(M.V.GetRouteTerminusIndex) (S.L.IBIS_TerminusIndex)
' Finden des zugehörigen Ziel-Codes:
	(M.V.GetTerminusCode) (S.L.IBIS_TerminusCode)
' Aktualisieren des Zielschild-Textes:
	(M.L.IBIS_RefreshTerminusText)
' Ziel anzeigen:
	8 (S.L.IBIS_mode)

' Falls es entweder ein 500, ein 800 oder 900-Code ist, dann bitte beim Complex-Code eine 28 (M), eine 36 (X) bzw. 04 (N) verwenden:
	(L.L.IBIS_LinieKurs) s2 100 / trunc s3
	l3 5 =
	{if}
		l2 100 * 28 (S.L.IBIS_Linie_Suffix) + (S.L.IBIS_Linie_Complex)
	{endif}
	l3 8 =
	{if}
		l2 100 * 36 (S.L.IBIS_Linie_Suffix) + (S.L.IBIS_Linie_Complex)
	{endif}
	l3 9 =
	{if}
		l2 100 * 04 (S.L.IBIS_Linie_Suffix) + (S.L.IBIS_Linie_Complex)
	{endif}
	(M.L.IBIS_SetComplexLineString)

' Entwerter-Busstop-Offset festlegen (pseudo-Zufall aus Linien-Code und Route-Index):

	(L.L.IBIS_LinieKurs) 100 * (L.L.IBIS_RouteIndex) + 10000 * sin 10 * 15 + trunc (S.L.IBIS_busstop_offset)

{end}

{macro:IBIS_RefreshTerminusText}
	(L.L.IBIS_TerminusIndex) 5 (M.V.GetTerminusString) (S.$.IBIS_terminus_name)
{end}

{macro:IBIS_SetComplexLineString}
'Linie/Kurs:
	(L.L.IBIS_LinieKurs) s0 0 = !
	{if}
		l0 "03" $IntToStrEnh
	{else}
		"   "
	{endif}
'Linien-Suffix:
	(L.L.IBIS_Linie_Suffix) s0 0 = !
	{if}
		l0 "02" $IntToStrEnh $+
	{else}
		"  " $+
	{endif}
	(S.$.IBIS_Complex_Line)
{end}

