From: MRL@PFC.MIT.EDU (MARK LONDON)
Newsgroups: comp.os.vms
Subject: LASER New (different) LASER symbiont. 5/7
Date: 22 Aug 92 16:23:00 GMT
Distribution: world
Organization: The Internet

-+-+-+-+-+-+-+-+ START OF PART 5 -+-+-+-+-+-+-+-+
X`09`09`09`09`09/ok true def`09% flag keyword found
X`09`09`09`09`09exit`09`09% -forall
X`09`09`09`09`7D `7B
X`09`09`09`09`09pop`09`09% flush failed search
X`09`09`09`09`7D ifelse
X`09`09`7D forall`09`09`09`09% try next array
X`09`09ok not `7B`09`09`09`09% if keyword not found
X`09`09`09ks = (is not a known parameter) = quit
X`09`09`7D if
X`09`09/pindex pindex 2 add def`09`09% advance to next pair
X`09`7D repeat
X`7D def
$ CALL UNPACK PARSER.PS;1 1566019224
$ create 'f'
X% The program below may be downloaded to a LaserWriter to correct three
X% bugs in the LaserWriter's serial I/O driver:
X%
X%   - occasional failure to send a needed XON
X%   - erroneously reading past end-of-file (control-D)
X%   - dropped characters during large volumes of output
X%
X%!
X0000000000                      % the exitserver password
X
Xversion (23.0) ne
X   `7B(Patch not installed -- wrong printer type or version) = stop`7D if
Xstatusdict /Patch1Installed known
X   `7B(Patch already installed -- not installed again) = stop`7D if
Xserverdict begin exitserver
Xstatusdict /Patch1Installed true put
Xcurrentfile eexec
Xce1b9f428ac69e75cc47a554265ae625851e0154ac649ad44c1c34e4c60a0493
Xa80212a3bd61248f8859cb1252a7320775a6d4ec524bcbf5771aceb8f61ea2fb
X48fcb3df8da0f105be40f697239ef0976f92c1d41e915a7389200a3e896cd955
Xd197ff27f22a617c85bce7ed59ef1a6062d01d0fdee5b4e7d298997638497cc6
Xa2d56a0eacc195795949f515bbbda9cfe899e43ad257da93f3144797b00dbb81
X8a41b4fa56a0295c25e693864084cbb5d63834f1d94a46816d4a2cbe005cc57c
X38491a6a34cfbdef303ed8731dbbe84dc6f8e1e790f3d89360d063639c8411fd
X89ad7c53d1b9732bd0942bc36257208d24792ea7c66790b6104c3a2b794a1460
Xc476ffdb5552f428f457b47319cccb0c9980036402eaca80c0b5e0ccb5f579df
X09cc6f382b536aa64da7152356c377a5b708a378e855a7ec3eccd848d5508dbf
X5c7bd28c2899e9cfd7f4ff3d7ddc08006cce42b2d8c59ef64af8ec74a2f9d23f
Xe8d4d03ba1e2686138fffc2af9c662c994ec8065a32144ba9ac5002623b39012
X521eb49cd829c3506af2895bf275367eb4d31908b14f3b1e0abfaca2f98eb9d8
X8d84ac8271ef44def53d8207ce9653d598fe8046120f223bfca0b5c74a54f70b
Xeb5a0bc09d8e79742048b875864a3b489eb91c09b701f506e994271a6640f78a
Xd131f1eef3c96e546f7273fb3533799a6470be2ed3b8f2e211bf9f9f209edbd2
X36c19d4b0b3f28ab16c39faa17070699543c212c76081961c949ebd32ada3c93
Xccdc56c2c940a2061bc11794a0159cc37255aa8c8e7e08d78f204161f1eccb7d
Xad3313b737e921b7df1fe794e9a7fc2226702ee555ceb8e803a20ebeaa440a40
X9e1f1a72412586e3071292b10e938e7f386b8e6516758633bab57223e071b1de
X8c4b73cafababc0af7bc902e8763a2817861591d7ee98f85bc28ad0ea4d13660
Xd3256aa293df1959b7b57b13edee653cfdda2fafe0698898dc5e371ca4c5b72b
Xb92750d0eea5e74955712b06958663f424a46cf75a797590f0d2a36842fe07e3
Xdb459215dab6e461a4c3fbb40ee2499af3fe4b13790de87e11afde6aadd12e77
Xd84d8076146d797269c9188d8fb725898aee284e62c472e0e7b585ef3fed434c
X000b0bb70ad6806e840cfe872ec3f28782dd08b70d29c2da2187e2dc0f13dfc0
X89f75344e3dad78a1c9b909fc72bdd92421afdc8b80850ff0d43605edfd9be56
Xd81cb17250ce7208354548f6ccc62366e8196d4adeb2d24fd5ce47bb6295fa72
Xc361197cafacbd51efd36dfa59c6f8e6cab8915a8043d609eb64726de86080d2
X4118cc69e01eab0f4ef1f364c815f306d5f43420cf7c9316e5ee69c7183dd8d2
X805a9dfe6abb33c46d3a212d5c6b6fd68418eef971
$ CALL UNPACK PATCH.PS;1 141829840
$ create 'f'
X% this is so that spooling to _ps will work.
$ CALL UNPACK PS.PS;1 571683189
$ create 'f'
X%
X% SIDES.PS
X%
X/setdevice`7Bdup where`7Bpop cvx exec`7D`7Bcvx exec`7Difelse`7Ddef
Xstatusdict begin /setduplexmode setdevice /settumble setdevice end
$ CALL UNPACK SIDES.PS;3 1194663645
$ create 'f'
X/***`09smbdef.h -- created from smbdef.mar 12-feb-1987 VMS v 4.4.`20
X*/
X#define`09SMBMSG$K_STRUCTURE_LEVEL`091
X#define`09SMBMSG$K_STRUCTURE_LEVEL_1`091
X#define`09SMBMSG$K_PAUSE_TASK`091
X#define`09SMBMSG$K_RESET_STREAM`092
X#define`09SMBMSG$K_RESUME_TASK`093
X#define`09SMBMSG$K_START_STREAM`094
X#define`09SMBMSG$K_START_TASK`095
X#define`09SMBMSG$K_STOP_STREAM`096
X#define`09SMBMSG$K_STOP_TASK`097
X#define`09SMBMSG$K_TASK_COMPLETE`098
X#define`09SMBMSG$K_TASK_STATUS`099
X#define`09SMBMSG$K_MAX_REQUEST_CODE`0910
X#define`09SMBMSG$S_REQUEST_HEADER`094
X#define`09SMBMSG$W_REQUEST_CODE`090
X#define`09SMBMSG$B_STRUCTURE_LEVEL`092
X#define`09SMBMSG$B_STREAM_INDEX`093
X#define`09SMBMSG$K_ACCOUNTING_DATA`091
X#define`09SMBMSG$K_ACCOUNT_NAME`092
X#define`09SMBMSG$K_AFTER_TIME`093
X#define`09SMBMSG$K_ALIGNMENT_PAGES`094
X#define`09SMBMSG$K_BOTTOM_MARGIN`095
X#define`09SMBMSG$K_CHARACTERISTICS`096
X#define`09SMBMSG$K_CHECKPOINT_DATA`097
X#define`09SMBMSG$K_CONDITION_VECTOR`098
X#define`09SMBMSG$K_DEVICE_NAME`099
X#define`09SMBMSG$K_DEVICE_STATUS`0910
X#define`09SMBMSG$K_ENTRY_NUMBER`0911
X#define`09SMBMSG$K_EXECUTOR_QUEUE`0912
X#define`09SMBMSG$K_FILE_COPIES`0913
X#define`09SMBMSG$K_FILE_COUNT`0914
X#define`09SMBMSG$K_FILE_SETUP_MODULES`0915
X#define`09SMBMSG$K_FIRST_PAGE`0916
X#define`09SMBMSG$K_FORM_LENGTH`0917
X#define`09SMBMSG$K_FORM_NAME`0918
X#define`09SMBMSG$K_FORM_SETUP_MODULES`0919
X#define`09SMBMSG$K_FORM_WIDTH`0920
X#define`09SMBMSG$K_FILE_IDENTIFICATION`0921
X#define`09SMBMSG$K_FILE_SPECIFICATION`0922
X#define`09SMBMSG$K_JOB_COPIES`0923
X#define`09SMBMSG$K_JOB_COUNT`0924
X#define`09SMBMSG$K_JOB_NAME`0925
X#define`09SMBMSG$K_JOB_RESET_MODULES`0926
X#define`09SMBMSG$K_LAST_PAGE`0927
X#define`09SMBMSG$K_LEFT_MARGIN`0928
X#define`09SMBMSG$K_LIBRARY_SPECIFICATION`0929
X#define`09SMBMSG$K_MAXIMUM_STREAMS`0930
X#define`09SMBMSG$K_MESSAGE_VECTOR`0931
X#define`09SMBMSG$K_NOTE`0932
X#define`09SMBMSG$K_PAGE_SETUP_MODULES`0933
X#define`09SMBMSG$K_PARAMETER_1`0934
X#define`09SMBMSG$K_PARAMETER_2`0935
X#define`09SMBMSG$K_PARAMETER_3`0936
X#define`09SMBMSG$K_PARAMETER_4`0937
X#define`09SMBMSG$K_PARAMETER_5`0938
X#define`09SMBMSG$K_PARAMETER_6`0939
X#define`09SMBMSG$K_PARAMETER_7`0940
X#define`09SMBMSG$K_PARAMETER_8`0941
X#define`09SMBMSG$K_PRINT_CONTROL`0942
X#define`09SMBMSG$K_PRIORITY`0943
X#define`09SMBMSG$K_QUEUE`0944
X#define`09SMBMSG$K_REFUSE_REASON`0945
X#define`09SMBMSG$K_RELATIVE_PAGE`0946
X#define`09SMBMSG$K_REQUEST_CONTROL`0947
X#define`09SMBMSG$K_REQUEST_RESPONSE`0948
X#define`09SMBMSG$K_RIGHT_MARGIN`0949
X#define`09SMBMSG$K_SEARCH_STRING`0950
X#define`09SMBMSG$K_SEPARATION_CONTROL`0951
X#define`09SMBMSG$K_STOP_CONDITION`0952
X#define`09SMBMSG$K_TIME_QUEUED`0953
X#define`09SMBMSG$K_TOP_MARGIN`0954
X#define`09SMBMSG$K_UIC`0955
X#define`09SMBMSG$K_USER_NAME`0956
X#define`09SMBMSG$K_MAX_ITEM_CODE`0957
X#define`09SMBMSG$S_ITEM_HEADER`094
X#define`09SMBMSG$W_ITEM_SIZE`090
X#define`09SMBMSG$W_ITEM_CODE`092
X#define`09SMBMSG$S_ACCOUNTING_DATA`0916
X#define`09SMBMSG$L_PAGES_PRINTED`090
X#define`09SMBMSG$l_qio_puts`094
X#define`09SMBMSG$l_rms_gets`098
X#define`09SMBMSG$L_CPU_TIME`0912
X#define`09SMBMSG$S_CHECKPOINT_DATA`0924
X#define`09SMBMSG$B_FILLER`090
X#define`09SMBMSG$B_CHECKPOINT_LEVEL`091
X#define`09SMBMSG$W_OFFSET`092
X#define`09SMBMSG$L_CARCON`094
X#define`09SMBMSG$L_PAGE`098
X#define`09SMBMSG$L_RECORD_NUMBER`0912
X#define`09SMBMSG$S_USER_KEY`098
X#define`09SMBMSG$Q_USER_KEY`0916
X#define`09SMBMSG$M_LOWERCASE`091
X#define`09SMBMSG$M_PAUSE_TASK`092
X#define`09SMBMSG$M_REMOTE`094
X#define`09SMBMSG$M_SERVER`098
X#define`09SMBMSG$M_STALLED`0916
X#define`09SMBMSG$M_STOP_STREAM`0932
X#define`09SMBMSG$M_TERMINAL`0964
X#define`09SMBMSG$M_UNAVAILABLE`09128
X#define`09SMBMSG$S_DEVICE_STATUS`094
X#define`09SMBMSG$L_DEVICE_FLAGS`090
X#define`09SMBMSG$V_LOWERCASE`090
X#define`09SMBMSG$V_PAUSE_TASK`091
X#define`09SMBMSG$V_REMOTE`092
X#define`09SMBMSG$V_SERVER`093
X#define`09SMBMSG$V_STALLED`094
X#define`09SMBMSG$V_STOP_STREAM`095
X#define`09SMBMSG$V_TERMINAL`096
X#define`09SMBMSG$V_UNAVAILABLE`097
X#define`09SMBMSG$M_DOUBLE_SPACE`091
X#define`09SMBMSG$M_PAGE_HEADER`092
X#define`09SMBMSG$M_PAGINATE`094
X#define`09SMBMSG$M_PASSALL`098
X#define`09SMBMSG$M_SEQUENCED`0916
X#define`09SMBMSG$M_SHEET_FEED`0932
X#define`09SMBMSG$M_TRUNCATE`0964
X#define`09SMBMSG$M_WRAP`09128
X#define`09SMBMSG$M_RECORD_BLOCKING`09256
X#define`09SMBMSG$S_PRINT_CONTROL`094
X#define`09SMBMSG$L_PRINT_FLAGS`090
X#define`09SMBMSG$V_DOUBLE_SPACE`090
X#define`09SMBMSG$V_PAGE_HEADER`091
X#define`09SMBMSG$V_PAGINATE`092
X#define`09SMBMSG$V_PASSALL`093
X#define`09SMBMSG$V_SEQUENCED`094
X#define`09SMBMSG$V_SHEET_FEED`095
X#define`09SMBMSG$V_TRUNCATE`096
X#define`09SMBMSG$V_WRAP`097
X#define`09SMBMSG$V_RECORD_BLOCKING`098
X#define`09SMBMSG$M_ALIGNMENT_MASK`091
X#define`09SMBMSG$M_PAUSE_COMPLETE`092
X#define`09SMBMSG$M_RESTARTING`094
X#define`09SMBMSG$M_TOP_OF_FILE`098
X#define`09SMBMSG$S_REQUEST`094
X#define`09SMBMSG$L_REQUEST_FLAGS`090
X#define`09SMBMSG$V_ALIGNMENT_MASK`090
X#define`09SMBMSG$V_PAUSE_COMPLETE`091
X#define`09SMBMSG$V_RESTARTING`092
X#define`09SMBMSG$V_TOP_OF_FILE`093
X#define`09SMBMSG$M_FILE_BURST`091
X#define`09SMBMSG$M_FILE_FLAG`092
X#define`09SMBMSG$M_FILE_TRAILER`094
X#define`09SMBMSG$M_FILE_TRAILER_ABORT`098
X#define`09SMBMSG$M_JOB_FLAG`0916
X#define`09SMBMSG$M_JOB_BURST`0932
X#define`09SMBMSG$M_JOB_RESET`0964
X#define`09SMBMSG$M_JOB_RESET_ABORT`09128
X#define`09SMBMSG$M_JOB_TRAILER`09256
X#define`09SMBMSG$M_JOB_TRAILER_ABORT`09512
X#define`09SMBMSG$M_FIRST_FILE_OF_JOB`091024
X#define`09SMBMSG$M_LAST_FILE_OF_JOB`092048
X#define`09SMBMSG$S_SEPARATION_CONTROL`094
X#define`09SMBMSG$L_SEPARATION_FLAGS`090
X#define`09SMBMSG$V_FILE_BURST`090
X#define`09SMBMSG$V_FILE_FLAG`091
X#define`09SMBMSG$V_FILE_TRAILER`092
X#define`09SMBMSG$V_FILE_TRAILER_ABORT`093
X#define`09SMBMSG$V_JOB_FLAG`094
X#define`09SMBMSG$V_JOB_BURST`095
X#define`09SMBMSG$V_JOB_RESET`096
X#define`09SMBMSG$V_JOB_RESET_ABORT`097
X#define`09SMBMSG$V_JOB_TRAILER`098
X#define`09SMBMSG$V_JOB_TRAILER_ABORT`099
X#define`09SMBMSG$V_FIRST_FILE_OF_JOB`0910
X#define`09SMBMSG$V_LAST_FILE_OF_JOB`0911
$ CALL UNPACK SMBDEF.H;1 139502730
$ create 'f'
X%Note: Append this file to the beginning of any
X%      PostScript file to print selected pages.
X%      This takes advantage of a bug in PostScript
X%      that may (or may not be) fixed anytime soon.
X%      Please send improvements to shtodd@vassar.edu. Thanks.
X
X%1 2`09`09%Uncomment to print selected (startpage, endpage)
X
X/selbool false def count 2 eq`7B/endpage exch def /startpage exch def
X/selbool true def`7Dif
X/origshowpage /showpage load def /pagenum (00000) def
X/showpage
X`09`7Buserdict begin /x 0 def /y 0 def
X`09/pagenumadd pagenum cvi 1 add =string cvs def
X`09/i pagenum cvi 1 add def
X`09pagenumadd length 5 exch sub`7Bpagenum x (0) 0 get put /x x 1 add def`7Dr
Vepeat
X`09pagenumadd length`7Bpagenum x pagenumadd y get put /x x 1 add def /y y 1
V add def`7D
X         repeat
X`09selbool`7Bi startpage ge i endpage le and
X`09`7Borigshowpage i endpage eq `7B(stop) = stop`7D if`7D
X`09`7Berasepage`7Difelse`7D`7Borigshowpage`7Difelse
X`09end`7Ddef
X%%End
$ CALL UNPACK STARTEND.PS;13 1902142474
$ create 'f'
X$`09set noon
X$`09Run sys$system:latcp
Xcreate port lta337: /nolog
Xset port lta337: /application /node=ds1705 /port=alw37
X$!
X$`09define/system/exec LP37 LTA337: ! Laser Logical Assignment
X$!
X$`09set prot=o:rwlp /dev LTA337:
X$`09set term /perm /unknown /speed=9600 /nomodem /nowrap /nohang LTA337:
X$`09set term /perm /nohostsync /pasthru /ttsync /eightbit /nobroad LTA337:
X$`09set term /perm /noauto /nolinedit /noform /tab /notype /hard LTA337:
X$!
X$`09set device /spooled=(P37,sys$sysdevice) LTA337:
X$!
X$`09if f$trnlnm("LASER$FORM") .nes. "" then goto start_queue
X$!
X$`09define /form POST 32 /stock=default
X$`09define /form ZETA 33 /stock=default /setup=zeta
X$`09define /form LETTER 34 /stock=default /setup=headers_str
X$`09define /form LANDSCAPE 36 /stock=default /setup=headers_str
X$`09define /form HEADERS 37 /stock=default /setup=headers_str
X$`09define /form BITIMAGE 39 /stock=default /setup=bitimage_hex
X$`09define /form PAINT 41 /stock=default /setup=paint_hex
X$`09define /form 2UP 42 /stock=default /setup=headers_str
X$       define /system LASER$FORM "defined"
X$start_queue:
X$`09initialize/queue/start -
X`09/default=(noburst,nofeed,noflag,notrailer,form=letter) -
X`09/separate=(noburst,noflag,notrailer)/prot=(o:rwed) -`20
X`09/library=laser /form=letter -
X`09/processor=laser /on=LTA337: P37
$ CALL UNPACK SYST.COM;4 1481927713
$ create 'f'
X/* t2ps header file @(#)tek.h`091.10 (Copyright) Michael Fischbein */
X/* Copyright 1987 Michael Fischbein.  Commercial reproduction prohibited; */
X/* non-profit reproduction and distribution encouraged. */
X#define XDIM 4096
X#define YDIM 3120
X
X#define FALSE 0
X#define TRUE (`7EFALSE)
X
X/* 4014 modes */
X#define ALPHA 0
X#define GRAPH 1
X#define INCRE 2
X#define LCEMD 3
X#define PTPLT 4
X
X/* type sizes (char/line, or lines/page)  (for 12bit) */
X#define CHUGEX 55
X#define CLARGEX 51
X#define CMEDX 34
X#define CSMALLX 31
X#define CHUGEY 89
X#define CLARGEY 82
X#define CMEDY 54
X#define CSMALLY 49
X
X/* ASCII */
X#define NUL 0
X#define SOH 1
X#define STX 2
X#define ETX 3
X#define EOT 4
X#define ENQ 5
X#define ACK 6
X#define BEL 7
X#define BS  8
X#define HT  9
X#define LF  10
X#define VT  11
X#define FF  12
X#define NL  13
X#define CR  13
X#define SO  14
X#define SI  15
X#define DLE 16
X#define DC1 17
X#define DC2 18
X#define DC3 19
X#define DC4 20
X#define NAK 21
X#define SYN 22
X#define ETB 23
X#define CAN 24
X#define EM  25
X#define SUB 26
X#define ESC 27
X#define FS  28
X#define GS  29
X#define RS  30
X#define US  31
X#define SPACE 32
X#define DEL 127
X
$ CALL UNPACK TEK.H;4 608008207
$ create 'f'
X#include <stdio.h>
X#include <ctype.h>
X#include <iodef.h>
X#include "tek.h"
Xextern short laserchan;`09`09/* laserwriter channel */
Xextern int iocount;
X#define WRITELASER(p1) orsz += p1; if (orsz > 1536 - 64) `7Bstat = \
Xsys$qiow(0,laserchan, IO$_WRITEPBLK, 0, 0, 0, obuf, orsz, 0, 0, 0, 0);\
Xcheckstat(stat,"writelaser"); iocount++; orsz = 0;`7D
X
Xextern double atof();
X
X/* output filter for tektronics 4010-graphics files to generate postscript
X * files.  This does a simple-minded byte by byte translation to predefined
X * PS routines, contained in a prolog file.
X * Defaults:
X * input:`09stdin
X * output:`09stdout
X * prolog:`09`7Emsf/tek2ps/pstek.pro
X */
X
Xtek2ps(ibuf,obuf,rsz)
X  char *ibuf;
X  char *obuf;
X  int *rsz;
X`7B
X  static int mode = ALPHA,tsizex = CHUGEX,tsizey = CHUGEY,oldmode;
X  static int ncx,ncy,cx = 0,cy = YDIM - CHUGEY,leftmargin = 0;
X  static int used_large = FALSE,used_med = FALSE,used_small = FALSE;
X  static int num_vector = -1,i;
X  static int HiX = 0,HiY = 0,LoY = 0,LoX = 0,BX = 0,BY = 0;
X  static int gotLoY = FALSE,debug = FALSE,beamon,pr_on_er = TRUE;
X  static double scale_factor = 1.0;
X  static char c; static int tekdata = FALSE;
X  static int stat, orsz;
X
X  if (*rsz == -1)
X  `7B
X    mode = ALPHA,tsizex = CHUGEX,tsizey = CHUGEY; tekdata = FALSE;
X    cx = 0,cy = YDIM - CHUGEY,leftmargin = 0;
X    used_large = FALSE,used_med = FALSE,used_small = FALSE;
X    num_vector = -1;
X    HiX = 0,HiY = 0,LoY = 0,LoX = 0,BX = 0,BY = 0;
X    gotLoY = FALSE,debug = FALSE,pr_on_er = TRUE;
X    scale_factor = 1.0;
X    orsz = 0;
X  `7D
X
X  for (i = 0; i < *rsz; i++)
X  `7B
X    c = ibuf`5Bi`5D;`20
X    switch (mode)
X    `7B
X      case ALPHA:
X`09if (isgraph((char) c))
X`09`7B`09`09`09/* normal printing char */
X`09  /* put char at current position */
X`09  sprintf(&obuf`5Borsz`5D,"(%c) %d %d PR\n",(char) c,cx,cy);
X`09  WRITELASER(strlen(&obuf`5Borsz`5D));
X`09  tekdata = TRUE;
X
X`09  /* increment current postion, wrt type size */
X`09  if ((cx += tsizex) > XDIM)
X`09  `7B
X`09    /* new line or margin */
X`09    if ((cy -= tsizey) < 0)
X`09    `7B
X`09      cy = YDIM - tsizey;
X`09      leftmargin = leftmargin ? 0 : XDIM / 2;
X`09    `7D
X`09    cx = leftmargin;
X`09  `7D
X`09`7D
X`09else
X`09`7B`09`09`09/* isn't normal printing character */
X`09  switch (c)
X`09  `7B
X`09    case (HT):
X`09    case (SPACE):
X`09      if ((cx += tsizex) > XDIM)
X`09      `7B
X`09`09/* new line or margin */
X`09`09if ((cy -= tsizey) < 0)
X`09`09`7B
X`09`09  cy = YDIM - tsizey;
X`09`09  leftmargin = leftmargin ? 0 : XDIM / 2;
X`09`09`7D
X`09`09cx = leftmargin;
X`09      `7D
X`09      break;
X
X`09    case (CR):
X`09    case (LF):
X`09      if ((cy -= tsizey) < 0)
X`09      `7B
X`09`09cy = YDIM - tsizey;
X`09`09leftmargin = leftmargin ? 0 : XDIM / 2;
X`09      `7D
X`09      cx = leftmargin;
X`09      break;
X
X`09    case (BS):
X`09      if ((cx -= tsizex) < 0)
X`09      `7B
X`09`09cx = XDIM;
X`09      `7D
X`09      break;
X
X`09    case (VT):
X`09      if ((cy += tsizey) > YDIM)
X`09      `7B
X`09`09cy = 0;
X`09      `7D
X`09      break;
X
X`09    case (GS):
X`09      mode = GRAPH;
X`09      num_vector = -1;
X`09      break;
X
X`09    case (RS):
X`09      mode = INCRE;
X`09      break;
X
X`09    case (FS):
X`09      mode = PTPLT;
X`09      break;
X
X`09    case (US):`09`09/* put in ALPHA mode, already there */
X`09    case (BEL):
X`09    case (SYN):`09/* padding character, ignore*/
X`09    case (NUL):`09/* padding character, ignore*/
X`09      break;
X
X`09    case (ESC):
X`09      oldmode = ALPHA;
X`09      mode = LCEMD;
X`09      break;
X
X`09    case (FF):`09`09/* erase */
X`09      if (pr_on_er && (cx `7C`7C cy != YDIM - tsizey) && tekdata)
X`09      `7B
X`09`09sprintf(&obuf`5Borsz`5D,"showpage\nNP\n");
X`09`09WRITELASER(strlen(&obuf`5Borsz`5D));
X                tekdata = FALSE;
X`09`09if (scale_factor != 1.0)
X`09`09`7B
X`09`09  sprintf(&obuf`5Borsz`5D,"%f %f scale\n",scale_factor,scale_factor);
X`09`09`7D
X`09      `7D
X`09      pr_on_er = TRUE;
X`09      if (cx `7C`7C cy != YDIM - tsizey) `7B
X`09`09      sprintf(&obuf`5Borsz`5D,"%d DP\n",tsizey);
X`09`09      WRITELASER(strlen(&obuf`5Borsz`5D));
X`09      `7D
X`09      cx = 0;
X`09      cy = YDIM - tsizey;
X`09      break;
X
X`09    default:
X`09      if (debug) fprintf(stderr,"Unknown ALPHA mode character 0x%02x\n",c
V);
X`09      break;
X`09  `7D`09`09`09/* end of switch on non-printing char in ALPHA mode */
X`09`7D`09`09`09/* end of printing vs non-printing char in ALPHA mode */
X`09break;`09`09`09/* end of ALPHA mode */
X
X      case PTPLT:
X      case GRAPH:
X`09oldmode = mode;
X`09if ((char) c > US)
X`09`7B`09`09`09/* first, handle vector case */
X`09  if ((char) c < '@')
X`09  `7B`09`09`09/* High byte */
X`09    if (gotLoY)
X`09    `7B`09`09`09/* must be HiX */
X`09      HiX = ((char) c & 0x1f) << 7;
X`09    `7D
X`09    else
X`09    `7B`09`09`09/* must be HiY */
X`09      HiY = ((char) c & 0x1f) << 7;
X`09    `7D
X`09  `7D
X`09  else if ((char) c < '`60')
X`09  `7B`09`09`09/* Lo X: plot */
X`09    gotLoY = FALSE;
X`09    LoX = (c & 0x1f) << 2;
X`09    /* now actually do a plot */
X`09    if (num_vector == -1)
X`09    `7B
X`09      num_vector = 0;
X`09      ncx = HiX + LoX + BX;
X`09      ncy = HiY + LoY + BY;
X`09      if (mode != GRAPH)
X`09      `7B
X`09`09sprintf(&obuf`5Borsz`5D,"%d %d m\n",ncx,ncy);
X`09`09WRITELASER(strlen(&obuf`5Borsz`5D));
X`09      `7D
X`09      cx = ncx;
X`09      cy = ncy;
X`09    `7D
X`09    else
X`09    `7B`09`09`09/* draw the line */
X              if (num_vector > 99) `7B
X`09        sprintf(&obuf`5Borsz`5D,"%d %d %d v\n",num_vector,ncx,ncy);
X                WRITELASER(strlen(&obuf`5Borsz`5D));
X                num_vector = 0;
X              `7D
X`09      num_vector++;
X`09      ncx = HiX + LoX + BX;
X`09      ncy = HiY + LoY + BY;
X`09      if (mode == GRAPH)
X`09      `7B
X`09`09sprintf(&obuf`5Borsz`5D,"%d %d\n",cx - ncx,cy - ncy);
X`09`09WRITELASER(strlen(&obuf`5Borsz`5D));
X`09      `7D
X`09      else
X`09      `7B`09`09`09/* mode == PTPLT */
X`09`09sprintf(&obuf`5Borsz`5D,"%d %d m %d %d 1 0 360 arnc\n",ncx,ncy,ncx,ncy
V);
X`09`09WRITELASER(strlen(&obuf`5Borsz`5D));
X`09      `7D
X       `09      tekdata = TRUE;
X`09      cx = ncx;
X`09      cy = ncy;
X`09    `7D
X`09  `7D
X`09  else
X`09  `7B`09`09`09/* Lo Y or extra byte */
X`09    if (gotLoY)
X`09    `7B`09`09`09/* previous LoY => extra byte */
X`09      BX = (LoY & 0x0c) >> 2;
X`09      BY = (LoY & 0x30) >> 4;
X`09      LoY = (c & 0x1f) << 2;
X`09      /* gotLoY stays TRUE */
X`09    `7D
X`09    else
X`09    `7B`09`09`09/* assume is LoY */
X`09      LoY = (c & 0x1f) << 2;
X`09      gotLoY = TRUE;
X`09    `7D
X`09  `7D
X`09`7D
X`09else`09`09`09/* end of GRAPH mode vector address parsing*/
X`09  /* so, it isn't a vector address */
X`09  switch (c)
X`09  `7B
X`09    case (NUL):`09/* padding */
X`09    case (SYN):`09/* padding */
X`09    case (BEL):`09/* ignore */
X`09      break;
X
X`09    case (LF):  /* ignore */
X`09      break;
X
X`09    case (CR):
X`09      mode = ALPHA;
X`09      leftmargin = 0;
X`09      break;
X
X`09    case (RS):
X`09      mode = INCRE;
X`09      break;
X
X`09    case (FS):
X`09      if (debug) fprintf(stderr,"special point plot not implemented\n");
X`09      break;
X
X`09    case (GS):
X`09      if (num_vector >= 0)
X`09      `7B
X`09`09if (mode == GRAPH)
X`09`09`09if (num_vector > 0)
X`09`09       `09`09sprintf(&obuf`5Borsz`5D,"%d %d %d v\n",num_vector,ncx,ncy
V);
X`09`09`09else
X`09`09`09`09sprintf(&obuf`5Borsz`5D,"%d %d m\n",ncx,ncy);
X                else
X `09`09`09sprintf(&obuf`5Borsz`5D,"s\n");
X`09`09WRITELASER(strlen(&obuf`5Borsz`5D));
X`09      `7D
X`09      num_vector = -1;
X`09      break;
X
X`09    case (US):
X`09      mode = ALPHA;
X`09      break;
X
X`09    case (ESC):
X`09      mode = LCEMD;
X`09      break;
X
X`09    default:
X`09      if (debug) fprintf(stderr,"Unknown GRAPH mode character 0x%02x\n",c
V);
X`09      break;
X`09  `7D`09`09`09/* end of switch on non-vector char in GRAPH mode */
X`09if (mode != oldmode && num_vector >= 0)
X        `7B
X`09`09if (oldmode == GRAPH)
X`09`09`09if (num_vector > 0)
X`09`09       `09`09sprintf(&obuf`5Borsz`5D,"%d %d %d v\n",num_vector,ncx,ncy
V);
X`09`09`09else
X`09`09`09`09sprintf(&obuf`5Borsz`5D,"%d %d m\n",ncx,ncy);
X                else
X                        sprintf(&obuf`5Borsz`5D,"s\n");`20
X                WRITELASER(strlen(&obuf`5Borsz`5D));
X`09`09num_vector = -1;
X`09`7D
X`09break;`09`09`09/* end of GRAPH mode */
X
X      case INCRE:
X`09/* could do with bit masking and check for control, */
X`09/* but this is is simpler. (Let the compiler work). */
X`09switch (c)
X`09`7B
X`09  case (32):
X`09    sprintf(&obuf`5Borsz`5D,"stroke %d %d m\n",cx,cy);
X`09    WRITELASER(strlen(&obuf`5Borsz`5D));
X`09    beamon = FALSE;
X`09    break;
X
X`09  case (80):
X`09    sprintf(&obuf`5Borsz`5D,"%d %d m\n",cx,cy);
X`09    WRITELASER(strlen(&obuf`5Borsz`5D));
X`09    beamon = TRUE;
X`09    break;
X
X`09  case (68):`09`09/* N */
X`09    if (++cy > YDIM) cy = YDIM;
X`09    if (beamon) sprintf(&obuf`5Borsz`5D,"%d %d lineto\n",cx,cy);
X`09    if (beamon) WRITELASER(strlen(&obuf`5Borsz`5D));
X`09    break;
X
X`09  case (69):`09`09/* NE */
X`09    if (++cy > YDIM) cy = YDIM;
X`09    if (++cx > XDIM) cx = XDIM;
X`09    if (beamon) sprintf(&obuf`5Borsz`5D,"%d %d lineto\n",cx,cy);
X`09    if (beamon) WRITELASER(strlen(&obuf`5Borsz`5D));
X`09    break;
X
X`09  case (65):`09`09/* E */
X`09    if (++cx > XDIM) cx = XDIM;
X`09    if (beamon) sprintf(&obuf`5Borsz`5D,"%d %d lineto\n",cx,cy);
X`09    if (beamon) WRITELASER(strlen(&obuf`5Borsz`5D));
X`09    break;
X
X`09  case (73):`09`09/* SE */
X`09    if (--cy < 0) cy = 0;
X`09    if (++cx > XDIM) cx = XDIM;
X`09    if (beamon) sprintf(&obuf`5Borsz`5D,"%d %d lineto\n",cx,cy);
X`09    if (beamon) WRITELASER(strlen(&obuf`5Borsz`5D));
X`09    break;
X
X`09  case (72):`09`09/* S */
X`09    if (--cy < 0) cy = 0;
X`09    if (beamon) sprintf(&obuf`5Borsz`5D,"%d %d lineto\n",cx,cy);
X`09    if (beamon) WRITELASER(strlen(&obuf`5Borsz`5D));
X`09    break;
X
X`09  case (74):`09`09/* SW */
X`09    if (--cy < 0) cy = 0;
X`09    if (--cx < 0) cx = 0;
X`09    if (beamon) sprintf(&obuf`5Borsz`5D,"%d %d lineto\n",cx,cy);
X`09    if (beamon) WRITELASER(strlen(&obuf`5Borsz`5D));
X`09    break;
X
X`09  case (66):`09`09/* W */
X`09    if (--cx < 0) cx = 0;
X`09    if (beamon) sprintf(&obuf`5Borsz`5D,"%d %d lineto\n",cx,cy);
X`09    if (beamon) WRITELASER(strlen(&obuf`5Borsz`5D));
X`09    break;
X
X`09  case (70):`09`09/* NW */
X`09    if (++cy > YDIM) cy = YDIM;
X`09    if (--cx < 0) cx = 0;
X`09    if (beamon) sprintf(&obuf`5Borsz`5D,"%d %d lineto\n",cx,cy);
X`09    if (beamon) WRITELASER(strlen(&obuf`5Borsz`5D));
X`09    break;
X
X`09  case (ESC):
X`09    if (beamon) sprintf(&obuf`5Borsz`5D,"stroke %d %d m\n",cx,cy);
X`09    if (beamon) WRITELASER(strlen(&obuf`5Borsz`5D));
X`09    oldmode = INCRE;
X`09    mode = LCEMD;
X`09    break;
X
X`09  case (FS):
X`09    if (beamon) sprintf(&obuf`5Borsz`5D,"stroke %d %d m\n",cx,cy);
X`09    if (beamon) WRITELASER(strlen(&obuf`5Borsz`5D));
X`09    mode = PTPLT;
X`09    break;
X
X`09  case (GS):
X`09    if (beamon) sprintf(&obuf`5Borsz`5D,"stroke %d %d m\n",cx,cy);
X`09    if (beamon) WRITELASER(strlen(&obuf`5Borsz`5D));
X`09    mode = GRAPH;
X`09    num_vector = -1;
X`09    break;
X
X`09  case (RS):
X`09    break;
X
X`09  case (US):
X`09    if (beamon) sprintf(&obuf`5Borsz`5D,"stroke %d %d m\n",cx,cy);
X`09    if (beamon) WRITELASER(strlen(&obuf`5Borsz`5D));
X`09    mode = ALPHA;
X`09    break;
X
X`09  default:
X`09    if (debug) fprintf(stderr,"Unknown incremental mode character 0x%02x\
Vn",c);
X`09    break;
X`09`7D`09`09`09/* end of INCR switch on c */
X`09break;`09`09`09/* end of INCREmental mode */
X
X      case LCEMD:
X`09if ((c > 95) && (c < 117))
X`09`7B
X`09  /* set Z axis */
X`09  if ((char) c & 0x08)
X`09  `7B
X`09    sprintf(&obuf`5Borsz`5D,"DZ\n");
X`09  `7D
X`09  else
X`09  `7B
X`09    sprintf(&obuf`5Borsz`5D,"FZ\n");
X`09  `7D
X`09  WRITELASER(strlen(&obuf`5Borsz`5D));
X`09  /* set vector type */
X`09  switch ((char) c & 0x07)
X`09  `7B
X`09    case 0:`09`09/* normal vectors */
X`09    case 5:
X`09    case 6:
X`09    case 7:
X`09      sprintf(&obuf`5Borsz`5D,"NV\n");
X`09      WRITELASER(strlen(&obuf`5Borsz`5D));
X`09      break;
X
X`09    case 1:`09`09/* dotted vectors */
X`09      sprintf(&obuf`5Borsz`5D,"DV\n");
X`09      WRITELASER(strlen(&obuf`5Borsz`5D));
X`09      break;
X
X`09    case 2:`09`09/* dot-dash vectors */
X`09      sprintf(&obuf`5Borsz`5D,"DDV\n");
X`09      WRITELASER(strlen(&obuf`5Borsz`5D));
X`09      break;
X
X`09    case 3:`09`09/* short-dash vectors */
X`09      sprintf(&obuf`5Borsz`5D,"SDV\n");
X`09      WRITELASER(strlen(&obuf`5Borsz`5D));
X`09      break;
X
X`09    case 4:`09`09/* long-dash vectors */
X`09      sprintf(&obuf`5Borsz`5D,"LDV\n");
X`09      WRITELASER(strlen(&obuf`5Borsz`5D));
X`09      break;
X
X`09    default:`09`09/* error */
X`09      if (debug) fprintf(stderr,"Unknown beam selector 0x%02x\n",(char) c
V);
X`09      break;
X`09  `7D
X`09`7D
X`09else
X`09`7B
X`09  switch (c)
X`09  `7B
X`09    case (FF):`09`09/* erase */
X`09      if (pr_on_er && (cx `7C`7C cy != YDIM - tsizey) && tekdata)
X`09      `7B
X`09`09if (num_vector >= 0) `7B
X`09`09  if (oldmode == GRAPH)
X`09`09`09if (num_vector > 0)
X`09`09       `09`09sprintf(&obuf`5Borsz`5D,"%d %d %d v\n",num_vector,ncx,ncy
V);
X`09`09`09else
X`09`09`09`09sprintf(&obuf`5Borsz`5D,"%d %d m\n",ncx,ncy);
X                  else
X                    sprintf(&obuf`5Borsz`5D,"s\n");`20
X                  num_vector = -1;
X                  WRITELASER(strlen(&obuf`5Borsz`5D));
X                `7D
X`09`09sprintf(&obuf`5Borsz`5D,"showpage\nNP\n");
X`09`09WRITELASER(strlen(&obuf`5Borsz`5D));
X                tekdata = FALSE;
X`09`09if (scale_factor != 1.0)
X`09`09`7B
X`09`09  sprintf(&obuf`5Borsz`5D,"%f %f scale\n",scale_factor,scale_factor);
X`09`09  WRITELASER(strlen(&obuf`5Borsz`5D));
X`09`09`7D
X`09      `7D
X`09      pr_on_er = TRUE;
X`09      if (cx `7C`7C cy != YDIM - tsizey) `7B
X`09`09      sprintf(&obuf`5Borsz`5D,"%d DP\n",tsizey);
X`09`09      WRITELASER(strlen(&obuf`5Borsz`5D));
X`09      `7D
X`09      cx = 0;
X`09      cy = YDIM - tsizey;
X`09      break;
X
X`09    case ('8'):
X`09      /* default size */
X`09      sprintf(&obuf`5Borsz`5D,"FntH setfont\n");
X`09      WRITELASER(strlen(&obuf`5Borsz`5D));
X`09      tsizex = CHUGEX;
X`09      tsizey = CHUGEY;
X`09      break;
X
X`09    case ('9'):
X`09      if (!used_large)
X`09      `7B
X`09`09used_large = TRUE;
X`09`09sprintf(&obuf`5Borsz`5D,"DFntL\n");
X`09`09WRITELASER(strlen(&obuf`5Borsz`5D));
X`09      `7D
X`09      sprintf(&obuf`5Borsz`5D,"FntL setfont\n");
X`09      WRITELASER(strlen(&obuf`5Borsz`5D));
X`09      tsizex = CLARGEX;
X`09      tsizey = CLARGEY;
X`09      break;
X
X`09    case (':'):
X`09      tsizex = CMEDX;
X`09      tsizey = CMEDY;
X`09      if (!used_med)
X`09      `7B
X`09`09used_med = TRUE;
X`09`09sprintf(&obuf`5Borsz`5D,"DFntM\n");
X`09`09WRITELASER(strlen(&obuf`5Borsz`5D));
X`09      `7D
X`09      sprintf(&obuf`5Borsz`5D,"FntM setfont\n");
X`09      WRITELASER(strlen(&obuf`5Borsz`5D));
X`09      break;
X
X`09    case (';'):
X`09      tsizex = CSMALLX;
X`09      tsizey = CSMALLY;
X`09      if (!used_small)
X`09      `7B
X`09`09used_small = TRUE;
X`09`09sprintf(&obuf`5Borsz`5D,"DFntS\n");
X`09`09WRITELASER(strlen(&obuf`5Borsz`5D));
X`09      `7D
X`09      sprintf(&obuf`5Borsz`5D,"FntS setfont\n");
X`09      WRITELASER(strlen(&obuf`5Borsz`5D));
X`09      break;
X
X`09    case (BS):
X`09      if ((cx -= tsizex) < 0)
X`09      `7B
X`09`09cx = XDIM;
X`09      `7D
X`09      break;
X
X`09    case (HT):
X`09    case (SPACE):
X`09      if ((cx += tsizex) > XDIM)
X`09      `7B
X`09`09/* new line or margin */
X`09`09if ((cy -= tsizey) < 0)
X`09`09`7B
X`09`09  cy = YDIM - tsizey;
X`09`09  leftmargin = leftmargin ? 0 : XDIM / 2;
X`09`09`7D
X`09`09cx = leftmargin;
X`09      `7D
X`09      break;
X
X`09    case (VT):
X`09      if ((cy += tsizey) > YDIM)
X`09      `7B
X`09`09cy = 0;
X`09      `7D
X`09      break;
X
X`09    case (GS):
X`09      mode = GRAPH;
X`09      num_vector = -1;
X`09      break;
X
X`09    case (LF):
X`09    case (CR):
X`09    case (DEL):
X`09    case (NUL):
X`09    case (ESC):
X`09    case (BEL):
X`09    case (SYN):
X`09      /*`09      ungetc((char) ESC,infile);           */
X`09      break;
X
X`09    case (ETB):`09/* make copy: print & start new page */
X`09      if (pr_on_er)
X`09      `7B
X`09`09if (cx `7C`7C cy != YDIM - tsizey && tekdata) `7B
X`09`09`09if (num_vector >= 0) `7B
X`09`09  `09  if (oldmode == GRAPH)
X`09`09`09    if (num_vector > 0)
X`09`09       `09      sprintf(&obuf`5Borsz`5D,"%d %d %d v\n",num_vector,ncx,
Vncy);
X`09`09`09    else
X`09`09`09      sprintf(&obuf`5Borsz`5D,"%d %d m\n",ncx,ncy);
X                  `09  else
X                    `09    sprintf(&obuf`5Borsz`5D,"s\n");`20
X                  `09  num_vector = -1;
X`09`09`09  WRITELASER(strlen(&obuf`5Borsz`5D));
X                `09`7D
X`09`09`09sprintf(&obuf`5Borsz`5D,"showpage\nNP\n");
X`09`09`09WRITELASER(strlen(&obuf`5Borsz`5D));
X                        tekdata = FALSE;
X`09`09`09if (scale_factor != 1.0)
X`09`09`09`7B
X`09`09`09`09sprintf(&obuf`5Borsz`5D,"%f %f scale\n",scale_factor,scale_facto
Vr);
X`09`09`09`09WRITELASER(strlen(&obuf`5Borsz`5D));
X`09`09`09`7D
X`09`09`7D
X`09`09cx = 0;
X`09`09cy = YDIM - tsizey;
X`09      `7D
X`09      else
X`09      `7B
X`09`09sprintf(&obuf`5Borsz`5D,"copypage\n");
X`09`09WRITELASER(strlen(&obuf`5Borsz`5D));
X`09      `7D
X`09      break;
X
X`09    case (SO):
X`09    case (SI):
X`09      if (debug) fprintf(stderr,"No alternate character set implemented\n
V");
X`09      break;
X
X`09    case (CAN):
X`09    case (SUB):
X`09    case (ENQ):
X`09      if (debug) fprintf(stderr,"GIN and BYPASS  modes not implemented\n"
V);
X`09      break;
X
X`09    case ('?'):
X`09      /*`09      ungetc((char) DEL,infile);        */
X`09      break;
X
X`09    default:
X`09      if (debug) fprintf(stderr,"Unknown LCE mode character 0x%02x ignore
Vd\n",c);
X`09      break;
X`09  `7D`09`09`09/* end of LCE mode switch */
X`09`7D
X`09mode = oldmode;
X`09break;
X
X      default:
X`09if (debug) fprintf(stderr,"Unknown major mode %d\n",mode);
X`09break;
X    `7D`09`09`09`09/* end of mode switch */
X  `7D`09`09`09`09/* end of main input loop */
X  if (!cx && cy == YDIM - tsizey) `7B
X    *rsz = -1;
X    if (orsz) `7B
X      stat = sys$qiow(0,laserchan, IO$_WRITEPBLK, 0, 0, 0, obuf, orsz, 0, 0,
V 0, 0);
X      checkstat(stat,"writelaser"); iocount++; orsz = 0;
X    `7D
X  `7D
X`7D
$ CALL UNPACK TEK2PS.C;53 1127330913
$ create 'f'
X% TEK2PS prolog file
X
X% Font definitions (make 3/4 functions to avoid scaling if not needed)
X/FntH /Courier findfont 80 scalefont def
X/DFntL `7B /FntL /Courier findfont 73.4 scalefont def `7D def
X/DFntM `7B /FntM /Courier findfont 50.2 scalefont def `7D def
X/DFntS `7B /FntS /Courier findfont 44 scalefont def `7D def
X
X% tektronix line styles
X/NV `7B `5B`5D 0 setdash `7D def`09% normal vectors
X/DV `7B `5B8`5D 0 setdash `7D def`09% dotted vectors
X/DDV `7B `5B8 8 32 8`5D 0 setdash `7D def`09% dot-dash vectors
X/SDV `7B `5B32 8`5D 0 setdash `7D def`09% short-dash vectors
X/LDV `7B `5B64 8`5D 0 setdash `7D def`09% long-dash vectors
X
X/PR`09% char x y -> -  prints character
X`7B`09moveto show `7D def
X
X% The following values create a page with the following margins:
X% right 10.62 left .38 top .35 bottom 8.15 (inches).
X% These were selected to conform with QMS printers, which selected
X% the values to emulate a true TEK4014.  My QMS printers don't print
X% in portrait mode, so those values were selected to conform with
X% DEC'S own CPS software.  MRL
X/mx  586  def
X/my  27 def
X/rot 90 def
X/sc .18 def
Xcurrentdict /lw known not `7B/lw 1.5 def`7D if
X
X% thin and thick lines
X/DZ `7B lw setlinewidth `7D def
X/FZ `7B lw 2.0 mul setlinewidth `7D def
X
X/portrait
X`7B
X/mx  20  def
X/my  333 def
X/rot 0 def
X/sc .13876 def
X`7D def
X
X/NP`09% - -> - new page
X% change default scale and orentation to match tek's
+-+-+-+-+-+-+-+-  END  OF PART 5 +-+-+-+-+-+-+-+-

Newsgroups: comp.os.vms