home *** CD-ROM | disk | FTP | other *** search
/ Columbia Kermit / kermit.zip / d / univac.asm < prev    next >
Assembly Source File  |  2020-01-01  |  220KB  |  6,458 lines

  1. .
  2. . CONDITIONAL ASSEMBLY VARIABLES (MAINLY FRONT END COMPUTER DEPENDENT)  . Gunnar
  3. . Set MDLFE = 1, DCPFE = 0 to get University of Wisconsin version       . Gunnar
  4. MDLFE     EQU       1                   . front end MDL                 . Gunnar
  5. DCPFE     EQU       0                   . front end DCP                 . Gunnar
  6. .
  7. . qUestions, etc??
  8. .
  9. . PAUL STEVENS
  10. . MADISON ACADEMIC COMPUTING CENTER
  11. . 1210 WEST DAYTON
  12. . UNIVERSITY OF WISCONSIN
  13. . MADISON, WISCONSIN
  14. . (608)262-9618
  15. .
  16. . i hAve tRied tO kEep tHis pRogram fRee of sYstem dEpendencies.
  17. . a vEry dEfinite eXception eXists in sUbroutines "iNitialize"
  18. . aNd sHutdOwn.  tHese sUbroutines sAve tHe cUrrent tErminal mOdes
  19. . vIa cAlls tO oUr lOcal fRont eNd pRocessor, eStablish nEw mOdes
  20. . fOr tHe fIle tRansfer iTself, aNd rEstore tHe mOdes
  21. . wHen fIle tRansfer iS cOmplete. (sEe cOmments iN tHe sUbroutines).
  22. .
  23. . i hOpe yOur lIbrary (eLement io rOutines) iS tHe sAme aS mIne.
  24. . wE sOmetimes fAll fAr bEhind tHe cUrrent sPerry lIbrary lEvel.
  25. . .
  26. . .
  27. . . iNterested pArties!!lEt mE kNow iF yOu aRe wIlling tO bE oN tHis lIst
  28. . John Watters
  29. . Seebeck Computer Center
  30. . PO Box 2511
  31. . University Alabama 53486
  32. . I sent copy of 1100 Kermit on 21 Oct 1983.
  33. . .
  34. . .
  35. . William H. Morrison
  36. . Federal Emergency Management Agency
  37. . Building 6
  38. . Special Facility
  39. . P.O. Box 129
  40. . Berryville, Virginia  22611
  41. . I send 1100 Kermit on 26 October 1983.
  42. . He indicates he has a DCP-40 front end.
  43. . .
  44. . .
  45. . Allen Cole
  46. . University of Utah Computing Center
  47. . 3110 Merril
  48. . Engineering Building
  49. . Salt Lake City Utah
  50. . (801)581-8805
  51. . Has developed an 1100 Kermit in higher level language.
  52. . Does not implement timeout (I think he said).
  53. . .
  54. . .
  55. . Ron Witt
  56. . Western Publishing Co.
  57. . 1220 Mound Avenue
  58. . Racine, Wisconsin 53404
  59. . Sent him 1100 KERMIT on 15 March 1984.
  60. . .
  61. . .
  62. . Steve Rasmussen
  63. . Information Resource Coordinator
  64. . Wisconsin Dairy Herd Improvement Cooperative
  65. . Processing Center
  66. . 5301 Tokay Blvd.
  67. . Madison 53711
  68. . 273-2820
  69. . Sperry 1100/70 with DCP-40 Front End
  70. . Received Kermit from me on 2 April 84
  71. . .
  72. . .
  73. . Dennis Sutherland
  74. . Rockwell International
  75. . Mail Station 124-211
  76. . Cedar Rapids, Iowa
  77. . 52498
  78. . (319)395-4613
  79. . Received Kermit from Columbia...
  80. . Talked with me 3 July 84...
  81. . Had trouble reading tape.
  82. . .
  83. . .
  84. . Kenneth A. Williams
  85. . Systems Programming
  86. . Michigan Technological Univ
  87. . Houghton, Michigan
  88. . (906)487-2307
  89. . Sent Kermit on 5 July 1984
  90. . .
  91. . .
  92. . George Conner
  93. .   (He finally gave up)
  94. . Sandia National Lababs
  95. . PO Box 5800
  96. . Albuquerque, New Mexico  87185
  97. . 505-844-1930
  98. . 1100/80 with DCP 40 front end
  99. . GAndalf port contender between ttys and dcp40
  100. . Talked to him 17 JUly 84.
  101. . He almost had things working at that time.
  102. . .
  103. . .
  104. . Captain Krebill
  105. . Chief, Systems Software
  106. . United States Military Academy
  107. . West Point, New York 10996
  108. . (914)938-2138
  109. . .
  110. . .
  111. . .
  112. . Jerry Veal
  113. . RCA
  114. . Indianapolis Indiana
  115. . (317)267-6350
  116. . Soon to have Chi front end
  117. . Has KERMIT working in at least one direction.
  118. . 28 Aug 84
  119. . .
  120. . .
  121. . Richard L. Mattis
  122. . Semiconductor Devices and circuits division
  123. . United States Department of Commerce
  124. . National Bureau of Standards
  125. . Building 225, Room B310
  126. . Gaithersburg, Maryland  20899
  127. . 17 September 1984
  128. . .
  129. . .
  130. . Joe Wieclawek
  131. . Jet Propulsion Lab
  132. . IPC/141
  133. . California Institute of Technology
  134. . 4800 Oak Grove Drive
  135. . Pasadena, California 91109
  136. . (818)354-4321
  137. . 26 sept 1984
  138. . .
  139. . .
  140. . .
  141. . Department of the Army
  142. . Phillip Howell
  143. . 703-731-3531
  144. . 703-731-3497
  145. . 20 November 1984
  146. . .
  147. . .
  148. . Gary Cooper
  149. . UCELL
  150. . 1930 Hiline
  151. . Dallas, Texas  75207
  152. . (214)655-8797
  153. . 20 November 1984
  154. . Hadn't got things working yet
  155. . As of oct 85 things evidentally were working ok..see Jeff Langner
  156. .
  157. .
  158. .
  159. . Jeff Langner
  160. . Control Data UIS
  161. . (415)943-6828
  162. . 1100 with DCP front end.  Got it working OK
  163. . Worked with Gary Cooper (qv).
  164. .
  165. .
  166. .
  167. . John Kinsfather
  168. . Boulder, Colorado
  169. . (303)497-6404
  170. . 27 November 1984
  171. . Unable to get it working at first...kept
  172. . saying that  'HELP' was an illegal command and
  173. . that he should type in 'HELP' for a list of
  174. . legal commands.
  175. . Turned out that he had run the program through
  176. . a front end that upper-cased everything. So the
  177. . test for .gt. 'a' in the str$upcase routine no
  178. . longer worked.
  179. .
  180. .
  181. . John Dean
  182. . lEad sOftware aNalyst
  183. . Medtronic
  184. . 6970 Old Central Avenue
  185. . P.O. Box 1453
  186. . Minneapolis, Minnesota 55440
  187. . (612)574-3662
  188. . Had trouble at first because 1100 communications
  189. . software refused to print control characters.
  190. . It could read control characters ok.
  191. . He added server mode to 1100 KERMIT and
  192. . will send TCF to me.
  193. . Eventually got it working but each packet
  194. . required about three seconds in 1100 receive
  195. . mode as shown in 1100 debug trace file.  That
  196. . 3 seconds must have disappeared in SDFIO or
  197. . some such place.
  198. . .
  199. . .
  200. . Mike Darnell
  201. . (305)828-2603
  202. . Walt Disney World
  203. . Orlando, Florida
  204. . Has 1100/63 with DCP-40 front end.
  205. . .
  206. . .
  207. . Grant Gilmour
  208. . Gulf Canada Resources Inc.
  209. . P.O. Box 130
  210. . 401 - 9th Ave., S.W.
  211. . Calgary, Alberta
  212. . Canada T2P 2H7
  213. . (403)233-4482
  214. . Working on a "STANDARD" Sperry front end. ( DCP)
  215. . Mr. Gilmour sent the 1100 KERMIT changes
  216. . to implement server mode, wildcards, and improved SHOW command
  217. . Got KERMIT successfully working with DCP...
  218. . He said the "secret" was in using linefeed for handshake in place
  219. . of carriage return.
  220. . .
  221. . .
  222. . Sherwin Dubren
  223. . Quill Corporation
  224. . 100 South Schelter Road
  225. . Lincolnshire, Illinois 60069
  226. . (312)634-4850
  227. . Not working as of 13 Feb 1985.
  228. . WORKING WITH DCP FRONT END as of May 1985.
  229. . .
  230. . .
  231. . .
  232. . Chuck Rhode
  233. . SCHULTZ SAV-O
  234. . 2215 Union Avenue
  235. . Sheboygan, Wisconsin 53081
  236. . (414)457-4433
  237. . Talked to him on 18 February 1985.
  238. . He was going to order the tape from Columbia.
  239. . 1100/60
  240. . .
  241. . .
  242. . Frank Rankin
  243. . National Climatic Data Center
  244. . Federal Building
  245. . Asheville, North Carolina
  246. . 28801
  247. . (704)259-0373
  248. . Got it working.  I called up and
  249. . transfered a file.
  250. . DCP type front end, I believe.
  251. . .
  252. . .
  253. . Edith Creighan
  254. . Province of Prince Edward Island
  255. . Computer Services Division
  256. . P.O. Box 2000
  257. . Charlottetown, P.E.I.
  258. . C1A 7N8
  259. . Canada
  260. . (902)894-5533
  261. . asked for manual 23 apr 85
  262. .
  263. . John Ryberg
  264. . (813)577-1900   Extension 2206
  265. . Sperry, Florida
  266. . TAlked oN 5 JUne 85...pRomised tO cAll bAck sOmeday aNd
  267. . tEll mE wHat cOnfiguration hE hAs.
  268. .
  269. .
  270. . Greg Moody
  271. . Internal Revenue Service
  272. . Washington, D.C.
  273. . (202)634-2476
  274. . 1100/82  Running Kermit through GCS
  275. . Discovered two extra lines following END card that caused assembler to bomb.
  276. . Works.  Problem with getting logged out when he doesn't want to be
  277. . logged out when using server mode and he aborts a transfer.
  278. .
  279. .
  280. . Gunnar Eklund                                                         . Gunnar
  281. . ENEA DATA                                                             . Gunnar
  282. . Box 232                                                               . Gunnar
  283. . S-183 23 TABY                                                         . Gunnar
  284. . Sweden                                                                . Gunnar
  285. . HAs successfully used version 1.1, 1.4, and 2.2.                      . Gunnar
  286. . DCP front end, Telcon 3 and Telcon 4.                                 . Gunnar
  287. . He submitted the code for conditional assembly of DCPFE stuff.
  288. . I (Paul Stevens) attempted to retrofit it into my version...hope it is close.
  289. . Gunnar's code is marked in column 72 as 'Gunnar'.
  290. . Here are his words:
  291. . I would like to show you the local changes I have made to KERMIT 2c2. . Gunnar
  292. . In fact, they are pure additions, mainly to make it work with our     . Gunnar
  293. . DCP front end and network.  They are perhaps of interest to other site. Gunnar
  294. . If you think so, perhaps you add them in a future release.            . Gunnar
  295. .
  296. .
  297. .
  298. . Debra A. Herold
  299. . Automation Manager
  300. . A.D.S. Programming Support
  301. . A.D.S. Support Activities Division
  302. . Texas Department of Health
  303. . 1100 West 49th Street
  304. . Austin, Texas 78756
  305. . (512)458-7111
  306. . Have an 1100/73 with a DCP/40.  Wanted a KERMIT that would
  307. . work with TIP so users wouldn't have to be allowed for DEMAND.
  308. .
  309. .
  310. . E. Trinkaus
  311. . Hochshulrechenzentrum der Philipps-Universitat
  312. . Marburg/Lahn
  313. . Hans-Meerwein-Strasse
  314. . 3350 MARBURG
  315. . West Germany
  316. . Wrote asking what to do about the illegal @@tty's that
  317. . appear in initialize and shutdown.
  318. . He has DCP-40 front end.
  319. .
  320. .
  321. . Frithjov Iverson
  322. . Trondheim University Computing Center
  323. . FI%NORUNIT.BITNET
  324. . eNd oF iNterested pArties lIsting  ***************************************
  325. .
  326. . 28 dEcember 1983 - aDded sEnd aNd rEceive sTartoFpAcket cHaracters tO
  327. . tHe sHow cOmmand.
  328. .
  329. .
  330. . 20 dEcember 1983
  331. . Installed tHe "sEt eRror" cOmmand sO tHat rAndom eRrors
  332. . cOuld bE fOrced.  pUrpose iS fOr tEsting eRror rEcovery.
  333. .
  334. .
  335. . This is what the collection looks like:
  336. . @use r,sys$*rlib$
  337. . @map,i ,k.kermit1100/exe
  338. . in k.kermit1100/asm
  339. . in r.table$/sys75r1
  340. . in r.fdasc$/sys75r1
  341. . in r.sdfo/sys75r1
  342. . in r.sir$/sys75r1uw1
  343. . in r.sor/sYs75r1
  344. . in r.eru$
  345. . in r.sdfi/sys75r1
  346. . end
  347. .
  348. . Some documentation on how to use the program is assembled into the
  349. . program itself in the form of "HELP" strings.
  350. . You will find these in the first 1000 lines of the program.
  351. /.
  352. . 31 OCT 1983
  353. .         aDded bInary fIle tYpe cApability.
  354. .
  355. .
  356. . 9 nOvember 83
  357. .         cOrrection to prevent infinite loops when receiving blank image
  358. .
  359. .
  360. . 7 nOvember 83
  361. .         aDded
  362. .                   sEt cOntinuation  <9 bIt cHaracter>
  363. .                   sEt lEngth  <dEcimal nUmber>
  364. . pUrpose iS tO aLlow lInes lOnger tHan wHat 1100 nOrmally aLlows.
  365. .
  366. .
  367. . 22 nOvember
  368. .         aDded dIagnostic fOr nOn-pRogram fIles.
  369. .         cHanged sEt fIle cOmmand tO sEt fIlename cOmmand.
  370. .
  371. .
  372. . 27 jAnuary 1984
  373. .         rEwrote sOurce iNput rOutines sO tHat iT iS nOw pOssibe
  374. .         tO rEad "nOn-standard" sdf eLements.  hAd tO
  375. .         uSe sdfi rOutines aNd dO mY oWn cYcling aNd fIeldAta cOnversion, etc.
  376. .
  377. .
  378. . 27 jAuary 1984
  379. .         iF eLement hAs a vErsion nAme yOu mUst
  380. .         mEntion iT eXplicitly oN tHe sEnd cOmmand.  wE uSed tO
  381. .         fInd aNy eLement wIth tHe pRoper nAme iF yOu oMitted
  382. .          tHe vErsion nAme bUt wE gOt iNto tRouble wIth pEople
  383. .         wHo hAd eLements wIth tHe sAme nAme, oNe wIth a vErsion
  384. .         aNd oNe wIthout.
  385. .
  386. . 22 jUne 1984
  387. . cHange hElp fOr sEt cOmmand tO bE mOre eXplicit
  388. . aBout tHe sEt fIle cOmmand
  389. .
  390. . 22jUne 1984
  391. . mOdify mAp lAnguage fOr nEw vErsion oF rlIb
  392. . ************************** version 1.4 ************************************
  393. .
  394. . 5 mArch 1984
  395. . eXpand cHaracter lOad aNd sTore rEmote
  396. . tAbles tO aCcomodate mAxeLtlInsIz*4 cHaracters
  397. .
  398. .
  399. . 2 aPril 1984
  400. .
  401. . 13 sEptember 1984
  402. . cHanged tHe wAy cOntrol cHaracter qUoting iS hAndled.  iT
  403. . tO sAy (iN tHe sEnd iNit pAcket tHat iT wAs gOing tO uSe
  404. . tHe rEceive qUote cHaracter and iT uSed tO sTore tHe cHaracter
  405. . tHe rEmote wAs gOing tO uSe (fRom tHe iNit aCk pAcket) iNto
  406. . tHe sEnd qUote cHaracter.
  407. . ************************************* vErsion 1.5 *************************
  408. .
  409. . 10 jAnuary 1985
  410. .         fIxed uP cOntrol qUoting.  iT dId nOt wOrk aT aLl fOr 8-bIt
  411. .         cHaracters.
  412. .         eIther tHe oLd pRotocol bOok wAs wRong, i dIdn't rEad iT, oR
  413. .         i gRossly mIsunderstood wHat i rEad.  i tHink iT iS rIght nOw.
  414. . ***************************************** vErsion 1.6 ******************
  415. .
  416. . 14 jAnuary 1985
  417. .         rEarranged tHe wAy tHe pArameters sUch aS pAcket sIze aRe sEt uP.
  418. .         iT uSed tO bE tHat (fOr eXample) pAcket sIze wAs sEt vIa
  419. .                   SET SEND PACKETSIZE 80
  420. .         bUt iF tHe rEmote sEnt a pAcket sIze iN tHe sEnd iNit pAcket tHen
  421. .         wHat iT sEnt oVerrode wHatever tHe hUman bEing hAd sAid.
  422. .          nOw wE rEmember wHat tHe hUman hAs sAid, rEad wHatever
  423. .         tHe sEnd iNit pAcket sAys, aNd mAke sOme sOrt oF
  424. .         dEcision aS tO wHat sHould bE dOne.  iN tHe cAse oF
  425. .         pAcket sIze, wE uSe tHe lEsser oF tHe tWo vAlues.
  426. . ******************************************* vErsion 1.7 ********************
  427. .
  428. . THe cHanges tO pRoduce vErsion 1.8 wEre sUpplied bY GRant GIlmour
  429. . oF:
  430. .         GUlf CAnada REsources INc.
  431. .         P.O. BOx 130
  432. .         401 - 9th AVenue, S.W.
  433. .         CAlgary, ALberta
  434. .         CAnada   T2P 2H7
  435. .         (403)233-4482
  436. . BAsically, tHey iNclude tHe eNtire sErver fAcility aNd tHe wIld
  437. . cArd cApability...nOt tO mEntion a fEw oRdinary eRror cOrrections.
  438. . I'M nOt tOo sUre hOw tHe tHing wOrked aT aLl wIth oNe oF tHe
  439. . eRrors hE fOund.
  440. . THe sElective sHow cOmmand iS aLso MR. GIlmour's.
  441. .
  442. . I cErtainly aCcept rEsponsibility fOr MR. GIlmour's cOntributions.  HE
  443. . oBviously wOrked hArd tO kEep wIth tHe "sPirit" oF tHe pRogram.  IT
  444. . wIll nOt bE dIfficult fOr tHe tRained eYe tO sPot tHe dIfferece
  445. . bEtween hIs cOde aNd mIne hOwever.
  446. . JANUARY, 1985
  447. . SHOW COMMAND ENHANCED
  448. . DUMP OF THE KERMIT DEBUG IN DECIMAL OR OCTAL VIA THE SET DUMPFORMAT COMMAND
  449. . BASIC SERVER MODE ADDED
  450. .
  451. . WILDCARD SENDS AND GETS ALLOWED. SEE ALSO SET MAXWILD.
  452. .
  453. . EITHER A PERIOD OR A SLASH CAN BE USED FOR A DELIMITER WHEN SPECIFING
  454. . THE ELEMENT AND VERSION.
  455. .
  456. .
  457. . PROBLEMS
  458. . --------
  459. .
  460. .  WITH OUR STANDARD TTY HANDLER WE COULD NOT SET ANY OF THE MODES LIKE
  461. .  PARITY, DUPLEX, ETC. THAT PAUL STEVENS COULD. SINCE WE WERE ONLY
  462. .  INTERESTED CURRENTLY IN TRANSFERRING ASCII FILES THIS WAS OKAY.
  463. .
  464. .
  465. . GRANT GILMOUR  GULF CANADA RESOURCES INC.
  466. . ************************************* VERSION 1.8 *************************
  467. . rEvise dEfinitions oF tImeout nAmes.  SEnd tImeout iS nOw hOw lOng
  468. . I wIll wAit aNd rEceive tImeout iS hOw lOng I tEll tHe oTher
  469. . fEllow tO wAit.
  470. . SEnd tImeout cAn bE cHanged bY nEgotiation oNly iF iT hAs
  471. . nOt bEen cHanged fRom iTs dEfault vAlue.  PEople wEre hAving tRouble
  472. . sAying tHat 15 sEconds wEre nEcessary wHen tHeir lOcal KeRMITs
  473. . wEre oVerriding tHe 15 sEcond vAlue iN tHe SeND InIT pAcket.
  474. . 20 FEb 1985
  475. . ******************************************** VeRSION 1.9 *****************
  476. .
  477. . IMplemented 8 bIt qUoting.
  478. . IMplemented rEpeat cOunt pRefixing.
  479. . SEparated tHe cHannel wIdth dEfinition (SeT WiDTH) fRom tHe
  480. . fIle tYpe dEfinition (SeT TyPE BiNARY or ASCII).
  481. .
  482. . *************************************** VeRSION 2.0 ***********************
  483. .
  484. . IMplemented ReAL wIldcards sUch tHat "*" sTands fOr aNy (eVen nUll)
  485. . sTring aNd "%" sTands fOr aNy OnE (nOn-bLank) cHaracter.
  486. . A cOuple oF eRror cOrrections (aCtually tHere wEre sEveral!).
  487. . 1 MAy 1985
  488. .
  489. . ************************ VeRSION 2.1 *************************
  490. .
  491. . COrrected an error...vErsion 2.1 sent all images in an element
  492. . wHether oR nOt iT wAs dEleted.  VEry bAd.  VEry, vEry, vEry bAd.
  493. .
  494. . ******************************* vErsion 2.2 **********************
  495. .
  496. . UPdated hElp sTrings . . . mIssed a fEw iN vErsion 2.2
  497. . 17-jul-1985  fIxed qUite a fEw mOre hElp sTrings
  498. . 23-jUl-1985 cHanged tHe lIne tErmination sEquence wHen rEceiving tO
  499. . bE eIther <cr><lf> .OR. <lf><cr>.  AT lEast oNe mIcro wOrd pRocessor
  500. . hAs bEen dIscovered wHich uSes <lf><cr>.
  501. . 5-aUg-1985 fIxed rEceive sO tHat iT dOes nOt aCCept wIldcArd
  502. . cHaracters aS lEgal eLement/vErsion nAme cHaracters.  To dO tHis I hAd
  503. . tO mOdify sErver sEnd tO nOt uSe pArticular sUbroutines tHat
  504. . sHould oNly hAve bEen uSed bY rEceivers.  tHis aLso fIxed sOme pRoblems
  505. . wIth rEceiving fIles wIth zEro lEngth nAmes aNd sUbstitutes '$' fOr
  506. . iLlegal cHaracters iNstead oF dRopping tHem (tO cOnform tO macc mAnual).
  507. . **************************** version 2.3   ******************************
  508. . aDded Gunnar Eklund's cOnditional aSsembly sTuff fOr DCP aNd nEtwork.
  509. . His comments
  510. . 1. Conditional assembly for DCP Telcon 4 (and perhaps also other Telcon
  511. .    versions):
  512. .      --@@ESC 0 and @@END ESC inserted to suppress excessive cr, lf, and
  513. .        filler transmission.  Some Kermits did otherwise not work well.
  514. .        The speed was also increased by this change.
  515. .      --An easy way to change defaults for START-OF-PACKET, RECEIVE DEFAULT
  516. .        PACKET LENGTH and RECEIVE MAX PACKET LENGTH.
  517. .      --@@TTY S,021 and @@TTY S,> to change solicitor to XON during packet
  518. .        transmission.  The old C-kermit liked this very much.
  519. . 2. Logout from server mode by a @@TERM.
  520. . 3. Repeat counts handled in file names (R and F packets, I think).  This
  521. .    was needed by the new C kermit.  Handled by the new routine unprefixify.
  522. . 4. Conditional assembly: Delete mark set on successfully sent elements
  523. .    if @XQT D option on.
  524. . 5. Delete mark partially received elements if R option is on
  525. . 6. Read file table index once more in routine SERVERSEND to make it possible
  526. .    to send a file that was just received.
  527. . 7. SZ NPASSES moved.  Should always be done at 'no find', else you can't send
  528. .    ANYTHING any more.
  529. .           Gunnar Eklund
  530. .           ENEA DATA
  531. .           Box 232
  532. .           S-183 23 TABY
  533. .          Sweden
  534. .
  535. . FIxed a hArdcOded 800 cHaracter lImit iN tHe sdfio fct.
  536. . CHanged 800 mAx lIne sIze tO 2000. THere mUst bE sOme lImit!
  537. .
  538. . ******************************** version 2.4 ****************
  539. . COrrected tWo eRrors rEported bY Frithjoy Iversenm of Trondheim
  540. . University Computing Center, Norway.    (FI%NORUNIT.BITNET)
  541. . AN eRror tHat cAused lOng ACKS.  WHen rEceiving mUltiple cOpies oF tHe
  542. . sAme pAcket wE uSed tO iNclude a lIttle oF tHe dAta iTself iN tHe
  543. . sEcond aNd sUbsequent ACKs.
  544. . CHanged tHe 'ELEMENT HAS CYCLES' rEcognizer.  IT uSed tO rEquire
  545. . bOth 'S' iN s3 oF tHe hEader cOntrol wOrd aNd '*SDFF*' iN tHe dAta
  546. . pArt oF tHe hEader.  NOw tHe 'S' iN s3 iS sUfficient.
  547. .
  548. . CHanged tHe dEfault SEND PACKETLENGTH sO tHat tHe tRailing bLanks tHat
  549. . tHe 1100 lIkes tO sEnd wHen tHe lIne iS nOt a mUltiple oF 4 cHAracters
  550. . wIll nOt cAuse tHe pAcket tO eXceed 96 cHaracters.
  551. . *****************************************vErsion 2.5**********************
  552.           axr$
  553. tRue      eQu       1
  554. fAlse     eQu       0
  555. vAlcOl    eQu       20
  556. mAxeLtlInsIz eQu    500                 . mAximum sIze (iN wOrds) oF a
  557. DELETEOPTION EQU    DCPFE                                               . Gunnar
  558.           iF        DCPFE                                               . Gunnar
  559. DEFSOP    EQU       02                  . default start of packet ^B    . Gunnar
  560. DEFRPAKLEN EQU      78                  . default receive packet length . Gunnar
  561. MAXRPAKLEN EQU      80                  . max receive packet length     . Gunnar
  562. ESCMODE   EQU       1                   . 1: @@ESC o mode when sending  . Gunnar
  563.                                         .    to avoid sending of not    . Gunnar
  564.                                         .    needed characters.         . Gunnar
  565.                                         . 0: as earlier versions        . Gunnar
  566.           ELSE                                                          . Gunnar
  567. DEFSOP    EQU       01                  . default start of packet ^A    . Gunnar
  568. DEFRPAKLEN EQU      94                  . default receive packet length . Gunnar
  569. MAXRPAKLEN EQU      96                  . max receive packet length     . Gunnar
  570. ESCMODE   EQU       0                   . 1: @@ESC o mode when sending  . Gunnar
  571.                                         .    to avoid sending of not    . Gunnar
  572.                                         .    needed characters.         . Gunnar
  573.                                         . 0: as earlier versions        . Gunnar
  574.           ENDF                                                          . Gunnar
  575. .                                                                       . Gunnar
  576.           IF        (DEFSOP<0)++(DEFSOP>=32)                            . Gunnar
  577.           DISPLAY   *'0 < DEFSOP < 040 NEEDED', DEFSOP                  . Gunnar
  578.           ENDF                                                          . Gunnar
  579. DEFSOPHELP EQU      $CB(DEFSOP,2):'=Control-':$CAS(DEFSOP+64)           . Gunnar
  580.                                         . lIne tO/fRom aN eLement
  581. p         pRoc
  582. pUsh*     nAme
  583.           anx,u     x10,p(1)
  584.           uNlist
  585. i         dO p(1) , s p(1,i),p(1)-i,x10
  586.           lIst
  587.           eNd
  588. p         pRoc
  589. pOp*      nAme
  590.           uNlist
  591. i         dO p(1) , l p(1,i),-1+i,x10
  592.           lIst
  593.           ax,u      x10,p(1)
  594.           eNd
  595. p         pRoc
  596. sTrng*    nAme
  597.           +($sl(p(1,1))//4)*4,$sl(p(1,1))
  598.           uNlist
  599.           $cas(p(1,1))
  600.           lIst
  601.           end
  602. p         pRoc
  603. vAriable* nAme
  604. q*        pRoc
  605. vAl*      nAme
  606.           dO p(2,1)=bcdt ,  +dEf
  607.           dO p(2,1)=dEcimalt , +p(2,4)
  608.           dO p(2,1)=oCtalt , +p(2,4)
  609.           dO p(2,1)=cHart , p(2,2)
  610.           do p(2,1)=cNtrlt , p(2,2)
  611.           eNd
  612. p         pRoc
  613. cMd*      nAme
  614.           +p(1,1)
  615.           sTrng     p(1,2)
  616.           eNd
  617.           +p(2,1)   . tYpe oF vAriable
  618.           vAl                           . iNitial vAlue = dEfault
  619.           sTrng     p(1,1)              . nAme of vAriable
  620.           dO p(2,1)=dEcimalt , +p(2,2) . lOwlIm
  621.           dO p(2,1)=oCtalt , +p(2,2) . lOwlIm
  622.           dO p(2,1)=dEcimalt , +p(2,3) . hIghlIm
  623.           dO p(2,1)=oCtalt , +p(2,3) . hIghlIm
  624.           dO p(2,1)=dEcimalt , vAl p(2,4) . dEfault
  625.           dO p(2,1)=oCtalt , vAl p(2,4) . dEfault
  626.           do p(2,1)=cHart , +p(2,2)
  627.           do p(2,1)=cNtrlt , +p(2,2)
  628. dEf.      aLlowed sTrings...fIrst iS dEfault
  629. i         dO p(3) , cMd i,p(3,i)
  630.           do p(3)<>0 , +0
  631.           eNd
  632. $(1).
  633.           ascii
  634. sTart.
  635.           la        a0,(+0102,(' KER11  '))
  636.           er        apRint$
  637.           la        a0,(+0102,('VER 2.5 '))
  638.           er        apRint$
  639.           la        a0,(+qUit,1+cMdbUf)
  640.           er        aread$              . dIscArd iNfOr
  641.           er        tsqrG$
  642.           spd       a0
  643.           oR,u      a0,010
  644.           lpd       0,a1                . sEt qUarter wOrd mOde fOr sUre
  645.           lx,u      x10,sTackeNd        . iNitial sTack pOinter
  646.           la,u      a0,iNituSE
  647.           er        csf$
  648.           er        opt$                . save processor options
  649.           s         a0,options
  650.           ON        DELETEOPTION                                        . Gunnar
  651.           and       a0,(+1*/('Z'-'D'))                                  . Gunnar
  652.           jz        a1,nextcommand                                      . Gunnar
  653.           l,u       a0,deletewarn                                       . Gunnar
  654.           lmj       x11,pripar                                          . Gunnar
  655.           j         nextcommand                                         . Gunnar
  656. deletewarn.                                                             . Gunnar
  657.           strng     'WARNING: D option on - Kermit11 will delete all ':;. Gunnar
  658.                     'files successfully sent!'                          . Gunnar
  659.           +0                                                            . Gunnar
  660.           OFF       DELETEOPTION                                        . Gunnar
  661. nExtcOmmand.
  662.           la,u      a0,1+cMdbUf
  663.           lmj       x11,rEadcOmmand
  664.           jn        a0,eOf
  665.           sa,h2     a0,cMdbUf           . cHaracter cOunt
  666.           la,u      a0,cMdbUf
  667.           la,u      a1,0                . cHaracter iNdex
  668.           la,u      a2,tOken
  669.           lmj       x11,gEttOken
  670.           jn        a0,nExtcOmmand
  671.           sa        a1,cMdiNdex
  672.           la,u      a0,tOken
  673.           lmj       x11,sTr$uPcAse
  674.           la,u      a1,tOken
  675.           la,u      a2,cMdtBl
  676.           lmj       x11,cMdsRch
  677.           jz        a2,iLlcOmmand
  678.           lx        x11,0,a2
  679.           j         0,x11               . gO pRocess tHe lEgal cOmmand
  680. qUit.
  681. .         LA,U      A0,FREESTR+1
  682. .         ER        ACSF$
  683. . I dOn't lIke tO fRee tHe uSer's fIle uNless I kNow tHat
  684. . I aM tHe pErson wHo aSSigned iT.  ELse tpf$ wIll gO aWay.
  685. . SOmeday tHis wIll bE mAde tO wOrk cOrrectly.
  686.           LA        A0,LOGOUTFLAG
  687.           TNE,U     A0,TRUE
  688.           J         LOGEMOUT
  689.           LA,U      A0,QUITMESSAG
  690.           lmj       x11,pRipAr
  691.           er        eXit$
  692. LOGEMOUT.
  693.           LA,U      A0,LOGOUTMESS
  694.           LMJ       X11,PRIPAR
  695.           ON        DCPFE                                               . Gunnar
  696.           l         a0,(logoutlen,logoutcmd)                            . Gunnar
  697.           er        aprtcn$                                             . Gunnar
  698.           OFF       DELETEOPTION                                        . Gunnar
  699. .         LA,U      A0,LOGOUTADD
  700. .         ER        CSF$
  701.           ER        EXIT$
  702. logoutcmd.                                                              . Gunnar
  703.           'D,@@TERM '                                                   . Gunnar
  704. logoutlen equ       $-logoutcmd                                         . Gunnar
  705. QUITMESSAG.
  706.           STRNG     'Goodbye...1100 KERMIT signing off.'
  707.           +0
  708. LOGOUTMESS.
  709.           STRNG     'Goodbye...1100 KERMIT logging off.'
  710.           +0
  711. FREESTR.
  712.           STRNG     '@FREE   K$E$R$M$I$T$ . '
  713. .
  714. cMdtBl.
  715.           +help
  716.           sTrng     'HELP'
  717.           +sEt
  718.           sTrng     'SET'
  719.           +sHow
  720.           sTrng     'SHOW'
  721.           +sEnd
  722.           sTrng     'SEND'
  723.           +rEceive
  724.           sTrng     'RECEIVE'
  725.           +qUit
  726.           sTrng     'QUIT'
  727.           +qUit
  728.           sTrng     'EXIT'
  729.           +dUmp
  730.           sTrng     'DUMP'
  731.           +eRror
  732.           sTrng     'ERROR'
  733.           +SERVER
  734.           STRNG     'SERVER'
  735.           +0
  736. iLlcOmmand.
  737.           la,u      a0,3+$
  738.           lmj       x11,pripar
  739.           j         nExtcOmmand
  740.           sTrng     'No such command exists.'
  741.           sTrng     'tYpe "help" for a list of legal commands'
  742.           +0
  743. eXit.
  744.           lmj       x11,sHutdOwn
  745.           er        exit$
  746. eof.
  747.           J         QUIT
  748. .
  749. nOtiMp.
  750.           la,u      a0,$+3
  751.           lmj       x11,pRipAr
  752.           j         nExtcOmmand
  753.           sTrng     'Command has not been implemented.'
  754.           +0
  755. /.
  756. hElp.
  757.           la        a1,cMdiNdex
  758.           la,u      a2,tOken
  759.           la,u      a0,cMdbUf
  760.           lmj       x11,gEttOken        . sEE if cOmmand nAme gIven
  761.           sa        a1,cMdiNdex
  762.           jp        a0,hElpcMd
  763.           la,u      a0,hElppAra
  764.           lmj       x11,pRipAr
  765.           j         nExtcOmmand
  766. nsUchmSg.
  767.           sTrng     'No such command exists.'
  768. hElppAra.
  769.           sTrng     'Valid commands are:'
  770.           strng     '  HELP  [topic]'
  771.           sTrng     '  EXIT  (or QUIT)'
  772.           sTrng     '  RECEIVE  [file name]'
  773.           sTrng     '  SET'
  774.           sTrng     '  SEND   [file name]'
  775.           STRNG     '  SERVER'
  776.           sTrng     '  SHOW   [parameter]'
  777.           +0
  778. hElpcMd.
  779.           la,u      a0,tOken
  780.           lmj       x11,sTr$uPcAse
  781.           la,u      a2,hElptBl
  782.           la,u      a1,tOken
  783.           lmj       x11,cMdsRch
  784.           jz        a2,hElpnsCh
  785.           la        a0,0,a2
  786.           j         0,a0
  787. hElpnsCh.
  788.           la,u      a0,3+$
  789.           lmj       x11,pRipAr
  790.           j         nExtcOmmand
  791.           sTrng     'Legal HELP topics are:'
  792.           sTrng     '   HELP'
  793.           sTrng     '   SET'
  794.           sTrng     '   SEND'
  795.           sTrng     '   RECEIVE'
  796.           STRNG     '   SERVER'
  797.           sTrng     '   SHOW'
  798.           sTrng     '   EXIT'
  799.           sTrng     '   DUMP'
  800.           sTrng     '   QUIT'
  801.           sTrng     '   ERROR'
  802.           +0
  803. hElptBl.
  804.           +hLpeRr
  805.           sTRNG     'ERROR'
  806.           +hLphLp
  807.           sTrng     'HELP'
  808.           +hLpsEt
  809.           sTrng     'SET'
  810.           +hLpxIt
  811.           sTrng     'EXIT'
  812.           +hLpdUmp
  813.           sTrng     'DUMP'
  814.           +hLpxIt
  815.           sTrng     'QUIT'
  816.           +hLprCv
  817.           sTrng     'RECEIVE'
  818.           +HLPSRV
  819.           STRNG     'SERVER'
  820.           +hLpsNd
  821.           sTrng     'SEND'
  822.           +hLpsHo
  823.           sTrng     'SHOW'
  824.           +0
  825. hLpeRr.
  826.           la,u      a0,3+$
  827.           lmj       x11,pRipAr
  828.           j         nExtcOmmand
  829.           sTrng     'Print the error messages that have'
  830.           sTrng     'collected during the most recent transfer.'
  831.           +0
  832. hLpdUmp.
  833.           la,u      a0,3+$
  834.           lmj       x11,pRipAr
  835.           j         nExtcOmmand
  836.           sTrng     '       DUMP    <start>,<how many>'
  837.           sTrng     'Dumps <how many> lines from the debug file starting'
  838.           sTrng     'at the <start>th line.'
  839.           sTrng     'If you omit <how many> one line will be dumped.'
  840.           sTrng     'If you omit both <start> and <howmany> then one line'
  841.           sTrng     'will be dumped at the previously dumped line+1.'
  842.           +0
  843. HLPSRV.
  844.           LA,U      A0,3+$
  845.           LMJ       X11,PRIPAR
  846.           J         NEXTCOMMAND
  847.           STRNG     '       SERVER'
  848.           STRNG     'Places KERMIT-11 in server mode.  KERMIT-11 will'
  849.           STRNG     'await all further instructions from the user'
  850.           STRNG     'KERMIT on the other end of the connection.'
  851.           STRNG     'After issueing the server command escape back to the'
  852.           STRNG     'user KERMIT.  Format for the GET command used on the'
  853.           STRNG     'other KERMIT is: GET ELEMENT.VERSION. WILDCARDS '
  854.           STRNG     '(I.E. GET C$.*DOC) May be used on the get command.'
  855.           +0
  856. hLphLp.
  857.           la,u      a0,3+$
  858.           lmj       x11,pRipAr
  859.           J         HELPNSCH
  860.           sTrng     'The HELP command prints all the legal command names'
  861.           sTrng     'and their optional arguments'
  862.           +0
  863. hLpsEt.
  864.           la,u      a0,cMdbUf
  865.           la,u      a2,tOken
  866.           la        a1,cMdiNdex
  867.           lmj       x11,gEttOken        . iS a pArameter sPecified?
  868.           sa        a1,cMdiNdex
  869.           jp        a0,hLpsEtpAr        . jUmp iF yEs
  870.           la,u      a0,3+$
  871.           lmj       x11,pRipAr
  872.           j         nExtcOmmand
  873.           sTrng     'Use the SET command to modify parameters'
  874.           sTrng     'for the file transfer process.  The SHOW'
  875.           sTrng     'command can be used to determine the'
  876.           sTrng     'names and values of the various parameters.'
  877.           sTrng     'Type "HELP SET parametername" for information'
  878.           sTrng     'about a particular parameter.'
  879.           sTrng     'The one SET command that you !MUST! use tells'
  880.           sTrng     'KERMIT what file contains (or will contain) elements'
  881.           sTrng     'that are transferred. Example:'
  882.           sTrng     '    SET FILE TROJAN*HORSE'
  883.           +0
  884. hLpsEtpAr.
  885.           la,u      a0,tOken
  886.           lmj       x11,sTr$uPcAse
  887.           la,u      a2,hLpsEttBl
  888.           la,u      a1,tOken
  889.           lmj       x11,cMdsRch
  890.           jz        a2,lStsEtpAr        . tEll hIm wHat tHe lEgal nAmes aRe
  891.           la        a0,0,a2
  892.           j         0,a0
  893. lStsEtpAr. lIst lEgal pArameters fOr tHe sEt cOmmand
  894.           la,u      a0,lStsEtpArl
  895.           lmj       x11,pRipAr
  896.           j         nExtcOmmand
  897. lStsEtpArl.
  898.           sTrng     'The legal parameters that can be set are:'
  899.           sTrng     '   DELAY'
  900.           STRNG     '   MAXWILD'
  901.           sTrng     '   PARITY'
  902.           sTrng     '   RECEIVE'
  903.           sTrng     '   SEND'
  904.           sTrng     '   FILENAME'
  905.           sTrng     '   TYPE'
  906.           sTrng     '   LENGTH'
  907.           sTrng     '   CONTINUATION'
  908.           sTrng     '   ERROR'
  909.           sTrng     '   DUMPFORMAT'
  910.           sTrng     '   WIDTH'
  911.           sTrng     '   REPEAT'
  912.           sTrng     '   DEBUG'
  913.           sTrng     '   QUOTE8'
  914.           sTrng     '   ERROR'
  915.           +0
  916. hLpsEttBl.
  917.           +hLpsEteRr
  918.           sTrng     'ERROR'
  919.           +hLpsEtdLy
  920.           sTrng     'DELAY'
  921.           +HLPSETWLD
  922.           STRNG     'MAXWILD'
  923.           +hLpsEtpRT
  924.           sTrng     'PARITY'
  925.           +hLpsEtrCv
  926.           sTrng     'RECEIVE'
  927.           +hLpsEtsNd
  928.           sTrng     'SEND'
  929.           +hLpsEtdMpfOr
  930.           sTrng     'DUMPFORMAT'
  931.           +hLpsEtfIl
  932.           sTrng     'FILENAME'
  933.           +hLpsEttYp
  934.           sTrng     'TYPE'
  935.           +hLpsEtlEngth
  936.           sTrng     'LENGTH'
  937.           +hLpsEtcOntin
  938.           sTrng     'CONTINUATION'
  939.           +hLpsEtwIdth
  940.           sTrng     'WIDTH'
  941.           +hLpsEtrEpeat
  942.           sTrng     'REPEAT'
  943.           +hLpsEtqUote8
  944.           sTrng     'QUOTE8'
  945.           +hLpsEtdBg
  946.           sTrng     'DEBUG'
  947.           +0
  948. hLpsEtdBg.
  949.           la,u      a0,3+$
  950.           lmj       x11,pRipAr
  951.           j         nExtcOmmand
  952.           sTrng     '     SET DEBUG 1'
  953.           sTrng     'Turns on code which writes each and every packet'
  954.           sTrng     '(sent or received)to the next 56 words'
  955.           sTrng     'of file "kermitdebug".  The file must have'
  956.           sTrng     'been previously assigned.'
  957.           sTrng     '    SET DEBUG 0       turns debug mode off.'
  958.           +0
  959. hLpsEteRr.
  960.           la,u      a0,3+$
  961.           lmj       x11,pRipAr
  962.           j         nExtcOmmand
  963.           sTrng     'Set error <decimal number>'
  964.           sTrng     'Result is:'
  965.           sTrng     '  <random number seed> <-- <error probability>'
  966.           sTrng     '  <error probability> <-- <decimal number>'
  967.           sTrng     'Checksum error caused every <error probability>th time.'
  968.           +0
  969. hLpsEtlEngth.
  970.           la,u      a0,3+$
  971.           lmj       x11,pRipAr
  972.           j         nExtcOmmand
  973.           sTrng     'SET   LENGTH   <decimal number>'
  974.           sTrng     'Sets the maximum length of line that will be stored'
  975.           sTrng     'in an 1100 element when the 1100 is receiving an'
  976.           sTrng     'ASCII type file.  Lines longer than this will cause a'
  977.           sTrng     'new line to be started.'
  978.           +0
  979. hLpsEtcOntin.
  980.           la,u      a0,3+$
  981.           lmj       x11,pRipAr
  982.           j         nExtcOmmand
  983.           sTrng     'SET  CONTINUATION   <octal number>'
  984.           sTrng     'Specifies the nine bit character that should be used to'
  985.           sTrng     'indicate that a received line was longer than the maximum'
  986.           sTrng     'and that it is continued on the following line.'
  987.           sTrng     'A value of zero means that no continuation character'
  988.           sTrng     'will be used. Since the bottom nine bits of this character'
  989.           sTrng     'are used, a value of 01000 indicates that a zero character'
  990.           sTrng     'should be used as the continuation character.'
  991.           +0
  992. hLpsEtdMpfOr.
  993.           la,u      a0,3+$
  994.           lmj       x11,pRipAr
  995.           j         nExtcOmmand
  996.           sTrng     'SET DUMPFORMAT  <number base>'
  997.           sTrng     'Specifies the number base in which to print dumps'
  998.           sTrng     'of packets.  Legal values are ''DEC'' (decimal),'
  999.           sTrng     '''OCT'' (octal), and ''HEX'' (hexidecimal).'
  1000.           +0
  1001. hLpsEttYp.
  1002.           la,u      a0,3+$
  1003.           lmj       x11,pRipAr
  1004.           j         nExtcOmmand
  1005.           sTrng     'SET  TYPE  <file type>'
  1006.           sTrng     '<file type> can be ASCII or BINARY.'
  1007.           sTrng     'Normal mode (and default) is ASCII which'
  1008.           sTrng     'is used for text files containing lines of'
  1009.           sTrng     'printable characters.'
  1010.           sTrng     'BINARY mode can be used for any file.'
  1011.           sTrng     'The result will be meaningless on the 1100 but'
  1012.           sTrng     'files sent to the 1100 in binary mode and'
  1013.           sTrng     'then sent back to the microcomputer in binary'
  1014.           sTrng     'mode should be unchanged.'
  1015.           sTrng     'BINARY files are not assumed to be divided'
  1016.           sTrng     'into separate lines.'
  1017.           sTrng     'In BINARY mode the packets themselves are saved'
  1018.           sTrng     'as lines...including the control info.'
  1019.           +0
  1020. hLpsEtfIl.
  1021.           la,u      a0,3+$
  1022.           lmj       x11,pRipAr
  1023.           j         nExtcOmmand
  1024.           sTrng     'SET FILE  filename   '
  1025.           sTrng     'Tells the 1100 what file contains'
  1026.           sTrng     'elements when sending and where to'
  1027.           sTrng     'put elements when receiving.  You can specify'
  1028.           sTrng     'a file name including a qualifier if necessary.'
  1029.           +0
  1030. hLpsEtwIdth.
  1031.           la,u      a0,3+$
  1032.           lmj       x11,pRipAr
  1033.           j         nExtcOmmand
  1034.           sTrng     'SET WIDTH 7   or   SET WIDTH 8'
  1035.           sTrng     'Tells 1100 KERMIT how many bits of data are transmitted'
  1036.           sTrng     'in each character.  If parity is used then the WIDTH'
  1037.           sTrng     'should be set to 7 and any characters 8 bits wide must'
  1038.           sTrng     'be transmitted using an 8 BIT QUOTE character. (See'
  1039.           sTrng     'SET QUOTE8)'
  1040.           IF        DCPFE                                               . Gunnar
  1041.           sTrng     'NOTE! Only SET WIDTH 7 works on this site, because . Gunnar
  1042.           sTrng     'the dumb front end computer!'                      . Gunnar
  1043.           ELSE      . other front end                                   . Gunnar
  1044.           sTrng     'At MACC setting WIDTH 8 causes the 1100 to do the'
  1045.           sTrng     'necessary @@tty commands to turn off parity and'
  1046.           sTrng     'set the data path to be 8 bits wide. '
  1047.           sTrng     'This may not be possible at all sites.'
  1048.           ENDF                                                          . Gunnar
  1049.           +0
  1050. hLpsEtrEpeat.
  1051.           la,u      a0,3+$
  1052.           lmj       x11,pRipAr
  1053.           j         nExtcOmmand
  1054.           sTrng     'SET REPEAT ON   or   SET REPEAT OFF'
  1055.           sTrng     'Repeat prefixing is used to more efficiently'
  1056.           sTrng     'transmit a repeated character such as might'
  1057.           sTrng     'occur in tabular text (many blanks in succession)'
  1058.           sTrng     'or in binary data (many zeroes is succession).'
  1059.           sTrng     'Repeat is normally ON but may be disabled by'
  1060.           sTrng     'setting REPEAT OFF or by the the other computer'
  1061.           sTrng     'not agreeing to use repeat prefixing.'
  1062.           +0
  1063. hLpsEtqUote8.
  1064.           la,u      a0,3+$
  1065.           lmj       x11,pRipAr
  1066.           j         nExtcOmmand
  1067.           sTrng     'SET QUOTE8 ON   or   SET QUOTE8 OFF'
  1068.           sTrng     'In order to transfer 8 bit characters over'
  1069.           sTrng     'a 7 bit path it is necessary to "quote" any '
  1070.           sTrng     'character with the 8th bit set.  This is done'
  1071.           sTrng     'automatically if WIDTH is set to 7 and the other'
  1072.           sTrng     'computer agrees.  If for some reason you want'
  1073.           sTrng     'this not to happen you can SET QUOTE8 OFF.'
  1074.           +0
  1075. hLpsEtdLy.
  1076.           la,u      a0,3+$
  1077.           lmj       x11,pRipAr
  1078.           j         nExtcOmmand
  1079.           sTrng     '      SET DELAY [# seconds]      Default is 5 seconds'
  1080.           sTrng     'Set the length of time the 1100 will delay before'
  1081.           sTrng     'beginning to send a file.  This gives you time to'
  1082.           sTrng     'prepare your local computer to receive the file.'
  1083.           +0
  1084. HLPSETWLD.
  1085.           LA,U      A0,3+$
  1086.           LMJ       X11,PRIPAR
  1087.           J         NEXTCOMMAND
  1088.           STRNG     '      SET MAXWILD [N] '
  1089.           STRNG     'Set the maximum number of elements the Sperry 1100'
  1090.           sTrng     'KERMIT will send when wildcard characters'
  1091.           sTrng     'are specified.'
  1092.           +0
  1093. hLpsEtpRt.
  1094.           la,u      a0,3+$
  1095.           lmj       x11,pRipAr
  1096.           j         nExtcOmmand
  1097.           sTrng     '      SET PARITY [parity]      Default is SPC'
  1098.           sTrng     'Allows you to change the character parity on data'
  1099.           sTrng     'sent from the 1100.  Possible values are:'
  1100.           sTrng     '    OFF, EVEN, ODD, MARK, and SPACE.'
  1101.           sTrng     '"OFF" means that you don''t care'
  1102.           IF        DCPFE
  1103.           sTrng     'NOTE! (Only EVEN works  on this site, because of'  . Gunnar
  1104.           sTrng     'the dumb front end computer!'                      . Gunnar
  1105.           ENDF                                                          . Gunnar
  1106.           +0
  1107. hLpsEtrCv.
  1108.           la,u      a0,cMdbUf
  1109.           la,u      a2,tOken
  1110.           la        a1,cMdiNdex
  1111.           lmj       x11,gEttOken
  1112.           sa        a1,cMdiNdex
  1113.           jp        a0,hLpsEtrCvpAr
  1114.           la,u      a0,3+$
  1115.           lmj       x11,pRipAr
  1116.           j         nExtcOmmand
  1117.           sTrng     'Legal parameters for the SET RECEIVE command are:'
  1118.           sTrng     '     ENDOFLINE [octal number]       Default=015=CR'
  1119.           sTrng     '     PACKETLENGTH [decimal number]     Default=':; . Gunnar
  1120.                     $CD(DEFRPAKLEN)                                     . Gunnar
  1121.           sTrng     '     QUOTE [octal number]     Default is 043=#'
  1122.           sTrng     '     STARTOFPACKET [octal number]       Default=':;. Gunnar
  1123.                     DEFSOPHELP                                          . Gunnar
  1124.           sTrng     '     TIMEOUT [# seconds]     Default=10'
  1125.           sTrng     '     PADDING  [decimal number]   Default=0'
  1126.           sTrng     '     PADCHAR   [octal number]   Default=0'
  1127.           sTrng     'More information is available via: (for example)'
  1128.           sTrng     '     HELP SET RECEIVE ENDOFLINE'
  1129.           +0
  1130. hLpsEtrCvpAr.
  1131.           la,u      a0,tOken
  1132.           lmj       x11,sTr$uPcAse
  1133.           la,u      a2,hLpsEtrCvtBl
  1134.           la,u      a1,tOken
  1135.           lmj       x11,cMdsRch
  1136.           jz        a2,lStsEtrCvpAr
  1137.           la        a0,0,a2
  1138.           j         0,a0
  1139. lStsEtrCvpAr.  .lIst lEgal sEt rEceive pArameters
  1140.           la,u      a0,3+$
  1141.           lmj       x11,pRipAr
  1142.           j         nExtcOmmand
  1143.           sTrng     'The legal receive paramters that you can set are:'
  1144.           sTrng     '   PACKETLENGTH'
  1145.           sTrng     '   PADDING'
  1146.           sTrng     '   PADCHAR'
  1147.           sTrng     '   TIMEOUT'
  1148.           sTrng     '   QUOTE'
  1149.           sTrng     '   ENDOFLINE'
  1150.           sTrng     '   STARTOFPACKET'
  1151.           +0
  1152. hLpsEtrCvtBl.
  1153.           +hLpsEtrCveol
  1154.           sTrng     'ENDOFLINE'
  1155.           +hLpsEtrCvpl
  1156.           sTrng     'PACKETLENGTH'
  1157.           +hLpsEtrCvqUo
  1158.           sTrng     'QUOTE'
  1159.           +hLpsEtrCvsop
  1160.           sTrng     'STARTOFPACKET'
  1161.           +hLpsEtrCvtIm
  1162.           sTrng     'TIMEOUT'
  1163.           +hLpsEtrCvpD
  1164.           sTrng     'PADDING'
  1165.           +hLpsEtrCvpc
  1166.           sTrng     'PADCHAR'
  1167.           +0
  1168. hLpsEtrCvpD.
  1169.           la,u      a0,3+$
  1170.           lmj       x11,pRipAr
  1171.           j         nExtcOmmand
  1172.           sTrng     'The number of padding characters the 1100 needs'
  1173.           sTrng     'between packets when receiving.  The number'
  1174.           sTrng     'is normally zero.'
  1175.           +0
  1176. hLpsEtrCvpc.
  1177.           la,u      a0,3+$
  1178.           lmj       x11,pRipAr
  1179.           j         nExtcOmmand
  1180.           sTrng     'The octal number of the character to be used'
  1181.           sTrng     'as padding between packets received by the'
  1182.           sTrng     '1100.  Normally this is irrelevant since PADDING (the'
  1183.           sTrng     'number of pad characters) is zero.'
  1184.           +0
  1185. hLpsEtrCveol.
  1186.           la,u      a0,3+$
  1187.           lmj       x11,pRipAr
  1188.           j         nExtcOmmand
  1189.           sTrng     'Tells the 1100 "hardware" what character will be'
  1190.           sTrng     'at the end of each line.  The 1100 program will not'
  1191.           sTrng     'be informed that any data has arrived until this'
  1192.           sTrng     'character appears in the input line.'
  1193.           sTrng     'Legal values are 01 through 037.'
  1194.           +0
  1195. hLpsEtrCvpl.
  1196.           la,u      a0,3+$
  1197.           lmj       x11,pRipAr
  1198.           j         nExtcOmmand
  1199.           sTrng     'Tells the 1100 the size of the biggest packet'
  1200.           sTrng     'it is expected to receive.  Legal values are '
  1201.           sTrng     '10 through 96. Default is 94.'
  1202.           +0
  1203. hLpsEtrCvqUo.
  1204.           la,u      a0,3+$
  1205.           lmj       x11,pRipAr
  1206.           j         nExtcOmmand
  1207.           sTrng     'Tells the 1100 what character will be used for quoting'
  1208.           sTrng     'control characters.  Legal values are 041 through 0176.'
  1209.           sTrng     'There is normally no reason not to use the default.'
  1210.           sTrng     'Since the quote character itself becomes a "control"'
  1211.           sTrng     'character, it is best if the quote character is'
  1212.           sTrng     'not a character that appears commonly in the text of'
  1213.           sTrng     'the file to be transferred.'
  1214.           +0
  1215. hLpsEtrCvsop.
  1216.           la,u      a0,3+$
  1217.           lmj       x11,pRipAr
  1218.           j         nExtcommand
  1219.           sTrng     'Tells the 1100 what character it should look'
  1220.           sTrng     'for as indicating'
  1221.           sTrng     'the first character of a valid packet.'
  1222.           sTrng     'Legal values are 01 through 037.'
  1223.           +0
  1224. hLpsEtrCvtIm.
  1225.           la,u      a0,3+$
  1226.           lmj       x11,pRipAr
  1227.           j         nExtcOmmand
  1228.           sTrng     'During initial file transfer negotiations the'
  1229.           sTrng     '1100 KERMIT (KER11>) will ask your local KERMIT'
  1230.           sTrng     'to wait this many seconds before assuming that '
  1231.           sTrng     'something has been lost.  Normally (very close to'
  1232.           sTrng     'always) the 1100 KERMIT alone is concerned with'
  1233.           sTrng     'timeouts and this parameter is therefore ignored.'
  1234.           +0
  1235. hLpsEtsNd.
  1236.           la,u      a0,cMdbUf
  1237.           la,u      a2,tOken
  1238.           la        a1,cMdiNdex
  1239.           lmj       x11,gEttOken
  1240.           sa        a1,cMdiNdex
  1241.           jp        a0,hLpsEtsNdpAr
  1242.           la,u      a0,3+$
  1243.           lmj       x11,pRipAr
  1244.           j         nExtcOmmand
  1245.           sTrng     'Legal parameters for the SET SEND command are:'
  1246.           sTrng     '     ENDOFLINE [octal number]       Default=015=CR'
  1247.           sTrng     '     PACKETLENGTH [decimal number]      Default=94'
  1248.           sTrng     '     PADDING [decimal number]   Default=0'
  1249.           sTrng     '     PADCHAR [octal number]     Default=0'
  1250.           sTrng     '     QUOTE [octal number]     Default=043=#'
  1251.           sTrng     '     STARTOFPACKET [octal number]      Default=':; . Gunnar
  1252.                     DEFSOPHELP                                          . Gunnar
  1253.           sTrng     '     TIMEOUT [# seconds]     Default=10'
  1254.           sTrng     'More information is available via: (for example)'
  1255.           strng     '     HELP SET SEND ENDOFLINE'
  1256.           +0
  1257. hLpsEtsNdpAr.
  1258.           la,u      a0,tOken
  1259.           lmj       x11,str$uPcAse
  1260.           la,u      a2,hLpsEtsNdtBl
  1261.           la,u      a1,tOken
  1262.           lmj       x11,cMdsRch
  1263.           jz        a2,lStsEtsNdpAr
  1264.           la        a0,0,a2
  1265.           j         0,a0
  1266. lStsEtsNdpAr. .lIst lEgal sEnd pArameters
  1267.           la,u      a0,3+$
  1268.           lmj       x11,pRipAr
  1269.           j         nExtcOmmand
  1270.           sTrng     'The legal send parameters that you can set are:'
  1271.           sTrng     '   ENDOFLINE'
  1272.           sTrng     '   PACKETLENGTH'
  1273.           sTrng     '   PADDING'
  1274.           sTrng     '   PADCHAR'
  1275.           sTRng     '   QUOTE'
  1276.           sTrng     '   STARTOFPACKET'
  1277.           sTrng     '   TIMEOUT'
  1278.           +0
  1279. hLpsEtsNdtBl.
  1280.           +hLpsEtsNdeol
  1281.           sTrng     'ENDOFLINE'
  1282.           +hLpsEtsNdpl
  1283.           sTrng     'PACKETLENGTH'
  1284.           +hLpsEtsNdpAd
  1285.           sTrng     'PADCHAR'
  1286.           +hLpsEtsNdpnM
  1287.           sTrng     'PADDING'
  1288.           +hLpsEtsNdqUo
  1289.           sTrng     'QUOTE'
  1290.           +hLpsEtsNdsoh
  1291.           sTrng     'STARTOFPACKET'
  1292.           +hLpsEtsNdtIm
  1293.           sTrng     'TIMEOUT'
  1294.           +0
  1295. hLpsEtsNdeol.
  1296.           la,u      a0,3+$
  1297.           lmj       x11,pRipAr
  1298.           j         nExtcOmmand
  1299.           sTrng     'Tells the 1100 what character should be appended to'
  1300.           sTrng     'the end of each packet it sends.  Many micro-computers'
  1301.           sTrng     'are able to examine each character as it is received'
  1302.           sTrng     'and do not need any special character to indicate'
  1303.           sTrng     'that a line is complete.  Others may require that'
  1304.           sTrng     'each line be terminated with (for example) a'
  1305.           sTrng     'carriage return.  Carriage return (015) is default.'
  1306.           +0
  1307. hLpsEtsNdpl.
  1308.           la,u      a0,3+$
  1309.           lmj       x11,pRipAr
  1310.           j         nExtcOmmand
  1311.           sTrng     'The maximum packet size the 1100 should send.'
  1312.           sTrng     'Legal values are 10 through 96. Default is 94.'
  1313.           +0
  1314. hLpsEtsNdpAd.
  1315.           la,u      a0,3+$
  1316.           lmj       x11,pRipAr
  1317.           j         nExtcOmmand
  1318.           sTrng     'What padding character to use to fill some time between'
  1319.           sTrng     'lines.  Legal values are 01 through 037.  No case has'
  1320.           sTrng     'yet been found where any padding character is needed.'
  1321.           +0
  1322. hLpsEtsNdpnM.
  1323.           la,u      a0,3+$
  1324.           lmj       x11,pRipAr
  1325.           j         nExtcOmmand
  1326.           sTrng     'The number of pad characters needed to fill time'
  1327.           sTrng     'between lines. Default is 0 and no case yet found'
  1328.           sTrng     'requires more.'
  1329.           +0
  1330. hLpsEtsNdqUo.
  1331.           la,u      a0,3+$
  1332.           lmj       x11,pRipAr
  1333.           j         nExtcOmmand
  1334.           sTrng     'The printable character (041 through 0176, default 043)'
  1335.           sTrng     'that should be used to quote control characters'
  1336.           sTrng     'sent from the 1100.  Since the quote character must'
  1337.           sTrng     'itself be quoted it should not be a character that'
  1338.           sTrng     'appears too often in the file being transferred.'
  1339.           sTrng     'The default (#) should be OK except in very rare cases.'
  1340.           +0
  1341. hLpsEtsNdsoh.
  1342.           la,u      a0,3+$
  1343.           lmj       x11,pRipAr
  1344.           j         nExtcOmmand
  1345.           sTrng     'Tells what character the 1100 should put at the front'
  1346.           sTrng     'of each packet to indicate the beginning of valid data.'
  1347.           sTrng     'It is absolutely necessary that both computers agree'
  1348.           sTrng     'on what character will be used since otherwise the'
  1349.           sTrng     'the receiving computer will never see any valid data.'
  1350.           +0
  1351. hLpsETsNdtIm.
  1352.           la,u      a0,3+$
  1353.           lmj       x11,pRipAr
  1354.           j         nExtcOmmand
  1355.           sTrng     'The maximum number of seconds the 1100 should wait for'
  1356.           sTrng     'a packet or a reply to a packet.  After this'
  1357.           sTrng     'amount of time KER11> will assume that something'
  1358.           sTrng     'has been lost and will repeat the latest'
  1359.           sTrng     'operation.'
  1360.           sTrng     'Legal values are 01 through 99.  The default of 10'
  1361.           sTrng     'seconds should be adequate except at very low'
  1362.           sTrng     'baud rates.'
  1363.           sTrng     'The default value can be overridden during'
  1364.           sTrng     'initial negotiations with your local computer.'
  1365.           sTrng     'Any value except the default value is firm'
  1366.           sTrng     'and non-negotiable.'
  1367.           +0
  1368. hLpxIt.
  1369.           la,u      a0,3+$
  1370.           lmj       x11,pRipAr
  1371.           j         nExtcOmmand
  1372.           sTrng     'EXIT and QUIT cause this program to stop'
  1373.           +0
  1374. hLprCv.
  1375.           la,u      a0,3+$
  1376.           lmj       x11,pRipAr
  1377.           j         nExtcOmmand
  1378.           sTrng     'RECEIVE causes the 1100 to begin receiving an'
  1379.           sTrng     'element into the file specified on the'
  1380.           sTrng     'most recent SET FILE command.  The name of the'
  1381.           sTrng     'element will be specified in the file header'
  1382.           sTrng     'sent by your micro ahead of the data and will'
  1383.           sTrng     'be the same as the name of the file on your'
  1384.           sTrng     'micro except that illegal characters will'
  1385.           sTrng     'be changed to dollar signs.'
  1386.           +0
  1387. hLpsNd.
  1388.           la,u      a0,3+$
  1389.           lmj       x11,pRipAr
  1390.           j         nExtcOmmand
  1391.           sTrng     '     SEND   elementname[/version]'
  1392.           sTrng     'SEND causes the 1100 to begin sending an element from'
  1393.           STRNG     'the default file.  Wildcards may be used as part of'
  1394.           STRNG     'the ELEMENT/VERSION specification (I.E. SEND */*).'
  1395.           sTrng     'The character * can stand for any number'
  1396.           sTrng     'of characters (including zero) and the '
  1397.           sTrng     'character % can stand for any single character.'
  1398.           STRNG     'A file must have been set via the SET FILE command'
  1399.           STRNG     'before the send is allowed.'
  1400.           +0
  1401. hLpsHo.
  1402.           la,u      a0,3+$
  1403.           lmj       x11,pRipAr
  1404.           j         nExtcOmmand
  1405.           sTrng     'Use the SHOW command to examine the current values'
  1406.           sTrng     'of file transfer parameters.  You can change'
  1407.           sTrng     'these values by using the SET command'
  1408.           sTrng     'You can examine a subset of these values:'
  1409.           sTrng     '   SHOW GLOBAL    display global values'
  1410.           sTrng     '   SHOW RECEIVE   display file receive values'
  1411.           sTrng     '   SHOW SEND      display file send values'
  1412.           +0
  1413. /.
  1414. sEt.
  1415.           la,u      a0,cMdbUf
  1416.           la,u      a2,tOken
  1417.           la        a1,cMdiNdex
  1418.           lmj       x11,gEttOken
  1419.           sa        a1,cMdiNdex
  1420.           jn        a0,lStsEtpar
  1421.           la,u      a0,tOken
  1422.           lmj       x11,sTr$uPcAse
  1423.           la,u      a1,tOken
  1424.           la,u      a2,sEtlIst
  1425.           lmj       x11,cMdsRch
  1426.           jz        a2,lStsEtpar
  1427.           la        a0,0,a2
  1428.           j         0,a0
  1429. sEtlIst.
  1430.           +sEteRr
  1431.           sTrng     'ERROR'
  1432.           +sEtdLy
  1433.           sTrng     'DELAY'
  1434.           +SETWLD
  1435.           STRNG     'MAXWILD'
  1436.           +sEtpRt
  1437.           sTrng     'PARITY'
  1438.           +sEtdBg
  1439.           sTrng     'DEBUG'
  1440.           +sEtrCv
  1441.           sTrng     'RECEIVE'
  1442.           +sEtsNd
  1443.           sTrng     'SEND'
  1444.           +sEtfIl
  1445.           sTrng     'FILENAME'
  1446.           +sEttYp
  1447.           sTrng     'TYPE'
  1448.           +sEtcOntinue
  1449.           sTrng     'CONTINUATION'
  1450.           +sEtlEngth
  1451.           sTrng     'LENGTH'
  1452.           +SETDUMPF
  1453.           STRNG     'DUMPFORMAT'
  1454.           +sEtwIdth
  1455.           sTrng     'WIDTH'
  1456.           +sEtrEpeat
  1457.           sTrng     'REPEAT'
  1458.           +sEtqUote8
  1459.           sTrng     'QUOTE8'
  1460.           +0
  1461. sEteRr.
  1462.           la        a0,eRrpRob+1
  1463.           sa        a0,sEed+1
  1464.           la,u      a0,eRrpRob
  1465.           j         sEtdEc
  1466. sEtwIdth.
  1467.           la,u      a0,wIdth
  1468.           j         sEtdEc
  1469. sEtrEpeat.
  1470.           la,u      a0,cMdbUf
  1471.           la,u      a2,tOken
  1472.           la        a1,cMdiNdex
  1473.           lmj       x11,gEttOken
  1474.           sa        a1,cMdiNdex
  1475.           jp        a0,sEtrEpeata
  1476.           la,u      a0,rEpeat
  1477.           j         sEtbcddEf
  1478. sEtrEpeata.
  1479.           la,u      a0,rEpeat
  1480.           j         sEtbcd
  1481. sEtqUote8.
  1482.           la,u      a0,cMdbUf
  1483.           la,u      a2,tOken
  1484.           la        a1,cMdiNdex
  1485.           lmj       x11,gEttOken
  1486.           sa        a1,cMdiNdex
  1487.           jp        a0,sEtqUote8a
  1488.           la,u      a0,qUote8
  1489.           j         sEtbcddEf
  1490. sEtqUote8a.
  1491.           la,u      a0,qUote8
  1492.           j         sEtbcd
  1493. sEtlEngth.
  1494.           la,u      a0,lEngth
  1495.           j         sEtdEc
  1496. sEtcOntinue.
  1497.           la,u      a0,cOntinue
  1498.           j         sEtoCt
  1499. sEttYp.
  1500.           la,u      a0,cMdbUf
  1501.           la,u      a2,tOken
  1502.           la        a1,cMdiNdex
  1503.           lmj       x11,gEttOken
  1504.           sa        a1,cMdiNdex
  1505.           jp        a0,sEttYpa
  1506.           la,u      a0,tYpe
  1507.           j         sEtbcddEf
  1508. sEttYpa.
  1509.           la,u      a0,tYpe
  1510.           j         sEtbcd
  1511. sEtfIl.
  1512.           la,u      a0,cMdbUf
  1513.           la,u      a2,tOken
  1514.           la        a1,cMdiNdex
  1515.           lmj       x11,gEttOken
  1516.           sa        a1,cMdiNdex
  1517.           jn        a0,sEtfilea
  1518. .         LA,U      A0,FREESTR+1        . FREE THE OLD KERMIT FILE
  1519. .         ER        ACSF$
  1520. . I dOn't lIke tO fRee tHe oLd fIle...iT wOuld bE aLl rIght
  1521. . iF wE kNew tHat iT wAs nOt aSsigned iNitially.  SOme dAy
  1522. . wE cAn fIx tHis uP bUt uNtil tHen lEt uS nOt fRee TPF$.
  1523.           sz,h2     fIlenAme
  1524.           la,u      a0,fIlenAme
  1525.           la,u      a1,tOken
  1526.           lmj       x11,cOncat
  1527.           lmj       x11,dOuSe
  1528.           j         nExtcOmmand
  1529. sEtfIlea.
  1530.           la,u      a0,3+$
  1531.           lmj       x11,pRipAr
  1532.           j         nExtcOmmand
  1533.           sTrng     'There is no default file.  You must specify'
  1534.           sTrng     'a file name on the SET FILE command.'
  1535.           +0
  1536. dUmp.
  1537.           tz        dfok
  1538.           j         5+$
  1539.           la,u      a0,dUmpfIlaSg
  1540.           er        csf$
  1541.           lxm,u     a0,1
  1542.           sa        a0,dfok
  1543.           tn        dfok
  1544.           j         dUmpfIlok
  1545.           sz        dfok
  1546.           la,u      a0,3+$
  1547.           lmj       x11,pRipAr
  1548.           j         nExtcOmmand
  1549.           sTrng     'No debug file is assigned.'
  1550.           +0
  1551. dUmpfIlok.
  1552.           la,u      a1,1
  1553.           sa        a1,dUmpnUm
  1554.           la        a1,cMdiNdex
  1555.           la,u      a0,cMdbUf
  1556.           la,u      a2,tOken
  1557.           lmj       x11,gEttOken
  1558.           sa        a1,cMdiNdex
  1559.           jn        a0,dUmp1
  1560.           la,u      a0,tOken
  1561.           la,u      a1,10
  1562.           lmj       x11,cVtascbIn
  1563.           j         nExtcOmmand
  1564.           sa        a0,dUmplIne
  1565.           la        a1,cMdiNdex
  1566.           la,u      a2,tOken
  1567.           la,u      a0,cMdbUf
  1568.           lmj       x11,gEttOken
  1569.           jn        a0,dUmp1
  1570.           la,u      a0,tOken
  1571.           la,u      a1,10
  1572.           lmj       x11,cVtascbIn
  1573.           j         nExtcOmmand
  1574.           sa        a0,dUmpnUm
  1575. dump1.
  1576.           la        a0,dUmpnUm
  1577.           ana,u     a0,1
  1578.           jn        a0,nExtcOmmand
  1579.           sa        a0,dUmpnUm
  1580.           la        a0,dUmplIne
  1581.           au,u      a0,1
  1582.           sa        a1,dUmplIne
  1583.           msi,u     a0,2                . 2 sectors per line
  1584.           sa        a0,5+dUmpKt
  1585.           la,u      a0,dUmpKt
  1586.           er        iow$
  1587.           tz,s1     3,a0
  1588.           j         dUmpeRr
  1589.           la,h2     a0,55+dEbugbUff
  1590.           lmj       x11,tImetOasc
  1591.           la,u      a0,pRlIne
  1592.           la,u      a1,qUoteri
  1593.           tz        54+dEbugbUff
  1594.           la,u      a1,qUotero
  1595.           sz,h2     0,a0
  1596.           lmj       x11,cOncat
  1597.           la,u      a1,asctIm
  1598.           lmj       x11,cOncat
  1599.           la,u      a1,10
  1600.           lmj       x11,tAb
  1601.           la,u      a3,4
  1602.           la,q2     a4,dEbugbUff+1
  1603.           ana,u     a4,036
  1604.           tz        54+dEbugbUff
  1605.           j         5+$
  1606.           la,q2     a4,dEbugbUff
  1607.           ana,u     a4,040
  1608.           la,u      a3,0
  1609.           aa,u      a4,2
  1610.           tg,u      a4,120
  1611.           la,u      a4,120
  1612.           lr        r3,a4               . # bYtes tO dUmp
  1613.           lr,u      r1,17               . # sPaces lEft oN lIne
  1614. dUmp2.
  1615.           jgd       r3,2+$
  1616.           j         dUmp4
  1617.           jgd       r1,dUmp3
  1618.           la,u      a0,pRlIne
  1619.           lmj       x11,pRintsTring
  1620.           sz,h2     0,a0
  1621.           la,u      a1,10
  1622.           lmj       x11,tAb
  1623.           lr,u      r1,16
  1624. dUmp3.
  1625.           la,u      a1,dEbugbUff
  1626.           ex        lOads,a3
  1627.           aa,u      a3,1
  1628.           la,u      a1,3
  1629.           PUSH      A0
  1630.           LA        A0,DUMPFMT+1
  1631.           AA,U      A0,2
  1632.           LA        A0,0,A0
  1633.           LA,U      A2,8
  1634.           TNE       A0,('DEC ')
  1635.           LA,U      A2,10
  1636.           tne       a0,('HEX ')
  1637.           la,u      a2,16
  1638.           tne       a0,('HEX ')
  1639.           la,u      a1,2
  1640.           POP       A0
  1641.           lmj       x11,bInasc
  1642.           la,u      a0,pRlIne
  1643.           la,u      a1,bInascrSlt
  1644.           lmj       x11,cOncat
  1645.           la,u      a1,qUotersPace
  1646.           lmj       x11,cOncat
  1647.           j         dUmp2
  1648. dump4.
  1649.           la,u      a0,pRlIne
  1650.           lmj       x11,pRintsTring
  1651.           j         dUmp1
  1652. dUmpeRr.
  1653.           la,u      a0,3+$
  1654.           lmj       x11,pRipAr
  1655.           j         nExtcOmmand
  1656.           sTrng     'i/o eRror rEading dEbug fIle'
  1657.           +0
  1658. qUotersPace.
  1659.           sTrng     ' '
  1660. qUoteri   sTrng     'I '
  1661. qUotero   sTrng     'O '
  1662. .
  1663. eRror. pRint cOllected eRror mEssages
  1664.           lmj       x11,eRrpRnt
  1665.           j         nExtcOmmand
  1666. tImetOasc.  a0=# sEconds sInce mIdnIght
  1667. . 6 dIgit ascii sTring aVailable aT asctIm
  1668.           pUsh      x11,a0,a1,a2,r1
  1669.           dsl       a0,36
  1670.           di,u      a0,60
  1671.           pUsh      a1
  1672.           dsl       a0,36
  1673.           di,u      a0,60
  1674.           pUsh      a1
  1675.           pUsh      a0
  1676.           lr,u      r1,2
  1677.           sz,h2     asctIm
  1678. tImetOascl.
  1679.           pOp       a0
  1680.           la,u      a1,2
  1681.           la,u      a2,10
  1682.           lmj       x11,bInasc
  1683.           la,u      a0,asctIm
  1684.           la,u      a1,bInascrSlt
  1685.           lmj       x11,cOncat
  1686.           jgd       r1,tImetOascl
  1687.           pOp       r1,a2,a1,a0,x11
  1688.           j         0,x11
  1689. sEtdBg.
  1690.           sz        dEbUgiopKt+5
  1691.           la,u      a0,dEbUg
  1692.           j         sEtdEc
  1693. sEtdLy.
  1694.           la,u      a0,cMdbUf
  1695.           la,u      a2,tOken
  1696.           la        a1,cMdiNdex
  1697.           lmj       x11,gEttOken
  1698.           sa        a1,cMdiNdex
  1699.           jp        a0,sEtdLya
  1700. sEtdLyeR.
  1701.           la,u      a0,3+$
  1702. sEtdLyeRr.
  1703.           lmj       x11,pRipAr
  1704.           j         nExtcOmmand
  1705.           sTrng     'You must supply an integer number of seconds'
  1706.           sTrng     'bEtween 1 and 99.'
  1707.           +0
  1708. sEtdLya.
  1709.           la,u      a0,tOken
  1710.           la,u      a1,10
  1711.           lmj       x11,cVtascbIn
  1712.           j         sEtdLyeRr
  1713.           tg,u      a0,1
  1714.           tg,u      a0,100
  1715.           j         sEtdLyeR
  1716.           sa        a0,dElay+1
  1717.           j         nExtcOmmand
  1718. SETWLD.
  1719.           LA,U      A0,CMDBUF
  1720.           LA,U      A2,TOKEN
  1721.           LA        A1,CMDINDEX
  1722.           LMJ       X11,GETTOKEN
  1723.           SA        A1,CMDINDEX
  1724.           JP        A0,SETWLDA
  1725. SETWLDER.
  1726.           LA,U      A0,3+$
  1727. SETWLDERR.
  1728.           LMJ       X11,PRIPAR
  1729.           J         NEXTCOMMAND
  1730.           STRNG     'You must supply an integer number of elements'
  1731.           STRNG     'between 1 and 99.'
  1732.           +0
  1733. SETWLDA.
  1734.           LA,U      A0,TOKEN
  1735.           LA,U      A1,10
  1736.           LMJ       X11,CVTASCBIN
  1737.           J         SETWLDERR
  1738.           TG,U      A0,1
  1739.           TG,U      A0,100
  1740.           J         SETWLDER
  1741.           SA        A0,MAXWILD+1
  1742.           J         NEXTCOMMAND
  1743. sEtpRt.
  1744.           la,u      a0,cMdbUf
  1745.           la,u      a2,tOken
  1746.           la        a1,cMdiNdex
  1747.           lmj       x11,gEttOken
  1748.           sa        a1,cMdiNdex
  1749.           jp        a0,sEtpRta
  1750.           la,u      a0,pArity
  1751.           j         sEtbcddEf
  1752. sEtpRta.
  1753.           la,u      a0,pArity
  1754.           j         sEtbcd
  1755. SETDUMPF.
  1756.           LA,U      A0,CMDBUF
  1757.           LA,U      A2,TOKEN
  1758.           LA        A1,CMDINDEX
  1759.           LMJ       X11,GETTOKEN
  1760.           SA        A1,CMDINDEX
  1761.           JP        A0,SETDUMPFA
  1762.           LA,U      A0,DUMPFMT
  1763.           J         SETBCDDEF
  1764. SETDUMPFA.
  1765.           LA,U      A0,DUMPFMT
  1766.           J         SETBCD
  1767. sEtbcddEf. sEt bcd vAriable (a0) tO iTs dEfault vAlue.
  1768.           la,h1     a1,2,a0
  1769.           aa,u      a1,3
  1770.           ssl       a1,2
  1771.           aa,u      a1,3,a0
  1772.           sa        a1,1,a0
  1773.           pUsh      a0
  1774.           la,u      a0,dEfmSg
  1775.           lmj       x11,pRipAr
  1776.           pOp       a0
  1777.           lmj       x11,pRivAr
  1778.           j         nExtcOmmand
  1779. dEfmSg.
  1780.           sTrng     'Variable has been set to it''s default value.'
  1781.           +0
  1782. sEtbCd. sEt bcd vAriable (a0) tO vAlue sPecified iN tOken.
  1783.           . iF iLlegal vAlue tHen pRint mEssage.
  1784.           la,h1     a2,2,a0
  1785.           aa,u      a2,3
  1786.           ssl       a2,2
  1787.           aa,u      a2,3,a0
  1788.           pUsh      a0
  1789.           la,u      a0,tOken
  1790.           lmj       x11,sTr$uPcAse
  1791.           pOp       a0
  1792.           la,u      a1,tOken
  1793.           lmj       x11,cMdsRch
  1794.           jz        a2,sEtbcda
  1795.           sa        a2,1,a0
  1796.           j         nExtcOmmand
  1797. sEtbcda.
  1798.           la,u      a0,sEtbcdm
  1799.           lmj       x11,pRipAr
  1800.           j         nExtcOmmand
  1801. sEtbcdm.
  1802.           sTrng     'Illegal value specified for a variable.   Use'
  1803.           sTrng     'the HELP command to see what the legal values are.'
  1804.           +0
  1805. sEtdEc. sEt dEcimal vAriable (a0).
  1806. . iF iLlegal pRint a mEssage.
  1807. . iF mIssing sEt tO dEfault aNd pRint mEssage.
  1808. . eXit tO nExtcOmmand
  1809.           la,u      a3,0,a0
  1810.           la,u      a0,cMdbUf
  1811.           la,u      a2,tOken
  1812.           la        a1,cMdiNdex
  1813.           lmj       x11,gEttOken
  1814.           sa        a1,cMdiNdex
  1815.           jp        a0,sEtdEca
  1816.           la,u      a0,0,a3
  1817.           lmj       x11,sEtdEcdEf
  1818.           la,u      a0,dEfmSg
  1819.           lmj       x11,pRipAr
  1820.           j         nExtcOmmand
  1821. sEtdEca.
  1822.           la,u      a0,tOken
  1823.           la,u      a1,10               . dEcimal
  1824.           lmj       x11,cVtascbIn
  1825.           j         sEtdEciLla          . eRror
  1826.           la,h1     a1,2,a3
  1827.           aa,u      a1,3
  1828.           ssl       a1,2
  1829.           aa,u      a1,0,a3
  1830.           te        a0,4,a1
  1831.           tle       a0,4,a1
  1832.           tz,u      0
  1833.           j         sEtdEciLl
  1834.           tle       a0,3,a1
  1835.           j         sEtdEciLl
  1836.           sa        a0,1,a3
  1837.           j         nExtcOmmand
  1838. sEtdEciLl.
  1839.           la,u      a0,3+$
  1840. sEtdEciLla.
  1841.           lmj       x11,pRipAr
  1842.           j         nExtcOmmand
  1843.           sTrng     'Illegal value for decimal parameter'
  1844.           +0
  1845. sEtoCt. sEt oCtal vAriable (a0).
  1846. . iF iLlegal pRint a mEssage.
  1847. . iF mIssing sEt tO dEfault aNd pRint mEssage.
  1848. . eXit tO nExtcOmmand
  1849.           la,u      a3,0,a0
  1850.           la,u      a0,cMdbUf
  1851.           la,u      a2,tOken
  1852.           la        a1,cMdiNdex
  1853.           lmj       x11,gEttOken
  1854.           sa        a1,cMdiNdex
  1855.           jp        a0,sEtoCTa
  1856.           la,u      a0,0,a3
  1857.           lmj       x11,sEtoCTdEf
  1858.           la,u      a0,dEfmSg
  1859.           lmj       x11,pRipAr
  1860.           j         nExtcOmmand
  1861. sEtoCTa.
  1862.           la,u      a0,tOken
  1863.           la,u      a1,8                . oCtal
  1864.           lmj       x11,cVtascbIn
  1865.           j         sEtoCtiLla          . eRror
  1866.           la,h1     a1,2,a3
  1867.           aa,u      a1,3
  1868.           ssl       a1,2
  1869.           aa,u      a1,0,a3
  1870.           te        a0,4,a1
  1871.           tle       a0,4,a1
  1872.           tz,u      0
  1873.           j         sEtoCtiLl
  1874.           tle       a0,3,a1
  1875.           j         sEtoCtiLl
  1876.           sa        a0,1,a3
  1877.           j         nExtcOmmand
  1878. sEtoCtiLl.
  1879.           la,u      a0,3+$
  1880. sEtoCtiLla.
  1881.           lmj       x11,pRipAr
  1882.           j         nExtcOmmand
  1883.           sTrng     'Illegal value for octal parameter'
  1884.           +0
  1885. sEtoCTdEf. a0=octal vAriable.    sEt iT tO iTs dEfault vAlue.
  1886.           pUsh      a1
  1887.           la,h1     a1,2,a0
  1888.           aa,u      a1,3
  1889.           ssl       a1,2
  1890.           aa,u      a1,0,a0
  1891.           la        a1,5,a1
  1892.           sa        a1,1,a0
  1893.           pOp       a1
  1894.           j         0,x11
  1895. sEtcNtrl. sEt cNtrl cHaracter vAriable
  1896. . iF iLlegal pRint mEssage
  1897. . iF mIssing sEt tO dEfault aNd pRint mEssage
  1898. . eXit tO nExtcOmmand
  1899.           la,u      a3,0,a0
  1900.           la,u      a0,cMdbUf
  1901.           la,u      a2,tOken
  1902.           la        a1,cMdiNdex
  1903.           lmj       x11,gEttOken
  1904.           sa        a1,cMdiNdex
  1905.           jp        a0,sEtcNtrla
  1906.           la,u      a0,0,a3
  1907.           lmj       x11,sEtcNtrldEf
  1908.           la,u      a0,dEfmSg
  1909.           lmj       x11,pRipaR
  1910.           j         nExtcOmmand
  1911. sEtcNtrla.
  1912.           la,u      a0,tOken
  1913.           la,u      a1,8
  1914.           lmj       x11,cVtascbIn       .
  1915.           j         nExtcOmmand         . eRror
  1916.           tle,u     a0,040
  1917.           j         3+$
  1918.           te,u      a0,0177
  1919.           j         sEtcNtrliLl
  1920.           sa        a0,1,a3
  1921.           j         nExtcOmmand
  1922. sEtcNtrliLl.
  1923.           la,u      a0,3+$
  1924.           lmj       x11,pRipAr
  1925.           j         nExtcOmmand
  1926.           sTrng     'Illegal character.  Must be a'
  1927.           sTrng     'control character  (0-037,0177)'
  1928.           +0
  1929. sEtcHr. sEt vAriable tO pRintable cHaracter.
  1930. . iF iLlegal pRint mEssage.
  1931. . iF mIssing tHe sEt tO dEfault aNd pRint mEssage.
  1932. . eXit tO nExtcOmmand
  1933.           la,u      a3,0,a0
  1934.           la,u      a0,cMdbUf
  1935.           la,u      a2,tOken
  1936.           la        a1,cMdiNdex
  1937.           lmj       x11,gEttOken
  1938.           sa        a1,cMdiNdex
  1939.           jp        a0,sEtcHra
  1940.           la,u      a0,0,a3
  1941.           lmj       x11,sEtcHrdEf
  1942.           la,u      a0,dEfmSg
  1943.           lmj       x11,pRipAr
  1944.           j         nExtcOmmand
  1945. sEtcHra.
  1946.           la,u      a0,tOken
  1947.           la,u      a1,8
  1948.           lmj       x11,cVtascbIn
  1949.           j         nExtcOmmand         . eRror
  1950.           tg,u      a0,040
  1951.           tg,u      a0,0177
  1952.           j         sEtcHriLl
  1953.           sa        a0,1,a3
  1954.           j         nExtcOmmand
  1955. sEtcHriLl.
  1956.           la,u      a0,3+$
  1957.           lmj       x11,pRipAr
  1958.           j         nExtcOmmand
  1959.           sTrng     'Illegal character....Must be a printable'
  1960.           sTrng     'character (040-0176).'
  1961.           +0
  1962. sEtrCv.
  1963.           la,u      a0,cMdbUf
  1964.           la,u      a2,tOken
  1965.           la        a1,cMdiNdex
  1966.           lmj       x11,gEttOken
  1967.           sa        a1,cMdiNdex
  1968.           jn        a0,lStsEtrCv
  1969.           la,u      a0,tOken
  1970.           lmj       x11,sTr$uPcAse
  1971.           la,u      a1,tOken
  1972.           la,u      a2,sEtrCvlSt
  1973.           lmj       x11,cMdsRch
  1974.           jz        a2,lStsEtrCv
  1975.           la        a0,0,a2
  1976.           j         0,a0
  1977. sEtrCvlSt.
  1978.           +sEtrCvpAklEn
  1979.           sTrng     'PACKETLENGTH'
  1980.           +sEtrCvpAd
  1981.           sTrng     'PADDING'
  1982.           +sEtrCvpAdcHr
  1983.           sTrng     'PADCHAR'
  1984.           +sEtrCvtImoUt
  1985.           sTrng     'TIMEOUT'
  1986.           +sEtrCvqUote
  1987.           sTrng     'QUOTE'
  1988.           +sEtrCveNdlIn
  1989.           sTrng     'ENDOFLINE'
  1990.           +sEtrCvsTart
  1991.           sTrng     'STARTOFPACKET'
  1992.           +0
  1993. lStsEtrCv.
  1994.           la,u      a0,3+$
  1995.           lmj       x11,pRipAr
  1996.           j         nExtcOmmand
  1997.           sTrng     'The legal receive parameter names are:'
  1998.           sTrng     '   PACKETLENGTH'
  1999.           sTrng     '   PADDING'
  2000.           sTrng     '   PADCHAR'
  2001.           sTrng     '   TIMEOUT'
  2002.           sTrng     '   QUOTE'
  2003.           sTrng     '   ENDOFLINE'
  2004.           sTrng     '   STARTOFPACKET'
  2005.           +0
  2006. sEtrCvpAklEn.
  2007.           la,u      a0,rpAklEn
  2008.           j         sEtdEc
  2009. sEtrCvpAd.
  2010.           la,u      a0,rpAd
  2011.           j         sEtdEc
  2012. sEtrCvpAdcHr.
  2013.           la,u      a0,rpAdcHr
  2014.           j         sEtcNtrl
  2015. sEtrCvtImoUt.
  2016.           la,u      a0,rtImoUt
  2017.           j         sEtdEc
  2018. sEtrCvqUote.
  2019.           la,u      a0,rqUote
  2020.           j         sEtcHr
  2021. sEtrCveNdlIn.
  2022.           la,u      a0,reNdlIn
  2023.           j         sEtcNtrl
  2024. sEtrCvsTart.
  2025.           la,u      a0,rsTart
  2026.           j         sEtcNtrl
  2027. sEtsNd.
  2028.           la,u      a0,cMdbUf
  2029.           la,u      a2,tOken
  2030.           la        a1,cMdiNdex
  2031.           lmj       x11,gEttOken
  2032.           sa        a1,cMdiNdex
  2033.           jn        a0,lStsEtsNd
  2034.           la,u      a0,tOken
  2035.           lmj       x11,sTr$uPcAse
  2036.           la,u      a1,tOken
  2037.           la,u      a2,sEtsNdlSt
  2038.           lmj       x11,cMdsRch
  2039.           jz        a2,lStsEtsNd
  2040.           la        a0,0,a2
  2041.           j         0,a0
  2042. sEtsNdlSt.
  2043.           +sEtsNdpAklEn
  2044.           sTrng     'PACKETLENGTH'
  2045.           +sEtsNdpAd
  2046.           sTrng     'PADDING'
  2047.           +sEtsNdpAdcHr
  2048.           sTrng     'PADCHAR'
  2049.           +sEtsNdtImoUt
  2050.           sTrng     'TIMEOUT'
  2051.           +sEtsNdqUote
  2052.           sTrng     'QUOTE'
  2053.           +sEtsNdeNdlIn
  2054.           sTrng     'ENDOFLINE'
  2055.           +sEtsNdsTart
  2056.           sTrng     'STARTOFPACKET'
  2057.           +0
  2058. lStsEtsNd.
  2059.           la,u      a0,3+$
  2060.           lmj       x11,pRipAr
  2061.           j         nExtcOmmand
  2062.           sTrng     'The legal SEND parameter names are:'
  2063.           sTrng     '   PACKETLENGTH'
  2064.           sTrng     '   PADDING'
  2065.           sTrng     '   PADCHAR'
  2066.           sTrng     '   TIMEOUT'
  2067.           sTrng     '   QUOTE'
  2068.           sTrng     '   ENDOFLINE'
  2069.           sTrng     '   STARTOFPACKET'
  2070.           +0
  2071. sEtsNdpAklEn.
  2072.           la,u      a0,spAklEn
  2073.           j         sEtdEc
  2074. sEtsNdpAd.
  2075.           la,u      a0,spAd
  2076.           j         sEtdEc
  2077. sEtsNdpAdcHr.
  2078.           la,u      a0,spAdcHr
  2079.           j         sEtcNtrl
  2080. sEtsNdtImoUt.
  2081.           la,u      a0,stImoUt
  2082.           j         sEtdEc
  2083. sEtsNdqUote.
  2084.           la,u      a0,sqUote
  2085.           j         sEtcHr
  2086. sEtsNdeNdlIn.
  2087.           la,u      a0,seNdlIn
  2088.           j         sEtcNtrl
  2089. sEtsNdsTart.
  2090.           la,u      a0,ssTart
  2091.           j         sEtcNtrl
  2092. /.
  2093. sHow.
  2094.           LA        A1,CMDINDEX
  2095.           LA,U      A2,TOKEN
  2096.           LA,U      A0,CMDBUF
  2097.           LMJ       X11,GETTOKEN        . SEE IF COMMAND NAME GIVEN
  2098.           SA        A1,CMDINDEX
  2099.           JN        A0,SHOWNSCH
  2100. SHOWCMD.
  2101.           LA,U      A0,TOKEN
  2102.           LMJ       X11,STR$UPCASE
  2103.           LA,U      A2,SHOWTBL
  2104.           LA,U      A1,TOKEN
  2105.           LMJ       X11,CMDSRCH
  2106.           JZ        A2,SHOWNSCH
  2107.           LA        A0,0,A2
  2108.           J         0,A0
  2109. SHOWNSCH.
  2110.           LA,U      A0,3+$
  2111.           LMJ       X11,PRIPAR
  2112.           J         NEXTCOMMAND
  2113.           STRNG     'LEGAL SHOW TOPICS ARE:'
  2114.           STRNG     '   ALL      - Show all     parameters'
  2115.           STRNG     '   GLOBAL   - Show global  parameters'
  2116.           STRNG     '   SEND     - Show send    parameters'
  2117.           STRNG     '   RECEIVE  - Show receive parameters'
  2118.           STRNG     '   The name of an individual global parameter'
  2119.           +0
  2120. SHOWTBL.
  2121.           +SHWALL
  2122.           STRNG     'ALL'
  2123.           +SHWGBL
  2124.           STRNG     'GLOBAL'
  2125.           +SHWSEND
  2126.           STRNG     'SEND'
  2127.           +SHWRCV
  2128.           STRNG     'RECEIVE'
  2129.           +SHWDBG
  2130.           STRNG     'DEBUG'
  2131.           +SHWDUMP
  2132.           STRNG     'DUMPFORMAT'
  2133.           +SHWDLY
  2134.           STRNG     'DELAY'
  2135.           +SHWWLD
  2136.           STRNG     'MAXWILD'
  2137.           +SHWPRT
  2138.           STRNG     'PARITY'
  2139.           +SHWLEN
  2140.           STRNG     'LENGTH'
  2141.           +SHWFILE
  2142.           STRNG     'FILE'
  2143.           +SHWCONT
  2144.           STRNG     'CONTINUATION'
  2145.           +SHWTYP
  2146.           STRNG     'TYPE'
  2147.           +SHWSEED
  2148.           STRNG     'SEED'
  2149.           +SHWPROB
  2150.           STRNG     'ERRORPROB'
  2151.           +0
  2152. SHWALL.
  2153.           la,u      a0,sHgLblmSg
  2154.           lmj       x11,pRipAr
  2155.           la,u      a0,dElay
  2156.           lmj       x11,pRivAr
  2157.           LA,U      A0,MAXWILD
  2158.           LMJ       X11,PRIVAR
  2159.           la,u      a0,parity
  2160.           lmj       x11,pRivAr
  2161.           la,u      a0,tYpe
  2162.           lmj       x11,pRivAr
  2163.           la,u      a0,lEngth
  2164.           lmj       x11,pRivAr
  2165.           la,u      a0,cOntinue
  2166.           lmj       x11,pRivAr
  2167.           la,u      a0,wIdth
  2168.           lmj       x11,pRivAr
  2169.           la,u      a0,rEpeat
  2170.           lmj       x11,pRivAr
  2171.           la,u      a0,qUote8
  2172.           lmj       x11,pRivar
  2173.           la,u      a0,dEbUg
  2174.           lmj       x11,pRivAr
  2175.           LA,U      A0,DUMPFMT
  2176.           LMJ       X11,PRIVAR
  2177.           la,u      a0,sEed
  2178.           lmj       x11,pRivAr
  2179.           la,u      a0,eRrpRob
  2180.           lmj       x11,pRivAr
  2181.           sz,h2     pRlIne
  2182.           la,u      a0,pRlIne
  2183.           la,u      a1,fIlemSg.
  2184.           lmj       x11,cOncat
  2185.           la,u      a1,vAlcOl
  2186.           lmj       x11,tAb
  2187.           la,u      a1,fIlenAme
  2188.           lmj       x11,cOncat
  2189.           lxi,u     a0,1
  2190.           lmj       x11,pRintsTring
  2191.           la,u      a0,sHsNdmSg
  2192.           lmj       x11,pRipAr
  2193.           la,u      a0,spAklEn
  2194.           lmj       x11,pRivAr
  2195.           la,u      a0,spAd
  2196.           lmj       x11,pRivAr
  2197.           la,u      a0,spAdcHr
  2198.           lmj       x11,pRivAr
  2199.           la,u      a0,stImoUt
  2200.           lmj       x11,pRivAr
  2201.           la,u      a0,sqUote
  2202.           lmj       x11,pRivAr
  2203.           la,u      a0,seNdlIn
  2204.           lmj       x11,pRivAr
  2205.           la,u      a0,rsTart
  2206.           lmj       x11,pRivAr
  2207.           la,u      a0,sHrCvmSg
  2208.           lmj       x11,pRipAr
  2209.           la,u      a0,rpAklEn
  2210.           lmj       x11,pRivAr
  2211.           la,u      a0,rpAd
  2212.           lmj       x11,pRivAr
  2213.           la,u      a0,rpAdcHr
  2214.           lmj       x11,pRivar
  2215.           la,u      a0,rtImoUt
  2216.           lmj       x11,pRivAr
  2217.           la,u      a0,rqUote
  2218.           lmj       x11,pRivAr
  2219.           la,u      a0,reNdlIn
  2220.           lmj       x11,pRivAr
  2221.           la,u      a0,ssTart
  2222.           lmj       x11,pRivAr
  2223.           j         nExtcOmmand
  2224. .
  2225. SHWGBL
  2226.           LA,U      A0,SHGLBLMSG
  2227.           LMJ       X11,PRIPAR
  2228.           LA,U      A0,DELAY
  2229.           LMJ       X11,PRIVAR
  2230.           LA,U      A0,MAXWILD
  2231.           LMJ       X11,PRIVAR
  2232.           LA,U      A0,PARITY
  2233.           LMJ       X11,PRIVAR
  2234.           LA,U      A0,TYPE
  2235.           LMJ       X11,PRIVAR
  2236.           LA,U      A0,LENGTH
  2237.           LMJ       X11,PRIVAR
  2238.           LA,U      A0,CONTINUE
  2239.           LMJ       X11,PRIVAR
  2240.           la,u      a0,wIdth
  2241.           lmj       x11,pRivAr
  2242.           la,u      a0,rEpeat
  2243.           lmj       x11,pRivAr
  2244.           la,u      a0,qUote8
  2245.           lmj       x11,pRivAr
  2246.           LA,U      A0,DEBUG
  2247.           LMJ       X11,PRIVAR
  2248.           LA,U      A0,DUMPFMT
  2249.           LMJ       X11,PRIVAR
  2250.           LA,U      A0,SEED
  2251.           LMJ       X11,PRIVAR
  2252.           LA,U      A0,ERRPROB
  2253.           LMJ       X11,PRIVAR
  2254.           SZ,H2     PRLINE
  2255.           LA,U      A0,PRLINE
  2256.           LA,U      A1,FILEMSG.
  2257.           LMJ       X11,CONCAT
  2258.           LA,U      A1,VALCOL
  2259.           LMJ       X11,TAB
  2260.           LA,U      A1,FILENAME
  2261.           LMJ       X11,CONCAT
  2262.           LXI,U     A0,1
  2263.           LMJ       X11,PRINTSTRING
  2264.           J         NEXTCOMMAND
  2265. .
  2266. SHWSEND
  2267.           LA,U      A0,SHSNDMSG
  2268.           LMJ       X11,PRIPAR
  2269.           LA,U      A0,SPAKLEN
  2270.           LMJ       X11,PRIVAR
  2271.           LA,U      A0,SPAD
  2272.           LMJ       X11,PRIVAR
  2273.           LA,U      A0,SPADCHR
  2274.           LMJ       X11,PRIVAR
  2275.           LA,U      A0,STIMOUT
  2276.           LMJ       X11,PRIVAR
  2277.           LA,U      A0,SQUOTE
  2278.           LMJ       X11,PRIVAR
  2279.           LA,U      A0,SENDLIN
  2280.           LMJ       X11,PRIVAR
  2281.           LA,U      A0,RSTART
  2282.           LMJ       X11,PRIVAR
  2283.           J         NEXTCOMMAND
  2284. .
  2285. SHWRCV
  2286.           LA,U      A0,SHRCVMSG
  2287.           LMJ       X11,PRIPAR
  2288.           LA,U      A0,RPAKLEN
  2289.           LMJ       X11,PRIVAR
  2290.           LA,U      A0,RPAD
  2291.           LMJ       X11,PRIVAR
  2292.           LA,U      A0,RPADCHR
  2293.           LMJ       X11,PRIVAR
  2294.           LA,U      A0,RTIMOUT
  2295.           LMJ       X11,PRIVAR
  2296.           LA,U      A0,RQUOTE
  2297.           LMJ       X11,PRIVAR
  2298.           LA,U      A0,RENDLIN
  2299.           LMJ       X11,PRIVAR
  2300.           LA,U      A0,SSTART
  2301.           LMJ       X11,PRIVAR
  2302.           J         NEXTCOMMAND
  2303. .
  2304. SHWDBG
  2305.           LA,U      A0,DEBUG
  2306.           LMJ       X11,PRIVAR
  2307.           J         NEXTCOMMAND
  2308. .
  2309. SHWDUMP
  2310.           LA,U      A0,DUMPFMT
  2311.           LMJ       X11,PRIVAR
  2312.           J         NEXTCOMMAND
  2313. .
  2314. SHWDLY
  2315.           LA,U      A0,DELAY
  2316.           LMJ       X11,PRIVAR
  2317.           J         NEXTCOMMAND
  2318. .
  2319. SHWWLD
  2320.           LA,U      A0,MAXWILD
  2321.           LMJ       X11,PRIVAR
  2322.           J         NEXTCOMMAND
  2323. .
  2324. SHWPRT
  2325.           LA,U      A0,PARITY
  2326.           LMJ       X11,PRIVAR
  2327.           J         NEXTCOMMAND
  2328. .
  2329. SHWFILE.
  2330.           SZ,H2     PRLINE
  2331.           LA,U      A0,PRLINE
  2332.           LA,U      A1,FILEMSG.
  2333.           LMJ       X11,CONCAT
  2334.           LA,U      A1,VALCOL
  2335.           LMJ       X11,TAB
  2336.           LA,U      A1,FILENAME
  2337.           LMJ       X11,CONCAT
  2338.           LXI,U     A0,1
  2339.           LMJ       X11,PRINTSTRING
  2340.           J         NEXTCOMMAND
  2341. .
  2342. SHWLEN
  2343.           LA,U      A0,LENGTH
  2344.           LMJ       X11,PRIVAR
  2345.           J         NEXTCOMMAND
  2346. .
  2347. SHWCONT
  2348.           LA,U      A0,CONTINUE
  2349.           LMJ       X11,PRIVAR
  2350.           J         NEXTCOMMAND
  2351. .
  2352. SHWTYP
  2353.           LA,U      A0,TYPE
  2354.           LMJ       X11,PRIVAR
  2355.           J         NEXTCOMMAND
  2356. .
  2357. SHWSEED
  2358.           LA,U      A0,SEED
  2359.           LMJ       X11,PRIVAR
  2360.           J         NEXTCOMMAND
  2361. .
  2362. SHWPROB
  2363.           LA,U      A0,ERRPROB
  2364.           LMJ       X11,PRIVAR
  2365.           J         NEXTCOMMAND
  2366. .
  2367. fIlemSg.
  2368.           sTrng     'FILENAME'
  2369. sHgLblmSg.
  2370.           sTrng     'Global Parameters'
  2371.           +0
  2372. sHsNdmSg.
  2373.           sTrng     'Send Parameters'
  2374.           +0
  2375. sHrCvmSg.
  2376.           sTrng     'Receive Parameters'
  2377.           +0
  2378. /.
  2379. sEnd.
  2380.           tz,s1     fiTempKt+6
  2381.           j         sEndfok
  2382.           la,u      a0,$+3
  2383.           lmj       x11,pRipAr
  2384.           j         nExtcOmmand
  2385.           sTrng     'Sorry, but you have not specified a file name.'
  2386.           sTrng     'You do it with a "SET FILE" command'
  2387.           +0
  2388. sEndfok.
  2389.           la,s2     a0,fiTempKt+6
  2390.           top,u     a0,2
  2391.           j         sEndrok
  2392.           la,u      a0,$+3
  2393.           lmj       x11,pRipAr
  2394.           j         nExtcOmmand
  2395.           sTrng     'Sorry, but your file is read inhibited'
  2396.           +0
  2397. sEndrok.
  2398.           sz        npAsses
  2399.           LA,U      A0,BSPFCT           . FILE TABLE INDEX
  2400.           LMJ       X11,RFTI$
  2401.           J         4+$
  2402.           LA,U      A0,BSPFCT
  2403.           LA        A1,(BSPBUF,1792)
  2404.           LMJ       X11,RPFET$
  2405.           j         sEndfeRr            .  DON'T ALLOW WILDCARDS
  2406.           la        a1,cMdiNdex
  2407.           la,u      a2,tOken
  2408.           la,u      a0,cMdbUf
  2409.           lmj       x11,gEttOken
  2410.           sa        a1,cMdiNdex
  2411.           jp        a0,sEndeLt
  2412.           la,u      a0,3+$
  2413.           lmj       x11,pRipAr
  2414.           j         nExtcOmmand
  2415.           sTrng     'You must specify an elementname on the send command.'
  2416.           +0
  2417. sEndfeRr. eRror oPening fIle iNdex
  2418.           la,u      a0,3+$
  2419.           lmj       x11,pRipAr
  2420.           j         nExtcOmmand
  2421.           sTrng     'Error opening file table of contents'
  2422.           +0
  2423. sEndeLt.
  2424.           fIeldAta
  2425.           dl        a4,('            ')
  2426.           ascii
  2427.           ds        a4,vErsionnAme
  2428.           la,u      a1,tOken
  2429.           la,u      a3,0
  2430.           lmj       x11,eXtrev
  2431.           jp        a0,$+3
  2432.           lmj       x11,pRipAr
  2433.           j         nExtcOmmand
  2434.           ds        a4,eLementnAme
  2435.           jz        a0,sEndsTrt
  2436.           TE,U      A0,'.'
  2437.           tne,u     a0,'/'
  2438.           j         sEndvEr
  2439.           la,u      a0,$+3
  2440.           lmj       x11,pRipAr
  2441.           j         nExtcOmmand
  2442.           sTrng     'Illegal character in element/version specification.'
  2443.           +0
  2444. sEndvEr.
  2445.           lmj       x11,eXtrev          . gEt vErsion nAme
  2446.           jp        a0,3+$
  2447.           lmj       x11,pRipAr
  2448.           j         nExtcOmmand
  2449.           ds        a4,vErsionnAme
  2450. sEndsTrt.
  2451.           dl        a4,eLementnAme
  2452.           ds        a4,wIldeLt
  2453.           dl        a4,vErsionnAme
  2454.           ds        a4,wIldvEr
  2455.           LMJ       X11,WILDCARDNAM     . GET A FILE NAME
  2456.           J         4+$                 . NO FIND IN THIS FILE
  2457.           J         NEXTCOMMAND         . END OF WILDCARD SEND
  2458.           lmj       x11,dOpfs
  2459.           jp        a0,sEndoPn
  2460.           la,u      a0,3+$
  2461.           lmj       x11,pRipAr
  2462.           j         nExtcOmmand
  2463.           sTrng     'There is no such symbolic element.'
  2464.           +0
  2465. sEndoPn.
  2466.           lmj       x11,cLreRrmSg
  2467.           lmj       x11,oPensOurce
  2468.           jn        a0,nExtcOmmand
  2469.           la        a0,dElay+1
  2470.           j         3+$
  2471.           la,u      a1,1000
  2472.           er        twAit$
  2473.           jgd       a0,-2+$
  2474.           lmj       x11,iNitialize
  2475.           lmj       x11,sEndsW
  2476.           la        a1,a0
  2477.           la,u      a0,scMpltmSg
  2478.           te,u      a1,tRue
  2479.           la,u      a0,sfLmSg
  2480.           lmj       x11,pRintsTring
  2481.           la        a1,a0
  2482.           la,u      a0,cMpltmSg
  2483.           sz,h2     0,a0
  2484.           lmj       x11,cOncAt
  2485.           lmj       x11,sHutdOwn
  2486.           j         nExtcOmmand
  2487. scMpltmSg.
  2488.           sTrng     'Send complete...'
  2489. sfLmSg.
  2490.           sTrng     'Send failure...'
  2491. /.
  2492. rEceive.
  2493.           tz,s1     fiTempKt+6
  2494.           j         rEceivefok
  2495.           la,u      a0,3+$
  2496.           lmj       x11,pRipAr
  2497.           j         nExtcOmmand
  2498.           sTrng     'Sorry, but you have not specified a file name.'
  2499.           sTrng     'You do it with a "SET FILE" command.'
  2500.           +0
  2501. rEceivefok.
  2502.           la,s2     a0,fiTempKt+6
  2503.           top,u     a0,4
  2504.           j         rEceivewok
  2505.           la,u      a0,3+$
  2506.           lmj       x11,pRipAr
  2507.           j         nExtcOmmand
  2508.           sTrng     'Sorry, but your file is write inhibited.'
  2509.           +0
  2510. rEceivewok.
  2511.           lmj       x11,cLreRrmSg
  2512.           LMJ       X11,INITIALIZE
  2513.           lmj       x11,rEcsW
  2514.           la        a1,a0
  2515.           la,u      a0,rcMpltmSg
  2516.           te,u      a1,tRue
  2517.           la,u      a0,rfLmSg
  2518.           lmj       x11,pRintsTring
  2519.           la        a1,a0
  2520.           la,u      a0,cMpltmSg
  2521.           sz,h2     0,a0
  2522.           lmj       x11,cOncAt
  2523.           LMJ       X11,SHUTDOWN
  2524.           j         nExtcOmmand
  2525. rcMpltmSg.
  2526.           sTrng     'Receive complete...'
  2527. rfLmSg.
  2528.           sTrng     'Receive failed...'
  2529. SERVER.
  2530.           TZ,S1     FITEMPKT+6
  2531.           J         SERVERFOK
  2532.           LA,U      A0,3+$
  2533.           LMJ       X11,PRIPAR
  2534.           J         NEXTCOMMAND
  2535.           STRNG     'Sorry, but you have not specified a file name.'
  2536.           STRNG     'You do it with a "SET FILE" command.'
  2537.           +0
  2538. SERVERFOK.
  2539.           LA,S2     A0,FITEMPKT+6
  2540.           TOP,U     A0,4
  2541.           J         SERVERWOK
  2542.           LA,U      A0,3+$
  2543.           LMJ       X11,PRIPAR
  2544.           J         NEXTCOMMAND
  2545.           STRNG     'Sorry, but your file is write inhibited.'
  2546.           +0
  2547. SERVERWOK.
  2548.           LA,S2     A0,FITEMPKT+6
  2549.           TOP,U     A0,2
  2550.           J         SERVERROK
  2551.           LA,U      A0,3+$
  2552.           LMJ       X11,PRIPAR
  2553.           J         NEXTCOMMAND
  2554.           STRNG     'Sorry, but your file is read inhibited.'
  2555.           +0
  2556. SERVERROK.
  2557.           LA,U      A0,BSPFCT           . FILE TABLE INDEX
  2558.           LMJ       X11,RFTI$
  2559.           J         4+$
  2560.           LA,U      A0,BSPFCT
  2561.           LA        A1,(BSPBUF,1792)
  2562.           LMJ       X11,RPFET$
  2563.           j         sEndfeRr
  2564.           LA,U      A0,3+$              . GIVE THE SONG AND DANCE ABOUT BEING
  2565.           LMJ       X11,PRIPAR          . IN SERVER MODE
  2566.           J         SERVERAOK           . GET ON IT
  2567.           STRNG     'KERMIT-11 is now in server mode, use the escape'
  2568.           STRNG     'sequence to return to the user KERMIT on the other'
  2569.           STRNG     'end of the connection.'
  2570.           STRNG     '    '
  2571.           +0
  2572. SERVERAOK.
  2573.           LMJ       X11,CLRERRMSG
  2574.           LMJ       X11,INITIALIZE
  2575.           LMJ       X11,SERVSW
  2576.           LA        A1,A0
  2577.           LA,U      A0,SVCPLTMSG
  2578.           TE,U      A1,TRUE
  2579.           LA,U      A0,SVFLMSG
  2580.           LMJ       X11,PRINTSTRING
  2581.           LMJ       X11,SHUTDOWN
  2582.           J         QUIT
  2583. SVCPLTMSG.
  2584.           STRNG     'Leaving server mode normally...'
  2585. SVFLMSG.
  2586.           STRNG     'Leaving server mode abnormally...'
  2587. /.
  2588. iNitialize.
  2589.           pUsh      x11,a0,a1
  2590.           LMJ       X11,SHUTDOWN        . SHUT IN DOWN
  2591.           tnz       tErminate
  2592.           j         4+$
  2593.           la,u      a0,1000
  2594.           er        twAit$
  2595.           j         -4+$
  2596. .
  2597. . sEt tHe cUrrent mOdes tO tHe vAlues sPecified vIa tHe sEt cOmmand (oR tO
  2598. . tHe dEfaults iF nO sEt cOmmand uSed).  iN a lIttle wHile wE wIll cArry
  2599. . oN sOme nEgotiations wIth tHe rEmote aNd iN sUbroutine rpAr(rEceive
  2600. . pArameters) wE mAy cHange tHese vAlues.
  2601.           la        a0,rqUote+1
  2602.           sa        a0,cUrrqUote
  2603.           la        a0,spAklEn+1
  2604.           sa        a0,cUrspAklEn
  2605.           la        a0,spAd+1
  2606.           sa        a0,cUrspAd
  2607.           la        a0,spAdcHr+1
  2608.           sa        a0,cUrspAdcHr
  2609.           la        a0,stimoUt+1
  2610.           sa        a0,cUrstimoUt
  2611.           la        a0,seNdlIn+1
  2612.           sa        a0,cUrseNdlIn
  2613.           la        a0,(+sEtmD1l,sEtmD1)
  2614.           IF        MDLFE                                               . Gunnar
  2615.           er        apRtcN$             . tHis fIrst pRint cOntrol pUshes
  2616.                                         . tHe cUrrent mOdes oNto a oNe dEep
  2617.                                         . sTack aNd sEts uP sOme oF tHe
  2618.                                         . rEquired nEw mOdes.  wHen fIle
  2619.                                         . tRansfer iS cOmplete wE wIll
  2620.                                         . pOp tHe oRiginal mOdes oFf tHe sTack.
  2621.           la,u      a1,500
  2622.           er        twAit$
  2623.           la,u      a0,pRlIne
  2624.           sz,h2     0,a0
  2625.           la,u      a1,sEtmD2
  2626.           lmj       x11,cOncAt
  2627.           la        a1,pArity+1
  2628.           aa,u      a1,1
  2629.           lmj       x11,cOncat
  2630.           la,u      a1,41
  2631.           lmj       x11,tAb
  2632.           la,u      a0,1,a0
  2633.           lxi,u     a0,10
  2634.           er        apRtcN$
  2635.           la        a0,(+sEtmD7l,sEtmD7)
  2636.           la        a1,wIdth+1
  2637.           tne,u     a1,8
  2638.           la        a0,(+sEtmD8l,sEtmD8)
  2639.           er        apRtcn$
  2640.           ENDF      MDLFE                                               . Gunnar
  2641.           IF        DCPFE                                               . Gunnar
  2642.           la        a0,(+setdcpmdl,setdcpmd)                            . Gunnar
  2643.           er        aprtcn$                                             . Gunnar
  2644.           ENDF      DCPFE                                               . Gunnar
  2645.           IF        ESCMODE                                             . Gunnar
  2646.           la        a0,(+setescl,setesc). @@ESC O                       . Gunnar
  2647.           er        aprtcn$                                             . Gunnar
  2648.           ENDF      ESCMODE                                             . Gunnar
  2649.           la,u      a1,1000             . gIve tIme fOr @@tty tO tAke eFfect
  2650.           er        twait$
  2651.           la,u      a0,rEadaCt
  2652.           er        fOrk$
  2653.           la,u      a0,tImeaCt
  2654.           er        fOrk$
  2655.           pOp       a1,a0,x11
  2656.           sx        x11,rDaCtive
  2657.           j         0,x11
  2658.           IF        MDLFE                                               . Gunnar
  2659. sEtmd1.
  2660. . cKp sAves cUrrent mOdes
  2661. . lmD=fDx sEts fUll dUplex
  2662. . iNx=100 aLlows iNput lInes tO 100 cHaracters lOng
  2663. . olG=100 aLlows oUtput lInes tO 100 cHaracters lOng
  2664. . bRf sAys nOt tO pRint lOts oF gArbage iN rEsponse tO tHis cOmmand
  2665.           'd,@@tty mDS=cKp,lMd=fDx,ilG=100,olG=100,bRf=oN,iNx=100'
  2666. sEtmD1l   eQu       -sEtmD1+$
  2667. sEtmd2.
  2668.           sTrng     'd,@@tty bRf=oN,smD=oFf,oUp='
  2669. .                   sHut-uP
  2670. .                   sCreen mOde oFf (dOnt sTop eVery 25 lInes)
  2671. .                   oUtput pArity aS dEfined bY sEt cOmmand
  2672. sEtmD7.
  2673.           'd,@@tty iNw=7,oUw=7,bRf=oN'
  2674. sEtmD7l   eQu       -sEtmD7+$
  2675. sEtmD8.
  2676.           'd,@@tty iNw=8,oUw=8,bRf=oN'
  2677. sEtmD8l   eQu       -sEtmD8+$
  2678. .                                                                       . Gunnar
  2679.           ENDF      MDLFE                                               . Gunnar
  2680.           IF        DCPFE                                               . Gunnar
  2681. setdcpmd            'd,@@tty w,132,s,021 '                              . Gunnar
  2682. .                   Set line width to 132.                              . Gunnar
  2683. .                   Set prompt character to control-Q.                  . Gunnar
  2684. .                   Ctrl-Q is recognized as TURN AROUND                 . Gunnar
  2685. .                   CHARACTER by C KERMIT. The C kermit                 . Gunnar
  2686. .                   does then not send until the turn                   . Gunnar
  2687. .                   around character arrives -> better                  . Gunnar
  2688. .                   performance (?)                                     . Gunnar
  2689. setdcpmdl equ       $-setdcpmd                                          . Gunnar
  2690.           ENDF      DCPFE                                               . Gunnar
  2691.           IF        ESCMODE                                             . Gunnar
  2692. setesc    'd,@@ESC O '                                                  . Gunnar
  2693. setescl   equ       $-setesc                                            . Gunnar
  2694.           ENDF      ESCMODE                                             . Gunnar
  2695. sHutdOwn.
  2696.           tnz       rDaCtive
  2697.           j         0,x11
  2698.           pUsh      x11,a0
  2699.           sx,h1     x11,tErminate
  2700.           sx,h2     x11,tErminate
  2701.           IF        MDLFE                                               . Gunnar
  2702.           la        a0,(+cLrmDl,cLrmd)
  2703.           er        apRtcN$
  2704.           la        a0,(+mDsl,mDs)
  2705.           er        apRtcN$
  2706.           ENDF      MDLFE                                               . Gunnar
  2707.           IF        ESCMODE                                             . Gunnar
  2708.           la        a0,(+clearescl,clearesc)                            . Gunnar
  2709.           er        aprtcn$                                             . Gunnar
  2710.           ENDF      ESCMODE                                             . Gunnar
  2711.           IF        MDLFE=0                                             . Gunnar
  2712.           la,u      a1,1000
  2713.           er        twAit$
  2714.           la        a0,(+0104,('Press RETURN!'))                        . Gunnar
  2715.           er        aprint$                                             . Gunnar
  2716. .                   Why was 'Press RETURN' here?                        . Gunnar
  2717. .                   bEcause the aCtivity dOing tHe er arEad$ iS sTuck   . Gunnar
  2718. .                   wAiting fOr sOme iNput.                             . Gunnar
  2719.           tz        logoutflag                                          . Gunnar
  2720.           j         shutdownx                                           . Gunnar
  2721.           ENDF      MDLFE=0                                             . Gunnar
  2722.           la,u      a1,1000
  2723.           er        twAit$
  2724.           tz        tErminate
  2725.           j         -3+$
  2726. shutdownx.                                                              . Gunnar
  2727.           sz        rDaCtive
  2728.           iF        DCPFE                                               . Gunnar
  2729.           la        a0,(+clrdcpmdl,clrdcpmd)                            . Gunnar
  2730.           er        aprtcn$                                             . Gunnar
  2731.           ENDF      DCPFE                                               . Gunnar
  2732.           pOp       a0,x11
  2733.           j         0,x11
  2734.           IF        DCPFE                                               . Gunnar
  2735. clrdcpmd  'd,@@tty s,> '                                                . Gunnar
  2736. clrdcpmdl equ       $-clrdcpmd                                          . Gunnar
  2737.           ENDF      DCPFE                                               . Gunnar
  2738.           IF        ESCMODE                                             . Gunnar
  2739. clearesc;'d,@@END ESC '                                                 . Gunnar
  2740. clearescl equ       $-clearesc                                          . Gunnar
  2741.           ENDF      ESCMODE                                             . Gunnar
  2742.           IF        MDLFE                                               . gUnnar
  2743. cLrmD     'd,@@tty mDs=rSt,bRf=oN'
  2744. .                   pOp oRiginal tty mOdes oFf oF sTack
  2745. .                   sHut uP
  2746. cLrmDl    eQu       -cLrmD+$
  2747. mDs       'd,@@tty mDs=pGm,bRf=oN'
  2748. .                   sEnd vAlues oF cUrrent mOdes tO eXecuting pRogram.
  2749. .                   wHy iS tHis hEre?
  2750. .                   bEcause tHe aCtivity dOing tHe er arEad$ iS sTuck
  2751. .                   wAiting fOr sOme iNput.  wE lEt tHe tty hAndler
  2752. .                   wAke iT uP iNstead oF wAiting fOr tHe rEmote uSer
  2753. .                   tO tYpe sOmething in (aNd hAve iT dIscarded).
  2754. mDsl      eQu       -mDs+$
  2755.           ENDF      MDLFE                                               . gUnnar
  2756.                     . Treat the case when the read string               . Gunnar
  2757.                     . was shorter than the transmitted                  . Gunnar
  2758.                     . packet. This can occur when the                   . Gunnar
  2759.                     . checksum is SPACE, since sperry                   . Gunnar
  2760.                     . kindly removes trailing spaces from               . Gunnar
  2761.                     . the input, and then fills with spaces             . Gunnar
  2762.                     . to next word limit. Nice, isn't it?               . Gunnar
  2763. /.
  2764. tImedrEad.
  2765. .         iNput
  2766. .                   a0=nUmber oF sEconds tO wAit
  2767. .         rEturn
  2768. .                   +0 iF eof ('@' cArd) eNcountered
  2769. .                   +1 iF tImeoUt
  2770. .                   +2 iF lOst dAta (sHould nOt hAppen)
  2771. .                   +3 iF sOme oTher eRror (sHould nOt hAppen)
  2772. .                   +4 iF nOrmal rEturn fRom rEad
  2773. .         wHen yOu aRe dOne wIth tHe dAta aT iNput yOu aRE
  2774. .         rEsponsible fOr dOing:
  2775. .            sz,h1 2+iNput
  2776. .
  2777.           pUsh      a0,a1,x11
  2778.           ts        iNput
  2779.           tz,h1     2+iNput             . aNything pResent?
  2780.           j         tImedrx             . yEs
  2781.           sa        a0,1+iNput          . sEt nUmber of sEconds tO wAit
  2782. tImedrq.  wAit fOr sOmetHing tO hAppen
  2783.           c$tsq     iNput
  2784.           ts        iNput
  2785.           tnz,h1    2+iNput
  2786.           j         tImedrq
  2787. tImedrx.
  2788.           c$ts      iNput
  2789.           la,h1     a1,2+iNput          . gEt sTatus
  2790.           pOp       x11
  2791.           tep,u     a1,020              . tEst iF eof
  2792.           j         tImedrdOne
  2793.           ax,u      x11,1
  2794.           tep,u     a1,010              . tEst iF tImeoUt
  2795.           j         tImedrdOne
  2796.           ax,u      x11,1
  2797.           tep,u     a1,4                . tEst iF lOst dAta
  2798.           j         tImedrdOne
  2799.           ax,u      x11,1
  2800.           tep,u     a1,2                . tEst iF uNexplained eRror
  2801.           j         tImedrdOne
  2802.           ax,u      x11,1
  2803.           top,u     a1,1
  2804.           anx,u     x11,1               . uNdocumented eRror
  2805. tImedrdOne.
  2806.           pOp       a1,a0
  2807.           j         0,x11
  2808. tImedrEdpUr.  pUrge aNy iNput tHat hAs pIled uP.
  2809.           pUsh      a0
  2810.           ts        iNput
  2811.           la,h1     a0,iNput+2
  2812.           tep,u     a0,1                . iF iNput pResent
  2813.           sz,h1     iNput+2             . dIscard iT
  2814.           pOp       a0
  2815.           c$ts      iNput
  2816.           j         0,x11
  2817. tImeaCt.
  2818. tIme1.
  2819.           la,u      a1,1000             . oNe sEcond
  2820.           er        twAit$
  2821.           tnz,h1    tErminate
  2822.           j         $+3
  2823.           sz,h1     tErminate
  2824.           er        eXit$
  2825.           ts        iNput
  2826.           tz,h1     2+iNput             . aNy dAta iN bUffer?
  2827.           j         tImects             . yEs...sO nO tImeoUt
  2828.           la        a0,1+iNput          . gEt tIme rEmaining
  2829.           jz        a0,tImects          . tImer nOt aCtive
  2830.           ana,u     a0,1
  2831.           sa        a0,1+iNput          . dEcrement tIme rEmaining
  2832.           jnz       a0,tImects          . jUmp iF nO tImeoUt
  2833.           la,u      a0,010
  2834.           or,h1     a0,2+iNput          . set tImeoUt sTatus
  2835.           sa,h1     a1,2+iNput
  2836.           c$tsa     iNput               . aCtivate wAiting aCtivity
  2837.           j         tIme1               . aNd lOop aRound fOrever
  2838. tImects.
  2839.           c$ts      iNput
  2840.           j         tIme1
  2841. .
  2842. .
  2843. .
  2844. rEadaCt.
  2845. rEadwAit.
  2846.           tnz,h2    tErminate
  2847.           j         $+3
  2848.           sz,h2     tErminate
  2849.           er        eXit$
  2850.           la        a0,(+rEadeof,rEadbuf)
  2851.           er        arEad$
  2852.           la        a1,rEadbUf
  2853.           jp        a1,3+$
  2854.           jnz       a1,2+$
  2855.           j         rEadwAit            . sKip iF -0
  2856.           ts        iNput
  2857.           la,h1     a1,2+iNput
  2858.           top,u     a1,1                . iS bUffer aLready fUll?
  2859.           j         rEadmOve            . bUffer iS eMpty
  2860.           la,u      a0,04
  2861.           or,h1     a0,2+iNput          . set lOst dAta sTatus
  2862.           sa,h1     a1,2+iNput
  2863.           c$ts      iNput
  2864.           j         rEadwAit
  2865. rEadmOve.
  2866.           la        a1,(+1,rEadbUf)
  2867.           la        a2,(+1,3+iNput)
  2868.           lr,u      r1,0,a0             . wOrd cOunt
  2869.           bt        a2,0,*a1
  2870.           lxi,u     a0,0
  2871.           msi,u     a0,4                . cOnvert tO cHaracter cOunt
  2872.           sa,h2     a0,2+iNput
  2873.           la,u      a0,1
  2874.           or,h1     a0,2+iNput          . set nOrmal sTatus
  2875.           sa,h1     a1,2+iNput
  2876.           sz        1+iNput
  2877.           c$tsa     iNput
  2878.           j         rEadwAit
  2879. rEadeof.
  2880.           ts        iNput
  2881.           la,u      a0,020
  2882.           or,h1     a0,2+iNput          . sEt eof sTatus
  2883.           sa,h1     a1,2+iNput
  2884.           sz        1+iNput
  2885.           c$tsa     iNput
  2886.           j         rEadwAit
  2887. .
  2888. iNfLush. tHrow aWay aNy qUeued iNput
  2889.           ts        iNput
  2890.           sz,h1     2+iNput
  2891.           c$ts      iNput
  2892.           j         0,x11
  2893. /.
  2894. p         pRoc
  2895. lD*       nAme
  2896.           la,q1     a0,p(1,1),a1
  2897.           la,q2     a0,p(1,1),a1
  2898.           la,q3     a0,p(1,1),a1
  2899.           la,q4     a0,p(1,1),a1
  2900.           eNd
  2901. lOads.
  2902.           uNlist
  2903. i         dO mAxeLtlInsIz+1 , lD -1+i
  2904.           lIst
  2905. p         pRoc
  2906. sT*       nAme
  2907.           sa,q1     a0,p(1,1),a2
  2908.           sa,q2     a0,p(1,1),a2
  2909.           sa,q3     a0,p(1,1),a2
  2910.           sa,q4     a0,p(1,1),a2
  2911.           eNd
  2912. sTores.
  2913.           uNlist
  2914. i         do mAxeLtlInsIz+1 , sT -1+i
  2915.           lIst
  2916. gEttOken. fEtch nExt tOken fRom sTring aT (a0).
  2917. .         a1=iNdex oF fIrtst cHaracter
  2918. .         a2=sTring tO cOntain tOken
  2919. . rEturns
  2920. .         a0 pOsitive (tErmination cHaracter) iF tOken fOund
  2921. .         a0 nEgative iF nO tOkens rEmain
  2922. .         a1 = iNdex oF nExt cHaracter
  2923.           pUsh      x9,x11,a3,a4,a5
  2924.           lx,u      x9,0                . oUtpUt iNdex
  2925.           la,u      a3,0,a1             . iNput iNdex
  2926.           la,u      a1,0,a0             . iNput sTring aDdress
  2927.           sz,h2     0,a2                . # characters cOpied
  2928. gEtsTrt.
  2929.           tg,h2     a3,0,a1             . aNy cHaracters lEft
  2930.           j         gEtnOne             . nOpe
  2931.           ex        4+lOads,a3          . gEt nExt cHaracter
  2932.           aa,u      a3,1
  2933.           tne,u     a0,' '
  2934.           j         gEtsTrt
  2935.           te,u      a0,','
  2936.           j         gEtgOing
  2937. gEteXit.
  2938.           la,u      a1,0,a3             . nEw iNdex
  2939.           sx,h2     x9,0,a2             . # characters
  2940.           pOp       a5,a4,a3,x11,x9
  2941.           j         0,x11
  2942. gEtnOne.
  2943.           lna,u     a0,1
  2944.           j         gEteXit
  2945. gEtgOing.
  2946. gEtnExt.
  2947.           la,u      a5,0,x9
  2948.           tle,h1    a5,0,a2
  2949.           eX        4+sTores,x9
  2950.           ax,u      x9,1
  2951. gEttEst.
  2952.           la,u      a0,0
  2953.           tg,h2     a3,0,a1
  2954.           j         gEteXit
  2955.           ex        4+lOads,a3
  2956.           aa,u      a3,1
  2957.           te,u      a0,','
  2958.           tne,u     a0,' '
  2959.           j         gEteXit
  2960.           j         gEtnExt
  2961. rEadcOmmand.
  2962. . iNput   a0=bUffer aDDress
  2963. . rEturn  a0=cHaracter cOunt (nEg = eof)
  2964.           sa,h2     a0,cMdpKt+010
  2965. rEadcOmmanda.
  2966.           la,u      a0,cMdpKt
  2967.           er        sYmb$
  2968.           tz,s1     3,a0
  2969.           j         cMdeof
  2970.           la,h2     a0,3,a0
  2971.           tep,u     a0,020000           . tEst iF iNfOr
  2972.           j         rEadcOmmanda
  2973.           la,u      a0,cMdpKt
  2974.           la,h2     a0,011,a0           . cHaracter cOunt
  2975. cMdxIt.
  2976.           j         0,x11
  2977. cMdeof.
  2978.           lna,u     a0,1
  2979.           j         cMdxIt
  2980. .
  2981. .
  2982. cMdsRch. sEarch lIst (a2) fOr cOmmand (a1)
  2983. .         rEturns a2 = mAtching eNtry (oR zEro)
  2984.           pUsh      a3,x11,a0
  2985.           la,u      a3,0
  2986. cMdsRch1.
  2987.           aa,u      a2,1
  2988.           lmj       x11,cOmpsTr
  2989.           ana,u     a2,1
  2990.           jnz       a0,cMdsRch2
  2991.           jz        a3,cMdsRch3
  2992.           la,u      a3,0                . nO fInd...aMbiguous
  2993.           j         cMdsRchx
  2994. cMdsRch3.
  2995.           la,u      a3,0,a2
  2996. cMdsRch2.
  2997.           aa,u      a2,1
  2998.           la,h1     a0,0,a2
  2999.           aa,u      a0,3
  3000.           ssl       a0,2
  3001.           aa,u      a2,1,a0
  3002.           tz        0,a2
  3003.           j         cMdsRch1
  3004. cMdsRchx.
  3005.           la,u      a2,0,a3
  3006.           pOp       a0,x11,a3
  3007.           j         0,x11
  3008. .
  3009. .
  3010. cOmpsTr. cOmpare sTrings (a1) aNd (a2).
  3011. .         a0 <= rEsult
  3012. .                   +0 iDentical eVen uNto sIze
  3013. .                   -0 (a1) mAtches tHe fIrst pArt oF (a2)
  3014. .                   +1 (a1) > (a2) (oR (a1) iS lOnger tHan (a2))
  3015. .                   -1 (a1) < (a2)
  3016.           pUsh      x11,a1,a3,a4,a5,r1,r2,r3
  3017.           la,u      a3,0                . sTring cHaracter iNdex
  3018.           lr,h2     r1,0,a1             . (a1) cHaracter cOunt
  3019.           lr,h2     r2,0,a2             . cHaracter cOunt (a2)
  3020. cOmpsTr0.
  3021.           jgd       r1,cOmpsTr1
  3022.           jgd       r2,cOmpsTr2
  3023.           la,u      a0,0
  3024.           j         cOmpsTrx
  3025. cOmpsTr2.
  3026.           la        a0,(0777777777777)  . mInus zEro
  3027.           j         cOmpsTrx
  3028. cOmpsTr1.
  3029.           jgd       r2,cOmpsTr3
  3030.           la,u      a1,1
  3031.           j         cOmpsTrx
  3032. cOmpsTr3.
  3033.           ex        4+lOads,a3
  3034.           sa        a0,r3               . sAve tHat cHaracter
  3035.           dsc       a1,36
  3036.           ex        4+lOads,a3
  3037.           dsc       a1,36
  3038.           aa,u      a3,1
  3039.           tne       a0,r3
  3040.           j         cOmpsTr0
  3041.           la        a1,a0
  3042.           la,u      a0,1
  3043.           tg        a1,r3
  3044.           lna,u     a0,1
  3045. cOmpsTrx.
  3046.           pop       r3,r2,r1,a5,a4,a3,a1,x11
  3047.           j         0,x11
  3048. .
  3049. .
  3050. sTr$uPcAse. cOnvert sTring aT (a0) tO uPper cAse.
  3051.           pUsh      a1,a2,r1,a0,a3
  3052.           la,u      a1,0,a0
  3053.           la,u      a2,0,a0
  3054.           lr,h2     r1,0,a0
  3055.           la,u      a3,4
  3056.           j         8+$
  3057.           ex        lOads,a3
  3058.           tg,u      a0,'a'
  3059.           tg,u      a0,1+'z'
  3060.           j         3+$
  3061.           ana,u     a0,040
  3062.           ex        sTores,a3
  3063.           aa,u      a3,1
  3064.           jgd       r1,-7+$
  3065.           pOp       a3,a0,r1,a2,a1
  3066.           j         0,x11
  3067. .
  3068. .
  3069. .
  3070. .
  3071. pRipAr. pRint pAragraph pOinted aT bY a0
  3072.           pUsh      a0,x11,a1
  3073. pRipAr1.
  3074.           tnz       0,a0                . aT eNd oF pAragraph?
  3075.           j         pRipArx             . yEs
  3076.           pUsh      a0
  3077.           lmj       x11,pRintsTring
  3078.           pOp       x11
  3079.           la,h1     a0,0,x11
  3080.           aa,u      a0,3
  3081.           ssl       a0,2
  3082.           aa,u      a0,1,x11
  3083.           j         pRipAr1
  3084. pRipArx.
  3085.           pOp       a1,x11,a0
  3086.           j         0,x11
  3087. cOncat. sTring (a0) ::= sTring (a0)+sTring (a1)
  3088.           pUsh      x11,a0,a1,a2,a3,a5
  3089.           la,u      a2,0,a0
  3090.           la,h2     a5,0,a1             . # cHaracters iNput
  3091.           lx,u      x11,0               . iNput iNdex
  3092.           la,h2     a3,0,a2             . oUtput iNdex
  3093.           j         6+$
  3094.           eX        4+lOads,x11
  3095.           ax,u      x11,1
  3096.           tle,h1    a3,0,a2
  3097.           eX        4+sTores,a3
  3098.           aa,u      a3,1
  3099.           jgd       a5,-5+$
  3100.           sa,h2     a3,0,a2
  3101.           pOp       a5,a3,a2,a1,a0,x11
  3102.           j         0,x11
  3103. pRivAr. a0=vAriable....pRint iTs nAme aNd vAlue
  3104.           pUsh      x11,a1,a2,a3,r1,r2
  3105.           pUsh      a0
  3106.           sz,h2     pRlIne
  3107.           la        a2,0,a0
  3108.           la,u      a1,2,a0
  3109.           la,u      a0,pRlIne
  3110.           lmj       x11,cOncat
  3111.           la,u      a1,vAlcOl
  3112.           lmj       x11,tAb
  3113.           la        a0,0,x10
  3114.           la        a1,0,a0
  3115.           j         $,a1
  3116.           j         pRivArdEc
  3117.           j         pRivArbcd
  3118.           j         pRivArcNt
  3119.           j         pRivArcHr
  3120.           j         pRivAroCt
  3121.           +0
  3122. pRivArdEc.
  3123.           la        a0,1,a0             . gEt vAlue
  3124.           la,u      a1,1                . aT lEast 1 dIgit
  3125.           la,u      a2,10               . dEcimal
  3126.           lmj       x11,bInasc
  3127.           la,u      a0,pRlIne
  3128.           la,u      a1,bInascrSlt
  3129.           lmj       x11,cOncat
  3130.           j         pRivArxIt
  3131. pRivAroCt.
  3132.           la        a0,1,a0             . gEt vAlue
  3133.           la,u      a1,1                . aT lEast 1 dIgit
  3134.           la,u      a2,8                . oCtal
  3135.           lmj       x11,bInasc
  3136.           la,u      a0,pRlIne
  3137.           la,u      a1,bInascrSlt
  3138.           lmj       x11,cOncat
  3139. pRivArxIt.
  3140.           lxi,u     a0,1
  3141.           lmj       x11,pRintsTring
  3142.           pOp       a0
  3143.           pOp       r2,r1,a3,a2,a1,x11
  3144.           j         0,x11
  3145. pRivArbcd.
  3146.           la        a1,1,a0
  3147.           aa,u      a1,1
  3148.           la,u      a0,pRlIne
  3149.           lmj       x11,cOncat
  3150.           j         pRivArxIt
  3151. .
  3152. .
  3153. pRivArcNt
  3154. pRivArcHr
  3155.           la        a0,1,a0
  3156.           la,u      a1,3
  3157.           la,u      a2,8
  3158.           lmj       x11,bInasc
  3159.           la,u      a0,pRlIne
  3160.           la,u      a1,bInascrSlt
  3161.           lmj       x11,cOncAt
  3162.           j         pRivArxIt
  3163. rEvsTr. rEverse tHe sTring aT (a0).
  3164.           pUsh      x11,a0,a1,a2,a3,a4,r1
  3165.           la,h2     a2,0,a0             . nUmber oF cHaracters
  3166.           ssl       a2,1
  3167.           lr        r1,a2
  3168.           la,h2     a3,0,a0
  3169.           la,u      a1,0,a0
  3170.           la,u      a2,0,a0
  3171.           lx,u      x11,0
  3172.           j         9+$
  3173.           ana,u     a3,1
  3174.           ex        4+lOads,x11
  3175.           sa        a0,a4
  3176.           ex        4+lOads,a3
  3177.           ex        4+sTores,x11
  3178.           la        a0,a4
  3179.           ex        4+sTores,a3
  3180.           ax,u      x11,1
  3181.           jgd       r1,-8+$
  3182.           pOp       r1,a4,a3,a2,a1,a0,x11
  3183.           j         0,x11
  3184. .
  3185. .
  3186. bInasc. cOnver sIgned iNteger tO ascii
  3187. .         a0=iNteger
  3188. .         a1=mInimum nUmber oF dIgits
  3189. .         a2=bAse
  3190. .         rEsulting sTring wIll bE fOund aT bInascrSlt
  3191.           pUsh      x11,a0,a1,a2,a3,r1,r2,r3
  3192.           lr,u      r3,0
  3193.           jp        a0,3+$
  3194.           lna       a0,a0
  3195.           lr,u      r3,1
  3196.           lr,u      r2,0,a1             . nUmber oF dIgits nEeded
  3197.           lr,u      r1,0,a2             . bAse
  3198.           la,u      a3,0
  3199.           la,u      a2,bInascrSlt
  3200. bInasc1.
  3201.           dsl       a0,36
  3202.           di        a0,r1
  3203.           tg,u      a1,10
  3204.           aa,u      a1,7
  3205.           aa,u      a1,48
  3206.           dsc       a0,36
  3207.           ex        4+sTores,a3
  3208.           dsc       a0,36
  3209.           aa,u      a3,1
  3210.           jnz       a0,bInasc1
  3211.           tle       a3,r2
  3212.           j         bInasc1
  3213.           tnz       r3
  3214.           j         4+$
  3215.           la,u      a0,'-'
  3216.           ex        4+sTores,a3
  3217.           aa,u      a3,1
  3218.           sa,h2     a3,0,a2
  3219.           la,u      a0,0,a2
  3220.           lmj       x11,rEvsTr
  3221.           pOp       r3,r2,r1,a3,a2,a1,a0,x11
  3222.           j         0,x11
  3223. .
  3224. .
  3225. cVtascbIn. cOnvert sTring (a0) to bInary iN a0.  a1 iS tHe bAse.
  3226. .         rEturn +0 , a0=eRror mEssage aDdress
  3227. .         rEturn +1 , a0=bInary rEsult
  3228.           pUsh      a1,a2,a3,a4,r1
  3229.           la,u      a2,0,a1
  3230.           la,u      a1,0,a0
  3231.           la,u      a3,0
  3232.           lr,u      r1,0
  3233.           la,u      a4,0
  3234.           tg,h2     a3,0,a1
  3235.           j         cVtabx
  3236.           ex        4+lOads,a3
  3237.           aa,u      a3,1
  3238.           tne,u     a0,' '
  3239.           j         -5+$
  3240.           tne,u     a0,'+'
  3241.           j         cVtabn
  3242.           te,u      a0,'-'
  3243.           j         cVtabm
  3244.           lr,u      r1,1
  3245. cVtabn.
  3246.           tg,h2     a3,0,a1
  3247.           j         cVtabx
  3248.           ex        4+lOads,a3
  3249.           aa,u      a3,1
  3250.           tne,u     a0,' '
  3251.           j         cVtabn
  3252. cVtabm.
  3253.           tg,u      a0,'a'
  3254.           tg,u      a0,'z'+1
  3255.           j         $+2
  3256.           ana,u     a0,'a'-'A'
  3257.           ana,u     a0,'0'
  3258.           tg,u      a0,10
  3259.           ana,u     a0,'A'-'0'-10
  3260.           tg,u      a0,0,a2
  3261.           j         cVtabo
  3262.           jn        a0,cVtabo
  3263.           msi,u     a4,0,a2
  3264.           aa,u      a4,0,a0
  3265.           j         cVtabn
  3266. cVtabx.
  3267.           tz        r1
  3268.           lna       a4,a4
  3269.           la        a0,a4
  3270. cVtabr.
  3271.           pOp       r1,a4,a3,a2,a1
  3272.           j         1,x11
  3273. cVtabo.
  3274.           la,u      a0,cVtabmSg
  3275.           pOp       r1,a4,a3,a2,a1
  3276.           j         0,x11
  3277. cVtabmSg
  3278.           sTrng     'Numeric field contains non-numeric character or'
  3279.           sTrng     'an illegal numeric character (EG: 9 in octal field).'
  3280.           +0
  3281. .
  3282. .
  3283. dEbUggero.
  3284.           tnz       dEbUg+1
  3285.           j         0,x11
  3286.           sx        x11,dEbUgbUff+54
  3287.           j         dEbUgger
  3288. dEbUggeri.
  3289.           tnz       dEbUg+1
  3290.           j         0,x11
  3291.           sz        dEbUgbUff+54
  3292. dEbUgger.
  3293.           pUsh      a0,a1,r1
  3294.           lxi,u     a0,1
  3295.           la        a1,(+1,dEbUgbUff)
  3296.           lr,u      r1,54
  3297.           bt        a1,0,*a0
  3298.           er        tdAte$
  3299.           sa        a0,dEbUgbUff+55
  3300.           la,u      a0,dEbUgiopKt
  3301.           er        iow$
  3302.           la        a1,5,a0
  3303.           aa,u      a1,2
  3304.           sa        a1,5,a0
  3305.           pOp       r1,a1,a0
  3306.           j         0,x11
  3307. .
  3308. .
  3309. pRintsTring.
  3310. .         pRint sTring lOcated aT (a0)
  3311. .         a0 iNcrement=sPacing cOunt
  3312. .         eg:
  3313. .            la   a0,(+2,sTrnga)   dOuble sPace
  3314. .            lmj  x11,pRintsTring
  3315.           pUsh      a0
  3316.           aa,u      a0,1
  3317.           sa,h2     a0,4+pRsTrpKt
  3318.           ana,u     a0,1
  3319.           ssc       a0,18
  3320.           sa,h1     a0,6+pRsTrpKt
  3321.           ssc       a0,18
  3322.           la,h2     a0,0,a0             . cHaracter cOunt
  3323.           sa,h1     a0,4+pRsTrpKt
  3324.           la,u      a0,pRsTrpKt
  3325.           er        sYmb$
  3326.           pOp       a0
  3327.           j         0,x11
  3328. tAb.
  3329. .         a0=sTring aDdress
  3330. .         a1=cOlumn nUmber
  3331.           pUsh      a0,a2,a3
  3332.           la,u      a2,0,a0
  3333.           la,u      a0,' '
  3334.           la,h2     a3,0,a2
  3335.           ana,u     a1,2
  3336.           tg        a1,a3
  3337.           tg,h1     a3,0,a2
  3338.           j         4+$
  3339.           eX        4+sTores,a3
  3340.           aa,u      a3,1
  3341.           j         -5+$
  3342.           aa,u      a1,2
  3343.           sa,h2     a3,0,a2
  3344.           pOp       a3,a2,a0
  3345.           j         0,x11
  3346. .
  3347. dOuSe.
  3348.           sz,s1     fiTempKt+6          . nO fIle aSsigned
  3349.           pUsh      x11,a0,a1,a2,a3,a4,a5
  3350.           la,u      a1,fIlenAme
  3351.           la,u      a3,0
  3352.           lmj       x11,eXtrqf
  3353.           jn        a0,dOuSee
  3354.           jz        a0,dOuSecKdN
  3355.           tne,u     a0,'.'
  3356.           j         dOuSecKeLt
  3357.           te,u      a0,'*'
  3358.           j         dOuSesYeRr
  3359.           lmj       x11,eXtrqf
  3360.           jn        a0,dOuSee
  3361.           jz        a0,dOuSecKdn
  3362.           te,u      a0,'.'
  3363.           j         dOuSesYeRr
  3364. dOuSecKeLt.
  3365.           jz        a2,dOuSesYeRr
  3366.           lmj       x11,eXtrev
  3367.           jnz       a2,dOuSesYeRr
  3368. dOuSecKdn.
  3369.           la,u      a0,pRlIne
  3370.           sz,h2     0,a0
  3371.           la,u      a1,uSesTr
  3372.           lmj       x11,cOncat
  3373.           la,u      a1,fIlenAme
  3374.           lmj       x11,cOncat
  3375.           la,u      a1,sPs
  3376.           lmj       x11,cOncat
  3377.           la,u      a0,pRlIne+1
  3378.           er        acsf$
  3379.           jp        a0,dOuSeok
  3380. dOuSesYeRr.
  3381.           la,u      a0,3+$
  3382. dOuSee.
  3383.           lmj       x11,pRipAr
  3384.           j         dOuSeeX
  3385.           sTrng     'Syntax error in filename.'
  3386.           +0
  3387. dOuSeok.
  3388.           la,u      a0,aSgsTr+1
  3389.           er        acsf$
  3390.           jp        a0,dOaSgok
  3391.           la        a5,a0
  3392.           la,u      a0,aSgm
  3393.           lmj       x11,pRipAr
  3394.           la        a0,a5
  3395.           lmj       x11,pRifAc
  3396.           j         dOuSeeX
  3397. dOaSgok.
  3398.           la        a0,(+11,fiTempKt)
  3399.           er        fiTem$
  3400.           tz,s1     6,a0
  3401.           j         dOuSetStpf
  3402.           la,u      a0,aSgm
  3403.           lmj       x11,pRipAr
  3404.           j         dOuSeeX
  3405. dOuSetStpf.
  3406.           la,u      a0,tStpfpKt
  3407.           er        iow$
  3408.           tz,s1     3,a0
  3409.           j         dOuSerDeRr
  3410.           la        a0,cMdbUf
  3411.           fieldAta
  3412.           te        a0,('**pf**')
  3413.           ascii
  3414.           j         dOuSenOtpf
  3415. dOuSeeX.
  3416.           pOp       a5,a4,a3,a2,a1,a0,x11
  3417.           j         0,x11
  3418. dOuSenOtpf.
  3419.           la,u      a0,3+$
  3420.           lmj       x11,pRipAr
  3421.           j         dOuSeeX
  3422.           sTrng     'That file is not a program file.'
  3423.           sTrng     'It cannot be used to contain elements.'
  3424.           +0
  3425. dOuSerDeRr.
  3426.           la,s1     a0,3,a0
  3427.           tne,u     a0,5
  3428.           j         dOuSeeX
  3429.           la,u      a0,3+$
  3430.           lmj       x11,pRipAr
  3431.           j         dOuSeeX
  3432.           sTrng     'I cannot read that file.'
  3433.           +0
  3434. pRifAc. pRint fAcility eRror mEssage
  3435.           j         0,x11
  3436. aSgm.
  3437.           sTrng     'I cannot assign that file.'
  3438.           +0
  3439. uSesTr.
  3440.           sTrng     '@use k$e$r$m$i$t$,'
  3441. sPs.
  3442.           sTrng     ' . '
  3443. aSgsTr.
  3444.           sTrng     '@aSg,ax k$e$r$m$i$t$ . '
  3445. .
  3446. .
  3447. sEtdEcdEf. a0=dEcimal vAriable.  sEt iT tO iTs dEfault vAlue.
  3448.           pUsh      a1
  3449.           la,h1     a1,2,a0
  3450.           aa,u      a1,3
  3451.           ssl       a1,2
  3452.           aa,u      a1,0,a0
  3453.           la        a1,5,a1
  3454.           sa        a1,1,a0
  3455.           pOp       a1
  3456.           j         0,x11
  3457. sEtcHrdEf. a0=cHaracter vAriable
  3458. sEtcNtrldEf. a0=cOntrol cHaracter vAriable.
  3459.           pUsh      a1
  3460.           la,h1     a1,2,a0
  3461.           aa,u      a1,3
  3462.           ssl       a1,2
  3463.           aa,u      a1,0,a0
  3464.           la        a1,3,a1
  3465.           sa        a1,1,a0
  3466.           pOp       a1
  3467.           j         0,x11
  3468. .
  3469. eXtrqf. eXtract fIlename oR qUalifier
  3470.           pUsh      x11,r2
  3471.           lr,u      r2,0                . nO wIldcards allowed
  3472.           lmj       x11,eXtr
  3473.           pOp       r2,x11
  3474.           j         0,x11
  3475. .
  3476. eXtrev. eXtract eLement oR vErsion
  3477.           pUsh      x11,r2
  3478.           lr,u      r2,1                . allow wIldcards
  3479.           lmj       x11,eXtr
  3480.           pop       r2,x11
  3481.           j         0,x11
  3482. .
  3483. extr.   eXtract fIle nAme (oR qUalifier oR eLement oR vErsion)
  3484. .         a1=iNput sTring
  3485. .         a3=iNdex iNto sTring
  3486. .         r2=nOn-zEro iF wIldcard cHaracters ("*" aNd "%") aLlowed
  3487. .
  3488. .         a0 sEt tO tErminating cHaracter
  3489. .                   oR zEro iF eNd oF sTring eNcountered
  3490. .                   oR -0,eRror mEssage iF  iLlegal nAme eNcountered
  3491. .         a2 set tO nUmber oF cHaracters iN nAme
  3492. .         a4,a5 sEt tO fIeldata nAme (ljsf)
  3493. .         a3 sEt tO nEw sTring iNdex
  3494.           pUsh      r1
  3495.           fIeldata
  3496.           dl        a4,('            ')
  3497.           ascii
  3498.           lr,u      r1,12
  3499. eXtrflP.
  3500.           tg,h2     a3,0,a1
  3501.           j         eXtrfdN
  3502.           eX        4+lOads,a3
  3503.           aa,u      a3,1
  3504.           tg,u      a0,'a'
  3505.           tg,u      a0,'z'+1
  3506.           tz,u      0
  3507.           ana,u     a0,040              . uPper cAse
  3508.           la,u      a2,0
  3509.           tne,u     a0,'-'
  3510.           fIeldata
  3511.           la,u      a2,'-'
  3512.           ascii
  3513.           tne,u     a0,'$'
  3514.           fieldata
  3515.           la,u      a2,'$'
  3516.           ascii
  3517.           tnz       r2                  . aRe wIldcards aLlowed
  3518.           j         5+$                 . nOpe
  3519.           tne,u     a0,'*'
  3520.           fIeldAta
  3521.           la,u      a2,'*'
  3522.           ascii
  3523.           tne,u     a0,'%'
  3524.           fIeldAta
  3525.           la,u      a2,'%'
  3526.           ascii
  3527.           tg,u      a0,'A'
  3528.           tg,u      a0,'Z'+1
  3529.           tz,u      0
  3530.           la,xu     a2,-073
  3531.           tg,u      a0,'0'
  3532.           tg,u      a0,'9'+1
  3533.           tz,u      0
  3534.           la,u      a2,0,a0
  3535.           jz        a2,eXtrfiL
  3536.           tp        a2
  3537.           aa,u      a2,0,a0
  3538.           jgd       r1,eXtrftm
  3539.           lna,u     a0,1
  3540.           lxm,u     a0,$+2
  3541.           j         eXtrfx
  3542.           sTrng     'Too many characters in name...12 is maximum'
  3543.           +0
  3544. eXtrftm.
  3545.           ldsl      a4,6
  3546.           aa,u      a5,0,a2
  3547.           j         eXtrflP
  3548. eXtrfdN.
  3549.           la,u      a0,0
  3550. eXtrfiL.
  3551.           la,u      a2,12
  3552.           jgd       r1,2+$
  3553.           j         4+$
  3554.           ldsc      a4,6
  3555.           ana,u     a2,1
  3556.           j         -4+$
  3557. eXtrfx.
  3558.           pOp       r1
  3559.           j         0,x11
  3560. eXtrnAme. tRy tO mAke aN eLement nAme oUt oF sTring aT (a0)
  3561.           pUsh      x11,a0,a1,a2,a3,a4
  3562.           l,h2      a1,0,a0             . no of characters              . Gunnar
  3563.           aa,u      a0,1                                                . Gunnar
  3564.           l,u       a2,1+namestring     . temp storage for orig string  . Gunnar
  3565.           l,h1      a3,namestring                                       . Gunnar
  3566.           lmj       x11,unprefixify                                     . Gunnar
  3567.           s,h2      a3,namestring                                       . Gunnar
  3568.           l,u       a0,namestring                                       . Gunnar
  3569.           la,u      a1,0,a0             . iNput sTring
  3570.           la,u      a3,0                . iNput iNdex
  3571.           la,u      a2,nAmeLt           . eLement nAme dEstination
  3572.           la,u      a4,0                . oUtput iNdex
  3573.           sz,h2     vErsioneLt          . aSsume nO vErsion nAme
  3574.           sz,h2     nAmeLt              . aSsume nO eLt nAme
  3575.           lmj       x11,eXtrnM          . gEt eLement
  3576.           nOp
  3577.           la,u      a2,vErsioneLt
  3578.           la,u      a4,0
  3579. eXtrnv.
  3580.           lmj       x11,eXtrnM          . gEt vErsion
  3581.           j         2+$
  3582.           j         eXtrnd              . aLl dOne
  3583.           la,u      a0,'$'
  3584.           dsc       a3,36
  3585.           tle,h1    a3,0,a2
  3586.           ex        4+sTores,a3
  3587.           aa,u      a3,1
  3588.           dsc       a3,36
  3589.           j         eXtrnv
  3590. eXtrnd.
  3591.           tz,h2     nAmeLt
  3592.           j         eXtrnx
  3593.           la,u      a0,nAmeLt
  3594.           la,u      a1,qUotekErmit
  3595.           lmj       x11,cOncat
  3596.           tz,h2     vErsioneLt
  3597.           j         eXtrnx
  3598.           er        tdAte$
  3599.           lxi,u     a0,0
  3600.           lmj       x11,tImetOasc.
  3601.           la,u      a0,vErsioneLt
  3602.           la,u      a1,asctIm
  3603.           sz,h2     0,a0
  3604.           lmj       x11,cOncat
  3605. eXtrnx.
  3606.           pOp       a4,a3,a2,a1,a0,x11
  3607.           j         0,x11
  3608. eXtrnM.
  3609.           pUsh      x11
  3610. eXtrnMa.
  3611.           tg,h2     a3,0,a1
  3612.           j         eXtrnM1
  3613.           ex        4+lOads,a3          . gEt a0=cHaracter
  3614.           aa,u      a3,1
  3615.           lmj       x11,eXtrnlEgal
  3616.           j         eXtrnMi             . iLlegal
  3617. eXtrnMs.
  3618.           dsc       a3,36
  3619.           tle,u     a3,0,a2
  3620.           eX        4+sTores,a3
  3621.           aa,u      a3,1
  3622.           dsc       a3,36
  3623.           tg,h1     a4,0,a2
  3624.           la,h1     a4,0,a2
  3625.           sa,h2     a4,0,a2
  3626.           j         eXtrnMa
  3627. eXtrnMi.
  3628.           te,u      a0,'.'
  3629.           tne,u     a0,'/'
  3630.           j         eXtrnM0
  3631.           la,u      a0,'$'
  3632.           j         eXtrnMs
  3633. eXtrnM1.
  3634.           pOp       x11
  3635.           j         1,x11
  3636. eXtrnM0.
  3637.           pOp       x11
  3638.           j         0,x11
  3639. eXtrnlEgal
  3640.           te,u      a0,'$'
  3641.           tne,u     a0,'-'
  3642.           j         1,x11
  3643.           tg,u      a0,'0'
  3644.           tg,u      a0,'9'+1
  3645.           tg,u      a0,'A'
  3646.           tg,u      a0,'Z'+1
  3647.           tg,u      a0,'a'
  3648.           tg,u      a0,'z'+1
  3649.           j         0,x11
  3650.           j         1,x11
  3651. .
  3652. .
  3653. dOpfs. sEe iF eLement eXists aNd sEt pArtBl
  3654. .         a0 + aLl iS wEll
  3655. .         a0 - nO sUch eLement
  3656.           pUsh      a1
  3657.           lna,u     a1,1
  3658.           la,u      a0,pfspKt
  3659.           er        pfs$
  3660.           la,u      a0,0
  3661.           tp        a1
  3662.           lna,u     a0,1
  3663.           pOp       a1
  3664.           j         0,x11
  3665. .
  3666. oPensOurce.
  3667. .         a0 + aLl iS wEll
  3668. .         a0 - eRror mEssage hAs bEen pRinted
  3669.           pUsh      x11,a1,a2,a3,a4,a5,r1,r2,r3
  3670.           la        a0,pfspKt+10        . fIle lOcation
  3671.           sa        a0,fct+5
  3672.           la,u      a0,fct
  3673.           lmj       x11,sdfio$
  3674.           j         oPnsRceRr
  3675.           sz,h2     sRcsTrng
  3676.           sz        sRciNdx
  3677.           sz        sRccHrcNt
  3678.           sz        lInenUmber
  3679.           sz        eLementeof
  3680.           la,u      a0,0
  3681. oPnsRcx.
  3682.           pOp       r3,r2,r1,a5,a4,a3,a2,a1,x11
  3683.           j         0,x11
  3684. oPnsRceRr.
  3685.           tz        a5
  3686.           j         oPnsRccOd
  3687.           la,u      a0,4+$
  3688.           lmj       x11,pRipAr
  3689.           lna,u     a0,1
  3690.           j         oPnsRcx
  3691.           sTrng     'Badly formatted element'
  3692.           +0
  3693. oPnsRccOd.
  3694.           sz,h2     pRlIne
  3695.           la        a0,a5
  3696.           la,u      a2,8
  3697.           la,u      a1,2
  3698.           lmj       x11,bInasc
  3699.           la,u      a0,pRlIne
  3700.           la,u      a1,oPnsRcmSg
  3701.           lmj       x11,cOncAt
  3702.           la,u      a1,bInascrSlt
  3703.           lmj       x11,cOncAt
  3704.           lmj       x11,pRintsTring
  3705.           lna,u     a0,1
  3706.           j         oPnsRcx
  3707. oPnsRcmSg.
  3708.           sTrng     'I/O error attempting to open element. Status='
  3709.           +0
  3710. .
  3711. .
  3712. tEstaCk. tEst iF aCk fOr tHis pAcket oR nAk fOr nExt pAcket
  3713. . given
  3714. .         a0=pAcket tYpe
  3715. .         a1=pAcket nUmber
  3716. . rEturn
  3717. .         +0        iF gOod aCk
  3718. .         +1        iF sOmething eLse
  3719.           te        a1,n
  3720.           j         $+4
  3721.           te,u      a0,'Y'
  3722.           j         1,x11
  3723.           j         0,x11
  3724.           te,u      a0,'N'
  3725.           j         tStaCka
  3726.           pUsh      a2
  3727.           la        a2,n
  3728.           aa,u      a2,1
  3729.           lssl      a2,30
  3730.           ssl       a2,30
  3731.           te        a1,a2
  3732.           ax,u      x11,1
  3733.           pOp       a2
  3734.           j         0,x11
  3735. tStaCka.
  3736.           te,u      a0,'Y'
  3737.           j         1,x11
  3738.           pUsh      x11,a1
  3739.           la,u      a1,1000
  3740.           er        twAit$
  3741.           lmj       x11,tImedrEdpUr     . pUrge iNput
  3742.           pOp       a1,x11
  3743.           j         1,x11
  3744. asctOfd. tRanslate uP tO 12 cHaracters oF sTring (a0)
  3745. .         aNd pUt rEsult iN a4,a5 (ljsf).
  3746.           pUsh      x11,a0,a1,a3,r1
  3747.           la,u      a3,0
  3748.           la,u      a1,0,a0
  3749.           lr,u      r1,11
  3750. asctOfdlP.
  3751.           tg,h2     a3,0,a1
  3752.           j         asctOffL
  3753.           eX        4+lOads,a3
  3754.           aa,u      a3,1
  3755.           lx,u      x11,0,a1
  3756.           aNd,u     a0,0177
  3757.           la        a0,a1
  3758.           la,u      a1,0,x11
  3759.           la,h1     a0,ascfdasc$,a0
  3760.           ldsl      a4,6
  3761.           aa        a5,a0
  3762.           jgd       r1,asctOfdlP
  3763.           j         asctOfdx
  3764. asctOffL.
  3765.           ldsl      a4,6
  3766.           aa,u      a5,5
  3767.           jgd       r1,-2+$
  3768. asctOfdx.
  3769.           pOp       r1,a3,a1,a0,x11
  3770.           j         0,x11
  3771. fdtOasc.  aPpend tHe nOn-bLank cHaracters in a4,a5 tO sTring (a0).
  3772.           pUsh      a0,a2,a3,a4,a5
  3773.           la,u      a2,0,a0
  3774.           la,h2     a3,0,a2
  3775.           lxi,u     a3,1
  3776. fdtOasclP.
  3777.           la        a0,a4
  3778.           ldsl      a4,6
  3779.           aa,u      a5,5
  3780.           ssl       a0,30
  3781.           tne,u     a0,5
  3782.           j         fdtOasctSt
  3783.           la,h2     a0,ascfdasc$,a0     . tRanslate to ascii
  3784.           tg,h1     a3,0,a2
  3785.           eX        4+stores,*a3
  3786. fdtOasctSt.
  3787.           dte       a4,(+050505050505050505050505d)
  3788.           j         fdtOasclP
  3789.           sa,h2     a3,0,a2
  3790.           pOp       a5,a4,a3,a2,a0
  3791.           j         0,x11
  3792. /.
  3793. ioeRror. gIven i/o eRror cOde iN a0, pRoduce eRror mEssage  aT ioeRrmSg.
  3794.           pUsh      x11,a0,a1,a2
  3795.           sz,h2     ioeRrmSg
  3796.           la,u      a2,8
  3797.           la,u      a1,3
  3798.           lmj       x11,bInaSc
  3799.           la,u      a0,ioeRrmSg
  3800.           la,u      a1,ioeRrmSgsKl
  3801.           lmj       x11,cOncat
  3802.           la,u      a1,bInascrSlt
  3803.           lmj       x11,cOncat
  3804.           pOp       a2,a1,a0,x11
  3805.           j         0,x11
  3806. ioeRrmsg.
  3807.           sTrng     '                                              '
  3808. ioeRrmSgsKl.
  3809.           sTrng     'File I/O error (in octal)= '
  3810. pfeRror.  a0=pRogram fIle eRror cOde
  3811.           pUsh      x11,a0,a1,a2
  3812.           sz,h2     pfeRrmSg
  3813.           la,u      a2,8
  3814.           la,u      a1,3
  3815.           lmj       x11,bInasc
  3816.           la,u      a0,pfeRrmSg
  3817.           la,u      a1,pfeRrmSgsKl
  3818.           lmj       x11,cOncAt
  3819.           la,u      a1,bInascrSlt
  3820.           lmj       x11,cOncat
  3821.           pOp       a2,a1,a0,x11
  3822.           j         0,x11
  3823. pfeRrmSg.
  3824.           sTrng     '                                                    '
  3825. pfeRrmSgsKl.
  3826.           sTrng     'Element file error code (octal) = '
  3827. eRrpRnt. pRint aNy oUtsTanding mEssages
  3828.           pUsh      x11,a0
  3829.           la,u      a0,ioeRrmSg
  3830.           lmj       x11,eRrpRnta
  3831.           la,u      a0,pfeRrmSg
  3832.           lmj       x11,eRrpRnta
  3833.           la,u      a0,tImoUtmSg
  3834.           lmj       x11,eRrpRnta
  3835.           la,u      a0,bAdbInmSg
  3836.           lmj       x11,eRrpRnta
  3837.           la,u      a0,cMpltmSg
  3838.           lmj       x11,eRrpRnta
  3839.           pOp       a0,x11
  3840.           j         0,x11
  3841. eRrpRnta.
  3842.           pUsh      x11
  3843.           tz,h2     0,a0
  3844.           lmj       x11,pRintsTring
  3845.           sz,h2     0,a0
  3846.           pOp       x11
  3847.           j         0,x11
  3848. cLreRrmSg. cLear oUt aLl eRror mEssages
  3849.           sz,h2     ioeRrmSg
  3850.           sz,h2     pfeRrmSg
  3851.           sz,h2     tImoUtmSg
  3852.           sz,h2     bAdbInmSg
  3853.           sz,h2     cMpltmSg
  3854.           j         0,x11
  3855. /.
  3856. .
  3857. .
  3858. . ******************************************************************************
  3859. .
  3860. . rfIle   rfIle   rfIle   rfIle   rfIle   rfIle   rfIle   rfIle   rfIle
  3861. .
  3862. .         rEceive fIle hEader
  3863. .
  3864. . ******************************************************************************
  3865. rfILe.
  3866.           pUsh      x11,a1,a2,a3
  3867.           la        a0,nUmtRy
  3868.           aa,u      a0,1
  3869.           sa        a0,nUmtRy
  3870.           tg        a0,mAxtRy
  3871.           j         rfIlea
  3872.           la,u      a2,pAcket
  3873.           lmj       x11,rpAck
  3874.           te,u      a0,'S'
  3875.           j         rfIletz
  3876.           la        a0,oLdtRy
  3877.           aa,u      a0,1
  3878.           sa        a0,oLdtRy
  3879.           tg        a0,mAxtRy
  3880.           j         rfIlea
  3881.           la        a2,n
  3882.           la,u      a3,63
  3883.           jz        a2,2+$
  3884.           anu,u     a2,1
  3885.           te        a1,a3
  3886.           j         rfIlea
  3887.           la,u      a0,pAcket
  3888.           lmj       x11,spAr
  3889.           la,u      a0,'Y'
  3890.           la,u      a2,pAcket
  3891.           lmj       x11,spAck
  3892.           sz        nUmtRy
  3893.           j         rfIlest             . sTay iN sAme sTate
  3894. rfIletz.
  3895.           te,u      a0,'Z'
  3896.           j         rfIletf
  3897.           la        a0,oLdtRy
  3898.           aa,u      a0,1
  3899.           sa        a0,oLdtRy
  3900.           tg        a0,mAxtRy
  3901.           j         rfIlea
  3902.           la        a2,n
  3903.           la,u      a3,077
  3904.           jz        a2,2+$
  3905.           anu,u     a2,1
  3906.           te        a1,a3
  3907.           j         rfIlea
  3908.           la,u      a0,'Y'
  3909.           la,u      a2,pRlIne
  3910.           sz,h2     0,a2
  3911.           lmj       x11,spAck
  3912.           sz        nUmtRy
  3913.           j         rfIlest             . sTay iN tHis sTate
  3914. rfIletf.
  3915.           te,u      a0,'F'
  3916.           j         rfIletb
  3917.           te        a1,n
  3918.           j         rfIlea
  3919.           la,u      a0,pAcket
  3920.           lmj       x11,gEtfIl
  3921.           te,u      a0,tRue
  3922.           j         rfIlea
  3923.           la,u      a0,'Y'
  3924.           la        a1,n
  3925.           la,u      a2,pRline
  3926.           sz,h2     0,a2
  3927.           lmj       x11,spAck
  3928.           la        a0,nUmtRy
  3929.           sa        a0,oLdtRy
  3930.           sz        nUmtRy
  3931.           la        a0,n
  3932.           aa,u      a0,1
  3933.           sa,s6     a0,n
  3934.           la,u      a0,'D'
  3935.           j         rfILex
  3936. rfIletb.
  3937.           te,u      a0,'B'
  3938.           j         rfIletfL
  3939.           te        a1,n
  3940.           j         rfIlea
  3941.           la,u      a0,'Y'
  3942.           la        a1,n
  3943.           la,u      a2,pRlIne
  3944.           sz,h2     0,a2
  3945.           lmj       x11,spAck
  3946.           la,u      a0,'C'
  3947.           j         rfIlex
  3948. rfIletfL.
  3949.           te,u      a0,fAlse
  3950.           j         rfIlea
  3951.           la,u      a0,'N'
  3952.           la,u      a2,pAcket
  3953.           sz,h2     0,a2
  3954.           la        a1,n
  3955.           lmj       x11,spAck
  3956.           j         rfIlesT
  3957. rfIlea.
  3958.           la,u      a0,'A'
  3959.           j         rfIlex
  3960. rfIlest.
  3961.           la        a0,sTate
  3962. rfIlex.
  3963.           pOp       a3,a2,a1,x11
  3964.           j         0,x11
  3965. /.
  3966. .
  3967. .
  3968. . ******************************************************************************
  3969. .
  3970. . sfIle   sfIle   sFile   sFile   sfIle   sfILe   sfIle   sfIle   sfIle
  3971. .
  3972. .         sEnd fIle hEader aNd rEad fIrst pAcket oF dAta fRom fIle
  3973. .
  3974. . ******************************************************************************
  3975. sfILe.
  3976.           pUsh      x11,a1,a2
  3977.           la,u      a0,'A'
  3978.           la        a1,nUmtRy
  3979.           aa,u      a1,1
  3980.           tg        a1,mAxtRy
  3981.           j         sfIlex
  3982.           sa        a1,nUmtRy
  3983.           sz,h2     pRlIne
  3984.           dl        a4,eLementnAme
  3985.           la,u      a0,pRlIne
  3986.           lmj       x11,fdtOasc
  3987.           la,u      a1,qUoterpOint
  3988.           lmj       x11,cOncAt
  3989.           dl        a4,vErsionnAme
  3990.           lmj       x11,fdtOasc
  3991.           la,u      a2,pRlIne
  3992.           la,u      a0,'F'
  3993.           la        a1,n
  3994.           lmj       x11,spAck
  3995.           la,u      a2,rEcpKt
  3996.           lmj       x11,rpAck
  3997.           lmj       x11,tEstaCk
  3998.           j         sfIley
  3999.           la        a0,sTate
  4000.           j         sfIlex
  4001. sfIley.
  4002.           sz        nUmtRy
  4003.           la        a0,n
  4004.           aa,u      a0,1
  4005.           aNd,u     a0,077
  4006.           sa        a1,n
  4007.           la,u      a0,pAcket
  4008.           lmj       x11,bUfIll
  4009.           sa        a0,sIze
  4010.           la,u      a0,'D'
  4011. sfIlex.
  4012.           pOp       a2,a1,x11
  4013.           j         0,x11
  4014. qUoterpOint.
  4015.           sTRng     '.'
  4016. /.
  4017. .
  4018. .
  4019. . ******************************************************************************
  4020. .
  4021. . bUfeMp   bUfeMp   bUfeMp   bUfeMp   bUfeMp   bUfeMp   bUfeMp   bUfeMp
  4022. .
  4023. .         gIven a0 = a bUffer......eMpty iT iNto dIsk fILe
  4024. .
  4025. . ******************************************************************************
  4026. bUfeMp.
  4027. . gEnerally
  4028. .         a1=sOurce bUffer sTart aDdress
  4029. .                   sOurce = cOunted sTring
  4030. .         a2=dEstination bUffer sTart aDdress
  4031. .         a3=sOurce cHaracter iNdex
  4032. .         a4=1,dEstination cHaracter iNdex
  4033. .         a5=1,mAximum dEstination cHaracter iNdex
  4034. .         r1=rEpeat cOunt
  4035. .         r2=bIt 8 pRefix
  4036. .
  4037.           pUsh      x8,x9,x11,a0,a1,a2,a3,a4,a5,r1,r2
  4038.           la        a1,cUrrqUote        . rEceive qUote cHaracter
  4039.           tOp,u     a1,0200
  4040.           aa,u      a1,0200
  4041.           sa        a1,rqUotep128       . rqUote wIth bIt 7 sEt
  4042.           la        a1,tYpe+1
  4043.           la        a1,2,a1             . gEt fIle tYpe
  4044.           tne       a1,('BINA')
  4045.           j         bUfeMpbIn           . jUmp iF bInary fIle tYpe
  4046.           la,u      a1,0,a0
  4047.           la        a3,lEngth+1         . sEt a5 tO tHe mAximum nUmber oF
  4048.           lxi,u     a3,1                . cHaracters pEr lIne tO bE wRitten
  4049.           la        a5,a3               . tO tHe oUtput eLement
  4050.           la        a3,eLtiNdex
  4051.           lxi,u     a3,1
  4052.           la        a4,a3
  4053.           la,u      a3,0
  4054.           la,u      a2,eLtbUffer
  4055. bUfeMplP.
  4056.           tg,h2     a3,0,a1
  4057.           j         bUfeMpdN
  4058.           ex        4+lOads,a3
  4059.           aa,u      a3,1
  4060.           lr,u      r1,1                . rEpeat cOunt
  4061.           te        a0,cUrrEpt          . iS a0=rEpeat cHaracter
  4062.           j         bUfempt8
  4063.           tg,h2     a3,0,a1
  4064.           j         bUfeMpsTr           . sTore rEpeat aS dAta..wHat eLse?
  4065.           ex        4+lOads,a3
  4066.           aa,u      a3,1
  4067.           lmj       x11,uNcHar
  4068.           lr        r1,a0               . aCtual rEpeat cOunt
  4069.           tg,h2     a3,0,a1
  4070.           ana,u     a3,1                . gArbage iN...gArbage oUt
  4071.           eX        4+lOads,a3
  4072.           aa,u      a3,1
  4073. bUfeMpt8. tEst fOr 8 bIt pRefix cHaracter
  4074.           lr,u      r2,0                . aSsume nO pRefix
  4075.           te        a0,cUrqbIn          . cHeck iF 8 bIt qUote
  4076.           j         bUfeMptQ            . gO cHeck fOr cOntrol qUote
  4077.           lr,u      r2,0200             . seT 8 bIt pRefix
  4078.           tg,h2     a3,0,a1
  4079.           ana,u     a3,1                . gArnbage iN...gArbage oUt
  4080.           eX        4+lOads,a3
  4081.           aa,u      a3,1
  4082. bUfeMptq. tEst fOr cOntrol qUote
  4083.           te        a0,cUrrqUote
  4084.           j         bUfeMpsTr           . gO sTore tHe cHaracters
  4085.           tg,h2     a3,0,a1
  4086.           ana,u     a3,1                . gArbage iN...gArbage oUt
  4087.           eX        4+lOads,a3
  4088.           aa,u      a3,1
  4089.           te        a0,cUrrqUote
  4090.           tNe       a0,rqUotep128
  4091.           j         bUfeMpsTr
  4092.           te        a0,cUrrEpt
  4093.           tne       a0,cUrrEpt128
  4094.           j         bUfeMpsTr
  4095.           tne       a0,cUrqbIn
  4096.           j         bUfeMpsTr
  4097.           lmj       x11,cTl
  4098. bUfeMpsTr. sTore r1 cOpies oF cHaracter a0+r2
  4099.           top       a0,r2
  4100.           aa        a0,r2               . aDD 8 bIt pRefix
  4101.           j         2+$
  4102.           lmj       x8,pUteLtcHr
  4103.           jgd       r1,$-1
  4104.           j         bUfeMplP
  4105. bUfeMpdN.
  4106.           sa        a4,eLtiNdex
  4107.           pOp       r2,r1,a5,a4,a3,a2,a1,a0,x11,x9,x8
  4108.           j         0,x11
  4109.  
  4110. .
  4111. pUteLtcHr.
  4112. . sTore tHe cHaracter iN a0...cHecking fOr eNd oF lIne <cr><lf>
  4113. .         rEturn tO x8
  4114. .         dEstroys x9,x11
  4115.           tz        rCvsTate
  4116.           j         pUteLtcHr1
  4117.           te,u      a0,012
  4118.           tne,u     a0,015
  4119.           j         pUteLtcHr2
  4120.           lmj       x9,sToreeLtcHr
  4121.           j         0,x8
  4122. pUteLtcHr1. pRevious cHaracter wAs a <cr> or <lf>
  4123.           te,u      a0,012              . cHeck fOr <lf>
  4124.           tne,u     a0,015              . cHeck for <cr>
  4125.           j         $+2
  4126.           j         pUteLtcHr3
  4127. . mAybe eNd oF lIne
  4128.           tne       a0,rCvsTate
  4129.           j         pUteLtcHr4
  4130. . iT iS eNd oF lIne
  4131.           lmj       x11,wRteLt
  4132.           nOp
  4133.           sz        rCvsTate
  4134.           j         0,x8
  4135. pUteLtcHr2. tHis iS a <cr> oR <lf>...rEmember tHat
  4136.           sa        a0,rCvsTate
  4137.           j         0,x8
  4138. pUteLtcHr3. <cr> oR <lf> nOt...rEpeat nOt...fOllowed by <lf> oR <cr>
  4139.           pUsh      a0
  4140.           la        a0,rCvsTate
  4141.           lmj       x9,sToreeLtcHr
  4142.           pop       a0
  4143.           lmj       x9,sToreeLtcHr
  4144.           sz        rCvsTate
  4145.           j         0,x8
  4146. pUteLtcHr4.
  4147.           lmj       x9,sToreeLtcHr
  4148.           j         0,x8
  4149. sToreeLtcHr. sTore a cHaracter iNto eLement lIne bUffer...nO cHecks
  4150. .         x9=rEturn
  4151. .         dEstroys x11
  4152.           tle       a4,a5               . iS tHere rOom fOr a cHaracter?
  4153.           j         sToreeLtcHra        . yEs...
  4154.           tnz       cOntinue+1          . iS a cOntinuation cHaracter sPecified
  4155.           j         sToreeLtcHrb        . nOpe
  4156. . wE hAve tO rEmove tHe lAst cHaracter fRom tHe cUrrent lIne,
  4157. . rEplace iT wIth tHe cOntinuation cHaracter, aNd
  4158. . mOve tHe rEmoved cHaracter aLong wIth tHe cUrrent cHaracter
  4159. . tO tHe nExt lIne.
  4160.           dsc       a3,36
  4161.           dsc       a1,36
  4162.           ana,u     a3,1                . bAck uP oNe cHaracter
  4163.           pUsh      a0                  . sAve cUrrent cHaracter
  4164.           ex        lOads,a3            . gEt lAst cHaracter oN fUll lIne
  4165.           dsc       a1,36
  4166.           pUsh      a0                  . sAve fIrst cHaracter fOr nExt lIne
  4167.           la        a0,cOntinue+1       . gEt cOntinuation cHaracter
  4168.           eX        sTores,*a3          . pUt aT eNd oF lIne tHat oVerflowed
  4169.           dsc       a3,36
  4170.           lmj       x11,wRteLt          . wRite lIne tO eLement
  4171.           nOp       . eRror rEturn
  4172.           pOp       a0                  . cHar pReviously aT eNd oF lIne
  4173.           dsc       a3,36
  4174.           eX        sTores,*a3
  4175.           dsc       a3,36
  4176.           pOp       a0                  . cUrrent cHaracter
  4177.           j         sToreeLtcHra        . pRoceed tO sTore cUrrent cHaracter
  4178. sToreeLtcHrb.
  4179.           lmj       x11,wRteLt          . wRite cUrrent lIne tO eLement
  4180.           nOp
  4181. sToreeLtcHra.
  4182.           dsc       a3,36
  4183.           ex        sTores,*a3
  4184.           dsc       a3,36
  4185.           j         0,x9                . dOne
  4186. bUfeMpbIn. bInary fIle tYpe...cOpy pAcket "aS iS"...nO tRanslation, nO qUotes.
  4187.           la,u      a1,0,a0             . sOurce bUffer sTart aDdress
  4188.           la,u      a2,eLtbUffer        . dEstination bUffer sTart aDdress
  4189.           la        a3,(+1,0)           . dEstination cHaracter iNdex
  4190.           la,h2     a4,0,a1
  4191.           dsl       a4,36               . cOnvert cHaracter cOunt tO ascii
  4192.           di,u      a4,10
  4193.           aa,u      a4,'0'
  4194.           aa,u      a5,'0'
  4195.           la        a0,a4
  4196.           ex        sTores,*a3
  4197.           la        a0,a5
  4198.           ex        sTores,*a3
  4199.           la        a4,a3
  4200.           la,u      a3,0                . sOurce cHaracter iNdex
  4201. bUfeMpbInlP.
  4202.           tg,h2     a3,0,a1
  4203.           j         bUfeMpbIndN
  4204.           eX        4+lOads,a3
  4205.           aa,u      a3,1
  4206.           dsc       a3,36
  4207.           ex        sTores,*a3
  4208.           dsc       a3,36
  4209.           j         bUfeMpbInlP
  4210. bUfeMpbIndN.
  4211.           lmj       x11,wRteLt
  4212.           nOP
  4213.           j         bUfeMpdN
  4214. wRteLt. rEturn +1 iF ok aNd +0 iF eRror
  4215.           pUsh      x11,a0,a1,a2,a3,a5,r1,r2,r3
  4216.           dsc       a3,36
  4217.           and,u     a3,3
  4218.           jz        a4,4+$
  4219.           la,u      a0,' '
  4220.           ex        sTores,*a3
  4221.           j         -4+$
  4222.           la        a0,a3
  4223.           lxi,u     a0,0
  4224.           ssl       a0,2
  4225.           lxi,u     a0,0,a0
  4226.           lxm,u     a0,eLtbUffer
  4227.           lmj       x11,sOrasca$
  4228.           j         wRteLteRr
  4229.           la        a0,8,x10
  4230.           aa,u      a0,1
  4231.           sa        a0,8,x10
  4232. wRteLteRr.
  4233. wRteLtx.
  4234.           pOp       r3,r2,r1,a5,a3,a2,a1,a0,x11
  4235.           la        a4,(+1,0)
  4236.           j         0,x11
  4237. bUfeMpeof. iNsure tHat lAst lIne iS wRitten tO fIle.
  4238.           tnz,h2    eLtiNdex
  4239.           j         0,x11
  4240.           pUsh      x11,a2,a3,a4
  4241.           la        a3,eLtiNdex
  4242.           la,u      a2,eLtbUffer
  4243.           lxi,u     a3,1
  4244.           la        a4,a3
  4245.           lmj       x11,wRteLt
  4246.           noP
  4247.           sa        a4,eLtiNdex
  4248.           pOp       a4,a3,a2,x11
  4249.           j         0,x11
  4250. /.
  4251. .
  4252. .
  4253. . ******************************************************************************
  4254. .
  4255. . bUfIll   bUfIll   bUfIll   bUfIll   bUfIll   bUfIll   bUfIll   bUfILL
  4256. .
  4257. .         rEturns a0=# cHaracters (oR nEgative iF eNd-oF-fIle)
  4258. .
  4259. . ******************************************************************************
  4260. bUfIll.
  4261.           pUsh      x11,a1,a2,a3,a4,a5,r1,r2,r3
  4262.           la        a1,sqUote+1
  4263.           top,u     a1,0200
  4264.           aa,u      a1,0200
  4265.           sa        a1,sqUotep128       . sqUote pLus bIt 7 sEt
  4266.           la        a1,cUrrEpt
  4267.           jz        a1,$+3
  4268.           top,u     a1,0200
  4269.           aa,u      a1,0200
  4270.           sa        a1,cUrrEpt128
  4271.           la        a1,tYpe+1
  4272.           la        a1,2,a1
  4273.           tne       a1,('BINA')
  4274.           j         bUfiLlbIn
  4275.           la        a5,(+1,0)
  4276.           aa        a5,cUrspAklEn
  4277.           ana,u     a5,8
  4278.           lr        r2,sRccHrcNt
  4279.           lx        x11,eltiNdex
  4280.           la,u      a1,eLtbUffer
  4281.           la,u      a2,0,a0
  4282.           lxi,u     x11,1
  4283.           la        a3,(+1,0)
  4284. bUfIllOop.
  4285.           jgd       r2,2+$
  4286.           j         bUfIllmOre
  4287.           eX        lOads,*x11
  4288.           tz        cUrrEpt
  4289.           lmj       x9,bUfiLlrPt        . cHeck fOr rEpeated cHaracters
  4290.           tep,u     a0,0400             . lImit tO 8 bIts
  4291.           ana,u     a0,0400
  4292.           tz        cUrqbIn
  4293.           j         bUfiLlt8
  4294.           la        a4,1+wIdth
  4295.           te,u      a4,8
  4296.           top,u     a0,0200
  4297.           tz,u      0
  4298.           ana,u     a0,0200
  4299.           j         bUfiLlc
  4300. bUfiLlt8.
  4301.           top,u     a0,0200
  4302.           j         bUfiLlc
  4303.           la        a4,a0
  4304.           la        a0,cUrqbIn
  4305.           eX        4+sTores,*a3
  4306.           la        a0,a4
  4307.           ana,u     a0,0200
  4308. bUfiLlc.
  4309.           tnz       cNtrltYpes,a0       . cHeck iF cOntrol cHaracter
  4310.           j         bUfIlltq
  4311.           la        a4,a0
  4312.           la        a0,sqUote+1
  4313.           eX        4+sTores,*a3
  4314.           la        a0,a4
  4315.           sx        x11,a4
  4316.           lmj       x11,cTl
  4317.           lx        x11,a4
  4318.           j         bUfIllsc
  4319. bUfIlltq.
  4320.           te        a0,sqUote+1
  4321.           tne       a0,sqUotep128
  4322.           j         bUfIllqT
  4323.           te        a0,cUrrEpt
  4324.           tne       a0,cUrrEpt128
  4325.           j         bUfIllqT
  4326.           te        a0,cUrqbIn
  4327.           j         bUfIllsc
  4328. bUfIllqT.
  4329.           la        a4,a0
  4330.           la        a0,sqUote+1
  4331.           eX        4+sTores,*a3
  4332.           la        a0,a4
  4333. bUfIllsc.
  4334.           eX        4+sTores,*a3
  4335. bUfiLltf.
  4336.           tle       a3,a5
  4337.           j         bUfiLlOop
  4338.           j         bUfIllxIt
  4339. bUfIllmOre.
  4340.           tz        eLementeof
  4341.           j         bUfIllxIt
  4342.           la        a0,lInenUmber
  4343.           aa,u      a0,1
  4344.           sa        a0,lInenUmber
  4345.           tne,u     a0,1
  4346.           j         bUfIllmr
  4347.           la        a0,sqUote+1
  4348.           eX        4+sTores,*a3
  4349.           la,u      a0,0115
  4350.           eX        4+sTores,*a3
  4351.           la        a0,sqUote+1
  4352.           eX        4+sTores,*a3
  4353.           la,u      a0,0112
  4354.           ex        4+sTores,*a3
  4355. bUfIllmr.
  4356.           pUsh      a2,a3,a5
  4357. bUfIllrEad.
  4358.           la        a0,(+mAxeLtlInsIz,eLtbUffer)
  4359.           lmj       x11,gEtascii
  4360.           j         bUfIlleRr
  4361.           j         bUfIlleof
  4362.           jn        a1,bUfIllrEad
  4363.           ssl       a1,24
  4364.           tg,u      a1,mAxeLtlInsIz
  4365.           la,u      a1,mAxeLtlInsIz
  4366.           msi,u     a1,4
  4367.           lr,u      r2,0,a1
  4368.           lx        x11,(+1,0)
  4369.           pOp       a5,a3,a2
  4370.           la,u      a1,eLtbUffer
  4371.           j         bUfIlltf
  4372. bUfIlleRr.
  4373. bUfIlleof.
  4374.           pOp       a5,a3,a2
  4375.           lna,u     a0,1
  4376.           sa        a0,eLementeof
  4377. bUfIllxIt.
  4378.           la,u      a0,0,a3             . # cHaracters
  4379.           sa,h2     a0,0,a2
  4380.           sr        r2,sRccHrcNt
  4381.           sx        x11,eltiNdex
  4382.           tnz       a0
  4383.           lna,u     a0,1                . eOf sTatus
  4384. bUfiLlrEt.
  4385.           pOp       r3,r2,r1,a5,a4,a3,a2,a1,x11
  4386.           j         0,x11
  4387. .
  4388. bUfiLlrPt. cHeck fOr rEpeated cHaracters
  4389. .         x9=rEturn
  4390. .         dEstroys x8,a4,r1,r3
  4391.           lr        r3,a0               . sAve cHaracter fOr cOmpare
  4392.           la,u      a4,1                . oNly oNe rEpetition sO fAr
  4393.           lr        r1,r2               . tEmporary iNput cOunt
  4394.           lx        x8,x11              . tEmporary iNput iNdex
  4395. bUfiLlrPtlP.
  4396.           tnz       r1                  . aNy cHaracters lEft
  4397.           j         bUfiLlrPtt          . nO...cHeck tHreshold
  4398.           eX        lOads,x8
  4399.           te        a0,r3               . sAme cHaracter aGain?
  4400.           j         bUfIllrPtt          . nO...dIfferent
  4401.           aa,u      a4,1                . iNcrement rEpeat cOunt
  4402.           ax,u      x8,1                . iNcrement iNdex
  4403.           jgd       r1,$+2              . dEcrement cOunt
  4404.           er        eRr$                . cAn't hAppen...I hOpe
  4405.           tle,u     a4,94               . rOom fOr mOre?
  4406.           j         bUfiLlrPtlP         . kEep lOoking
  4407. bUfiLlrPtt. tEst tHreshold vAlue
  4408.           tle,u     a4,4
  4409.           j         bUfiLlrPtx          . nOt eNough tO wOrry aBout
  4410.           la        a0,cUrrEpt          . cUrrent rEpeat pRefix
  4411.           eX        4+sTores,*a3
  4412.           la        a0,a4
  4413.           lmj       x11,tOcHar          .
  4414.           eX        4+sTores,*a3        . rEpeat cOunt
  4415.           lr        r2,r1               . nEw iNput cOunt
  4416.           lx        x11,x8              . nEw iNput iNdex
  4417. bUfiLlrPtx. aLl dOne
  4418.           la        a0,r3               . rEstore a0=cHaracter
  4419.           j         0,x9
  4420. .
  4421. .
  4422. bUfiLlbIn.
  4423.           la        a3,(+1,0)           . dEstination cHaracter iNdex
  4424.           la,u      a2,0,a0             . dEstination bUffer aDdress
  4425.           tz        sRccHrcNt
  4426.           j         bUfiLlbIna          . fIrst iMage rEad bY fIle oPen
  4427. bUfiLlbInrD.
  4428.           pUsh      a2,a3,a5
  4429. bUfIllbInrDa.
  4430.           la        a0,(+mAxeLtlInsIz,eLtbUffer)
  4431.           lmj       x11,gEtascii
  4432.           j         bUfiLlbIneRr
  4433.           j         bUfiLlbIneof
  4434.           jn        a1,bUfiLlbInrDa
  4435.           ssl       a1,24
  4436.           tg,u      a1,mAxeLtlInsIz
  4437.           la,u      a1,mAxeLtlInsIz
  4438.           msi,u     a1,4
  4439.           sa        a1,sRccHrcNt
  4440. bUfiLlbIna.
  4441.           la        a1,sRccHrcNt
  4442.           lx        x11,(+1,0)          . sOurce cHaracter iNdex
  4443.           tle,u     a1,2                . mUst bE aT lEaste 2 cHaracters
  4444.           j         bUfiLlbInbAd        . eRror iN dAta
  4445.           ana,u     a1,1
  4446.           lr,u      r2,0,a1
  4447.           la,u      a1,eLtbUffer
  4448.           ex        lOads,*x11          . cOnvert cHaracter cOunt tO bInary
  4449.           tg,u      a0,'0'
  4450.           tg,u      a0,'9'+1
  4451.           j         bUfiLlbInbAd
  4452.           ana,u     a0,'0'
  4453.           msi,u     a0,10
  4454.           la,u      a5,0,a0
  4455.           ex        lOads,*x11
  4456.           tg,u      a0,'0'
  4457.           tg,u      a0,'9'+1
  4458.           j         bUfiLlbInbAd
  4459.           ana,u     a0,'0'
  4460.           aa,u      a5,0,a0             . # cHar sUpposed tO bE iN lIne
  4461.           tg        a5,r2
  4462.           j         bUfiLlbInbAd        . nOt eNough cHaracters
  4463.           lr        r2,a5
  4464.           pOp       a5,a3,a2
  4465. bUfiLlbInlP.
  4466.           jgd       r2,$+2
  4467.           j         bUfiLlbIndOn
  4468.           eX        lOads,*x11
  4469.           eX        sTores+4,*a3
  4470.           jgd       r2,$-2
  4471. bUfiLlbIndOn.
  4472.           la,u      a0,0,a3             . # cHaracters
  4473.           sa,h2     a0,0,a2             . tO sTring dEscriptor
  4474.           sz        sRccHrcNt
  4475.           j         bUfiLlrEt
  4476. bUfiLLbIneof.
  4477.           pOp       a5,a3,a2
  4478.           sz,h2     0,a2
  4479.           lna,u     a0,1                . iNdicate eof sTatus
  4480.           sa        a0,eLementeof
  4481.           j         bUfiLlrEt
  4482. bUfiLlbIneRr.
  4483.           j         bUfiLlbIneof
  4484. bUfiLlbInbAd.
  4485.           la,h1     a0,bAdbInmSg
  4486.           sa,h2     a0,bAdbInmsg
  4487.           j         bUfiLlbIneof
  4488. /.
  4489. gEtascii.
  4490. . uSed tO cAll gEtas$ aNd fOrced pAss tWo tO
  4491. . aVoid iT's iNsisting oN cOrrection cArds.  tHat dIdn't
  4492. . wOrk wEll wHen tHe eLement wAs nOt "pErfectly sdff fOrmated".
  4493. . sO nOw i dO iT tHe hArd wAy.
  4494. .
  4495. . la a0,(+mAx # wOrds,bUffer aDdress)
  4496. . lmj x11,gEtascii
  4497. . eRror rEturn (sdfi sTatus)
  4498. . eof rEturn
  4499. . nOrmal rEturn
  4500. . dEstroys mInor rEgister sEt
  4501.           pUsh      x11,a0              .
  4502. gEtasciirPt.
  4503.           la,u      a0,fct
  4504.           lmj       x11,sdfi$
  4505.           j         gEtasciieRr
  4506.           j         gEtasciieof
  4507.           j         gEtasciinOr
  4508. gEtasciieOf.
  4509.           pOp       a0,x11
  4510.           j         1,x11               . eNd oF fIle rEturn
  4511. gEtasciieRr.
  4512.           pOp       a0,x11
  4513.           j         0,x11               . eRror rEturn...a5=error cOde fRom i/o
  4514. gEtasciinOr.
  4515.           la        a1,fct+10           . iMage cw
  4516.           jn        a1,gEtasciicw       . cOntrol iMage
  4517.           la,s3     a0,sdflAbelcw       . sdf eLement lAbel
  4518.           te,u      a0,030              . fIeldAta 's'
  4519.           j         gEtasciincYc        . nO cYcling
  4520.           tz,s4     fct+10              .
  4521.           j         gEtasciirPt         . dEleted iMage
  4522. gEtasciincYc.
  4523.           la        a1,lAsttYpecw       . lAst cw tHat sPecifed cHaracter cOde
  4524.           top,u     a1,1                . iS iT ascii
  4525.           j         gEtasciifd          . nope...
  4526.           pOp       a0
  4527.           pUsh      a0
  4528.           la        a4,a0
  4529.           ssl       a4,18               . wOrd cOunt rEquested
  4530.           ssl       a1,24               . aCtual wOrd cOunt
  4531.           tg        a4,a1
  4532.           sa        a1,a4               . gEt tHe sMaller oF tHe tWo
  4533.           lr        r1,a4
  4534.           lxi,u     a0,1
  4535.           la        a1,(+1,sdfibUffer)
  4536.           bt        a0,0,*a1            . mOve the ascii iMage
  4537.           pop       a0,x11
  4538.           la,u      a0,1
  4539.           la        a1,fct+10
  4540.           j         2,x11               . nOrmal rEturn
  4541. gEtasciifd.
  4542.           pOp       a0
  4543.           pUsh      a0
  4544.           la        a2,a0
  4545.           ssl       a0,18
  4546.           lssl      a0,2                . mAx nUmber ascii cHaracters
  4547.           dsl       a0,36
  4548.           di,u      a0,6                . mAx nUmber fIeldAta wOrds
  4549.           la        a4,fct+10
  4550.           ssl       a4,24
  4551.           tg        a0,a4
  4552.           la        a0,a4
  4553.           lxi,u     a2,0                . oUtput bUffer aDdress
  4554.           la,u      a1,sdfibUffer       . iNput bUffer aDdress
  4555.           lmj       x11,fdasc$
  4556.           la        a1,fct+10
  4557.           lssl      a1,12               . dIscard wOrd cOunt
  4558.           dsl       a0,12               . bUild nEw cw
  4559.           la,u      a0,1
  4560.           pOp       x11,x11             . dIscard oLd a0
  4561.           j         2,x11               . nOrmal rEturn
  4562. gEtasciicw.
  4563.           la,s1     a0,fct+10
  4564.           te,u      a0,050
  4565.           j         gEtasciin50
  4566. . THe fOllowing dEleted bEcause oF pRoblem rEported bY
  4567. . Frithjov Iverson of Trondheim University Computing Center.
  4568. . I dIdn't kNow wHat I wAs dOing wHen I fIrst iMplemented tHis...I cOuld
  4569. . fInd nO dEscription oF SDF aNd hAd tO pLay iT bY eAr.  Frithjov
  4570. . sAys tHat a 'S' iN s3 is sUfficient.  SO hEre wE gO.\
  4571. .         la,s3     a0,fct+10
  4572. .         tne,u     a0,030              . iS iT s
  4573. .         la        a0,sdfibUffer
  4574. .         te        a0,(0503011131350)  . check for *sdff*
  4575. .         sz,s3     fct+10              . clear s in label
  4576.           la        a0,fct+10
  4577.           sa        a0,lAsttYpecw
  4578.           sa        a0,sdflAbelcw
  4579.           j         gEtasciirPt
  4580. gEtasciin50.
  4581.           te,u      a0,042
  4582.           j         gEtasciirPt
  4583.           la        a0,fct+10
  4584.           sa        a0,lAsttYpecw
  4585.           j         gEtasciirPt
  4586. /.
  4587. .
  4588. .
  4589. . ******************************************************************************
  4590. .
  4591. . rEcsW   rEcsW   rEcsW   rEcsW   rEcsW   rEcsW   rEcsW   rEcsW   rEcsw
  4592. .
  4593. .         sTate tAble sWitcher fOr rEceiving fIles
  4594. .         rEturns a0 + aLl iS wEll
  4595. .                 a0 - iF eRror oCcurs bEfore tRansfer cOmplete
  4596. .
  4597. . ******************************************************************************
  4598. rEcsw.
  4599.           pUsh      x11,r1
  4600.           la,u      a0,'R'              . iNitial rEceive sTate
  4601.           sa        a0,sTate
  4602.           sz        n                   . iNitial pAcket nUmber
  4603.           sz        nUmtRy              . eRror rEtry cOunt
  4604. rEcsWlOop.
  4605.           la        a0,sTate
  4606.           lx        x11,(+1,rEcsWa-1)
  4607.           lr,u      r1,rEcsWn
  4608.           se,h1     a0,1,*x11
  4609.           nOp
  4610.           lx        x11,0,x11
  4611.           lmj       x11,0,x11
  4612.           sa        a0,sTate
  4613.           j         rEcsWlOop
  4614. rEcsWa.
  4615.           'D',rdAta
  4616.           'F',rfIle
  4617.           'R',riNit
  4618.           'C',rEcsWtRue
  4619.           'A',rEcsWfAlse
  4620.           0,rEcsWfAlse
  4621. rEcsWn    eQu       -1-rEcsWa+$
  4622. rEcsWfAlse.
  4623.           push      a1                                                  . Gunnar
  4624.           la        a0,options                                          . Gunnar
  4625.           and       a0,(1*/('Z'-'R'))                                   . Gunnar
  4626.           jz        a1,$+4                                              . Gunnar
  4627.           la        a0,partbl+32        . receive failed and r-option   . Gunnar
  4628.           or        a0,(0400000,0)      . so set deleted bit            . Gunnar
  4629.           sa        a1,partbl+32                                        . Gunnar
  4630.           pop       a1                                                  . Gunnar
  4631.           la,u      a0,fAlse
  4632.           j         rEcsWx
  4633. rEcsWtRue.
  4634.           la,u      a0,tRue
  4635. rEcsWx.
  4636.           tz        oPeneLt
  4637.           lmj       x11,esOr$
  4638.           sz        oPenelt
  4639.           pOp       r1,x11
  4640.           j         0,x11
  4641. /.
  4642. .
  4643. .
  4644. . ******************************************************************************
  4645. .
  4646. . sEndsW   sEndsW   sEndsW   sEndsW   sEndsW   sEndsW   sEndsW  sEndsW   sEndsW
  4647. .
  4648. .         sTate tAble sWitcher fOr sEnding fIles.
  4649. .         rEturns a0 + aLl iS wEll
  4650. .                 a0 - iF eRror bEfore tRansfer cOmplete
  4651. .
  4652. . ******************************************************************************
  4653. sEndsW.
  4654.           pUsh      x11,r1
  4655.           la,u      a0,'S'
  4656.           sa        a0,sTate            . iNitial sTate
  4657.           sz        n                   pAcket nUmber
  4658.           sz        nUmtRy              . eRror rEtry cOunt
  4659. sEndsWlOop.
  4660.           la        a0,sTate
  4661.           lx        x11,(+1,sEndsWa-1)
  4662.           lr,u      r1,sEndsWn
  4663.           se,h1     a0,1,*x11
  4664.           noP
  4665.           lx        x11,0,x11
  4666.           lmj       x11,0,x11
  4667.           sa        a0,sTate
  4668.           j         sEndsWlOop
  4669. sEndsWa.
  4670.           +'D',sdAta
  4671.           +'F',sfIle
  4672.           +'Z',seof
  4673.           +'S',siNit
  4674.           +'B',sbReak
  4675.           +'C',sEndsWtRue
  4676.           +'A',sEndsWfAlse
  4677.           +0,sEndsWfAlse                . dEfault
  4678. sEndsWn   eQu       -1+$-sEndsWa
  4679. sEndsWfAlse.
  4680.           lna,u     a0,fAlse
  4681. sEndsWx.
  4682.           pOp       r1,x11
  4683.           j         0,x11
  4684. sEndsWtRue.
  4685.           la,u      a0,tRue
  4686.           j         sEndsWx
  4687. /.
  4688. .
  4689. .
  4690. . ******************************************************************************
  4691. .
  4692. . SERVSW   SERVSW   SERVSW   SERVSW   SERVSW   SERVSW   SERVSW   SERVSW   SERVSW
  4693. .
  4694. .         STATE TABLE SWITCHER FOR SERVER MODE
  4695. .         RETURNS A0 + ALL IS WELL
  4696. .                 A0 - IF ERROR OCCURS BEFORE TRANSFER COMPLETE
  4697. .
  4698. . ******************************************************************************
  4699. SERVSW.
  4700.           PUSH      X11,R1
  4701.           LA,U      A0,'V'              . INITIAL SERVER STATE
  4702.           SA        A0,STATE
  4703.           SZ        N                   . INITIAL PACKET NUMBER
  4704.           SZ        NUMTRY              . ERROR RETRY COUNT
  4705. SERVSWLOOP.
  4706.           LA        A0,STATE
  4707.           LX        X11,(+1,SERVSWA-1)
  4708.           LR,U      R1,SERVSWN
  4709.           SE,H1     A0,1,*X11
  4710.           NOP
  4711.           LX        X11,0,X11
  4712.           LMJ       X11,0,X11
  4713.           J         SERVSWLOOP
  4714. SERVSWA.
  4715.           'V',SERVEREAD                 . 'V' IS ARBRITARY ANY LETTER WILL DO
  4716.           'R',SERVERSEND                . THEY WANT TO RECEIVE A FILE
  4717.           'S',sErvrEc                   . THEY WANT TO SEND A FILE
  4718.           'G',SERVGCODE                 . SERVER COMMAND
  4719.           'I',SERVICODE                 . SERVER I PACKET
  4720.           'C',SERVSWCONT                . COMPLETE - CONTINUE
  4721.            +0,SERVSWCONT                . DON'T LET THEM GET AWAY
  4722. SERVSWN    EQU       -1-SERVSWA+$
  4723. SERVSWCONT.
  4724.           LA,U      A0,'V'              . INITIAL SERVER STATE
  4725.           SA        A0,STATE
  4726.           SZ        N                   . INITIAL PACKET NUMBER
  4727.           SZ        NUMTRY              . ERROR RETRY COUNT
  4728.           J         SERVSWLOOP
  4729. .
  4730. .
  4731. sErvrEc. sTart rEceiving fIles
  4732.           pUsh      x11,a0,a1,a2
  4733.           la,u      a0,'N'              . sEnd a naK..fOrce
  4734.           la,u      a2,pAcket           . rEmote tO rEsend tHe
  4735.           sz,h2     0,a2                . 's' pAcket.  oDd wAy
  4736.           la        a1,n                . tO dO tHings bUt iT wOrks.
  4737.           lmj       x11,spAck
  4738.           pOp       a2,a1,a0,x11
  4739.           j         rEcsW
  4740. /.
  4741. .
  4742. . ******************************************************************************
  4743. .
  4744. . SERVERSEND     SERVERSEND   SERVERSEND   SERVERSEND   SERVERSEND   SERVERSEND
  4745. .
  4746. . ******************************************************************************
  4747. .
  4748. SERVERSEND.
  4749.           PUSH      x11,a0,A1,A2,A3,A4,A5,r1,r2,r3
  4750.           sz        npAsses
  4751.           la,u      a0,bspfct
  4752.           lmj       x11,rfti$
  4753.           j         4+$
  4754.           la,u      a0,bspfct
  4755.           la        a1,(bspbUf,1792)
  4756.           lmj       x11,rpfet$
  4757.           j         sErverfeRR
  4758.           fIeldAta
  4759.           dl        a4,('            ')
  4760.           ascii
  4761.           ds        a4,vErsionnAme
  4762.           la,u      a1,pAcket
  4763.           la,u      a3,0
  4764.           lmj       x11,eXtrev
  4765.           jn        a0,sErversNde
  4766.           ds        a4,eLementnAme
  4767.           jz        a0,sErversNdbEg
  4768.           te,u      a0,'.'
  4769.           tne,u     a0,'/'
  4770.           j         sErversNdvEr
  4771.           la,u      a0,2+$
  4772.           j         sErversNde
  4773.           sTrng     'Illegal character in element/version name'
  4774. sErversNdvEr.
  4775.           lmj       x11,eXtrev
  4776.           jn        a0,sErversNde
  4777.           ds        a4,vErsionnAme
  4778. sErversNdbEg.
  4779.           dl        a4,eLementnAme
  4780.           ds        a4,wIldeLt
  4781.           dl        a4,vErsionnAme
  4782.           ds        a4,wIldvEr
  4783. .
  4784.           LMJ       X11,WILDCARDNAM     . GET A FILE NAME
  4785.           J         SERVERSNDOE         . NO FIND IN THIS FILE
  4786.           J         SERVWILDEXIT        . END OF WILDCARD SEND
  4787.           J         SERVERSTRT          . GO TO IT
  4788. SERVERSTRT.
  4789.           LMJ       X11,DOPFS
  4790.           JP        A0,SERVEROPN
  4791.           LA,U      A0,SERVOPNERR1
  4792.           J         SERVERSNDE
  4793. SERVOPNERR1.
  4794.           STRNG     'There is no such symbolic element.'
  4795. SERVEROPN.
  4796.           LMJ       X11,CLRERRMSG
  4797.           LMJ       X11,OPENSOURCE
  4798.           JN        A0,SERVERSNDOE
  4799.           LMJ       X11,SENDSW
  4800.           TE,U      A0,TRUE
  4801.           J         SERVERSNDSE
  4802. SERVWILDEXIT.
  4803.           POP       r3,r2,r1,a5,A4,A3,A2,a1,a0,X11
  4804.           LA,U      A0,'C'
  4805.           SA        A0,STATE
  4806.           J         0,X11
  4807. sErverfeRr.
  4808.           la,u      a0,2+$
  4809.           j         sErvErsNde
  4810.           sTrng     'Error opening 1100 file table of contents'
  4811. SERVERSNDOE.
  4812.           LA,U      A0,SERVOPNERR2
  4813.           J         SERVERSNDE
  4814. SERVOPNERR2.
  4815.           STRNG     'Cannot open the symbolic element.'
  4816. SERVERSNDSE.
  4817.           LA,U      A0,SERVOPNERR3
  4818.           J         SERVERSNDE
  4819. SERVOPNERR3.
  4820.           STRNG     'Send error.'
  4821. SERVERSNDE.
  4822.           SA        A0,A2
  4823.           LA,U      A0,'E'
  4824.           LA        A1,N
  4825.           LMJ       X11,SPACK
  4826.           LA        A0,N
  4827.           AA,U      A0,1
  4828.           SA,S6     A0,N
  4829.           POP       r3,r2,r2,,A4,A3,A2,a1,a0,X11
  4830.           LA,U      A0,'C'              . DO NOT ABORT THE SERVER
  4831.           SA        A0,STATE
  4832.           J         0,X11
  4833. /.
  4834. .
  4835. . ******************************************************************************
  4836. .
  4837. . SERVGCODE     SERVGCODE   SERVGCODE   SERVGCODE   SERVGCODE   SERVGCODE
  4838. .
  4839. . ******************************************************************************
  4840. .
  4841. SERVGCODE.
  4842.           PUSH      A1,X11
  4843.           LA,U      A0,PACKET
  4844.           LA,Q1     A0,1,A0
  4845.           LA        A1,('    ')
  4846.           DSC       A0,9
  4847.           TE        A1,('L   ')
  4848.           J         2+$
  4849.           J         SRVLOGOUT
  4850.           TE        A1,('F   ')
  4851.           J         2+$
  4852.           J         SRVFINISH
  4853. .
  4854.           LA,U      A0,'E'
  4855.           LA        A1,N
  4856.           LA,U      A2,SERVERGERR
  4857.           LMJ       X11,SPACK
  4858.           LA        A0,N
  4859.           AA,U      A0,1
  4860.           SA,S6     A0,N
  4861.           LA,U      A0,'C'
  4862.           SA        A0,STATE
  4863.           POP       X11,A1
  4864.           J         0,X11
  4865. SERVERGERR.
  4866.           STRNG     'SERVER - Unknown G packet type'
  4867. SRVFINISH.
  4868.           LA,U      A0,FALSE
  4869.           SA        A0,LOGOUTFLAG       . DON'T LOG THEM OUT
  4870.           J         SERVERGX
  4871. SRVLOGOUT.
  4872.           LA,U      A0,TRUE
  4873.           SA        A0,LOGOUTFLAG       . LOG THEM OUT
  4874. SERVERGX.
  4875.           LA,U      A0,'Y'              . ACK IT
  4876.           LA        A1,N
  4877.           LA,U      A2,PACKET
  4878.           LMJ       X11,SPACK
  4879.           LA        A0,N
  4880.           AA,U      A0,1
  4881.           SA,S6     A0,N
  4882.           LA,U      A0,TRUE
  4883.           POP       X11,A1
  4884. .
  4885.           TZ        OPENELT
  4886.           LMJ       X11,ESOR$
  4887.           SZ        OPENELT
  4888.           POP       R1,X11
  4889.           J         0,X11
  4890. .
  4891. /.
  4892. .
  4893. . ******************************************************************************
  4894. .
  4895. . SERVICODE     SERVICODE   SERVICODE   SERVICODE   SERVICODE   SERVICODE
  4896. .
  4897. .          PROCESS THE I PACKET SENT
  4898. .
  4899. . ******************************************************************************
  4900. .
  4901. SERVICODE.
  4902.           PUSH      A1,A2,X11
  4903.           LA,U      A0,PACKET
  4904.           LA,U      A1,0
  4905.           LMJ       X11,RPAR
  4906.           la        a0,hIsqbIn          . hIs 8 bIt qUote cHaracter
  4907.           la,u      a1,'N'              . aSsume nO 8 bIt qUoteing
  4908.           tg,u      a0,33
  4909.           tg,u      a0,63
  4910.           tg,u      a0,96
  4911.           tg,u      a0,127
  4912.           j         3+$
  4913.           la        a1,a0
  4914.           j         6+$
  4915.           te,u      a0,'Y'
  4916.           j         4+$
  4917.           la        a0,wIdth+1
  4918.           te,u      a0,8
  4919.           la,u      a1,'&'              .
  4920.           la        a0,qUote8+1
  4921.           la        a0,2,a0
  4922.           tne       a0,('OFF ')
  4923.           la,u      a1,'N'
  4924.           sa        a1,mYqbIn
  4925.           tne,u     a1,'N'
  4926.           la,u      a1,0
  4927.           sa        a1,cUrqbIn
  4928.           la,u      a1,'N'
  4929.           la        a0,hIsrEpt          . hIs rEpeat cHaracter
  4930.           tg,u      a0,33
  4931.           tg,u      a0,63
  4932.           tg,u      a0,96
  4933.           tg,u      a0,127
  4934.           j         2+$
  4935.           la        a1,a0
  4936.           la        a0,rEpeat+1
  4937.           la        a0,2,a0
  4938.           tne       a0,('OFF ')
  4939.           la,u      a1,'N'
  4940.           sa        a1,mYrEpt
  4941.           tne,u     a1,'N'
  4942.           la,u      a1,0
  4943.           sa        a1,cUrrEpt
  4944.           la,u      a0,pAcket
  4945.           LMJ       X11,SPAR
  4946.           LA,U      A0,'Y'
  4947.           LA        A1,N
  4948.           LA,U      A2,PACKET
  4949.           LMJ       X11,SPACK
  4950.           LA        A0,NUMTRY
  4951.           SA        A0,OLDTRY
  4952.           SZ        NUMTRY
  4953.           LA        A0,N
  4954.           AA,U      A0,1
  4955.           SA,S6     A0,N
  4956.           LA,U      A0,'C'
  4957.           SA        A0,STATE
  4958.           POP       X11,A2,A1
  4959.           J         0,X11
  4960. /.
  4961. .
  4962. .
  4963. . ******************************************************************************
  4964. .
  4965. .  SERVEREAD   SERVEREAD   SERVEREAD   SERVEREAD   SERVEREAD   SERVEREAD
  4966. .
  4967. .         READ SERVER COMMANDS
  4968. .
  4969. . ******************************************************************************
  4970. SERVEREAD.
  4971.           PUSH      X11,A1,A2
  4972. sErverEada.
  4973.           LA,U      A2,PACKET
  4974.           LMJ       X11,RPACK
  4975.           TNZ       A0                  . TEST FOR TIME OUTS
  4976.           J         sErverEada          . IGNORE THEM
  4977.           TE,U      A0,'S'              . DO THEY WANT TO SEND
  4978.           J         2+$
  4979.           J         SERVERCMD
  4980.           TE,U      A0,'R'              . DO THEY WANT TO RECEIVE
  4981.           J         2+$
  4982.           J         SERVERCMD
  4983.           TE,U      A0,'I'              . I PACKET
  4984.           J         2+$
  4985.           J         SERVERCMD
  4986.           TE,U      A0,'G'              . DO THEY WANT US TO LOGOUT
  4987.           J         SERVERV
  4988. SERVERCMD.
  4989.           SA        A0,STATE
  4990.           LA        A0,STATE
  4991.           POP       A2,A1,X11
  4992.           J         0,X11
  4993. SERVERV.
  4994.           LA,U      A0,'E'
  4995.           LA        A1,N
  4996.           LA,U      A2,SERVERVMSG
  4997.           LMJ       X11,SPACK
  4998.           LA        A0,N
  4999.           AA,U      A0,1
  5000.           SA,S6     A0,N
  5001.           LA,U      A0,'C'
  5002.           J         SERVERCMD
  5003. SERVERVMSG.
  5004.           STRNG     'Unimplemented server command'
  5005. .
  5006. .
  5007. . ******************************************************************************
  5008. .
  5009. . rdAta   rdAta   rdAta   rdAta   rdAta   rdAta   rdAta   rdAta   rdAta
  5010. .
  5011. . ******************************************************************************
  5012. rdAta.
  5013.           pUsh      x11,a1,a2,a3,a4,a5,r1,r2,r3
  5014.           la        a0,nUmtRy
  5015.           aa,u      a0,1
  5016.           sa        a0,nUmtRy
  5017.           tg        a0,mAxtRy
  5018.           j         rdAtatImoUt
  5019.           la,u      a2,pAcket
  5020.           lmj       x11,rpAck
  5021.           te,u      a0,'D'
  5022.           j         rdAtatf
  5023.           tne       a1,n
  5024.           j         rdAtad1
  5025.           la        a0,oLdtRy
  5026.           aa,u      a0,1
  5027.           sa        a0,oLdtRy
  5028.           tg        a0,mAxtRy
  5029.           j         rdAtaa
  5030.           la        a0,n
  5031.           ana,u     a0,1
  5032.           jp        a0,2+$
  5033.           la,u      a0,63
  5034.           te        a0,a1
  5035.           j         rdAtaa
  5036.           la,u      a0,'Y'
  5037.           sz,h2     prline              . From Frithjov Iverson         heim
  5038.           l,u       a2,prline           . at Trondheim University
  5039. .         la,u      a2,6
  5040. .         sa,h2     a2,pAcket
  5041. .         la,u      a2,pAcket
  5042.           lmj       x11,spAck
  5043.           sz        nUmtRy
  5044.           j         rdAtasT
  5045. rdAtad1.
  5046.           la,u      a0,pAcket
  5047.           lmj       x11,bUfeMp
  5048.           sz,h2     pRlIne
  5049.           la,u      a0,'Y'
  5050.           la        a1,n
  5051.           la,u      a2,pRline
  5052.           lmj       x11,sPack
  5053.           la        a0,nUmtRy
  5054.           sa        a0,oLdtRy
  5055.           sz        nUmtRy
  5056.           la        a0,n
  5057.           aa,u      a0,1
  5058.           sa,s6     a0,n
  5059.           la,u      a0,'D'
  5060.           j         rdAtax
  5061. rdAtatf.
  5062.           te,u      a0,'F'
  5063.           j         rdAtatz
  5064.           la        a0,oLdtRy
  5065.           aa,u      a0,1
  5066.           sa        a0,oLdtRy
  5067.           tg        a0,mAxtRy
  5068.           j         rdAtaa
  5069.           la        a0,n
  5070.           ana,u     a0,1
  5071.           jp        a0,2+$
  5072.           la,u      a0,63
  5073.           te        a0,a1
  5074.           j         rdAtaa
  5075.           sz,h2     pRlIne
  5076.           la,u      a0,'Y'
  5077.           lmj       x11,spAck
  5078.           sz        nuMtRy
  5079.           j         rdAtasT
  5080. rdAtatz.
  5081.           te,u      a0,'Z'
  5082.           j         rdAtafL
  5083.           te        a1,n
  5084.           j         rdAtaa
  5085.           sz,h2     pRliNe
  5086.           la,u      a2,pRlINe
  5087.           la        a1,n
  5088.           la,u      a0,'Y'
  5089.           lmj       x11,spAck
  5090.           lmj       x11,bUfeMpeof       . iN cAse nO <cr><lf>
  5091.           la        a0,oPeneLt
  5092.           sz        oPeneLt
  5093.           jz        a0,3+$
  5094.           lmj       x11,esor$
  5095.           j         rdAtaa
  5096.           la        a0,n
  5097.           aa,u      a0,1
  5098.           sa,s6     a0,n
  5099.           la,u      a0,'F'
  5100.           j         rdAtax
  5101. rdAtafL.
  5102.           te,u      a0,fAlse
  5103.           j         rdAtasT
  5104.           la,u      a0,'N'
  5105.           la,u      a2,pAcket
  5106.           sz,h2     0,a2
  5107.           la        a1,n
  5108.           lmj       x11,spAck
  5109.           j         rdAtasT
  5110. rdAtatImoUt.
  5111.           la,h1     a0,tImoUtmSg
  5112.           sa,h2     a0,tImoUtmSg
  5113. rdAtaa.
  5114.           la,u      a0,'A'
  5115.           j         rdAtax
  5116. rdAtasT.
  5117.           la        a0,sTate
  5118. rdAtax.
  5119.           pOp       r3,r2,r1,a5,a4,a3,a2,a1,x11
  5120.           j         0,x11
  5121. /.
  5122. .
  5123. .
  5124. . ******************************************************************************
  5125. .
  5126. . sdAta   sdAta   sdAta   sdAta   sdAta   sdAta   sdAta   sdAta   sdAta
  5127. .
  5128. .         sEnd oNe pAcket oF dAta fRom "pAcket", rEfill, aNd rEturn nEw sTate
  5129. .
  5130. . ******************************************************************************
  5131. sdAta.
  5132.           pUsh      x11,a1,a2
  5133.           la        a0,nUmtRy
  5134.           aa,u      a0,1
  5135.           sa        a0,nUmtRy
  5136.           tg        a0,mAxtRy
  5137.           j         sdAtaa
  5138.           lmj       x11,tImedrEdpUr     . pUrge aNy pIled uP iNput
  5139.           la,u      a0,'D'
  5140.           la        a1,n
  5141.           la,u      a2,pAcket
  5142.           lmj       x11,spAck
  5143.           sa        a0,sIze
  5144.           la,u      a2,rEcpKt
  5145.           lmj       x11,rpAck
  5146.           lmj       x11,tEstaCk
  5147.           j         sdAtaok
  5148. sDatasT.
  5149.           la        a0,sTate            . sAme oLd sTate
  5150. sdAtarT.
  5151.           pOp       a2,a1,x11
  5152.           j         0,x11
  5153. sdAtaa.
  5154.           la,u      a0,'A'              . aBort
  5155.           j         sdAtarT
  5156. sdAtaok.
  5157.           la,u      a0,pAcket
  5158.           lmj       x11,bUfIll
  5159.           sa        a0,sIze
  5160.           sz        nUmtRy
  5161.           la        a0,n
  5162.           aa,u      a0,1
  5163.           sa,s6     a0,n
  5164.           tn        sIze                . eof????
  5165.           j         sdAtasT             . sTay iN dAta sTate
  5166.           la,u      a0,'Z'              . eNd oF fIle sTate
  5167.           j         sdAtarT
  5168. /.
  5169. .
  5170. .
  5171. . ******************************************************************************
  5172. .
  5173. . seof   seof   seof   seof   seof   seof   seof   seof   seof   seof
  5174. .
  5175. .         sEnd eNd oF fIle aNd cLose tHe iNput fIle
  5176. .
  5177. . ******************************************************************************
  5178. seof.
  5179.           pUsh      x11,a1,a2,a3,a4,a5,r1,r2,r3
  5180.           la        a0,nUmtRy
  5181.           aa,u      a0,1
  5182.           sa        a0,nUmtRy
  5183.           tg        a0,mAxtRy
  5184.           j         seofeRr
  5185.           sz,h2     pRlIne              . eMpty dAta sTring
  5186.           la,u      a0,'Z'
  5187.           la        a1,n
  5188.           la,u      a2,pAcket
  5189.           lmj       x11,spAck
  5190.           la,u      a2,rEcpKt
  5191.           lmj       x11,rpAck           . gEt rEply
  5192.           lmj       x11,tEstaCk
  5193.           j         seofok
  5194.           la        a0,sTate            . sTay iN sAme sTate
  5195.           j         seofxIt
  5196. seofeRr.
  5197.           la,u      a0,'A'              . aBort
  5198.           j         seofxIt
  5199. seOfok.
  5200.           sz        nUmtry
  5201.           la        a0,n
  5202.           aa,u      a0,1
  5203.           sa,s6     a0,n
  5204.           la,u      a0,fct
  5205.           lmj       x11,sdfic$
  5206.           J         SEOFCHECK           . CHECK FOR ANOTHER FILE
  5207. SEOFDONE.
  5208.           la,u      a0,'B'
  5209.           J         SEOFXIT
  5210. SEOFCHECK.
  5211.           ON        DELETEOPTION                                        . Gunnar
  5212.           L         A0,OPTIONS                                          . Gunnar
  5213.           AND       A0,(1*/('Z'-'D'))   . IF D-OPTION SET               . Gunnar
  5214.           JZ        A1,SEOFTESTNEXT                                     . Gunnar
  5215.           L,U       A0,PFSPKT                                           . Gunnar
  5216.           ER        PFD$                                                . Gunnar
  5217. SEOFTESTNEXT                                                            . Gunnar
  5218.           OFF       DELETEOPTION                                        . Gunnar
  5219.           LMJ       X11,WILDCARDNAM
  5220.           J         SEOFDONE
  5221.           J         SEOFDONE
  5222.           LMJ       X11,DOPFS
  5223.           JP        A0,SEOFOPN
  5224.           J         SEOFDONE
  5225. SEOFOPN.
  5226.           LMJ       X11,CLRERRMSG
  5227.           LMJ       X11,OPENSOURCE
  5228.           JN        A0,SEOFDONE
  5229.           LA,U      A0,'F'
  5230. seofxIt.
  5231.           pOp       r3,r2,r1,a5,a4,a3,a2,a1,x11
  5232.           j         0,x11
  5233. /.
  5234. .
  5235. .
  5236. . ******************************************************************************
  5237. .
  5238. . sbReak   sbReak   sbReak   sbReak   sbReak   sbReak   sbReak   sbReak
  5239. .
  5240. .         sEnd tRansmission bReak mEssage  (tYpe 'B')
  5241. .
  5242. . ******************************************************************************
  5243. sbReak.
  5244.           pUsh      x11,a1,a2
  5245.           sz,h2     pAcket              . eMpty dAta sTring
  5246.           la        a0,nUmtry
  5247.           aa,u      a0,1
  5248.           sa        a0,nUmtry
  5249.           tg        a0,mAxtry
  5250.           j         sbReakeRr
  5251.           la,u      a0,'B'
  5252.           la        a1,n
  5253.           la,u      a2,pAcket
  5254.           lmj       x11,spAck
  5255.           la,u      a2,rEcpKt
  5256.           lmj       x11,rpAck
  5257.           lmj       x11,tEstaCk
  5258.           j         sbReakok
  5259.           la        a0,sTate            . sTay iN sAme sTate..tRy aGain
  5260.           j         sbReakxIt
  5261. sbReakeRr.
  5262.           la,u      a0,'A'
  5263.           j         sbReakxIt
  5264. sbReakok.
  5265.           sz        nUmtRy
  5266.           la        a0,n
  5267.           aa,u      a0,1
  5268.           sa,s6     a0,n
  5269.           la,u      a0,'C'              . cOmplete
  5270. sbReakxIt.
  5271.           pOp       a2,a1,x11
  5272.           j         0,x11
  5273. /.
  5274. .
  5275. .
  5276. .
  5277. . ******************************************************************************
  5278. .
  5279. .                   tOcHar
  5280. .                   cOnverts a nUmber tO a pRintable cHaracter bY aDding
  5281. .                   aN ascii sPace.
  5282. .
  5283. . ******************************************************************************
  5284. tOcHar.
  5285.           aa,u      a0,' '
  5286.           j         0,x11
  5287. .
  5288. .
  5289. .
  5290. . *****************************************************************************
  5291. .
  5292. .                   uNcHar
  5293. .                   tHe iNverse oF tOcHar.
  5294. .
  5295. . ******************************************************************************
  5296. uNcHar.
  5297.           ana,u     a0,' '
  5298.           j         0,x11
  5299. .
  5300. .
  5301. . ******************************************************************************
  5302. .
  5303. .         cTl
  5304. .         tUrns a cOntrol cHaracter iNto a pRintable cHaracter bY
  5305. .         tOggling tHe cOntrol bIt. (eg: A bEcomes <cNtrl-A>).
  5306. .         iT iS iT's oWn iNverse.
  5307. .
  5308. . ******************************************************************************
  5309. cTl.
  5310.           pUsh      a1
  5311.           xor,u     a0,0100
  5312.           la        a0,a1
  5313.           pOp       a1
  5314.           j         0,x11
  5315. /.
  5316. .
  5317. .
  5318. . ******************************************************************************
  5319. .
  5320. . spAr   spAr   spAr   spAr   spAr   spAr   spAr   spAr   spAr   spAr   spAr
  5321. .
  5322. .         fIlls sTring (a0) wIth sEnd-iNit pArameters.
  5323. .
  5324. . ******************************************************************************
  5325. spAr.
  5326.           pUsh      x11,a0,a2
  5327.           la,u      a2,0,a0
  5328.           la,h1     a0,0,a2
  5329.           tle,u     a0,6
  5330.           er        aBort$
  5331.           la,u      a0,9
  5332.           sa,h2     a0,0,a2
  5333.           la        a0,rpAklEn+1        . lArgest pAcket i cAn rEceive
  5334.           lmj       x11,tOcHar
  5335.           eX        4+sTores
  5336.           la        a0,rtImoUt+1        . wHen i wAnt tO bE tImed oUt
  5337.           lmj       x11,tOcHar
  5338.           eX        5+sTores
  5339.           la        a0,rpAd+1           . hOw mUch pAdding i nEed
  5340.           lmj       x11,tOcHar
  5341.           eX        6+sTores
  5342.           la        a0,rpAdcHr+1        . pAddind cHaracter i wAnt
  5343.           lmj       x11,cTl
  5344.           eX        7+sTores
  5345.           la        a0,reNdlIn+1        . eNd oF lIne cHaracter i wAnt
  5346.           lmj       x11,tOcHar
  5347.           eX        8+sTores
  5348.           la        a0,sqUote+1         . cOntrol-qUote cHaracter i sEnd
  5349.           eX        9+sTores
  5350.           la        a0,mYqbIn           . mY 8 bIt qUote cHaracter
  5351.           eX        10+sTores
  5352.           la,u      a0,'1'              . mY cHecksum tYpe
  5353.           eX        11+sTores
  5354.           la        a0,mYrEpt           . mY rEpeat cHaracter
  5355.           eX        12+sTores
  5356.           pOp       a2,a0,x11
  5357.           j         0,x11
  5358. /.
  5359. .
  5360. .
  5361. . ******************************************************************************
  5362. .
  5363. . rpAr   rpAr   rpAr   rpAr   rpAr   rpAr   rpAr   rpAr   rpAr   rpAr   rpAr
  5364. .
  5365. .         gEt tHe oTher sIde's sEnd-iNit pArameters.
  5366. .
  5367. .         iNput is:
  5368. .                   a0=sTring aDdress
  5369. .                   a1=cHaracter iNdex oF sTart cHaracter
  5370. .
  5371. . ******************************************************************************
  5372. rpAr.
  5373.           pUsh      x11,a0,a1,a3,a4
  5374.           sz        hIsqbIn             . hIs 8 bIt pRefix cHaracter
  5375.           sz        hIsrEpt             . hIs rEpeat cHaracter
  5376.           la,u      a3,0
  5377.           la,u      a1,0,a0
  5378.           tg,h2     a3,0,a1
  5379.           j         rpArx
  5380.           eX        4+lOads,a3
  5381.           aa,u      a3,1
  5382.           lmj       x11,uNcHar
  5383.           tg        a0,spAklEn+1
  5384.           la        a0,spAklEn+1
  5385.           sa        a0,cUrspAklEn       . mAximum sEnd pAcket sIze
  5386.           tg,h2     a3,0,a1
  5387.           j         rpArx
  5388.           eX        4+lOads,a3
  5389.           aa,u      a3,1
  5390.           lmj       x11,uNcHar
  5391.           lx,u      x11,stImoUt
  5392.           la,h1     a4,2,x11            . lEngth oF nAme
  5393.           ssl       a4,2                . nUmber oF wOrds
  5394.           ax        x11,a4
  5395.           la        a4,5,x11            . gEt dEfault fOr sEnd tImeout
  5396.           tne       a4,cUrstImoUt       . oNly dEfault cAn bE cHanged
  5397.                                         . bY nEgotiations
  5398.           sa        a0,cUrstimoUt       . wHen i sHould tIme oUt
  5399.           tg,h2     a3,0,a1
  5400.           j         rpArx
  5401.           eX        4+lOads,a3
  5402.           aa,u      a3,1
  5403.           lmj       x11,uNcHar
  5404.           sa        a0,cUrspAd          . nUmber oF pAds tO sEnd
  5405.           tg,h2     a3,0,a1
  5406.           j         rpArx
  5407.           eX        4+lOads,a3
  5408.           aa,u      a3,1
  5409.           lmj       x11,cTl
  5410.           sa        a0,cUrspAdcHr       . pAd cHaracter tO sEnd
  5411.           tg,h2     a3,0,a1
  5412.           j         rpArx
  5413.           eX        4+lOads,a3
  5414.           aa,u      a3,1
  5415.           lmj       x11,uNcHar
  5416.           sa        a0,cUrseNdlIn       . eol cHaracter i mUst sEnd
  5417.           tg,h2     a3,0,a1
  5418.           j         rpArx
  5419.           eX        4+lOads,a3
  5420.           aa,u      a3,1
  5421.           sa        a0,cUrrqUote        . iNcoming dAta qUote cHaracter
  5422.           tg,h2     a3,0,a1
  5423.           j         rpArx
  5424.           ex        4+lOads,a3
  5425.           aa,u      a3,1
  5426.           sa        a0,hIsqbIn          . hIs 8 bIt pRefix
  5427.           tg,h2     a3,0,a1
  5428.           j         rpArx
  5429.           aa,u      a3,1                . hIs cHecksum tYpe
  5430.           tg,h2     a3,0,a1
  5431.           j         rpArx
  5432.           ex        4+lOads,a3
  5433.           aa,u      a3,1
  5434.           sa        a0,hIsrEpt          . hIs rEpeat cHaracter
  5435. rpArx.
  5436.           pOp       a4,a3,a1,a0,x11
  5437.           j         0,x11
  5438. /.
  5439. .
  5440. .
  5441. . ******************************************************************************
  5442. .
  5443. . rpAck   rpAck   rpAck   rpAck   rpAck   rpAck   rpAck   rpAck   rpAck
  5444. .         rEceive a pAcket.
  5445. .          gIven a2=sTring tO rEceive tHe pAcket
  5446. .         rEturns
  5447. .                   a0 sEt tO pAcket tYpe (oR zEro if rEad fAilure)
  5448. .                   a1 sEt tO pAcket nUmber
  5449. .
  5450. . ******************************************************************************
  5451. rpAck.
  5452.           pUsh      x11,a0,a1,a2,a3,a4,a5,r1,r2
  5453. rpAck$nUm  eQuf     6,x10
  5454. rpAck$dAta eQuf     5,x10
  5455. rpAck$tYpe eQuf     7,x10
  5456. rpAckrEad.
  5457.           la        a0,cUrstImoUt
  5458.           lmj       x11,tImedrEad
  5459.           j         rpAckeof
  5460.           j         rpAcktImoUt
  5461.           j         2+$                 . lOst dAta
  5462.           j         rpAckfAil
  5463.           la,u      a0,3+iNput
  5464.           lmj       x11,dEbUggeri
  5465.           la        a3,(+1,0)           . lOad iNdex
  5466.           la,u      a1,3+iNput          . iNput dAta aDdress
  5467.           lr,h2     r1,2+iNput          . # cHaracters iNput
  5468.           j         rpAcksRch
  5469. rpAckssT.
  5470.           eX        lOads,*a3
  5471.           tep,u     a0,0200
  5472.           ana,u     a0,0200             . cLear pArity bIt
  5473.           tne       a0,rsTart+1
  5474.           j         rpAcksYnc           . fOund sYnc cHaracter
  5475. rpAcksRch.
  5476.           jGd       r1,rpAckssT
  5477.           sz,h1     2+iNput
  5478.           j         rpAckrEad           . iGnore lInes wIthout sYnc cHar
  5479. rpAcksYnc.
  5480.           jgd       r1,2+$
  5481.           j         rpAckeRr
  5482.           eX        lOads,*a3           . lEngth
  5483.           la        a5,a0               . sTart oF cHecksUm
  5484.           tne       a0,rsTart+1
  5485.           j         rpAcksYnc
  5486.           lmj       x11,uNcHar
  5487.           tg,u      a0,96
  5488.           j         rpAckeRr
  5489.           ana,u     a0,3
  5490.           jn        a0,rpAckeRr
  5491.           lr        r2,a0               . nUmber oF dAta cHaracters
  5492.           jgd       r1,2+$
  5493.           j         rpAckeRr
  5494.           eX        lOads,*a3           . pAcket nUmber
  5495.           aa        a5,a0               . cHecksUm
  5496.           tne       a0,rsTart+1
  5497.           j         rpAcksYnc
  5498.           lmj       x11,uNcHar
  5499.           sa        a0,rpAck$nUm
  5500.           jgd       r1,2+$
  5501.           j         rpAckeRr
  5502.           eX        lOads,*a3           . pAcket tYpe
  5503.           tne       a0,rsTart+1
  5504.           j         rpAcksYnc
  5505.           s         a0,rpAck$tYpe
  5506.           aa        a5,a0               . aDd tO cHecksUm
  5507.           lx        x11,(+1,4)          . sTores iNdex
  5508.           la        a2,rpAck$dAta
  5509.           sr,h2     r2,0,a2             . lEngth oF rEceived sTring
  5510. rpAckdAta.
  5511.           jgd       r2,2+$
  5512.           j         rpAckdd             . dAta dOne
  5513.           jgd       r1,3+$
  5514.                                         . Treat the case when the read  . Gunnar
  5515.                                         . string was shorter than the   . Gunnar
  5516.                                         . transmitted packet.  This     . Gunnar
  5517.                                         . can occur when the checksum   . Gunnar
  5518.                                         . is SPACE, since sperry kindly . Gunnar
  5519.                                         . removes trailing spaces and   . Gunnar
  5520.                                         . then fills with spaces to     . Gunnar
  5521.                                         . the next word limit.          . Gunnar
  5522.                                         . Nice, isn't it?               . Gunnar
  5523.           la,u      a0,' '
  5524.           j         2+$
  5525.           eX        lOads,*a3
  5526.           tne       a0,rsTart+1
  5527.           j         rpAcksYnc
  5528.           aa        a5,a0               . aDd tO cHecksUm
  5529.           eX        sTores,*x11         . mOve tHe dAta
  5530.           j         rpAckdAta
  5531. rpAckdd.
  5532.           la        a0,a5
  5533.           lssl      a5,28
  5534.           ssl       a5,34
  5535.           aa        a0,a5
  5536.           lssl      a0,30
  5537.           ssl       a0,30
  5538.           lmj       x11,tOcHar
  5539.           la        a5,a0
  5540.           jgd       r1,3+$
  5541.           la,u      a0,' '
  5542.           j         2+$
  5543.           eX        lOads,*a3
  5544.           te        a0,a5
  5545.           j         rpAckeRr            . bAd cHecksUm
  5546.           lmj       x11,tEsteRrpRob
  5547.           j         rpAckeRr
  5548.           j         rpAckxIt
  5549. rpAckeof.
  5550. rpAcktImoUt.
  5551. rpAckfAil.
  5552. rpAckeRr.
  5553.           la,u      a0,fAlse
  5554.           sa        a0,rpAck$tYpe
  5555. rpAckxIt.
  5556.           sz,h1     2+iNput
  5557.           pOp       r2,r1,a5,a4,a3,a2,a1,a0,x11
  5558.           j         0,x11
  5559. /.
  5560. .
  5561. .
  5562. . ******************************************************************************
  5563. .
  5564. . spAck   spAck   spAck   spAck   spAck   spAck   spAck   spAck   spAck   spAck
  5565. .
  5566. .         sEnd a pAcket.
  5567. .         gIven
  5568. .                   a0=pAcket tYpe
  5569. .                   a1=pAcket nUmber
  5570. .                   a2=dAta sTring
  5571. . *****************************************************************************
  5572. spAck.
  5573.           pUsh      x11,a0,a1,a2,a3,a5,r1
  5574. spAck$tYpe eQuf     5,x10
  5575. spAck$nUm  eQuf     4,x10
  5576. spAck$dAta eQuf     3,x10
  5577.           la,u      a2,spAckbUffer
  5578.           la        a3,(+1,0)
  5579.           lr        r1,cUrspAd          . # pAd cHaracters
  5580.           la        a0,cUrspAdcHr       . pAd cHaracter
  5581.           j         2+$
  5582.           eX        4+sTores,*a3
  5583.           jgd       r1,$-1
  5584.           la        a0,ssTart+1
  5585.           eX        4+sTores,*a3
  5586.           la        a1,spAck$dAta
  5587.           la,h2     a0,0,a1             . # dAta cHaracters
  5588.           aa,u      a0,3
  5589.           lmj       x11,tOcHar
  5590.           la        a5,a0               . cHecksUm
  5591.           eX        4+sTores,*a3
  5592.           la        a0,spAck$nUm        . sEquence nUmber
  5593.           lmj       x11,tOcHar
  5594.           aa        a5,a0
  5595.           eX        4+sTores,*a3
  5596.           la        a0,spAck$tYpe
  5597.           aa        a5,a0
  5598.           eX        4+sTores,*a3
  5599.           lr,h2     r1,0,a1             . # dAta cHaracters
  5600.           lx        x11,(+1,0)
  5601.           j         4+$
  5602.           eX        4+lOads,*x11
  5603.           eX        4+sTores,*a3
  5604.           aa        a5,a0
  5605.           jgd       r1,-3+$
  5606.           lmj       x11,tEsteRrpRob
  5607.           aa,u      a5,1
  5608.           la        a0,a5
  5609.           lssl      a5,28
  5610.           ssl       a5,34
  5611.           aa        a0,a5
  5612.           lssl      a0,30
  5613.           ssl       a0,30
  5614.           lmj       x11,tOcHar
  5615.           ex        4+sTores,*a3
  5616.           la        a0,cUrseNdlIn       . eNd oF lIne cHaracter
  5617.           IF        ESCMODE=0                                           . Gunnar
  5618.           te,u      a0,015
  5619.                                         . cr appended by system if      . Gunnar
  5620.                                         . not @@ESC O.  Perhaps         . Gunnar
  5621.                                         . better to remove the 'te'     . Gunnar
  5622.                                         . instruction totally ?         . Gunnar
  5623.           ENDF      ESCMODE                                             . Gunnar
  5624.           eX        4+sTores,*a3
  5625.                                         . iF tHe eNd oF lIne cHaracter iS
  5626.                                         . a cArriage rEturn tHen tHere wIll
  5627.                                         . bE tWo oF tHem aT tHe eNd oF tHe lIne
  5628.                                         . sInce apRint$ wIll uSually add
  5629.                                         . oNe.  tHis sHould dO nO hArm sInce tHe
  5630.                                         . rEceiver iS sUpposed tO wAit fOr
  5631.                                         . a sYnc cHaracter (uSually cOntrol a).
  5632.                                         . wE hAve tO pUt sOmething aT tHe eNd
  5633.                                         . sInce apRint$ dEletes tRailing bLanks.
  5634.           IF        DCPFE                                               . Gunnar
  5635.           la,u      a0,04               . Add an EOT to terminate the li. Gunnar
  5636.                                         . avoid space fill to word limit. Gunnar
  5637.           ex        4+stores,*a3                                        . Gunnar
  5638.           ENDF      DCPFE                                               . Gunnar
  5639.           sa,h2     a3,0,a2
  5640.           la,u      a0,0,a2
  5641.           lmj       x11,pRintsTring
  5642.           lmj       x11,dEbUggero
  5643.           pOp       r1,a5,a3,a2,a1,a0,x11
  5644.           j         0,x11
  5645. /.
  5646. .
  5647. .
  5648. . ******************************************************************************
  5649. .
  5650. .  riNit   riNit   riNit   riNit   riNit   riNit   rInit   riNit   riNit
  5651. .
  5652. .         iNitialize rEceive
  5653. .
  5654. . ******************************************************************************
  5655. riNit.
  5656.           pUsh      x11,a1,a2
  5657.           sz        rCvsTate
  5658.           la        a0,nUmtRy
  5659.           aa,u      a0,1
  5660.           sa        a0,nUmtRy
  5661.           tg        a0,mAxtRy
  5662.           j         riNita
  5663.           la,u      a2,pAcket
  5664.           lmj       x11,rpAck
  5665.           te,u      a0,'S'
  5666.           j         riNitsT
  5667.           la,u      a0,pAcket
  5668.           la,u      a1,0
  5669.           lmj       x11,rpAr
  5670.           la        a0,hIsqbIn          . hIs 8 bIt qUote cHaracter
  5671.           la,u      a1,'N'              . aSsume nO 8 bIt qUoteing
  5672.           tg,u      a0,33
  5673.           tg,u      a0,63
  5674.           tg,u      a0,96
  5675.           tg,u      a0,127
  5676.           j         3+$
  5677.           la        a1,a0
  5678.           j         6+$
  5679.           te,u      a0,'Y'
  5680.           j         4+$
  5681.           la        a0,wIdth+1
  5682.           te,u      a0,8
  5683.           la,u      a1,'&'              .
  5684.           la        a0,qUote8+1
  5685.           la        a0,2,a0
  5686.           tne       a0,('OFF ')
  5687.           la,u      a1,'N'
  5688.           sa        a1,mYqbIn
  5689.           tne,u     a1,'N'
  5690.           la,u      a1,0
  5691.           sa        a1,cUrqbIn
  5692.           la,u      a1,'N'
  5693.           la        a0,hIsrEpt          . hIs rEpeat cHaracter
  5694.           tg,u      a0,33
  5695.           tg,u      a0,63
  5696.           tg,u      a0,96
  5697.           tg,u      a0,127
  5698.           j         2+$
  5699.           la        a1,a0
  5700.           la        a0,rEpeat+1
  5701.           la        a0,2,a0
  5702.           tne       a0,('OFF ')
  5703.           la,u      a1,'N'
  5704.           sa        a1,mYrEpt
  5705.           tne,u     a1,'N'
  5706.           la,u      a1,0
  5707.           sa        a1,cUrrEpt
  5708.           la,u      a0,pAcket
  5709.           lmj       x11,spAr
  5710.           la,u      a0,'Y'
  5711.           la        a1,n
  5712.           la,u      a2,pAcket
  5713.           lmj       x11,spAck
  5714.           la        a0,nUmtRy
  5715.           sa        a0,oLdtRy
  5716.           sz        nUmtRy
  5717.           la        a0,n
  5718.           aa,u      a0,1
  5719.           sa,s6     a0,n
  5720.           la,u      a0,'F'
  5721. riNitx.
  5722.           pOp       a2,a1,x11
  5723.           j         0,x11
  5724. rInita.
  5725.           la,u      a0,'A'
  5726.           j         riNitx
  5727. riNitsT.
  5728.           la,u      a0,'N'
  5729.           la,u      a2,pAcket
  5730.           sz,h2     0,a2
  5731.           la        a1,n
  5732.           lmj       x11,spAck
  5733.           la        a0,sTate
  5734.           j         riNitx
  5735. /.
  5736. .
  5737. .
  5738. . ******************************************************************************
  5739. .
  5740. . siNit   siNit   siNit   siNit   siNit   siNit   siNit   siNit   siNit
  5741. .
  5742. .         sEnd mY pArameters, gEt oTher sIdes's bAck
  5743. .         a0 rEplaced wIth nEw sTate iDentification
  5744. .
  5745. . ******************************************************************************
  5746. siNit.
  5747.           pUsh      x11,a1,a2,a3
  5748.           la,u      a0,0
  5749.           pUsh      a0,a0               . lOcal vAriables
  5750. siNit$lEn eQuf      0,x10
  5751. sInit$nUm eQuf      1,x10
  5752.           la        a0,nUmtRy
  5753.           aa,u      a0,1
  5754.           sa        a0,nUmtRy
  5755.           tg        a0,mAxtRy
  5756.           j         sInitaB             . tOo mAny tRies..aBort
  5757.           la,u      a0,'&'
  5758.           la        a1,wIdth+1
  5759.           tne,u     a1,8
  5760.           la,u      a0,'Y'
  5761.           la        a1,qUote8+1
  5762.           la        a1,2,a1
  5763.           tne       a1,('OFF ')
  5764.           la,u      a0,'N'
  5765.           sa        a0,mYqbIn           . mY 8 bIt qUote rEquest
  5766.           la,u      a0,'~'
  5767.           la        a1,rEpeat+1
  5768.           la        a1,2,a1
  5769.           tne       a1,('OFF ')
  5770.           la,u      a0,' '
  5771.           sa        a0,mYrEpt
  5772.           la,u      a0,pAcket
  5773.           la,u      a1,0
  5774.           lmj       x11,spAr            . fIll wIth iNit pArameters
  5775.           lmj       x11,iNfLush         . fLush aNy sTacked iNput
  5776.           la,u      a0,'S'              . tYpe
  5777.           la        a1,n                . pAcket nUmber
  5778.           la,u      a2,pAcket           . dAta tO sEnd
  5779.           lmj       x11,spAck           . sEnd tHe pAcket
  5780.           la,u      a2,rEcpKt
  5781.           lmj       x11,rpAck           . a0::=tYpe
  5782. .                                       . a1::=nUm
  5783.           sa        a1,siNit$nUm
  5784.           tne,u     a0,'N'
  5785.           j         siNitsTate          . dOn't cHange sTate
  5786.           tne,u     a0,'Y'
  5787.           j         siNitY
  5788.           tne,u     a0,0                . rEceive fAilure
  5789.           j         siNitsTate          . sTay iN cUrrent sTate
  5790. siNitaB.
  5791.           la,u      a0,'A'              . dEfault iS tO aBort
  5792.           j         siNitx
  5793. siNity. aCk rEceived fOr sEnd iNit pAcket
  5794.           la        a0,siNit$nUm
  5795.           te        a0,n
  5796.           j         siNitsTate          . wAit fOr a gOod aCk..kEep tRying
  5797.           la,u      a0,rEcpKt
  5798.           lmj       x11,rpAr
  5799.           la        a0,mYqbIn
  5800.           la        a1,hIsqbIn
  5801.           te,u      a0,'&'
  5802.           j         siNitq1
  5803.           te,u      a1,'&'
  5804.           tne,u     a1,'Y'
  5805.           tz,u      0
  5806.           la,u      a0,0
  5807.           sa        a0,cUrqbIn
  5808.           j         siNitrpt
  5809. siNitq1.
  5810.           te,u      a0,'N'
  5811.           j         siNitq2
  5812.           la,u      a0,0
  5813.           sa        a0,cUrqbIn
  5814.           j         siNitrPt
  5815. siNitq2.
  5816.           la        a0,a1
  5817.           tg,u      a1,33
  5818.           tg,u      a1,63
  5819.           tg,u      a1,96
  5820.           tg,u      a1,127
  5821.           la,u      a0,0
  5822.           sa        a0,cUrqbIn
  5823. siNitrPt.
  5824.           la        a0,mYrEpt
  5825.           la        a1,hIsrEpt
  5826.           tne,u     a0,'~'
  5827.           te,u      a1,'~'
  5828.           la,u      a0,0
  5829.           sa        a0,cUrrEpt
  5830.           sz        nUmtRy
  5831.           la        a0,n
  5832.           aa,u      a0,1
  5833.           aNd,u     a0,077
  5834.           sa        a1,n
  5835.           la,u      a0,'F'              . ok...sWitch tO sTate F
  5836.           j         siNitx
  5837. siNitsTate.
  5838.           la        a0,sTate
  5839. siNitx.
  5840.           pOp       x11,x11             . lOcal vAriables
  5841.           pOp       a3,a2,a1,x11
  5842.           j         0,x11
  5843. /.
  5844. .
  5845. .
  5846. . ******************************************************************************
  5847. .
  5848. . gEtfIl   gEtfIl   gEtfIl   gEtfIl   gEtfIl   gEtfIl   gEtfIl   gEtfIl
  5849. .
  5850. .         aTtempt tO oPen aN eLement wIth nAme sOmething lIke tHe sTring (a0).
  5851. .
  5852. . ******************************************************************************
  5853. gEtfIl.
  5854.           pUsh      x11,a1,a2,a3,a4,a5,r1,r2,r3
  5855.           lmj       x11,eXtrnAme        . tRy tO cReate eLt nAme
  5856.           la,u      a0,nAmeLt
  5857.           lmj       x11,asctOfd
  5858.           ds        a4,pArtBl+29
  5859.           la,u      a0,vErsioneLt
  5860.           lmj       x11,asctOfd
  5861.           ds        a4,pArtBl+33
  5862.           lmj       x11,ssor$
  5863.           j         gEtfIlbAd
  5864.           la,u      a0,1
  5865.           sa        a0,oPeneLt
  5866.           la,u      a0,tRue
  5867.           sz        eLtiNdex
  5868.           j         gEtfIlx
  5869. gEtfIlbAd.
  5870.           sz        sorfct$
  5871.           la        a0,a2
  5872.           lmj       x11,pfeRror
  5873.           la,u      a0,fAlse
  5874. gEtfIlx.
  5875.           pOp       r3,r2,r1,a5,a4,a3,a2,a1,x11
  5876.           j         0,x11
  5877. rAndom. rEturns a0=rAndom iNteger 1<=i<2**35
  5878.           pUsh      a1
  5879.           la        a0,sEed+1
  5880.           mi        a0,(+5*5*5*5*5*5*5*5*5*5*5*5*5*5*5)
  5881.           la        a0,(+0377777777777)
  5882.           and       a0,a1
  5883.           aa,u      a1,1
  5884.           la        a0,(+0377777777777)
  5885.           and       a0,a1
  5886.           l         a0,a1
  5887.           sa        a1,sEed+1
  5888.           pOp       a1
  5889.           j         0,x11
  5890. tEsteRrpRob. rEturns tO 0,x11 iF eRror sHould bE fOrced, eLse 1,x11
  5891.           tnz       eRrpRob+1
  5892.           j         1,x11
  5893.           pUsh      x11,a0,a1
  5894.           lmj       x11,rAndom
  5895.           dsl       a0,36
  5896.           ssl       a1,24
  5897.           di        a0,eRrpRob+1
  5898.           jz        a1,tEstpRobnO
  5899.           pOp       a1,a0,x11
  5900.           j         1,x11
  5901. tEstpRobnO.
  5902.           pOp       a1,a0,x11
  5903.           j         0,x11
  5904. . **********************************************************************. Gunnar
  5905. .                                                                       . Gunnar
  5906. . Unprfixify   Unprefixify   Unprefixify   Unprefixify   Unprefixify    . Gunnar
  5907. .                                                                       . Gunnar
  5908. .         gIven a bUffer.....unpack it into another buffer              . Gunnar
  5909. .                                                                       . Gunnar
  5910. .  a0 = source buffer (in)                                              . Gunnar
  5911. .  a1 = max source character count (in)                                 . Gunnar
  5912. .         effective source character count (out)                        . Gunnar
  5913. .  a2 = dest buffer (in)                                                . Gunnar
  5914. .  a3 = max dest character count (in)                                   . Gunnar
  5915. .         effective dest character count (out)                          . Gunnar
  5916. .                                                                       . Gunnar
  5917. . **********************************************************************. Gunnar
  5918. UNPREFIXIFY.                                                            . Gunnar
  5919. . gEnerally:                                                            . Gunnar
  5920. .         a0=current character                                          . Gunnar
  5921. .         a1=sOurce bUffer sTart aDdress                                . Gunnar
  5922. .         a2=dEstination bUffer sTart aDdress                           . Gunnar
  5923. .         a3=sOurce cHaracter iNdex                                     . Gunnar
  5924. .         a4=1,dEsination cHaracter iNdex                               . Gunnar
  5925. .         a5=1,mAximum dEstination cHaracter count                      . Gunnar
  5926. .         a6=max source character count                                 . Gunnar
  5927. .         r1=rEpeat cOunt                                               . Gunnar
  5928. .         r2=bIt 8 pRefix                                               . Gunnar
  5929. .                                                                       . Gunnar
  5930.           pUsh      x11,a4,a5,a6,a7,r1,r2                               . Gunnar
  5931.           la        a7,cUrrqUote        . rEceive qUote cHaracter       . Gunnar
  5932.           tOp,u     a7,0200                                             . Gunnar
  5933.           aa,u      a7,0200                                             . Gunnar
  5934.           sa        a7,rqUotep128       . rqUote wIth bIt 7 sEt         . Gunnar
  5935. .                                                                       . Gunnar
  5936.           la        a6,a1               . max source char count         . Gunnar
  5937.           lxi,u     a3,1                                                . Gunnar
  5938.           l         a5,a3               . 1,max dest char               . Gunnar
  5939.           l         a4,(1,0)            . dest character index          . Gunnar
  5940.           l,u       a3,0                . source character index        . Gunnar
  5941.           la,u      a1,0,a0             . source buffer                 . Gunnar
  5942. unprixlP.                                                               . Gunnar
  5943.           tg        a3,a6                                               . Gunnar
  5944.           j         unprixdN                                            . Gunnar
  5945.           ex        loads,a3                                            . Gunnar
  5946.           aa,u      a3,1                                                . Gunnar
  5947.           lr,u      r1,1                . rEpeat cOunt                  . Gunnar
  5948.           te        a0,cUrrEpt          . iS a0=rEpeat cHaracter        . Gunnar
  5949.           j         unprixt8                                            . Gunnar
  5950.           tg        a3,a6                                               . Gunnar
  5951.           j         unprixsTr           . sTore aS dAta.wHat eLse       . Gunnar
  5952.           ex        loads,a3                                            . Gunnar
  5953.           aa,u      a3,1                                                . Gunnar
  5954.           lmj       x11,uNcHar                                          . Gunnar
  5955.           lr        r1,a0               . aCtual rEpeat cOunt           . Gunnar
  5956.           tg        a3,a6                                               . Gunnar
  5957.           ana,u     a3,1                . gArbage in..gArbage oUt       . Gunnar
  5958.           eX        loads,a3                                            . Gunnar
  5959.           aa,u      a3,1                                                . Gunnar
  5960. unprixt8. tEst fOr 8 bIt pRefix cHaracter                               . Gunnar
  5961.           lr,u      r2,0                . aSsume nO pRefix              . Gunnar
  5962.           te        a0,cUrqbIn          . cHeck iF 8 bIt qUote          . Gunnar
  5963.           j         unprixtQ            . gO cHeck cOntrol qUote        . Gunnar
  5964.           lr,u      r2,0200             . sEt 8 bIt pRefix              . Gunnar
  5965.           tg        a3,a6                                               . Gunnar
  5966.           ana,u     a3,1                . gArbage iN...gArbage oUt      . Gunnar
  5967.           eX        loads,a3                                            . Gunnar
  5968.           aa,u      a3,1                                                . Gunnar
  5969. unprixtq. tEst fOr cOntrol qUote                                        . Gunnar
  5970.           te        a0,cUrrqUote                                        . Gunnar
  5971.           j         unprixsTr           . gO sTore tHe cHaracter        . Gunnar
  5972.           tg        a3,a6                                               . Gunnar
  5973.           ana,u     a3,1                . gArbage iN...gArbage oUt      . Gunnar
  5974.           eX        loads,a3                                            . Gunnar
  5975.           aa,u      a3,1                                                . Gunnar
  5976.           te        a0,cUrrqUote                                        . Gunnar
  5977.           tNe       a0,rqUotep128                                       . Gunnar
  5978.           j         unprixsTr                                           . Gunnar
  5979.           te        a0,cUrrEpt                                          . Gunnar
  5980.           tne       a0,cUrrEpt128                                       . Gunnar
  5981.           j         unprixsTr                                           . Gunnar
  5982.           tne       a0,cUrqbIn                                          . Gunnar
  5983.           j         unprixsTr                                           . Gunnar
  5984.           lmj       x11,cTl                                             . Gunnar
  5985. unprixsTr. sTore r1 cOpies oF cHaracter a0+r2                           . Gunnar
  5986.           top       a0,r2                                               . Gunnar
  5987.           aa        a0,r2               . aDd 8 bIt pRefix              . Gunnar
  5988.           j         unprefixdec
  5989. unprefixsto.                                                            . Gunnar
  5990.           dsc       a3,36                                               . Gunnar
  5991.           ex        stores,a3                                           . Gunnar
  5992.           dsc       a3,36                                               . Gunnar
  5993.           aa,u      a4,1                                                . Gunnar
  5994.           tg        a4,a5                                               . Gunnar
  5995.           j         unprefixfull                                        . Gunnar
  5996. unprefixdec.                                                            . Gunnar
  5997.           jgd       r1,unprefixsto                                      . Gunnar
  5998.           j         unprixlP                                            . Gunnar
  5999. unprefixfull.                                                           . Gunnar
  6000. unprixdN.                                                               . Gunnar
  6001.           l         a1,a3               . # source chars consumed       . Gunnar
  6002.           l         a3,a4               . # dest chars produced         . Gunnar
  6003.           lxi       a3,0                                                . Gunnar
  6004.           pop       r2,r1,a7,a6,a5,a4,x11                               . Gunnar
  6005.           j         0,x11                                               . Gunnar
  6006. .
  6007. .         **********************************************************************
  6008. .         WILDCARDNAM - ROUTINE ATTEMPTS TO FIND AN ELEMENT/VERSION WHEN
  6009. .                     - WILDCARDS (I.E. *) ARE USED AS PART OF THE NAME ON A
  6010. .                     - GET FUNCTION FROM THE OTHER KERMIT.
  6011. .
  6012. . USAGE   LMJ       X11,WILDCARDNAM
  6013. .         +         NO MATCH ANYWHERE IN FILE
  6014. .         +         NO MATCH ON THIS CALL
  6015. .         +         NORMAL RETURN - MATCH FOUND
  6016. .
  6017. .         **********************************************************************
  6018. .
  6019. WILDCARDNAM.
  6020.           PUSH      x11,A0,A1,A2,A3,a4,a5
  6021.           FIELDATA
  6022.           LA        A0,BSPFCT+6         . LOAD THE PROGRAM FILE INDICATOR
  6023.           TE        A0,('**PF**')       . MAKE SURE ITS A PROGRAM FILE
  6024.           J         NOFIND              . CUL OUT IF ITS NOT
  6025.           TZ        NPASSES             . HAVE WE BEEN THROUGH BEFORE ?
  6026.           J         DONEINITIAL         . SKIP THE INITIALIZATION STUFF
  6027.           SZ        NFINDS              . ZERO THE NUMBER OF FINDS
  6028. DONEINITIAL.
  6029.           LA        A0,MAXWILD+1        . GET THE MAXIMUM OF ELEMENTS TO SEND
  6030.           TNE       A0,NFINDS           . COMPARE AGAINST NUMBER WE'VE FOUND
  6031.           J         NOFIND
  6032. WILDSRCHLOOP.
  6033.           LA        A1,NPASSES          . GET THE NUMBER OF PASSES
  6034.           AA,U      A1,1                . UPDATE IT
  6035.           SA        A1,NPASSES          . SAVE IT
  6036.           la,u      a0,bspfct
  6037.           lmj       x11,etnl$
  6038.           j         nOfInd              . aLl dOne
  6039.           LA,S3     A1,3,A0             . GET THE ELEMENT TYPE
  6040.           TLE,U     A1,5                . MAKE SURE ITS < 5
  6041.           TLE,U     A1,1                . MAKE SURE ITS > 0
  6042.           J         NOTTHISONE          . ITS NOT A SYMBOLIC
  6043.           tp        3,a0                . iS iT dEleted?
  6044. NOTTHISONE.
  6045.           j         wIldsRchlOop
  6046.           la,u      a1,0,a0             . eLement nAme aDdress
  6047.           la,u      a0,wIldelt          . eLement pAttern
  6048.           lmj       x11,mAtch12
  6049.           j         nOttHisoNe          . nO mAtch
  6050.           la,u      a1,4,a1             . vErsion nAme
  6051.           la,u      a0,wIldvEr          . vErsion pAttern
  6052.           lmj       x11,mAtch12
  6053.           j         nOttHisoNe
  6054. WILDCARDDONE.
  6055.           ana,u     a1,4
  6056.           dl        a4,0,a1
  6057.           ds        a4,eLementnAme
  6058.           dl        a4,4,a1
  6059.           ds        a4,vErsionnAme
  6060.           LA        A0,NFINDS           . GET THE NUMBER OF FINDS
  6061.           AA,U      A0,1                . UPDATE IT
  6062.           SA        A0,NFINDS           . SAVE IT
  6063.           POP       a5,a4,A3,A2,A1,A0,x11
  6064.           ASCII
  6065.           J         2,X11               . NORMAL RETURN
  6066. NOFIND.
  6067.           POP       a5,a4,A3,A2,A1,A0,x11
  6068.           ASCII
  6069.           SZ        NPASSES             . CLEAR NUMBER OF PASSES        . Gunnar
  6070.                                         . Must always be cleared        . Gunnar
  6071.                                         . at no find                    . Gunnar
  6072.           TNZ       NFINDS              . DID WE FIND ANY ?
  6073.           J         0,X11
  6074.           J         1,X11
  6075. .
  6076. mAtch12.  mAtch 12 cHaracters...a0=pAttern...a1=sTring
  6077.           pUsh      r3,x11,a2,a3,a4,r1,r2
  6078.           la,u      a2,0
  6079.           la,u      a3,0
  6080.           la,u      a4,0
  6081.           lr,u      r1,12
  6082.           lr,u      r2,12
  6083.           lr,u      r3,1
  6084.           lmj       x11,mAtchsTring
  6085.           lr,u      r3,0
  6086.           pOp       r2,r1,a4,a3,a2,x11
  6087.           ax        x11,r3
  6088.           pOp       r3
  6089.           j         0,x11
  6090. .
  6091. mAtchsTring. wIldcArd sTring mAtching sUbroutine
  6092. .         x11=rEturn aDdress
  6093. .                   0,x11 iF nO mAtch
  6094. .                   1,x11 iF mAtch
  6095. .         a0=aDdress oF pAttern sTring
  6096. .         a1=aDdress oF sTring tO tEst fOr mAtch
  6097. .         a2=iNdex iNto (a0) sTring
  6098. .         a3=iNdex iNto (a1) sTring
  6099. .         a4=nOn-zEro iF "*" sHould bE iGnored iN sTring (a0)
  6100. .         r1=#cHaracters iN sTring (a0)
  6101. .         r2=#cHaracters iN sTring (a1)
  6102. .
  6103.           pUsh      x11,a2,a3,a4,a5
  6104. mTchsnpc. mAtch sTring ... nExt pAttern cHaracter
  6105.           tne       a2,r1               . pAttern eNd?
  6106.           j         mTchspe             . yEs...pAttern eNd
  6107.           ex        lOadfa0,a2          . get pAttern cHaracter
  6108.           fIeldata
  6109.           tne,u     a5,'*'              . iS iT a gEar?
  6110.           j         mTchspcg            . pAttern cHaracter = gEar
  6111.           tNe,u     a5,' '              . iS pAttern a bLank?
  6112.           j         mTchspcb            . pAttern cHaracter = bLank
  6113.           tne       a3,r2               . aNy cHaracters lEft iN sTring
  6114.           j         mTchsnm             . nOpe...sO nO mAtch
  6115.           tne,u     a5,'%'
  6116.           j         mTchspcp            . pAttern cHaracter=pErcent
  6117.           lx        x11,a5              . sAve tHe pAttern cHaracter
  6118.           ex        lOadfa1,a3
  6119.           te        a5,x11              . dOes pAttern mAtch sTring
  6120.           j         mTchsnm             . nO mAtch
  6121. mTchsr. rEcurse fOr nExt cHaracter
  6122.           la,u      a4,0                . dOn't sKip gEars
  6123. mTchsrsg. rEcurse aNd cOntinue sKipping gEars
  6124.           aa,u      a2,1
  6125.           aa,u      a3,1                . nEw iNdexes
  6126.           lmj       x11,mAtchsTring
  6127.           j         mTchsnm             . nO mAtch here
  6128. mTchsmTch. mAde a mAtch
  6129.           pOp       a5,a4,a3,a2,x11
  6130.           j         1,x11
  6131. mTchspcp. pAttern cHaracter = pErcent
  6132.           eX        lOadfa1,a3          . gEt nExt sTring cHaracter
  6133.           te,u      a5,' '
  6134.           j         mTchsrsg            . sO fAr wE hAve a mAtch
  6135. mTchsnm. nO mAtch
  6136.           pOp       a5,a4,a3,a2,x11
  6137.           j         0,x11
  6138. mTchspcb. pAttern cHaracter = bLank
  6139.           aa,u      a2,1                .
  6140.           lmj       x11,mAtchsTring
  6141.           j         mTchsnm             . nO mAtch
  6142.           j         mTchsmTch           . mAtch
  6143. mTchspcg.  pAttern cHaracter = gEar
  6144.           aa,u      a2,1
  6145.           jnz       a4,mTchsnpc         . jUmp iF sKip gEars
  6146.           la,u      a4,1
  6147. mTchssn. sKip n cHaracters aNd pRoceed
  6148.           lmj       x11,mAtchsTring
  6149.           j         2+$
  6150.           j         mTchsmTch           . mAde a mAtch
  6151.           tne       a3,r2               . aNy sTring cHaracters lEft
  6152.           j         mTchsnm             . nOpe...sO nO mAtch
  6153.           aa,u      a3,1                . yEs...sO sKip aNother
  6154.           j         mTchssn             .     aNd tRy aGain
  6155. mTchspe. pAttern sTring eMpty
  6156.           tne       a3,r2               . iS sTring eMpty aLso
  6157.           j         mTchsmTch           . yes...sO wE mAde a mAtch
  6158.           ex        lOadfa1,a3
  6159.           te,u      a5,' '
  6160.           j         mTchsnm             . sTring nOt eMpty..nO mAtch
  6161.           aa,u      a3,1
  6162.           la,u      a4,0                . dOn't sKip gEars
  6163.           lmj       x11,mAtchsTring
  6164.           j         mTchsnm             . nO mAtch
  6165.           j         mTchsmTch           . mAtch
  6166.           ascii
  6167. p         pRoc
  6168. lOadf*    nAme
  6169.           la,s1     a5,p(1,1),p(1,2)
  6170.           la,s2     a5,p(1,1),p(1,2)
  6171.           la,s3     a5,p(1,1),p(1,2)
  6172.           la,s4     a5,p(1,1),p(1,2)
  6173.           la,s5     a5,p(1,1),p(1,2)
  6174.           la,s6     a5,p(1,1),p(1,2)
  6175.           eNd
  6176. lOadfa0. lOad fIeldata fRom (a0)
  6177. i         do 2 , lOadf i-1,a0
  6178. lOadfa1. lOad fIeldat fRom (a1)
  6179. i         do 2 , lOadf i-1,a1
  6180. .
  6181. .
  6182. . hEre wE aRe gOing tO cReate a 256 wOrd tAble cOntaining a nOn-zEro eNtry
  6183. . fOr eAch cHaracter tHat sHould bE cOnsidered a cOntrol cHaracter wHen
  6184. . sEnding a fIle.  tHis tAble wIll nOt! cOntain tHe qUote cHaracter
  6185. . iTself.  tHe sEnder mUst cHeck sEparately fOr tHe cUrrent qUote
  6186. . cHaracter.
  6187. p         pRoc
  6188. iFcNtrl*  nAme
  6189. fLag      eQu       0
  6190. c         eQu       p(1,1)
  6191.           dO c<040               ,fLag eQu 1
  6192.           dO c=0177              ,fLag eQu 1
  6193.           dO (c>0200)**(c<0240) ,fLag eQu 1
  6194.           dO c=0377              ,fLag eQu 1
  6195.           +fLag
  6196.           eNd
  6197. . uNlisted lIne iS   "i    dO 256 , iFcNtrl i-1 "
  6198. cNtrltYpes.
  6199.           uNlist
  6200. i         dO 256 , iFcNtrl i-1
  6201.           lIst
  6202. $(0).
  6203. dEbUgaRea rEs       8                   . aT sTart oF d-bAnk. eAsy tO fInd.
  6204. dEbUgbUff rEs       56
  6205. dEbUgiopKt
  6206.           fIeldAta
  6207.           'kErmitdEbUg'
  6208.           +0
  6209.           +w$,0,0
  6210.           +56,dEbUgbUff
  6211.           +0
  6212. dUmpKt.
  6213.           'kErmitdEbug'
  6214.           +0
  6215.           +r$,0,0
  6216.           +56,dEbugbUff
  6217.           +0
  6218. dUmpfIlaSg.
  6219.           '@asg,a kermitdebug . '
  6220. dfok      +0
  6221.           ascii
  6222. dUmplIne  +0
  6223. dUmpnUm   +0
  6224. asctIm    sTrng     '123456'
  6225. qUotekErmit.
  6226.           sTrng     'KERMIT'
  6227. nAmeLt.   nAme oF eLement bEing rEceived
  6228.           sTrng     'abcdefghijkl'
  6229. vErsioneLt. vErsion nAme oF eLement bEing rEceived
  6230.           sTrng     'abcdefghjikl'
  6231. eLtbUffer. bUffer fOr eLement io
  6232.           rEs       mAxeLtlInsIz
  6233. sRccHrcNt +0        . # cHar lEft iN eLtbUffer
  6234. eltiNdex  +0        . cUrrent iNdex iNto eLtbUffer
  6235. oPeneLt   +0        . nOn-zero iF eLement i/o iS oPen
  6236. eLementeof          +0                  . rEceived eof rEturn fRom gEtas$
  6237. lInenUmber          +0                  . # lInes tRansmitted
  6238.           fIeldAta
  6239. iNituSe.            oRignal fIle tO uSe
  6240.           '@uSe   k$E$r$m$i$t$,tpf$ . '
  6241. pAcket.
  6242.           +100,0
  6243.           rEs       25
  6244. sIze      +0        . sTatus fRom bUfIll wHen fIlling tRansmission dAta "pAcket"
  6245. rEcpKt.
  6246.           +100,0
  6247.           rEs       25
  6248. sTate     +0
  6249.           fIeldAta
  6250. pArtBl*.
  6251.           +0504400,0
  6252.           ' '                           . fIle nAme fOr si
  6253.           ' '
  6254.           ' '                           . eLement nAme fOr si
  6255.           ' '
  6256.           +0
  6257.           +0        . fLag bIts, tYpe oF si
  6258.           ' '                           . vErsion nAme oF si
  6259.           ' '
  6260.           +0                            . cYcle wOrd fOr si
  6261.           +0                            . cOde,lEngth fOr si
  6262.           +0                            . lOcation oF si
  6263.           +0                            . dAte tIme oF si
  6264.           +0                            . rEquired cYcle oF si
  6265. pfspKt.
  6266.           'k$E$r$m$i$t$'                . iNternal fIle nAme
  6267. eLementnAme.
  6268.           ' '                           . eLement nAme oF so
  6269.           ' '
  6270.           +0
  6271.           +0        . fLag bIts,eLement tYpe oF so
  6272. vErsionnAme.
  6273.           ' '                           . vErsion nAme oF so
  6274.           ' '
  6275.           +0                            . cYle iNfo fOr so
  6276.           +0                            . pRocessor cOde,lEngth oF so
  6277.           +0                            . so lOcation
  6278.           +0                            . so cReation dAte/tIme
  6279.           +0                            . nExt wRite lOcation
  6280.           'k$e$r$m$i$t$'
  6281.           ' '       . eLement nAme
  6282.           ' '
  6283.           +0
  6284.           +1,0
  6285.           ' '       . vErsion nAme
  6286.           ' '
  6287.           +5,0,1
  6288.           +0
  6289.           +0
  6290.           +0
  6291.           +0
  6292. fct.
  6293.           'k$e$r$m$i$t$'
  6294.           +0
  6295.           +020,0,0
  6296.           +224,0
  6297.           -1
  6298.           +bUf1,bUf2
  6299.           +8,mAxeLtlInsIz
  6300.           +1,sdfibUffer
  6301.           +1,-1
  6302.           +0
  6303. lAsttYpecw +0       . lAtest sdf cOntrol wOrd tHat sPecified ascii oR fIeldAta
  6304. sdflAbelcw +0       . sdf lAbel cOntrol wOrd
  6305. bUf1      rEs       224
  6306. bUf2      rEs       224
  6307. sdfibUffer.
  6308.           rEs       mAxeLtlInsIz
  6309. BSPFCT    'K$E$R$M$I$T$'                . BSP$ PACKET
  6310.           RES       32
  6311. BSPBUF    RES       1792                . BSP$ BUFFER AREA
  6312. NPASSES   +0                            . NUMBER OF PASSES ON TOC
  6313. NFINDS    +0                            . NUMBER OF ELEMENTS FOUND
  6314. .
  6315.           ascii
  6316. fIlenAme.
  6317.           sTrng     '                                '
  6318. pRsTrpKt.
  6319.           s$YmbpK   pRint$,w$,ascii$ 0,0,0
  6320. iNput.
  6321.           t$cEll    0
  6322.           +1000000                      . cOunt dOwn tImer
  6323.           +0        . h1 - sTatus
  6324. .                      001 = dAta pResent
  6325. .                      002 = uNexplained error
  6326. .                      004 = lOst dAta
  6327. .                      010 = tImeoUt
  6328. .                      020 = eNd oF fIle ('@' cArd)
  6329.                     . h2 - cHaracter cOunt
  6330.           rEs       40                  . dAta bUffer - 160 cHaracters
  6331. tErminate.
  6332.           +0
  6333. rCvsTate  +0        . +0=dAta sTate
  6334. .                   . 1= <qUote>M rEceived
  6335. wIldeLt   rEs       2                   . eLement sPecified
  6336. wIldvEr   rEs       2                   . vErsion sPecified
  6337. LOGOUTFLAG.
  6338.           +0
  6339. rqUotep128. rqUote cHaracter wIth bIt 7 sEt...uSed bY bUfeMp
  6340.           +0
  6341. sqUotep128. sEnd qUote cHaracter wIth bIt 7 sEt...sEt aNd uSed bY bUfIll
  6342.           +0
  6343. hIsqbIn   +0        . 8 bIt qUoting cHaracter fRom hIs iNit pAcket
  6344. mYqbIn    +0        . 8 bIt qUote cHaracter I wOuld lIke
  6345. cUrqbIn   +0        . 8 bIt qUote cHaracter aGreed tO
  6346. hIsrEpt   +0        . rEpeat cHaracter fRom hIs iNit pAcket
  6347. mYrEpt    +0        . rEpeat cHaracter I wOuld lIke
  6348. cUrrEpt   +0        . rEpeat cHaracter aGreed tO
  6349. cUrrEpt128.
  6350.           +0        . cUrrEpt pLus 128
  6351. rDaCtive.
  6352.           +0        . sEt nOn-zEro bY iNitialize
  6353.                     . sEt zEro bY sHutdOwn
  6354. rEadbUf.
  6355.           rEs       40
  6356. spAckbUffer.
  6357.           +100,0
  6358.           rEs       25
  6359. sTack     rEs       300
  6360. sTackeNd  equ       $
  6361. bInascrSlt.
  6362.           sTrng     '                '
  6363. pRlIne.
  6364.           +132,0
  6365.           rEs       (132+3)/4
  6366. sRciNdx   +0        . iNdex iNto sRcsTrng
  6367. sRcsTrng  +200,0    . bUffer fOr gEtas$ aNd pUtas$
  6368.           rEs       50
  6369. tImoUtmSg.
  6370.           sTrng     'Timeout '
  6371. bAdbInmSg.
  6372.           sTrng     'Element specified is not a "binary" element.'
  6373. cMpltmSg.
  6374.           sTrng     '                                                 '
  6375. cMdbUf    rEs       40
  6376. cMdpKt.
  6377.           s$ymbpk   trEad$,w$r$,ascii$  6,pRompt,0 120,cMdbUf
  6378. fiTempKt.
  6379.           fieldAta
  6380.           'k$E$r$m$i$t$'
  6381.           +0d
  6382.           +0d
  6383.           res       5
  6384. tStpfpKt.
  6385.           'k$e$r$m$i$t$'
  6386.           +0
  6387.           +r$,0,0
  6388.           +28,cMdbUf
  6389.           +0
  6390. pRompt.
  6391.           ascii
  6392.           'KER11>'
  6393. options   +0                            . processor call options        . Gunnar
  6394. namestring.                             . temp storage when             . Gunnar
  6395.                                         . unprefixing filename          . Gunnar
  6396.           +100,0                                                        . Gunnar
  6397.           res       25                                                  . Gunnar
  6398. tOken.
  6399.           sTrng     '123456789012/123456789012'
  6400. cMdiNdex  +0
  6401. nUmtRy    +0
  6402. oLdtRy    +0
  6403. mAxtRy    +10
  6404. n         +0
  6405. dEcimalt  eQu       1                   . dEcimal iNteger tYpe
  6406. bcdt      eQu       2                   . 4 ascii cHaracter tYpe
  6407. cNtrlt    eQu       3                   . cOntrol cHaracter tYpe
  6408. cHart     eQu       4                   . pRintable cHaracter tYpe
  6409. oCtalt    eQu       5                   . oCtal iNteger tYpe
  6410. .
  6411. . ******** gLobal vAriables  ******
  6412. dEbUg     vAriable  'DEBUG' dEcimalt,0,1,0
  6413. DUMPFMT   VARIABLE  'DUMPFORMAT' BCDT ;
  6414.                     'OCT','DEC','HEX'
  6415. dElay     vAriable  'DELAY' dEcimalt,0,99,6
  6416. MAXWILD   VARIABLE  'MAXWILD' DECIMALT,1,99,25
  6417. pArity    vAriable  'PARITY' bcdt  ;
  6418.                     'SPC','EVN','ODD','MRK','OFF'
  6419. lEngth    vAriable  'LENGTH' dEcimalt,4,4*mAxeLtlInsIz,132
  6420. cOntinue  vAriable  'CONTINUATION' oCtalt,0,01000,0
  6421. tYpe      vAriable  'TYPE' bcdt      'ASCII','BINARY'
  6422. rEpeat    vAriable  'REPEAT' bcdt 'ON','OFF'
  6423. qUote8    vAriable  'QUOTE8' bcdt 'ON','OFF'
  6424. wIdth     vAriable  'WIDTH' dEcimalt,7,8,7
  6425. sEed      vAriable  'SEED' dEcimalt,0,1*/35-1,0
  6426. eRrpRob   vAriable  'ERROR' dEcimalt,0,1*/35-1,0
  6427. .
  6428. . rEceive pArameters *******
  6429. rpAklEn   vAriable  'PACKETLENGTH' dEcimalt,10,MAXRPAKLEN,DEFRPAKLEN    . Gunnar
  6430. rpAd      vAriable  'PADDING' dEcimalt,0,30,0
  6431. rpAdcHr   vAriable  'PADCHAR' cNtrlt,0
  6432. rtImoUt   vAriable  'TIMEOUT' dEcimalt,5,60,10
  6433. rqUote    vAriable  'QUOTE' cHart,043
  6434. cUrrqUote.
  6435.           +0        . tHe cUrrent rEceive qUote cHaracter after negotiations
  6436. rEndlIn   vAriable  'ENDOFLINE' cNtrlt,015
  6437. rsTart    vAriable  'STARTOFPACKET' cNtrlt,DEFSOP                       . Gunnar
  6438. .
  6439. . sEnd pArameters *********
  6440. spAklEn   vAriable  'PACKETLENGTH' dEcimalt,10,91,91
  6441. cUrspAklEn.
  6442.           +0        . cUrrent sEnd pAcket lEngth aFter nEgotiations
  6443. spAd      vAriable  'PADDING' dEcimalt,0,30,0
  6444. cUrspAd.
  6445.           +0        . cUrrent nUmber oF pAd cHaracters aFter nEgotiations
  6446. spAdcHr   vAriable  'PADCHAR' cNtrlt,0
  6447. cUrspAdcHr.
  6448.           +0        . cUrrent sEnd pAd cHaracter aFter nEgotiations
  6449. stImoUt   vAriable  'TIMEOUT' dEcimalt,5,60,10
  6450. cUrstImoUt.
  6451.           +0        . cUrrent sEnd tImeout aFter nEgotiations
  6452. sqUote    vAriable  'QUOTE' cHart,043
  6453. seNdlIn   vAriable  'ENDOFLINE' cNtrlt,015
  6454. cUrsEndlIn.
  6455.           +0        . cUrrent sEnd eol cHaracter aFter nEgotiations
  6456. ssTart    vAriable  'STARTOFPACKET' cNtrlt,DEFSOP                       . Gunnar
  6457.           eNd       sTart
  6458.