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

  1. /*********************************************************************
  2.   STYLUS.cmd
  3.  *********************************************************************
  4.  
  5.    REXX-Script, um ASCII-Dateien 
  6.     - 1 spaltig in Schönschrift oder
  7.     - 2-spaltig in kleiner Schrift auszudrucken.
  8.  
  9.    This REXX-Script prints ASCII-Files on an Epson Stylus 
  10.    either nice in 1 colums or double columned in a very small font.
  11.  
  12.  
  13.   Unterstützte Druckeroptionen:
  14.     siehe Hilfe am Ende der Datei
  15.  
  16.  *** Anmerkungen: ***
  17.   * Beim Stylus sollte man im Setup-Modus als Standard-Codepage
  18.     die PC437 einstellen, damit der Drucker denselben Zeichensatz
  19.     wie der PC druckt.
  20.   * Dieses Skript wurde aus meinem FX80-PrettyPrinter abgeleitet, der
  21.     als fx80_2up.zip in gut sortierten BBS und OS/2 Servern gefunden
  22.     werden kann.
  23.  
  24.  *FOR THE ENGLISH-SPEAKING 'rest of the world':
  25.   There is no separate english version of this script. If you
  26.   make modifications to this, you can use the english version of
  27.   the companion-script fx80.cmd (which is named fx80.us) to get
  28.   a grip on what happens where.
  29.  
  30.  *********************************************************************
  31.  
  32.   Dieses REXX-Script ist FREEWARE. Benutzung und Anpassung ausdrücklich
  33.   erlaubt, solange u.a. CopyRight-Nachricht im Source verbleibt.
  34.  
  35.   Falls jemand Funktionalität hinzufügt, bitte ich darum, die modifizierte
  36.   Quelle zugeschickt mit einem kurzen Kommentar zugeschickt zu bekommen.
  37.   Adresse:  Ralf Grohmann, Winterlinger Weg 8, 70567 Stuttgart, Germany
  38.             oder per email: rgr@softpro.de
  39.  
  40.    (c) Ralf Grohmann 5/95
  41.  
  42.   Updates:
  43.    Version 1.0 - first release
  44.  *********************************************************************/
  45. ARG DATEI MODE opt1 opt2 opt3
  46.  
  47. say '**** ASCII-Drucker für Epson Stylus V 1.0           (c) 1995 Ralf Grohmann ****'
  48.  
  49. IF mode<>'STE' & mode<>'STX' & mode<>'STK' & mode <>'STS' & mode<>'SCR' then do
  50.     call help
  51.     EXIT
  52.     END
  53. IF datei='/h' | datei='/?' | datei='-?' | datei='-h' then do
  54.     call help
  55.     EXIT
  56.     END
  57.  
  58. IF lines(datei)=0 then do
  59.     say 'Fehler Datei <' datei '> nicht gefunden!'
  60.     EXIT
  61.     END
  62.  
  63. /* Parse Options */
  64. pagepause=no
  65. header=yes
  66. test=no
  67. opt1=left(opt1,2)
  68. opt2=left(opt2,2)
  69. opt3=left(opt3,2)
  70. if opt1='/P' | opt2='/P' | opt3='/P' then pagepause=yes
  71. if opt1='/T' | opt2='/T' | opt3='/T' then test=yes
  72. if opt1='/N' | opt2='/N' | opt3='/N' then header=no
  73.  
  74. /****  Druck-Parameter: *****
  75.   initstring : Initialisierungs-String für Ausgabemedium
  76.   sep:         Separator (Zwischen den Spalten, Breite:2)
  77.   cret:        Newline (Um eine neue Zeile zu beginnen)
  78.   ffeed:       FormFeed (Am Ende jeder Seite gesendet)
  79.   pglen:       Seitenlaenge
  80.   maxzl:       Spaltenbreite
  81.   pageno:      Anfangs-Seitennummer
  82.   protocol:    yes|no (ob eine Zustandsanzeige generiert werden soll)
  83.   dest:        Ziel der Ausgabe, 'prn:' oder 'stdout:' oder so
  84.   columns:     Anzahl Spalten pro Zeile, 1 oder 2
  85.   headin:      Eingangsstring Kopfzeile
  86.   headout:     Wird nach der Kopfzeile gedruckt
  87. */
  88. /* Einige allgemeine Einstellungen */
  89. esc = d2c(27)
  90. cret = D2C(13) D2C(10)
  91. ffeed = D2C(12)
  92. RESET = ESC || '@' /* Reset */
  93.  
  94. /*****  EPSON Stylus kleinst-modus ********/
  95. IF MODE='STX' THEN DO
  96. /* Reset - Font: Prestige -- Kleine Schrift -- 18/180 Pt Zeilenabstand -- linker Rand 5 */
  97. initstring=RESET||ESC||"k"||d2c(2)||ESC||"X"||d2c(18)||d2c(16)||d2c(0)||ESC || "3" || d2c(18)
  98. sep='  '
  99. pglen=105
  100. maxzl=79
  101. pageno=1
  102. protocol=YES
  103. columns=2
  104. headin=ESC || "-" || d2c(1) 
  105. headout=ESC || "-" || d2c(0)
  106. dest='prn:'
  107. END
  108.  
  109. /*****  EPSON Stylus kleinst-modus ********/
  110. IF MODE='STS' THEN DO
  111. initstring=RESET||ESC||"k"||d2c(2)||ESC||"g"||ESC || "3" || d2c(18)
  112. sep='  '
  113. pglen=105
  114. maxzl=59
  115. pageno=1
  116. protocol=YES
  117. columns=2
  118. headin=ESC || "q" || d2c(3)|| ESC || "-" || d2c(1) 
  119. headout=ESC || "q" || d2c(0) ||ESC || "-" || d2c(0)
  120. dest='prn:'
  121. END
  122.  
  123. /*****  EPSON Stylus kleiner Courier-modus aber 1spaltig********/
  124. IF MODE='STK' THEN DO
  125. initstring=RESET||ESC||"k"||d2c(2)||ESC||"g"||ESC || "3" || d2c(18)
  126. sep='  '
  127. pglen=106
  128. maxzl=120
  129. pageno=1
  130. protocol=YES
  131. columns=1
  132. headin=ESC || "q" || d2c(3)|| ESC || "-" || d2c(1) 
  133. headout=ESC || "q" || d2c(0) ||ESC || "-" || d2c(0)
  134. dest='prn:'
  135. END
  136.  
  137.  
  138. /*****  EPSON Stylus Schönschrift, 1spaltig *********/
  139. IF MODE='STE' THEN DO
  140. initstring=RESET||ESC||"k"||d2c(0)||ESC||"M"||ESC || "0"
  141. sep=''
  142. pglen=86
  143. maxzl=95
  144. pageno=1
  145. protocol=YES
  146. columns=1
  147. headin=ESC||"k"||d2c(1)||ESC || "q" || d2c(3)|| ESC || "-" || d2c(1) 
  148. headout=ESC||"k"||d2c(0)||ESC || "q" || d2c(0) ||ESC || "-" || d2c(0)
  149. dest='prn:'
  150. END
  151.  
  152.  
  153. /***** Preview auf Screen ******/
  154. IF mode='SCR' THEN DO
  155. initstring='';
  156. sep='  '
  157. ffeed = '************---- NAECHSTE SEITE -----****************'
  158. pglen=10
  159. maxzl=38
  160. pageno=1
  161. protocol=no
  162. columns=2
  163. headin=""
  164. headout=""
  165. dest='stdout:'
  166. END
  167.  
  168.  
  169. /* HeaderString */
  170. if columns=2 then do
  171. hstr='Ausdruck Datei <' right(datei,min(length(datei),30)) '> am ' DATE(E)
  172. hstr=headin||left(hstr,maxzl*2-10) ' Seite: '
  173. /*  hstr2=right('',maxzl*2+length(sep),'-') */
  174. end
  175. else do
  176. hstr='Ausdruck Datei <' right(datei,min(length(datei),30)) '> am ' DATE(E)
  177. hstr=headin||left(hstr,maxzl-12) ' Seite: '
  178. /* hstr2=right('',maxzl,'-') */
  179. end
  180.  
  181. /* Drucker initialisieren */
  182. IF test=no THEN
  183.    r=charout(dest,initstring);
  184.  
  185. /***** EINLESEN **********/
  186. i=1
  187. side=0
  188. aktzl=0
  189. DO WHILE lines(datei)
  190.   instring=LINEIN(datei)
  191.   if length(instring)>maxzl then
  192.        in.i.side=LEFT(instring,maxzl-1) || '>'
  193.   else in.i.side=LEFT(instring,maxzl)
  194.   aktzl=aktzl+1
  195.   i=i+1
  196.   IF i=pglen+1 & side=0 THEN DO
  197.           side=1
  198.           if columns=1 then DO
  199.             CALL printside
  200.             side=0
  201.             DROP in.
  202.             END
  203.           i=1
  204.           END
  205.   IF i=pglen+1 & side=1 THEN DO
  206.           CALL printside
  207.           side=0
  208.           i=1
  209.           DROP in.
  210.           END
  211. END /* DO WHILE LINES */
  212.  
  213. /* DEBUG: SAY 'xxxx' i side columns */
  214. if i >= 1 THEN DO
  215.           CALL printside
  216.           DROP in.
  217.           END
  218.  
  219. if test=no then SAY 'Datei ' datei ' gedruckt (' aktzl ' Zeilen, ' pageno-1' Seiten ).'
  220.  else SAY 'Datei ' datei ' getestet (' aktzl ' Zeilen, ' pageno-1' Seite(n) ).'
  221. r=out('')
  222. if test=no then
  223.    r=charout(dest,RESET);
  224. EXIT
  225.  
  226.  
  227. /*********************************************************************/
  228. /* Prozedur um eine Seite zu drucken */
  229. /* printside: PROCEDURE EXPOSE pglen in. sep cret */
  230. printside:
  231. /* DEBUG say '***** i= ' i ' side= ' side */
  232.  
  233. IF protocol=yes THEN say 'Drucke Seite ' pageno
  234. IF header=yes THEN
  235.   IF test=no THEN
  236.     r=charout(dest,hstr || format(pageno,3) || cret|| headout) /*  || hstr2 ) */
  237. pageno=pageno+1
  238. if columns=2 then DO pr_t = 1 TO pglen BY 1
  239.   DROP temp
  240.   IF side=0 & i > pr_t THEN temp=in.pr_t.0 || sep
  241.   IF side=0 & i <= pr_t THEN leave
  242.   IF side=1 & i > pr_t THEN temp=in.pr_t.0 || sep || in.pr_t.1
  243.   IF side=1 & i <= pr_t THEN temp=in.pr_t.0 || sep
  244.   r=out(temp)
  245.  END
  246. ELSE DO pr_t = 1 TO pglen BY 1
  247.  if pr_t < i then r=out(in.pr_t.0)
  248.  END
  249. r=out(ffeed)
  250. if pagepause=yes then do
  251.    say 'Return für nächste Seite'
  252.    parse pull arg
  253.    end
  254. RETURN
  255.  
  256. /*********************************************************************/
  257. /* Prozedur zum Ausdrucken
  258.    Ersetzt Sonderzeichen < 32 Hex durch BLANKS
  259. */
  260. out:
  261. PARSE ARG string
  262.  
  263. string=TRANSLATE(string,' ',XRANGE('00'x,'1F'x))
  264.  
  265. if test=no then do
  266.     res=CHAROUT(dest , string || cret)
  267.     if res <> 0 THEN
  268.         SAY 'Fehler! ' res ' Zeichen konnten nicht ausgegeben werden.'
  269.     END
  270. RETURN 0
  271.  
  272. /*********************************************************************/
  273. /* Hilfe-Ausgabe */
  274. help: PROCEDURE
  275. SAY
  276. SAY 'Aufruf: stylus <Name-of-file-to-be-printed> <mode> [opts]'
  277. SAY
  278. SAY 'mode: STS|STE|SCR  (Ausgabemedium angeben)'
  279.  
  280. SAY '       STE - 1spaltig, RomanFont, 95 Zeichen auf 85 Zeilen'
  281. SAY '       STK - 1spaltig, Courier, 120 Zeichen auf 106 Zeilen'
  282. SAY '       STS - 2spaltig, 2 mal 59 Zeichen auf 106 Zeilen'
  283. SAY '       STX - 2spaltig, 2 mal 79 Zeichen auf 105 Zeilen'
  284. SAY '       SCR - Testausgabe auf Bildschirm'
  285. SAY 'opts:  /Test - Ausgabe nicht ausführen.'
  286. SAY '       /Pagepause - Warten nach jeder Seite?'
  287. SAY '       /Noheader - Drucke ohne Seitenkopf (Dateiname etc)'
  288. SAY '    '
  289. SAY '    (Dieses Programm druckt nach PRN:)'
  290. RETURN