'##############
'IBIS Script (MOBITEC ICU400 COMPATIBLE)
'##############

'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
'- Daniel Stromqvist	26.04.2013		Ported MOBITEC ICU400 by Thiago Sobral
'- Thiago Sobral		06.08.2013		Improved Mobitec
'--------------------------------------------------------------------------------

'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
'----------------------

' MOBITEC THIAGO

{trigger:mobitec_100up}

(L.L.elec_busbar_main)
{if}
	(L.L.mobitec_100) 1 + (S.L.mobitec_100)
	(L.L.mobitec_100) 9 >
	{if}
		0 (S.L.mobitec_100)
	{endif}
	(M.L.mobitec_display_refresh)
{endif}
	
{end}

{trigger:mobitec_10up}

(L.L.elec_busbar_main)
{if}
	(L.L.mobitec_10) 1 + (S.L.mobitec_10)
	(L.L.mobitec_10) 9 >
	{if}
		0 (S.L.mobitec_10)
	{endif}
	(M.L.mobitec_display_refresh)
{endif}
	
{end}

{trigger:mobitec_1up}

(L.L.elec_busbar_main)
{if}
	(L.L.mobitec_1) 1 + (S.L.mobitec_1)
	(L.L.mobitec_1) 9 >
	{if}
		0 (S.L.mobitec_1)
	{endif}
	(M.L.mobitec_display_refresh)
{endif}

{end}

{trigger:mobitec_100down}

(L.L.elec_busbar_main)
{if}
	(L.L.mobitec_100) 1 - (S.L.mobitec_100)
	(L.L.mobitec_100) 0 <
	{if}
		9 (S.L.mobitec_100)
	{endif}
	(M.L.mobitec_display_refresh)
{endif}
	
{end}

{trigger:mobitec_10down}

(L.L.elec_busbar_main)
{if}
	(L.L.mobitec_10) 1 - (S.L.mobitec_10)
	(L.L.mobitec_10) 0 <
	{if}
		9 (S.L.mobitec_10)
	{endif}
	(M.L.mobitec_display_refresh)
{endif}
	
{end}

{trigger:mobitec_1down}

(L.L.elec_busbar_main)
{if}
	(L.L.mobitec_1) 1 - (S.L.mobitec_1)
	(L.L.mobitec_1) 0 <
	{if}
		9 (S.L.mobitec_1)
	{endif}
	(M.L.mobitec_display_refresh)
{endif}

{end}

{trigger:mobitec_ziel_up}

(L.L.elec_busbar_main)
{if}
	(L.L.mobitec_ziel_index) 1 + (S.L.mobitec_ziel_index)
	(L.L.mobitec_ziel_index) 9 >
	{if}
		0 (S.L.mobitec_ziel_index)
	{endif}
	(M.L.mobitec_display_refresh)
{endif}

{end}

{trigger:mobitec_ziel_down}

(L.L.elec_busbar_main)
{if}
	(L.L.mobitec_ziel_index) 1 - (S.L.mobitec_ziel_index)
	(L.L.mobitec_ziel_index) 0 <
	{if}
		9 (S.L.mobitec_ziel_index)
	{endif}
	(M.L.mobitec_display_refresh)
{endif}

{end}

{trigger:mobitec_display_clear}
	(M.L.mobitec_clear)
{end}

' MOBITEC END
{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)

'MOBITEC

'numeros limpos
	0 (S.L.mobitec_100) (S.L.mobitec_10) (S.L.mobitec_1)
'destino limpo
	0 (S.L.mobitec_ziel_index)
	0 (S.L.mobitec_showfull)

	(M.L.mobitec_display_refresh)
{end}


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

{macro:IBIS_frame}
	

	(L.L.elec_busbar_main) (S.L.mobitec_showfull)
	
	(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}
			"LINE: "
			(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}
			"ROUTE: " " " 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}
			"DEST: " " " 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}
				" WRONG ROUTE: TRY AGAIN"
			{else}
				""
			{endif}
		{else}
		(L.L.IBIS_mode) 6 =
		{if}
			(L.L.IBIS_BlinkOn)
			{if}
				" WRONG DEST: TRY AGAIN"
			{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}





{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 D92-Innenanzeige

	(L.L.IBIS_LCD-zeile) 1 = 
	(L.L.IBIS_busstop_index) 2 (M.V.GetBusstopString) $length 0 > &&
	{if}
		(L.L.IBIS_RouteIndex) 0 >=
		{if}
			(L.L.IBIS_LCD-zeile) 
			(L.L.IBIS_busstop_index) 2 (M.V.GetBusstopString)
			(S.$.IBIS_cabindisplay)
		{endif}
	{else}
		(L.L.IBIS_RouteIndex) 0 >=
		{if}
			(L.L.IBIS_LCD-zeile) 
			(L.L.IBIS_busstop_index) 1 (M.V.GetBusstopString) 
			(S.$.IBIS_cabindisplay)
		{endif}
	{endif}
{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}

{macro:omniBus_UpdateInfo}
	1 (S.L.omnibus_update)
{end}

' MOBITEC MACROS

{macro:mobitec_clear}
'Basicamente, e o mesmo que inicializar novamente

'numeros limpos
	0 (S.L.mobitec_100) (S.L.mobitec_10) (S.L.mobitec_1)
'destino limpo
	0 (S.L.mobitec_ziel_index)
	"Dest: " (S.$.mobitec_route)
	(M.L.mobitec_display_refresh)

{end}

{macro:mobitec_display_refresh}

'PARTE DOS NUMEROS

"Dest:" (S.$.mobitec_route)

(L.$.mobitec_route) (L.L.mobitec_100) "01" $IntToStrEnh $+ (S.$.mobitec_route)


(L.$.mobitec_route) (L.L.mobitec_10) "01" $IntToStrEnh $+ (S.$.mobitec_route)

(L.$.mobitec_route) (L.L.mobitec_1) "01" $IntToStrEnh $+ (S.$.mobitec_route)

(L.$.mobitec_route) (L.L.mobitec_ziel_index) "01" $IntToStrEnh $+ (S.$.mobitec_route)

'PARTE DO DESTINO


(L.L.mobitec_100) 1000 * (L.L.mobitec_10) 100 * + (L.L.mobitec_1) 10 * + (L.L.mobitec_ziel_index) + s0 

'l0 (M.V.GetRouteIndex) s1
l0 (M.V.GetTerminusIndex) s1
0 <
{if}
	"Blanko.tga" (S.$.mobitec_ziel_image)
	-1 (S.L.target_index_int)
{else}
	l1
	4 "..\..\Anzeigen\Rollband_MobitecICU400\" (M.V.GetTerminusString) $+ (S.$.mobitec_ziel_image)
	l1 trunc (S.L.target_index_int)
{endif}

{end}
