home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1992 #19 / NN_1992_19.iso / spool / comp / os / vms / 13996 < prev    next >
Encoding:
Internet Message Format  |  1992-08-23  |  33.4 KB

  1. Path: sparky!uunet!cis.ohio-state.edu!ucbvax!PFC.MIT.EDU!MRL
  2. From: MRL@PFC.MIT.EDU (MARK LONDON)
  3. Newsgroups: comp.os.vms
  4. Subject: LASER New (different) LASER symbiont. 1/7
  5. Message-ID: <086A78068713402E1D@NERUS.PFC.MIT.EDU>
  6. Date: 22 Aug 92 16:21:00 GMT
  7. Sender: daemon@ucbvax.BERKELEY.EDU
  8. Distribution: world
  9. Organization: The Internet
  10. Lines: 927
  11.  
  12. $! ------------------ CUT HERE -----------------------
  13. $ v='f$verify(f$trnlnm("SHARE_VERIFY"))'
  14. $!
  15. $! This archive created by VMS_SHARE Version 7.2-007  22-FEB-1990
  16. $!   On 22-AUG-1992 10:42:38.95   By user MRL 
  17. $!
  18. $! This VMS_SHARE Written by:
  19. $!    Andy Harper, Kings College London UK
  20. $!
  21. $! Acknowledgements to:
  22. $!    James Gray       - Original VMS_SHARE
  23. $!    Michael Bednarek - Original Concept and implementation
  24. $!
  25. $!+ THIS PACKAGE DISTRIBUTED IN 7 PARTS, TO KEEP EACH PART
  26. $!  BELOW 70 BLOCKS
  27. $!
  28. $! TO UNPACK THIS SHARE FILE, CONCATENATE ALL PARTS IN ORDER
  29. $! AND EXECUTE AS A COMMAND PROCEDURE  (  @name  )
  30. $!
  31. $! THE FOLLOWING FILE(S) WILL BE CREATED AFTER UNPACKING:
  32. $!       1. AAAREADME.DOC;3
  33. $!       2. BITIMAGE_HEX.PS;1
  34. $!       3. DEFINE.H;2
  35. $!       4. HEADERS_STR.PS;26
  36. $!       5. IMAGE_HEX.PS;1
  37. $!       6. LASER.C;253
  38. $!       7. LASER.DBG;4
  39. $!       8. LASER.HLP;17
  40. $!       9. LASER.LNK;10
  41. $!      10. LASER.OPT;1
  42. $!      11. LASER_ERR.MSG;12
  43. $!      12. LBRDEF.H;1
  44. $!      13. NUMBER_UP.PS;10
  45. $!      14. PAINT_HEX.PS;1
  46. $!      15. PARSER.PS;1
  47. $!      16. PATCH.PS;1
  48. $!      17. PS.PS;1
  49. $!      18. SIDES.PS;3
  50. $!      19. SMBDEF.H;1
  51. $!      20. STARTEND.PS;13
  52. $!      21. SYST.COM;4
  53. $!      22. TEK.H;4
  54. $!      23. TEK2PS.C;53
  55. $!      24. TEK4014.PS;15
  56. $!      25. TRAILER.PS;1
  57. $!      26. ZETA.PS;1
  58. $!
  59. $set="set"
  60. $set symbol/scope=(nolocal,noglobal)
  61. $f=f$parse("SHARE_TEMP","SYS$SCRATCH:.TMP_"+f$getjpi("","PID"))
  62. $e="write sys$error  ""%UNPACK"", "
  63. $w="write sys$output ""%UNPACK"", "
  64. $ if f$trnlnm("SHARE_LOG") then $ w = "!"
  65. $ ve=f$getsyi("version")
  66. $ if ve-f$extract(0,1,ve) .ges. "4.4" then $ goto START
  67. $ e "-E-OLDVER, Must run at least VMS 4.4"
  68. $ v=f$verify(v)
  69. $ exit 44
  70. $UNPACK: SUBROUTINE ! P1=filename, P2=checksum
  71. $ if f$search(P1) .eqs. "" then $ goto file_absent
  72. $ e "-W-EXISTS, File ''P1' exists. Skipped."
  73. $ delete 'f'*
  74. $ exit
  75. $file_absent:
  76. $ if f$parse(P1) .nes. "" then $ goto dirok
  77. $ dn=f$parse(P1,,,"DIRECTORY")
  78. $ w "-I-CREDIR, Creating directory ''dn'."
  79. $ create/dir 'dn'
  80. $ if $status then $ goto dirok
  81. $ e "-E-CREDIRFAIL, Unable to create ''dn'. File skipped."
  82. $ delete 'f'*
  83. $ exit
  84. $dirok:
  85. $ w "-I-PROCESS, Processing file ''P1'."
  86. $ if .not. f$verify() then $ define/user sys$output nl:
  87. $ EDIT/TPU/NOSEC/NODIS/COM=SYS$INPUT 'f'/OUT='P1'
  88. PROCEDURE Unpacker ON_ERROR ENDON_ERROR;SET(FACILITY_NAME,"UNPACK");SET(
  89. SUCCESS,OFF);SET(INFORMATIONAL,OFF);f:=GET_INFO(COMMAND_LINE,"file_name");b:=
  90. CREATE_BUFFER(f,f);p:=SPAN(" ")@r&LINE_END;POSITION(BEGINNING_OF(b));
  91. LOOP EXITIF SEARCH(p,FORWARD)=0;POSITION(r);ERASE(r);ENDLOOP;POSITION(
  92. BEGINNING_OF(b));g:=0;LOOP EXITIF MARK(NONE)=END_OF(b);x:=ERASE_CHARACTER(1);
  93. IF g=0 THEN IF x="X" THEN MOVE_VERTICAL(1);ENDIF;IF x="V" THEN APPEND_LINE;
  94. MOVE_HORIZONTAL(-CURRENT_OFFSET);MOVE_VERTICAL(1);ENDIF;IF x="+" THEN g:=1;
  95. ERASE_LINE;ENDIF;ELSE IF x="-" THEN IF INDEX(CURRENT_LINE,"+-+-+-+-+-+-+-+")=
  96. 1 THEN g:=0;ENDIF;ENDIF;ERASE_LINE;ENDIF;ENDLOOP;t:="0123456789ABCDEF";
  97. POSITION(BEGINNING_OF(b));LOOP r:=SEARCH("`",FORWARD);EXITIF r=0;POSITION(r);
  98. ERASE(r);x1:=INDEX(t,ERASE_CHARACTER(1))-1;x2:=INDEX(t,ERASE_CHARACTER(1))-1;
  99. COPY_TEXT(ASCII(16*x1+x2));ENDLOOP;WRITE_FILE(b,GET_INFO(COMMAND_LINE,
  100. "output_file"));ENDPROCEDURE;Unpacker;QUIT;
  101. $ delete/nolog 'f'*
  102. $ CHECKSUM 'P1'
  103. $ IF CHECKSUM$CHECKSUM .eqs. P2 THEN $ EXIT
  104. $ e "-E-CHKSMFAIL, Checksum of ''P1' failed."
  105. $ ENDSUBROUTINE
  106. $START:
  107. $ create 'f'
  108. XLASER is a user-written print symbiont that is tailored specifically to the
  109. XApple LaserWriter family, but works with other PostScript printers,`20
  110. Xincluding DEC printers.
  111. X
  112. XThe symbiont as distributed is configured to print normal text files in
  113. Xa variety of formats on the laser printer.  Support is also included for
  114. Xprinting PostScript, MacPaint, Tektronix plot, and Zeta plot files.  See
  115. XLASER.HLP and LASER.C for additional capabilities of the symbiont.
  116. X
  117. XThis distribution consists of the following files:
  118. X
  119. XFile`09`09Destination`09`09Purpose
  120. X---------------------------------------------------------------------------
  121. XAAAREADME.DOC`09`09`09`09This file
  122. XLASER.EXE`09SYS$SYSTEM:LASER.EXE`09The symbiont executable.
  123. X*.PS`09`09SYS$LIBRARY:LASER.TLB`09Library of PostScript header files.
  124. XLASER.C`09`09`09`09`09Symbiont sources.
  125. XLASER_ERR.MSG`09`09`09`09Error message source.
  126. XQUIDEF.H`09`09`09`09Source header files.
  127. XSMBDEF.H
  128. XLBRDEF.H
  129. XLASER.OPT`09`09`09`09Link options file.
  130. XLASER.HLP`09SYS$HELP:HELPLIB.HLB`09Description of forms supported.
  131. XSYST.COM`09SYS$MANAGER:SYSTARTUP.COM Queue startup commands.
  132. X
  133. XInstallation.
  134. X
  135. XInstallation of the files can be accomplished with the following set of
  136. Xcommands:
  137. X
  138. X$ LIBRARY/CREATE/TEXT LASER *.PS
  139. X$ COPY LASER.EXE SYS$SYSTEM:/PROT=W:RE
  140. X$ COPY LASER.TLB SYS$LIBRARY:/PROT=W:RE
  141. X$ LIBRARY /HELP SYS$HELP:HELPLIB LASER`09`09! Optional
  142. X
  143. XSelect a terminal port to attach the printer to, and edit SYST.COM to
  144. Xreflect your change.  SYST.COM may be invoked by your system startup
  145. Xprocedures.  The printer may be connected with a cable that has only
  146. Xtransmit, receive and ground pins connected.  Transmit and receive
  147. Xshould (I think) be swapped. The switch on the LaserWriter should be
  148. Xswitched to the "9600" position.  If you are sharing your LaserWriter
  149. Xwith a Macintosh connected via AppleTalk, use the following procedure
  150. Xwhen switching the printer:
  151. X
  152. XTo switch the printer to the VAX:
  153. X1. Insure that no AppleTalk jobs are in progress.
  154. X2. Disconnect the appletalk connector from the laserwriter.
  155. X3. Switch switch on LaserWriter to "9600".
  156. X4. $START/QUEUE ALW
  157. X
  158. XTo switch the printer to the MAC:
  159. X1. $STOP/QUEUE/NEXT ALW
  160. X2. Allow any jobs in progress to complete.
  161. X3. Switch switch on LaserWriter to "AppleTalk".
  162. X4. Connect the appletalk connector to the laserwriter.
  163. X
  164. XTo build the symbiont from the sources:
  165. X
  166. X$ CC LASER
  167. X$ MESSAGE LASER_ERR
  168. X$ LINK LASER.OPT/OPT
  169. X
  170. XPostScript is a trademark of Adobe Inc.
  171. XLaserWriter and MacPaint are trademarks of Apple Computer.
  172. $ CALL UNPACK AAAREADME.DOC;3 1951667499
  173. $ create 'f'
  174. X%%%`09bitimage - puts an uncompressed hex bitmap on the page
  175. X%
  176. X%`09R. Watson
  177. X%`0905-Feb-1987
  178. X%
  179. X%`09inputs:`09/param1 /ncopies /nc - number of copies (default 1)
  180. X%`09`09/param2 /scale - scale factor to multiply by (default 1.0)
  181. X%`09`09/param3 /xsize - x size in pixels (default 512)
  182. X%`09`09/param4 /ysize - y size in pixels (default 512)
  183. X%`09`09/param5 /pxlwid - number of bits in a pixel (1,2,4,8)
  184. X%
  185. X
  186. X%%`09main program
  187. X%
  188. X/main
  189. X`7B
  190. X`09/iscale 1 scale div def`09`09% compute scale factor
  191. X%
  192. X% get the image, fill black if run out of data. Note that readhexstring
  193. X% returns false if we don't fill the string, so the input data should
  194. X% be a multiple of sizeof(tmp) bytes long. Assume that it is more`20
  195. X% efficient to read more than 1 byte at a time.  Note that line boundaries
  196. X% do not matter.
  197. X%
  198. X`09xsize ysize pxlwid `5Biscale 0.0 0.0  iscale 0.0 0.0`5D
  199. X`09`09`7B currentfile tmp readhexstring not `7Bpop <00>`7D if `7D image
  200. X
  201. X`09showpage
  202. X`09currentfile flushfile`09`09`09% avoid laser_log's
  203. X`7D def
  204. X
  205. X
  206. X%%`09executable initialization
  207. X%
  208. X/table `5B
  209. X `5B/#copies 1 (.nc .ncopies .param1)`5D`09`09% number of copies
  210. X `5B/scale 1.0 (.sf .scale .param2)`5D`09`09% scale factor
  211. X `5B/xsize 512 (.xsize .param3)`5D`09`09`09% x size
  212. X `5B/ysize 512 (.ysize .param4)`5D`09`09`09% y size
  213. X `5B/pxlwid 1 (.pxlwid .param5)`5D`09`09`09% pixel width
  214. X`5D def
  215. X
  216. Xtable `7B`09`09`09`09`09`09% apply defaults
  217. X`09/ta exch def`09`09`09`09% save array
  218. X`09ta 0 get`09`09`09`09% key
  219. X`09ta 1 get`09`09`09`09% default value
  220. X`09def`09`09`09`09`09% define default value
  221. X`7D forall
  222. X
  223. Xcurrentdict /parser known `7Bparser`7D if`09`09% if user inputs
  224. X
  225. X/identity matrix def`09`09`09% make an identity matrix
  226. X/tmp 8 string def
  227. X1 72 mul 10 72 mul moveto currentpoint translate
  228. Xcurrentpoint transform`09`09`09% see where we are in device coords
  229. Xidentity setmatrix`09`09`09% turn off transformation - switch to
  230. X`09`09`09`09`09%  device coordinate system
  231. Xtranslate`09`09`09`09% move origin to transformed currpt
  232. X
  233. Xmain
  234. $ CALL UNPACK BITIMAGE_HEX.PS;1 1514953140
  235. $ create 'f'
  236. Xextern struct `7B
  237. X`09int`09item_code;`09`09/* code */
  238. X`09unsigned short `09item_size;`09/* size of item */
  239. X`09char`09*buffer;`09`09/* address of item */
  240. X`7D item`5BMAXITEMS`5D;
  241. X
  242. Xextern int ii;`09`09`09`09/* item index */
  243. Xextern int start_task;`09`09`09/* start task flag */
  244. Xextern int stop_task;`09`09`09/* stop task flag */
  245. Xextern int stop_reason;`09`09`09/* stop task reason code */
  246. Xextern int spooled_file;`09`09/* TRUE if spooled file */
  247. Xextern int laser_efn;`09`09`09/* laser read event flag */
  248. Xextern int startpage;`09`09`09/* task start page */
  249. Xextern int endpage;`09`09`09/* task end page */
  250. Xextern int jobstart;`09`09`09/* job start page */
  251. Xextern int ascii;`09`09`09/* TRUE if ascii main file */
  252. Xextern int hex;`09`09`09`09/* TRUE if hexified main file */
  253. Xextern int string;`09`09`09/* TRUE if string main file */
  254. Xextern int status_idle;`09`09`09/* TRUE if idle status received */
  255. Xextern int patchneeded;`09`09`09/* TRUE if patch module sent */
  256. Xextern short laserchan;`09`09`09/* laserwriter channel */
  257. Xextern unsigned short laser_iosb`5B4`5D;`09/* laser read iosb */
  258. Xextern char laser_buf`5B1024`5D;`09`09/* laser read buffer */
  259. Xextern struct FAB main_fab;`09`09/* main file rms stuff */
  260. Xextern struct NAM main_nam;
  261. Xextern struct RAB main_rab;
  262. Xextern struct FAB log_fab;`09`09/* log file rms stuff */
  263. Xextern struct RAB log_rab;
  264. Xextern struct dsc$descriptor_d library_spec;
  265. Xextern struct dsc$descriptor_d buffer_des;
  266. Xextern struct dsc$descriptor_d savelog;
  267. Xextern int userlog;`09`09`09/* user log file */
  268. Xextern int notify;
  269. X
  270. Xextern char msg`5B255`5D;`09`09`09/* error message to user */
  271. Xextern struct dsc$descriptor_s errmsg_dsc;
  272. X
  273. Xextern char user_text`5B20`5D;`09`09/* user name to send error message to */
  274. Xextern struct dsc$descriptor_s user_notify;
  275. $ CALL UNPACK DEFINE.H;2 1098663394
  276. $ create 'f'
  277. X%%`09headers_str - print text with headers on LaserWriter
  278. X%
  279. X%`09R. Watson 25-Sep-1986
  280. X%
  281. X/EOF
  282. X`7B
  283. X`09linecount 0 ne column 0 ne or `7B`09% if we've printed a line
  284. X`09`09/column ncolumns def`09% force page out
  285. X`09`09newpage
  286. X`09`7D if
  287. X`7D def
  288. X`20
  289. X/XCR`20
  290. X`7B
  291. X`09/xpos xmargin def`09%%%was leftmargin
  292. X`7D def
  293. X`20
  294. X/XLF `7Bnewline`7D def
  295. X`20
  296. X/XFF
  297. X`7B
  298. X`09topmargin lineh sub ypos ne `7B`09% if not top of page
  299. X`09`09newpage
  300. X`09`7D if
  301. X`7D def
  302. X`20
  303. X`20
  304. X%%`09<string> XSTR
  305. X%
  306. X%`09prints a line of text from the stack
  307. X%
  308. X/XSTR
  309. X`7B
  310. X`09/line exch def`09`09`09`09% get text
  311. X`20
  312. X`09line length 1 ge `7B`09`09`09%  show the line
  313. X`09`09xpos ypos moveto
  314. X`09`09squish 0 line ashow
  315. X`09`09/xpos currentpoint pop def`09% save current x position
  316. X`09`7D if
  317. X`7D def
  318. X`20
  319. X`20
  320. X%%`09newline - move down 1 line.
  321. X%
  322. X/newline `7B
  323. X`09/linecount linecount 1 add def`09% advance line count
  324. X`09ypos lineh sub /ypos exch def`09% debit y pos on page
  325. X`09ypos bottommargin lt`20
  326. X`09 linecount linelimit gt or `7B`09% if bottom of page
  327. X`09`09newpage
  328. X`09`09newline
  329. X`09`7D if
  330. X`7D def
  331. X`20
  332. X`20
  333. X%%`09newpage - initialize for a new page.
  334. X%
  335. X/newpage `7B
  336. X`09/linecount 0 def`09`09`09% reset line count
  337. X`09/ypos topmargin lineh sub def`09`09% reset line on page
  338. X`20
  339. X`09/column column 1 add def`09`09% advance column
  340. X`09column ncolumns lt `7B`09`09`09% if not last column
  341. X`09`09/xmargin columnwidth column mul leftmargin add def
  342. X`09`09/xpos xmargin def
  343. X`09`7D `7B
  344. X`09`09/column 0 def`09`09`09% reset column
  345. X`20
  346. X`09`09title `7B`09`09`09`09`09% if title
  347. X`09`09`09leftmargin`20
  348. X`09`09`09  topmargin titlemargin add moveto % setup header
  349. X`09`09`09currentfont`09`09`09% save current font
  350. X`09`09`09/Helvetica-Bold findfont 12 scalefont setfont
  351. X`09`09`09filename show
  352. X`09`09`09pagewidth 1.5 inch sub`20
  353. X`09`09`09  topmargin titlemargin add moveto % page number
  354. X`09`09`09(page ) show
  355. X`09`09`09page 10 5 string cvrs show
  356. X`09`09`09setfont`09`09`09`09% restore font
  357. X`09`09`7D if`09`09
  358. X`20
  359. X`09`09showpage
  360. X`09`09landscape
  361. X`20
  362. X`09`09page`09`09`09`09`09% save this
  363. X`09`09saveobj restore `09`09`09% flush vm
  364. X`09`09/saveobj save def
  365. X`09`09/page exch def`09`09`09`09% restore this
  366. X`20
  367. X`09`09alternate page 1 and 1 eq and
  368. X`09`09`09  `7B/temp leftmargin def
  369. X                           /leftmargin rightmargin def
  370. X                           /rightmargin temp def`7D if
  371. X`09`09/page page 1 add def`09`09`09% advance page number
  372. X`09`09/xmargin leftmargin def`09`09`09% reset left side
  373. X`09`09/xpos xmargin def
  374. X`09`7D ifelse
  375. X`7D def`09
  376. X`20
  377. X`20
  378. X%%`09landscape - set landscape mode
  379. X%
  380. X/landscape `7B
  381. X`09wide `7B
  382. X`09`098.5 inch 0 translate 90 rotate
  383. X`09`7D if
  384. X`7D def
  385. X`20
  386. X%%`09<ivalue> inch <value>.
  387. X%
  388. X%`09convert <ivalue> to inches
  389. X%
  390. X/inch `7B 72. mul`7D def
  391. X`20
  392. X`20
  393. X%%`09<ivalue> point <value>.
  394. X%
  395. X%`09convert <ivalue> to points
  396. X%
  397. X/point `7B `7D def
  398. X`20
  399. X`20
  400. X%%`09executable initialization.
  401. X%
  402. Xinitgraphics
  403. X`20
  404. Xcurrentdict /formname known not `7B/formname (2UP) def`7D if
  405. X`20
  406. Xformname (2UP) eq `7B
  407. X`09/table `5B
  408. X`09 `5B/#copies 1 (.nc .ncopies .param1)`5D`09`09% number of copies
  409. X`09 `5B/fsizetmp 0 (.fsize .fs .param2)`5D`09`09% font size
  410. X`09 `5B/wide true (.wide .w .param3)`5D`09`09% landscape mode
  411. X`09 `5B/title false (.title .param4)`5D `09`09% title
  412. X`09 `5B/ncolumns 2 (.ncolumns .param5)`5D`09`09% number of columns
  413. X`09 `5B/linelimit 66 (.linelimit .nlines .param6)`5D`09% lines per page
  414. X         `5B/hdr () (.hdr .header. param7)`5D`09`09% page header
  415. X         `5B/font (Courier) (.font .param8)`5D`09  `09% font
  416. X         `5B/topmargin -1 (.topmargin .top .param9)`5D`09% topmargin
  417. X         `5B/leftmargin -1 (.leftmargin .left .param10)`5D`09% leftmargin
  418. X         `5B/rightmargin -1 (.rightmargin .right .param11)`5D`09% rightmargi
  419. Vn
  420. X         `5B/bottommargin -1 (.bottommargin .bottom .param12)`5D`09% bottomm
  421. Vargin
  422. X         `5B/alternate false (.alternate .param13)`5D`09% alternate
  423. X `09 `5B/swedish false (.swedish)`5D`09`09`09% set swedish mode
  424. X`09`5D def
  425. X`7D if
  426. X`20
  427. Xformname (LETTER) eq `7B
  428. X`09/table `5B
  429. X`09 `5B/#copies 1 (.nc .ncopies .param1)`5D`09`09% number of copies
  430. X`09 `5B/fsizetmp 0 (.fsize .fs .param2)`5D`09`09% font size
  431. X`09 `5B/wide false (.wide .w .param3)`5D`09`09% landscape mode
  432. X`09 `5B/title false (.title .param4)`5D `09`09% title
  433. X`09 `5B/ncolumns 1 (.ncolumns .param5)`5D`09`09% number of columns
  434. X`09 `5B/linelimit 77 (.linelimit .nlines .param6)`5D`09% lines per page
  435. X         `5B/hdr () (.hdr .header. param7)`5D`09`09% page header
  436. X         `5B/font (Courier) (.font .param8)`5D`09  `09% font
  437. X         `5B/topmargin -1 (.topmargin .top .param9)`5D`09% topmargin
  438. X         `5B/leftmargin -1 (.leftmargin .left .param10)`5D`09% leftmargin
  439. X         `5B/rightmargin -1 (.rightmargin .right .param11)`5D`09% rightmargi
  440. Vn
  441. X         `5B/bottommargin -1 (.bottommargin .bottom .param12)`5D`09% bottomm
  442. Vargin
  443. X         `5B/alternate false (.alternate .param13)`5D`09% alternate
  444. X`09 `5B/swedish false (.swedish)`5D`09`09`09% set swedish mode
  445. X`09`5D def
  446. X`7D if
  447. X`20
  448. Xformname (LANDSCAPE) eq `7B
  449. X`09/table `5B
  450. X`09 `5B/#copies 1 (.nc .ncopies .param1)`5D`09`09% number of copies
  451. X`09 `5B/fsizetmp 0 (.fsize .fs .param2)`5D`09`09% font size
  452. X`09 `5B/wide true (.wide .w .param3)`5D`09`09% landscape mode
  453. X`09 `5B/title false (.title .param4)`5D `09`09% title
  454. X`09 `5B/ncolumns 1 (.ncolumns .param5)`5D`09`09% number of columns
  455. X`09 `5B/linelimit 66 (.linelimit .nlines .param6)`5D`09% lines per page
  456. X         `5B/hdr () (.hdr .header. param7)`5D`09`09% page header
  457. X         `5B/font (Courier) (.font .param8)`5D`09  `09% font
  458. X         `5B/topmargin -1 (.topmargin .top .param9)`5D`09% topmargin
  459. X         `5B/leftmargin -1 (.leftmargin .left .param10)`5D`09% leftmargin
  460. X         `5B/rightmargin -1 (.rightmargin .right .param11)`5D`09% rightmargi
  461. Vn
  462. X         `5B/bottommargin -1 (.bottommargin .bottom .param12)`5D`09% bottomm
  463. Vargin
  464. X         `5B/alternate false (.alternate .param13)`5D`09% alternate
  465. X`09 `5B/swedish false (.swedish)`5D`09`09`09% set swedish mode
  466. X`09`5D def
  467. X`7D if
  468. X`20
  469. Xformname (HEADERS) eq `7B
  470. X`09/table `5B
  471. X`09 `5B/#copies 1 (.nc .ncopies .param1)`5D`09`09% number of copies
  472. X`09 `5B/fsizetmp 0 (.fsize .fs .param2)`5D`09`09% font size
  473. X`09 `5B/wide false (.wide .w .param3)`5D`09`09% landscape mode
  474. X`09 `5B/title true (.title .param4)`5D `09`09% title
  475. X`09 `5B/ncolumns 1 (.ncolumns .param5)`5D`09`09% number of columns
  476. X`09 `5B/linelimit 77 (.linelimit .nlines .param6)`5D`09% lines per page
  477. X         `5B/hdr () (.hdr .header. param7)`5D`09`09% page header
  478. X         `5B/font (Courier) (.font .param8)`5D`09  `09% font
  479. X         `5B/topmargin -1 (.topmargin .top .param9)`5D`09% topmargin
  480. X         `5B/leftmargin -1 (.leftmargin .left .param10)`5D`09% leftmargin
  481. X         `5B/rightmargin -1 (.rightmargin .right .param11)`5D`09% rightmargi
  482. Vn
  483. X         `5B/bottommargin -1 (.bottommargin .bottom .param12)`5D`09% bottomm
  484. Vargin
  485. X         `5B/alternate false (.alternate .param13)`5D`09% alternate
  486. X`09 `5B/swedish false (.swedish)`5D`09`09`09% set swedish mode
  487. X`09`5D def
  488. X`7D if
  489. X`20
  490. Xformname (SWEDISH) eq `7B
  491. X`09/table `5B
  492. X`09 `5B/#copies 1 (.nc .ncopies .param1)`5D`09`09% number of copies
  493. X`09 `5B/fsizetmp 0 (.fsize .fs .param2)`5D`09`09% font size
  494. X`09 `5B/wide false (.wide .w .param3)`5D`09`09% landscape mode
  495. X`09 `5B/title false (.title .param4)`5D `09`09% title
  496. X`09 `5B/ncolumns 1 (.ncolumns .param5)`5D`09`09% number of columns
  497. X`09 `5B/linelimit 66 (.linelimit .nlines .param6)`5D`09% lines per page
  498. X         `5B/hdr () (.hdr .header. param7)`5D`09`09% page header
  499. X         `5B/font (Courier) (.font .param8)`5D`09  `09% font
  500. X         `5B/topmargin -1 (.topmargin .top .param9)`5D`09% topmargin
  501. X         `5B/leftmargin -1 (.leftmargin .left .param10)`5D`09% leftmargin
  502. X         `5B/rightmargin -1 (.rightmargin .right .param11)`5D`09% rightmargi
  503. Vn
  504. X         `5B/bottommargin -1 (.bottommargin .bottom .param12)`5D`09% bottomm
  505. Vargin
  506. X         `5B/alternate false (.alternate .param13)`5D`09% alternate
  507. X`09 `5B/swedish true (.swedish)`5D`09`09`09% set swedish mode
  508. X`09`5D def
  509. X`7D if
  510. X`20
  511. Xcurrentdict /table known not `7B
  512. X`09/table `5B
  513. X`09 `5B/#copies 1 (.nc .ncopies .param1)`5D`09`09% number of copies
  514. X`09 `5B/fsizetmp 0 (.fsize .fs .param2)`5D`09`09% font size
  515. X`09 `5B/wide false (.wide .w .param3)`5D`09`09% landscape mode
  516. X`09 `5B/title true (.title .param4)`5D `09`09% title
  517. X`09 `5B/ncolumns 1 (.ncolumns .param5)`5D`09`09% number of columns
  518. X`09 `5B/linelimit 66 (.linelimit .nlines .param6)`5D`09% lines per page
  519. X         `5B/hdr () (.hdr .header. param7)`5D`09`09% page header
  520. X         `5B/font (Courier) (.font .param8)`5D`09  `09% font
  521. X         `5B/topmargin -1 (.topmargin .top .param9)`5D`09% topmargin
  522. X         `5B/leftmargin -1 (.leftmargin .left .param10)`5D`09% leftmargin
  523. X         `5B/rightmargin -1 (.rightmargin .right .param11)`5D`09% rightmargi
  524. Vn
  525. X         `5B/bottommargin -1 (.bottommargin .bottom .param12)`5D`09% bottomm
  526. Vargin
  527. X         `5B/alternate false (.alternate .param13)`5D`09% alternate
  528. X`09 `5B/swedish false (.swedish)`5D`09`09`09% set swedish mode
  529. X`09`5D def
  530. X`7D if
  531. X`20
  532. Xtable `7B`09`09`09`09`09`09% apply defaults
  533. X`09/ta exch def`09`09`09`09% save array
  534. X`09ta 0 get`09`09`09`09% key
  535. X`09ta 1 get`09`09`09`09% default value
  536. X`09def`09`09`09`09`09% define default value
  537. X`7D forall
  538. X`20
  539. Xcurrentdict /parser known `7Bparser`7D if`09`09% if user inputs
  540. X`20
  541. X% if the user specified a string for /hdr then use it, also imply title true
  542. Xhdr length 0 ne `7B/filename hdr def /title true def`7D if
  543. X
  544. Xcurrentdict /filename known not `7B/filename () def`7D if
  545. X%filename (_DUA0:`5B`5D) anchorsearch `7Bpop /filename exch def`7D `7Bpop`7D
  546. V ifelse %cleanup
  547. Xfilename (`5B`5D) search `7Bpop pop /filename exch def`7D `7Bpop`7D ifelse`2
  548. V0
  549. X`20
  550. X/inp currentfile def`09`09`09`09% define files
  551. X`20
  552. Xwide `7B
  553. X`09leftmargin 0 lt `7B/leftmargin .4 inch def`7D if
  554. X`09topmargin 0 lt `7B/topmargin 8.1 inch def`7D `20
  555. X`09`09`09`7B/topmargin 8.5 topmargin sub inch def`7D ifelse
  556. X`09bottommargin 0 lt `7B/bottommargin .3 inch def`7D if `20
  557. X`09rightmargin 0 lt `7B/rightmargin .25 inch def`7D if `20
  558. X`09currentdict /fsize known not `7B/fsize 10 point def`7D if
  559. X`09fsizetmp 0 ne `7B/fsize fsizetmp def`7D if
  560. X`09/pagewidth 11 inch def
  561. X`09/squish -0.3 def
  562. X`09/titlemargin 3 point def
  563. X`7D `7B`09
  564. X`09leftmargin 0 lt `7B/leftmargin 1. inch def`7D if `20
  565. X`09topmargin 0 lt `7B/topmargin 10.39 inch def`7D
  566. X`09`09`09`7B/topmargin 11 topmargin sub inch def`7D ifelse
  567. X`09rightmargin 0 lt `7B/rightmargin .25 inch def`7D if `20
  568. X`09bottommargin 0 lt `7B/bottommargin .5 inch def`7D if `20
  569. X`09currentdict /fsize known not `7B/fsize 10 point def`7D if
  570. X`09fsizetmp 0 ne `7B/fsize fsizetmp def`7D if
  571. X`09/pagewidth 8.5 inch def
  572. X`09/squish -0.3 def
  573. X`09/titlemargin .185 inch def
  574. X`7D ifelse
  575. X/lineh fsize point def`09`09`09% line height
  576. X/lineh lineh 1.2 sub def
  577. X/linecount 0 def
  578. X/column 0 def
  579. X/columnwidth pagewidth leftmargin sub rightmargin sub ncolumns div def
  580. X/ibuf 200 string def`09`09`09% input buffer
  581. X/page 1 def`09`09`09`09% page number
  582. X/xpos leftmargin def
  583. X/xmargin leftmargin def
  584. X/ypos topmargin lineh sub def
  585. X`20
  586. X%  The following section of code makes a new font with a backspace
  587. X%  character defined.  The width of the backspace character is
  588. X%  the negative of the width of an underscore character.
  589. X
  590. X/selectfont `7B`20
  591. Xdup
  592. Xfindfont`09`09`09`09`09% select the font
  593. X%lineh scalefont setfont`09`09`09% find width of an underscore
  594. X%    (_) stringwidth pop 100 mul /uwid exch def
  595. X
  596. X%
  597. X% find the width of a character in the font coordinate system.
  598. X% add back in the scaled amount that squish will offset us so we
  599. X% end up in the right place after a backspace
  600. X%
  601. X1000 scalefont setfont
  602. X    (_) stringwidth pop`092000 squish mul fsize div add /uwid exch def`20
  603. X`20
  604. Xfindfont`09`09`09`09`09% copy the font
  605. Xdup length 1 add dict /newdict exch def`09%  leaving room for a Metrics entr
  606. Vy
  607. X`7B
  608. X`09exch dup  /FID ne `7B`09`09`09% if not /FID
  609. X`09`09dup /Encoding eq `7B`09`09% if /Encoding copy the entry
  610. X`09`09`09exch dup length array copy`20
  611. X`09`09`09newdict 3 1 roll put
  612. X`09`09`7D `7B
  613. X`09`09`09exch newdict 3 1 roll put % else just use the object
  614. X`09`09`7D ifelse
  615. X`09`7D `7B
  616. X`09pop pop`09`09`09`09`09% dump /FID
  617. X`09`7D ifelse
  618. X`7D forall
  619. X`20
  620. X1 dict begin`09`09`09`09`09% create Metrics dictionary
  621. X`09/backspace uwid neg def`09`09`09% define backspace width
  622. X`09newdict /Metrics currentdict put
  623. Xend
  624. X`20
  625. Xnewdict begin`09`09`09`09`09% set encoding for backspace
  626. X`09Encoding 8 /backspace put
  627. X`09swedish `7B
  628. X`09`09Encoding 16#7b /aring put`09% `7B
  629. X`09`09Encoding 16#7d /adieresis put`09% `7D
  630. X`09`09Encoding 16#7c /odieresis put`09% `7C
  631. X`09`09Encoding 16#5b /Aring put`09% `5B
  632. X`09`09Encoding 16#5d /Adieresis put`09% `5D
  633. X`09`09Encoding 16#5c /Odieresis put`09% \
  634. X`09`7D if
  635. Xend
  636. X/xfont newdict definefont pop`09`09`09% define the new font
  637. X`20
  638. X/xfont findfont fsize scalefont setfont`09% select the new font
  639. X`7D def
  640. Xfont selectfont
  641. X`20
  642. Xlandscape
  643. X/saveobj save def
  644. $ CALL UNPACK HEADERS_STR.PS;26 1397197447
  645. $ create 'f'
  646. X%%%`09image - puts a raster image file on the laserwriter.
  647. X%
  648. X%`0902/26/87 R. Watson Derived from paint_hex.ps
  649. X%
  650. X
  651. X%%`09deCompress <string>.
  652. X%
  653. X%`09returns a bitimage string on the stack
  654. X%
  655. X/deCompress
  656. X`7B
  657. X`09/count readbyte def`09`09`09% get count
  658. X`09count 16#80 and 0 eq `7B`09`09`09% if bit stream
  659. X`09`09/count count 1 add def
  660. X`09`09outstring 0 count getinterval   % get right size string
  661. X`09`09inp exch readhexstring`09`09% get bytes
  662. X`09`09pop`09`09`09`09% toss readhexstring status
  663. X`09`7D
  664. X`09`7B`09`09`09`09`09% else repeated string
  665. X`09`09/byte readbyte def`09`09% get byte to repeat
  666. X`09`0916#100 count sub 1 add /count exch def% get abs val of count
  667. X`09`090`09`09`09`09% preset index
  668. X`09`09count `7B
  669. X`09`09`09dup outstring exch byte put
  670. X`09`09`091 add`09`09`09% advance index
  671. X`09`09`7D repeat
  672. X`09`09pop`09`09`09`09% index
  673. X`09`09outstring 0 count getinterval`09% return string
  674. X`09`7D ifelse
  675. X`7D def
  676. X
  677. X
  678. X%%`09getByte
  679. X%
  680. X%`09returns /byte = next input byte
  681. X%`09`09      = 0 if no more bytes on input stream
  682. X%
  683. X/getByte
  684. X`7B
  685. X`09inp instring readhexstring `7B`09`09% if got one
  686. X`09`090 get /byte exch def`09`09% store in byte
  687. X`09`7D
  688. X`09`7B`09`09`09`09`09% else 0
  689. X`09`09pop /byte 0 def
  690. X`09`7D ifelse
  691. X`7D def
  692. X
  693. X
  694. X%%`09decodeheader - decodes the info in the header record.
  695. X%
  696. X/decodeheader
  697. X`7B
  698. X`09/bytesinhead 512 def`09`09`09% default 512 bytes
  699. X`09`7B`09`09`09`09`09% 512 bytes default
  700. X`09    getlong 10 10string cvrs cvlit `09% key to lit
  701. X`09    dup where
  702. X`09`09`7B pop load exec `7D`09`09% if defined func
  703. X`09`09`7B pop getlong pop `7D ifelse`09% if no func (key, fix file)
  704. X`09    /bytesinhead bytesinhead 8 sub def`09% debit header length
  705. X`09    bytesinhead 8 lt `7B`09`09`09% if end of header
  706. X`09`09bytesinhead `7B`09`09`09% flush remaining bytes
  707. X`09`09`09readbyte pop
  708. X`09`09`7D repeat
  709. X`09`09exit`09`09`09`09% exit loop
  710. X`09    `7D if
  711. X`09`7D loop
  712. X`7D def
  713. X
  714. X/0 `7Bgetlong pop`7D def`09`09`09`09% 0 - nop
  715. X/1 `7B/xsize getlong def`7D def`09`09`09% 1 - x size
  716. X/2 `7B/ysize getlong def`7D def`09`09`09% 2 - y size
  717. X/3 `7B/pxlwid getlong def`7D def`09`09`09% 3 - pixel width
  718. X/4 `7B/scale getlong def`7D def`09`09`09% 4 - scale factor
  719. X/5 `7B/invert getlong def`7D def`09`09`09% 5 - invert if nonzero
  720. X/8 `7Bgetlong 512 sub `09`09`09`09% 8 - header length
  721. X    bytesinhead add /bytesinhead exch def`7D def  % apply correction factor
  722. X/9 `7B/compressed getlong def`7D def`09`09% 9 - true if compressed
  723. X
  724. X%%`09getlong <int>
  725. X%
  726. X%`09converts 4 hex bytes from currentfile to an integer
  727. X%`09longwords from the vax are transmitted low order byte first.
  728. X%
  729. X/getlong
  730. X`7B
  731. X`09/acc 0 def`09`09`09`09% preset accumulator
  732. X`090 1 3 `7B
  733. X`09`09readbyte exch 8 mul bitshift acc or /acc exch def
  734. X`09`7D for
  735. X`09acc
  736. X`7D def
  737. X
  738. X
  739. X%%`09readbyte <int>
  740. X%
  741. X%`09reads a hex byte from currentfile and returns it on the stack
  742. X%`09executes "readbyteeof" if EOF encountered
  743. X%
  744. X/readbyte
  745. X`7B
  746. X`09currentfile 1string readhexstring `7B`7D`7Bpop readbyteeof`7D ifelse 0 ge
  747. Vt
  748. X`7D def
  749. X
  750. X
  751. X
  752. X%%`09main program
  753. X%
  754. X/main
  755. X`7B
  756. X`09decodeheader`09`09`09`09% apply user user header
  757. X`09currentdict /parser known `7Bparser`7D if`09% if user inputs
  758. X
  759. X`09invert 0 ne `7B
  760. X`09`09`7B1.0 exch sub`7D settransfer`09% invert image
  761. X`09`7D if
  762. X
  763. X`09/sTime usertime def`09`09`09% save start time
  764. X     vmstatus 10 20 string cvrs dbg exch writestring dbg ( ) writestring
  765. X              10 20 string cvrs dbg exch writestring dbg ( ) writestring
  766. X              10 20 string cvrs dbg exch writestring dbg ( \n) writestring
  767. X      flush
  768. X`09/iscale 1 scale div def`09`09`09% compute scale factor
  769. X`09
  770. X`09compressed 1 eq `7B`09`09`09% if encoded
  771. X`09`09xsize ysize pxlwid `5Biscale 0.0 0.0 iscale 0.0 0.0`5D
  772. X`09`09`09`09`09`09`09`7B deCompress `7D image
  773. X`09`7D `7B
  774. X`09`09xsize ysize pxlwid `5Biscale 0.0 0.0  iscale 0.0 0.0`5D
  775. X`09`09    `7B currentfile tmp readhexstring not `7Bpop <00>`7D if `7D image
  776. X`09`7D ifelse
  777. X
  778. X`09usertime sTime sub 1000 div 10 20 string cvrs
  779. X`09 dbg exch writestring dbg ( seconds )
  780. X`09 writestring
  781. X
  782. X    vmstatus 10 20 string cvrs dbg exch writestring dbg ( ) writestring
  783. X            10 20 string cvrs dbg exch writestring dbg ( ) writestring
  784. X              10 20 string cvrs dbg exch writestring dbg ( \n) writestring
  785. X      flush
  786. X
  787. X`09showpage
  788. X`09currentfile flushfile`09`09% avoid laser_log's
  789. X`7D def
  790. X
  791. X
  792. X%%`09executable initialization
  793. X%
  794. X/inp (%stdin) (r) file def`09`09`09% define files
  795. X/dbg (%stdout) (w) file def`09
  796. X/1string 1 string def`09`09`09`09% scratch 1 byte string
  797. X/10string 10 string def`09`09`09`09% scratch 10 byte string
  798. X/identity matrix def`09`09`09`09% make an identity matrix
  799. X/outstring 128 string def`09`09`09% storage for output string
  800. X/instring 1 string def`09`09`09`09% input buffer
  801. X/tmp 8 string def`09`09`09`09% for uncompressed images
  802. X
  803. X/table `5B
  804. X `5B/#copies 1 (.nc .ncopies .param1)`5D`09`09% number of copies
  805. X `5B/scale 1.0 (.sf .scale .param2)`5D`09`09% scale factor
  806. X `5B/xsize 512 (.xsize .param3)`5D`09`09`09% x size
  807. X `5B/ysize 512 (.ysize .param4)`5D`09`09`09% y size
  808. X `5B/pxlwid 1 (.pxlwid .param5)`5D`09`09`09% pixel width
  809. X `5B/invert 0 (.invert .param6)`5D`09`09`09% invert image if 1
  810. X `5B/compressed 1 (.compressed .param7)`5D`09`09% default to compressed
  811. X`5D def
  812. X
  813. Xtable `7B`09`09`09`09`09`09% apply defaults
  814. X`09/ta exch def`09`09`09`09% save array
  815. X`09ta 0 get`09`09`09`09% key
  816. X`09ta 1 get`09`09`09`09% default value
  817. X`09def`09`09`09`09`09% define default value
  818. X`7D forall
  819. X
  820. X1 72 mul 10 72 mul moveto currentpoint translate
  821. Xcurrentpoint transform`09`09`09% see where we are in device coords
  822. Xidentity setmatrix`09`09`09% turn off transformation - switch to
  823. X`09`09`09`09`09%  device coordinate system
  824. Xtranslate`09`09`09`09% move origin to transformed currpt
  825. X
  826. X/doit `7B
  827. X`09`7Bmain`7D stopped `7B (error stack:\n) = pstack flush quit`7D if
  828. X`7D def
  829. X%doit
  830. Xmain
  831. $ CALL UNPACK IMAGE_HEX.PS;1 1701784921
  832. $ create 'f'
  833. X/***`09LASER - A Single-Threaded Asynchronous Symbiont to driver
  834. X*`09`09an Apple LaserWriter
  835. X*
  836. X*`09Copyright 1987-1990, The University of Texas at Austin
  837. X*
  838. X*`09Revised:
  839. X*`09Mark London
  840. X*`09mrl@tardis.pfc.mit.edu
  841. X*
  842. X*`09This user-writter symbiont is tailored specifically to the Apple
  843. X*`09LaserWriter and similar PostScript printers.  It has the following
  844. X*`09features:
  845. X*
  846. X*`091. Page counting is done by reading the page count from the
  847. X*`09   laserwriter at the beginning and the end of each file.
  848. X*`09   This mechanism also "synchronizes" the user job with the
  849. X*`09   laserwriter.  If the laserwriter does not respond to the
  850. X*`09   first request for a page count, the symbiont notifies the
  851. X*`09   operator, and continues to poll the laserwriter.  This is
  852. X*`09   useful if the laserwriter is being shared with MAC users.
  853. X*
  854. X*`092. Parameters may be passed to postscript modules in the setup
  855. X*`09   library via 2 mechanisms.  The text from a $PRINT /NOTE=<text>
  856. X*`09   command will be sent first.
  857. X*
  858. X*`09   The /PARAMETER switch may also be used.  Each entry can be
  859. X*`09   one of two formats. An entry without the "=" character in
  860. X* `09   it is sent as (param<n>) <parameter>.  An entry with the`20
  861. X*`09   "=" character in is is sent as (<left side>) <right side>.
  862. X*`09   The parameters are defined in an array called /param.
  863. X*`09   Example:  /PARAMETER=(1,SIZE=5,"str=(a+b)") generates:
  864. X*`09   /param `5B(param1) 1 (size) 5 (str) (a+b)`5D def
  865. X*`09   All alphabetics are forced to lower case.  Using the /PARAMETER
  866. X*`09   switch forces sending PARSER from LASER.TLB as part of the
  867. X*`09   PostScript program sent to the printer.  Look at`20
  868. X*`09   other files in LASER.TLB for examples of using the PARSER
  869. X*`09   module.
  870. X*
  871. X*`093. If the name of a setup module ends with "_HEX" the file to`20
  872. X*`09   be printed is "hexified" to the laser printer.  This is useful
  873. X*`09   for sending bitimage files to the laserwriter.
  874. X*
  875. X*`094. A log of responses from the laserwriter is created if`20
  876. X*`09   /PARAMETER=MESSAGE=KEEP is specified .  This is`20
  877. X*`09   useful for debugging postscript programs.  The file is created
  878. X*`09   as <printfilespec>.LASER_LOG.  These files are automatically
  879. X*`09   deleted if empty.
  880. X*
  881. X*`095. A "%%`5B Flushing:" response from the printer will abort the
  882. X*`09   current file.
  883. X*
  884. X*`096. Spooled files:  Spooled files normally default to FORMS=LETTER
  885. X*`09   if the recommended queue initialize procedure is followed.
  886. X*`09   By specifying special filenames, the user can override the
  887. X*`09   forms used, and pass parameters to the setup module.
  888. X*`09   The syntax is:  "_<formname>._<parameter list>"
  889. X*`09   where <formname> is the name of a form to use and
  890. X*`09   <parameter list> is of the form: <parameter>-<value>`5B_...`5D.
  891. X*`09   (Note the use of "-" instead of "=" for a separator.)
  892. X*`09   For example:  $ copy zeta.plt alw:_zeta._ncopies-5_scale-2
  893. X*`09   (The kludge of the century, huh?)
  894. X*
  895. X*`09Outputs (in the following order) to the laserwriter:
  896. X*
  897. X*`091. "/note <notestring> def\r\n".
  898. X*`092. /param definition and library module PARSER if /parameter switch`20
  899. X*`09   present
  900. X*`093. If the setup module is "HEADERS", the string "/filename <filename>
  901. X*`09   def" and "/formname <name of form> def"
  902. X*`093. The first file or forms setup module if specified.
  903. X*`094. The file to be printed itself.  If the setup module name ends in
  904. X*`09   "_HEX" the file is hex-ified to the printer instead.
  905. X*
  906. X*`09where: <notestring> is the string from $PRINT /NOTE=<notestring>
  907. X*`09       <paramstring> is the string from $PRINT /PARAM=("<string>"...)
  908. X*`09       <filename> is the file specification for the file to print.
  909. X*
  910. X*`09Limitations, bugs, etc:
  911. X*
  912. X*`091. No checkpointing is done.
  913. X*`092. $PRINT/COPIES=n sends the job to the LaserWriter n times. This
  914. X*`09   is not optimal, but is how the job controller handles things.
  915. X*`09   It makes sense for most printers.  Multiple copy handling is
  916. X*`09   better handled in most of the postscript setup files.  Also
  917. X*`09   /note="/#copies n def" will usually work.
  918. X*`093. $PRINT/SPACE=n is not implemented.
  919. X*`094. /BURST is identical to /FLAG.
  920. X*`095. Does not handle lists of setup modules.
  921. X*
  922. X*`09Recommended device setup:
  923. X*
  924. X*`09$ define/system/exec/trans=(concealed,terminal) alw <term>: ! laser
  925. X*`09$ set term /perm /speed=9600 /nomodem /notype /nohang alw
  926. X*`09$ set term /perm /hostsync /pasthru /ttsync /eightbit /nobroad alw
  927. X*`09$ set term /perm /noauto alw
  928. X*`09$ set prot=o:rwlp /dev alw
  929. X*`09$ set device /spooled=(ALW,sys$sysdevice:) alw
  930. X*
  931. X*`09Recommended queue initialize:
  932. X*
  933. X*`09$ initialize/queue/start -
  934. X*`09/default=(noburst,nofeed,noflag,notrailer,form=headers) -
  935. X*`09/separate=(noburst,noflag,trailer) -`20
  936. X*`09/library=laser /form=letter -
  937. +-+-+-+-+-+-+-+-  END  OF PART 1 +-+-+-+-+-+-+-+-
  938.  
  939.