home *** CD-ROM | disk | FTP | other *** search
- * -------------------------------------------------------- *
- * LISTER.PRG *
- * *
- * Das Programm erlaubt es, beliebige Textdateien auf einem *
- * Drucker auszugeben. Dabei wird der auszugebende Text in *
- * Seiten aufgeteilt, wobei jede Ausgabeseite den Datei- *
- * namen und die Seitennummer erhält. *
- * (c) 1988 by B.Born & TOOLBOX *
- * -------------------------------------------------------- *
-
- SET TALK OFF
- SET ECHO OFF
- SET STATUS OFF
- SET HEADING OFF
- SET SAFETY OFF
- SET DATE GERMAN
- CLEAR ALL
-
- DATEI = SPACE(40) && Name = 40 Zeichen
- LINKS = 0 && linker Rand
- RECHTS = 80 && rechter Rand
- MAXZEI = 60 && 60 Zeilen pro Seite
- NUMBER = "J" && Seitennumerierung
-
- * Hilfsdatenbank eröffnen
- USE HILF.DBF
-
- * Endlosschleife für Lister
- DO WHILE .T.
- ANTW = " "
-
- * Bildschirmmaske erstellen
- CLEAR
- @ 1, 1 TO 21,79 DOUBLE
- @ 6, 2 TO 6,78 DOUBLE
- @ 17, 2 TO 17,78 DOUBLE
- @ 3, 4 SAY 'L I S T E R'
- @ 3,50 SAY '(c) by B.Born & TOOLBOX'
-
- @ 8, 3 SAY 'Name der Eingabedatei '
- @ 8,27 GET DATEI
- @ 10, 3 SAY 'linker Rand'
- @ 10,27 GET LINKS PICT "99"
- @ 10,33 SAY 'rechter Rand'
- @ 10,47 GET RECHTS PICT "99"
- @ 12, 3 SAY 'Zeilen pro Seite'
- @ 12,27 GET MAXZEI PICT "99"
- @ 14, 3 SAY 'Zeilennumerierung (J/N)'
- @ 14,28 GET NUMBER PICT "A"
- @ 18,4 SAY 'Eingabe CTRL Y im Feld Eingabedatei -> EXIT'
- READ
-
- * Leereingabe ?
- NAME = RTRIM(DATEI)
- IF DATEI = SPACE(40) && Exit bei Leereingabe
- CLOSE
- @ 19,4 SAY 'Ende Lister'
- RETURN
- ENDIF
-
- * Prüfe Eingaben für linken und rechten Rand
- IF RECHTS < LINKS && Eingabefehler ?
- @ 18, 4 SAY 'Randeinstellung falsch, '
- @ 18,28 SAY 'Bitte eine Taste betätigen ...'
- @ 18,59 GET ANTW PICT "X"
- READ
- LOOP && neu einlesen
- ENDIF
-
- * existiert die Datei ?
- IF .NOT. FILE(NAME)
- @ 18, 4 SAY 'Die Datei existiert nicht !!! '
- @ 19, 4 SAY 'Directory anzeigen (J/N) ? '
- @ 19,32 GET ANTW PICT "X"
- READ
- IF ANTW$"Jj"
- * Directory einblenden
- CLEAR
- @ 1,1 SAY '' && Cursor auf 1. Zeile
- RUN DIR /W && Display Directory
- WAIT 'Weiter, bitte eine beliebige Taste betätigen...'
- ENDIF
- LOOP && zurück zur Eingabe
- ENDIF
-
- * Variablen initialisieren
- PAGE = 0
- ZEILE = 1
- I = MAXZEI && Seitenwechsel
-
- @ 18,4 SAY 'Die Datei wird gedruckt '
- SET DEVICE TO PRINT && Ausgabe auf Drucker
- SET MARGIN TO LINKS && linker Rand
-
- * Datei einlesen
- ZAP && lösche alte Sätze
- APPEND FROM &NAME SDF && neue Sätze lesen
- GOTO TOP && auf 1. Satz
-
- * Datei satzweise ausgeben
- DO WHILE .NOT. EOF()
- IF I >= MAXZEI && Kopf drucken ?
- I = 3
- IF PAGE = 0 && 1. Seite
- @ 0,0 SAY 'L I S T E R'
- @ 0,30 SAY '(c) B.Born & TOOLBOX Datum :'
- @ 0,61 SAY DTOC(DATE())
- ELSE
- EJECT && Seitenwechsel
- ENDIF
- PAGE = PAGE + 1
- @ 1, 0 SAY 'Datei :'
- @ 1, 8 SAY NAME
- @ 1,53 SAY 'Seite :'
- @ 1,61 SAY PAGE PICT "99"
- ENDIF
- * Zeilennummer ausgeben ?
- SP = 0 && Spalte f. Druckbeg.
- IF NUMBER$"Jj"
- @ I,0 SAY ZEILE PICT "9999"
- SP = 5
- ENDIF
- * Text ausgeben mit Randausgleich
- TXT = RTRIM(TEXT) && Blanks rechts entf.
- TXTLEN = LEN(TXT) && Länge Reststring
- TXT = LTRIM(TXT) && Blanks links entf.
- SP = SP + TXTLEN - LEN(TXT) && Einrückung bestimmen
- TXTLEN = LEN(TXT) && Länge Reststring
- ZLEN = RECHTS - SP - LINKS && Länge Druckbereich
-
- K = 1
- DO WHILE TXTLEN > 0
- IF TXTLEN < ZLEN && paßt String ?
- ZLEN = TXTLEN
- ENDIF
- @ I,SP SAY SUBSTR(TXT,K,ZLEN) && Ausgabe Teilstring
- K = K + ZLEN && Restlänge
- TXTLEN = TXTLEN - ZLEN
- IF TXTLEN > 0 && nicht bei letzter
- I = I + 1 && Zeile
- ENDIF
- ENDDO
- I = I + 1
- ZEILE = ZEILE + 1
- SKIP
- ENDDO
- EJECT
- SET DEVICE TO SCREEN
-
- ENDDO && Hauptschleife
- * -------------------------------------------------------- *
- * Ende von LISTER.PRG *