809 lines
27 KiB
Plaintext
809 lines
27 KiB
Plaintext
!CLPARS.TEC V2.3 14-May-2004 Tom Almy, Pete Siemsen, and Mark Henderson!
|
||
|
||
!+***************************************************************************
|
||
This macro is the imbedded command-line parsing macro for TECOC. It
|
||
was created by extracting the imbedded command-line parsing macro from the
|
||
TECO-11 executable file and then modifying it.
|
||
|
||
This macro is compiled into TECO-C. This is the human-readable
|
||
source code. To compress it (remove comments, extra whitespace, etc.)
|
||
into an unreadable version in file CLPARS.TEC, do the following command
|
||
with a working TECO:
|
||
|
||
mung squ clpars.tec=clpars.tes/d:n/l:y/b:y/t:n/c:+/w:n/a:y/e:n
|
||
|
||
Then run genclp to convert CLPARS.TEC into CLPARS.H, a C include file.
|
||
|
||
Notes:
|
||
|
||
1. On entry, Q1 contains a value
|
||
|
||
2. Bits in Q-register 1 have the following meanings:
|
||
|
||
1 /VTEDIT
|
||
2 /INSPECT
|
||
4 /NOMEMORY
|
||
8 /FIND
|
||
16 /SEEALL
|
||
32 /HOLD
|
||
64 /NOPAGE
|
||
128 /SCROLL
|
||
256 /NOCREATE
|
||
512 /NORENAME
|
||
1024 unused
|
||
2048 input file is open
|
||
4096 /NOINI
|
||
8192 force setting of filespec memory
|
||
16384 input filename is in edit buffer
|
||
32768 ???
|
||
|
||
3. Q-register 2 holds numeric argument of /SCROLL:n switch
|
||
|
||
4. Q-register Y holds the command-line option character, which
|
||
is a slash on most systems, and a dash under Unix.
|
||
|
||
5. Q-register .T holds a macro which is needed only when the :EGMEM
|
||
command isn't supported. It generates (in q-register F) the
|
||
name of a file that holds filename memory.
|
||
|
||
6. Q-register F holds the name of the file used to save file names.
|
||
|
||
7. Q-register 4 holds the line number to go to.
|
||
|
||
****************************************************************************!
|
||
|
||
!+ save the q-registers that we'll be changing !
|
||
[F0,0XF
|
||
[90,0X9
|
||
[00,0X0
|
||
[20,0X2
|
||
10U0[0 !+ radix 10 !
|
||
U0[00 !+ case independent searching !
|
||
EDU0[0ED&4ED !+ turn on automatic memory expansion !
|
||
EUU0[0-1EU !+ no case flagging on typeout !
|
||
ESU0[00ES !+ no typeout after searches !
|
||
ETU0[032768#32#8#1,0ET !+ ^C trap, read nowait and noecho, image typeout !
|
||
Q1U0 !+ Q0 = Q1 !
|
||
0U1[1
|
||
0,0X1
|
||
0U4
|
||
(-1EJ-25600)*(-1EJ-25858)"E !+ if Unix or Linux !
|
||
^^-UY !+ Unix command lines delimit options with '-' !
|
||
|
|
||
^^/UY !+ VMS command lines delimit options with '/' !
|
||
'
|
||
|
||
!+***************************************************************************
|
||
Put a subroutine into Q-register .T which, when called, fills Q-register
|
||
F with a filename to be used to store filespec memory. This subroutine
|
||
will only be needed if the :EGMEM isn't supported.
|
||
****************************************************************************!
|
||
@^U.T/
|
||
:QF"E !+ if we haven't already set q-register F !
|
||
.U.1 !+ remember where we are in edit buffer !
|
||
Iteco !+ start building "tecoxxxx.tmp" !
|
||
0EJ\ !+ insert process id into edit buffer !
|
||
.-Q1U.L !+ length of "tecoxxxx" part of filename !
|
||
Q.L-8"G !+ if it's longer than 8 characters !
|
||
Q.1+4J !+ go to front of the digits !
|
||
Q.L-8D !+ prune most significant digits from front !
|
||
4C !+ and move to the end again !
|
||
'
|
||
I.tmp !+ finish it off !
|
||
!+ RSTS/E and RT-11 aren't supported by TECO-C
|
||
-1EJ-4"E ~* if RSTS/E ~
|
||
I<60>-MODE:#3000
|
||
|
|
||
-1EJ-7"N ~* if not RT-11 ~
|
||
I;1--CR
|
||
'
|
||
'
|
||
!
|
||
Q.1,.XFQ.1,.D !+ save it in q-register F and clean up !
|
||
'/
|
||
27:^U.T
|
||
!+***************************************************************************
|
||
If we're on RSTS/E, do something special
|
||
****************************************************************************!
|
||
!+-1EJ-4"E:QZ#Z"E-1G_J::FSdcl tecoTECO"UHK':S ^[J0''!
|
||
|
||
Q0+1"E !+ if Q1 was equal to -1 on entry !
|
||
32768U0 !+ Q0 = 32768 !
|
||
'
|
||
32768"E !+ if we're on a 16-bit machine (?) !
|
||
:EITECO"S !+ try to execute macro in file TECO !
|
||
]1
|
||
Q0#32768U1
|
||
[1
|
||
J
|
||
ODONE
|
||
'
|
||
'
|
||
|
||
!+***************************************************************************
|
||
Get the command line string from q-register Z into the edit buffer
|
||
****************************************************************************!
|
||
|
||
Z"EGZ0,0XZ' !+ get command line string from Z and clear Z !
|
||
J
|
||
::S^ES"S^SD' !+ remove leading whitespace !
|
||
::STECO32"S-2D' !+ change TECO32 to TECO, if needed !
|
||
ZJ-:S^ES"S.-Z"EFR'' !+ remove trailing whitespace !
|
||
Z"EODONE' !+ if there's no command line, don't initialize !
|
||
|
||
Q0&32767U1
|
||
0,0X1
|
||
0,0X9
|
||
|
||
!+***************************************************************************
|
||
If there's a -NOINI switch, (-NOINI if under Unix) delete it, compact
|
||
any trailing whitespace, and set the 4096 bit of q-register 1.
|
||
****************************************************************************!
|
||
|
||
J:S^ES^EUYNOI"SONOINI'
|
||
J:S^EUYNOI"FONONOINI'
|
||
!NOINI!
|
||
^SD::SN"S-D::SI"S-D''
|
||
::S^ES"S^SD0A"AI ''
|
||
Q1#4096U1
|
||
!NONOINI!
|
||
|
||
!+***************************************************************************
|
||
Execute the initialization file.
|
||
****************************************************************************!
|
||
|
||
Q1&4096"E !+ if there's no NOINI switch !
|
||
HX0HK !+ save the command line in Q0 !
|
||
EPEA !+ switch to secondary I-O streams !
|
||
EF
|
||
|
||
!+ Get the INI macro into the edit buffer !
|
||
|
||
:EGINI"S !+ get the INI file specification !
|
||
G*
|
||
J0A-36"ED !+ if the first character is a dollar-sign !
|
||
HX1
|
||
HK
|
||
:ER^EQ1"S !+ open the file for reading !
|
||
YHX1HKECG1 !+ and put it's contents into the edit buffer !
|
||
|
|
||
%Can't find initialization file ":G1"1310
|
||
'
|
||
'
|
||
0,0X1
|
||
| !+ else (no defined INI filename) !
|
||
0,0X1
|
||
(-1EJ-5)*(-1EJ-1024)"E !+ if VAX/VMS !
|
||
EN[]*.*:EN"S !+ get current dir spec into Q1 !
|
||
G*JS[R0KFS.]JS]0,.X1HK
|
||
'
|
||
'
|
||
:ER^EQ1TECO.INI"S !+ if TECO.INI exists in current directory !
|
||
YHX9HKECG90,0X9 !+ get it's contents into the edit buffer !
|
||
'
|
||
'
|
||
EREW !+ switch back to primary streams !
|
||
|
||
Z"N !+ if there's an INI macro to execute !
|
||
ZJ
|
||
.U0
|
||
G1
|
||
I=
|
||
G0
|
||
Q0J
|
||
ZX9
|
||
ZK
|
||
]1
|
||
]0Q0ET
|
||
]0Q0ES
|
||
]0Q0EU
|
||
]0Q0ED
|
||
]0Q0
|
||
]0Q0
|
||
]2
|
||
HX0
|
||
HK
|
||
G9
|
||
J
|
||
S=
|
||
0,.-1X9
|
||
0,.K
|
||
M0+0U9 !+ execute INI macro, save result in Q9 !
|
||
0,0X0
|
||
[2
|
||
0,0X2
|
||
10U0[0 !+ radix 10 !
|
||
U0[00 !+ case independent searching !
|
||
EDU0[0ED&4ED !+ turn on no-memory-expansion bit !
|
||
EUU0[0-1EU !+ no case flagging on typeout !
|
||
ESU0[00ES !+ no typeout after searches !
|
||
ETU0[032768#32#8#1,0ET !+ image mode, ^T noecho and nowait, ^C trap !
|
||
[1
|
||
G9
|
||
X1
|
||
K
|
||
0,0X9
|
||
Q9U1
|
||
J::S^ES"S^SD' !+ delete leading whitespace !
|
||
ZJ-:S^ES"S.-Z"EFR'' !+ delete trailing whitespace !
|
||
Z"E
|
||
OSCOPES
|
||
'
|
||
|
|
||
G0
|
||
'
|
||
'
|
||
|
||
|
||
!+***************************************************************************
|
||
If there's a -NOMEMORY switch (-NOMEMORY under Unix), delete it, compact
|
||
any trailing whitespace, and set the 4 bit of q-register 1.
|
||
****************************************************************************!
|
||
|
||
J:S^ES^EUYNOM"SONOMEMORY'
|
||
J:S^EUYNOM"FONONOMEMORY'
|
||
!NOMEMORY!
|
||
^SD::SE"S-D::SM"S-D::SO"S-D::SR"S-D::SY"S-D'''''
|
||
::S^ES"S^SD0A"AI ''
|
||
Q1#4U1
|
||
!NONOMEMORY!
|
||
|
||
|
||
!+***************************************************************************
|
||
If there's a /NOCREATE switch, (-NOCREATE under Unix), delete it, compact
|
||
any trailing whitespace, and set the 256 bit of q-register 1.
|
||
****************************************************************************!
|
||
|
||
J:S^ES^EUYNOC"SONOCREATE'
|
||
J:S^EUYNOC"FONONOCREATE'
|
||
!NOCREATE!
|
||
^SD::SR"S-D::SE"S-D::SA"S-D::ST"S-D::SE"S-D'''''
|
||
::S^ES"S^SD0A"AI ''
|
||
Q1#256U1
|
||
!NONOCREATE!
|
||
|
||
|
||
!+***************************************************************************
|
||
If there's a /NOPAGE switch, (-NOPAGE under Unix), delete it, compact
|
||
any trailing whitespace, and set the 64 bit of q-register 1.
|
||
****************************************************************************!
|
||
|
||
J:S^ES^EUYNOP"SONOPAGE'
|
||
J:S^EUYNOP"FONONOPAGE'
|
||
!NOPAGE!
|
||
^SD::SA"S-D::SG"S-D::SE"S-D'''
|
||
::S^ES"S^SD0A"AI ''
|
||
Q1#64U1
|
||
!NONOPAGE!
|
||
|
||
|
||
!+***************************************************************************
|
||
If there's a /NORENAME switch, (-NORENAME under Unix), delete it, compact
|
||
any trailing whitespace, and set the 512 bit of q-register 1.
|
||
****************************************************************************!
|
||
|
||
J:S^ES^EUYNOR"SONORENAME'
|
||
J:S^EUYNOR"FONONORENAME'
|
||
!NORENAME!
|
||
^SD::SA"S-D::SG"S-D::SE"S-D'''
|
||
::S^ES"S^SD0A"AI ''
|
||
Q1#512U1
|
||
!NONORENAME!
|
||
|
||
|
||
!+***************************************************************************
|
||
If we're not under RSTS/E, and the command is "TECO @file", then change
|
||
it to "MUNG file".
|
||
****************************************************************************!
|
||
|
||
!+ -1EJ-4"N! !+ if not RSTS/E !
|
||
J::STE"S<0A"AC|1;'>::S^ES@"S0KIMUNG ''
|
||
!+ '!
|
||
|
||
|
||
!+***************************************************************************
|
||
If it's a MUNG command, find the file specification, delete it from
|
||
the edit buffer, and do an EI on the file.
|
||
****************************************************************************!
|
||
|
||
J::SMU"S-2D !+ if it's a MUNG command !
|
||
<0A"AD|1;'> !+ delete alphabetics following MU !
|
||
::S^ES"S^SD' !+ delete trailing whitespace !
|
||
(-1EJ-5)*(-1EJ-1024)"E !+ if VAX/VMS !
|
||
J::S""S-D !+ and it starts with double quote !
|
||
::S^ES"S^SD' !+ remove whitespace following the " !
|
||
'
|
||
'
|
||
|
||
!+ The MUNG file specification might be followed by data to be put into
|
||
the edit buffer. The file specification and the data are separated by
|
||
a comma, a slash, or whitespace. Set Q0 to point to the end of the
|
||
file specification, regardless of how its terminated.!
|
||
|
||
ZU0 !+ put edit buffer length in Q0 !
|
||
(-1EJ-25600)*(-1EJ-25858)"E !+ if Unix or Linux !
|
||
J:S-"SR.-Q0"L.U0'' !+ if - precedes Q0, change Q0 !
|
||
|
|
||
J:S/"SR.-Q0"L.U0'' !+ if / precedes Q0, change Q0 !
|
||
'
|
||
J:S^ES"S.-Q0"L.U0'' !+ if whitespace precedes Q0, change Q0 !
|
||
|
||
J<S,; !+ if a comma precedes Q0, change Q0 !
|
||
.U1
|
||
Q1-1J-:S["S:S]"S.-Q1"GF<'''
|
||
Q1-1J-:S<"S:S>"S.-Q1"GF<'''
|
||
Q1-1J-:S("S:S)"S.-Q1"GF<'''
|
||
Q1-1J.-1-Q0"LD.U0'
|
||
0;
|
||
>
|
||
|
||
Q0J<-.;-1A-32"N-1A-9"N0;''-D> !+ delete whitespace preceding Q0 !
|
||
|
||
!+ copy the file specification into q-register .0. If there's no file
|
||
specification, complain and die. !
|
||
|
||
0,.X.0
|
||
:Q.0"E?How can I MUNG nothing?1310'
|
||
|
||
!+ delete the file specification and trailing whitespace (if any) from the
|
||
edit buffer, execute the MUNG file and we're done. !
|
||
|
||
::S^ES^[ !+ locate end of whitespace, if any !
|
||
0,.K !+ delete spec + trailing whitespace !
|
||
0U0 !+ don't leave trash in Q0 !
|
||
EI^EQ.0 !+ execute the MUNG file !
|
||
JODONE !+ and we're done !
|
||
'
|
||
|
||
!+***************************************************************************
|
||
If there's a /VTEDIT (-VTEDIT under Unix), switch...
|
||
****************************************************************************!
|
||
|
||
J:S^ES^EUYVT"SOVTEDIT'
|
||
J:S^EUYVT"FONOVTEDIT'
|
||
!VTEDIT!
|
||
The VTEDIT command line option is not supported by TECOC1310
|
||
|
||
!+
|
||
::SE"S^SD::SD"S^SD::SI"S^SD::ST"S^SD''''
|
||
::S:H"S-2D::SO"S-D::SL"S-D::SD"S-D'''Q1#32U1'
|
||
::S:S"S-2D::SE"S-D::SE"S-D::SA"S-D::SL"S-D::SL"S-D'''''Q1#16U1'
|
||
::S:H"S-2D::SO"S-D::SL"S-D::SD"S-D'''Q1#32U1'
|
||
::S^ES"S^SD0A"AI ''
|
||
Q1#1U1
|
||
!
|
||
!NOVTEDIT!
|
||
|
||
!+***************************************************************************
|
||
If we're running Unix, check for a +nnn option. If there is one, set
|
||
the 128 bit of the EZ flag (to read in the whole file, regardless of form
|
||
feeds) and put the number in Q-register 4.
|
||
****************************************************************************!
|
||
|
||
!+ -1EJ-25600"E if Unix !
|
||
J:S^ES+"S
|
||
^SD\U40,128EZ^sd::ss"S^sD0A"AI ''
|
||
'
|
||
!+ ' !
|
||
!+Set EZ flag if nopage!
|
||
Q1&64"N0,128ez'
|
||
|
||
!+***************************************************************************
|
||
If there's a /SCROLL switch (-SCROLL under Unix), delete it, get the
|
||
numeric argument (or default to 0) into q-register 2.
|
||
If :SEEALL follows -SCROLL, then set bit 16 of q-register 1.
|
||
Delete any trailing whitespace and set bit 128 of q-register 1.
|
||
****************************************************************************!
|
||
|
||
J:S^ES^EUYSC"SOSCROLL'
|
||
J:S^EUYSC"FONOSCROLL'
|
||
!SCROLL!
|
||
^SD::SR"S-D::SO"S-D::SL"S-D::SL"S-D''''
|
||
::S:^ED"SR-D\U2FR|0U2' !+ get numeric arg into Q2!
|
||
::S:S"S-2D::SE"S-D::SE"S-D::SA"S-D::SL"S-D::SL"S-D'''''
|
||
Q1#16U1
|
||
'
|
||
::S^ES"S^SD0A"AI '' !+ delete trailing whitespace!
|
||
Q1#128U1
|
||
!NOSCROLL!
|
||
|
||
|
||
!+***************************************************************************
|
||
If it's a TECO command...
|
||
****************************************************************************!
|
||
|
||
J::STE"S-2D !+ if it's a TE command !
|
||
<0A"AD|1;'> !+ delete alphabetics following TE !
|
||
::S^ES"S^SD' !+ delete trailing whitespace !
|
||
|
||
!+***************************************************************************
|
||
If there's a /INSPECT switch, (-INSPECT if under Unix) delete it, compact
|
||
any trailing whitespace, and set the 2 bit of q-register 1.
|
||
****************************************************************************!
|
||
|
||
J:S^ES^EUYIN"SOINSPECT'
|
||
J:S^EUYIN"FONOINSPECT'
|
||
!INSPECT!
|
||
^SD::SS"S-D::SP"S-D::SE"S-D::SC"S-D::ST"S-D'''''
|
||
::S^ES"S^SD0A"AI ''
|
||
Q1#2U1
|
||
!NOINSPECT!
|
||
|
||
!+***************************************************************************
|
||
If there's a /FIND switch, (-FIND if under Unix) delete it, compact
|
||
any trailing whitespace, and set the 8 bit of q-register 1.
|
||
****************************************************************************!
|
||
|
||
J:S^ES^EUYFI"SOFIND'
|
||
J:S^EUYFI"FONOFIND'
|
||
!FIND!
|
||
The /FIND command line option is not supported by TECOC1310
|
||
|
||
!+
|
||
^SD::SN"S-D::SD"S-D''
|
||
::S^ES"S^SD0A"AI ''
|
||
Q1#8U1
|
||
!
|
||
!NOFIND!
|
||
|
||
!+ If there's more to the command, then delete preceding whitespace and
|
||
if the remainder of the command line contains a quoted string, do a ZJ. !
|
||
|
||
J
|
||
<
|
||
.-Z;
|
||
0A-9"EDF<'
|
||
0A-32"EDF<'
|
||
C
|
||
-1A-""E:S""S
|
||
(-1EJ-25857)*(-1EJ-25858)"E !+ If OS/2 or Linux then delete quotes !
|
||
0J2<@FS/"//>ZJ'|
|
||
ZJ'' !+ if no second quote, go to end !
|
||
>
|
||
|
||
!+ Get the remembered file specification into the edit buffer. !
|
||
|
||
Q1&4#Z"E !+ if there's no file name and no -NOMEMORY !
|
||
:EGMEM"S !+ if :EGMEM is supported !
|
||
G*J !+ get it into the edit buffer !
|
||
::S$"S^SD !+ if leading dollar sign, delete and... !
|
||
|OGOTIT' !+ otherwise got it and get outa here !
|
||
| !+ else :EGMEM isn't supported !
|
||
M.T !+ generate file name in F !
|
||
GF !+ and get it !
|
||
'
|
||
HX0HK !+ save filename in Q0 and clear buffer !
|
||
EPEA !+ select secondary I-O streams !
|
||
EF !+ close current output file !
|
||
:ER^EQ0"S !+ open file (name is in Q0) !
|
||
Y
|
||
L
|
||
."N-1A-10"E-D'' !+ remove trailing lf, if any !
|
||
."N-1A-13"E-D'' !+ remove trailing cr, if any !
|
||
ZK
|
||
HX0HK
|
||
EC !+ copy input to output and close streams !
|
||
G0
|
||
'
|
||
EREW !+ select primary I-O streams !
|
||
0,0X0
|
||
!GOTIT!
|
||
|
||
!+ If there's a file specification, then delete preceding whitespace and
|
||
if the remainder of the filespec contains a quoted string, do a ZJ. !
|
||
!+ However there shouldn't be any whitespace -- don't do this step
|
||
because it messes up names with embedded spaces
|
||
J
|
||
<
|
||
.-Z;
|
||
0A-9"EDF<'
|
||
0A-32"EDF<'
|
||
C
|
||
-1A-""E:S""UZJ''
|
||
>
|
||
! ZJ !+ but move to end just in case !
|
||
Z"N
|
||
Q1#32768#16384U1
|
||
'
|
||
' !+ endif (no filename and no -NOMEMORY) !
|
||
|
||
Q1&16384"N !+ if input filename in edit buffer !
|
||
Q1&2"E !+ if not -INSPECT !
|
||
Edi
|
||
|
|
||
Inspec
|
||
'
|
||
ting file "HT"1310
|
||
'
|
||
|
||
Z"E !+ if there's no file name !
|
||
Q1&2"EOSCOPES' !+ if not -INSPECT, goto SCOPES !
|
||
?How can I inspect nothing?1310
|
||
|
||
'
|
||
|
||
Q1&2"E !+ if not -INSPECT !
|
||
J:S="S !+ if it's ofile=ifile !
|
||
0,.-1X00,.K !+ save ofile name in Q0 !
|
||
ZU0 !+ save length of ifile name in Q0 !
|
||
HX2HK !+ save ifile name in Q2 !
|
||
:Q2"N !+ if there's an ifile name !
|
||
:ER^EQ2"U !+ try to open the ifile !
|
||
G2HX0HKONOTFND !+ and goto NOTFND if it fails !
|
||
'
|
||
'
|
||
:Q0"N !+ if there's an ofile name !
|
||
EW^EQ0 !+ open the ofile !
|
||
'
|
||
Q0"N !+ if the ifile name length not = 0 !
|
||
Q1#2048U1 !+ remember: input file is open !
|
||
'
|
||
OREMEM
|
||
'
|
||
'
|
||
|
||
HX0HK
|
||
Q1&2"E !+ if not -INSPECT !
|
||
:EB^EQ0"S !+ open it for reading-writing !
|
||
Q1#2048U1 !+ remember: input file is open !
|
||
OREMEM
|
||
'
|
||
:ERQ0"S !+ TAA Added -- try to open for read !
|
||
Q1#2048U1
|
||
%Can't write to file -- opening for input only1310
|
||
OREMEM
|
||
'
|
||
Q1&256"N !+ EB failed, so if -NOCREATE !
|
||
Q1&32768"E
|
||
ONOTFND
|
||
'
|
||
'
|
||
%Can't find file ":G0"1310
|
||
Q1&32768"E
|
||
%Creating new file1310
|
||
OCREATE
|
||
|
|
||
%Ignoring TECO's memory1310
|
||
Q1#8192U1
|
||
0,0X0
|
||
OREMEM
|
||
'
|
||
'
|
||
|
||
:ER^EQ0"S !+ it's -INSPECT, open input file !
|
||
Q1#2048U1 !+ remember: input file is open !
|
||
OSCOPES
|
||
'
|
||
|
||
!NOTFND!
|
||
?Can't find file ":G0"?1310
|
||
|
||
'
|
||
|
||
|
||
!+***************************************************************************
|
||
If it's a MAKE command...
|
||
****************************************************************************!
|
||
|
||
J::SMA"S-2D
|
||
<0A"AD|1;'> !+ delete letters following MA !
|
||
::S^ES"S^SD' !+ delete trailing whitespace !
|
||
J
|
||
<
|
||
.-Z;
|
||
0A-9"EDF<'
|
||
0A-32"EDF<'
|
||
C
|
||
-1A-""E:S""S
|
||
(-1EJ-25857)*(-1EJ-25858)"E !+ If OS/2 or Linux then delete quotes !
|
||
0J2<@FS/"//>ZJ'|
|
||
ZJ'' !+ if no second quote, go to end !
|
||
>
|
||
|
||
Z"E?How can I MAKE nothing?1310'
|
||
|
||
Z-4"EJ::SLOVE"SNot war?1310''
|
||
|
||
HX0HK !+ save the filespec in Q0 for REMEM !
|
||
!CREATE!
|
||
EW^EQ0 !+ Open file for writing !
|
||
OREMEM !+ and go remember !
|
||
'
|
||
%Unrecognized command "HTHK"1310
|
||
OSCOPES
|
||
!+***************************************************************************
|
||
Remember the filename in filespec memory. The filespec is in Q0.
|
||
****************************************************************************!
|
||
|
||
!REMEM!
|
||
Q1&8192"E !+ if 8192 bit is off in Q1 !
|
||
Q1&(32768#4)"NOSCOPES' !+ if ??? or -NOMEMORY, goto SCOPES !
|
||
:Q0"EOSCOPES' !+ if Q0 is empty, goto SCOPES !
|
||
'
|
||
|
||
!+ The file specification is now in Q0. If :EGMEM is unsupported, a file
|
||
is used to implement filespec memory.
|
||
!
|
||
|
||
:EGMEM"S !+ if :EGMEM is supported !
|
||
ZJG*C !+ append remembered spec to buffer !
|
||
::S$"U !+ no leading $ !
|
||
ZK:EGMEM ^EQ0 !+ set remembered filespec to Q0 !
|
||
OSCOPES !+ Goto SCOPES !
|
||
|
|
||
-1D !+ delete dollar !
|
||
ZXFZK !+ Save in q reg F !
|
||
'
|
||
|
|
||
M.T !+ Generate file name !
|
||
'
|
||
EA !+ switch to secondary output stream !
|
||
:EW^EQF"S !+ open the file !
|
||
G0 HPW HK EF !+ and write the filespec into it !
|
||
'
|
||
EW !+ switch to primary output stream !
|
||
|
||
|
||
!+***************************************************************************
|
||
****************************************************************************!
|
||
|
||
!SCOPES!
|
||
!+ -VTEDIT is not supported
|
||
Q1&1"N ~* if /VTEDIT ~
|
||
ET&512"E
|
||
%Your terminal is not an interactive scope1310
|
||
Q1#1-1U1
|
||
|
|
||
0,3:W ~* clear SEEALL mode ~
|
||
Q1&16"N-1,3:W' ~* if /SEEALL, set SEEALL mode ~
|
||
0,5:W ~* clear hold mode ~
|
||
Q1&32"N/1,5:W' ~* if /HOLD, set hold mode ~
|
||
'
|
||
'
|
||
|
||
Q1&1"E
|
||
OYANK
|
||
'
|
||
|
||
~* load the VTEDIT macro file name into q-register 9 ~
|
||
|
||
:EGVTE"S ~* if :EGVTE is supported ~
|
||
1G*X9K
|
||
|
|
||
:@9%DIT%
|
||
:Q1"E
|
||
(-1EJ-5)*(-1EJ-1024)"E
|
||
EN[]*.*:EN"S
|
||
ZJ
|
||
.U0
|
||
G*
|
||
Q0J
|
||
S[ R
|
||
Q0,.K
|
||
FS.] Q0J
|
||
S] Q0,.X1
|
||
Q0,ZK
|
||
'
|
||
'
|
||
'
|
||
'
|
||
|
||
:Q9"N ~* if Q9 isn't empty ~
|
||
:EI^EQ1^EQ9"S
|
||
Q1#2048-2048U1
|
||
OYANK
|
||
'
|
||
'
|
||
|
||
~****************************************************************************
|
||
Get the library directory specification into q-register 1.
|
||
If there's no defined library directory, define the default one.
|
||
****************************************************************************~
|
||
|
||
:EGLIB"S ~* if there's a defined lib dir ~
|
||
G*X1K ~* use it ~
|
||
| ~* else ~
|
||
-1EJ-0"E @1%LB:[1,2]% | ~* if RSX-11D: LB:[1,2] else~
|
||
-1EJ-1"E @1%LB:[1,2]% | ~* if RSX-11M: LB:[1,2] else~
|
||
-1EJ-2"E @1%LB:[1,2]% | ~* if RSX-11S: LB:[1,2] else~
|
||
-1EJ-3"E @1%LB:[1,2]% | ~* if IAS: LB:[1,2] else~
|
||
(-1EJ-5)*(-1EJ-1024)"E ~* if VAX/VMS ~
|
||
@1%SYS$LIBRARY:% | ~* SYS$LIBRARY: else~
|
||
-1EJ-6"E @1%LB:[1,2]% | ~* if RSX-11S: LB:[1,2] else~
|
||
-1EJ-7"E @1%SY:% | ~* if RT-11: SY: else~
|
||
@1%% ~* default: nothing ~
|
||
'''''''
|
||
'
|
||
|
||
:Q1"N ~* if there's a library directory ~
|
||
:EI^EQ1VTEDIT"S ~* execute the macro in there ~
|
||
Q1#2048-2048U1
|
||
OYANK
|
||
'
|
||
'
|
||
%The :G9 macro is not available1310
|
||
!
|
||
|
||
|
||
!+**************************************************************************!
|
||
|
||
!YANK!
|
||
Q1&2048"N !+ if input file is open !
|
||
Y !+ read in the first page !
|
||
'
|
||
|
||
J
|
||
!+
|
||
Q1&8"N ~* if /FIND ~
|
||
Finding position marker...1310
|
||
EW G*
|
||
X0
|
||
K
|
||
-1
|
||
:Q0"N
|
||
:N~~/\~~
|
||
"S^SD'
|
||
U0
|
||
|
|
||
:_~~/\~~
|
||
"S^SD'
|
||
U0
|
||
'
|
||
0
|
||
Q0"U
|
||
?Position marker not found?1310
|
||
|
||
'
|
||
'
|
||
!
|
||
|
||
|
||
!+***************************************************************************
|
||
On entry, Q2 contains the numeric argument given in the -SCROLL:n
|
||
switch, or 0 if no -SCROLL switch was specified.
|
||
****************************************************************************!
|
||
|
||
Q1&128"N !+ if -SCROLL !
|
||
ET&512"E
|
||
%Your terminal is not an interactive scope1310
|
||
|
|
||
Q2"E
|
||
2:W-4U2
|
||
'
|
||
0,3:W Q1&16"N !+ if -SEEALL !
|
||
1,3:W '
|
||
0,5:W Q1&32"N !+ if -HOLD!
|
||
1,5:W '
|
||
Q2,7:W-Q2"N
|
||
%Your terminal doesn't support scrolling1310
|
||
'
|
||
'
|
||
'
|
||
|
||
!+***************************************************************************
|
||
****************************************************************************!
|
||
|
||
!DONE!
|
||
q4-1"G !+ if q4 greater than 1 !
|
||
q4-1:s^J"U0J' !+ search for q4th line feed !
|
||
'
|
||
q1&64"N !+ NOPAGE switch? !
|
||
0,128EZ
|
||
'
|
||
q1&512"N !+ NORENAME switch? !
|
||
0,2EZ
|
||
'
|
||
]1
|
||
]0Q0ET
|
||
]0Q0ES
|
||
]0Q0EU
|
||
]0Q0ED
|
||
]0Q0
|
||
]0Q0
|
||
]2
|
||
]0
|
||
]9
|
||
]F
|
||
0U.10U.L0U40UY0,0X.T !+ reset q registers !
|
||
|