Raw File
ar2.other
ÿÿÿÿÿðIðÓòe*½ð@ð€€@@0@@8ò€ð	EV0&``+fPEV0M
M`4@òdUå?PGf)"L`òe)æ¥PGf)M
M`óÝà
;	PIg)9"P<`òe)ßåPI'"ðÛÀ
	x{pKJûeÏ8gñjàòdPq8Q0[Jðnà	òcÅ°« iLIg)9ò^ ET]PGiððBÁððÍðmðuðåap(vð-E9ðð
ðð	ð
ðððîðððð!ð#ð%ð'ð)ð+ð-ð/ð1ð3ð5ð7ð9ð;ð=ð? ðA!ðC"ðE#ðG$ðI%ðK&ðM'ðO(ðQ)ðS*ðU+ðW,ðY-ð[.ð]/ð_0ða1ðc2ðe3ðg4ði5ðk6ðm7ðo8ðq9ðs:ðu;ðw<ðy=ð{>ð}?ð@ðAðƒBð…Cð‡Dð‰Eð‹FðGðHð‘Ið“Jð•Kð—Lð™Mð›NðOðŸPð¡Qð£Rð¥Sð§Tð©Uð«Vð­Wð¯Xð±Yð³Zðµ[ð·\ð¹]ð»^ð½_ð¿`ðÁaðÃbðÅcðÇ/

Action-to:     MARC at MIT-DMS
From:          ERB at MIT-DMS
Subject:       EXTREME!!!! UNTASTEFULNESS BY YOU!!!!!
Message id:    <[MIT-DMS].38496>

Originated:    19 AUG 76 at 1418 EDT
Received:      19 AUG 76 at 1530 EDT

It has become known to me that you are the reason my batch job hasn't run for
the last several nights and the combat queue has reached 35 or so.  The consensus
of several people here (admittedly daytime people) is that it is extremely
untasteful.  It is for all practical purposes impossible for me to run the batch
job in the daytime (for one reason I can't get enough guaranteed signup time)
and two people are waiting for the results (DLD and myself) plus several
othersð
¥ indirectly who could benefit ffrom an improved parser dictionary.
Thus if it should happen that by tomoð
Í!Z"RECEù5¢Ä[FROM-ùéÔE 134îñH©Ã‘EDULE" ("Sø³¢IG")
"TO" õªÐ‰ATE-IùÔjÉ¥ôJFŠEú‘lTEñ¢‘B‹GIN:îñTê΃ù±]	›úPƊ«NAME:ñ3iC
NAME÷BaòÓspin,ôpò×ô—
NICK:ñ1çÄ
SOCIø.„±i9-52-0231îñSdԃD:	NEöŒÖ¹c3
MIú•"º3-676ö£EHŸMAD:	526 Hudson Street
	ùño×en, New Jersey  0703öEHŸùµ"º201-798-37ö
Š§ú´"Òuñ1ùeËnblatt
PRùò¢ºþ}:ðÓd poetry aýÙoéýy ëþyveçþh:hÓngs
øÒfD“÷Bf҇õ‘"çû4ÖM§C,.XGPR.
ø5jHŸ:	Yesñ¢£ÒŸUP:	+ñ¢©E™AT:	Uñ¢¡I¥ú’	•þ»< c÷#ER‹MAR:	Pleasü¨0äÉþYyóAý¹Paçôwõåassholic iü™wãó
NETAD:	MúPàA“
ALTER:	MRC 76ö
Ø·[ö-Y1e÷#EMƒør$ºø2V ›L, MC, DMîñQgDuñ¢†ŠñH†Š!Z#4TITLE	DISOWNER

A=1
B=2
E=5
F=6
P=10

USRI==1

JCL:	BLOCK 17
PSTK:	BLOCK 10
UNAME:	0
JNAME:	0

USROPN:	SETZ
	SIXBIT /OPEN/
	1000,,USRI
	[SIXBIT /USR/]
	UNAME
	SETZ	JNAME

DISOWN:	SETZ
	SIXBIT /DISOWN/
	5000,,13
	1000,,USRI
	SETZ

START:	.BREAK	12,[5,,JCL]
	MOVE	P,[-10,,PSTK-1]
	MOVE	E,[440700,,JCL]
	PUSHJ	P,GETJCL
	.CALL	USROPN
	.VALUE  [ASCIZ /:Can't open user channel to job?
:KILL
/]
	.CALL	DISOWN	
	.VALUE	[ASCIZ /:Can't disown job?
:KILL
/]
	.VALUE	[ASCIZ /:KILL
J/]

GETJCL:	MOVE	F,[440600,,UNAME]
	PUSHJ	P,NXTCHR
	PUSHJ	P,NAMFND
	MOVE	F,[440600,,JNAME]
	PUSHJ	P,NXTCHR
	PUSHJ	P,NAMFND

NXTCHR:	IBP	E,E			;GET NEXT NON-SEPARATION CHAR
	LDB	0,E
	CAIN	0,0
	POPJ	P,
	CAIN	0,40
	JRST 	NXTCHR
	ADD	E,[070000,,0]
	JUMPGE	E,.+3
	SOS	E
	HRLI	E,010700
	POPJ	P,
			
NAMFND:	ILDB	0,E
	TLNN	F,760000
	POPJ	P,
	CAIE	0,15
	CAIN	0,40			;END OF NAME
	POPJ	P,
	CAIN	0,0			;JCL ENDS BEFORE NAME ENDS?
	POPJ	P,
	CAIL	0,"a
	CAILE	0,"z
	ADDI	0,40			;TO SIXBIT AND CAPITALIZED!
	IDPB	0,F
	JRST	NAMFND
		
	END	START#4v'<PCODE "2CALRDR">
<PACKAGE "CALRDR"> 

<ENTRY IMLAC? COMMAPRINT BLTREST LKPR READER-NULL-LINE READER-ABORT OTTY 
MULTLIST READER READARGS RTOBRK LAST-READER-BREAK CALRDRINIT BFR LEN CSACT 
RDRHAND RDRHEAD CONFIRMS COMPLETES TERMINS NSTERMS POSCHAR HELPCHAR ABORTCHAR 
MULTCHAR RUBCHAR LINEKILL WORDKILL BUFFERKILL CRETYPE DRETYPE MASTER 
MULT-CR-MASTER MASTER-STRING QUOTCHAR INTTYCHAR EXACT-MATCH-CHAR 
PARTIAL-MATCH-CHAR NO-MATCH-CHAR CALICO-FILE-ATOMS SPCCHARS XSPCCHARS> 

<USE "CALSYM" "CALUTL" "STR" "TTY" "BLT" "TIMFCN"> 

<SETG READER-NULL-LINE #FALSE ("Null line")> 

<SETG READER-ABORT #FALSE (#FALSE ())> 

<SET LKPR [0 0 "" 0]> 

<SET FN-ATOMS '[CALICO-DEV CALICO-SNM CALICO-NM1 CALICO-NM2]> 

<SET FN-SEPS <COND (,TENEX '(":<" !"> !". !" )) (ELSE ":;  ")>> 

<SET TORDR <IVECTOR 4>> 

<SETG RTOBRK  %<RSUBR!- '[ %<PCODE!- "2CALRDR" 0> RTOBRK #DECL ("VALUE" <OR 
FALSE CHARACTER> ATOM ATOM ATOM STRING FIX STRING "OPTIONAL" STRING STRING 
STRING STRING STRING) BLT XFPUSH FSP-PARSE DATE-PARSE BLTREST TTY-SET FSP-FIXUP 
RTOBRK CAREFUL-TTY-OFF TTY-GET PDATE DATE EXTRACT XFPOP IMLAC? TENEX 
READER-SILENCE OUTCHAN CSACT #FALSE () BREAK T " (" ")" %<TYPE-C SYMBOL VECTOR> 
"|" ":  " "(" "DEF" " is allowed.)" "MULT" "multiple " " (s) are allowed.)" 
" are allowed.)" "" %<RGLOC FULLSYN T> "Object of type " "Unknown type" 
"defaulting to " ", " MODE "Current default is " TABLE FN-ATOMS FN-SEPS 
"FILESPEC" 
"However, a termination character (ESC, CR, etc) will imply no__ answer
as opposed to the default answer (i.e. FALSE or NO)" vz"." (<OR SYMTABLE VECTOR>) 
P1 (STRING) P2 (<OR TUPLE VECTOR STRING>) SYN (<VECTOR [REST <OR STRING SYMBOL>]
>) SYNSW (<OR FALSE ATOM>) MULTSW BFR LEN FOO BITP (WORD) LENS (FIX) (<OR FALSE 
CHARACTER>) XTRCHR OTTY (<OR UVECTOR WORD>) INSTRING INCHARACTER HELPSW (<OR 
FALSE ATOM CHANNEL>) XFPOPSW CAL-PARSE "SYM" "TEXT" "LINE" "FILE" "FORM" 
"VECTOR" "LIST" "OBJECT" "OBJECTS" "DATE" %<RGLOC CONFIRMS T> %<RGLOC COMPLETES 
T> %<RGLOC NSTERMS T> %<RGLOC MASTER-STRING T> %<RGLOC MULT-CR-MASTER T> %<RGLOC
TERMINS T> CURXCHAN (ACTIVATION) LEAVE-READER %<RGLOC SPCCHARS T> "\"" 
LAST-READER-BREAK %<RGLOC XSPCCHARS T> M #FALSE ("Null line") VAL MULTERM 
MULTLIST () (LIST) %<RGLOC READER-ABORT T> TORDR FLUSHED "and " #FALSE (
"Aborted") %<RGLOC INCHAN T> SYNOB [("FIX" ["integer" FIX]) ("FLOAT" [
"floating point number" FLOAT]) ("ATOM" ["MUDDLE atom name" ATOM]) ("CHARACTER" 
["character preceded by !\"" CHARACTER]) ("LIST" ["list of objects" LIST]) (
"VECTOR" ["vector of objects" VECTOR]) ("FORM" ["MUDDLE form" FORM]) ("OBJECT" [
"any EVALable object" ANY]) ("OBJECTS" ["any number of EVALable objects" LIST]) 
("ANY" ["any EVALable object" ANY]) ("STRING" ["string of characters" STRING]) (
"FILE" ["file specification" STRING]) ("FILESPEC" ["file specification" STRING])
("DATE" ["date specification" STRING]) ("LINE" ["line of text" STRING]) ("TEXT" 
["text terminated by master break" STRING]) ("SYM" ["symbol" SYMBOL])] %<RGLOC 
EXACT-MATCH-CHAR T> %<RGLOC TENEX T> %<RGLOC PARTIAL-MATCH-CHAR T> %<RGLOC 
NO-MATCH-CHAR T> %<RGLOC POSCHAR T> %<RGLOC HELPCHAR T> %<RGLOC ABORTCHAR T> %<
RGLOC MULTCHAR T> %<RGLOC RUBCHAR T> %<RGLOC LINEKILL T> %<RGLOC WORDKILL T> %<
RGLOC BUFFERKILL T> %<RGLOC CRETYPE T> %<RGLOC DRETYPE T> %<RGLOC MASTER T> %<
RGLOC ALLCHAR T> %<RGLOC QUOTCHAR T> %<RGLOC INTTYCHAR T> " " "" "î	," <DO-POSSYM> <WINNER-TAKE-ALL> <HELP-MESSAGE> <RETURN ,READER-ABORT .
LEAVE-READER> <CHECK-FOR-MULT> <INPUT-FROM-TTY> <RUBOUT-ONE> <BACKUPRUB " 	
"
> <BACKUPRUB "
"> <KILLBUFFER> <RETYPE-BUFFER <>> <RETYPE-BUFFER T> <
QUOTE-NEXT-CHAR> "Date unrecognizable. Please retype." CALICO-DEV CALICO-SNM 
CALICO-NM1 CALICO-NM2 "DSK" ":<" "	
î" "X" LKPR %<RGLOC READER-NULL-LINE T> 
"Type of input unacceptable.  Please retype." ANY FLOAT "READ" 
"End of help message." WINLIST "
The following are possible:
" "No symbol begins like that." "Symbol input not currently available." "C" " "
 I J %<TYPE-W SYMBOL VECTOR>]>> 
<AND <ASSIGNED? GLUE> .GLUE <PUT ,RTOBRK PGLUE ![715827883 -1 -1 -1 -1 -1 -1 -1 
-1 -1024 0!]>> 

<SETG PBREAK %<RSUBR-ENTRY '[RTOBRK PBREAK #DECL ("VALUE" <OR CHARACTER FALSE>)]
182>> 

<SETG COMPLETE %<RSUBR-ENTRY '[RTOBRK COMPLETE #DECL ("VALUE" FIX STRING FIX 
STRING FIX)] 219>> 

<SETG TPROMPT %<RSUBR-ENTRY '[RTOBRK TPROMPT #DECL ("VALUE" ATOM STRING VECTOR 
"OPTIONAL" <OR FALSE ATOM> <OR FALSE ATOM> <OR LIST FALSE>)] 274>> 

<SETG READER %<RSUBR-ENTRY '[RTOBRK READER #DECL ("VALUE" ANY <OR SYMTABLE 
VECTOR> STRING <OR TUPLE VECTOR STRING> <VECTOR [REST <OR STRING SYMBOL>]> 
"OPTIONAL" <OR FALSE ATOM> <OR FALSE ATOM> STRING)] 913>> 

<SETG SUBSTRUC* %<RSUBR-ENTRY '[RTOBRK SUBSTRUC* #DECL ("VALUE" <OR FALSE <
VECTOR ANY>> TUPLE FIX <VECTOR [4 ANY]>)] 1967>> 

<SETG READARGS %<RSUBR-ENTRY '[RTOBRK READARGS #DECL ("VALUE" ANY "TUPLE" TUPLE)
] 2050>> 

<SETG CALRDRINIT %<RSUBR-ENTRY '[RTOBRK CALRDRINIT #DECL ("VALUE" ATOM)] 2607>> 

<SETG KILLBUFFER %<RSUBR-ENTRY '[RTOBRK KILLBUFFER #DECL ("VALUE" ATOM)] 3007>> 

<SETG DATE-FIXUP %<RSUBR-ENTRY '[RTOBRK DATE-FIXUP #DECL ("VALUE" ANY STRING)] 
3040>> 

<SETG FSP-FIXUP %<RSUBR-ENTRY '[RTOBRK FSP-FIXUP #DECL ("VALUE" STRING STRING)] 
3110>> 

<SETG RUBOUTCHR %<RSUBR-ENTRY '[RTOBRK RUBOUTCHR #DECL ("VALUE" ATOM "OPTIONAL" 
<OR CHARACTER FIX>)] 3399>> 

<SETG BACKUPRUB %<RSUBR-ENTRY '[RTOBRK BACKUPRUB #DECL ("VALUE" ATOM "OPTIONAL" 
STRING)] 3573>> 

<SETG SYMBOL-ANALYZE %<RSUBR-ENTRY '[RTOBRK SYMBOL-ANALYZE #DECL ("VALUE" ATOM)]
3693>> 

<SETG READER-PARSE %<RSUBR-ENTRY '[RTOBRK READER-PARSE #DECL ("VALUE" ANY STRING
FIX)] 4012>> 

<SETG HELP-MESSAGE %<RSUBR-ENTRY '[RTOBRK HELP-MESSAGE #DECL ("VALUE" <OR ATOM 
FALSE>)] 4230>> 

<SETG WINNER-TAKE-ALL %<RSUBR-ENTRY '[RTOBRK WINNER-TAKE-ALL #DECL ("VALUE" ANY)
] 4397>> 

<SETG DO-POSSYM %<RSUBR-ENTRY '[RTOBRK DO-POSSYM #DECL ("VALUE" ATOM)] 4478>> 

<SETG CHECK-FOR-MULT %<RSUBR-ENTRY '[RTOBRK CHECK-FOR-MULT #DECL ("VALUE" FALSE)
] 4577>> 

<SETG RUBOUT-ONE %<RSUBR-ENTRY '[RTOBRK RUBOUT-ONE #DECL ("VALUE" ATOM)] 4609>> 

<SETG RETYPE-BUFFER %<RSUBR-ENTRY '[RTOBRK RETYPE-BUFFER #DECL ("VALUE" ATOM <OR
ATOM FALSE>)] 4672>> 

<SETG QUOTE-NEXT-CHAR %<RSUBR-ENTRY '[RTOBRK QUOTE-NEXT-CHAR #DECL ("VALUE" ATOM
)] 4756>> 

<SETG INPUT-FROM-TTY %<RSUBR-ENTRY '[RTOBRK INPUT-FROM-TTY #DECL ("VALUE" ATOM)]
4821>> 

<SET BREAKS '"	
î! "> 

<SETG COMMAPRINT %<RSUBR-ENTRY '[RTOBRK COMMAPRINT #DECL ("VALUE" <OR FALSE 
STRING> STRUCTURED "OPTIONAL" ANY)] 4862>> 

<SETG BLTREST %<RSUBR-ENTRY '[RTOBRK BLTREST #DECL ("VALUE" <OR TUPLE <PRIMTYPE îza*D
VECTOR>> <OR TUPLE <PRIMTYPE VECTOR>> "TUPLE" TUPLE)] 4961>> 

<AND <ASSIGNED? GLUE> .GLUE <PUT ,RTOBRK GLUE ![-15824778224 4653329 17519624257
25870730240 71581780 18539102464 16781312 285474816 0 67829760 1096036855 
1886388993 4096 1073942796 33 1314901 5721239811 13741601587 13694681360 
19060759564 121394433 21760098304 7768972751 1195143360 12915245123 -15081726733
-8852799467 1204829309 201330692 1118551 16106390471 -8857583613 -15237840896 
12885016592 4050895105 -16357311236 7633830657 262144 4194304 67108868 
17452761136 3222361180 6174535683 16777280 1024 3075 290538439 16309305807 
12986204171 16310848768 5 1096046351 7579569948 16224558140 30317565379 
-15284976697 4056139535 8351150532 30115103172 1089536451 -15284976697 
4056139775 8351150532 30115103172 1089536451 -15284976697 4060071935 8351150532 
30115103172 1089487964 33405475964 30586731633 -4194318337 8586264348 
33404424464 -4008767217 5431903173 4047750415 4579197199 4567339281 3309813872 
8323336128 30097281136 4363911172 4548462336 469779516 269239817 1079275760 
3288338624 1007697984 30316437503 1048512 -100667392 786680 809501760 
-4223663612 1073872961 1090527100 4580187905 -9663607808 1074860049 4039384064 
201441300 1094779008 17213686844 19260277248 4294990865 2172649796 9063890944 
4111 20 335544320 18253873152 1426391041 1343226135 -263978767 1572609 
22550414596 1064960 4232272 4456448 130023472 7591624964 30073012236 3221347389 
286539776 17829888 17351 -16894390255 268437441 4559208704 65536 18271502449 
4370268224 286195779 -15099494400 1073746180 17452569344 -16037449700 268435728 
1310720 285212928 17825792 2081509376 16 22829596797 -808505281 -17095983056 
5371854848 23018390596 -17129525245 50343939 4583328768 -17167273981 50344209 
12897487872 4580966412 3435973836 -13743944692 3233857728 -16977753076 
3222014991 -16915563505 -16915563505 -16915563505 -16915563505 3234856960 
4384099532 3233828864 17536659522 2165047424 4768123907 13690470481 -17179295233
-16776188 17180196865 4296344644 19313723344 3222340352 18266195907 289406977 
1088 18100272 5638455296 1048576 65536 71303284 458768 5368709124 5385814272 
133234884 21750640753 7528779776 1107063071 34142798960 12901744660 4365292880 
5854200272 16705 1364285235 -16345153344 24700458032 12884902997 -4092854272 
30271671504 268505280 470551616 -17129422777 1880211568 4592791664 4592791569 
7516262428 3233857648 6174044209 12587456 24708662016 17654285057 -17129525049 
808464412 3427205889 -17129525049 4570745856 -16320036864 1078394945 17297391617
4194308 16777472 3288793408 356544719 12898320401 -12834569215 4312023876 
14243856389 66832 5721030656 17184338207 30346576947 -9589198561 -17128484844 
805584897 21676163415 524746947 16311598528 -16911961856 16780413 -16926375929 
808517828 30196220151 805568577 22600075008 470551616 -217314292 1882206208 
-15287242544 17125568 -3824218304 4379657008 12935327772 3221226547 3439330325 
18003116484 30095126576 12951076976 12935236816 67355715 -63947072 -17162305536 
13434896 4211278593 -16977755149 21038353 30871241665 262144 1949499420 
868238593 21474837504 553648127 184 1048805 524602 786734 1048870 1311008 
1049738 1311792 1573844 1835935 788407 2609 3009 265188 3416 265556 3590 265730 
3695 528306 4232 4399 4480 4579 4611 266820 4758 4823 267020 529162!]>> 

<ENDPACKAGE> 
*D#
rrow morning my batch job hasn't run, I shall
be forced to confront AV with the evidence including such previous untasteful
items as 1. your refusal to relinquish a terminal when bumped last month
	 2. your stealing of pencils from the office adjacent to the sign-up sheets
		which happens to be my office--for signing up and not returning them.
	 3. your taking of a phone message on a flow chart on my desk (despite several
	        pink pads in obviously visible places) and then disposing of the message
		(flow chart and all) in the barrel the coffee grounds are dumped into. 			(The chart was so important I searched all the wastebaskets and found
		it!)
	4. your running of the EXORCIST at night
	5. ...need I go on...there are several other items of note involving disk space
		and other untastefulnesses.

YOU SHOULD:
1. STAY OUT OF MY OFFICE
2. DO THE RIGHT THING IN ALL CASES
3. DON'T DO THE WRONG THING (running EXORCIST) IN ALL CASES
4. GET WITH IT.


  #
/ '<PCODE "BUF">

<BLOCK (<ROOT>)> 

BUFFER 

<ENDBLOCK> 

<NEWTYPE BUFFER VECTOR '<VECTOR STRING STRING>> 

<PACKAGE "BUF"> 

<ENTRY ADDCHR ADDCRLF ADDFILE ADDSTRING BUFCLEAR BUFGROW BUFLENGTH BUFMAKE 
BUFPRINT BUFSIZE BUFSPRINT BUFTECO BUFTOS CHRTABLE DELCHR DELPRINT DELTOCH 
DEL-TO-EOL DLINE DWORD EFUNCTION FILEINP FORMATEFFS GETSTR GETSTRACT HPOS-BUF 
IBUFCLEAR IBUFPRINT IDELCHR IMBUF IMDEL IMLAC? IMTTY1 IMTTY2 INIT ISIMLAC? 
LINEBRKS MY-TTY-OFF QUOTECHR TTY-POS TTY1 TTY2 WORDBRKS> 

<USE "STR" "TTY" "IM" "IMLAC"> 

<USE-DEFER "JOBS"> 

<SET FORMATEFFS <MAPF ,STRING ,ASCII [13 10 14 9 32 8]>> 

<SET WORDBRKS <STRING <ASCII 10> "	, ;:.">> 

<SET LINEBRKS <STRING <ASCII 10>>> 

<SET BUFSI zZE 200> 

<SETG ADDCHR  %<RSUBR!- '[ %<PCODE!- "BUF" 0> ADDCHR #DECL ("VALUE" BUFFER 
BUFFER CHARACTER) BACKS RESET-IMLAC IMLAC-COMMAND TTY-OFF IOT TTY-SET TTY-GET 
RUN FIRST-OF EXTRACT %<TYPE-W BUFFER VECTOR> BUFSIZE IMLAC? %<RGLOC IMDEL T> 
DELPRINT T #FALSE () OUTCHAN (CHANNEL) "\\\"" "\\\\" 
"
*** return from TECO by typing 'MC$$' where
     '$' is ESCAPE (altmode) -- otherwise the buffer will
     be lost.
*** TECO is being continued !!!
" "PRINT" "CMP" ">" "DSK" "HUDINI" "COMMON" 
"Couldn't open output channel, cause: " "not known." "TECO" "ER" "^Y" "COMSYS" 
%<RGLOC CTL-Z-FCN T> "C" "
Back to MUDDLE:
" "
An error occurred in returning from TECO: " "reason unknown" 
"The buffer has been left unchanged.
" "An empty string was returned from TECO.
The buffer has been left unchanged." "DONE" TTY2 TTY1 GETSTRACT OLD-TTY 
GETSTR-HAND ERROR!-INTERRUPTS INTERRUPT ELSE GETSTR-CHAND %<RGLOC INCHAN T> #
DISMISS T CHRTABLE "" (<UVECTOR [REST WORD]>) (HANDLER) %<RGLOC 
GLOBL-GETSTR-HAND T> %<RGLOC GLOBL-GETSTR-CHAND T> (ACTIVATION) FORMATEFFS 
WORDBRKS LINEBRKS "U" "X" "L" %<RGLOC ERROR-EVENT T> %<RGLOC ERROR-HANDLER
T> %<RGLOC IMLAC-OUTCHAN T> NO-PAGE-XMIT!-ERRORS IMSTR %<RGLOC IMLAC-INCHAN T> 
"!" N %<RGLOC GARBS T> "î" C " FILE-NAME : " "READ" "DSK:" "FILE-INPUT ABORTED"]>> 
<AND <ASSIGNED? GLUE> .GLUE <PUT ,ADDCHR PGLUE ![715828223 -1 -1 -1 -4096 0!]>> 

<AND <ASSIGNED? GLUE> .GLUE <PUT ,ADDCHR GLUE ![67109316 49152 7516521492 
18723373056 8 28 274007856 13757321216 9438208 128000 805318940 3221225472 
4295296020 18723385600 22020096 278528 5385821244 18652131328 1207697408 
1342210320 65 16 19456 67109120 4378853824 67387588 16174548048 273 25514218496 
17125393 12596164 1314897 22817018128 -268419076 2143289599 -4265395169 
18253623297 30081809409 269484063 16517171 -13705818361 -12616463357 3474050864 
30534798579 1191182336 17516483588 3225469120 2147483684 268508956 6644498448 
4296011788 33562368 67386480 17185112460 2953576448 -267648253 -17129534512 
84153668 22637972492 -13749437327 -3817076740 806093040 3221422272 4362421319 
4027056448 22565376048 1880113200 29376512 11816140800 269271120 16829445 
1070344 1076887644 3227254788 811341248 16827648 1096024849 1103446479 
1411144944 21596214384 4295234883 16128147472 202113217 1051760 7516259664 
30350348 13220447492 5441061649 -15636074496 1346454868 3158017 13691323556 
30049857536 29364225 -17129537088 7537181463 4345544704 4295163952 385875971 
50332016 22834056240 285475591 485904832 65 23353901056 12289 18253616144 
21767586816 -2129657852 1048577 4383047884 298062276 4563420944 21474836560 
16724 16826369 18270389252 1314899 22841475089 4564714547 -17111695104 
21743280144 4294967300 75240945 2080396556 12300 5667491841 4324344064 0 
868685584 0 1055836 -4177526784 5385814272 16640 30081548488 29360449 1343225856
262212 18257805313 16842752 4295032833 262145 17179938880 7520387072 67371008 
-17178034176 4295753728 268697600 1807 524294 262199 524341 113 262283 262302 
262379 524521 262451 524586 262564 262579 524744 524817 262724 524862 835 262971
525111 525230 263197 525335 787475 1049617 525535 525555 525575 525620 525645 
525660 1450 263619 525791 525811 263715 525857 263763 525901 526158 264074 
526216 264208 264272 526410 526696 788836 526762 788902 2649 264818!]>> 

<SETG BUFGROW %<RSUBR-ENTRY '[ADDCHR BUFGROW #DECL ("VALUE" BUFFER BUFFER 
"OPTIONAL" FIX)] 41>> 

<SETG INIT %<RSUBR-ENTRY '[ADDCHR INIT #DECL ("VALUE" ATOM)] 111>> 

<SETG BUFTOS %<RSUBR-ENTRY '[ADDCHR BUFTOS #DECL ("VALUE" STRING BUFFER)] 135>> 

<SETG DELCHR %<RSUBR-ENTRY '[ADDCHR DELCHR #DECL ("VALUE" <OR CHARACTER FALSE> 
BUFFER)] 154>> 

<SETG BUFPRINT %<RSUBR-ENTRY '[ADDCHR BUFPRINT #DECL ("VALUE" FIX BUFFER 
"OPTIONAL" ANY)] 221>> 

<SETG BUFSPRINT %<RSUBR-ENTRY '[ADDCHR BUFSPRINT #DECL ("VALUE" BUFFER BUFFER 
"OPTIONAL" CHANNEL)] 286>> 

<SETG BUFLENGTH %<RSUBR-ENTRY '[ADDCHR BUFLENGTH #DECL ("VALUE" FIX BUFFER)] 416
>> 

<SETG BUFCLEAR %<RSUBR-ENTRY '[ADDCHR BUFCLEAR #DECL ("VALUE" BUFFER BUFFER)] 
431>> 

<SETG DELTOCH %<RSUBR-ENTRY '[ADDCHR DELTOCH #DECL ("VALUE" FIX BUFFER STRING)] 
450>> 

<SETG CTL-Z-FCN %<RSUBR-ENTRY '[ADDCHR CTL-Z-FCN #DECL ("VALUE" STRING CHANNEL 
STRING)] 523>> 

<SETG BUFTECO %<RSUBR-ENTRY '[ADDCHR BUFTECO #DECL ("VALUE" BUFFER BUFFER 
"OPTIONAL" ANY)] 562>> 

<SET IMTTY1 #WORD *020202020202*> 

<SET IMTTY2 #WORD *030202020202*> 

<SET TTY1 #WORD *022020202020*> 

<SET TTY2 #WORD *232022220220*> 

<SETG MY-TTY-OFF %<RSUBR-ENTRY '[ADDCHR MY-TTY-OFF #DECL ("VALUE" ANY "OPTIONAL"
WORD WORD)] 809>> 

<SETG ERRFCN %<RSUBR-ENTRY '[ADDCHR ERRFCN #DECL ("VALUE" ANY FRAME "TUPLE" ANY)
] 866>> 

<SETG CHARFCN %<RSUBR-ENTRY '[ADDCHR CHARFCN #DECL ("VALUE" <OR DISMISS FALSE> 
CHARACTER CHANNEL)] 936>> 

<OFF <SETG GLOBL-GETSTR-HAND <ON "ERROR" ,ERRFCN 3 0>>> 

<OFF <SETG GLOBL-GETSTR-CHAND <ON "CHAR" ,CHARFCN 7 0 ,INCHAN>>> 

<SETG GETSTR %<RSUBR-ENTRY '[ADDCHR GETSTR #DECL ("VALUE" BUFFER BUFFER 
"OPTIONAL" VECTOR STRING STRING)] 1027>> 

<SETG DWOñþ€m':RD %<RSUBR-ENTRY '[ADDCHR DWORD #DECL ("VALUE" FIX BUFFER CHARACTER)] 
1241>> 

<SETG DLINE %<RSUBR-ENTRY '[ADDCHR DLINE #DECL ("VALUE" FIX BUFFER CHARACTER)] 
1261>> 

<SETG QUOTECHR %<RSUBR-ENTRY '[ADDCHR QUOTECHR #DECL ("VALUE" BUFFER BUFFER 
CHARACTER)] 1281>> 

<SETG ADDCRLF %<RSUBR-ENTRY '[ADDCHR ADDCRLF #DECL ("VALUE" BUFFER BUFFER 
CHARACTER)] 1326>> 

<SETG IDELCHR %<RSUBR-ENTRY '[ADDCHR IDELCHR #DECL ("VALUE" <OR CHARACTER FALSE>
BUFFER CHARACTER)] 1351>> 

<SETG IMDEL %<RSUBR-ENTRY '[ADDCHR IMDEL #DECL ("VALUE" CHARACTER BUFFER 
CHARACTER)] 1366>> 

<SETG DEL-TO-EOL %<RSUBR-ENTRY '[ADDCHR DEL-TO-EOL #DECL ("VALUE" FIX)] 1448>> 

<SETG UNPRINT %<RSUBR-ENTRY '[ADDCHR UNPRINT #DECL ("VALUE" FIX FIX)] 1471>> 

<SETG IBUFCLEAR %<RSUBR-ENTRY '[ADDCHR IBUFCLEAR #DECL ("VALUE" BUFFER BUFFER 
CHARACTER)] 1497>> 

<SETG IBUFPRINT %<RSUBR-ENTRY '[ADDCHR IBUFPRINT #DECL ("VALUE" FIX BUFFER 
CHARACTER)] 1517>> 

<SETG EFUNCTION %<RSUBR-ENTRY '[ADDCHR EFUNCTION #DECL ("VALUE" BUFFER BUFFER 
"OPTIONAL" CHARACTER)] 1557>> 

<SETG IMBUF %<RSUBR-ENTRY '[ADDCHR IMBUF #DECL ("VALUE" BUFFER BUFFER "OPTIONAL"
CHARACTER)] 1601>> 

<SETG GARBS "HX"> 

<SETG TTY-POS %<RSUBR-ENTRY '[ADDCHR TTY-POS #DECL ("VALUE" FIX CHARACTER FIX)] 
1864>> 

<SETG HPOS-BUF %<RSUBR-ENTRY '[ADDCHR HPOS-BUF #DECL ("VALUE" FIX BUFFER 
"OPTIONAL" <OR ATOM FALSE>)] 1916>> 

<SETG IMEDITPRINT %<RSUBR-ENTRY '[ADDCHR IMEDITPRINT #DECL ("VALUE" FIX 
CHARACTER)] 2060>> 

<SETG FILEINP %<RSUBR-ENTRY '[ADDCHR FILEINP #DECL ("VALUE" BUFFER BUFFER 
"OPTIONAL" CHARACTER)] 2110>> 

<SETG ADDSTRING %<RSUBR-ENTRY '[ADDCHR ADDSTRING #DECL ("VALUE" BUFFER BUFFER 
STRING "OPTIONAL" FIX)] 2392>> 

<SETG ADDFILE %<RSUBR-ENTRY '[ADDCHR ADDFILE #DECL ("VALUE" BUFFER BUFFER 
CHANNEL "OPTIONAL" FIX)] 2458>> 

<SETG ISIMLAC? %<RSUBR-ENTRY '[ADDCHR ISIMLAC? #DECL ("VALUE" <OR ATOM FALSE>)] 
2647>> 

<INIT> 

<SET CHRTABLE [<ASCII 5> <COND (.IMLAC? ,EFUNCTION) (ELSE ,BUFTECO)> <ASCII 6> ,
FILEINP <ASCII 127> ,IDELCHR <ASCII 13> ,ADDCRLF <ASCII 12> ,IBUFPRINT <ASCII 4>
,IBUFPRINT <ASCII 17> ,QUOTECHR <ASCII 27> <FUNCTION (BUF CHR) <RETURN .BUF .
GETSTRACT>> <ASCII 23> ,DWORD <ASCII 24> ,DLINE <ASCII 0> ,IBUFCLEAR]> 

<SETG BUFMAKE %<RSUBR-ENTRY '[ADDCHR BUFMAKE #DECL ("VALUE" BUFFER FIX)] 2670>> 

<PRINTTYPE BUFFER ,BUFPRINT> 

<ENDPACKAGE> 
'::<BLOCK (<ROOT>)>    
 
øUcF‹R    
 
<ENDBLOCK>
 
<NEWTYPE BUFFER VECTOR '<VECTOR STRING STRING>>   
 
<PACKAGE "BUF">
;" a buffer is defined as a vector of two strings.
   the first string is the 'top' of the buffer.
   the second string points to the first unused
   location in the buffer." 

<ENTRY ADDCHR		     ;"takes buffer, character, adds the character"
       ADDCRLF
 ;"Takes buffer (ARG1) and character (ARG2)
	adds a line-feed to the buffer after the character.
	(used in CHRTABLE)."
    ôA‰ø‘¤Ì‹
 ;"takes buffer, channel, optional count, inserts
	'count' characters from file, or whole thing"
       ADDSTRING
 ;"takes buffer, string, optional count
	inserts 'count' characters or the whole string"
       BUFCLEAR						   ;"clears buffer"
       BUFGROW		        ;"grows buffer (arg1) by (arg2) characters"
       BUFLENGTH      ;"takes a buffer, returns number of characters in it"
       BUFMAKE				 ;"Makes a buffer of length (ARG1)"
       BUFPRINT
 ;"efficient buffer printer (arg1) is buffer
	(arg2) is an optional channel.  The characters in the
	buffer are printed, without regard to
	MUDDLE escape characteristics (i.e., double-quote will
	not be preceded by a back-slash).  For printing
	as a string, see 'BUFSPRINT'	"
       BUFSIZE		   ;"free variable, amount to grow by if not given"
       BUFSPRINT
 ;"Prints a buffer (arg1) on an optional (arg2) channel
	(default .OUTCHAN).  The function prints
	the buffer as a string, 'escaping' the characters
	double-quote and back-slash so that the the string may
	be read correctly as a MUDDLE object."
       BUFTECO
 ;"function which applies TECO to a buffer.
	May be used in CHRTABLE, and is default control-E function"
       BUFTOS
 ;"uses EXTRACT to generate a string whose length
	is the number of characters in the buffer"
       CHRTABLE
 ;"initial table,
	ESC___	Returns from GETSTR (via GETSTRACT)
	^Q	Quotes the next character
	^X	Deletes current line
	^W	Deletes word back to separator
	^@	Clears buffer
	^E	Imedit the buffer
	^F	Inserts a file into the buffer
	^D	Displays the buffer on next line
	^L	Clears the screen and displays the buffer"
       DELCHR
 ;"returns deleted character or false, args as ADDCHR
		applies the LVAL of DELPRINT to the character, unless
		DELPRINT is false.  Initial LVAL of DELPRINT
		is IMDEL."
       DELPRINT
	     ;"LVAL applied to chars when deleted, unless
		LVAL is FALSE"
       DELTOCH
 ;"deletes characters from buffer (arg1) till member of
		(arg2) is deleted.  Returns # of chrs deleted."
       DEL-TO-EOL
	    ;"sends delete-to-end-of-line stream (ctl-P L) to system/IMLAC"
       DLINE
 ;"deletes th:ze current line from the buffer (ARG1).  The sep-
	arator (initially .LINEBRKS contains CR__ only) is also deleted."
       DWORD
 ;"deletes one 'word' in the buffer (ARG1) back from current point
	till a member of .WORDBRKS is encountered.  The sep-
	arator is also deleted."
       EFUNCTION			        ;"does imlac local editing"
     ô#I™ø²gP		    ;"asks for file names, inputs the file"
       FORMATEFFS			 ;"string of format-effector chars"
       GETSTR
 ;"reads a string from the tty into the
		buffer (arg1).  the processing for characters is defined
		by a dispatch table, (arg2).
		This argument is a structured object of pairs.
		the first element is a character, the second an
		applicable object which is applied to the buffer and
		the character, whenever that character is seen.
		GETSTR sets up a special activation which is
		bound to the atom GETSTRACT.  This activation
		marks the repeat loop, and thus may be returned from
		to get out of GETSTR.  GETSTR returns the buffer."
       GETSTRACT			    ;"GETSTR's activation, special"
       HPOS-BUF
 ;"takes a BUFFER and does a horizontal position to the (calculated) end
	of the last line.  For deletions, etc."
       IBUFCLEAR
 ;"Takes buffer (ARG1) and character (ARG2) -- clears the
	buffer and does '<TERPRI>."
       IBUFPRINT
 ;"Takes buffer (ARG1) and character (ARG2) -- clears screen
	if character is FF__.  Then prints the buffer."
       IDELCHR
 ;"Takes buffer (ARG1) and character (ARG2)
	deletes on character and returns it, or FALSE if
	buffer empty.  (Used in CHRTABLE)."
       IMBUF	     ;"uses IMED functions to IMEDIT a BUFFER.  SSV-28 up."
       IMDEL
 ;"knows how to delete chars from IMLAC.  Uses LVAL of IMLAC?
		to determine whether console is IMLAC."
       IMLAC?		    ;"true if console is IMLAC. (Set at load time)"
       IMTTY1
       IMTTY2
 ;"these are words which my-tty-off uses to pass to
		tty-set.  tty-set sets the way the system handles
		characters for you -- echoing, interrupting and
		activating may be specified for classes of characters.
		each class has a field in either tty1 or tty2."
       INIT			     ;"initializes defaults, sets 'IMLAC?'"
       ISIMLAC?				  ;"returns T if console is IMLAC."
       LINEBRKS
       MY-TTY-OFF ;"see 'TTY ORDER' on .INFO.;
		also NDR;TTY-ON (et al)."
       QUOTECHR
 ;"takes buffer (arg1) and character (arg2) -- quotes the
	next character by calling IOT, thus escaping the normal
	dispatch through GETSTR.  The function assumes
	the TTY environment has been set up correctly. (see MY-TTY-OFF)"
       TTY-POS
 ;"takes a char (H or V) and a FIX, does ctl-P to set cursor
	position in system."
       TTY1
       TTY2
 ;"THESE ARE WORDS WHICH MY-TTY-OFF USES TO PASS TO
		TTY-SET.  TTY-SET SETS THE WAY THE SYSTEM HANDLES
		CHARACTERS FOR YOU -- ECHOING, INTERRUPTING AND
		ACTIVATING MAY BE SPECIFIED FOR CLASSES OF CHARACTERS.
		EACH CLASS HAS A FIELD IN EITHER TTY1 OR TTY2."
       WORDBRKS		       ;"STRINGS OF BREAKS TO BE USED IN DELETION">  

<USE "STR" "TTY" "IM" "IMLAC">
;"substr, extract and tty-subrs, imed"
 
<USE-DEFER "JOBS">
;"for BUFTECO only" 
 
<SET FORMATEFFS <MAPF ,STRING ,ASCII [13 10 14 9 32 8]>>    
 
<SET WORDBRKS <STRING <ASCII 10> "	, ;:.">>  
 
<SET LINEBRKS <STRING <ASCII 10>>> 
 
<SET BUFSIZE 200>
;"INITIAL LENGTH TO GROW BUFFERS"   
 
<DEFINE ADDCHR (BUFFER CHR) 
	#DECL ((CHR) CHARACTER (VALUE BUFFER) BUFFER)
	<COND (<EMPTY? <2 .BUFFER>>			    ;"NO MORE ROOM"
	       <BUFGROW .BUFFER>)>
	<PUT .BUFFER 2 <REST <PUT <2 .BUFFER> 1 .CHR>>>>  
 
<DEFINE BUFGROW (BUFFER
		 "OPTIONAL" (BUFSIZE .BUFSIZE)
		 "AUX" (STR <1 .BUFFER>) (PTR <2 .BUFFER>)
		       (LSTR <- <LENGTH .STR> <LENGTH .PTR>>))
	#DECL ((VALUE BUFFER) BUFFER (STR PTR) STRING (BUFSIZE LSTR) FIX)
	<SET PTR
	     <REST <SET STR
			<EXTRACT .STR
				 <ISTRING <+ .BUFSIZE <LENGTH .STR>>>>>
		   .LSTR>>
	<PUT .BUFFER 1 .STR>
	<PUT .BUFFER 2 .PTR>>  
 
<DEFINE INIT () 
	#DECL ((VALUE) ATOM)
	<SET IMLAC? <ISIMLAC?>>
	<SET DELPRINT ,IMDEL>
	T> 
 
<DEFINE BUFTOS (BUF) 
	#DECL ((BUF) BUFFER (VALUE) STRING)
	<EXTRACT <1 .BUF> <- <LENGTH <1 .BUF>> <LENGTH <2 .BUF>>>>>    
 
<DEFINE DELCHR (BUF "AUX" (LSTR <LENGTH <1 .BUF>>) (PTR <2 .BUF>)) 
	#DECL ((VALUE) <OR FALSE CHARACTER> (BUF) BUFFER (LSTR) FIX
	       (PTR) STRING)
	<COND (<NOT <0? <- <LENGTH .PTR> .LSTR>>>
	       <PUT .BUF 2 <SET PTR <BACK .PTR>>>
	       <COND (.DELPRINT			       ;"IF TRUE, APPLY IT"
		      <APPLY .DELPRINT .BUF <1 .PTR>>)>
	       <1 .PTR>)>			    ;"RETURNS DELETED CHR"> 

<DEFINE BUFPRINT (BUF
		  "OPTIONAL" (CH .OUTCHAN)
		  "AUX" (STR <1 .BUF>) (LL <BUFLENGTH .BUF>))
	#DECL ((BUF) BUFFER (STR) STRING (VALUE LL) FIX)
	<REPEAT ((LEN .LL))
		#DECL ((LEN) FIX)
		<COND (<0? .LEN> <RETURN>)>
		<PRINC <1 .STR> .CH>
		<SET LEN <- .LEN 1>>
		<SET STR <REST .STR>>>
	.LL>    
 
<DEFINE BUFSPRINT (BUF
		   "OPTIONAL" (OUTCHAN .OUTCHAN)
		   "AUX" (STR <1 .BUF>) (L <LENGTH <2 .BUF>>) SS LL
			 (ESCSTR "\\\"") (ESCESC "\\\\")zpz )
	#DECL ((BUF VALUE) BUFFER (L LL) FIX (STR) STRING
	       (SS) <OR STRING FALSE> (OUTCHAN) <SPECIAL CHANNEL>)
	<PRINC !"">					    ;"start string"
	<PROG ()
	      <COND (<0? <SET LL <- <LENGTH .STR> .L>>> T)
		    (<SET SS <FIRST-OF .ESCSTR .STR .LL>>    ;"find losers"
		     <PRINTSTRING .STR
				  .OUTCHAN
				  <- <LENGTH .STR> <LENGTH .SS>>>
		     <PRINC <COND (<==? <1 .SS> !"\\> .ESCESC)
				  (ELSE .ESCSTR)>>
		     <SET STR <REST .SS>>
		     <AGAIN>)			       ;"go look some more"
		    (ELSE <PRINTSTRING .STR .OUTCHAN .LL>)>>
	<PRINC !"">				        ;"terminate string"
	.BUF>    
 
<DEFINE BUFLENGTH (BUF) 
	#DECL ((BUF) BUFFER (VALUE) FIX)
	<- <LENGTH <1 .BUF>> <LENGTH <2 .BUF>>>>   
 
<DEFINE BUFCLEAR (BUF) #DECL ((BUF VALUE) BUFFER) <PUT .BUF 2 <1 .BUF>>>   
 
<DEFINE DELTOCH (BUF BREAKS
		 "AUX" DELCH (COUNT 0) (ST <2 .BUF>)
		       (MAXC <BUFLENGTH .BUF>) (NBREAKFLAG <>) C)
	#DECL ((BUF) BUFFER (BREAKS ST) STRING (DELCH) <OR FALSE
							   CHARACTER>
	       (NBREAKFLAG) <OR FALSE 'T> (C) CHARACTER
	       (COUNT MAXC VALUE) FIX)
	<REPEAT ()
		<COND (<0? .MAXC> <RETURN .COUNT>)>
		<SET C <1 <SET ST <BACK .ST>>>>		   ;"get last char"
		<COND (<MEMQ .C .BREAKS>
		       <COND (.NBREAKFLAG	    ;"seen any non-breaks?"
			      <RETURN .COUNT>)>)
		      (<SET NBREAKFLAG T>)>		       ;"non-break"
		<DELCHR .BUF>	     ;"delete non-breaks, trailing breaks."
		<SET COUNT <+ .COUNT 1>>
		<SET MAXC <- .MAXC 1>>>>

<DEFINE CTL-Z-FCN (JOBCHAN STATUS-STRING) 
	#DECL ((JOBCHAN) CHANNEL (VALUE STATUS-STRING) STRING)
	<PRINC <STRING <ASCII 16> !"C>>			    ;"CLEAR SCREEN"
	<PRINC "
*** return from TECO by typing 'MC$$' where
     '$' is ESCAPE (altmode) -- otherwise the buffer will
     be lost.
*** TECO is being continued !!!
">>  

<DEFINE BUFTECO (BF "OPTIONAL" CHR "AUX" ST CH CHNAME "NAME" BUFTECO-ACT) 
	#DECL ((BF VALUE) BUFFER (ST) <OR FALSE STRING>
	       (CH) <OR FALSE CHANNEL> (CHNAME) STRING
	       (BUFTECO-ACT) ACTIVATION)
	<COND (<SET CH
		    <OPEN "PRINT"
			  <STRING "CMP" <UNAME>>
			  ">"
			  "DSK"
			  "HUDINI">>	        ;"TRY A CHANNEL ON HUDINI")
	      (<SET CH
		    <OPEN "PRINT"
			  <STRING "CMP" <UNAME>>
			  ">"
			  "DSK"
			  "COMMON">>		    ;"TRY ANOTHER CHANNEL")
	      (ELSE						 ;"GIVE UP"
	       <TERPRI>
	       <PRINC "Couldn't open output channel, cause: ">
	       <PRINC <COND (<EMPTY? .CH> "not known.") (<1 .CH>)>>
	       <RETURN .BF .BUFTECO-ACT>)>
	<COND (.CH <BUFPRINT .BF .CH> <CLOSE .CH>)>    ;"OUTPUT THE BUFFER"
	<SET ST
	     <RUN "TECO"				      ;"JOB-TO-RUN"
		  <STRING "ER"
			  <SET CHNAME	 ;"REMEMBER FILE NAME FOR DELETION"
			       <STRING <9 .CH>
				       !":
				       <10 .CH>
				       !";
				       <7 .CH>
				       !" 
				       <8 .CH>>>
			  <ASCII 27>
			  "^Y">				        ;"JCL-LINE"
		  "COMSYS"		       ;"system name for init file"
		  ,CTL-Z-FCN>>
	<PRINC "C">					    ;"clear screen"
	<PRINC "
Back to MUDDLE:
">
	<COND (<NOT .ST>
	       <PRINC "
An error occurred in returning from TECO: ">
	       <PRINC <COND (<EMPTY? .ST> "reason unknown")
			    (ELSE <1 .ST>)>>
	       <TERPRI>
	       <PRINC "The buffer has been left unchanged.
">)
	      (<0? <LENGTH .ST>>
	       <PRINC "An empty string was returned from TECO.
The buffer has been left unchanged.">
	       <TERPRI>)
	      (ELSE
	       <BUFCLEAR .BF>
	       <ADDSTRING .BF .ST>
	       <RENAME .CHNAME>		       ;"delete the file on hudini"
	       <PRINT "DONE">
	       <TERPRI>)>
	<MY-TTY-OFF>					   ;"reset the tty"
	.BF>
;"CHARACTER GROUP MODES FOR USE DURING IMEDIT (SEE TTY ORDER .INFO.;)"    

<SET IMTTY1 #WORD *020202020202*>  
 
<SET IMTTY2 #WORD *030202020202*>
;"CHARACTER GROUP MODES FOR USE IN GETSTRACT"
 
<SET TTY1 #WORD *022020202020*>
;"DON'T ECHO CTL CHARS"    
 
<SET TTY2 #WORD *232022220220*>    
 
<DEFINE MY-TTY-OFF ("OPTIONAL" (W1 .TTY1) (W2 .TTY2)) 
	#DECL ((W1 W2) WORD)
	<TTY-SET <PUT <PUT <TTY-GET> 1 .W1> 2 .W2>>> 
 
<DEFINE ERRFCN (FRM "TUPLE" ANY "AUX" ERRVAL OTTY) 
	#DECL ((FRM) FRAME (OTTY) <UVECTOR [REST WORD]>)
	<COND (<AND <BOUND? GETSTRACT> <LEGAL? .GETSTRACT>>
						     ;"HE MAY HAVE ERRETED"
	       <SET OTTY <TTY-GET>>		     ;"REMEMBER TTY STATUS"
	       <TTY-SET .OLD-TTY>			      ;"RESETS TTY"
	       <OFF .GETSTR-HAND>			   ;"OFFS THIS FCN"
	       <INT-LEVEL 0>
	       <SET ERRVAL <ERROR !.ANY>>		 ;"RE-ENTERS ERROR"
	       <HANDLER <GET ERROR!-INTERRUPTS INTERRUPT> .GETSTR-HAND>
							  ;"IF ERRET W/ARG"
	       <TTY-SET .OTTY>			        ;"RESET TTY STATUS"
	       <ERRET .ERRVAL .FRM>		 ;"IF HE ERRET'S ANYTHING")
	      (ELSE		       ;"GROVEL AND DELETE THIS HANDLER")>>   
 
<DEFINE CHARFCN (CHR CHN "AUX" OTTY) 
	#DECL ((CHR) CHARACTER (CHN) CHANNEL (OTTY) <UVECTOR [REST WORD]>
	       (VALUE) <OR DISMISS FALSE>)
	<COND (<AND <BOUND? GETSTRACT>
		    <LEGAL? .GETSTRACT>
		    <OR <=? .CHR <ASCII 7>> <=? .CHR !">>>
	       <SET OTTY <TTY-GET>>		     ;"REMEMBER TTY-STATUS"
	       <TTY-SET .OLzz$D-TTY>		        ;"SET UP IN GETSTR"
	       <OFF .GETSTR-HAND>			   ;"ERROR HANDLER"
	       <OFF .GETSTR-CHAND>			    ;"CHAR HANDLER"
	       <QUITTER .CHR .CHN>
			        ;"IF RETURNS, WANT TO REINSTATE INTERRUPTS"
	       <HANDLER <GET ERROR!-INTERRUPTS INTERRUPT> .GETSTR-HAND>
	       <HANDLER <GET ,INCHAN INTERRUPT> .GETSTR-CHAND>
	       <TTY-SET .OTTY>				   ;"REINSTATE TTY"
	       #DISMISS T)>>
 
<OFF <SETG GLOBL-GETSTR-HAND <ON "ERROR" ,ERRFCN 3 0>>>
 
<OFF <SETG GLOBL-GETSTR-CHAND <ON "CHAR" ,CHARFCN 7 0 ,INCHAN>>> 

<DEFINE GETSTR (BUF
		"OPTIONAL" (CHRTABLE .CHRTABLE) (PROMPT1 "") (PROMPT2 "")
		"AUX" (OLD-TTY <TTY-GET>) GETSTR-HAND GETSTR-CHAND)
	#DECL ((VALUE BUF) BUFFER (CHRTABLE) VECTOR (PROMPT1 PROMPT2) STRING
	       (OLD-TTY) <SPECIAL <UVECTOR [REST WORD]>>
	       (GETSTR-HAND GETSTR-CHAND) <SPECIAL HANDLER>)
	<MY-TTY-OFF>				 ;"SET SYSTEM TTY-HANDLING"
	<SET GETSTR-HAND
	     <HANDLER <GET ERROR!-INTERRUPTS INTERRUPT>
		      ,GLOBL-GETSTR-HAND>>
	<SET GETSTR-CHAND
	     <HANDLER <GET ,INCHAN INTERRUPT> ,GLOBL-GETSTR-CHAND>>
	<PRINC .PROMPT1>
	<PRINC .PROMPT2>
	<REPEAT GETSTRACT (CHR CP)
		#DECL ((CHR) CHARACTER (CP) <OR FALSE VECTOR>
		       (GETSTRACT) <SPECIAL ACTIVATION>)
		<COND (<SET CP <MEMQ <SET CHR <IOT>> .CHRTABLE>>
		       <APPLY <2 .CP> .BUF .CHR>)
		      (ELSE
		       <ADDCHR .BUF .CHR>
		       <AND <L? <ASCII .CHR> 32>
			    <NOT <MEMQ .CHR .FORMATEFFS>>
			    <PRINC .CHR>>)>>
	<OFF .GETSTR-CHAND>			     ;"GET RID OF CHAR FCN"
	<OFF .GETSTR-HAND>			    ;"GET RID OF ERROR FCN"
	<TTY-SET .OLD-TTY>				     ;"RESTORE TTY"
	<TERPRI>
	.BUF>  
 
<DEFINE DWORD (BUF CHR) 
	#DECL ((BUF) BUFFER (CHR) CHARACTER (VALUE) FIX)
	<DELTOCH .BUF .WORDBRKS>>  
 
<DEFINE DLINE (BUF CHR) 
	#DECL ((BUF) BUFFER (CHR) CHARACTER (VALUE) FIX)
	<DELTOCH .BUF .LINEBRKS>>  
 
<DEFINE QUOTECHR (BUF CHR) 
	#DECL ((BUF VALUE) BUFFER (CHR) CHARACTER)
	<SET CHR <IOT>>					 ;"get a character"
	<AND <L? <ASCII .CHR> 32>		    ;"print it if echo off"
	     <NOT <MEMQ .CHR .FORMATEFFS>>
	     <PRINC .CHR>>
	<ADDCHR .BUF .CHR>>    
 
<DEFINE ADDCRLF (BUF CHR) 
	#DECL ((BUF VALUE) BUFFER (CHR) CHARACTER)
	<ADDCHR .BUF !"î>
	<ADDCHR .BUF !"
>					     ;"LF">   
 
<DEFINE IDELCHR (BUF CHR) 
	#DECL ((BUF) BUFFER (CHR) CHARACTER (VALUE) <OR FALSE CHARACTER>)
	<DELCHR .BUF>>    

<DEFINE IMDEL (BUF CHR "AUX" (C <ASCII .CHR>)) 
	#DECL ((BUF) BUFFER (CHR VALUE) CHARACTER (C) FIX)
	<COND (.IMLAC?
	       <COND (<OR <==? .C 8>				      ;"bs"
			  <==? .C 9>>				     ;"tab"
		      <HPOS-BUF .BUF>
		      <DEL-TO-EOL>)
		     (<==? .C 10>				      ;"lf"
		      <PRINC "U">			     ;"line starve"
		      <UNPRINT 2>)
		     (<==? .C 13> <HPOS-BUF .BUF>)
		     (ELSE
		      <PRINC "X">
		      <UNPRINT 2>
		      <AND <L=? <ASCII .CHR> 31>
			   <PRINC "X">
			   <UNPRINT 2>>)>
	       .CHR					    ;"RETURNS CHR")
	      (ELSE <PRINC .CHR>)>>   
 
<DEFINE DEL-TO-EOL () <PRINC "L"> <UNPRINT 2>>   
 
<DEFINE UNPRINT (N)	   ;"hacks line-pos in .OUTCHAN -- for ctl-P hacks"
	#DECL ((VALUE N) FIX)
	<PUT .OUTCHAN 14 <- <NTH .OUTCHAN 14> .N>>
	<14 .OUTCHAN>>   
 
<DEFINE IBUFCLEAR (BUF CHR) 
	#DECL ((BUF VALUE) BUFFER (CHR) CHARACTER)
	<BUFCLEAR .BUF>
	<TERPRI>
	.BUF>
 
<DEFINE IBUFPRINT (BUF CHR) 
	#DECL ((BUF) BUFFER (CHR) CHARACTER (VALUE) FIX)
	<COND (<=? .CHR !"> <PRINC "C">) (ELSE <PRINC .CHR>)>
						 ;"IF FF__, CLEAR SCREEN"
	<TERPRI>
	<BUFPRINT .BUF>>   
 
<DEFINE EFUNCTION (BUF "OPTIONAL" CHR) 
	#DECL ((BUF VALUE) BUFFER (CHR) CHARACTER)
	<COND (.IMLAC?		    ;"DON'T ALLOW THIS CLOWNING ON AN ARDS"
	       <IMBUF .BUF>  ;"go imedit, user returns with PAGE-TRANSMIT") (ELSE
									     <ADDCHR
									      .BUF
									      .CHR>
						  ;"ADDS ^E IF NOT IMLAC")>
	.BUF>    

<DEFINE IMBUF (BUF "OPTIONAL" CHR) 
	#DECL ((VALUE BUF) BUFFER (CHR) CHARACTER)
	<HANDLER ,ERROR-EVENT ,ERROR-HANDLER>
	<IMAGE 12>
	<BUFPRINT .BUF ,IMLAC-OUTCHAN>
	<IMAGE 1>
	<IMAGE 9>
	<TTY-OFF>
	<COND (<IMLAC-COMMAND>
	       <RESET-IMLAC>
	       <ERROR NO-PAGE-XMIT!-ERRORS IMSTR>)
	      (ELSE
	       <BUFCLEAR .BUF>	   ;"flush any leftover '!$' or 'alt-mode'"
	       <SET CHR <NEXTCHR ,IMLAC-INCHAN>>
	       <COND (<=? .CHR <ASCII 27>> <READCHR ,IMLAC-INCHAN>)
		     (<=? .CHR !"!>
		      <READCHR ,IMLAC-INCHAN>		       ;"flush '!'"
		      <COND (<=? <NEXTCHR ,IMLAC-INCHAN> <ASCII 27>>
			     <READCHR ,IMLAC-INCHAN>)
			    (ELSE <ADDCHR .BUF !"!>)>)>
	       <PROG (N)
		     #DECL ((N) FIX)
		     <COND (<0? <BUFLENGTH .BUF>> <BUFGROW .BUF>)>
		 ;"cretinous READSTRING change -- error on 0 length string"
		     <SET N <READSTRING <2 .BUF> ,IMLAC-INCHAN "!">>
		     <COND (<=? .N <LENGTH <2 .BUF>>>
			    <PUT .BUF 2 <REST <2 .BUF> .N>>
			    <BUFGROW .BUF <LENGTH <1 .BUF>>>
						       ;"double the length"
			    <AGAIN>		        ;"read some more")>
		     <READCHR ,IMLAC-INCHAN>		  ;"flush the excl"
		     <PUT .BUF 2 <REST <2 .BUF> .N>>
		     <COND (<=? <NEXTCHR ,IMLAC-INCHAN> zz(<ASCII 27>>
							   ;"excl-alt-mode"
			    .BUF)
			   (ELSE <ADDCHR .BUF !"!> <AGAIN>
					 ;"'!' not followed by alt-mode")>>
		       ;"checks imlac type, and sets cursor so system wins"
	       <IMAGE 1>
	       <IMAGE 13>			   ;"inquire IMLAC command"
	       <SET N <CHTYPE <TYI> FIX>>
	       <TYI>					    ;"flush 'type'"
	       <COND (<G? .N <+ 29 32>>		        ;"in SSV.30 and up"
		      <IMAGE 1>
		      <IMAGE 14>
		      <SET N <- <CHTYPE <TYI> FIX> 32>>
		      <TTY-POS !"V .N>			        ;"vert-pos"
		      <HPOS-BUF .BUF <>>	   ;" FALSE => real tabs")>
	       <RESET-IMLAC>
	       <MY-TTY-OFF>
	       <DEL-TO-EOL>)>
	.BUF>  
 
<SETG GARBS "HX">  

<DEFINE TTY-POS (CHR POS "AUX" (GARBSTR ,GARBS)) 
	#DECL ((VALUE POS) FIX (CHR) CHARACTER (GARBSTR) STRING)
	<OR <G=? .POS 0> <SET POS 0>>			        ;"neg pos?"
	<PUT .GARBSTR 2 .CHR>
	<PUT .GARBSTR 3 <ASCII <+ .POS 8>>>	       ;"system definition"
	<PRINC .GARBSTR>
	<UNPRINT 3>
	.POS>  
 
<DEFINE HPOS-BUF (BUF "OPTIONAL" (SOFT-TAB T) "AUX" SCR) 
	#DECL ((BUF) BUFFER (SOFT-TAB) <OR ATOM FALSE>
	       (SCR) <OR FALSE STRING> (VALUE) FIX)
	<SET SCR <BACKS <2 .BUF> "î">>							      ;"back to cr"
	<COND (.SCR <SET SCR <REST .SCR>>		        ;"rest cr")
	      (ELSE <SET SCR <1 .BUF>>)>			 ;"no cr's"
	<REPEAT ((N 0) (LEN <- <LENGTH .SCR> <LENGTH <2 .BUF>>>))
		#DECL ((N LEN) FIX)
		<COND (<0? .LEN> <RETURN <TTY-POS !"H .N>>)>
		<SET C <ASCII <1 .SCR>>>
		<COND (<G=? .C 32> <SET N <+ .N 1>>)
		      (<==? .C 8>				      ;"bs"
		       <SET N <- .N 1>>)
		      (<==? .C 9>				     ;"tab"
		       <COND (.SOFT-TAB			  ;"simulated tabs"
			      <SET N <+ .N <- 8 <MOD .N 8>>>>)
			     (ELSE <SET N <+ .N 1>>)>)
		      (<==? .C 10>			  ;"lf -- 0 WIDTH")
		      (ELSE <SET N <+ .N 2>>)>
		<SET LEN <- .LEN 1>>
		<SET SCR <REST .SCR>>>>   
 
<DEFINE IMEDITPRINT (CHR "AUX" (N <ASCII .CHR>)) 
	#DECL ((CHR) CHARACTER (N VALUE) FIX)
					   ;"FOR USE WITH INTERNAL CHANNEL"
	<COND (<AND <L=? .N 32> <NOT <MEMBER .CHR .FORMATEFFS>>>
	       <IMAGE 35>
	       <IMAGE 35>
	       <IMAGE <+ .N 64>>
			   ;"SENDS CTL CHR AS ##N, WHERE N = ASCII+ *100*")
	      (ELSE <IMAGE .N>)>>    

<DEFINE FILEINP (BUF "OPTIONAL" CHR "AUX" LST FL CH PTR) 
   #DECL ((VALUE BUF) BUFFER (CHR) CHARACTER (CH) <OR FALSE CHANNEL>
	  (PTR) STRING (LST) FIX (FL) <OR FIX FALSE>)
   <PROG GETFILENAME ((BB <BUFMAKE 40>) ST)
	 #DECL ((ST) STRING (BB) BUFFER)
	 <PRINC " FILE-NAME : ">
	 <BUFPRINT .BB>				     ;"SHOW HIM THE BUFFER"
	 <GETSTR .BB>
	 <AND <0? <SET LST <BUFLENGTH .BB>>> <RETURN <SET FL <>>>>
						 ;"ESCAPE BY NUL FILE NAME"
	 <OR <PROG ((ANYTOK <>))
		   #DECL ((ANYTOK) <OR FALSE ATOM>)
		   <SET ST <EXTRACT <1 .BB> .LST>>
		   <MAPR <>
			 <FUNCTION (S) 
				 #DECL ((S) STRING)
				 <COND (<L? <ASCII <1 .S>> *41*>
					<PUT .S 1 !" >)
					(ELSE <SET ANYTOK T>)>>
			 .ST>
		   <SET CH <OPEN "READ"
		   		<COND (.ANYTOK .ST)("DSK:")>>>>
	     <PROG ()
		   <PRINT .ST>	;"display the file he tried to open"
		   <PRINC <1 .CH>>	;"and the reason for failure"
		   <TERPRI>
		   <AGAIN .GETFILENAME>>>>
   <COND (<0? .LST>				   ;"nul file name string?"
	  <PRINT "FILE-INPUT ABORTED">)
	 (<SET FL <FILE-LENGTH .CH>>
		     ;"if gives file-length,
					 we can grow the buffer"
	  <COND (<G? .FL <LENGTH <2 .BUF>>>
		 <BUFGROW .BUF <- .FL <LENGTH <2 .BUF>> -100>>
						       ;"grow the buffer")>
	  <SET PTR <2 .BUF>>
	  <PUT .BUF 2 <REST .PTR <READSTRING .PTR .CH .FL>>>
	  <CLOSE .CH>
	  <PRINT "DONE">)
	 (ELSE			        ;"have to grow by leaps and bounds"
	  <COND (<0? <BUFLENGTH .BUF>> <BUFGROW .BUF>)>
	  <REPEAT ()
		  <SET LST <LENGTH <SET PTR <2 .BUF>>>>	 ;"buffer may grow"
		  <SET FL <READSTRING .PTR .CH .LST>>
		  <PUT .BUF 2 <REST .PTR .FL>>	    ;"update end-of-buffer"
		  <COND (<L? .FL .LST>		 ;"didn't fill the buffer?"
			 <RETURN <CLOSE .CH>>)>			  ;"at eof"
		  <BUFGROW .BUF>	    ;"not eof, so grow the buffer">
	  <PRINT "DONE">)>
   .BUF>    

<DEFINE ADDSTRING (BF ST
		   "OPTIONAL" (N <LENGTH .ST>)
		   "AUX" (L <LENGTH <2 .BF>>))
	#DECL ((VALUE BF) BUFFER (ST) STRING (L N) FIX)
	<AND <OR <L? .N 0> <G? .N <LENGTH .ST>>>
	     <SET N <LENGTH .ST>>>		 ;"apply bounds constraint"
	<COND (<G? .N .L>			      ;"no room in buffer?"
	       <BUFGROW .BF .N>)>
	<PUT .BF 2 <REST <EXTRACT .ST <2 .BF> .N> .N>>
	.BF>   
 
<DEFINE ADDFILE (BF CH
		 "OPTIONAL" (N -1)
		 "AUX" (S <2 .BF>) (L <LENGTH .S>) (FL <FILE-LENGTH .CH>)
		       (ACC <17 .CH>))
   #DECL ((VALUE BF) BUFFER (CH) CHANNEL (S) STRING (FL) <OR FIX FALSE>
	  (ACC L N) FIX)
   <COND (<NOT .FL>				 ;"directory 'files', etc."
	  <REPEAT ((M 0) (I 0) (S <ISTRING 100>))
		  <SET M <READSTRING .S .CH 100 0>>	       ;"read some"
		  <COND (<L? .M 100>			    ;"read it all?"
			 <RESET .CH>			       ;"re-access"
			 <REPEAT ()
				 <COND (<L=? .ACC 100>
					<READSTRING .S .CH .ACC>
					<RETURN>)>
				 <SET ACC <- .ACC 100>>
				 <READSTRING .S .CH>>
				        ;"reads and throws away characterz #Rs"
			 <RETURN <SET FL <+ .M .I>>>)>
		  <SET I <+ .M .I>>	        ;"count over iterations">)>
   <COND (<OR <L? .N 0> <G? .N .FL>> <SET N .FL>)>	 ;"# chars to read"
   <COND (<L? .L .N>					 ;"not enough room"
	  <SET S <2 <BUFGROW .BF .N>>>)>
   <SET N <READSTRING .S .CH .N 0>>			    ;"do real read"
   <PUT .BF 2 <REST .S .N>>			     ;"set buffer 'access'"
   .BF> 
 
<DEFINE ISIMLAC? () 
	#DECL ((VALUE) <OR ATOM FALSE>)
	<=? 2 <CHTYPE <ANDB 7 <11 ,INCHAN>> FIX>>> 
 
<INIT>
;"set IMLAC?"    

<SET CHRTABLE
     [<ASCII 5>
      <COND (.IMLAC? ,EFUNCTION) (ELSE ,BUFTECO)>
      <ASCII 6>
      ,FILEINP
      <ASCII 127>
      ,IDELCHR
      <ASCII 13>
      ,ADDCRLF
      <ASCII 12>
      ,IBUFPRINT
      <ASCII 4>
      ,IBUFPRINT
      <ASCII 17>
      ,QUOTECHR
      <ASCII 27>
      <FUNCTION (BUF CHR) <RETURN .BUF .GETSTRACT>>
      <ASCII 23>
      ,DWORD
      <ASCII 24>
      ,DLINE
      <ASCII 0>
      ,IBUFCLEAR]>    
 
<DEFINE BUFMAKE (N "AUX" (ST <ISTRING .N>)) 
	#DECL ((N) FIX (ST) STRING (VALUE) BUFFER)
	<CHTYPE [.ST .ST] BUFFER>>  
 
<PRINTTYPE BUFFER ,BUFPRINT>  
 
<ENDPACKAGE>   
 
#R$",
TITLE DELETE FROM PACK 0

.MLLIT==1

A=1
B=2
C=3
D=4
E=5
F=6
P=17

DSKO==1
TYOC==2
DIRPAG==5
DIRLOC==<2000*DIRPAG>

;TABLE OF SYMBOLS

EVALTB:	SQUOZE 4,QUDPR		;INDEX OFF C (CHANNEL)
QUDPR:	0
	SQUOZE 4,QSNLCN
QSNLCN: 0
	SQUOZE 4,IOCHNM
IOCHNM:	0
	SQUOZE 4,LUBLK
LUBLK:	0

HPOS:	0

NAME:	0
FNAME1:	0
FNAME2:	0

WINPAK:	0,,430000
HACK:	0
PDL:	BLOCK 10
JCL:	BLOCK 5
ILLCHR:	.VALUE  [ASCIZ /:ILLEGAL CHARACTER IN FILE SPECIFICATION
:KILL
/]

START:	.BREAK	12,[5,,JCL]
	MOVE	P,[-10,,PDL]
	MOVE	E,[440700,,JCL]
	.CALL	TTYOPN
	 .VALUE [ASCIZ /CAN'T OPEN TTY/]
	PUSHJ	P,FPARSE
	.CALL	FILOPN
	 .VALUE [ASCIZ /CAN'T OPEN ON DIRECTORY/]
	.CALL	RFNAME
	 .VALUE [ASCIZ /RFNAME FAILED/]

	MOVEI	A,6
EVLP:	MOVE	B,EVALTB(A)
	.EVAL	B,
	 .VALUE [ASCIZ /EVAL FAILED/]
	MOVEM	B,EVALTB+1(A)
	SUBI	A,2
	JUMPGE	A,EVLP

HACKER:	.SUSET	[.RUIND,,A]
	IMUL	A,LUBLK
	ADD	A,IOCHNM	
	ADDI	A,DSKO
	HRLS	A
	HRRI	A,HACK
	.GETLOC	A,			;GET THE CHANNEL NUMBER
	HLRZ	A,HACK
	ADD	A,QUDPR
	HRLS	A
	HRRI	A,HACK
	.GETLOC	A,			;GET THE DIRECTORY POINTER
	MOVE	A,HACK
	ADD	A,QSNLCN
	HRLS	A
	HRRI	A,HACK
	.GETLOC	A,			;GET THE LOCATION OF DIR
	HRRZ	A,HACK
	LSH	A,-12			;GET PAGE IN SYSTEM OF DIRECTORY
	.CALL	SYSMAP
	 .VALUE [ASCIZ /CAN'T GET SYSTEM PAGE/]
	MOVEI	A,DIRLOC
	IOR	A,DIRLOC+1		;START OF DIRECTORY ENTRIES IN A
DIRLP:	LDB	B,[1200,,A]
	CAIL	B,1773
	 JRST	FINIS
	MOVE	B,2(A)			;THIRD WORD OF DIR AREA	
	LDB	C,[150500,,B]
	JUMPE	C,LOSER
DIREND:	ADDI	A,5
	JRST	DIRLP

LOSER:	MOVE	B,A
	TRZ	B,776000
	IOR	B,HACK			;LOCATION IN SYSTEM
	ADDI	B,2
	MOVE	C,2(A)
	IORM	C,WINPAK
	HRLI	B,WINPAK
	.SETLOC	B,
	.CALL	KILLIT
	 JRST	[OASC [ASCIZ /
CAN'T DELETE - /]
		 JRST LOSER1]
	OASC 	[ASCIZ /
DELETED FILE - /]
LOSER1:	OSIX	(A)
	OASCI	40
	OSIX	1(A)
	JRST	DIREND	
		
FINIS:	.CALL	FILDEL
	 JFCL
	.BREAK	16,124000
	
TTYOPN: SETZ
	SIXBIT /OPEN/
 	5000,,4001
	1000,,TYOC
	SETZ [SIXBIT /TTY/]

KILLIT:	SETZ
	SIXBIT /DELETE/
	[SIXBIT /DSK/]
	(A)
	1(A)
	SETZ NAME

SYSMAP:	SETZ
	SIXBIT /CORBLK/
	MOVEI 10000
	[-1]
	MOVEI DIRPAG
	MOVEI %JSABS
	SETZ A

;ROUTINE TO PARSE FILE NAMES
	
FPARSE:	SETZM	NAME			;CLEAR NAME SLOT
	MOVE	F,[440600,,NAME]

GETCHR:	ILDB	B,E			;FIND NEXT NON-EMPTY CHARACTER
	JUMPE	B,CPOPJ
	CAIE	B,40
	 CAIN	B,11
	  JRST	GETCHR
	
FIELD:	CAIE	B,40			;HERE TO GET A NAME
	 CAIN	B,11
CPOPJ:	  POPJ	P,
	CAIE	B,0
	 CAIN	B,15
	  POPJ	P,
	CAIGE	B,40			;SUBI B,40 < 0 (BAD CHARACTER)
	 JRST	ILLCHR
	SUBI	B,40
	CAIL	B,100
	 SUBI	B,40			;CASE CONVERSION
	TLNE	F,770000		;IGNORE MORE THAN 6 CHARACTERS
	 IDPB	B,F
	ILDB	B,E
	JRST	FIELD

FILOPN:	SETZ
	SIXBIT /OPEN/
	MOVSI .BIO
	MOVEI DSKO
	[SIXBIT /DSK/]
	[SIXBIT /_TEMP_/]
	[SIXBIT />/]	
	SETZ NAME

RFNAME:	SETZ
	SIXBIT /RFNAME/
	MOVEI DSKO
	MOVEM
	MOVEM FNAME1
	SETZM FNAME2

FILDEL:	SETZ
	SIXBIT /DELETE/
	[SIXBIT /DSK/]
	FNAME1
	FNAME2
	SETZ NAME


; TYPEOUT UUOS (STRAIGHT FROM DIRED, WITH SOME HELP FROM PDL)

ZZZ==.
        LOC 40
        0
        JSR UUOH
        LOC ZZZ
UUOCT==0
UUOTAB:	JRST ILUUO
	IRPS X,,[ODEC OBPTR OHPOS OCTLP OALIGN OSIX OASC OASCI OASCR OSIXS]
	UUOCT==UUOCT+1
	X=UUOCT_33
	JRST U!X
	TERMIN

UUOMAX==.-UUOTAB

UUOH:	0
	PUSH P,A
	PUSH P,B
	PUSH P,C
	PUSH P,D
	MOVEI @40			; GET EFF ADDR. OF UUO
	MOVEM UUOE'
	MOVE @0
	MOVEM UUOD'			; CONTENTS OF EFF ADR
	MOVE B,UUOE			; EFF ADR
	LDB A,[270400,,40]		; GET UUO AC,
	LDB C,[330600,,40]		; OP CODE
	CAIL C,UUOMAX
	MOVEI C,0	; GRT=>ILLEGAL
	JRST @UUOTAB(C)	; GO TO PROPER ROUT

UUORET: POP P,D
	POP P,C
	POP P,B
	POP P,A		; RESTORE AC'S
	JRST 2,@UUOH

ILUUO:	.VALUE [ASCIZ /:ILLEGAL UUO/]
UOBPTR:	MOVEI C,0
	MOVE B,@40
	JRST UOASC1
UOASCR:	SKIPA C,[^M]	; CR FOR END OF TYPE
UOASC:	MOVEI C,0	; NO CR
	HRLI B,440700	; MAKE ASCII POINTER
UOASC1:	ILDB A,B	; GET CHAR
	JUMPE A,.+3	; FINISH?
	PUSHJ P,IOTA
	J"%xRST .-3	; AND GET ANOTHER
	SKIPE A,C	; GET SAVED CR?
	PUSHJ P,IOTA
	JRST UUORET

UOASCC:	HRLI B,440700	; MAKE ASCII POINTER
UOAS1C:	ILDB A,B	; GET CHAR
	CAIN A,^C
	JRST UUORET
	PUSHJ P,IOTA
	JRST UOAS1C	; AND GET ANOTHER

UOCTLP:	MOVEI A,^P
	PUSHJ P,IOTA1

UOASCI:	MOVE A,B	; PRT ASCII IMMEDIATE
	PUSHJ P,IOTA
	JRST UUORET

UOSIX:	MOVE B,UUOD
USXOOP:	JUMPE B,UUORET
	LDB A,[360600,,B]
	ADDI A,40
	PUSHJ P,IOTA
	LSH B,6
	JRST USXOOP

UOSIXS:	MOVE A,[440600,,UUOD]
USLOOP:	ILDB C,A
	ADDI C,40
	PUSHJ P,IOTC
	TLNE A,770000
	JRST USLOOP
	JRST UUORET

UOHPOS:	SUB B,HPOS
	JUMPLE B,UOASCI
UOHPO1:	MOVEI A,40
	PUSHJ P,IOTA
	SOJG B,UOHPO1
	JRST UUORET

POWER:	0 ? 1 ? 10. ? 100. ? 1000. ? 10000. ? 100000. ? 1000000.

UOALIG:	MOVE D,UUOD
	ANDI A,7
	MOVE A,POWER(A)
	MOVEI C,40
UOALI1:	CAMLE A,D
	PUSHJ P,IOTC
	IDIVI A,10.
	CAIE A,1
	 JRST UOALI1
	SETZ A,

UODEC:	SKIPA C,[10.]	; GET BASE FOR DECIMAL
UOOCT:	MOVEI C,8.	; OCTAL BASE
	MOVE B,UUOD	; GET ACTUAL WORD TO PRT
	JRST .+3	; JOIN CODE
UODECI:	SKIPA C,[10.]	; DECIMAL
UOOCTI:	MOVEI C,8.
	MOVEM C,BASE'
	SKIPN A
	HRREI A,-1	; A=DIGIT COUNT
	PUSHJ P,UONUM	; PRINT NUMBR
	JRST UUORET

UONUM:	IDIV B,BASE
	HRLM C,(P)	; SAVE DIGIT
	SOJE A,UONUM1	; DONE IF 0
	SKIPG A		; + => MORE
	SKIPE B		; - => B=0 => DONE
	PUSHJ P,UONUM	; ELSE MORE
UONUM1:	HLRZ C,(P)	; RETREIVE DIGITS
	ADDI C,"0	; MAKE TO ASCII
	CAILE C,"9	; IS IT GOOD DIG
	ADDI C,"A-"9-1	; MAKE HEX DIGIT
	PUSHJ P,IOTC
	POPJ P,	; RET

IOTC:	PUSH P,A
	MOVE A,C
	PUSHJ P,IOTA
	JRST POPAJ

IOTA:	CAIN A,^P
	JRST IOTAP
IOTA1:	CAIN A,^J
	 POPJ P,
	.IOT TYOC,A
	CAIN A,^I
	 JRST [MOVE A,HPOS
	       ADDI A,10
	       ANDI A,7770
	       MOVEM A,HPOS
	       POPJ P,]
	AOS HPOS
	CAIE A,^M
	 POPJ P,
	SETZM HPOS
	POPJ P,
IOTAP:	.IOT TYOC,["^]
	ADDI A,100
	JRST IOTA1

POPAJ:	POP P,A
	POPJ P,

	END START%x(v	|0
<PACKAGE "CALRDR">

<ENTRY IMLAC?
       COMMAPRINT
       BLTREST  ;"copies tuple into vector -- tuple may contain els from vector"
       LKPR
	  ;"vector for symtab lookup results -- used to be specialled in READER"
       READER-NULL-LINE
       READER-ABORT
       OTTY				  ;"saves tty status during reader call"
       MULTLIST
       READER
       READARGS
       RTOBRK						       ;"ASSEMBLY-CODED"
       LAST-READER-BREAK
       CALRDRINIT
       BFR						        ;"reader buffer"
       LEN						 ;"number of chars used"
       CSACT
       RDRHAND
       RDRHEAD
       CONFIRMS
       COMPLETES
       TERMINS
       NSTERMS
       POSCHAR
       HELPCHAR
       ABORTCHAR
       MULTCHAR
       RUBCHAR
       LINEKILL
       WORDKILL
       BUFFERKILL
       CRETYPE
       DRETYPE
       MASTER
       MULT-CR-MASTER					    ;"string for RTOBRK"
       MASTER-STRING
       QUOTCHAR
       INTTYCHAR
       EXACT-MATCH-CHAR
       PARTIAL-MATCH-CHAR
       NO-MATCH-CHAR
       CALICO-FILE-ATOMS
       SPCCHARS
       XSPCCHARS>

<USE "CALSYM" "CALUTL" "STR" "TTY" "BLT" "TIMFCN">

<SETG READER-NULL-LINE #FALSE ("Null line")>

<SETG READER-ABORT #FALSE (#FALSE ())>

<SET LKPR [0 0 "" 0]>

<SET FN-ATOMS
     '[CALICO-DEV CALICO-SNM CALICO-NM1 CALICO-NM2]>

<SET FN-SEPS
     <COND (,TENEX '(":<" !"> !". !" )) (ELSE ":;  ")>>

<SET TORDR <IVECTOR 4>>

<SETG RTOBRK
      %<FIXUP!-RSUBRS '[
#CODE ![17200316425 23748380440 12494045361 23885775026 26046627857 -26034307072
17200316427 23748380560 12494045361 23885775026 26583498769 -26034307072 
17200316429 23748380440 -34091302910 12494045361 26583498769 -26038239230 
23882366978 17199005697 23748380440 23848812545 23848812546 23849036803 
23852220594 23849036801 23852220594 17200316431 23748380440 23848812545 
23848812546 12494045363 26583498769 23088857151 26583498790 23088857129 
23751557281 17459314691 26046627843 23088857162 23088857119 -20381696000 
28205908023 12384206849 33285996546 26608664586 23088857130 17484480515 
-21187002368 17224433665 28205908027 12381585413 26608664586 32769310770 
23088857162 272105478 17459314688 17467703297 23088857119 272105478 17459314688 
17467703297 23088857162 31406948429 24159191474 29263659007 23088857159 
9126805563 26583498783 17322475533 29527900160 4311744513 17459314691 
-34091302835 17190879235 26583498762 23088857119 17356029953 23885775026 
17213423625 24733024436 -20391657472 28197519448 17197694977 12373196802 
27676639235 23088857182 33163575380 24733024437 21785214977 28088467537 
29800267776 23088857184 23088857234 -30287331328 23088857176 24020516864 
29800267776 23088857211 29800529918 23088857202 29263659007 29932912649 
23088857202 17322475536 17199267847 18387828739 24965021723 23748392970 
17322475608 17199267847 23748392970 33691009033 23088857192 17190879235 
17199267847 23748392970 17190879235 26046627853 23088857211 17322475530 
17199267847 23748392970 31141134341 -20381958138 33285996546 17190879235 
12627214343 -21187264506 28340125831 26046627853 23088857119 17322475530 
17459314691 23088857211 17207394305 17190879232 17199267841 23748	|z4380467 
17207394309 17190879236 17199267845 23748380467 17859346449 -34091302910 
23085677464 24016584706 17207394307 17859346488 23748380467 17207394305 
17190879232 17199267841 23748380467 17207394309 17190879236 17199267845 
23748380467 17190879234 17199267843 23085677464 25614352384 17199267841 
23748392953 -33680260993 26583498762 23088857250 26046627843 23085695799 
23882366977 272105478 17200316433 23748380440 23848812545 23848812546 277055584 
23085677464 19545456641 0 19548078080 2621450 524290 7240587637 0 2!]
			RTOBRK
			#DECL ("VALUE" <OR FALSE CHARACTER> ATOM ATOM
			       ATOM STRING FIX STRING "OPTIONAL" STRING
			       STRING STRING STRING STRING)
			XFPOP
			IMLAC?
			TENEX
			READER-SILENCE
			OUTCHAN
			CSACT]
		      '(51
			CILVAL!-MUDDLE
			231192
			(173 29 21 14 2)
			CIGVAL!-MUDDLE
			231312
			(8)
			$TLOSE!-MUDDLE
			224256
			(26 24)
			INTFLG!-MUDDLE
			77
			(74 64)
			LCKINT!-MUDDLE
			434
			(65)
			W1C!-MUDDLE
			243722
			(123 117 112 109)
			CISET!-MUDDLE
			231219
			(158 154 150 143 139)
			FINIS!-MUDDLE
			228248
			(177 161 146)
			R1C!-MUDDLE
			243705
			(164)
			MPOPJ!-MUDDLE
			246583
			(169)
			AGAIN
			231520
			(176))>>

<AND <ASSIGNED? GLUE>
     .GLUE
     <PUT ,RTOBRK
	  GLUE
	  '![-15824778224 4653329 17519624257 25870730240 71581780 18539102464
	     16781312 285474816 0 67829760 0!]>>

<DEFINE PBREAK () 
	#DECL ((READER-SILENCE) <OR FALSE ATOM> (BREAK) CHARACTER)
	<COND (<NOT .READER-SILENCE>
	       <COND (<==? .BREAK <ASCII 13>> <TERPRI>)
		     (ELSE <PRINC .BREAK>)>)>>

<DEFINE COMPLETE (STR LEN TO TOLEN) 
	#DECL ((STR TO) STRING (LEN) FIX (OUTCHAN) CHANNEL (TOLEN VALUE) FIX)
	<SET TOLEN <- .TOLEN .LEN>>				  ;"EXTRA CHARS"
	<COND (<G? .TOLEN 0>
	       <SET TO <REST .TO .LEN>>
	       <COND (<NOT .READER-SILENCE> <PRINTSTRING .TO .OUTCHAN .TOLEN>)>
					     ;"copy extra chars into the buffer"
	       <EXTRACT .TO <REST .STR .LEN> .TOLEN>)>
	.TOLEN>

<DEFINE TPROMPT (STR SYN
		 "OPTIONAL" (SYNSW T) (LEVEL T) (INMULT <>)
		 "AUX" X Y LEN)
   #DECL ((STR Y) STRING (LEN) FIX (SYN) VECTOR (X) <OR ATOM FALSE>
	  (SYNSW LEVEL) <OR FALSE ATOM> (VALUE) ATOM (INMULT) <OR LIST FALSE>)
   <AND .INMULT <COMMAPRINT .INMULT>>
   <COND
    (.LEVEL
     <COND (<G? <14 .OUTCHAN> 40> <TERPRI>) (ELSE <PRINC !" >)>
     <PRINC .STR>
     <COND (.SYNSW
	    <PRINC " (">
	    <REPEAT ()
		    <COND (<EMPTY? .SYN> <RETURN>)>
		    <COND (<TYPE? <1 .SYN> STRING> <PRINC <1 .SYN>>)>
		    <COND (<1? <LENGTH .SYN>> <PRINC ")">)
			  (<TYPE? <2 .SYN> SYMBOL>)
			  (ELSE <PRINC "|">)>
		    <SET SYN <REST .SYN>>>
	    <PRINC ":  ">)>)
    (ELSE
     <TERPRI>
     <PRINC .STR>
     <TERPRI>
     <COND (.SYNSW
	    <PRINC "(">
	    <SET Y
		 <COND (<OR <1? <LENGTH .SYN>> <MEMBER "DEF" .SYN>>
			" is allowed.)")
		       (<MEMBER "MULT" .SYN>
			<PRINC "multiple ">
			" (s) are allowed.)")
		       (" are allowed.)")>>
	    <REPEAT ((BIGSYN .SYN))
		    <COND (<EMPTY? .BIGSYN> <RETURN>)>
		    <PRINC <COND (<NOT <TYPE? <1 .BIGSYN> STRING>> "")
				 (<=? <1 .BIGSYN> "DEF"> "")
				 (<SET X <LOOKUP <1 .BIGSYN> ,FULLSYN>> <1 ,.X>)
				 (<MEMQ <PARSE <1 .BIGSYN>> <ALLTYPES>>
				  <PRINC "Object of type ">
				  <1 .BIGSYN>)
				 (<=? <1 .BIGSYN> "MULT"> "")
							  ;"don't print unknown"
				 (ELSE "Unknown type")>>
		    <AND <=? <1 .BIGSYN> "DEF">
			 <PRINC "defaulting to ">
			 <PRINC <1 <2 .BIGSYN>>>>
		    <COND (<1? <LENGTH .BIGSYN>> <PRINC .Y>)
			  (<=? <1 .BIGSYN> "MULT">)
			  (ELSE <PRINC ", ">)>
		    <SET BIGSYN <REST .BIGSYN>>>
	    <TERPRI>
	    <COND (<==? .MODE 3>
		   <PRINC "Current default is ">
		   <MAPF <>
			 <FUNCTION (A B C) 
				 #DECL ((A) <OR ATOM FALSE STRING>
					(B) <OR STRING CHARACTER> (C) ATOM)
				 <PRINC <COND (<TYPE? .A ATOM> ..A) (.A) (..C)>>
				 <PRINC .B>>		       ;"separator char"
			 <COND (<EMPTY? .TABLE> .FN-ATOMS) (.TABLE)>
			 .FN-SEPS
			 .FN-ATOMS>
		   <COND (<EMPTY? .TABLE> T)
			 (<L? <SET LEN <LENGTH .TABLE>> 4>
			  <MAPF <>
				<FUNCTION (A B) 
					#DECL ((A) ATOM (B) CHARACTER)
					<PRINC ..A>
					<PRINC .B>>
				<REST .FN-ATOMS .LEN>
				<REST .FN-SEPS .LEN>>)>
		   <AND <MEMBER "FILESPEC" .SYN>
			<PRINC 
"However, a termination character (ESC, CR, etc) will imply no__ answer
as opposed to the default answer (i.e. FALSE or NO)">>
		   <TERPRI>)
		  (<==? .MODE 5>
		   <PRINC "Current default is ">
		   <COND (<EMPTY? .TABLE> <PDATE <DATE>>)
			 (<PDATE <1 .TABLE>>)>
		   <PRINC ".">
		   <TERPRI>)>
	    <PRINC ":  ">)>)>
   T>

<DEFINE READER (TABLE P1 P2 SYN
		"OPTIONAL" (SYNSW T) (MULTSW FOO)
			   (BFR
			    <COND (<AND <ASSIGNED? BFR> <TYPE? .BFR STRING>>
				   <COND (<AND <ASSIGNED? LEN> <TYPE? .LEN FIX>>
					  <REST .BFR .LEN>)
					 (ELSE .BFR)>)
				  (ELSE <ISTRING 100>)>)
		"AUX" FOO I TEMP BITP LENS BREAK (XTRCHR 0) (LEN 0) OTTY
		      (WD0 #WORD *000000000000*) (INSTRING <>) (INCHARACTER <>)
		      (HELPSW <>) (XFPOPSW <>) (CAL-PARSE 0)
ñþ€-z8		      (MODE
		       <COND (<AND <MEMBER "SYM" .SYN> <NOT <EMPTY? .TABLE>>> 0)
			     (<MEMBER "TEXT" .SYN> 1)
			     (<MEMBER "LINE" .SYN> 2)
			     (<OR <MEMBER "FILESPEC" .SYN> <MEMBER "FILE" .SYN>>
			      3)
			     (<OR <MEMBER "FORM" .SYN>
				  <MEMBER "VECTOR" .SYN>
				  <MEMBER "LIST" .SYN>
				  <MEMBER "OBJECT" .SYN>>
			      4)
			     (<MEMBER "OBJECTS" .SYN> <SET CAL-PARSE 1> 4)
			     (<MEMBER "DATE" .SYN> 5)
			     (6)>) ST1 ST2 ST3 ST4)
   #DECL ((VALUE VAL) ANY (I) FIX (LEN LENS XTRCHR MODE) <SPECIAL FIX>
	  (XSPCCHARS TEMP) <VECTOR [REST CHARACTER FORM]> (WD0) WORD
	  (BITP) <SPECIAL WORD> (BFR P1) <SPECIAL STRING>
	  (P2) <SPECIAL <OR TUPLE VECTOR STRING>>
	  (LKPR) <VECTOR FIX ANY STRING FIX> (ST1 ST2 ST3 ST4) STRING
	  (TABLE) <SPECIAL <OR SYMTABLE VECTOR>>
	  (SYN) <SPECIAL <VECTOR [REST <OR STRING SYMBOL>]>>
	  (INSTRING INCHARACTER XFPOPSW SYNSW MULTSW) <SPECIAL <OR FALSE ATOM>>
	  (HELPSW) <SPECIAL <OR FALSE ATOM CHANNEL>>
	  (CONFIRMS COMPLETES NSTERMS TERMINS SPCCHARS) STRING
	  (MASTER MULTCHAR) CHARACTER (IMLAC?) <OR FIX FALSE>
	  (FOO READER-SILENCE) <OR ATOM FALSE>
	  (CURXCHAN) <OR FALSE CHANNEL STRING>
	  (BREAK) <SPECIAL <OR FALSE CHARACTER>> (CAL-PARSE) <SPECIAL FIX>
	  (OTTY) <SPECIAL <OR UVECTOR WORD>>)
   <COND (<NOT <ASSIGNED? IMLAC?>> <CALRDRINIT>)>
   <OR .MULTSW <SET MULTSW FOO>>
   <SET ST1 <COND (<0? .MODE> ,CONFIRMS) ("")>>
   <SET ST2 <COND (<0? .MODE> ,COMPLETES) ("")>>
   <SET ST4 <COND (<0? .MODE> ,NSTERMS) ("")>>
   <SET ST3
	<COND (<OR <1? .MODE> <==? .MODE 4>> ,MASTER-STRING)
	      (<OR <==? .MODE 2> <==? .MODE 5>> <REST ,MULT-CR-MASTER>)
							        ;"cr and master"
	      (<==? .MODE 3>
	       <COND (<MEMBER "MULT" .SYN> ,MULT-CR-MASTER)
		     (ELSE <REST ,MULT-CR-MASTER>)>)
	      (ELSE ,TERMINS)>>
   <COND (<TYPE? .P2 STRING> <SET P2 [.P2 ""]>)>
   <UNWIND
    <PROG ()
      <COND (<NOT .CURXCHAN> <SET OTTY <TTY-GET>> <CAREFUL-TTY-OFF>)>
					   ;"save tty status and set new status"
      <PROG CSACT ()
	#DECL ((CSACT) <SPECIAL ACTIVATION>)
	<COND (<NOT .READER-SILENCE>
	       <TPROMPT .P1 .SYN .SYNSW>
	       <PRINTSTRING .BFR .OUTCHAN .LEN>)>
	<SET .MULTSW <>>
	<SET VAL
	 <REPEAT LEAVE-READER ()
	   #DECL ((LEAVE-READER) <SPECIAL ACTIVATION>)
				 ;"Read the input stream through the next break"
	   <SET BREAK
		<COND (.INSTRING
		       <RTOBRK CURXCHAN
			       BITP
			       LENS
			       <REST .BFR .LEN>
			       .XTRCHR
			       ""
			       ""
			       ""
			       ,SPCCHARS
			       ""
			       "\"">)
		      (ELSE
		       <RTOBRK CURXCHAN
			       BITP
			       LENS
			       <REST .BFR .LEN>
			       .XTRCHR
			       .ST1
			       .ST2
			       .ST3
			       ,SPCCHARS
			       .ST4
			       "\"">)>>
	   <SET LAST-READER-BREAK .BREAK>
	   <COND (<G? .LENS 0>
		  <SET XTRCHR 0>
		  <SET LEN <+ .LEN .LENS>>
		  <COND (<TYPE? .HELPSW CHANNEL> <CLOSE .HELPSW>)>
		  <SET HELPSW <>>)>
    ;"First check to see if RTOBRK returned because it ran out of buffer space."
	   <COND
	    (<NOT .BREAK> <SET BFR <EXTRACT .BFR <* .LEN 2>>>)
	    (<AND <L? <- <LENGTH .BFR> .LEN> 2>	        ;"leave breathing-space"
		  <SET BFR <EXTRACT .BFR <* .LEN 2>>>
		  <>>)
	    (<AND <==? .BREAK !"">
		  <NOT <==? .MODE 1>>
		  <NOT <==? .MODE 2>>	 ;"ignore quotes in text and line modes"
		  <SET BITP #WORD *000000000000*>
		  <SET INSTRING <NOT .INSTRING>>
					  ;"complement the inside-a-string flag"
		  <AND <NOT <0? .LEN>>
		       <OR .INCHARACTER <==? <NTH .BFR .LEN> !"!>>
		       <SET INCHARACTER T>
			      ;"in char, not string (only cleared by RUBOUTCHR)"
		       <SET INSTRING <NOT .INSTRING>>>
		  <>>)
 ;
"Now check to see if user typed a special character. If so execute handler for it."
	    (<AND <N==? <ANDB .BITP 8> #WORD *000000000000*>
		  <SET TEMP <MEMQ .BREAK ,XSPCCHARS>>
		  <EVAL <2 .TEMP>>>)
	 ;"Are we in symbol input mode?  If so, was symbol oriented char typed?"
	    (<AND <0? .MODE> <N==? <ANDB .BITP 7> #WORD *000000000000*>>
	     <COND (<AND <0? .LEN> <SET M <MEMBER "DEF" .SYN>>>
		    <RUBOUTCHR .XTRCHR>
		    <PRINC <1 <2 .M>>>
		    <PBREAK>
		    <RETURN <2 .M>>)
		   (<SYMBOL-ANALYZE>)>)
	    (<N==? <ANDB .BITP 4> #WORD *000000000000*>
	     <RUBOUTCHR .XTRCHR>
	     <PBREAK>					      ;"print the break"
	     <COND (<L=? .MODE 2> <RETURN <EXTRACT .BFR .LEN>>)
		   (<==? .MODE 5> <RETURN <DATE-FIXUP <EXTRACT .BFR .LEN>>>)
		   (<==? .MODE 3>
		    <COND (<AND <MEMBER "FILESPEC" .SYN> <0? .LEN>>
			   <RETURN #FALSE ("Null line")>)
			  (<RETURN <FSP-FIXUP <EXTRACT .BFR .LEN>>>)>)
		   (ELSE <RETURN <READER-PARSE .BFR .LEN>>)>)
	    (ELSE <PUT .BFR <SET LEN <+ 1 .LEN>> .BREAK> <PBREAK>)>>>>
      <AND <ASSIGNED? OTTY> <TTY-SET .OTTY>>
      <COND (.XFPOPSW <XFPOP>)>>				 ;"unwind scope"
    <AND <ASSIGNED? OTTY> <TTY-SET .OTTY>>>
   .VAL>

<DEFINE SUBSTRUC* (OBJ RESTNUM TO) 
	#DECL ((OBJ) TUPLE (RESTNUM) FIX (TO) <VECTOR [4 ANY]>)
	<MAPR <>
	      <FUNCTION (FRM INTO) 
		     z0z< #DECL ((FRM) TUPLE (INTO) VECTOR)
		      <PUT .INTO
			   1
			   <COND (<TYPE? <1 .FRM> FORM> <EVAL <1 .FRM>>)
				 (ELSE <1 .FRM>)>>>
	      <REST .OBJ .RESTNUM>
	      .TO>>

<DEFINE READARGS (
		  "TUPLE" RDARGS
		  "AUX" SYNTAX TEMP (MULTERM <>) (N 1) (I 1)
			(LEN <LENGTH .RDARGS>) (INMULT <>) SETAT
			(ARGVCT <IVECTOR </ .LEN 4>>) ML (MULTLIST ()))
   #DECL ((RDARGS) TUPLE (N I LEN) FIX (SYNTAX) <VECTOR [REST <OR SYMBOL STRING>]>
	  (ARGVCT) VECTOR (VALUT) <OR VECTOR FALSE> (TEMP) ANY
	  (MULTERM) <SPECIAL <OR FALSE ATOM>> (MULTLIST) <SPECIAL LIST>
	  (INMULT) <OR FALSE ATOM> (TORDR) <VECTOR [4 ANY]>
	  (SETAT) <OR ATOM FALSE>)
   <REPEAT ()
	   <AND <L? .N 1> <RETURN ,READER-ABORT>>	  ;"control-R to excess"
	   <AND <G? .N .LEN>
		<RETURN <COND (<==? <SET I <- .I 1>>
				    <SET TEMP <LENGTH .ARGVCT>>>
			       .ARGVCT)
			      (ELSE
			       <BLTREST <REST .ARGVCT <- .TEMP .I>>
					!.ARGVCT>)>>>
	   <COND (.INMULT T)
		 (<TYPE? <NTH .RDARGS .N> ATOM>
		  <SET SETAT <NTH .RDARGS .N>>
		  <SET N <+ .N 1>>)
		 (ELSE <SET SETAT <>>)>
	   <SUBSTRUC* .RDARGS <- .N 1> .TORDR>
	   <COND
	    (<SET TEMP
		  <COND (<NOT <1 .TORDR>> <CHTYPE (FLUSHED !<1 .TORDR!>) FALSE>)
			(<READER <1 .TORDR>
				 <COND (.INMULT "and ") (ELSE <2 .TORDR>)>
				 <3 .TORDR>
				 <SET SYNTAX <4 .TORDR>>
				 <NOT .INMULT>
				 MULTERM>)>>
	     <COND (.INMULT
		    <COND (<TYPE? .TEMP SPLICE>
			   <SET ML
				<REST <PUTREST .ML .TEMP> <- <LENGTH .ML> 1>>>)
			  (<SET ML <REST <PUTREST .ML (.TEMP)>>>)>)
		   (<MEMBER "MULT" .SYNTAX>
		    <SET INMULT T>
		    <COND (<TYPE? .TEMP SPLICE>
			   <SET MULTLIST <CHTYPE .TEMP LIST>>
			   <SET ML <REST .MULTLIST <- <LENGTH .MULTLIST> 1>>>)
			  (<SET MULTLIST <SET ML (.TEMP)>>)>)>
	     <COND (.MULTERM <SET INMULT T>)
		   (.INMULT
		    <SET TEMP .MULTLIST>
		    <SET MULTLIST ()>
		    <SET INMULT <>>)>
	     <COND (<NOT .INMULT>
		    <PUT .ARGVCT .I .TEMP>
		    <AND .SETAT <SET .SETAT .TEMP>>
		    <SET I <+ .I 1>>
		    <SET N <+ .N 4>>)>)
	    (<1 .TEMP>				 ;"gets here if null line, etc."
	     <COND (<==? <1 .TEMP> FLUSHED>
		    <SET TEMP
			 <COND (<1? <LENGTH .TEMP>> #FALSE ("Aborted"))
			       (<2 .TEMP>)>>)
		   (.INMULT <SET TEMP .MULTLIST> <SET INMULT <>>)
		   (<MEMBER "MULT" .SYNTAX> <SET TEMP ()>)>
	     <PUT .ARGVCT .I .TEMP>
	     <AND .SETAT <SET .SETAT .TEMP>>
	     <SET I <+ .I 1>>
	     <SET N <+ .N 4>>)
	    (.INMULT			        ;"gets here if abort char typed"
	     <COND (<NOT <LENGTH? .MULTLIST 1>>	   ;"if length > 1, can putrest"
		    <PUTREST <SET ML <REST .MULTLIST <- <LENGTH .MULTLIST> 2>>>
			     ()>
		    <COND (<NOT .READER-SILENCE> <COMMAPRINT .MULTLIST>)>)
		   (ELSE <SET INMULT <>> <SET MULTLIST ()>)>)
	    (ELSE
	     <TERPRI>
	     <AND <G? .N 1>
		  <TYPE? <NTH .RDARGS <- .N 1>> ATOM>
		  <SET N <- .N 1>>>		       ;"back up over atom hack"
	     <PROG ()
		   <SET I <- .I 1>>
		   <SET N <- .N 4>>
		   <AND <L? .N 1> <RETURN>>	   ;"let abort happen in REPEAT"
		   <SET TEMP <NTH .RDARGS .N>>
		   <AND <TYPE? .TEMP FORM> <SET TEMP <EVAL .TEMP>>>
								 ;"see if FALSE"
		   <COND (<AND <G? .N 1> <TYPE? <NTH .RDARGS <- .N 1>> ATOM>>
			  <SET SETAT <NTH .RDARGS <SET N <- .N 1>>>>)
			 (ELSE <SET SETAT <>>)>
		   <OR .TEMP <AGAIN>>>	        ;"back up beyond last FLUSH")>>>

<DEFINE CALRDRINIT () 
	#DECL ((IMLAC?) <OR 'T FALSE> (SYN) <VECTOR [REST STRING]>
	       (POSCHAR HELPCHAR ABORTCHAR MULTCHAR RUBCHAR LINEKILL WORDKILL
		BUFFERKILL CRETYPE DRETYPE MASTER QUOTCHAR STRCHAR) CHARACTER
	       (COMPLETES CONFIRMS NSTERMS TERMINS SPCCHARS) CHARACTER
	       (XSPCCHARS) <VECTOR [REST CHARACTER FORM]> (OUTCHAN) CHANNEL
	       (XTRCHR MODE LEN) FIX (BFR P2 P1) STRING
	       (SYNSW INSTRING) <OR ATOM FALSE> (VALUE MULTSW) ATOM
	       (WD0 BITP) WORD (CURXCHAN) <OR CHANNEL STRING FALSE>
	       (BREAK) CHARACTER (TABLE) SYMTABLE)
	<SET IMLAC? <==? <MOD <11 ,INCHAN> 128> 2>>
	<SET READER-SILENCE <>>
	<SETG FULLSYN <MOBLIST SYNOB>>
	<MAPF <>
	      <FUNCTION (A) 
		      #DECL ((A) <LIST STRING VECTOR>)
		      <SETG <OR <LOOKUP <1 .A> ,FULLSYN>
				<INSERT <1 .A> ,FULLSYN>>
			    <2 .A>>>
	      '[("FIX" ["integer" FIX])
		("FLOAT" ["floating point number" FLOAT])
		("ATOM" ["MUDDLE atom name" ATOM])
		("CHARACTER" ["character preceded by !\"" CHARACTER])
		("LIST" ["list of objects" LIST])
		("VECTOR" ["vector of objects" VECTOR])
		("FORM" ["MUDDLE form" FORM])
		("OBJECT" ["any EVALable object" ANY])
		("OBJECTS" ["any number of EVALable objects" LIST])
		("ANY" ["any EVALable object" ANY])
		("STRING" ["string of characters" STRING])
		("FILE" ["file specification" STRING])
		("FILESPEC" ["file specification" STRING])
		("DATE" ["date specification" STRING])
		("LINE" ["line of text" STRING])
		("TEXT" ["text terminated by master break" STRING])
		("SYM" ["symbol" SYMBOL])]>
	<SETG EXACT-MATCH-CHAR !"!>
	<SETG PARTIAL-MATCH-CHAR
	      <COND (,TENEX <ASCII 7>) (ELSE !"&)>>
	<SETG NO-MATCH-CHAR !"?>
	<SETG Pz4z@OSCHAR <ASCII 6>>
	<SETG HELPCHAR !"?>
	<SETG ABORTCHAR <ASCII 18>>
	<SETG MULTCHAR !",>
	<SETG RUBCHAR <ASCII <COND (,TENEX 1) (ELSE 127)>>>
	<SETG LINEKILL <ASCII 25>>
	<SETG WORDKILL <ASCII 23>>
	<SETG BUFFERKILL <ASCII 0>>
	<SETG CRETYPE <ASCII 12>>
	<SETG DRETYPE <ASCII 4>>
	<SETG MASTER <ASCII 27>>
	<SETG ALLCHAR <COND (,TENEX <ASCII 21>) (ELSE <ASCII 1>)>>
	<SETG QUOTCHAR <ASCII 17>>
	<SETG INTTYCHAR <ASCII 20>>
	<SETG MASTER-STRING
	      <REST <SETG MULT-CR-MASTER <STRING !", <ASCII 13> <ASCII 27>>>
		    2>>
	<SETG COMPLETES " ">
	<SETG CONFIRMS "">
	<SETG NSTERMS "">
	<SETG TERMINS "î	,">
	<SETG SPCCHARS
	      <STRING ,POSCHAR
		      ,HELPCHAR
		      ,ALLCHAR
		      ,ABORTCHAR
		      ,MULTCHAR
		      ,INTTYCHAR
		      ,RUBCHAR
		      ,WORDKILL
		      ,LINEKILL
		      ,BUFFERKILL
		      ,CRETYPE
		      ,DRETYPE
		      ,QUOTCHAR>>
	<SETG XSPCCHARS
	      [,POSCHAR
	       '<DO-POSSYM>
	       ,ALLCHAR
	       '<WINNER-TAKE-ALL>
	       ,HELPCHAR
	       '<HELP-MESSAGE>
	       ,ABORTCHAR
	       '<RETURN ,READER-ABORT .LEAVE-READER>
	       ,MULTCHAR
	       '<CHECK-FOR-MULT>
	       ,INTTYCHAR
	       '<INPUT-FROM-TTY>
	       ,RUBCHAR
	       '<RUBOUT-ONE>
	       ,WORDKILL
	       '<BACKUPRUB " 	
">
	       ,LINEKILL
	       '<BACKUPRUB "
">
	       ,BUFFERKILL
	       '<KILLBUFFER>
	       ,CRETYPE
	       '<RETYPE-BUFFER <>>
	       ,DRETYPE
	       '<RETYPE-BUFFER T>
	       ,QUOTCHAR
	       '<QUOTE-NEXT-CHAR>]>
	T>

<DEFINE KILLBUFFER () <SET XTRCHR <SET LEN 0>> <TPROMPT .P1 .SYN .SYNSW>>

<DEFINE DATE-FIXUP (INP "EXTRA" INPARSE) 
	#DECL ((INP) STRING (INPARSE) <OR FALSE <LIST [3 FIX]>>
	       (XTRCHR LEN) FIX)
	<COND (<EMPTY? .TABLE> <SET INPARSE <DATE-PARSE .INP <DATE>>>)
	      (<SET INPARSE <DATE-PARSE .INP <1 .TABLE>>>)>
	<COND (.INPARSE)
	      (T
	       <TERPRI>
	       <PRINC "Date unrecognizable. Please retype.">
	       <TERPRI>
	       <SET XTRCHR <SET LEN 0>>
	       <AGAIN .CSACT>)>>

<DEFINE FSP-FIXUP (INP "AUX" FSPV (OS ,TENEX)) 
	#DECL ((INP VALUE) STRING (FSPV) VECTOR (OS) <OR ATOM FALSE>)
	<SET FSPV <FSP-PARSE .INP>>
	<COND (<EMPTY? .TABLE>		    ;"symbol-table can contain defaults"
	       <MAPF <>
		     <FUNCTION (A B) 
			     #DECL ((A) ATOM (B) <OR LOSE STRING>)
			     <COND (<TYPE? .B STRING> <SET .A .B>)>>
		     (CALICO-DEV CALICO-SNM CALICO-NM1 CALICO-NM2)
		     .FSPV>
	       <OR <TYPE? <1 .FSPV> STRING>		     ;"user gave device"
		   <AND <TYPE? <2 .FSPV> STRING> <SET CALICO-DEV "DSK">>>
						       ;"else if sname, dev=dsk"
	       <STRING .CALICO-DEV
		       <COND (.OS ":<") (ELSE !":)>
		       .CALICO-SNM
		       <COND (.OS !">) (ELSE !";)>
		       .CALICO-NM1
		       <COND (.OS !".) (ELSE !" )>
		       .CALICO-NM2>)
	      (ELSE		  ;"defaults in TABLE, USE CALICO-FOO otherwise"
	       <MAPR <>
		     <FUNCTION (A B) 
			     #DECL ((A) VECTOR (B) VECTOR)
			     <COND (<NOT <TYPE? <1 .A> STRING>>
				    <PUT .A 1 <1 .B>>)>>
		     .FSPV
		     .TABLE>
	       <MAPF ,STRING
		     <FUNCTION (A B C) 
			     #DECL ((A) <OR STRING LOSE FALSE> (B) ATOM
				    (C) <OR STRING CHARACTER>)
			     <COND (<TYPE? .A STRING> <MAPRET .A .C> T)
				   (ELSE <MAPRET ..B .C> T)>>
		     .FSPV
		     .FN-ATOMS
		     .FN-SEPS>)>>

<DEFINE RUBOUTCHR (
		   "OPTIONAL" (ARGN 1)
		   "AUX" N (SPCPRT "	
î") (SOSCH <REST .OUTCHAN 13>))
	#DECL ((ARGN) <OR CHARACTER FIX> (VALUE) ATOM (SPCPRT) STRING
	       (MODE N) FIX (IMLAC?) <OR FIX FALSE> (SOSCH) <VECTOR FIX>)
	<COND (<NOT .READER-SILENCE>
	       <COND (<TYPE? .ARGN CHARACTER>
		      <AND <==? .ARGN !"">
			   <NOT <==? .MODE 1>>
			   <NOT <==? .MODE 2>>
			   <COND (.INCHARACTER
				  <AND <==? <NTH .BFR <- .LEN 1>> !"!>
				       <SET INCHARACTER <>>>)
				 (ELSE <SET INSTRING <NOT .INSTRING>>)>>
						    ;"rubbed out a double-quote"
		      <COND (<NOT .IMLAC?>
			     <COND (,TENEX <PRINC !"\\>)>
			     <PRINC .ARGN>)
			    (<AND <L? <SET N <ASCII .ARGN>> 32>
				  <NOT <MEMBER .ARGN .SPCPRT>>>
			     <SET N 2>)
			    (ELSE <SET N 1>)>)
		     (ELSE <SET N .ARGN>)>
	       <COND (.IMLAC?
		      <REPEAT ()
			      <COND (<L? <SET N <- .N 1>> 0> <RETURN T>)>
			      <PRINC "X">
			      <PUT .SOSCH 1 <- <NTH .SOSCH 1> 3>>
		        ;"account for ^P,X and rubbed-out char in .OUTCHAN">)>)>
	T>

<DEFINE BACKUPRUB ("OPTIONAL" (STPRS "") "AUX" (NBREAKFLAG <>)) 
	#DECL ((VALUE) ATOM (BFR STPRS P1) STRING (SYN) <VECTOR [REST STRING]>
	       (SYNSW NBREAKFLAG) <OR ATOM FALSE> (XTRCHR LEN) FIX)
	<COND (<0? .LEN> <TPROMPT .P1 .SYN .SYNSW>)
	      (ELSE
	       <RUBOUTCHR .XTRCHR>
	       <SET XTRCHR 0>
	       <REPEAT ()
		       <COND (<MEMBER <NTH .BFR .LEN> .STPRS>
			      <COND (.NBREAKFLAG <RETURN T>)>)
			     (<SET NBREAKFLAG T>)>	  ;"REACHED NON-STOPPER"
		       <RUBOUTCHR <NTH .BFR .LEN>>
					     ;"RUB OUT NON-STPR, TRAILING STPRS"
		       <COND (<0? <SET LEN <- .LEN 1>>> <RETURN T>)>>
	       <SET XTRCHR 0>)>
	T>

<DEFINz8zDE SYMBOL-ANALYZE ("AUX" I (WD0 #WORD *000000000000*)) 
	#DECL ((MODE LEN XTRCHR I) FIX (BITP WD0) WORD (TABLE) SYMTABLE
	       (LKPR) <VECTOR FIX ANY STRING FIX> (BFR) STRING (VALUE) ATOM)
	<APPLY ,<1 .TABLE> 1 .BFR .LEN <2 .TABLE> .LKPR>
	<SET I
	     <COND (<N==? <ANDB .BITP 1> .WD0>
		    <COND (<==? <1 .LKPR> 3> 0)
			  (<AND <0? <1 .LKPR>> <N==? <ANDB .BITP 16> .WD0>> 1)
			  (<AND <N==? <1 .LKPR> 0> <N==? <ANDB .BITP 2> .WD0>>
			   2)
			  (3)>)
		   (<N==? <ANDB .BITP 2> .WD0>
		    <COND (<0? <1 .LKPR>>
			   <COND (<N==? <ANDB .BITP 16> .WD0> 1) (3)>)
			  (<AND <N==? <1 .LKPR> 2> <N==? <ANDB .BITP 4> .WD0>>
			   0)
			  (2)>)
		   (<=? <1 .LKPR> 3> 0)
		   (1)>>				 ;"I=0 => return symbol"
	<COND (<0? .I>
	       <COMPLETE .BFR .LEN <3 .LKPR> <4 .LKPR>>
	       <RUBOUTCHR .XTRCHR>
	       <PBREAK>					      ;"print the break"
	       <RETURN <APPLY ,<1 .TABLE> 2 <2 .LKPR> <2 .TABLE>>
		       .LEAVE-READER>)
	      (<1? .I>
	       <RUBOUTCHR .XTRCHR>
	       <PBREAK>					      ;"print the break"
	       <RETURN <READER-PARSE .BFR .LEN> .LEAVE-READER>)
	      (<==? .I 2>
	       <COND (<AND <NOT .READER-SILENCE> <==? .LEN <LENGTH <3 .LKPR>>>>
		      <PRINC ,EXACT-MATCH-CHAR>
		      <SET XTRCHR <+ .XTRCHR 1>>)
		     (ELSE
		      <COMPLETE .BFR .LEN <3 .LKPR> <4 .LKPR>>
		      <SET LEN <4 .LKPR>>
		      <COND (<AND <NOT .READER-SILENCE>
				  <L? .LEN <LENGTH <3 .LKPR>>>>
			     <PRINC ,PARTIAL-MATCH-CHAR>
			     <SET XTRCHR <+ .XTRCHR 1>>)>)>)
	      (<AND <NOT .READER-SILENCE> <==? .I 3>>
	       <PRINC ,NO-MATCH-CHAR>
	       <SET XTRCHR <+ .XTRCHR 1>>)>
	T>

<DEFINE READER-PARSE (BFR ALEN "AUX" TEMP FS (OKSYN .SYN) TYPE-NAME) 
   #DECL ((BFR) STRING (LEN ALEN XTRCHR) FIX (TEMP) ANY
	  (FS) <OR ATOM FALSE <VECTOR [REST STRING ATOM]>> (TYPE-NAME) ATOM
	  (OKSYN SYN) <VECTOR [REST <OR STRING SYMBOL>]> (VALUE) ANY)
   <REPEAT ()
     <COND
      (<0? .ALEN> <RETURN ,READER-NULL-LINE>)
      (<OR <==? <1 .BFR> !" > <==? <1 .BFR> !"	>>
       <SET BFR <REST .BFR>>
       <SET ALEN <- .ALEN 1>>)
      (ELSE
       <PUT .BFR <+ .ALEN 1> !"!>
       <PUT .BFR <+ .ALEN 2> !">
       <SET TEMP <LPARSE .BFR>>
       <COND (<0? .CAL-PARSE>
	      <AND <EMPTY? .TEMP> <RETURN ,READER-NULL-LINE>>
	      <SET TEMP <1 .TEMP>>)>
       <RETURN <REPEAT ()
		       <COND (<EMPTY? .OKSYN>
			      <TERPRI>
			      <PRINC 
"Type of input unacceptable.  Please retype.">
			      <TERPRI>
			      <SET XTRCHR <SET LEN 0>>
			      <AGAIN .CSACT>)
			     (<TYPE? <1 .OKSYN> SYMBOL>)
			     (<AND <SET FS <LOOKUP <1 .OKSYN> ,FULLSYN>>
				   <SET FS ,.FS>
				   <OR <==? <TYPE .TEMP> <2 .FS>>
				       <==? ANY <2 .FS>>
				       <AND <==? FLOAT <2 .FS>>
					    <TYPE? .TEMP FIX>
					    <SET TEMP <FLOAT .TEMP>>>>>
			      <RETURN .TEMP>)
			     (<AND <SET TYPE-NAME <PARSE <1 .OKSYN>>>
				   <==? <TYPE .TEMP> .TYPE-NAME>>
			      <RETURN .TEMP>)>
		       <SET OKSYN <REST .OKSYN>>>>)>>>

<DEFINE HELP-MESSAGE ("AUX" BFR L) 
   #DECL ((BFR) STRING (L LEN) FIX (BITP) WORD (VALUE) <OR ATOM FALSE>
	  (HELPSW) <OR FALSE ATOM CHANNEL> (P2) <VECTOR STRING STRING>
	  (SYN) <VECTOR [REST STRING]>)
   <COND (.READER-SILENCE T)
	 (<NOT <0? .LEN>>
	  <SET BITP #WORD *000000000000*>
	  <RUBOUTCHR .XTRCHR>
	  <SET XTRCHR 0>
	  <>)
	 (<AND .HELPSW
	       <NOT <EMPTY? <2 .P2>>>
	       <OR <TYPE? .HELPSW CHANNEL>
		   <SET HELPSW <OPEN "READ" <2 .P2>>>>>
	  <SET BFR <ISTRING 50>>
	  <REPEAT ()
		  <COND (<0? <SET L
				  <READSTRING .BFR
					      .HELPSW
					      <STRING <ASCII 12> <ASCII 3>>>>>
			 <RETURN T>)>
		  <PRINTSTRING .BFR .OUTCHAN .L>
		  <COND (<L? .L 50> <RETURN T>)>>
	  <COND (<NOT <READCHR .HELPSW <>>>
		 <CLOSE .HELPSW>
		 <TERPRI>
		 <PRINC "End of help message.">
		 <TERPRI>
		 <SET HELPSW <>>)>
	  T					       ;"don't print the break")
	 (ELSE <TPROMPT <1 .P2> .SYN T <>> <SET HELPSW T>)>>

<DEFINE WINNER-TAKE-ALL () 
	#DECL ((MODE XTRCHR LEN) FIX (TABLE) <OR VECTOR SYMTABLE> (BFR) STRING
	       (SYN) VECTOR (SYNSW) <OR ATOM FALSE>)
	<COND (<AND <0? .MODE>
		    <MEMBER "MULT" .SYN>
		    <SET WINLIST <APPLY ,<1 .TABLE> 6 .BFR .LEN <2 .TABLE>>>
		    <NOT <EMPTY? .WINLIST>>>
	       <CHECK-FOR-MULT>
	       <BACKUPRUB>
	       <COMMAPRINT .WINLIST <>>
	       <RETURN <CHTYPE .WINLIST SPLICE> .LEAVE-READER>)>>

<DEFINE DO-POSSYM () 
	#DECL ((MODE XTRCHR LEN) FIX (TABLE) <OR VECTOR SYMTABLE>
	       (BFR P1) STRING (SYN) VECTOR (SYNSW) <OR ATOM FALSE>
	       (VALUE) ATOM)
	<COND (.READER-SILENCE)
	      (<0? .MODE>
	       <APPLY ,<1 .TABLE>
		      3
		      .BFR
		      .LEN
		      <2 .TABLE>
		      "
The following are possible:
"
		      "No symbol begins like that.">
	       <TERPRI>
	       <TPROMPT .P1 .SYN .SYNSW>
	       <PRINTSTRING .BFR .OUTCHAN .LEN>
	       <SET XTRCHR 0>)
	      (ELSE
	       <TERPRI>
	       <PRINC "Symbol input not currently available.">
	       <TERPRI>)>
	T>

<DEFINE CHECK-FOR-MULT () 
	#DECL ((SYN) <VECTOR [REST STz<%^RING]> (MULTSW) ATOM (VALUE) FALSE)
	<COND (<MEMBER "MULT" .SYN> <SET .MULTSW T> <>)>>

<DEFINE RUBOUT-ONE () 
	#DECL ((LEN XTRCHR) FIX (P1 BFR) STRING (SYN) VECTOR
	       (SYNSW) <OR ATOM FALSE> (VALUE) ATOM)
	<COND (<0? .LEN> <SET XTRCHR 0> <TPROMPT .P1 .SYN .SYNSW>)
	      (ELSE
	       <RUBOUTCHR .XTRCHR>
	       <RUBOUTCHR <NTH .BFR .LEN>>
	       <SET XTRCHR 0>
	       <SET LEN <- .LEN 1>>)>
	T>

<DEFINE RETYPE-BUFFER (PRE) 
	#DECL ((PRE SYNSW) <OR ATOM FALSE> (P1 BFR) STRING (SYN) VECTOR
	       (LEN XTRCHR) FIX (VALUE) ATOM)
	<COND (<NOT .READER-SILENCE>
	       <COND (.PRE <TERPRI>)
		     (,TENEX <PRINC <ASCII 12>>)		    ;"form-feed"
		     (ELSE <PRINC "C">)>		     ;"ITS clear-screen"
	       <TPROMPT .P1
			.SYN
			.SYNSW
			T
			<AND <ASSIGNED? MULTLIST> .MULTLIST>>
	       <PRINTSTRING .BFR .OUTCHAN .LEN>
	       <SET XTRCHR 0>)>
	T>

<DEFINE QUOTE-NEXT-CHAR ("AUX" (XBFR " ") I J) 
	#DECL ((XBFR) STRING (I BITP) WORD (J XTRCHR) FIX (BREAK) CHARACTER
	       (VALUE) ATOM)
	<RTOBRK CURXCHAN I J .XBFR .XTRCHR "">
	<PUT .BFR <SET LEN <+ .LEN 1>> <1 .XBFR>>
	<SET XTRCHR 0>
	T>

<DEFINE INPUT-FROM-TTY () 
	#DECL ((P1 BFR) STRING (SYN) VECTOR
	       (SYNSW READER-SILENCE XFPOPSW) <OR ATOM FALSE> (LEN) FIX
	       (VALUE) ATOM)
	<XFPUSH <>>
	<TPROMPT .P1 .SYN .SYNSW>
	<PRINTSTRING .BFR .OUTCHAN .LEN>
	<SET XFPOPSW T>
	T>

<SET BREAKS '"	
î! ">

<DEFINE COMMAPRINT (STRUC "OPTIONAL" (TERP!-INITIAL T)) 
	#DECL ((STRUC) STRUCTURED)
	<AND .TERP!-INITIAL <TERPRI>>
	<MAPF <>
	      <FUNCTION (X) 
		      <COND (<TYPE? .X SYMBOL> <PRINC <1 .X>>) (<PRIN1 .X>)>
		      <PRINC ", ">>
	      .STRUC>>

<DEFINE BLTREST (TOVEC "TUPLE" FROMTUP) 
	#DECL ((TOVEC VALUE) <OR TUPLE <PRIMTYPE VECTOR>> (FROMTUP) TUPLE)
	<BLT .FROMTUP .TOVEC>>

<ENDPACKAGE>
%^@):rrþD€-8rrþD€ r5<þD€-8rrpþD€õ€r.pþD€	õ_rôþD€+rrþD€+rî+`þD€rr3ZþD€ö r+õ`‡ î&)Bpî% KPñwÕ6W,4d0"1)1ÿÿˆ[ñgñ-s :ô€u`Oh;,X`cñy`gh? "  ñ;ñôA/"ö¨€gvBô€€GõÀ€EõȀú8û€Mñ€û`€MõÀ€Aú8û€Mñ€ü­tYÏÿÿˆyô€MõÀ€Cú8û€Mñ€û@€M(Bï{ñ©ñ… "øà€$Eö	ûõ`› ò逋4FFõȀ+Bôd|øáM.$ GF&Q$&Dñ£+H`IuhgRÿÿˆ—@ð0+E`j+ 	<(@_B-`ð( @K@ù%²]%ð—ðøI@øïÊ++  Lô  ï}øøIô™òáö‘¹0DõæVÿÿˆµö1	+Y0Dö1	,~0Dö1
,~1$õ`[/$0$ /$`lpDòáõ`·@_B-`ô(ôð—Mð›øI@ü¦ºeô @ @%õ
“ QÿÿäÓøK@ù%²]%ð—%ðKøIr4L]d‡põ å,À4ï~mõ`ù++}+õ`
++	+ïõ`õ`ýõ`õ€,>õ€,> ! @2 ôe 2"Nò逝ö	€ &+m,^õ—€,^õ—€ðÝÀMï~|õa@åhO & +öအ &Q$A`4Bõ‡€S+öЀõ‡€S+zQ$A`ö0€+zõ‡€S+ "õ‡€U õ‡€S+zôe4Dz"Q."ù'v¥5ï~õ‡€S(Dõ`ô€£òá€.&õ‡€O`bp+î+z/$ö™ "õ‡€S=d+zð2t'PB ôeø(€  &2bõ‡€OîkL1]ï~&"ö€+@7R &ôe+7R & F3öðûȃÿÿõ‡€C+z&3QFx÷€Iöø6@õ‡€C[x.&ö€9õɀõ‡€O,~õ€ô€õ‡€SIï~p)+11Bõ`_1B,~ñö0€	õ`¥:$ö€
,~@@$,~U." õ`Uõ—€,~ðÛW×åÿÿˆg:ILLEGAL CHARACTER IN FILE SPECIFICATION
:KILL
(+‡@'H+CAN'T OPEN TTYCAN'T OPEN ON DIRECTORYRFNAME FAILEDEVAL FAILEDðLý¶*-ÿÿˆ…CAN'T GET SYSTEM PAGEð

CAN'T DELETE - `Fõ`—
DELETED FILE - iSHINXÿÿÿÿÿùIÿô–Ü?<.6:ILLEGAL UUOð
<afLÿÿà£ùe $."A"| B$,~/ü=ã‘+.ït@,mgït@GðRgin ðUrk $|=1ðUfúXu,IðnðPV/xVkMðzbðuL &)BpðA% KPðCòwÕ6WðE,4dðGG[? $Q`ðI9Pî%òe\ÐðKòÌhÄM&>/e ðMR\'pFL+]Q0ð[V?QX.@ðg>/gZðmajHBaiiGE(hDF(hDð—L$ð›o#.4OQ8Kð£YiIð©òe«—X(TY:aXð·MR/Pð¹HL4cò­n¸ggHwj"mW6hmJ@ðå;z]ckTðù$o&}#2ðý#$–#%òÁ…UðòÁƒ'ð
òÁ…[ðE^	$!ðòÁ"Þ-ðpl!îòÁJ…0J5
D,òÁZ‰"Z=(d=Oxð9òÁÛòÁÐð=<E,ðC<E-ðI_K- ðO_K `ðS_K!ðU_K$hð_
6;p17`21@ðe,_`3úXuukW  j
cp@m_$d`j`)Hi4%@ t-2@@iAS `iAViAWP t-7@ÿSˆ¹+.):@V@V
back to top