home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 19 Printer / 19-Printer.zip / fx80_sty.zip / fx / fx80.cmd next >
OS/2 REXX Batch file  |  1995-04-30  |  8KB  |  272 lines

  1. /*********************************************************************
  2.   FX80.cmd
  3.  *********************************************************************
  4.  
  5.    This is the GERMAN VERSION of FX80.cmd
  6.  
  7.    REXX-Script, um deutsche ASCII-Dateien 2-spaltig in kleiner
  8.    Schrift auszudrucken.
  9.  
  10.   Unterstützte Druckeroptionen:
  11.     SCR -- Bildschirm, 10 Zeile/Seite, Spaltenbreite 30
  12.     FXS -- FX80, 150 Zeilen/Seite, Spaltebreite 79
  13.     FXE -- FX80, 1-Spaltig, Elite
  14.  
  15.   Der OS/2 Druckerspooler sollte ausgeschaltet sein, es kann aber auch
  16.   sein, dass es mit dem Spooler funktioniert.
  17.  
  18.  *********************************************************************
  19.  
  20.   Dieses REXX-Script ist FREEWARE. Benutzung und Anpassung ausdrücklich
  21.   erlaubt, solange u.a. CopyRight-Nachricht im Source verbleibt.
  22.  
  23.   Falls jemand Funktionalität hinzufügt, bitte ich darum, die modifizierte
  24.   Quelle zugeschickt mit einem kurzen Kommentar zugeschickt zu bekommen.
  25.   Adresse:  Ralf Grohmann, Winterlinger Weg 8, 70567 Stuttgart, Germany
  26.             oder per email: ralf@ubka.uni-karlsruhe.de
  27.  
  28.    (c) Ralf Grohmann 8/93
  29.  
  30.   Updates: 
  31.    1/94 - Behandlung von Sonderzeichen und Umlauten
  32.  *********************************************************************/
  33. ARG DATEI MODE opt1 opt2 opt3
  34.  
  35. say '**** ASCII-Datei - Drucker V 1.0                   (c) 1993 Ralf Grohmann ****'
  36.  
  37. IF mode<>'FXS' & mode <>'FXE' & mode<>'SCR' then do
  38.     call help
  39.     EXIT
  40.     END
  41. IF datei='/h' | datei='/?' | datei='-?' | datei='-h' then do
  42.     call help
  43.     EXIT
  44.     END
  45.  
  46. IF lines(datei)=0 then do
  47.     say 'Fehler Datei <' datei '> nicht gefunden!'
  48.     EXIT
  49.     END
  50.  
  51. /* Parse Options */
  52. pagepause=no
  53. header=yes
  54. test=no
  55. opt1=left(opt1,2)
  56. opt2=left(opt2,2)
  57. opt3=left(opt3,2)
  58. if opt1='/P' | opt2='/P' | opt3='/P' then pagepause=yes
  59. if opt1='/T' | opt2='/T' | opt3='/T' then test=yes
  60. if opt1='/N' | opt2='/N' | opt3='/N' then header=no
  61.  
  62.  
  63.  
  64. /****  Druck-Parameter: *****
  65.   initstring : Initialisierungs-String für Ausgabemedium (binaer)
  66.   sep:         Separator (Zwischen den Spalten, Breite:2)
  67.   cret:        Newline (Um eine neue Zeile zu beginnen)
  68.   ffeed:       FormFeed (Am Ende jeder Seite gesendet)
  69.   pglen:       Seitenlaenge
  70.   maxzl:       Spaltenbreite
  71.   pageno:      Anfangs-Seitennummer
  72.   protocol:    yes|no (ob eine Zustandsanzeige generiert werden soll)
  73.   dest:        Ziel der Ausgabe, 'prn:' oder 'stdout:' oder so
  74.   dotrans:     yes|no (Ob eine Zeichenumsetzung durchgeführt werden soll)
  75.   columns:     Anzahl Spalten pro Zeile, 1 oder 2
  76. */
  77.  
  78. IF MODE='FXS' THEN DO
  79. /*****  EPSON FX80+ kleinst-modus ********
  80.    Printer auf Deutsch, kleine Schrift, kein Rand schalten.
  81.      ESC @        Reset
  82.      ESC R (2)    Deutsch
  83.      ESC 6        allow Chars > 127
  84.      ESC (15)     Schmalschrift
  85.      ESC M        Elite
  86.      ESC 3 (15)   15/216 inch line spacing
  87.      ESC S 0      Superscript
  88.      ESC Q (160)  Max Rechter Rand
  89. */
  90. initstring='@RMS0Qá'
  91. sep='  '
  92. cret = D2C(13) D2C(10)
  93. ffeed = D2C(12)
  94. pglen=150
  95. maxzl=79
  96. pageno=1
  97. protocol=YES
  98. dest='prn:'
  99. dotrans=yes
  100. columns=2
  101. END
  102.  
  103. IF MODE='FXE' THEN DO
  104. /*****  EPSON FX80+ Elite, 1spaltig ********
  105.    Printer auf Deutsch, Elite, Rand 5 schalten.
  106.      ESC @        Reset
  107.      ESC R (2)    Deutsch
  108.      ESC 6        allow Chars > 127
  109.      ESC M        Elite
  110.      ESC l (5)    Linker Rand 5
  111.      ESC 0        Zeilenabstand 1/8 Zoll
  112. */
  113. initstring='@RMl'
  114. sep=''
  115. cret = D2C(13) D2C(10)
  116. ffeed = D2C(12)
  117. /* 85 Zeilen sind für 12" Endlos-Papier */
  118. pglen=85
  119. maxzl=90
  120. pageno=1
  121. protocol=YES
  122. dest='prn:'
  123. dotrans=yes
  124. columns=1
  125. END
  126.  
  127. /***** Preview auf Screen ******/
  128. IF mode='SCR' THEN DO
  129. initstring='';
  130. sep='  '
  131. cret = D2C(13) || D2C(10);
  132. ffeed = '************---- NAECHSTE SEITE -----****************'
  133. pglen=10
  134. maxzl=38
  135. pageno=1
  136. protocol=no
  137. dest='stdout:'
  138. dotrans=no
  139. columns=2
  140. END
  141.  
  142.  
  143. /* HeaderString */
  144. if columns=2 then do
  145. hstr='Ausdruck Datei <' right(datei,min(length(datei),30)) '> am ' DATE(E)
  146. hstr=left(hstr,maxzl*2-10) ' Seite: '
  147. hstr2=right('',maxzl*2+length(sep),'-')
  148. end
  149. else do
  150. hstr='Ausdruck Datei <' right(datei,min(length(datei),30)) '> am ' DATE(E)
  151. hstr=left(hstr,maxzl-12) ' Seite: '
  152. hstr2=right('',maxzl,'-')
  153. end
  154.  
  155. /* Drucker initialisieren */
  156. r=out(initstring);
  157.  
  158. /***** EINLESEN **********/
  159. i=1
  160. side=0
  161. aktzl=0
  162. DO WHILE lines(datei)
  163.   instring=LINEIN(datei)
  164.   if length(instring)>maxzl then
  165.        in.i.side=LEFT(instring,maxzl-1) || '>'
  166.   else in.i.side=LEFT(instring,maxzl)
  167.   aktzl=aktzl+1
  168.   i=i+1
  169.   IF i=pglen+1 & side=0 THEN DO
  170.           side=1
  171.           if columns=1 then DO
  172.             CALL printside
  173.             side=0
  174.             DROP in.
  175.             END
  176.           i=1
  177.           END
  178.   IF i=pglen+1 & side=1 THEN DO
  179.           CALL printside
  180.           side=0
  181.           i=1
  182.           DROP in.
  183.           END
  184. END /* DO WHILE LINES */
  185.  
  186. /* DEBUG: SAY 'xxxx' i side columns */
  187. if i >= 1 THEN DO
  188.           CALL printside
  189.           DROP in.
  190.           END
  191.  
  192. if test=no then SAY 'Datei ' datei ' gedruckt (' aktzl ' Zeilen, ' pageno-1' Seiten ).'
  193.  else SAY 'Datei ' datei ' getestet (' aktzl ' Zeilen, ' pageno-1' Seite(n) ).'
  194. r=out('')
  195. EXIT
  196.  
  197.  
  198. /*********************************************************************/
  199. /* Prozedur um eine Seite zu drucken */
  200. /* printside: PROCEDURE EXPOSE pglen in. sep cret */
  201. printside:
  202. /* DEBUG say '***** i= ' i ' side= ' side */
  203.  
  204. IF protocol=yes THEN say 'Drucke Seite ' pageno
  205. IF header=yes THEN r=out(hstr || format(pageno,3) || cret || hstr2 )
  206. pageno=pageno+1
  207. if columns=2 then DO pr_t = 1 TO pglen BY 1
  208.   DROP temp
  209.   IF side=0 & i > pr_t THEN temp=in.pr_t.0 || sep
  210.   IF side=0 & i <= pr_t THEN leave
  211.   IF side=1 & i > pr_t THEN temp=in.pr_t.0 || sep || in.pr_t.1
  212.   IF side=1 & i <= pr_t THEN temp=in.pr_t.0 || sep
  213.   r=out(temp)
  214.  END
  215. ELSE DO pr_t = 1 TO pglen BY 1
  216.  if pr_t < i then r=out(in.pr_t.0)
  217.  END
  218. r=out(ffeed)
  219. if pagepause=yes then do
  220.    say 'Return für nächste Seite'
  221.    parse pull arg
  222.    end
  223. RETURN
  224.  
  225. /*********************************************************************/
  226. /* Prozedur zum Ausdrucken
  227.    Ruft evtl. vorher die Zeichenumsetzungsroutine auf */
  228. out:
  229. PARSE ARG string
  230.  
  231. string=TRANSLATE(string,' ',XRANGE('00'x,'1F'x))
  232.  
  233. if dotrans=yes then outstring = deutsch(string) || cret
  234.    else outstring = string || cret
  235. if test=no then do
  236.     res=CHAROUT(dest , outstring )
  237.     if res <> 0 THEN
  238.         SAY 'Fehler! ' res ' Zeichen konnten nicht ausgegeben werden.'
  239.     END
  240. RETURN 0
  241.  
  242. /*********************************************************************/
  243. /* Setze alle Spezialzeichen um */
  244. deutsch: PROCEDURE
  245. parse arg str
  246. /* Syntax Translate(str, to, from) */
  247. str=TRANSLATE(str,'/','\') /* Da kein Backslash im FX-Zeichensatz */
  248. str=TRANSLATE(str,'{','ä')
  249. str=TRANSLATE(str,'|','ö')
  250. str=TRANSLATE(str,'}','ü')
  251. str=TRANSLATE(str,'[','Ä')
  252. str=TRANSLATE(str,'\','Ö')
  253. str=TRANSLATE(str,']','Ü')
  254. str=TRANSLATE(str,'~','ß')
  255.  
  256. RETURN str
  257.  
  258. /*********************************************************************/
  259. /* Hilfe-Ausgabe */
  260. help: PROCEDURE
  261. SAY
  262. SAY 'Aufruf: fx80 <Name-of-file-to-be-printed> <mode> [opts]'
  263. SAY
  264. SAY 'mode: FXS|FXE|SCR  (Ausgabemedium angeben)'
  265. SAY '       FXS - Kleinstschrift auf FX'
  266. SAY '       FXE - 1spaltig, Elite auf FX'
  267. SAY '       SCR - Testausgabe auf Bildschirm'
  268. SAY 'opts:  /Test - Ausgabe nicht ausführen.'
  269. SAY '       /Pagepause - Warten nach jeder Seite?'
  270. SAY '       /Noheader - Drucke ohne Seitenkopf (Dateiname etc)'
  271. RETURN
  272.