home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1989 / 01 / anwendg / lister.prg < prev   
Encoding:
Text File  |  1988-10-18  |  4.8 KB  |  153 lines

  1. * -------------------------------------------------------- *
  2. *                   LISTER.PRG                             *
  3. *                                                          *
  4. * Das Programm erlaubt es, beliebige Textdateien auf einem *
  5. * Drucker auszugeben. Dabei wird der auszugebende Text in  *
  6. * Seiten aufgeteilt, wobei jede Ausgabeseite den Datei-    *
  7. * namen und die Seitennummer erhält.                       *
  8. *            (c) 1988 by B.Born & TOOLBOX                  *
  9. * -------------------------------------------------------- *
  10.  
  11. SET TALK OFF
  12. SET ECHO OFF
  13. SET STATUS OFF
  14. SET HEADING OFF
  15. SET SAFETY OFF
  16. SET DATE GERMAN
  17. CLEAR ALL
  18.  
  19. DATEI = SPACE(40)                    && Name = 40 Zeichen
  20. LINKS = 0                            && linker Rand
  21. RECHTS = 80                          && rechter Rand
  22. MAXZEI = 60                          && 60 Zeilen pro Seite
  23. NUMBER = "J"                         && Seitennumerierung
  24.  
  25. * Hilfsdatenbank eröffnen
  26. USE HILF.DBF
  27.  
  28. * Endlosschleife für Lister
  29. DO WHILE .T.
  30.   ANTW = " "
  31.  
  32.   * Bildschirmmaske erstellen
  33.   CLEAR
  34.   @  1, 1 TO 21,79 DOUBLE
  35.   @  6, 2 TO  6,78 DOUBLE
  36.   @ 17, 2 TO 17,78 DOUBLE
  37.   @  3, 4 SAY 'L I S T E R'
  38.   @  3,50 SAY '(c) by B.Born & TOOLBOX'
  39.  
  40.   @  8, 3 SAY 'Name der Eingabedatei '
  41.   @  8,27 GET DATEI
  42.   @ 10, 3 SAY 'linker Rand'
  43.   @ 10,27 GET LINKS PICT "99"
  44.   @ 10,33 SAY 'rechter Rand'
  45.   @ 10,47 GET RECHTS PICT "99"
  46.   @ 12, 3 SAY 'Zeilen pro Seite'
  47.   @ 12,27 GET MAXZEI PICT "99"
  48.   @ 14, 3 SAY 'Zeilennumerierung (J/N)'
  49.   @ 14,28 GET NUMBER PICT "A"
  50.   @ 18,4 SAY 'Eingabe CTRL Y im Feld Eingabedatei -> EXIT'
  51.   READ
  52.  
  53.   * Leereingabe ?
  54.   NAME = RTRIM(DATEI)
  55.   IF DATEI = SPACE(40)               && Exit bei Leereingabe
  56.     CLOSE
  57.     @ 19,4 SAY 'Ende Lister'
  58.     RETURN
  59.   ENDIF
  60.  
  61.   * Prüfe Eingaben für linken und rechten Rand
  62.   IF RECHTS < LINKS                  && Eingabefehler ?
  63.     @ 18, 4 SAY 'Randeinstellung falsch, '
  64.     @ 18,28 SAY 'Bitte eine Taste betätigen ...'
  65.     @ 18,59 GET ANTW PICT "X"
  66.     READ
  67.     LOOP                             && neu einlesen
  68.   ENDIF
  69.  
  70.   * existiert die Datei ?
  71.   IF .NOT. FILE(NAME)
  72.     @ 18, 4 SAY 'Die Datei existiert nicht !!!             '
  73.     @ 19, 4 SAY 'Directory anzeigen (J/N) ?                '
  74.     @ 19,32 GET ANTW PICT "X"
  75.     READ
  76.     IF ANTW$"Jj"
  77.       * Directory einblenden
  78.       CLEAR
  79.       @ 1,1 SAY ''                   && Cursor auf 1. Zeile
  80.       RUN DIR /W                     && Display Directory
  81.       WAIT 'Weiter, bitte eine beliebige Taste betätigen...'
  82.     ENDIF
  83.     LOOP                             && zurück zur Eingabe
  84.   ENDIF
  85.  
  86.   * Variablen initialisieren
  87.   PAGE = 0
  88.   ZEILE = 1
  89.   I = MAXZEI                         && Seitenwechsel
  90.  
  91.   @ 18,4 SAY 'Die Datei wird gedruckt                     '
  92.   SET DEVICE TO PRINT                && Ausgabe auf Drucker
  93.   SET MARGIN TO LINKS                && linker Rand
  94.  
  95.   * Datei einlesen
  96.   ZAP                                && lösche alte Sätze
  97.   APPEND FROM &NAME SDF              && neue Sätze lesen
  98.   GOTO TOP                           && auf 1. Satz
  99.  
  100.   * Datei satzweise ausgeben
  101.   DO WHILE .NOT. EOF()
  102.     IF I >= MAXZEI                   && Kopf drucken ?
  103.       I = 3
  104.       IF PAGE = 0                    && 1. Seite
  105.         @ 0,0 SAY 'L I S T E R'
  106.         @ 0,30 SAY '(c) B.Born & TOOLBOX   Datum :'
  107.         @ 0,61 SAY DTOC(DATE())
  108.       ELSE
  109.         EJECT                        && Seitenwechsel
  110.       ENDIF
  111.       PAGE = PAGE + 1
  112.       @  1, 0 SAY 'Datei :'
  113.       @  1, 8 SAY NAME
  114.       @  1,53 SAY 'Seite :'
  115.       @  1,61 SAY PAGE PICT "99"
  116.     ENDIF
  117.     * Zeilennummer ausgeben ?
  118.     SP = 0                           && Spalte f. Druckbeg.
  119.     IF NUMBER$"Jj"
  120.       @ I,0 SAY ZEILE PICT "9999"
  121.       SP = 5
  122.     ENDIF
  123.     * Text ausgeben mit Randausgleich
  124.     TXT = RTRIM(TEXT)                && Blanks rechts entf.
  125.     TXTLEN = LEN(TXT)                && Länge Reststring
  126.     TXT = LTRIM(TXT)                 && Blanks links entf.
  127.     SP = SP + TXTLEN - LEN(TXT)      && Einrückung bestimmen
  128.     TXTLEN = LEN(TXT)                && Länge Reststring
  129.     ZLEN = RECHTS - SP - LINKS       && Länge Druckbereich
  130.  
  131.     K = 1
  132.     DO WHILE TXTLEN > 0
  133.       IF TXTLEN < ZLEN               && paßt String ?
  134.         ZLEN = TXTLEN
  135.       ENDIF
  136.       @ I,SP SAY SUBSTR(TXT,K,ZLEN)  && Ausgabe Teilstring
  137.       K = K + ZLEN                   && Restlänge
  138.       TXTLEN = TXTLEN - ZLEN
  139.       IF TXTLEN > 0                  && nicht bei letzter
  140.         I = I + 1                    && Zeile
  141.       ENDIF
  142.     ENDDO
  143.     I = I + 1
  144.     ZEILE = ZEILE + 1
  145.     SKIP
  146.   ENDDO
  147.   EJECT
  148.   SET DEVICE TO SCREEN
  149.  
  150. ENDDO                                && Hauptschleife
  151. * -------------------------------------------------------- *
  152. *                  Ende von LISTER.PRG                     *
  153.