mirror of
https://github.com/forth-ev/VolksForth.git
synced 2024-11-26 02:49:17 +00:00
511 lines
31 KiB
Forth
511 lines
31 KiB
Forth
\ *** Block No. 0 Hexblock 0
|
||
\\ *** Printer-Interface *** 10oct86we
|
||
|
||
Dieses File enth„lt das Printer-Interface. Die Definitionen f<EFBFBD>r
|
||
die Druckersteuerung m<EFBFBD>ssen ggf. an Ihren Drucker angepažt wer-
|
||
den.
|
||
|
||
PRINT lenkt alle Ausgabeworte auf den Drucker um, mit DISPLAY
|
||
wird wieder auf dem Bildschirm ausgegeben.
|
||
|
||
Zum Ausdrucken der Quelltexte gibt es die Worte
|
||
|
||
pthru ( from to -- ) druckt Screen from bis to
|
||
document ( from to -- ) wie pthru, aber mit Shadow-Screens
|
||
printall ( -- ) wie pthru, aber druckt das ganze File
|
||
listing ( -- ) wie document, aber f<EFBFBD>r das ganze File
|
||
|
||
\ *** Block No. 1 Hexblock 1
|
||
\ Printer Interface Epson RX80\FX80 21oct86we
|
||
|
||
Onlyforth
|
||
|
||
\needs file? ' noop | Alias file?
|
||
\needs capacity ' blk/drv Alias capacity
|
||
|
||
Vocabulary Printer Printer definitions also
|
||
|
||
1 &13 +thru
|
||
|
||
Onlyforth \ clear
|
||
|
||
|
||
|
||
|
||
\ *** Block No. 2 Hexblock 2
|
||
\ Printer p! and controls 18nov86we
|
||
|
||
' bcostat | Alias ready? ' 0 | Alias printer
|
||
|
||
: p! ( n -- )
|
||
BEGIN pause printer ready? UNTIL printer bconout ;
|
||
|
||
|
||
| : ctrl: ( 8b -- ) Create c, does> ( -- ) c@ p! ;
|
||
|
||
07 ctrl: BEL $7F | ctrl: DEL $0D | ctrl: RET
|
||
$1B | ctrl: ESC $0A ctrl: LF $0C ctrl: FF
|
||
|
||
|
||
|
||
|
||
\ *** Block No. 3 Hexblock 3
|
||
\ Printer controls 09sep86re
|
||
|
||
| : esc: ( 8b -- ) Create c, does> ( -- ) ESC c@ p! ;
|
||
|
||
| : esc2 ( 8b0 8b1 -- ) ESC p! p! ;
|
||
|
||
| : on: ( 8b -- ) Create c, does> ( -- ) ESC c@ p! 1 p! ;
|
||
|
||
| : off: ( 8b -- ) Create c, does> ( -- ) ESC c@ p! 0 p! ;
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
\ *** Block No. 4 Hexblock 4
|
||
\ Printer Escapes Epson RX-80/FX-80 12sep86re
|
||
|
||
$0F | ctrl: (+17cpi $12 | ctrl: (-17cpi
|
||
|
||
Ascii P | esc: (+10cpi Ascii M | esc: (+12cpi
|
||
Ascii 0 esc: 1/8" Ascii 1 esc: 1/10"
|
||
Ascii 2 esc: 1/6" Ascii T esc: suoff
|
||
Ascii N esc: +jump Ascii O esc: -jump
|
||
Ascii G esc: +dark Ascii H esc: -dark
|
||
\ Ascii 4 esc: +cursive Ascii 5 esc: -cursive
|
||
|
||
Ascii W on: +wide Ascii W off: -wide
|
||
Ascii - on: +under Ascii - off: -under
|
||
Ascii S on: sub Ascii S off: super
|
||
|
||
|
||
\ *** Block No. 5 Hexblock 5
|
||
\ Printer Escapes Epson RX-80/FX-80 12sep86re
|
||
|
||
: 10cpi (-17cpi (+10cpi ; ' 10cpi Alias pica
|
||
: 12cpi (-17cpi (+12cpi ; ' 12cpi Alias elite
|
||
: 17cpi (+10cpi (+17cpi ; ' 17cpi Alias small
|
||
|
||
: lines ( #.of.lines -- ) Ascii C esc2 ;
|
||
|
||
: "long ( inches -- ) 0 lines p! ;
|
||
|
||
: american 0 Ascii R esc2 ;
|
||
|
||
: german 2 Ascii R esc2 ;
|
||
|
||
: normal 10cpi american suoff 1/6" &12 "long RET ;
|
||
|
||
\ *** Block No. 6 Hexblock 6
|
||
\ Umlaute 14oct86we
|
||
|
||
| Create DIN
|
||
Ascii „ c, Ascii ” c, Ascii <EFBFBD> c, Ascii ž c,
|
||
Ascii Ž c, Ascii ™ c, Ascii š c, Ascii Ý c,
|
||
|
||
| Create AMI
|
||
Ascii { c, Ascii | c, Ascii } c, Ascii ~ c,
|
||
Ascii [ c, Ascii \ c, Ascii ] c, Ascii @ c,
|
||
|
||
here AMI - | Constant tablen
|
||
|
||
| : p! ( char -- ) dup $80 < IF p! exit THEN
|
||
tablen 0 DO dup I DIN + c@ =
|
||
IF drop I AMI + c@ LEAVE THEN LOOP
|
||
german p! american ;
|
||
\ *** Block No. 7 Hexblock 7
|
||
\ Printer Output 12sep86re
|
||
|
||
| Variable pcol pcol off | Variable prow prow off
|
||
|
||
| : pemit ( 8b -- ) p! 1 pcol +! ;
|
||
| : pcr ( -- ) RET LF 1 prow +! pcol off ;
|
||
| : pdel ( -- ) DEL pcol @ 1- 0 max pcol ! ;
|
||
| : ppage ( -- ) FF prow off pcol off ;
|
||
| : pat ( row col -- ) over prow @ < IF ppage THEN
|
||
swap prow @ - 0 ?DO pcr LOOP
|
||
dup pcol @ < IF RET pcol off THEN pcol @ - spaces ;
|
||
| : pat? ( -- row col ) prow @ pcol @ ;
|
||
| : ptype ( adr len -- )
|
||
dup pcol +! bounds ?DO I c@ p! LOOP ;
|
||
|
||
|
||
\ *** Block No. 8 Hexblock 8
|
||
\ Printer output 18nov86we
|
||
|
||
Output: >printer pemit pcr ptype pdel ppage pat pat? ;
|
||
|
||
Forth definitions
|
||
|
||
: print >printer normal ;
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
\ *** Block No. 9 Hexblock 9
|
||
\ Variables and Setup bp 12oct86
|
||
|
||
Printer definitions
|
||
|
||
' 0 | Alias logo
|
||
|
||
| : header ( pageno -- )
|
||
12cpi +dark ." volksFORTH-83 FORTH-Gesellschaft eV "
|
||
-dark 17cpi ." (c) 1985/86 we/bp/re/ks " 12cpi +dark
|
||
file? -dark 17cpi ." Seite " . ;
|
||
|
||
|
||
|
||
|
||
|
||
|
||
\ *** Block No. 10 Hexblock A
|
||
\ Print 2 screens across on a page 26oct86we
|
||
|
||
| : 2lines ( scr#1 scr#2 line# -- )
|
||
cr dup 2 .r space c/l * >r
|
||
pad c/l 2* 1+ bl fill swap
|
||
block r@ + pad c/l cmove
|
||
block r> + pad c/l + 1+ c/l cmove
|
||
pad c/l 2* 1+ -trailing type ;
|
||
|
||
| : 2screens ( scr#1 scr#2 -- )
|
||
cr cr &30 spaces
|
||
+wide +dark over 4 .r &28 spaces dup 4 .r -wide -dark
|
||
cr l/s 0 DO 2dup I 2lines LOOP 2drop ;
|
||
|
||
|
||
|
||
\ *** Block No. 11 Hexblock B
|
||
\ print 6 screens on a page 18sep86we
|
||
|
||
| : pageprint ( last+1 first pageno -- )
|
||
header 2dup - 1+ 2/ dup 0
|
||
?DO >r 2dup under r@ + >
|
||
IF dup r@ + ELSE logo THEN 2screens 1+ r> LOOP
|
||
drop 2drop page ;
|
||
|
||
| : >shadow ( n1 -- n2 )
|
||
capacity 2/ 2dup < IF + ELSE - THEN ;
|
||
|
||
| : shadowprint ( last+1 first pageno -- )
|
||
header 2dup - 0
|
||
?DO dup dup >shadow 2screens 1+ LOOP
|
||
2drop page ;
|
||
|
||
\ *** Block No. 12 Hexblock C
|
||
\ Printing without Shadows b11nov86we
|
||
|
||
Forth definitions also
|
||
|
||
| Variable printersem 0 printersem ! \ for multitasking
|
||
|
||
: pthru ( first last -- ) 2 arguments
|
||
printersem lock output push print
|
||
1+ capacity umin swap 2dup - 6 /mod swap 0<> - 0
|
||
?DO 2dup 6 + min over I 1+ pageprint 6 + LOOP
|
||
2drop printersem unlock ;
|
||
|
||
: printall ( -- ) 0 capacity 1- pthru ;
|
||
|
||
|
||
|
||
\ *** Block No. 13 Hexblock D
|
||
\ Printing with Shadows bp 12oct86
|
||
|
||
: document ( first last -- )
|
||
printersem lock output push print
|
||
1+ capacity 2/ umin swap 2dup - 3 /mod swap 0<> - 0
|
||
?DO 2dup 3+ min over I 1+ shadowprint 3+ LOOP
|
||
2drop printersem unlock ;
|
||
|
||
: listing ( -- ) 0 capacity 2/ 1- document ;
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
\ *** Block No. 14 Hexblock E
|
||
\ Printerspool 14oct86we
|
||
|
||
\needs Task \\
|
||
|
||
$100 $200 Task spooler
|
||
|
||
: spool' ( -- ) \ reads word
|
||
' isfile@ offset @ base @ spooler depth 1- 6 min pass
|
||
base ! offset ! isfile ! execute
|
||
true abort" SPOOL' ready for next job!" stop ;
|
||
|
||
|
||
|
||
|
||
|
||
|
||
\ *** Block No. 15 Hexblock F
|
||
\\ *** Printer-Interface *** 13oct86we
|
||
|
||
Eingestellt ist das Druckerinterface auf Epson und kompatible
|
||
Drucker. Die Steuersequenzen auf den Screens 2, 4 und 5 m<EFBFBD>ssen
|
||
gegebenenfalls auf Ihren Drucker angepažt werden. Bei uns gab
|
||
es mit verschiedenen Druckern allerdings keine Probleme, da
|
||
sich inzwischen die meisten Druckerhersteller an die Epson-
|
||
Steuercodes halten.
|
||
|
||
Arbeiten Sie mit einem IBM-kompatiblen Drucker, muž die Umlaut-
|
||
wandlung auf Screen 6 wegkommentiert werden.
|
||
|
||
Zus„tzliche 'exotische' Steuersequenzen k”nnen nach dem Muster
|
||
auf den Screens 4 und 5 jederzeit eingebaut werden.
|
||
|
||
|
||
\ *** Block No. 16 Hexblock 10
|
||
\ Printer Interface Epson RX80 13oct86we
|
||
|
||
setzt order auf FORTH FORTH ONLY FORTH
|
||
|
||
falls das Fileinterface nicht im System ist, werden die ent-
|
||
sprechenden Worte ersetzt.
|
||
|
||
Printer-Worte erhalten ein eigenes Vocabulary.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
\ *** Block No. 17 Hexblock 11
|
||
\ Printer p! and controls 10oct86we
|
||
|
||
nur aus stilistischen Gr<EFBFBD>nden. Das Folgende liest sich besser.
|
||
|
||
Hauptausgabewort; gibt ein Zeichen auf den Drucker aus. Es wird
|
||
gewartet, bis der Drucker bereit ist. (PAUSE f<EFBFBD>r Multitasking)
|
||
|
||
|
||
gibt Steuerzeichen an Drucker
|
||
|
||
Steuerzeichen f<EFBFBD>r Drucker. Gegebenenfalls anpassen!
|
||
|
||
|
||
|
||
|
||
|
||
\ *** Block No. 18 Hexblock 12
|
||
\ Printer controls 10oct86we
|
||
|
||
gibt Escape-Sequenzen an den Drucker aus.
|
||
|
||
gibt Escape und zwei Zeichen aus.
|
||
|
||
gibt Escape, ein Zeichen und eine 1 an den Drucker aus.
|
||
|
||
gibt Escape, ein Zeichen und eine 0 an den Drucker aus.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
\ *** Block No. 19 Hexblock 13
|
||
\ Printer Escapes Epson RX-80/FX-80 10oct86we
|
||
|
||
setzt bzw. l”scht Ausgabe komprimierter Schrift.
|
||
|
||
setzt Zeichenbreite auf 10 bzw. 12 cpi.
|
||
Zeilenabstand in Zoll.
|
||
schaltet Super- und Subscript ab
|
||
Perforation <EFBFBD>berspringen ein- und ausschalten.
|
||
Es folgen die Steuercodes f<EFBFBD>r Fettdruck, Kursivschrift, Breit-
|
||
schrift, Unterstreichen, Subscript und Superscript.
|
||
Diese m<EFBFBD>ssen ggf. an Ihren Drucker angepažt werden.
|
||
Selbstverst„ndlich k”nnen auch weitere F„higkeiten Ihres Druk-
|
||
kers genutzt werden wie Proportionalschrift, NLQ etc.
|
||
|
||
|
||
|
||
\ *** Block No. 20 Hexblock 14
|
||
\ Printer Escapes Epson RX-80/FX-80 13oct86we
|
||
|
||
Hier wird die Zeichenbreite eingestellt. Dazu kann man sowohl
|
||
Worte mit der Anzahl der characters per inch (cpi) als auch
|
||
pica, elite und small benutzen.
|
||
|
||
setzt Anzahl der Zeilen pro Seite; Einstellung:
|
||
&66 lines oder &12 "long
|
||
|
||
|
||
schaltet auf amerikanischen Zeichensatz.
|
||
|
||
schaltet auf deutschen Zeichensatz.
|
||
|
||
Voreinstellung des Druckers auf 'normale' Werte; wird beim
|
||
Einschalten mit PRINT ausgef<EFBFBD>hrt.
|
||
\ *** Block No. 21 Hexblock 15
|
||
\ Umlaute bp 12oct86
|
||
|
||
Auf diesem Screen werden die Umlaute aus dem IBM-(ATARI)-Zeichen
|
||
satz in DIN-Umlaute aus dem deutschen Zeichensatz gewandelt.
|
||
|
||
Wenn Sie einen IBM-kompatiblen Drucker benutzen, kann dieser
|
||
Screen mit \\ in der ersten Zeile wegkommentiert werden.
|
||
|
||
|
||
|
||
|
||
|
||
p! wird neu definiert. Daher brauchen die folgenden Worte p!
|
||
nicht zu „ndern, egal, ob mit oder ohne Umlautwandlung gearbei-
|
||
tet wird.
|
||
|
||
\ *** Block No. 22 Hexblock 16
|
||
\ Printer Output 10oct86we
|
||
|
||
aktuelle Druckerzeile und -spalte.
|
||
Routinen zur Druckerausgabe entspricht Befehl
|
||
ein Zeichen auf Drucker emit
|
||
CR und LF auf Drucker cr
|
||
ein Zeichen l”schen (?!) del
|
||
neue Seite page
|
||
Drucker auf Zeile und Spalte at
|
||
positionieren; wenn n”tig,
|
||
neue Seite.
|
||
Position feststellen at?
|
||
Zeichenkette ausgeben type
|
||
|
||
Damit sind die Worte f<EFBFBD>r eine eigene Output-Struktur vorhanden.
|
||
|
||
\ *** Block No. 23 Hexblock 17
|
||
\ Printer output 10oct86we
|
||
|
||
erzeugt die Output-Tabelle >printer.
|
||
|
||
Die folgenden Worte sind von FORTH aus zug„nglich.
|
||
|
||
schaltet Ausgabe auf Printer um. (Zur<75>ckschalten mit DISPLAY)
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
\ *** Block No. 24 Hexblock 18
|
||
\ Variables and Setup 10oct86we
|
||
|
||
Diese Worte sind nur im Printer-Vokabular enthalten.
|
||
|
||
Dieser Screen wird gedruckt, wenn es nichts besseres gibt.
|
||
|
||
Druckt die šberschrift der Seite pageno.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
\ *** Block No. 25 Hexblock 19
|
||
\ Print 2 screens across on a page 10oct86we
|
||
|
||
druckt nebeneinander die Zeilen line# der beiden Screens.
|
||
Die komplette Druck-Zeile wird erst in PAD aufbereitet.
|
||
|
||
|
||
|
||
|
||
|
||
formatierte Ausgabe der beiden Screens nebeneinander
|
||
mit fettgedruckten Screennummern. Druck erfolgt mit 17cpi, also
|
||
in komprimierter Schrift.
|
||
|
||
|
||
|
||
|
||
\ *** Block No. 26 Hexblock 1A
|
||
\ print 6 screens on a page 10oct86we
|
||
|
||
gibt eine Seite aus. Anordnung der Screens auf der Seite: 1 4
|
||
Wenn weniger als 6 Screens vorhanden sind, werden 2 5
|
||
L<EFBFBD>cken auf der rechten Seite mit dem Logo-Screen (0) 3 6
|
||
aufgef<EFBFBD>llt.
|
||
|
||
|
||
berechnet zu Screen n1 den Shadowscreen n2 (Kommentarscreen wie
|
||
dieser hier).
|
||
|
||
wie pageprint, aber anstelle der Screens 4, 5 und 6 werden die
|
||
Shadowscreens zu 1, 2 und 3 gedruckt.
|
||
|
||
|
||
|
||
\ *** Block No. 27 Hexblock 1B
|
||
\ Printing without Shadows b22oct86we
|
||
|
||
Die folgenden Definitionen stellen das Benutzer-Interface dar.
|
||
Daher sollen sie in FORTH gefunden werden.
|
||
|
||
PRINTERSEM ist ein Semaphor f<EFBFBD>r das Multitasking, der den Zugang
|
||
auf den Drucker f<EFBFBD>r die einzelnen Tasks regelt.
|
||
|
||
PTHRU gibt die Screens von from bis to aus.
|
||
Ausgabeger„t merken und Drucker einschalten. Multitasking wird,
|
||
sofern es den Drucker betrifft, gesperrt.
|
||
Die Screens werden mit pageprint ausgegeben.
|
||
|
||
|
||
wie oben, jedoch wird das komplette File gedruckt.
|
||
|
||
\ *** Block No. 28 Hexblock 1C
|
||
\ Printing with Shadows 10oct86we
|
||
|
||
wie pthru, aber mit Shadowscreens.
|
||
|
||
|
||
|
||
|
||
|
||
wie printall, aber mit Shadowscreens.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
\ *** Block No. 29 Hexblock 1D
|
||
\ Printerspool 10oct86we
|
||
|
||
Falls der Multitasker nicht vorhanden ist, wird abgebrochen.
|
||
|
||
Der Arbeitsbereich der Task wird erzeugt.
|
||
|
||
Mit diesem Wort wird das Drucken im Hintergrund gestartet.
|
||
Aufruf mit :
|
||
spool' listing
|
||
spool' printall
|
||
from to spool' pthru
|
||
from to spool' document
|
||
Vor (oder auch nach) dem Aufruf von spool' muž der Multitasker
|
||
mit multitask eingeschaltet werden.
|
||
|
||
|