PROCEDURE ausgabe
  '       -------
  LOCAL anf_spalte%,anz_bilder%,o_str%,akt_zeile%,akt_breite%,akt_spalte%,xp%,yp%
  LOCAL letzte_str%,zeilen_weiter%,maxzeilen%,sp_pro_bildschirm%,textgroesse%
  LOCAL ausgabegeraet%,bildschirm%,bild_nr%,minhard_aufruf%,img_nr%,img_bildzeile%
  LOCAL anf!,bild_ende!
  LOCAL taste$
  IF cmd!
    @106z
    cmd!=FALSE
  ELSE
    @ausgabeparameter_waehlen
  ENDIF
  '
  CLR anf_spalte%,akt_zeile%
  akt_spalte%=anf_spalte%
  akt_breite%=maxspalten%+1
  ARRAYFILL schluss_zeile%(),min_int%
  ARRAYFILL anf_zeile%(),0
  ARRAYFILL anf_zeile2%(),0
  ARRAYFILL anf_e0_zeile%(),0
  ARRAYFILL u_str%(),0
  ARRAYFILL breite%(),0
  ARRAYFILL alte_breite%(),0
  anf!=TRUE
  LET letzte_str%=1
  str_nr%=1
  bild_ende!=FALSE
  IF ausgabegeraet%=monitor
    zeilen_weiter%=maxzeilen%/2
  ELSE
    zeilen_weiter%=maxzeilen%+1
  ENDIF
  ausgabe_abbrechen!=FALSE
  HIDEM
  @tastaturpuffer_leeren
  CLS
  GRAPHMODE 2
  '
  ON ERROR GOSUB fehler2
  '
  WHILE (str_nr%<=anz_str% OR bild_ende!) AND (NOT ausgabe_abbrechen!)
    IF bild_ende!
      @seite_ausgeben
      ausgabe_abbrechen!=(taste$=CHR$(27))!ESC
      CLS
      IF bildschirm%=anz_bilder%
        bildschirm%=1
        akt_spalte%=anf_spalte%
        FOR str_nr%=str_nr%-1 DOWNTO 1
          EXIT IF (ebene%(str_nr%)=0) AND (anf_e0_zeile%(str_nr%)<zeilen_weiter%)
        NEXT str_nr%
        LET letzte_str%=str_nr%
        akt_zeile%=anf_e0_zeile%(str_nr%)-zeilen_weiter%
        IF ausgabegeraet%=monitor
          zeilen_weiter%=(maxzeilen%+1)-zeilen_weiter%
        ENDIF
      ELSE
        akt_spalte%=anf_spalte%-sp_pro_bildschirm%*bildschirm%
        INC bildschirm%
        akt_zeile%=anf_e0_zeile%(letzte_str%)
        str_nr%=letzte_str%
      ENDIF
      akt_breite%=maxspalten%+1
      ARRAYFILL schluss_zeile%(),min_int%
      ARRAYFILL anf_zeile%(),0
      ARRAYFILL anf_zeile2%(),0
      ARRAYFILL anf_e0_zeile%(),0
      ARRAYFILL u_str%(),0
      ARRAYFILL breite%(),0
      ARRAYFILL alte_breite%(),0
      bild_ende!=FALSE
      anf!=TRUE
    ELSE
      IF NOT anf!
        IF (ebene%(str_nr%)<ebene%(str_nr%-1)) !Schleifen od. Verzweigungsende
          @schl_v_end(str_nr%-1,ebene%(str_nr%-1)-ebene%(str_nr%))
        ENDIF
      ELSE
        anf!=FALSE
      ENDIF
      IF ebene%(str_nr%)=0
        anf_e0_zeile%(str_nr%)=akt_zeile% !Anfangszeile speichern
        bild_ende!=(akt_zeile%>maxzeilen%)!auf Bildende prfen
      ELSE
        @oberstruktur_feststellen(str_nr%,ebene%(str_nr%),*o_str%)
        schluss_zeile%(o_str%)=MAX(schluss_zeile%(o_str%),akt_zeile%)
        IF str_art%(o_str%)=schleife
          IF NOT (schl_block%(str_nr%)=akt_schl_block%(o_str%))
            ' schleifenblockwechsel erkannt
            @abbruchtext_ausgeben(abbruchtext$(o_str%,akt_schl_block%(o_str%)),o_str%)
          ENDIF
        ELSE !O/V
          IF NOT (alternative%(str_nr%)=akt_alternative%(o_str%))
            ' wechsel der verzweigungs-alternative erkannt
            ADD akt_spalte%,akt_breite%
            INC akt_alternative%(o_str%)
            akt_breite%=breite%(o_str%,akt_alternative%(o_str%))
            IF anz_alternativen%(o_str%)=2
              akt_zeile%=anf_zeile%(o_str%)-1
            ELSE
              IF akt_alternative%(o_str%)<anz_alternativen%(o_str%)
                akt_zeile%=anf_zeile%(o_str%)+akt_alternative%(o_str%)-2
              ELSE !sonst-Zweig
                akt_zeile%=anf_zeile%(o_str%)+akt_alternative%(o_str%)-3
              ENDIF
            ENDIF
          ENDIF
        ENDIF
      ENDIF
      @zeichne_str
      INC str_nr%
      IF str_nr%>anz_str%
        IF ebene%(anz_str%)>0
          @schl_v_end(anz_str%,ebene%(anz_str%))
        ENDIF
        @strich_drunter(akt_spalte%,akt_zeile%,akt_breite%)
        INC akt_zeile%
        bild_ende!=(akt_zeile%>zeilen_weiter%) OR (bildschirm%<anz_bilder%)
      ENDIF
    ENDIF
  WEND
  IF NOT (ausgabe_abbrechen!)
    @seite_ausgeben !auch die letzte Seite ausgeben
    IF ausgabegeraet%=drucker
      IF minhard_aufruf%<>0 AND nadeln%=9
        @letzte_pixel_ausgeben
      ENDIF
    ENDIF
  ENDIF
  IF ausgabegeraet%=datei AND format%=img AND img_bildzeile%<>0
    @img_datei_schliessen
  ELSE
    IF ausgabegeraet%=drucker
      LPRINT ;CHR$(12);CHR$(27);"@"; !Seitenvorschub,Reset
    ENDIF
  ENDIF
  IF fremdfont_aktiv!
    @set_fonts(1)
  ENDIF
  '
  ON ERROR
RETURN
