'
' Programm um Texte im WP-Modus wieder im ASCII-Modus zu bringen
'
'    23.9.1991 Alexander Gr”pl
'
' ------------------------------------------------------------------------------
' F_extract(A:\WORDPLUS\TEST.DOC) zerlegt Dateinamen in seine Bestandteile:
'   F_drive$   : A:
'   F_path$    : \WORDPLUS\
'   F_name$    : TEST
'   F_ext$     : .DOC
' 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$+"*.DOC"
Do
  @Showbox("Wordplus-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$+"*.TXT"
        Fziel_name$=F_name$+".TXT"
      Else
        Fziel_name$=F_name$+Fziel_ext$
      Endif
      @Showbox("ASCII-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
      Zeilenfilter:
      Spezial%=Instr(Zeile$,Chr$(31),1) ! '31' leitet 'Spezialzeilen' ein
      If Spezial%>0                     ! dann 31 gefunden
        Zeile$=Left$(Zeile$,Spezial%-1) ! Zeile abschneiden (evtl. FF-Zeichen)
        If Not Eof(#1)
          Line Input #1,Ergaenz_zeile$  ! und n„chste dazuladen
          Zeile$=Zeile$+Ergaenz_zeile$
          Goto Zeilenfilter             ! unsch”n, aber zweckm„žig
        Endif
      Endif
      Auszeile$=""                      ! Ausgabezeile nun aufbauen
      Anzahlzeichen%=Len(Zeile$)        ! macht so die Sache schneller
      I%=1                              ! I% ist der Z„hler
      While I%<=Anzahlzeichen%
        Z%=Asc(Mid$(Zeile$,I%,1))       ! Z% steht fr "Zeichen"
        Inc I%
        If Z%>=32                       ! dann ist Z% druckbares Zeichen!
          Auszeile$=Auszeile$+Chr$(Z%)
        Else                            ! dann ist Z% Steuerzeichen!
          If Z%>=28                     ! 28,29,30 sind div. Leerzeichen
            Auszeile$=Auszeile$+Chr$(32)
          Else
            If Z%=27 Or Z%=11           ! Attributeinstellung oder 'Block(?)'
              Inc I%                    ! ein Zeichen berspringen
            Else
              If Z%=25                  ! 'weiches' Trennzeichen (Tilde)
                Auszeile$=Auszeile$+Chr$(127)   ! xEDIT Trennzeichen ausgeben
                ' Auszeile$=Auszeile$+"-"         ! alternativ, falls nicht erwnscht
              Else
                If Z%=24                ! 24 markiert Fužnoten
                  Auszeile$=Auszeile$+Chr$(124) ! als "Pipe" darstellen
                Else
                  Auszeile$=Auszeile$+Chr$(Z%)  ! restliche Steuerzeichen erhalten
                Endif
              Endif
            Endif
          Endif
        Endif
      Wend
      Print Auszeile$
      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 " WP_2_ASC: Wordplus-Textformat -> ASCII-Textformat"
  Print
  Print " Dies ist ein einfaches Programm, mit dem Sie Texte"
  Print " im Wordplus-Format in das ASCII-Format umwandeln"
  Print " k”nnen. W„hlen Sie zuerst Ihren Ausgangstext und"
  Print " danach den Zielordner und den Namen des Zieltextes."
  Print " Beachten Sie, daž bei der Umwandlung die Textattribute"
  Print " (fett, unterstrichen ...) und die Zeilenlineale natrlich"
  Print " verloren gehen. Auch Fužnoten werden nicht korrekt"
  Print " untersttzt."
  Print
  Print " --- bitte (Maus-)Taste drcken ---"
  Repeat
  Until Len(Inkey$) Or Mousek
  Cls
Return
