REM  *****  BASIC  *****

Sub AlleStichworteInKonkordanzSDI
  DIM LV				'Laufwerk und Verzeichnis (Windows)
  DIM Datei				'Zieldatei = Konkordanzdatei ohne Endung
  DIM FileName			'Laufwerk & Verzeichnis & Datei
  DIM n					'File-Nummer
  DIM m					'File-Nummer
  DIM TrS as string		'Trennzeichen für eine Datei vom Typ CSV, z.B. Konkordanz.sdi
  DIM F0 as string		'Füllzeichen 0
  DIM F1 as string		'Füllzeichen 1
  DIM Stich				'ermitteltes Stichwort
  DIM Z1				'erste Zeile der Konkordanzdatei
  DIM Temp as string	'Hilfszeile
  DIM i as integer		'Laufvariable
  Dim Eintrag
  Dim Schluessel1
  Dim Schluessel2
  Dim GrossKlein
  Dim GanzesWort
  Dim sReturn As String     'Rückgabewert
  Dim sMsg As String        'Eingabeaufforderung
  Dim sTitle As String      'Fenstertitel
  Dim sDefault As String    'Standardtext
  Dim nXPos As Integer      'Twips vom linken Rand
  Dim nYPos As Integer      'Twips vom oberen Rand
  LV = "c:\users\Peter\Gedichte\"
  nXPos = 1440 * 2          'Zwei Zoll Abstand vom linken Fensterrand
  nYPos = 1440 * 4          'Vier Zoll Abstand vom oberen Fensterrand
  sMsg  = "Bitte korrigieren Sie Laufwerk und Verzeichnis:"
  sTitle = "LaufwerkVerzeichnis"
  sDefault = LV
  sReturn = InputBox(sMsg, sTitle, sDefault, nXPos, nYPos)
  If sReturn <> "" Then
    REM Gibt den eingegebenen Text aus, eingeschlossen in doppelten Anführungszeichen
    Print "Sie haben """; sReturn; """ eingegeben."
  Else
    Print "Sie haben entweder einen leeren String eingegeben " & _
          "oder die Schaltfläche Abbrechen gewählt."
  End If
  LV = sReturn
  Datei = "Konkordanzdatei"
  nXPos = 1440 * 2          'Zwei Zoll Abstand vom linken Fensterrand
  nYPos = 1440 * 4          'Vier Zoll Abstand vom oberen Fensterrand
  sMsg  = "Bitte korrigieren Sie den Dateinamen:"
  sTitle = "Datei"
  sDefault = Datei
  sReturn = InputBox(sMsg, sTitle, sDefault, nXPos, nYPos)
  If sReturn <> "" Then
    REM Gibt den eingegebenen Text aus, eingeschlossen in doppelten Anführungszeichen
    Print "Sie haben """; sReturn; """ eingegeben."
  Else
    Print "Sie haben entweder einen leeren String eingegeben " & _
          "oder die Schaltfläche Abbrechen gewählt."
  End If
  Datei = sReturn
  FileName = LV & Datei & ".sdi"
  Print "Die Konkordanzdatei befindet sich unter: ", FileName
  n = FreeFile()                                     'Nächste freie Dateinummer
  Open FileName For Output Access Read Write As #n   'Geöffnet mit Lese-/Schreibzugriff
  REM	Stichworte auslesen und Zwischenspeichern
  seek #n, 1
  Z1 = "#Suchbegriff;Registereintrag;1. Schlüssel;2. Schlüssel;Groß/Klein;ganzes Wort"
  TrS = ";"
  Tr0 = "0"
  Tr1 = "1"
  indexes = ThisComponent.getDocumentIndexes()
  for i=0 to indexes.count-1
    index = indexes(i)
    if index.supportsService("com.sun.star.text.DocumentIndex") then
      marks = index.DocumentIndexMarks
      for j=lBound(marks()) to uBound(marks())
        Stich=marks(j).getAnchor.getString()
		Eintrag = marks(j).AlternativeText()
		Schluessel1  =  marks(j).PrimaryKey()
        Schluessel2  =  marks(j).SecondaryKey()
        GrossKlein   = 1
        GanzesWort   = 0
	    print #n,  Stich ; TrS ; Eintrag ; TrS ; Schluessel1 ; TrS ; Schluessel2 ; TrS ; GrossKlein ; TrS ; GanzesWort
	  next
    End If
  next
  REM Maximale Zeilenzahl = Stichworte Ermitteln 
  seek #n, 1
  REM Maximale Zeilenzahl Ermitteln 
  i=0
  do until eof(#n)
  	i=i+1
  	line input #n, Temp
  loop
  maxi = i
  REM Unsortierte Stichwortzeilen in array einlesen
  seek #1, 1
  i=0
  DIM Sang(maxi)
  do until eof(#n)
  	i=i+1
  	line input #n, Sang(i)
  loop
  REM  Stichworte Sortieren
  Dim iOuter As Integer, iInner As Integer
  For iOuter = maxi To 1 Step -1
    For iInner = 1 To iOuter - 1
      If Sang(iInner) > Sang(iInner + 1) Then
        Temp = Sang(iInner)
        Sang(iInner) = Sang(iInner + 1)
        Sang(iInner + 1) = Temp
        bSomethingChanged  = True
      End If
    Next iInner
  Next iOuter
  close #n
  m = FreeFile()
  Open FileName For Output As #m    'Konkordanzdatei mit Schreibzugriff erneut geöffnet
  seek #m, 1
  print #m, Z1						'1. Zeile der Konkordanzdatei mit Strukturangaben geschrieben
  for i=1 to maxi
    if i > 1 then
    	if Sang(i) <> Temp then		'gleichartige Stichworte werden nur einmal geschrieben
    		Temp = Sang(i)
    		print #m, Temp
    	end if
    else 
    	Temp = Sang(i)
    	print #m, Temp
    end if
  next
End Sub
REM  *****  BASIC  *****

Sub AlleStichworteTilgen
  indexes = ThisComponent.getDocumentIndexes()
  for i=0 to indexes.count-1
    index = indexes(i)
    if index.supportsService("com.sun.star.text.DocumentIndex") then
      marks = index.DocumentIndexMarks
      for j=lBound(marks()) to uBound(marks())
        marks(j).dispose()
      next
      index.update()
    End If
  next
End Sub
REM  *****  BASIC  *****

Sub AlleStichworteZeigen
  DIM TrS
  DIM Tr0
  DIM Tr1
  DIM Stich
  Dim Eintrag
  Dim Schluessel1
  Dim Schluessel2
  TrS = ";"
  Tr0 = "0"
  Tr1 = "1"
  
  indexes = ThisComponent.getDocumentIndexes()
  for i=0 to indexes.count-1
    index = indexes(i)
    if index.supportsService("com.sun.star.text.DocumentIndex") then
      marks = index.DocumentIndexMarks
      for j=lBound(marks()) to uBound(marks())
        Stich=marks(j).getAnchor.getString()
		Eintrag = marks(j).AlternativeText()
		Schluessel1  =  marks(j).PrimaryKey()
        Schluessel2  =  marks(j).SecondaryKey()
    	print " (" ; j ; " ) " ; Stich ; TrS ; Eintrag ; TrS ; Schluessel1 ; TrS ; Schluessel2
	  next
    End If
  next
End Sub
REM  *****  BASIC  *****

Sub NurLeereStichworteZeigen
  DIM TrS
  DIM Tr0
  DIM Tr1
  DIM Stich
  Dim Eintrag
  Dim Schluessel1
  Dim Schluessel2
  TrS = ";"
  Tr0 = "0"
  Tr1 = "1"
  
  indexes = ThisComponent.getDocumentIndexes()
  for i=0 to indexes.count-1
    index = indexes(i)
    if index.supportsService("com.sun.star.text.DocumentIndex") then
      marks = index.DocumentIndexMarks
      for j=lBound(marks()) to uBound(marks())
        Stich=marks(j).getAnchor.getString()
		if Stich = "" then
			Eintrag = marks(j).AlternativeText()
			Schluessel1  =  marks(j).PrimaryKey()
        	Schluessel2  =  marks(j).SecondaryKey()
	    	print " (" ; j ; " ) " ; Stich ; TrS ; Eintrag ; TrS ; Schluessel1 ; TrS ; Schluessel27
		end if	   
	  next
    End If
  next
End Sub



