home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Professional
/
OS2PRO194.ISO
/
os2
/
print
/
fx80
/
fx80ger.cmd
< prev
next >
Wrap
OS/2 REXX Batch file
|
1994-01-19
|
7KB
|
261 lines
/*********************************************************************
FX80.cmd
*********************************************************************
This is the GERMAN VERSION of FX80.cmd
REXX-Script, um deutsche ASCII-Dateien 2-spaltig in kleiner
Schrift auszudrucken.
Unterstützte Druckeroptionen:
SCR -- Bildschirm, 10 Zeile/Seite, Spaltenbreite 30
FXS -- FX80, 150 Zeilen/Seite, Spaltebreite 79
FXE -- FX80, 1-Spaltig, Elite
Der OS/2 Druckerspooler sollte ausgeschaltet sein, es kann aber auch
sein, dass es mit dem Spooler funktioniert.
*********************************************************************
Dieses REXX-Script ist FREEWARE. Benutzung und Anpassung ausdrücklich
erlaubt, solange u.a. CopyRight-Nachricht im Source verbleibt.
Falls jemand Funktionalität hinzufügt, bitte ich darum, die modifizierte
Quelle zugeschickt mit einem kurzen Kommentar zugeschickt zu bekommen.
Adresse: Ralf Grohmann, Winterlinger Weg 8, 70567 Stuttgart, Germany
oder per email: ralf@ubka.uni-karlsruhe.de
(c) Ralf Grohmann 8/93, 1/94
*********************************************************************/
ARG DATEI MODE opt1 opt2
say '**** ASCII-Datei - Drucker V 1.0 (c) 1993 Ralf Grohmann ****'
IF mode<>'FXS' & mode <>'FXE' & mode<>'SCR' then do
call help
EXIT
END
IF datei='/h' | datei='/?' | datei='-?' | datei='-h' then do
call help
EXIT
END
IF lines(datei)=0 then do
say 'Fehler Datei <' datei '> nicht gefunden!'
EXIT
END
/* Parse Options */
pagepause=no
test=no
opt1=left(opt1,2)
opt2=left(opt2,2)
if opt1='/P' | opt2='/P' then pagepause=yes
if opt1='/T' | opt2='/T' then test=yes
/**** Druck-Parameter: *****
initstring : Initialisierungs-String für Ausgabemedium (binaer)
sep: Separator (Zwischen den Spalten, Breite:2)
cret: Newline (Um eine neue Zeile zu beginnen)
ffeed: FormFeed (Am Ende jeder Seite gesendet)
pglen: Seitenlaenge
maxzl: Spaltenbreite
pageno: Anfangs-Seitennummer
protocol: yes|no (ob eine Zustandsanzeige generiert werden soll)
dest: Ziel der Ausgabe, 'prn:' oder 'stdout:' oder so
dotrans: yes|no (Ob eine Zeichenumsetzung durchgeführt werden soll)
columns: Anzahl Spalten pro Zeile, 1 oder 2
*/
IF MODE='FXS' THEN DO
/***** EPSON FX80+ kleinst-modus ********
Printer auf Deutsch, kleine Schrift, kein Rand schalten.
ESC @ Reset
ESC R (2) Deutsch
ESC 6 allow Chars > 127
ESC (15) Schmalschrift
ESC M Elite
ESC 3 (15) 15/216 inch line spacing
ESC S 0 Superscript
ESC Q (160) Max Rechter Rand
*/
initstring='@RMS0Qá'
sep=' '
cret = D2C(13) D2C(10)
ffeed = D2C(12)
pglen=150
maxzl=79
pageno=1
protocol=YES
dest='prn:'
dotrans=yes
columns=2
END
IF MODE='FXE' THEN DO
/***** EPSON FX80+ Elite, 1spaltig ********
Printer auf Deutsch, Elite, Rand 5 schalten.
ESC @ Reset
ESC R (2) Deutsch
ESC 6 allow Chars > 127
ESC M Elite
ESC l (5) Linker Rand 5
ESC 0 Zeilenabstand 1/8 Zoll
*/
initstring='@RMl'
sep=''
cret = D2C(13) D2C(10)
ffeed = D2C(12)
/* 85 Zeilen sind für 12" Endlos-Papier */
pglen=85
maxzl=90
pageno=1
protocol=YES
dest='prn:'
dotrans=yes
columns=1
END
/***** Preview auf Screen ******/
IF mode='SCR' THEN DO
initstring='';
sep=' '
cret = D2C(13) || D2C(10);
ffeed = '************---- NAECHSTE SEITE -----****************'
pglen=10
maxzl=38
pageno=1
protocol=no
dest='stdout:'
dotrans=no
columns=2
END
/* HeaderString */
if columns=2 then do
hstr='Ausdruck Datei <' right(datei,min(length(datei),30)) '> am ' DATE(E)
hstr=left(hstr,maxzl*2-10) ' Seite: '
hstr2=right('',maxzl*2+length(sep),'-')
end
else do
hstr='Ausdruck Datei <' right(datei,min(length(datei),30)) '> am ' DATE(E)
hstr=left(hstr,maxzl-12) ' Seite: '
hstr2=right('',maxzl,'-')
end
/* Drucker initialisieren */
r=out(initstring);
/***** EINLESEN **********/
i=1
side=0
aktzl=0
DO WHILE lines(datei)
instring=LINEIN(datei)
if length(instring)>maxzl then
in.i.side=LEFT(instring,maxzl-1) || '>'
else in.i.side=LEFT(instring,maxzl)
aktzl=aktzl+1
i=i+1
IF i=pglen+1 & side=0 THEN DO
side=1
if columns=1 then DO
CALL printside
side=0
DROP in.
END
i=1
END
IF i=pglen+1 & side=1 THEN DO
CALL printside
side=0
i=1
DROP in.
END
END /* DO WHILE LINES */
/* DEBUG: SAY 'xxxx' i side columns */
if i >= 1 THEN DO
CALL printside
DROP in.
END
if test=no then SAY 'Datei ' datei ' gedruckt (' aktzl ' Zeilen, ' pageno-1' Seiten ).'
else SAY 'Datei ' datei ' getestet (' aktzl ' Zeilen, ' pageno-1' Seite(n) ).'
r=out('')
EXIT
/*********************************************************************/
/* Prozedur um eine Seite zu drucken */
/* printside: PROCEDURE EXPOSE pglen in. sep cret */
printside:
/* DEBUG say '***** i= ' i ' side= ' side */
IF protocol=yes THEN say 'Drucke Seite ' pageno
r=out(hstr || format(pageno,3) || cret || hstr2 )
pageno=pageno+1
if columns=2 then DO pr_t = 1 TO pglen BY 1
DROP temp
IF side=0 & i > pr_t THEN temp=in.pr_t.0 || sep
IF side=0 & i <= pr_t THEN leave
IF side=1 & i > pr_t THEN temp=in.pr_t.0 || sep || in.pr_t.1
IF side=1 & i <= pr_t THEN temp=in.pr_t.0 || sep
r=out(temp)
END
ELSE DO pr_t = 1 TO pglen BY 1
if pr_t < i then r=out(in.pr_t.0)
END
r=out(ffeed)
if pagepause=yes then do
say 'Return für nächste Seite'
parse pull arg
end
RETURN
/*********************************************************************/
/* Prozedur zum Ausdrucken
Ruft evtl. vorher die Zeichenumsetzungsroutine auf */
out:
PARSE ARG string
if dotrans=yes then outstring = deutsch(string) || cret
else outstring = string || cret
if test=no then do
res=CHAROUT(dest , outstring )
if res <> 0 THEN
SAY 'Fehler! ' res ' Zeichen konnten nicht ausgegeben werden.'
END
RETURN 0
/*********************************************************************/
/* Setze alle Spezialzeichen um */
deutsch: PROCEDURE
parse arg str
/* Syntax Translate(str, to, from) */
str=TRANSLATE(str,'{','ä')
str=TRANSLATE(str,'|','ö')
str=TRANSLATE(str,'}','ü')
str=TRANSLATE(str,'[','Ä')
str=TRANSLATE(str,'\','Ö')
str=TRANSLATE(str,']','Ü')
str=TRANSLATE(str,'~','ß')
RETURN str
/*********************************************************************/
/* Hilfe-Ausgabe */
help: PROCEDURE
SAY
SAY 'Aufruf: fx80 <Name-of-file-to-be-printed> <mode> [opts]'
SAY
SAY 'mode: FXS|FXE|SCR (Ausgabemedium angeben)'
SAY ' FXS - Kleinstschrift auf FX'
SAY ' FXE - 1spaltig, Elite auf FX'
SAY ' SCR - Testausgabe auf Bildschirm'
SAY 'opts: /Test - Ausgabe nicht ausführen.'
SAY ' /Pagepause - Warten nach jeder Seite?'
RETURN