'##############
'Almex Optimal CL
'##############

'Simulates ticket printer & IBIS (Integrated Board Information System)

'Original by:
'(c) 15.04.2009 Rüdiger Hülsmann
'(c) 17.01.2011 Marcel Kuhnt
'edited by O 405 & MAN-Busfahrer

'Script Version: 1.1
'Omsi release: 1.0

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


'Revision History:
'- Rüdiger Hülsmann	12.01.2011	File created
'- Rüdiger Hülsmann	15.01.2011	Functions added
'- FlofiX3291   		Feb. 2017		Auf Atron angepasst
'- FlofiX3291		31.05.2019	Auf Almex angepasst
'- FlofiX3291		02.06.2019	IBIS + Ticketprinter zusammengelegt

'Displaymodi:
'0: Aus
'0.5: Anmeldung Start
'1: Anmeldung Fahrernummer
'2: Anmeldung PIN
'3: Hauptmenü
'4: Schildermenü Linie
'5: Schildermenü Route
'6: Schildermenü Ziel
'7: Verkaufsmenü
'8: Sonderzielspeicher
'9: Geräteeinstellungen


'--------------------------------------------
'		Trigger Ticketprinter
'--------------------------------------------

{trigger:ticketprinter_button_ticket_0}
	(L.L.elec_busbar_main)
	{if}
		0 (S.L.ticketprinter_ticket_preselection)
		7 (S.L.almex_display_mode)
	{endif}
	
{end}		
			
{trigger:ticketprinter_button_ticket_1}
	(L.L.elec_busbar_main)
	{if}
		1 (S.L.ticketprinter_ticket_preselection)
		7 (S.L.almex_display_mode)
	{endif}

{end}

{trigger:ticketprinter_button_ticket_2}
	(L.L.elec_busbar_main)
	{if}
		2 (S.L.ticketprinter_ticket_preselection)
		7 (S.L.almex_display_mode)
	{endif}

{end}

{trigger:ticketprinter_button_ticket_3}
	(L.L.elec_busbar_main)
	{if}
		3 (S.L.ticketprinter_ticket_preselection)
		7 (S.L.almex_display_mode)
	{endif}

{end}

{trigger:ticketprinter_button_ticket_4}
	(L.L.elec_busbar_main)
	{if}
		4 (S.L.ticketprinter_ticket_preselection)
		7 (S.L.almex_display_mode)
	{endif}

{end}

{trigger:ticketprinter_button_enter}
	(L.L.elec_busbar_main) 
	(L.L.ticketprinter_ticket_preselection) -1 > &&
	(L.L.ticketprinter_druckt) ! &&
	(L.L.ticketprinter_ticket_pos) 0 = &&
	{if}
		(L.L.ticketprinter_ticket_preselection) (S.L.ticketprinter_ticket_selection)
		1 (S.L.ticketprinter_druckt)
		(T.L.ev_printer_printing)
	{endif}
{end}

{trigger:ticketprinter_button_cancel}
	(L.L.elec_busbar_main)
	{if}
		-1 (S.L.ticketprinter_ticket_preselection)
		3 (S.L.almex_display_mode)
	{endif}
{end}

{trigger:ticketprinter_getticket}
	0 (S.L.ticketprinter_ticket_pos)
	-1 (S.L.ticketprinter_ticket_selection) (S.L.GivenTicket)
	(T.L.ev_ticketsale_giveticket)
{end}

{trigger:almex_anmeldung_button}
	(L.L.almex_display_mode) 0.5 =
	{if}
		1 (S.L.almex_display_mode)
		(T.L.ev_IBIS_piep)
	{endif}
{end}

'--------------------------------------------
'		Trigger IBIS
'--------------------------------------------

{trigger:IBIS_setmode_linie_kurs}
	(L.L.elec_busbar_main) (C.L.elec_busbar_minV) >
	(L.L.Anmeldung_erfolgreich) &&
	{if}
		0 (S.L.IBIS_input) (S.L.IBIS_input_count)
		4 (S.L.almex_display_mode)
	{endif}
{end}

{trigger:IBIS_setmode_route}
	(L.L.elec_busbar_main) (C.L.elec_busbar_minV) >
	(L.L.Anmeldung_erfolgreich) &&
	{if}
		0 (S.L.IBIS_input) (S.L.IBIS_input_count)
		5 (S.L.almex_display_mode)
	{endif}
{end}

{trigger:IBIS_setmode_ziel}

	(L.L.elec_busbar_main) (C.L.elec_busbar_minV) >
	(L.L.Anmeldung_erfolgreich) &&
	{if}
		0 (S.L.IBIS_input) (S.L.IBIS_input_count)
		6 (S.L.almex_display_mode)
	{endif}
	
{end}

{trigger:IBIS_eingabe}
	(L.L.elec_busbar_main) (C.L.elec_busbar_minV) >
	{if}
'***********************
' Eingabe Fahrernummer:
'***********************
		(L.L.almex_display_mode) 1 =
		{if}
			(L.L.IBIS_input) (C.L.Fahrernummer) =
			{if}
				0 (S.L.IBIS_input) (S.L.IBIS_input_count)
				2 (S.L.almex_display_mode)
				(T.L.ev_IBIS_piep)
			{else}
				0 (S.L.IBIS_input) (S.L.IBIS_input_count)
				1 (S.L.almex_display_mode)
				(T.L.ev_IBIS_pieperror)
			{endif}
		{else}
'***********************
' Eingabe PIN:
'***********************
		(L.L.almex_display_mode) 2 =
		{if}
			(L.L.IBIS_input) (C.L.PIN) =
			{if}
				1 (S.L.Anmeldung_erfolgreich)
				0 (S.L.IBIS_input) (S.L.IBIS_input_count)
				4 (S.L.almex_display_mode)
				(T.L.ev_IBIS_piep)
			{else}
				0 (S.L.IBIS_input) (S.L.IBIS_input_count)
				2 (S.L.almex_display_mode)
				(T.L.ev_IBIS_pieperror)
			{endif}
		{else}
'		***********************
' 		Eingabe Linie:
'		***********************
		(L.L.Anmeldung_erfolgreich)
		(L.L.almex_display_mode) 4 = &&
		{if}
' 			Input teilen...
			(L.L.IBIS_input) s0 (S.L.IBIS_Linie_Complex) l0 0 =
			{if}
				(M.L.IBIS-2_reset)
			{endif}
			l0 100 / trunc
			(S.L.IBIS_LinieKurs)
			l0 100 %
			(S.L.IBIS_Linie_Suffix)
			(M.L.IBIS_SetComplexLineString)
			0 (S.L.IBIS_input) (S.L.IBIS_input_count)
			5 (S.L.almex_display_mode)
		{else}
'		***********************
' 		Eingabe Route:
'		***********************
		(L.L.Anmeldung_erfolgreich)
		(L.L.almex_display_mode) 5 = &&
		{if}
			(L.L.IBIS_input) s0 (S.L.IBIS_Route) 0 =
			{if}
				-1 (S.L.IBIS_RouteIndex)
				0 (S.L.IBIS_Route)
				0 (S.L.IBIS_busstop_index)
				"" (S.$.IBIS_cabindisplay)
				0 (S.L.IBIS_busstop)
				"" (S.$.act_busstop)
				"" (S.$.IBIS_busstop_name)
				"" (S.$.Haltestelle)
				3 (S.L.almex_display_mode)
			{else}
' 				Das Folgende soll künftig erst nach "Route" gemacht werden!
				(L.L.IBIS_LinieKurs) 100 * l0 + (M.V.GetRouteIndex) s1 0 <
				{if}
'					Fehler-piepen
					(T.L.ev_IBIS_pieperror)
					0 (S.L.IBIS_input) (S.L.IBIS_input_count)
				{else}
					(M.L.IBIS_SetRoute)
' 					Bushaltestellen zurücksetzen:
					0 (S.L.IBIS_busstop)			
					(M.L.IBIS_RefreshBusstop)
					3 (S.L.almex_display_mode)
' 					Entwerter umstellen:
					(T.L.ev_IBIS_entwerter)
					(L.L.IBIS_busstop_entwerter_soll) (S.L.IBIS_busstop_entwerter_ist)
					0 (S.L.IBIS_input) (S.L.IBIS_input_count)
				{endif}
			{endif}
		{else}
'		***********************
' 		Eingabe Ziel (versteckt):
'		***********************
		(L.L.Anmeldung_erfolgreich)
		(L.L.almex_display_mode) 6 = &&
		{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}
'				Fehler-piepen
				(T.L.ev_IBIS_pieperror)
				0 (S.L.IBIS_input) (S.L.IBIS_input_count)
			{else}
				l0 (S.L.IBIS_TerminusIndex)
				(M.L.IBIS_RefreshTerminusText)
				0 (S.L.IBIS_input) (S.L.IBIS_input_count)
				3 (S.L.almex_display_mode)
			{endif}
		{endif}
		{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.IBIS_input_count) 0 >
	{if}
		(L.L.IBIS_input) 10 / trunc (S.L.IBIS_input)
		(L.L.IBIS_input_count) 1 - 0 max (S.L.IBIS_input_count)
		(T.L.ev_IBIS_piep)
	{endif}
{end}

{trigger:IBIS_vor}
	(L.L.elec_busbar_main)
	{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}
{end}

{trigger:IBIS_vor_stumm}
	(L.L.elec_busbar_main)
	{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}
{end}

{trigger:IBIS_rueck}
	(L.L.elec_busbar_main)
	{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}
	{endif}
{end}

'--------------------------------------------
'		Trigger Almex spezifisch
'--------------------------------------------

{trigger:almex_anmeldung_button}
	(L.L.almex_display_mode) 0.5 =
	{if}
		1 (S.L.almex_display_mode)
		(T.L.ev_IBIS_piep)
	{endif}
{end}

{trigger:almex_display_scroll_up}
	(L.L.almex_display_scroll) 1 + 3 min (S.L.almex_display_scroll)
{end}

{trigger:almex_display_scroll_down}
	(L.L.almex_display_scroll) 1 - 0 max (S.L.almex_display_scroll)
{end}

{trigger:almex_sonderzielspeicher}
	(L.L.elec_busbar_main)
	{if}
		8 (S.L.almex_display_mode)
		(T.L.ev_IBIS_piep)
	{endif}
{end}

{trigger:almex_display_ziel_1}
	(M.L.Almex_matrix_reset)
	(L.L.almex_display_scroll) 0 =
	{if}
		"Weser-Ems-Bus" (S.$.Matrix_TerminusL1) (S.$.Matrix_TerminusL3)
		"" (S.$.Matrix_TerminusL2) (S.$.Matrix_TerminusL4) (S.$.Matrix_Nr)
	{endif}
	(L.L.almex_display_scroll) 1 =
	{if}
		"Public Viewing" (S.$.Matrix_TerminusL1) (S.$.Matrix_TerminusL3)
		"" (S.$.Matrix_TerminusL2) (S.$.Matrix_TerminusL4) (S.$.Matrix_Nr)
	{endif}
	(L.L.almex_display_scroll) 2 =
	{if}
		"Dienstfahrt" (S.$.Matrix_TerminusL1) (S.$.Matrix_TerminusL3)
		"" (S.$.Matrix_TerminusL2) (S.$.Matrix_TerminusL4) (S.$.Matrix_Nr)
	{endif}
	(L.L.almex_display_scroll) 3 =
	{if}
		"Weihnachtsfeier WEB" (S.$.Matrix_TerminusL1) (S.$.Matrix_TerminusL3)
		"" (S.$.Matrix_TerminusL2) (S.$.Matrix_TerminusL4) (S.$.Matrix_Nr)
	{endif}
	1 (S.L.Matrix_Status)
{end}

{trigger:almex_display_ziel_2}
	(M.L.Almex_matrix_reset)
	(L.L.almex_display_scroll) 0 =
	{if}
		"Sonderfahrt" (S.$.Matrix_TerminusL1) (S.$.Matrix_TerminusL3)
		"" (S.$.Matrix_TerminusL2) (S.$.Matrix_TerminusL4) (S.$.Matrix_Nr)
	{endif}
	(L.L.almex_display_scroll) 1 =
	{if}
		"Nachteule" (S.$.Matrix_TerminusL1) (S.$.Matrix_TerminusL3)
		"" (S.$.Matrix_TerminusL2) (S.$.Matrix_TerminusL4) (S.$.Matrix_Nr)
	{endif}
	(L.L.almex_display_scroll) 2 =
	{if}
		"Zur Loktaufe Norddeich" (S.$.Matrix_TerminusL1) (S.$.Matrix_TerminusL3)
		"" (S.$.Matrix_TerminusL2) (S.$.Matrix_TerminusL4) (S.$.Matrix_Nr)
	{endif}
	(L.L.almex_display_scroll) 3 =
	{if}
		"Arne + Annika" (S.$.Matrix_TerminusL1) (S.$.Matrix_TerminusL3)
		"" (S.$.Matrix_TerminusL2) (S.$.Matrix_TerminusL4) (S.$.Matrix_Nr)
	{endif}
	1 (S.L.Matrix_Status)
{end}

{trigger:almex_display_ziel_3}
	(M.L.Almex_matrix_reset)
	(L.L.almex_display_scroll) 0 =
	{if}
		"Leerfahrt" (S.$.Matrix_TerminusL1) (S.$.Matrix_TerminusL3)
		"Kein Einstieg" (S.$.Matrix_TerminusL2) (S.$.Matrix_TerminusL4)
		"" (S.$.Matrix_Nr)
	{endif}
	(L.L.almex_display_scroll) 1 =
	{if}
		"Probefahrt" (S.$.Matrix_TerminusL1) (S.$.Matrix_TerminusL3)
		"Kein Einstieg" (S.$.Matrix_TerminusL2) (S.$.Matrix_TerminusL4)
		"" (S.$.Matrix_Nr)
	{endif}
	(L.L.almex_display_scroll) 2 =
	{if}
		"Waloseum" (S.$.Matrix_TerminusL1) (S.$.Matrix_TerminusL3)
		"" (S.$.Matrix_TerminusL2) (S.$.Matrix_TerminusL4) (S.$.Matrix_Nr)
	{endif}
	(L.L.almex_display_scroll) 3 =
	{if}
		"SEV Oldenburg" (S.$.Matrix_TerminusL1) (S.$.Matrix_TerminusL3)
		"" (S.$.Matrix_TerminusL2) (S.$.Matrix_TerminusL4) (S.$.Matrix_Nr)
	{endif}
	1 (S.L.Matrix_Status)
{end}

{trigger:almex_display_ziel_4}
	(M.L.Almex_matrix_reset)
	(L.L.almex_display_scroll) 0 =
	{if}
		"Schulbus" (S.$.Matrix_TerminusL1) (S.$.Matrix_TerminusL3)
		"" (S.$.Matrix_TerminusL2) (S.$.Matrix_TerminusL4) (S.$.Matrix_Nr)
	{endif}
	(L.L.almex_display_scroll) 1 =
	{if}
		"Werkstattfahrt" (S.$.Matrix_TerminusL1) (S.$.Matrix_TerminusL3)
		"" (S.$.Matrix_TerminusL2) (S.$.Matrix_TerminusL4) (S.$.Matrix_Nr)
	{endif}
	(L.L.almex_display_scroll) 2 =
	{if}
		"Leybucht" (S.$.Matrix_TerminusL1) (S.$.Matrix_TerminusL3)
		"" (S.$.Matrix_TerminusL2) (S.$.Matrix_TerminusL4) (S.$.Matrix_Nr)
	{endif}
	(L.L.almex_display_scroll) 3 =
	{if}
		"SEV Leer" (S.$.Matrix_TerminusL1) (S.$.Matrix_TerminusL3)
		"" (S.$.Matrix_TerminusL2) (S.$.Matrix_TerminusL4) (S.$.Matrix_Nr)
	{endif}
	1 (S.L.Matrix_Status)
{end}

{trigger:almex_display_ziel_5}
	(M.L.Almex_matrix_reset)
	(L.L.almex_display_scroll) 0 =
	{if}
		"Pause" (S.$.Matrix_TerminusL1) (S.$.Matrix_TerminusL3)
		"" (S.$.Matrix_TerminusL2) (S.$.Matrix_TerminusL4) (S.$.Matrix_Nr)
	{endif}
	(L.L.almex_display_scroll) 1 =
	{if}
		"Einsteigerbus" (S.$.Matrix_TerminusL1) (S.$.Matrix_TerminusL3)
		"" (S.$.Matrix_TerminusL2) (S.$.Matrix_TerminusL4) (S.$.Matrix_Nr)
	{endif}
	(L.L.almex_display_scroll) 2 =
	{if}
		"Teemuseum" (S.$.Matrix_TerminusL1) (S.$.Matrix_TerminusL3)
		"" (S.$.Matrix_TerminusL2) (S.$.Matrix_TerminusL4) (S.$.Matrix_Nr)
	{endif}
	(L.L.almex_display_scroll) 3 =
	{if}
		"SEV Emden" (S.$.Matrix_TerminusL1) (S.$.Matrix_TerminusL3)
		"" (S.$.Matrix_TerminusL2) (S.$.Matrix_TerminusL4) (S.$.Matrix_Nr)
	{endif}
	1 (S.L.Matrix_Status)
{end}

{trigger:almex_display_ziel_6}
	(M.L.Almex_matrix_reset)
	(L.L.almex_display_scroll) 0 =
	{if}
		"Verstärker" (S.$.Matrix_TerminusL1) (S.$.Matrix_TerminusL3)
		"" (S.$.Matrix_TerminusL2) (S.$.Matrix_TerminusL4) (S.$.Matrix_Nr)
	{endif}
	(L.L.almex_display_scroll) 1 =
	{if}
		"Info-Mobil" (S.$.Matrix_TerminusL1) (S.$.Matrix_TerminusL3)
		"" (S.$.Matrix_TerminusL2) (S.$.Matrix_TerminusL4) (S.$.Matrix_Nr)
	{endif}
	(L.L.almex_display_scroll) 2 =
	{if}
		"Seehundaufzuchtstation" (S.$.Matrix_TerminusL1) (S.$.Matrix_TerminusL3)
		"" (S.$.Matrix_TerminusL2) (S.$.Matrix_TerminusL4) (S.$.Matrix_Nr)
	{endif}
	1 (S.L.Matrix_Status)
{end}

{trigger:almex_nightmode}
	(L.L.almex_nightmode) ! (S.L.almex_nightmode)
{end}

{trigger:Almex_Pfeil_zurueck}
	(L.L.elec_busbar_main)
	{if}
		(L.L.almex_display_mode) 5 =
		{if}
			4 (S.L.almex_display_mode)
		{endif}
		(L.L.almex_display_mode) 7 =
		{if}
			3 (S.L.almex_display_mode)
		{endif}
		(L.L.almex_display_mode) 8 =
		{if}
			(L.L.Anmeldung_erfolgreich)
			{if}
				3 (S.L.almex_display_mode)
			{else}
				0.5 (S.L.almex_display_mode)
			{endif}
		{endif}
		(T.L.ev_IBIS_piep)
	{endif}
{end}

{trigger:almex_display_helligkeit_1}
	0 (S.L.Almex_display_alphascale)
{end}

{trigger:almex_display_helligkeit_2}
	0.17 (S.L.Almex_display_alphascale)
{end}

{trigger:almex_display_helligkeit_3}
	0.33 (S.L.Almex_display_alphascale)
{end}

{trigger:almex_display_helligkeit_4}
	0.49 (S.L.Almex_display_alphascale)
{end}

{trigger:almex_display_helligkeit_5}
	0.65 (S.L.Almex_display_alphascale)
{end}

{trigger:almex_display_helligkeit_6}
	0.81 (S.L.Almex_display_alphascale)
{end}

{trigger:almex_display_helligkeit_7}
	1 (S.L.Almex_display_alphascale)
{end}

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

{macro:almex_init}
	"     " (S.$.IBIS_Complex_Line)
	-1 (S.L.IBIS_RouteIndex)
	0 (S.L.IBIS_State)
	-1 (S.L.current_stopindex)
	0 (S.L.Anmeldung_erfolgreich) (S.L.IBIS_input) (S.L.IBIS_input_count)
	-1 (S.L.ticketprinter_ticket_preselection) (S.L.ticketprinter_ticket_selection)
{end}

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

{macro:almex_frame}

'--------------------------------------------
'		Clickspotausblendung
'--------------------------------------------

(L.L.almex_display_mode) 0.5 =
{if}
	1 (S.L.vis_almex_anmeldung_button)
{else}
	0 (S.L.vis_almex_anmeldung_button)
{endif}

(L.L.almex_display_mode) 1 =
(L.L.almex_display_mode) 2 = ||
{if}
	1 (S.L.vis_almex_anmeldung)
{else}
	0 (S.L.vis_almex_anmeldung)
{endif}


(L.L.almex_display_mode) 3 =
{if}
	1 (S.L.vis_almex_hauptmenue)
{else}
	0 (S.L.vis_almex_hauptmenue)
{endif}

(L.L.almex_display_mode) 3 =
(L.L.almex_display_mode) 7 = ||
{if}
	1 (S.L.vis_almex_haltestellen)
{else}
	0 (S.L.vis_almex_haltestellen)
{endif}

(L.L.almex_display_mode) 4 =
(L.L.almex_display_mode) 5 = ||
(L.L.almex_display_mode) 6 = ||
{if}
	1 (S.L.vis_almex_schildern)
{else}
	0 (S.L.vis_almex_schildern)
{endif}

(L.L.almex_display_mode) 7 =
{if}
	1 (S.L.vis_almex_verkauf)
{else}
	0 (S.L.vis_almex_verkauf)
{endif}

(L.L.almex_display_mode) 1 =
(L.L.almex_display_mode) 2 = ||
(L.L.almex_display_mode) 4 = ||
(L.L.almex_display_mode) 5 = ||
(L.L.almex_display_mode) 6 = ||
{if}
	1 (S.L.vis_almex_tastenfeld)
{else}
	0 (S.L.vis_almex_tastenfeld)
{endif}

(L.L.almex_display_mode) 3 =
{if}
	1 (S.L.vis_almex_linienwechsel)
{else}
	0 (S.L.vis_almex_linienwechsel)
{endif}

(L.L.almex_display_mode) 0.5 =
{if}
	1 (S.L.vis_almex_button_sonderziel2)
{else}
	0 (S.L.vis_almex_button_sonderziel2)
{endif}

(L.L.almex_display_mode) 3 =
{if}
	1 (S.L.vis_almex_button_sonderziel)
{else}
	0 (S.L.vis_almex_button_sonderziel)
{endif}

(L.L.almex_display_mode) 8 =
{if}
	1 (S.L.vis_almex_button_sonderzielswitch)
{else}
	0 (S.L.vis_almex_button_sonderzielswitch)
{endif}

(L.L.almex_display_mode) 0.5 =
(L.L.almex_display_mode) 1 = ||
(L.L.almex_display_mode) 2 = ||
(L.L.almex_display_mode) 3 = ||
(L.L.almex_display_mode) 8 = ||
{if}
	1 (S.L.vis_almex_nightmodeswitch)
{else}
	0 (S.L.vis_almex_nightmodeswitch)
{endif}

(L.L.almex_display_mode) 8 =
{if}
	1 (S.L.vis_almex_sonderziele)
{else}
	0 (S.L.vis_almex_sonderziele)
{endif}

(L.L.almex_display_mode) 5 =
{if}
	1 (S.L.vis_Almex_button_zurueck)
{else}
	0 (S.L.vis_Almex_button_zurueck)
{endif}

(L.L.almex_display_mode) 7 =
(L.L.almex_display_mode) 8 = ||
{if}
	1 (S.L.vis_Almex_button_zurueck2)
{else}
	0 (S.L.vis_Almex_button_zurueck2)
{endif}

'--------------------------------------------
'		Displaytexturen setzen
'--------------------------------------------

(L.L.almex_display_mode) 0 =
{if}
	"Almex_Main.dds" (S.$.Almex_Display)
{else}
(L.L.almex_display_mode) 0.5 =
{if}
	"Almex_Anmeldung_Start.dds" (S.$.Almex_Display)
{else}
(L.L.almex_display_mode) 1 =
(L.L.almex_display_mode) 2 = ||
{if}
	"Almex_display_anmeldung.dds" (S.$.Almex_Display)
{else}
(L.L.almex_display_mode) 3 =
{if}
	"Almex_display_hauptmenue.dds" (S.$.Almex_Display)
{else}
(L.L.almex_display_mode) 4 =
{if}
	"Almex_display_schildern_linie.dds" (S.$.Almex_Display)
{else}
(L.L.almex_display_mode) 5 =
{if}
	"Almex_display_schildern_route.dds" (S.$.Almex_Display)
{else}
(L.L.almex_display_mode) 7 =
{if}
	"Almex_display_verkauf.dds" (S.$.Almex_Display)
{else}
(L.L.almex_display_mode) 8 =
{if}
	"Almex_display_sonderziele_" (L.L.almex_display_scroll) $IntToStr $+ ".dds" $+ (S.$.Almex_Display)
{endif}
{endif}
{endif}
{endif}
{endif}
{endif}
{endif}
{endif}

'Ohne Strom läuft nix
(L.L.elec_busbar_main)
{if}
'	Display einschalten:
	(L.L.almex_display_mode) 0 =
	{if}
		0.5 (S.L.almex_display_mode)
	{endif}
	
'	Weiterschaltung
'	Bei Beenden/Löschen eines Fahrplans soll auch nicht weitergeschalten werden. Dies wird durch Umgehung der Änderungsprüfung (unten) verhindert (auf -1 setzen).
	(M.V.GetTTBusstopIndex) -1 =
	{if}
		(M.V.GetTTBusstopIndex) (S.L.current_stopindex)
	{endif}
'		Wenn sich der Haltestellenindex geändert hat, den state auf 1 setzten, damit beim nächsten Überschreiten von 40m Entfernung ausgelöst werden kann
	(L.L.current_stopindex) (M.V.GetTTBusstopIndex) = !  (M.V.GetTTBusstopIndex) 1 = ! &&
	{if}
		(L.L.current_stopindex) -1 =
		{if}
			(M.V.GetTTBusstopIndex) (S.L.current_stopindex)
		{else}
			1 (S.L.IBIS_State)
			(L.L.kmcounter_m) (S.L.meter_startwert)
			(M.V.GetTTBusstopIndex) (S.L.current_stopindex)
		{endif}
	{endif}
'	Wenn ausgelöst werden soll, die dazu benötigten Befehle aufrufen und state zurücksetzen, damit nur 1 Mal ausgelöst wird
	(L.L.kmcounter_m) (L.L.meter_startwert) - 40 > (L.L.IBIS_State) 1 = &&		
	{if}
		(L.L.IBIS_busstop) (M.V.GetTTBusstopIndex) =
		{if}			
			0 (S.L.IBIS_State)
		{else}
			(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)
			0 (S.L.IBIS_State)
		{endif}
	{endif}
'	Folgender Vergleich wirkt vielleicht blöd (kmcounter_m minus meter_startwert kann eigentlich nicht negativ sein, ist es aber manchmal!) liegt daran, dass der kmcounter_m nach einem Überlauf (wenn er größer als ~1000 ist) wieder auf 0 gesetzt wird
	(L.L.kmcounter_m) (L.L.meter_startwert) - 0 < (L.L.IBIS_State) 1 = &&
	{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)
		0 (S.L.IBIS_State)
	{endif}

'	Anfangsmelodie
	(L.L.IBIS_energy_last) !
	{if}
		(T.L.ev_IBIS-startupsound)
	{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}

'	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)
	{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) (C.L.elec_busbar_minV) > &&
	{if}
		(L.L.IBIS_LCD-zeile) ! (S.L.IBIS_LCD-zeile)
		0 (S.L.IBIS_LCD-zeilentimer)
		(M.L.IBIS_LCD-refresh)
	{endif}
	
'--------------------------------------------
'		Displaydarstellung
'--------------------------------------------
'Displaymodi:
'0: Aus
'0.5: Anmeldung Start
'1: Anmeldung Fahrernummer
'2: Anmeldung PIN
'3: Hauptmenü
'4: Schildermenü Linie
'5: Schildermenü Route
'6: Schildermenü Ziel
'7: Verkaufsmenü
'8: Sonderzielspeicher
'9: Geräteeinstellungen

	(L.L.almex_display_mode) 1 =
	{if}
		" " 4 (L.L.IBIS_input_count) - $* (L.L.IBIS_input) "0" (L.L.IBIS_input_count) $IntToStr $+ $IntToStrEnh $+ 10 $SetLengthR (S.$.Almex_anmeldung_fahrernr)
	{endif}
	(L.L.almex_display_mode) 2 =
	{if}
		" " 4 (L.L.IBIS_input_count) - $* (L.L.IBIS_input) "0" (L.L.IBIS_input_count) $IntToStr $+ $IntToStrEnh $+ 10 $SetLengthR (S.$.Almex_anmeldung_pin)
	{else}
		"" (S.$.Almex_anmeldung_pin)
	{endif}
	(L.L.almex_display_mode) 3 =
	{if}
'		Ticketnamen anzeigen:
		0 (M.V.GetTicketName) (S.$.Ticket_1)
		1 (M.V.GetTicketName) (S.$.Ticket_2)
		2 (M.V.GetTicketName) (S.$.Ticket_3)
		3 (M.V.GetTicketName) (S.$.Ticket_4)
		4 (M.V.GetTicketName) (S.$.Ticket_5)
	{else}
		"" (S.$.Ticket_1) (S.$.Ticket_2) (S.$.Ticket_3) (S.$.Ticket_4) (S.$.Ticket_5)
	{endif}
	(L.L.almex_display_mode) 4 =
	{if}
		(L.L.IBIS_input) 0 =
		(L.L.IBIS_input_count) 0 = &&
		{if}
			"" (S.$.Almex_schildern)
		{else}
			" " 2 (L.L.IBIS_input_count) - $* (L.L.IBIS_input) "0" (L.L.IBIS_input_count) $IntToStr $+ $IntToStrEnh $+ 10 $SetLengthR (S.$.Almex_schildern)
		{endif}
	{endif}
	(L.L.almex_display_mode) 5 =
	{if}
		(L.L.IBIS_input) 0 =
		(L.L.IBIS_input_count) 0 = &&
		{if}
			"" (S.$.Almex_schildern)
		{else}
			" " 2 (L.L.IBIS_input_count) - $* (L.L.IBIS_input) "0" (L.L.IBIS_input_count) $IntToStr $+ $IntToStrEnh $+ 10 $SetLengthR (S.$.Almex_schildern)
		{endif}
	{endif}
	(L.L.almex_display_mode) 7 =
	{if}
		(L.L.ticketprinter_ticket_preselection) (M.V.GetTicketValue) s0
'		Mark:
		l0 " 2" $IntToStrEnh $+ "." $+
'		Pfennige:	
		l0 100 * 100 % "02" $IntToStrEnh $+ (S.$.Ticket_Preis)
	{else}
		"" (S.$.Ticket_Preis)
	{endif}

'	Haltestellennamen anzeigen
	(L.L.IBIS_Route) 0 = !
	(L.L.almex_display_mode) 1 = ! &&
	(L.L.almex_display_mode) 2 = ! &&
	(L.L.almex_display_mode) 4 = ! &&
	(L.L.almex_display_mode) 5 = ! &&
	(L.L.almex_display_mode) 6 = ! &&
	(L.L.almex_display_mode) 8 = ! &&
	(L.L.almex_display_mode) 9 = ! &&
	{if}
'		Nächste Haltestelle:
		(L.L.IBIS_RouteIndex) (M.V.GetBusstopCount) 1 - (L.L.IBIS_busstop) >=
		(L.L.IBIS_Route) 0 = ! &&
		(L.L.elec_busbar_main) &&
		{if}
			(L.L.IBIS_RouteIndex) (L.L.IBIS_busstop) (M.V.GetRouteBusstopIdent)
			(M.V.GetBusstopIndex) 3 (M.V.GetBusstopString)
			(S.$.Almex_Halt_1)
		{else}
			"" (S.$.Almex_Halt_1)
		{endif}

'		Zweite Haltestelle:
		(L.L.IBIS_RouteIndex) (M.V.GetBusstopCount) 1 - (L.L.IBIS_busstop) 1 + >=
		(L.L.IBIS_Route) 0 = ! &&
		(L.L.elec_busbar_main) &&
		{if}
			(L.L.IBIS_RouteIndex) (L.L.IBIS_busstop) 1 + (M.V.GetRouteBusstopIdent)
			(M.V.GetBusstopIndex) 3 (M.V.GetBusstopString)
			(S.$.Almex_Halt_2)
		{else}
			"" (S.$.Almex_Halt_2)
		{endif}

'		Dritte Haltestelle:
		(L.L.IBIS_RouteIndex) (M.V.GetBusstopCount) 1 - (L.L.IBIS_busstop) 2 + >=
		(L.L.IBIS_Route) 0 = ! &&
		(L.L.elec_busbar_main) &&
		{if}
			(L.L.IBIS_RouteIndex) (L.L.IBIS_busstop) 2 + (M.V.GetRouteBusstopIdent)
			(M.V.GetBusstopIndex) 3 (M.V.GetBusstopString)
			(S.$.Almex_Halt_3)
		{else}
			"" (S.$.Almex_Halt_3)
		{endif}

'		Vierte Haltestelle:
		(L.L.IBIS_RouteIndex) (M.V.GetBusstopCount) 1 - (L.L.IBIS_busstop) 3 + >=
		(L.L.IBIS_Route) 0 = ! &&
		(L.L.elec_busbar_main) &&
		{if}
			(L.L.IBIS_RouteIndex) (L.L.IBIS_busstop) 3 + (M.V.GetRouteBusstopIdent)
			(M.V.GetBusstopIndex) 3 (M.V.GetBusstopString)
			(S.$.Almex_Halt_4)
		{else}
			"" (S.$.Almex_Halt_4)
		{endif}

'		Fünfte Haltestelle:
		(L.L.IBIS_RouteIndex) (M.V.GetBusstopCount) 1 - (L.L.IBIS_busstop) 4 + >=
		(L.L.IBIS_Route) 0 = ! &&
		(L.L.elec_busbar_main) &&
		{if}
			(L.L.IBIS_RouteIndex) (L.L.IBIS_busstop) 4 + (M.V.GetRouteBusstopIdent)
			(M.V.GetBusstopIndex) 3 (M.V.GetBusstopString)
			(S.$.Almex_Halt_5)
		{else}
			"" (S.$.Almex_Halt_5)
		{endif}

'		Sechste Haltestelle:
		(L.L.IBIS_RouteIndex) (M.V.GetBusstopCount) 1 - (L.L.IBIS_busstop) 5 + >=
		(L.L.IBIS_Route) 0 = ! &&
		(L.L.elec_busbar_main) &&
		{if}
			(L.L.IBIS_RouteIndex) (L.L.IBIS_busstop) 5 + (M.V.GetRouteBusstopIdent)
			(M.V.GetBusstopIndex) 3 (M.V.GetBusstopString)
			(S.$.Almex_Halt_6)
		{else}
			"" (S.$.Almex_Halt_6)
		{endif}
		
'		Siebte Haltestelle:
		(L.L.IBIS_RouteIndex) (M.V.GetBusstopCount) 1 - (L.L.IBIS_busstop) 6 + >=
		(L.L.IBIS_Route) 0 = ! &&
		(L.L.elec_busbar_main) &&
		{if}
			(L.L.IBIS_RouteIndex) (L.L.IBIS_busstop) 6 + (M.V.GetRouteBusstopIdent)
			(M.V.GetBusstopIndex) 3 (M.V.GetBusstopString)
			(S.$.Almex_Halt_7)
		{else}
			"" (S.$.Almex_Halt_7)
		{endif}
	{else}
		"" (S.$.Almex_Halt_1) (S.$.Almex_Halt_2) (S.$.Almex_Halt_3) (S.$.Almex_Halt_4) (S.$.Almex_Halt_5) (S.$.Almex_Halt_6) (S.$.Almex_Halt_7)
	{endif}
	
'--------------------------------
'	dauerhafte Anzeigen
'--------------------------------

'	Endhaltestelle auf Almex:
	(L.$.IBIS_terminus_name) 20 $SetLengthL (S.$.Almex_endhaltestelle)
	
	(L.L.IBIS_RouteIndex) (M.V.GetBusstopCount) 1 - (L.L.IBIS_busstop) >=
	(L.L.IBIS_Route) 0 = ! &&
	(L.L.elec_busbar_main) &&
	{if}
		(L.L.IBIS_RouteIndex) (L.L.IBIS_busstop) (M.V.GetRouteBusstopIdent)
		(M.V.GetBusstopIndex) 3 (M.V.GetBusstopString)
		(S.$.almex_akthst)
	{else}
		"" (S.$.almex_akthst)
	{endif}
	
'	Innenanzeige fuer Schnellbusversion:
	(L.$.IBIS_terminus_name) 20 $SetLengthL (S.$.Almex_endhaltestelle)
	
	(L.L.IBIS_RouteIndex) (M.V.GetBusstopCount) 1 - (L.L.IBIS_busstop) >=
	(L.L.IBIS_Route) 0 = ! &&
	(L.L.elec_busbar_main) &&
	{if}
		(L.L.IBIS_RouteIndex) (L.L.IBIS_busstop) (M.V.GetRouteBusstopIdent)
		(M.V.GetBusstopIndex) 3 (M.V.GetBusstopString)
		(S.$.IAZ_SB)
	{else}
		"" (S.$.IAZ_SB)
	{endif}
	
'	Route
	(L.L.IBIS_Route) "02" $IntToStrEnh $RemoveSpaces (S.$.Almex_route)

'	Zeit:
	(L.S.Time) 3600 / s0 trunc s1 "02" $IntToStrEnh ":" $+ l0 l1 - 60 * s1 trunc s2 "02" $IntToStrEnh $+ (S.$.IBIS_time)
	
'	Datum:
	(L.S.Day) "02" $IntToStrEnh "." $+ (L.S.Month) "02" $IntToStrEnh $+ "." $+ (L.S.Year) $IntToStr $+ (S.$.IBIS_date)
	
'	aktuelle Fahrplanlage
	"" (M.V.GetTTDelay) s1 60 / s0
'	Verfrühung größer als 0 Minuten:
	l0 0 <
	{if}
		"-" $RemoveSpaces $+ l0 abs trunc "02" $IntToStrEnh $RemoveSpaces $+ ":" $RemoveSpaces $+ l0 abs l0 abs trunc - 60 * "02"  $IntToStrEnh $RemoveSpaces $+ (S.$.IBIS_Delay_rot)
		1 (S.L.IBIS_delay_verfruehung)
	{else}
		"" (S.$.IBIS_Delay_rot)
		0 (S.L.IBIS_delay_verfruehung)
	{endif}
'	Verspätung größer als 0 Minuten:		
	l0 0 >
	{if}
		"+" $RemoveSpaces $+ l0 abs trunc "02" $IntToStrEnh $RemoveSpaces $+ ":" $RemoveSpaces $+ l0 abs l0 abs trunc - 60 * "02"  $IntToStrEnh $RemoveSpaces $+ (S.$.IBIS_Delay_gruen)
		1 (S.L.IBIS_delay_verspaetung)
	{else}
		"" (S.$.IBIS_Delay_gruen)
		0 (S.L.IBIS_delay_verspaetung)
	{endif}
	
	(L.L.ticketprinter_ticket_preselection) (M.V.GetTicketName) (S.$.almex_ticketname)
{else}
	0 (S.L.almex_display_mode) (S.L.Anmeldung_erfolgreich) (S.L.IBIS_delay_verfruehung) (S.L.IBIS_delay_verspaetung)
	"" (S.$.almex_akthst) (S.$.Almex_endhaltestelle) (S.$.Almex_Halt_1) (S.$.Almex_Halt_2) (S.$.Almex_Halt_3) (S.$.Almex_Halt_4) (S.$.Almex_Halt_5) (S.$.Almex_Halt_6) (S.$.Almex_Halt_7)
	"" (S.$.Ticket_Preis) (S.$.Ticket_1) (S.$.Ticket_2) (S.$.Ticket_3) (S.$.Ticket_4) (S.$.Ticket_5)
	"" (S.$.Almex_anmeldung_fahrernr) (S.$.Almex_anmeldung_pin)
	"" (S.$.Almex_schildern) (S.$.Almex_schildern_ziel) (S.$.Almex_route)
{endif}

'Innenanzeige
(L.L.anzeige_counter) (L.S.TimeGap) 1 * + (S.L.anzeige_counter)

(L.L.anzeige_counter) 4 >
(L.L.anzeige_status) 0 = &&
{if}
	1 (S.L.anzeige_status)
	0 (S.L.anzeige_counter)
{endif}

(L.L.anzeige_counter) 3 >
(L.L.anzeige_status) 1 = &&
{if}
	0 (S.L.anzeige_status)
	0 (S.L.anzeige_counter)
{endif}

	(L.L.IBIS_Route) 0 =
	{if}
		(L.L.haltewunsch) 0 =
		{if}
			"" (S.$.IBIS_cabindisplay) (S.$.IBIS_cabindisplay_Trail)
		{else}
			"Wagen hält" (S.$.IBIS_cabindisplay) (S.$.IBIS_cabindisplay_Trail)
		{endif}
	{else}
		(L.L.haltewunsch) 0 =
		{if}
			(L.L.IBIS_RouteIndex) (L.L.IBIS_busstop) (M.V.GetRouteBusstopIdent) (M.V.GetBusstopIndex) 3 (M.V.GetBusstopString) (S.$.IBIS_cabindisplay)
			(L.$.IBIS_cabindisplay) (S.$.IBIS_cabindisplay_Trail)
		{else}
			(L.L.anzeige_status) 0 =
			{if}
				(L.L.IBIS_RouteIndex) (L.L.IBIS_busstop) (M.V.GetRouteBusstopIdent) (M.V.GetBusstopIndex) 3 (M.V.GetBusstopString) (S.$.IBIS_cabindisplay_Trail)
			{else}
				"Wagen hält" (S.$.IBIS_cabindisplay_Trail)
			{endif}
		{endif}
	{endif}

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

'Ausgeben des Fahrscheins
(L.L.ticketprinter_druckt)
{if}
	(L.L.ticketprinter_ticket_pos) (L.S.Timegap) 1 * + (S.L.ticketprinter_ticket_pos)
	1 >
	{if}
		1 (S.L.ticketprinter_ticket_pos)
		0 (S.L.ticketprinter_druckt)
		3 (S.L.almex_display_mode)
		-1 (S.L.ticketprinter_ticket_preselection)
		(L.L.ticketprinter_ticket_selection) (S.L.GivenTicket)
	{endif}
{endif}

(L.L.ticketprinter_ticket_visible)
(L.L.ticketprinter_druckt) ! &&
(L.L.GivenTicket) 0 < &&
{if}
	0 (S.L.ticketprinter_ticket_pos)
	-1 (S.L.ticketprinter_ticket_selection) 
	(T.L.ev_ticketsale_giveticket)
{endif}

(L.L.ticketprinter_druckt) (L.L.GivenTicket) 0 >= || (S.L.ticketprinter_ticket_visible)
{end}

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

{macro:Almex_matrix_reset}
	0 (S.L.IBIS_Route)
	-1 (S.L.IBIS_RouteIndex)
	0 (S.L.IBIS_TerminusCode)
	0 (S.L.IBIS_TerminusIndex) (S.L.Matrix_TerminusIndex_Last)
	"" (S.$.IBIS_terminus_name)
	0 (S.L.IBIS_busstop_index)
	"" (S.$.IBIS_cabindisplay)
	0 (S.L.IBIS_busstop)
	0 (S.L.IBIS_busstop_entwerter_soll)
	0 (S.L.IBIS_busstop_entwerter_ist)
	"" (S.$.act_busstop)
	"" (S.$.IBIS_busstop_name)
	(T.L.ev_IBIS_entwerter)
	"" (S.$.Haltestelle)
	0 (S.L.IBIS_Linie_Complex) (S.L.Matrix_Nr_Last)
	"" (S.$.Matrix_NrAI) (S.$.Matrix_Nr)
	0 (S.L.Matrix_TerminusCode) (S.L.AI_target_index)
{end}

{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
		1.5 <
		{if}
			2 s6
		{else}
			l5 2.5 <
			{if}
				1 s6
			{endif}
		{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}
	{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}

		"..\..\Announcements\" 0 (M.V.GetDepotStringGlobal) "\" $+ $+ (L.$.act_busstop) $+ $msg

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

		".wav" $+
		(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.almex_display_mode) 1 = (L.L.IBIS_input_count) 4 < &&
		(L.L.almex_display_mode) 2 = (L.L.IBIS_input_count) 4 < && ||
		(L.L.almex_display_mode) 4 = (L.L.IBIS_input_count) 5 < && ||
		(L.L.almex_display_mode) 5 = (L.L.IBIS_input_count) 2 < && ||
		(L.L.almex_display_mode) 6 = (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)
		{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)

' 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 * 5 (M.V.GetDepotStringGlobal) $StrToFloat 0 max (S.L.IBIS_Linie_Suffix) + (S.L.IBIS_Linie_Complex)
	{endif}
	l3 8 =
	{if}
		l2 100 * 4 (M.V.GetDepotStringGlobal) $StrToFloat 0 max (S.L.IBIS_Linie_Suffix) + (S.L.IBIS_Linie_Complex)
	{endif}
	l3 9 =
	{if}
		l2 100 * 3 (M.V.GetDepotStringGlobal) $StrToFloat 0 max (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:IBIS-2_reset}
	0 (S.L.IBIS_Route)
	-1 (S.L.IBIS_RouteIndex)
	0 (S.L.IBIS_TerminusCode)
	0 (S.L.IBIS_TerminusIndex)
	"" (S.$.IBIS_terminus_name)
	0 (S.L.IBIS_busstop_index)
	"" (S.$.IBIS_cabindisplay)
	0 (S.L.IBIS_busstop)
	0 (S.L.IBIS_busstop_entwerter_soll)
	0 (S.L.IBIS_busstop_entwerter_ist)
	"" (S.$.act_busstop)
	"" (S.$.IBIS_busstop_name)
	5 (S.L.almex_display_mode)
	"" (S.$.Haltestelle)
{end}
