home *** CD-ROM | disk | FTP | other *** search
/ Columbia Kermit / kermit.zip / ibm370 / ikmker.mss < prev    next >
Text File  |  2020-01-01  |  20KB  |  569 lines

  1. @Part(MUSICKERMIT,root="kuser")
  2. @string(-musicversion="4.3.0")
  3. @string(-musicdate="93/9/30")
  4. @Chapter<IBM MUSIC/SP KERMIT>
  5. @Begin<Description,Leftmargin +15,Indent -15,spread 0>
  6. @i(Program:)@\John Chandler (Harvard/Smithsonian Center for
  7. Astrophysics); contributions from
  8. Pierre Goyette (McGill U),
  9. Va@ccd()e Kundak@ccd()i and
  10. Daphne Tzoar (Columbia U),
  11. Bob Shields (U. Maryland),
  12. Greg Small (UC Berkeley), Clark Frazier (Harvard Bus. Sch.),
  13. Bob Bolch and Steve Blankinship (Triangle),
  14. Andr@eac() Pirard (U. Li@egr()ge)
  15.  
  16. @i(Language:)@\IBM/370 Assembler
  17.  
  18. @i(Documentation:)@\Pierre Goyette
  19.  
  20. @i(Version:)@\@value(-musicversion) (@value<-musicdate>)
  21.  
  22. @i(Date: )@\1993 September
  23. @end<Description>
  24.  
  25. @subheading<Kermit-MUSIC Capabilities At A Glance:>
  26. @begin<format,leftmargin +2,above 1,below 1>
  27. @tabclear()@tabset(3.5inches,4.0inches)
  28. Local operation:@\No
  29. Remote operation:@\Yes
  30. Transfers text files:@\Yes
  31. Transfers binary files:@\Yes
  32. Wildcard send:@\Yes
  33. @q(^X/^Z) interruption:@\Yes (through micro)
  34. Filename collision avoidance:@\Yes
  35. Can time out:@\Yes (line mode only)
  36. 8th-bit prefixing:@\Yes
  37. Repeat count prefixing:@\Yes
  38. Alternate block checks:@\Yes
  39. Terminal emulation:@\No
  40. Communication settings:@\No
  41. Transmit BREAK:@\No
  42. Packet logging:@\Yes
  43. Transaction logging:@\Yes
  44. Session logging:@\No
  45. Raw transmit:@\Yes (no prompts)
  46. Sliding window:@\No
  47. Long packets:@\Yes
  48. Act as server:@\Yes
  49. Talk to server:@\Yes
  50. Advanced server functions:@\Yes
  51. Advanced commands for servers:@\Yes
  52. Local file management:@\Yes
  53. Handle Attribute Packets:@\Yes
  54. Command/init files:@\Yes
  55. Command macros:@\No
  56. @end<format>
  57.  
  58. @subheading<MUSIC Specifics of Kermit-370:>
  59. @begin<format,leftmargin +2,above 1,below 1>
  60. @tabclear()@tabset(3.5inches,4.0inches)
  61. Global INIT file:@\@q(SYSTEM.KERMINI)
  62. User INIT file:@\@q(KERMIT.INI)
  63. Debug packet log:@\@q(KERMIT.LOG)
  64. Server reply log:@\@q(KERMIT.REPLY)
  65. Mail command:@\@q(KERMAIL) (not supported)
  66. Print command:@\@q(KERMPRT) (not supported)
  67. Submit command:@\@q(KERMSUB) (not supported)
  68. Maximum packet size:@\1913 (7171), 230 (TTY)
  69. Maximum disk LRECL:@\32767
  70. @end<format>
  71.  
  72. @Index(IBM)
  73. @Index(MUSIC/SP)@Index(TTY)@Index(Series/1)
  74. Kermit-MUSIC is a member of the generic Kermit-370 family
  75. and shares most of the features and capabilities of the group.
  76. As its name implies, Kermit-MUSIC is the
  77. variant of Kermit-370 that runs under the MUSIC/SP operating system.
  78. The primary documentation for Kermit-MUSIC is actually
  79. the chapter on Kermit-370 (entitled IBM 370 Kermit), which
  80. describes general properties; the present chapter assumes the
  81. reader is familiar with that material.
  82. Only the details specific to MUSIC operation will
  83. be discussed here, e.g., command syntax relating to the
  84. MUSIC file system or commands not offered in general by Kermit-370.
  85.  
  86. @Section<The MUSIC/SP File System>
  87.  
  88. The features of the MUSIC file system of greatest interest to Kermit
  89. users are the format of file specifications (or @i<filespecs>)
  90. and the concept of records.
  91. The latter is described in the Kermit-370 chapter.
  92.  
  93. The MUSIC @i<filespec> (called a Save File) takes the form
  94. @example<[code:]filename>
  95. The filename can be up to 17 characters in length and consists of one or
  96. more substrings joined by periods.  The substrings can contain
  97. any of the following characters:
  98. @example(A through Z, 0 through 9, national characters # $ @@)
  99. The only restriction is that the first substring must start with a
  100. letter or a national character.
  101. You may also prefix the filename with a 4-digit code if you
  102. have enough privileges.
  103. @Index(Default Code)
  104. By default, the "working directory" will be set to the your
  105. signon code.
  106. All files on this code can be accessed directly.
  107. If you have enough privileges and wish to transfer files
  108. to or from a MUSIC code other than your signon code, you may
  109. change the "working directory" to the new code.
  110.  
  111. @Index(Wildcards)
  112. MUSIC/SP allows a group of files to be specified in a single
  113. @i(filespec) by including the special "wildcard" characters
  114. @qq<*> and @qq<?>.
  115. A @qq<*> matches any string of characters (even a null
  116. string) from the current position to the end of the field;
  117. a @qq<?> matches any single character.
  118. It is important to remember that the period is part of the filename.
  119. Unlike a PC, the file specification @qq<*> will
  120. match all filenames.
  121. Here are some examples:
  122.  
  123. @Begin(Description,spread 0.5,leftmargin +14, indent -12)
  124. @q<*.COBOL>@\All files of that end with @q<.COBOL>
  125.  
  126. @q<F*>@\All files whose names start with F.
  127.  
  128. @q<?>@\All files with one-character filename.
  129. @End(Description)
  130.  
  131. MUSIC files, like those in other IBM 370 systems, are record-oriented
  132. (see the introduction to the Kermit-370 chapter).
  133. In particular, MUSIC files are characterized by record
  134. format (RECFM), which may be fixed-length or varying-length,
  135. and by maximum record length (LRECL).
  136. The size of record blocks is irrelevant, however,
  137. because MUSIC performs the blocking and deblocking operations
  138. automatically and transparently, including the spanning of records
  139. across block boundaries.
  140. Records in MUSIC files may be up to 32767 bytes long.
  141. A third record format, namely, undefined-length, is possible in MUSIC,
  142. but is rarely used and is not supported by Kermit-MUSIC at present.
  143.  
  144. When sending files, Kermit-MUSIC includes a date/time attribute if
  145. available.  However, any date attribute of a file
  146. received into MUSIC is merely checked for validity and then discarded
  147. in favor of the current date.
  148.  
  149. Another file system feature of occasional interest is the means of
  150. reporting errors.
  151. When Kermit-MUSIC encounters a disk error, it attempts to prepare
  152. an explanatory message for inclusion in the STATUS report.
  153. The explanations can be found in the MUSIC reference manual under the
  154. MFIO Error Codes section.
  155. @Index(Error codes)
  156.  
  157. @section<Program Operation>
  158.  
  159. @Index(Initialization files)
  160. At startup time, Kermit-MUSIC looks for two initialization
  161. files, @q(*COM:SYSTEM.KERMINI) and @q(KERMIT.INI).
  162. If either of or both of these files exist,
  163. they will be read and executed.
  164. If they do not exist on your code, Kermit will still attempt to locate
  165. the public verion of the system file.
  166. The file @q(SYSTEM.KERMINI) should be saved as a PUBLIC file
  167. by a systems programmer, preferably the same code where
  168. the Kermit executable module is kept.
  169. The file @q(KERMIT.INI) can be maintained by the user on any code.
  170.  
  171. One important distinction between Kermit-MUSIC and other Kermits
  172. is that a program running under MUSIC/SP is unable to
  173. interrupt a read on the terminal
  174. if you are connected through a 7171 or
  175. Series/1 protocol converter.
  176. This means that the MUSIC variant of Kermit cannot
  177. time out after sending a packet on such devices.
  178. The only way to time out is from the other side:
  179. typing a carriage return to the local Kermit causing it to retransmit
  180. its last packet, or an automatic timeout as provided by most other
  181. Kermits.
  182.  
  183. @Index(TTY)@Index(Flow control)@Index(Handshake)
  184. If you are connecting to MUSIC through a 7171 or @q(Series/1)
  185. protocol converter, then no handshaking is required since
  186. Kermit-MUSIC can control the data sent to the micro Kermit.
  187. But if you are connected as a @qq(TTY) terminal (through a 370x
  188. type line), then you must enable handshaking on the micro Kermit.
  189. This is because the MUSIC/SP system will add an XON (X'11')
  190. character to the end of every packet sent.
  191. The micro Kermit must not reply with the next packet before
  192. the XON character is received.
  193. Usually the command @qq(SET HANDSHAKE XON) or @qq(SET HANDSHAKE 17)
  194. on the micro Kermit will do this.
  195.  
  196. @subheading(Interactive Operation:)
  197.  
  198. To run Kermit-MUSIC interactively, invoke the program from MUSIC by
  199. typing @q<KERMIT>.
  200. When you see the prompt,
  201. @example(Kermit-MUSIC>)
  202. you may type a Kermit subcommand.
  203. When the subcommand completes, Kermit issues another prompt.
  204. The cycle repeats until you exit from the program.
  205. For example:
  206. @Begin(Example)
  207. @ux(KERMIT)
  208.  
  209. Kermit-MUSIC Version @value(-musicversion) (@value<-musicdate>)
  210. Enter ? for a list of valid commands
  211.  
  212. Kermit-MUSIC>@ux(send foo.*)
  213.  
  214.   @i(Files with prefix FOO. are sent)
  215.  
  216. Kermit-MUSIC>@ux(receive test.spss)
  217.  
  218.   @i(File is received and called TEST.SPSS)
  219.  
  220. Kermit-MUSIC>@ux(exit)
  221. @end(example)
  222.  
  223. @subheading(Command Line Invocation:)
  224.  
  225. Kermit-MUSIC may also be invoked with a command line argument from MUSIC.
  226. The argument is interpreted as a subcommand to be executed
  227. by Kermit after completion of the initialization.
  228. For instance:
  229. @Begin(Example,below 0.5)
  230. @ux(KERMIT send test.fortran)
  231. @End(Example)
  232. or
  233. @Begin(Example,above 0.5)
  234. @ux(KERMIT server)
  235. @End(Example)
  236.  
  237. Kermit will exit and return to MUSIC after completing the specified
  238. subcommand.
  239.  
  240. @subheading(Server mode:)
  241.  
  242. Command execution in server mode is different in several respects
  243. from normal operation.  First of all, some Kermit subcommands
  244. are not allowed (see the list of subcommands in the Kermit-370 chapter).
  245. Moreover, command errors always terminate any active TAKE file.
  246.  
  247. @Section<Kermit-MUSIC Subcommands>
  248.  
  249. Kermit-MUSIC supports all the subcommands described in the Kermit-370
  250. chapter, plus one more: @qq(MUSIC), which is a synonym for the generic
  251. subcommand @qq(HOST).
  252. This section concentrates on
  253. the subcommands that have special form or meaning for Kermit-MUSIC.
  254. These are ordered alphabetically.
  255. See the chapter on Kermit-370 for further details.
  256.  
  257. @Heading(The CWD Subcommand)
  258. @Index(Default Code)@Index(CWD)
  259.  
  260. Syntax:@q< CWD @i(code)>
  261.  
  262. The CWD (Change Working Directory)
  263. subcommand establishes a new default code.
  264. @i(code) may be any valid 4-digit MUSIC code.
  265. Subsequent file transfers take place preferentially to
  266. and from the default code.
  267. The initial code is the user's signon code.
  268.  
  269. @Heading(The DIRECTORY Subcommand)
  270. @Index(DIRECTORY)
  271.  
  272. Syntax:@q< DIRECTORY [@i(filespec)]>
  273.  
  274. Under Kermit-MUSIC, the DIRECTORY subcommand is similar
  275. to the MUSIC LIBRARY command.
  276. DIRECTORY will also display the number of lines in a file.
  277.  
  278. @Heading(The HELP Subcommand)
  279. @Index(HELP)
  280.  
  281. Syntax:@q< HELP>
  282.  
  283. This subcommand displays information on the use of Kermit-MUSIC.
  284.  
  285. @Heading(The MUSIC Subcommand)
  286.  
  287. Syntax:@q< MUSIC  @i(text of command)>
  288.  
  289. Currently, MUSIC does not support the execution of host commands
  290. under Kermit-MUSIC.
  291. However, the MUSIC commands LIBRARY, PURGE, RENAME, COPY, and LIST
  292. are simulated by Kermit itself, thus providing a set of
  293. subcommands for managing
  294. local files.  The subcommand MUSIC is synonymous with the generic
  295. subcommand HOST.
  296.  
  297. @Heading<The RECEIVE Subcommand>
  298.  
  299. @Index(RECEIVE)
  300. Syntax:@q< RECEIVE [@i(filespec)]>
  301.  
  302. The RECEIVE subcommand tells Kermit to receive a file or file group
  303. from the other system.
  304. You should then issue a SEND subcommand to the other Kermit.
  305.  
  306. If the optional @i(filespec) is omitted, Kermit-MUSIC will use the
  307. name(s) provided by the other Kermit.
  308. If that name is not a legal MUSIC file name, Kermit-MUSIC will
  309. delete excess characters and will change illegal characters to
  310. dollar signs.
  311. A @i(filespec) in the subcommand indicates what name the incoming file
  312. should be given.
  313. Wildcards may not be used.
  314. If the optional @i(filespec) is provided,
  315. but more than one file arrives, the first file will be stored under
  316. the given @i(filespec), and the remainder will be stored under
  317. their own names on the default code.
  318.  
  319. For purposes of folding and truncation, the maximum record length for
  320. a received file is 32767 if RECFM is V and "LRECL" if RECFM is F.
  321. @Index(Truncation)@Index(Folding)
  322.  
  323. @Index(Filename collision)
  324. If the incoming file has the same name as an existing file, the action
  325. taken depends on the FILE COLLISION setting.  The possible settings
  326. and their meanings are given in the Kermit-370 chapter.  Two of the
  327. settings (BACKUP and RENAME) require that
  328. Kermit-MUSIC change the incoming name
  329. so as not to obliterate the pre-@|existing file.
  330. It attempts to find a unique name by successively modifying
  331. the original and checking for the existence of such a file at each step.
  332. The procedure begins by truncating the filename to fifteen
  333. characters if necessary, and then appending @qq($0).
  334. If a file by that name exists, Kermit then replaces the @qq(0)
  335. with a @qq(1).
  336. It continues in this manner up to @qq(9), and if an unused name cannot
  337. be found, the transfer fails.
  338.  
  339. @Heading<The SEND Subcommand>
  340. @Index(SEND)
  341.  
  342. Syntax:@q{ SEND [@i(filespec)[<@i(options)>] [@i(foreign-filespec)]][, ...]}
  343.  
  344. The SEND subcommand causes a file or file group to be sent from MUSIC
  345. to the Kermit on the other system.
  346. Kermit-MUSIC will remove any code prefix for the file header of the
  347. outgoing file.
  348. @Index(Wildcards)
  349. The @i(filespec) may contain the wildcard characters @qq<*> or @qq<?>.
  350. If it does, then all matching
  351. files will be sent.  For details on the @i(options), see the chapter on
  352. Kermit-370.  There must be no blanks between the @i(filespec) and the
  353. @i(options), if any.
  354.  
  355. The @i(foreign-filespec), if any, is used for the file header of the
  356. outgoing file, replacing the usual filename copied from the
  357. MUSIC @i(filespec).
  358. If wildcards are present in the @i(filespec),
  359. then no @i(foreign-filespec) should be specified.
  360.  
  361. @Indexsecondary(primary="Blanks",secondary="preserving trailing")
  362. Trailing blanks in a text file with RECFM F are deemed superfluous and
  363. are stripped off when Kermit-MUSIC downloads the file.  In order to treat
  364. such blanks as significant, you must convert the record format to V.
  365.  
  366. @Heading<The SET Subcommand>
  367. @Index(SET)
  368.  
  369. Syntax:@q< SET @i(parameter) [@i(value)]>
  370.  
  371. The SET subcommand establishes or modifies various
  372. parameters controlling file transfers.
  373. The following SET parameters are available in Kermit-MUSIC,
  374. but not in Kermit-370 in general:
  375. @Begin(Format,spread 0)
  376. @tabclear()@tabset(2.0inches)
  377. DELIM@\Line delimiter for entering multiple commands.
  378. DESTINATION@\Default Code.
  379. FILE
  380.   LRECL@\Logical Record length for incoming file.
  381.   RECFM@\Record format for incoming files.
  382. @End(format)
  383.  
  384. @Subheading(SET DELIM)
  385.  
  386. Syntax:@q< SET DELIM [@i(letter)]>
  387.  
  388. @Index(Line delimiter)
  389. This sets (or clears) a command line delimiter for interactive
  390. Kermit subcommands.  Each occurrence of the delimiter character in
  391. the command buffer read from the terminal is treated as the start of
  392. a new subcommand.  The initial value is a blank, @i<i.e.>, no delimiter,
  393. but it can be set in one of the initialization
  394. files and thereby be used in parsing the initial command-line
  395. arguments.
  396.  
  397. @Subheading<SET DESTINATION>
  398. @Index(Default Code)
  399.  
  400. Syntax:@q< SET DESTINATION @i(code)>
  401.  
  402. This subcommand is equivalent to the CWD subcommand (@i[q.v.]).
  403.  
  404. @Subheading(SET FILE LRECL)
  405.  
  406. Syntax:@q< SET FILE LRECL @i(number)>
  407.  
  408. This sets the logical record length for incoming files to a @i(number)
  409. from 1 to 32767 (32K-1).
  410. This variable is used only for fixed format and binary files.
  411. The default is 80.
  412.  
  413. @Subheading<SET FILE RECFM>
  414.  
  415. Syntax:@q< SET FILE RECFM @i(option)>
  416.  
  417. This subcommand sets the record format to use for incoming files.
  418. Valid @i<options> are "Fixed" and "Variable" (the default).
  419. Fixed-format records are padded, folded, or truncated, as needed,
  420. to the current LRECL.  Note: these two formats correspond to FC and VC
  421. in standard MUSIC nomenclature.  MUSIC formats F, V, and U are not
  422. supported.
  423.  
  424. @Heading(The SPACE Subcommand)
  425. @Index(SPACE)
  426.  
  427. Syntax:@q< SPACE>
  428.  
  429. This subcommand displays the storage allocation on the default code.
  430. The available space is calculated by subtracting the current allocated
  431. space from the total space available to the user's code.
  432.  
  433. @Section<How to build an executable version of Kermit-MUSIC>
  434.  
  435. Before attempting to build Kermit-MUSIC, look in the
  436. Kermit distribution under IKMKER for an
  437. installation document, as well as "beware", help,
  438. and update files, and read them first.
  439. They will probably contain information that is more
  440. current and more detailed than what you see here.
  441.  
  442. Kermit-MUSIC consists at present of a few small jobs that (a)
  443. build GUPI (Generic Update Program), (b) use
  444. GUPI to apply the current fixes to the base code, and (c)
  445. assemble and link
  446. the updated Kermit source.
  447. The source for Kermit and GUPI itself is in many pieces,
  448. some generic for Kermit-370 and some specific to MUSIC.
  449. All the necessary pieces are sequenced in
  450. columns 73-80 so that the numbers form a strictly increasing
  451. sequence when the pieces are correctly "pasted" together.
  452. It is important to preserve the original sequence numbers so that
  453. updates can be applied to the source.
  454.  
  455. To create a runnable version:
  456.  
  457. @begin<format,leftmargin +2,above 1,below 1>
  458. @end<format>
  459. @tabclear()@tabset(3.5inches,4.0inches)
  460.  
  461. @begin(enumerate,spread 0.5)
  462. Collect the following @qq(ASM) files from the Kermit distribution onto
  463. the code $KRM with @q<RECFM FC> and @q<LRECL 80>: IK0DOC, IK0MAC,
  464. IKMMAC, IK0DEF, IK0MAI, IK0COM, IK0CMD, optionally IK0KAN,
  465. IKMUTL, IK0PRO, IK0GUP,
  466. and IKMGUP.
  467. The files must have an extension of ".S".
  468.  
  469. Assemble and link the Generic Update Program GUPI, producing
  470. @q($KRM:GUPI.LMOD).
  471. Before assembling the GUPI program, you must change the IK0GUP module.
  472. Edit the file $KRM:IK0GUP.S and convert all COPY pseudo-instructions
  473. into macro invocations.
  474. This is easily achieved by removing the word "COPY"
  475. from in front of the copy block's name.
  476. There are only 5 occurences of this and they are all in column 10.
  477. The source for GUPI consists of the combination
  478. IK0MAC, IKMMAC, IKMGUP, and IK0GUP.
  479.  
  480. Build the base Kermit source so that you can apply the
  481. modifications to it.
  482. Merge the source files in the order
  483. IK0DOC, IK0MAC, IKMMAC, IK0DEF, IK0MAI, IK0COM, IK0CMD, IKMUTL, IK0PRO,
  484. and save the result as @q($KRM:KERMIT.BASE.S).
  485.  
  486. Apply the updates using GUPI.  Note: this operation requires a region
  487. of at least 1024K.
  488. The following command will apply the fixes to the source
  489. module $KRM:KERMIT.BASE.S using the update file $KRM:IKMKER.UPD
  490. and save the updated source in $KRM:KERMIT.S.
  491. @example(GUPI $KRM:KERMIT.BASE.S $KRM:IKMKER.UPD $KRM:KERMIT.S)
  492.  
  493. Assemble the Kermit source and
  494. link the object deck together with
  495. MATCH and MFINDX to produce @q($KRM:KERMIT.LMOD).
  496.  
  497. Save the following jobstream in the file $KRM:KERMIT
  498. This will execute the KERMIT program with the proper system
  499. parameters.
  500. @begin<format,leftmargin +2,above 1,below 1>
  501. /SYS NOPRINT,REGION=256
  502. /FILE LMOD N($KRM:KERMIT.LMOD) SHR
  503. /LOAD XMON
  504. KERMIT
  505. @end<format>
  506.  
  507. Kermit-MUSIC requries the LSCAN privilege since it does a
  508. save library scan directly.
  509. You must modify either the system module LOOKUP or the macro
  510. invoked by LOOKUP called $MCM:USERTBL.M.
  511. Add the line
  512. @example<FILNAM '$KRM:KERMIT',(LSCAN,0)>
  513. to either of the two files.
  514. Reassemble the module LOOKUP and make sure that the new
  515. object deck is used when rebuilding the nucleus.
  516. If you do not give Kermit this privilege, the program will
  517. abend on user codes that do not have LSCAN.
  518. @end(enumerate)
  519.  
  520. @Index(Initialization files)@Index(Translation)
  521. Since Kermit-MUSIC drives the I/O directly for both @qq(TTY) and
  522. @qq(SERIES1) devices, your site's
  523. ASCII/EBCDIC translation tables will not affect Kermit-MUSIC
  524. in file transfer mode.
  525.  
  526. @Section<What's New>
  527. Below is a list of the MUSIC-specific updates in Version
  528. @value(-musicversion) of
  529. Kermit-MUSIC added since the previous major release,
  530. Version 4.2, in March of 1990.
  531. For a list of generic additions, see
  532. the Kermit-370 chapter.
  533.  
  534. @begin(enumerate,spread 0.5)
  535. Multiple Kermit subcommands specifiable on the MUSIC command line if
  536. the INIT file defines a delimiter.
  537.  
  538. Support for time tags for files being sent.
  539.  
  540. @end(enumerate)
  541.  
  542. @Section(What's Missing)
  543.  
  544. Work on Kermit-MUSIC will continue.  Features that need to be
  545. improved or added include:
  546. @begin(itemize)
  547. Allow timeouts so Kermit-MUSIC does not wait forever if a packet does
  548. not arrive in a timely fashion.  This is not possible under MUSIC at
  549. present for I/O through a protocol converter.
  550.  
  551. Implement file archiving.
  552.  
  553. Support execution of Music commands from Kermit or the remote
  554. Kermit.
  555.  
  556. Add a SET REPEAT subcommand.
  557.  
  558. Support subdirectories and userids longer than four characters.  There
  559. is already an update for this support, but it requires MUSIC 2.4 and
  560. has not been tested yet.  See the "beware" file for the latest
  561. information.
  562.  
  563. @end(itemize)
  564.  
  565. Anyone interested in working on these or other improvements should first
  566. get in touch with the Center for Computing Activities at Columbia
  567. University to find out if someone else has already begun a similar
  568. project (and, if so, who).
  569.