home *** CD-ROM | disk | FTP | other *** search
/ Monster Media 1994 #1 / monster.zip / monster / PRINT / FX80_1.ZIP / FX80.CMD next >
OS/2 REXX Batch file  |  1994-01-19  |  7KB  |  261 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, 1/94
  29.  *********************************************************************/
  30. ARG DATEI MODE opt1 opt2
  31.  
  32. say '**** ASCII-Datei - Drucker V 1.0                   (c) 1993 Ralf Grohmann ****'
  33.  
  34. IF mode<>'FXS' & mode <>'FXE' & mode<>'SCR' then do
  35.     call help
  36.     EXIT
  37.     END
  38. IF datei='/h' | datei='/?' | datei='-?' | datei='-h' then do
  39.     call help
  40.     EXIT
  41.     END
  42.  
  43. IF lines(datei)=0 then do
  44.     say 'Fehler Datei <' datei '> nicht gefunden!'
  45.     EXIT
  46.     END
  47.  
  48. /* Parse Options */
  49. pagepause=no
  50. test=no
  51. opt1=left(opt1,2)
  52. opt2=left(opt2,2)
  53. if opt1='/P' | opt2='/P' then pagepause=yes
  54. if opt1='/T' | opt2='/T' then test=yes
  55.  
  56.  
  57.  
  58. /****  Druck-Parameter: *****
  59.   initstring : Initialisierungs-String für Ausgabemedium (binaer)
  60.   sep:         Separator (Zwischen den Spalten, Breite:2)
  61.   cret:        Newline (Um eine neue Zeile zu beginnen)
  62.   ffeed:       FormFeed (Am Ende jeder Seite gesendet)
  63.   pglen:       Seitenlaenge
  64.   maxzl:       Spaltenbreite
  65.   pageno:      Anfangs-Seitennummer
  66.   protocol:    yes|no (ob eine Zustandsanzeige generiert werden soll)
  67.   dest:        Ziel der Ausgabe, 'prn:' oder 'stdout:' oder so
  68.   dotrans:     yes|no (Ob eine Zeichenumsetzung durchgeführt werden soll)
  69.   columns:     Anzahl Spalten pro Zeile, 1 oder 2
  70. */
  71.  
  72. IF MODE='FXS' THEN DO
  73. /*****  EPSON FX80+ kleinst-modus ********
  74.    Printer auf Deutsch, kleine Schrift, kein Rand schalten.
  75.      ESC @        Reset
  76.      ESC R (2)    Deutsch
  77.      ESC 6        allow Chars > 127
  78.      ESC (15)     Schmalschrift
  79.      ESC M        Elite
  80.      ESC 3 (15)   15/216 inch line spacing
  81.      ESC S 0      Superscript
  82.      ESC Q (160)  Max Rechter Rand
  83. */
  84. initstring='@RMS0Qá'
  85. sep='  '
  86. cret = D2C(13) D2C(10)
  87. ffeed = D2C(12)
  88. pglen=150
  89. maxzl=79
  90. pageno=1
  91. protocol=YES
  92. dest='prn:'
  93. dotrans=yes
  94. columns=2
  95. END
  96.  
  97. IF MODE='FXE' THEN DO
  98. /*****  EPSON FX80+ Elite, 1spaltig ********
  99.    Printer auf Deutsch, Elite, Rand 5 schalten.
  100.      ESC @        Reset
  101.      ESC R (2)    Deutsch
  102.      ESC 6        allow Chars > 127
  103.      ESC M        Elite
  104.      ESC l (5)    Linker Rand 5
  105.      ESC 0        Zeilenabstand 1/8 Zoll
  106. */
  107. initstring='@RMl'
  108. sep=''
  109. cret = D2C(13) D2C(10)
  110. ffeed = D2C(12)
  111. /* 85 Zeilen sind für 12" Endlos-Papier */
  112. pglen=85
  113. maxzl=90
  114. pageno=1
  115. protocol=YES
  116. dest='prn:'
  117. dotrans=yes
  118. columns=1
  119. END
  120.  
  121. /***** Preview auf Screen ******/
  122. IF mode='SCR' THEN DO
  123. initstring='';
  124. sep='  '
  125. cret = D2C(13) || D2C(10);
  126. ffeed = '************---- NAECHSTE SEITE -----****************'
  127. pglen=10
  128. maxzl=38
  129. pageno=1
  130. protocol=no
  131. dest='stdout:'
  132. dotrans=no
  133. columns=2
  134. END
  135.  
  136.  
  137. /* HeaderString */
  138. if columns=2 then do
  139. hstr='Ausdruck Datei <' right(datei,min(length(datei),30)) '> am ' DATE(E)
  140. hstr=left(hstr,maxzl*2-10) ' Seite: '
  141. hstr2=right('',maxzl*2+length(sep),'-')
  142. end
  143. else do
  144. hstr='Ausdruck Datei <' right(datei,min(length(datei),30)) '> am ' DATE(E)
  145. hstr=left(hstr,maxzl-12) ' Seite: '
  146. hstr2=right('',maxzl,'-')
  147. end
  148.  
  149. /* Drucker initialisieren */
  150. r=out(initstring);
  151.  
  152. /***** EINLESEN **********/
  153. i=1
  154. side=0
  155. aktzl=0
  156. DO WHILE lines(datei)
  157.   instring=LINEIN(datei)
  158.   if length(instring)>maxzl then
  159.        in.i.side=LEFT(instring,maxzl-1) || '>'
  160.   else in.i.side=LEFT(instring,maxzl)
  161.   aktzl=aktzl+1
  162.   i=i+1
  163.   IF i=pglen+1 & side=0 THEN DO
  164.           side=1
  165.           if columns=1 then DO
  166.             CALL printside
  167.             side=0
  168.             DROP in.
  169.             END
  170.           i=1
  171.           END
  172.   IF i=pglen+1 & side=1 THEN DO
  173.           CALL printside
  174.           side=0
  175.           i=1
  176.           DROP in.
  177.           END
  178. END /* DO WHILE LINES */
  179.  
  180. /* DEBUG: SAY 'xxxx' i side columns */
  181. if i >= 1 THEN DO
  182.           CALL printside
  183.           DROP in.
  184.           END
  185.  
  186. if test=no then SAY 'Datei ' datei ' gedruckt (' aktzl ' Zeilen, ' pageno-1' Seiten ).'
  187.  else SAY 'Datei ' datei ' getestet (' aktzl ' Zeilen, ' pageno-1' Seite(n) ).'
  188. r=out('')
  189. EXIT
  190.  
  191.  
  192. /*********************************************************************/
  193. /* Prozedur um eine Seite zu drucken */
  194. /* printside: PROCEDURE EXPOSE pglen in. sep cret */
  195. printside:
  196. /* DEBUG say '***** i= ' i ' side= ' side */
  197.  
  198. IF protocol=yes THEN say 'Drucke Seite ' pageno
  199. r=out(hstr || format(pageno,3) || cret || hstr2 )
  200. pageno=pageno+1
  201. if columns=2 then DO pr_t = 1 TO pglen BY 1
  202.   DROP temp
  203.   IF side=0 & i > pr_t THEN temp=in.pr_t.0 || sep
  204.   IF side=0 & i <= pr_t THEN leave
  205.   IF side=1 & i > pr_t THEN temp=in.pr_t.0 || sep || in.pr_t.1
  206.   IF side=1 & i <= pr_t THEN temp=in.pr_t.0 || sep
  207.   r=out(temp)
  208.  END
  209. ELSE DO pr_t = 1 TO pglen BY 1
  210.  if pr_t < i then r=out(in.pr_t.0)
  211.  END
  212. r=out(ffeed)
  213. if pagepause=yes then do
  214.    say 'Return für nächste Seite'
  215.    parse pull arg
  216.    end
  217. RETURN
  218.  
  219. /*********************************************************************/
  220. /* Prozedur zum Ausdrucken
  221.    Ruft evtl. vorher die Zeichenumsetzungsroutine auf */
  222. out:
  223. PARSE ARG string
  224.  
  225. if dotrans=yes then outstring = deutsch(string) || cret
  226.    else outstring = string || cret
  227. if test=no then do
  228.     res=CHAROUT(dest , outstring )
  229.     if res <> 0 THEN
  230.         SAY 'Fehler! ' res ' Zeichen konnten nicht ausgegeben werden.'
  231.     END
  232. RETURN 0
  233.  
  234. /*********************************************************************/
  235. /* Setze alle Spezialzeichen um */
  236. deutsch: PROCEDURE
  237. parse arg str
  238. /* Syntax Translate(str, to, from) */
  239. str=TRANSLATE(str,'{','ä')
  240. str=TRANSLATE(str,'|','ö')
  241. str=TRANSLATE(str,'}','ü')
  242. str=TRANSLATE(str,'[','Ä')
  243. str=TRANSLATE(str,'\','Ö')
  244. str=TRANSLATE(str,']','Ü')
  245. str=TRANSLATE(str,'~','ß')
  246. RETURN str
  247.  
  248. /*********************************************************************/
  249. /* Hilfe-Ausgabe */
  250. help: PROCEDURE
  251. SAY
  252. SAY 'Aufruf: fx80 <Name-of-file-to-be-printed> <mode> [opts]'
  253. SAY
  254. SAY 'mode: FXS|FXE|SCR  (Ausgabemedium angeben)'
  255. SAY '       FXS - Kleinstschrift auf FX'
  256. SAY '       FXE - 1spaltig, Elite auf FX'
  257. SAY '       SCR - Testausgabe auf Bildschirm'
  258. SAY 'opts:  /Test - Ausgabe nicht ausführen.'
  259. SAY '       /Pagepause  - Warten nach jeder Seite?'
  260. RETURN
  261.