'
' Programm um Texte im ASCII-Modus fr Wordplus umzuwandeln
'
'    23.9.1991 Alexander Gr”pl
'
' ------------------------------------------------------------------------------
' F_extract(A:\WORDPLUS\TEST.TXT) zerlegt Dateinamen in seine Bestandteile:
'   F_drive$   : A:
'   F_path$    : \WORDPLUS\
'   F_name$    : TEST
'   F_ext$     : .TXT
' F_... sind globale Strings!
' ------------------------------------------------------------------------------
' Get_path liest aktuellen Pfad nach F_drive$ und F_path$ (ganz am Anfang)
' ------------------------------------------------------------------------------
' Showbox(Titel$) erzeugt eine Titelbox ber der Fileselectbox
' ------------------------------------------------------------------------------
' Show_first_info gibt eine kurze Erkl„rung zum Programm
' ------------------------------------------------------------------------------
' Filtern(Infile$,Outfile$) ist eine simpel gebaute "Blackbox", die
' zeilenweise das Ausgabefile erstellt. Diese Methode ist zwar nicht sehr
' schnell, hat aber den Vorteil, daž sie leicht zu verstehen ist und auch
' eigene Žnderungen leicht vorgenommen werden k”nnen.
' ------------------------------------------------------------------------------
@Show_first_info                        ! erstmal ein Kurzinfo
First_time%=True
@Get_path                               ! erzeugt F_drive$ und F_path$
Ein_path$=F_drive$+F_path$+"*.TXT"
Do
  @Showbox("ASCII-Quellfile ausw„hlen")
  Fileselect Ein_path$,"",Eingabe$
  Cls
  If Eingabe$<>""                       ! wenn Text gew„hlt
    If Exist(Eingabe$)                  ! Eingabe auch vorhanden?
      @F_extract(Eingabe$)
      Ein_path$=F_drive$+F_path$+"*"+F_ext$
      If First_time%=True
        Aus_path$=F_drive$+F_path$+"*.DOC"
        Fziel_name$=F_name$+".DOC"
      Else
        Fziel_name$=F_name$+Fziel_ext$
      Endif
      @Showbox("Wordplus-Zielfile ausw„hlen")
      Fileselect Aus_path$,Fziel_name$,Ausgabe$
      Cls
      If Ausgabe$<>""
        @F_extract(Ausgabe$)
        Aus_path$=F_drive$+F_path$+"*"+F_ext$
        Fziel_ext$=F_ext$
        First_time%=False
        @Filtern(Eingabe$,Ausgabe$)
        Cls
      Endif
    Else
      Alert 1,"File nicht vorhanden!",1,"SOSO!",Ret%
    Endif
  Else
    Alert 2,"Wollen Sie aufh”ren?",1,"JA| NEIN ",Ret%
    If Ret%=1
      End
    Endif
  Endif
Loop
'
Procedure Filtern(Infile$,Outfile$)
  If Infile$<>Outfile$                  ! Namen mssen unterschiedlich sein
    Open "I",#1,Infile$
    Open "O",#2,Outfile$
    While Not Eof(#1)
      Line Input #1,Zeile$              ! Zeile einlesen
      Auszeile$=""                      ! Ausgabezeile vorbereiten
      Anzahlzeichen%=Len(Zeile$)        ! macht so die Sache schneller
      I%=1                              ! Z„hler
      While I%<=Anzahlzeichen%
        Z%=Asc(Mid$(Zeile$,I%,1))       ! Z% steht fr "Zeichen"
        Inc I%
        If Z%<=32                       ! dann Steuerzeichen oder Leerzeichen!
          If Z%=32                      ! Leerzeichen bersetzen
            If I%=2
              Auszeile$=Auszeile$+Chr$(29)  ! am Zeilenanfang als TAB
            Else
              Auszeile$=Auszeile$+Chr$(30)  ! sp„ter normal
            Endif
            While Mid$(Zeile$,I%,1)=Chr$(32)! n„chsten sind Blocksatzfllzeichen
              Auszeile$=Auszeile$+Chr$(28)
              Inc I%
            Wend
          Else                          ! Steuerzeichen
            If Z%=12                    ! nur FF beachten
              Auszeile$=Auszeile$+Chr$(Z%)
            Endif
          Endif
        Else                            ! dann druckbarer Buchstabe!
          If I%>Anzahlzeichen% And (Z%=45 Or Z%=127) ! "-" oder xEDIT-Trennung
            Auszeile$=Auszeile$+Chr$(25)! Trennzeichen am Zeilenende
          Else
            Auszeile$=Auszeile$+Chr$(Z%)
          Endif
        Endif
      Wend
      Laenge%=Len(Auszeile$)
      If Laenge%>0                      ! nun noch evtl. Leerzeichen fr Umbruch
        Z_e%=Asc(Right$(Auszeile$,1))
        If Not ((28<=Z_e% And Z_e%<=30) Or Z_e%=12 Or Z_e%=25 Or Z_e%=45)
          Auszeile$=Auszeile$+Chr$(30)
        Endif
      Endif
      Print Zeile$
      Print #2;Auszeile$
    Wend
    Close #1
    Close #2
  Else
    Alert 3,"Die Dateinamen mssen |unterschiedlich sein!",1," SOSO ",Ret%
  Endif
Return
Procedure F_extract(Full_name$)         ! zerlegt Filenamen in Bestandteile
  Local Lpos%,Rpos%
  F_drive$=Left$(Full_name$,2)
  Lpos%=1
  Repeat                                ! den letzten '\' suchen
    Lpos%=Instr(Lpos%+1,Full_name$,"\")
  Until Instr(Lpos%+1,Full_name$,"\")=0
  F_path$=Mid$(Full_name$,3,Lpos%-2)
  Rpos%=Instr(Lpos%+1,Full_name$,".")
  If Rpos%<>0
    F_name$=Mid$(Full_name$,Lpos%+1,Rpos%-1-Lpos%)
    F_ext$=Right$(Full_name$,Len(Full_name$)-Rpos%+1)
  Else
    F_name$=Right$(Full_name$,Len(Full_name$)-Lpos%)
    F_ext$=""
  Endif
Return
Procedure Get_path                      ! liest den akt. Pfad
  Local Buf$
  Buf$=Space$(128)                      ! Puffer fr Pfadnamen
  Dummy%=Gemdos(71,L:Varptr(Buf$),W:0)
  F_path$=Left$(Buf$,Instr(1,Buf$,Chr$(0))-1)+"\"
  F_drive$=Chr$(Gemdos(25)+65)+":"
Return
Procedure Showbox(Titel$)
  Local X0$,Y0%,X1%,Y1%
  X0%=(640-325)/2                       ! x-Koordinaten der Box
  X1%=X0%+325
  Y0%=20
  Y1%=(400-294)/2                       ! y-Koordinaten der Box
  '
  Box X0%,Y0%,X1%,Y1%
  Box X0%+3,Y0%+3,X1%-3,Y1%-3
  Box X0%+4,Y0%+4,X1%-4,Y1%-4
  Text X0%+8,Y1%-8,Titel$
Return
Procedure Show_first_info
  Cls
  Print " ASC_2_WP: ASCII-Textformat ->Wordplus-Textformat"
  Print
  Print " Dies ist ein einfaches Programm, mit dem Sie Texte"
  Print " im ASCII-Format in das Wordplus-Format umwandeln"
  Print " k”nnen. Dieses ist notwendig, da Wordplus ein besonderes"
  Print " Format fr die Leerzeichen benutzt. Der Randausgleich"
  Print " funktioniert ansonsten nicht."
  Print " W„hlen Sie zuerst Ihren Ausgangstext und"
  Print " danach den Zielordner und den Namen des Zieltextes."
  Print
  Print " --- bitte (Maus-)Taste drcken ---"
  Repeat
  Until Len(Inkey$) Or Mousek
  Cls
Return
