//Die Ur-Funktion Inditext() ist in BlattDrG.prg
//23.01.2024 15:31 InditextF.txt heiát die neue Inditext-Datei, die in M:\HDBE\F\ liegt
//07.10.2022 18:00 Zeichenkette-Liste aus InditextF.txt in Array aLines bertragen
//						die Parameter cFile etc. in einer Array-Zeile ausw„hlen
//						die betreffende Textdatei cFile mit MemoRead einlesen
//						die Variablen mit VariFunkErsatz_2 im Text einsetzen
//						den Text ber HTML_Brief_2 ausdrucken
FUNCTION Inditext_2(oDlg1,cFAV)		//12.09.2023 11:31 cFAV Fall/Adressen/Versicherung (identifiziert den Knopf F\ A\ V\)
	LOCAL cTexte := MemoRead(cDatver+cFAV+"Inditext"+cFAV[1]+IIf("Formulare"$cFAV,"F.txt",".txt"))
	LOCAL nMaxLines := MlCount(cTexte, 90)
	LOCAL aLines[nMaxLines], n
	LOCAL aParam := {}, nPosition
	LOCAL cFile, cFormular, cFont := '"Consolas", monospace', cFSize := '12pt', cFormSeite := '1cm 1cm 1cm 2cm', cZeileCM := '0.49cm'	// 28.10.2022 cZeileMM -> cZeileCM
	LOCAL cContainer := ""
	LOCAL cNotiz_Bez := ""
	LOCAL cMail_Adr := "Adresse von Hand eingeben"		//19.11.2023 11:43
	LOCAL cMail_Betr := ConvToAnsiCP("Formular fr Sterbefall")		//19.11.2023 11:43
	LOCAL nTxtnr := 0
	LOCAL CR := Chr(13), LF := Chr(10)
	LOCAL aPosition := {}	//02.01.2024 16:40
	LOCAL cText, cFileText, cFileInhalt, nAnf, nEnd	//19.02.2024 16:13 nachtr„glich als LOCAL erkl„rt
	LOCAL cPosition, cFileInh	//19.02.2024 16:12 nachtr„glich
	PRIVATE cBuero := "Oberhausen"	//11.10.2022 16:56 PRIVATE fr VariFunkErsatz/VariPosition
	PRIVATE cRufnummer := "0208 631349"	//11.10.2022 16:56 PRIVATE fr VariFunkErsatz/VariPosition
	PRIVATE cHeute := DtoC(DATE())
	PRIVATE cAusfuell := "PDF"		//18.02.2024 10:27 "PDF"/"HTML"
	PRIVATE cVariable	//19.02.2024 16:09 nachtr„glich als PRIVATE erkl„rt
	PRIVATE cFormularPNG, cFormularJPG, cFormularDOC, cFormularPDF 
	PRIVATE cFAVp := cFAV[1]	//27.02.2024 11:07
	PRIVATE cMA		//05.03.2024 14:13	wegen Makro bei cMail_Adr
	
	// nur fr KSOX gedacht, daher ja auch inditext_2 !!
	IF "KSOX"$Upper(Appname())
	   DO CASE
	      CASE cSystem == "14" .OR. "Dortmund"$(za05x+za05)
	         cBuero := "Dortmund"
	         cRufnummer := "0231 1857 797"
	      CASE cSystem == "18" .OR. "Duisburg"$(za05x+za05)
	         cBuero := "Duisburg"
	         cRufnummer := "0203 404140"
	      CASE cSystem == "19" .OR. "Essen"$(za05x+za05)
	         cBuero := "Essen"
	         cRufnummer := "0201 766070"
	      CASE cSystem == "17" .OR. "Gelsenkirchen"$(za05x+za05)
	         cBuero := "Gelsenkirchen"
	         cRufnummer := "0209 9442888"
	      CASE cSystem == "15" .OR. "Herne"$(za05x+za05)
	         cBuero := "Herne"
	         cRufnummer := "02323 1460600"
	      CASE cSystem == "16" .OR. "Oberhausen"$(za05x+za05)
	         cBuero := "Oberhausen"
	         cRufnummer := "0208 631349"
	   ENDCASE
	ENDIF
	cTexte := Stuff(cTexte,At("SCANS\DOKUMENTE",Upper(cTexte))+15,0,"\"+StrZero(1->auftrnr,6,0))	//24.04.2025 10:18
	
	FOR n := 1 TO nMaxLines
		aLines[n] := Trim(MemoLine(cTexte, 200, n))
	NEXT

	nTxtnr := ListboxFenster(aLines, oDlg1, @cFormName, 0.9)	// in best4f.prg - zur Auswahl des Formulars in inditextF.txt 
	IF Empty(nTxtnr)
		RETURN .F.
	ENDIF
	cText := aLines[nTxtnr]
	IF Len(cText) == 0
		RETURN .F.
	ENDIF
	IF !","$aLines[nTxtnr]	//16.04.2025 09:36 .AND. Len(aParam) <= 5 .AND. !"ORIGINAL.PDF"$Upper(aParam[2])	//13.04.2025 15:02
		msgbox("keine gltige Parameterdatei ausgew„hlt!")
		RETURN .F.
	ENDIF

	DO WHILE (nPosition := At("," , cText)) > 0
//05.04.2025 18:36		AAdd(aParam, SubStr(cText, 1, nPosition-1))
		AAdd(aParam, AllTrim(SubStr(cText, 1, nPosition-1)))	//05.04.2025 18:37
		cText := SubStr(cText, nPosition+1)
	ENDDO
	IF Len(cText) > 0
//05.04.2025 18:37		AAdd(aParam, cText)
		AAdd(aParam, AllTrim(cText))		//05.04.2025 18:37
	ENDIF

			//24.04.2025 10:34 im Archiv dieses Sterbefalls eine Datei aussuchen und anzeigen:
			IF "SCANS\DOKUMENTE"$Upper(aParam[2])
				cFileX := GetFilename(aParam[2])
				IF !Empty(cFileX) .AND. ".PDF"$Upper(cFileX)
					IF FExists('C:\Program Files\Adobe\Acrobat DC\Acrobat\Acrobat.exe')							//64bit Reader
						RunShell ("&cFileX","C:\Program Files\Adobe\Acrobat DC\Acrobat\Acrobat.exe",.T.)
					ELSEIF FExists('C:\Program Files (x86)\Adobe\Acrobat Reader DC\Reader\AcroRd32.exe')		//32bit Reader
						RunShell ("&cFileX","C:\Program Files (x86)\Adobe\Acrobat Reader DC\Reader\AcroRd32.exe",.T.)
					ELSEIF FExists('C:\Program Files (x86)\Adobe\Acrobat 11.0\Acrobat\AcroRd32.exe')			// Test nur fr BleinX
						RunShell ("&cFileX","C:\Program Files (x86)\Adobe\Acrobat 11.0\Acrobat\AcroRd32.exe",.T.)
					ELSE
						msgbox("Der Adobe Reader DC ist nicht ordentlich installiert!")
					ENDIF
				ELSEIF !Empty(cFileX)
					RunShell ("&cFileX","C:\Program Files\LibreOffice\program\soffice.exe",.T.)
				ENDIF
				RETURN .T.	// es war ja nur die Suche und Anzeige der Datei gewnscht
			ENDIF
			
	cFile := cFAV+aParam[1]		//12.09.2023 12:31 cFAV - cFile f„ngt dann an mit z.B. "F\"
	IIf(Len(aParam) > 1,	cFormular := cFAV+aParam[2], )	//12.09.2023 12:31 cFAV - cFormular f„ngt dann an mit z.B. "F\"
	IIf(Len(aParam) > 2,	cFont := aParam[3], )
	IIf(Len(aParam) > 3,	cFSize := aParam[4], )
	IIf(Len(aParam) > 4,	cFormSeite := aParam[5], )
	IIf(Len(aParam) > 5,	cZeileCM := aParam[6], )
	IIf(Len(aParam) > 6,	cNotiz_Bez := aParam[7], )
	IIf(Len(aParam) > 7,	cMail_Adr := aParam[8], )		//19.11.2023 11:40
	IIf(Len(aParam) > 8,	cMail_Betr := aParam[9], )		//19.11.2023 11:40

	// wenn cMail_Adr = "Email" oder "Notiz", dann im Fall suchen:
	cMail_Adr := Lower(AllTrim(cMail_Adr))
	IF cMail_Adr$"email e-mail notiz notizfeld"
		// die Mail-Adresse in der Hauptmaske auf dem Platz Konto-Inhaber:
		IF cMail_Adr$"email e-mail"
			cMail_Adr := AllTrim(1->ansp_ktoi)
		ENDIF
		// die Mail-Adresse im Notizfeld der Hauptmaske (in eigener Zeile):
		// Email: irgendwer@irgendwas.xy
		IF cMail_Adr$"notiz notizfeld"
			cNotiz := Lower(1->notiz)
			IF "email:"$cNotiz
				nAnf := At("email:",cNotiz)+6
				nEnd := At(Chr(13),cNotiz,nAnf)-1
				nEnd := IIf(nEnd==0,Len(cNotiz),nEnd)
				cMail_Adr := AllTrim(SubStr(1->notiz,nAnf,nEnd-nAnf+1))
			ELSEIF "e-mail:"$cNotiz
				nAnf := At("e-mail:",cNotiz)+7
				nEnd := At(Chr(13),cNotiz,nAnf)-1
				nEnd := IIf(nEnd==0,Len(cNotiz),nEnd)
				cMail_Adr := AllTrim(SubStr(1->notiz,nAnf,nEnd-nAnf+1))
			ELSE
				cMail_Adr := ""
			ENDIF
		ENDIF
	ENDIF

	// die gew„hlte .txt-Datei + inditextX.txt in Notepad laden und zeigen:
	IF AppKeyState(65554)==1 .AND. !"ORIGINAL.PDF"$Upper(cFormular)	// zusammen mit ALT-Taste	//24.04.2025 10:18 ORIGINAL
	   ? RunShell (" /C START Notepad "+cDatver+cFAV+"inditext"+cFAV[1]+".txt",cComCom,.T.)	//12.09.2023 12:30 cFAV
		IF SubStr(Upper(cFile),Len(cFile)-3) == ".TXT"
		   ? RunShell (" /C START Notepad "+cDatver+cFile,cComCom,.T.)
		   cFileText := MemoRead(cDatver+cFile)
		   IF (")"+CR)$cFileText .OR. (")"+LF)$cFileText
		   	msgbox("Nach den Variablen unbedingt einen Leerschritt einbauen!")
		   ENDIF
		ELSE
			RunShell ( cFile,"c:\Program Files\LibreOffice\program\swriter.exe")
		ENDIF
	   RETURN .F.
	ELSEIF AppKeyState(65553)==1 .AND. !"ORIGINAL.PDF"$Upper(cFormular)		// zusammen mit STRG-Taste	//24.04.2025 10:18 ORIGINAL
		cContainer := ""	// Inhalt = leer, nur das Formular drucken
		RETURN HTML_Form_2(cContainer, cFormular, cFont, cFSize, cFormSeite, cZeileCM, cNotiz_Bez, "", cFile, cMail_Adr, cMail_Betr)	//05.05.2024 15:09
	ELSEIF "ORIGINAL.PDF"$Upper(cFormular)	// 10.04.2025 11:14: ausfllbares Original-PDF
		cFile := FormSuche(cDatver+cFile,"*.pdf")	 
		IF ValType(cFile)!="C" .OR. Len(cFile)<5		//14.04.2025 15:17
			RETURN .F.
		ENDIF
		cContainer := ""	// Inhalt = leer, nur das Formular drucken
		RETURN HTML_Form_2(cContainer, cFormular, cFont, cFSize, cFormSeite, cZeileCM, cNotiz_Bez, "", cFile, cMail_Adr, cMail_Betr)	//05.05.2024 15:09
	ELSEIF !FExists(cDatver+cFormular) .OR. AppKeyState(65552)==1	// zusammen mit SHIFT-Taste 02.01.2024 12:04
		cFormular := ""				// Daten ohne Hintergrund ausdrucken (z.B. ohne Briefbogen)
	ENDIF

		//26.02.2024 11:51 erstellt die FEx_*-Datei aus der aktuellen KSOX-Daten-Datei: vvvvvvvvvvvvvvvvv
		IF SubStr(Upper(cFile),Len(cFile)-3) == ".ODT"
			IF !FExport()
				msgbox("Daten-Export hat nicht geklappt!")
			ENDIF
			RETURN ODT_Form_2("", "", "", "", "", "", cNotiz_Bez," ", cFile)	//26.02.2024 19:05
		ENDIF
		//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
		
//23.01.2024 15:54 JPG-Formular in PNG umwandeln (nur einmalig beim ersten Mal)  vvvvvvvvvvvvvvvvvvvvvvv
	IF ".JPG"$Upper(cFormular) .AND. !"ORIGINAL.JPG"$Upper(cFormular)
		cFormularPNG := Stuff(cFormular,At(".JPG",Upper(cFormular)),4,".PNG")
		IF !FExists(cDatver+cFormularPNG)
			cFormularJPG := cFormular
			cParam := cDatver + cFormularJPG + ' /convert=' + Substr(cFormularPNG,3)
//			xyz := RunShell (' --headless --convert-to png --outdir &cFAVp &cFormularJPG', 'C:\Program Files\LibreOffice\program\swriter.exe',.T.)
			xyz := RunShell (' &cParam', 'C:\Program Files\IrfanView\i_view64.exe',.T.)
			msgbox(cFormularJPG + " wird in eine PNG_Datei umgewandelt.")
			IF !FExists(cDatver+cFormularPNG)
				msgbox("Umwandeln in PNG-Datei hat nicht geklappt!")
			ELSE
				cFormular := cFormularPNG
			ENDIF
		ELSE
			cFormular := cFormularPNG
		ENDIF
	ENDIF
//30.10.2023 18:44 PDF-Formular in PNG umwandeln (nur einmalig beim ersten Mal)  vvvvvvvvvvvvvvvvvvvvvvv
	IF ".PDF"$Upper(cFormular) .AND. !"ORIGINAL.PDF"$Upper(cFormular)
		cFormularPNG := Stuff(cFormular,At(".PDF",Upper(cFormular)),4,".PNG")
		IF !FExists(cDatver+cFormularPNG)
			cFormularPDF := cFormular
//			xyz := RunShell (' --headless --convert-to "png:writer_png_Export" --outdir &cFAVp &cFormularPDF', 'C:\Program Files\LibreOffice\program\sdraw.exe',.T.)
//		  	xyz := RunShell (' --headless --convert-to "png:writer_png_Export:{\"PageRange\":{\"type\":\"string\",\"value\":\"1\"}}" --outdir "F" &cFormularPDF', 'C:\Program Files\LibreOffice\program\sdraw.exe',.T.)
			cParam := cDatver + cFormularPDF + ' /convert=' + Substr(cFormularPNG,3)
			xyz := RunShell (' &cParam', 'C:\Program Files\IrfanView\i_view64.exe',.T.)
			msgbox(cFormularPDF + " wird in eine PNG_Datei umgewandelt.")
			IF !FExists(cDatver+cFormularPNG)
				msgbox("Umwandeln in PNG-Datei hat nicht geklappt!")
			ELSE
				cFormular := cFormularPNG
			ENDIF
		ELSE
			cFormular := cFormularPNG
		ENDIF
	ENDIF
//23.01.2024 14:42 ODT erg„nzt
//31.10.2023 09:22 DOC-Formular in PNG umwandeln (nur einmalig beim ersten Mal)  vvvvvvvvvvvvvvvvvvvvvvv
	IF ".DOC"$Upper(cFormular) .OR. ".ODT"$Upper(cFormular)
		cFormularPNG := Stuff(cFormular,At(IIf(".DOC"$Upper(cFormular),".DOC",".ODT"),Upper(cFormular)),4,".PNG")
		IF !FExists(cDatver+cFormularPNG)
			cFormularDOC := cFormular
			xyz := RunShell (' --headless --convert-to png --outdir &cFAVp &cFormularDOC', 'C:\Program Files\LibreOffice\program\swriter.exe',.T.)
			msgbox(cFormularDOC + " wird in eine PNG_Datei umgewandelt.")
			IF !FExists(cDatver+cFormularPNG)
				msgbox("Umwandeln in PNG-Datei hat nicht geklappt!")
			ELSE
				cFormular := cFormularPNG
			ENDIF
		ELSE
			cFormular := cFormularPNG
		ENDIF
	ENDIF
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
	cFileInhalt := ConvToOEMCP(MemoRead(cDatver+cFile))	// den Formular-Text mit den eingebauten Variablen in cFile einlesen
   cVariable := SubStr( cFileInhalt, At("$",cFileInhalt)+1, At(") ",cFileInhalt,At("$",cFileInhalt))-At("$",cFileInhalt) )
		//02.01.2024 16:35 damit 'alte' KSOX-Formulare noch im flieáenden Text positioniert werden,
		//							wird hier aPosition geholt, um dessen Len() abzufragen
      IF ","$cVariable .AND. Len(cVariable)>5
			nAnf := At(",",cVariable)+1
			nEnd := Len(cVariable)
			WHILE nEnd-nAnf > 12
				nAnf := At(",",cVariable,nAnf)+1
			ENDDO
			cPosition := SubStr(cVariable,nAnf,nEnd-nAnf)

			// berechnet die absolute Lage der Variablen auf der Seite:   vvvvvvvvvvvvvvvvvvvvvvvvvvv
			// wie bei php: aPosition = explode(cPosition)
			DO WHILE (nPosition := At("," , cPosition)) > 0
				AAdd(aPosition, Val(SubStr(cPosition, 1, nPosition-1)))
				cPosition := SubStr(cPosition, nPosition+1)
			ENDDO
			IF Len(cPosition) > 0
				AAdd(aPosition, Val(cPosition) - Val(cZeileCM) * 100)	// -nZeileMM, weil die Einstellung.txt die Werte vom Unterstrich hat... 
			ENDIF																//				...w„hrend ein SPAN seine Positionswerte oben links hat
      	//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

			cVariable := SubStr(cVariable,2,nAnf-3)
		ENDIF

	IF "KSOX"$Upper(AppName()) .AND. Len(aPosition) < 3 //.AND. Val(cZeileCM) > 0
	// 02.01.2024 16:35 damit 'alte' KSOX-Formulare noch im flieáenden Text positioniert werden
		IF cVariable == "''"	// 17.02.2024 15:49	$('',1,1) als erste Zeile
			cAusfuell := "HTML"	//18.02.2024 10:28 ausfllen als .html mit LO
			cFileInh := VariPosition_2(cFileInhalt,@cContainer, cFont, cFSize, cFormSeite, cZeileCM, cFile)	// in cFileInhalt steckt jetzt der komplette Text (nicht nur der Filename!)
		ELSEIF Val(cZeileCM) == 0
			cContainer := VariErsatz(cFileInhalt)		//d.h.: alte KSOX-Funktion in BlattDrG
		ELSE
			cFileInh := VariPosition(cFileInhalt,@cContainer, cFont, cFSize, cFormSeite, cZeileCM)	// in cFile steckt jetzt der komplette Text (nicht nur der Filename!)
		// in cContainer (== BriefText) werden von der Fkt. VariPosition() alle Variablen im Text positioniert bergeben.
		ENDIF
	//zum Test	MemoWrit("XXcFile.txt",cFile)
	//zum Test	MemoWrit("XXcCont.txt",cContainer)
		RETURN HTML_Form_2(cContainer, cFormular, cFont, cFSize, cFormSeite, cZeileCM, cNotiz_Bez,"", cFile, cMail_Adr, cMail_Betr)	//05.05.2024 15:09
	ELSE // wenn Len(aPosition)>=3 auch fr KSOX!
	// fr alle Bestatter	
		IF Val(cZeileCM) == 0
			cContainer := VariFunkErsatz_2(cFileInhalt)	// in cFileInhalt steckt jetzt der komplette Text (nicht nur der Filename!)
		ELSE
			cAusfuell := IIf(cVariable=="''","HTML","PDF")		//05.03.2024 15:13
			cFileInhalt := VariPosition_2(cFileInhalt,@cContainer, cFont, cFSize, cFormSeite, cZeileCM, cFile)	// in cFileInhalt steckt jetzt der komplette Text (nicht nur der Filename!)
		// in cContainer (== BriefText) werden von der Fkt. VariPosition_2() alle Variablen im Text positioniert bergeben.
		ENDIF
			RETURN HTML_Form_2(cContainer, cFormular, cFont, cFSize, cFormSeite, cZeileCM, cNotiz_Bez, "", cFile, cMail_Adr, cMail_Betr)	//05.05.2024 15:09
	ENDIF
RETURN .F.	//11.09.2023 16:48
