home *** CD-ROM | disk | FTP | other *** search
/ Crawly Crypt Collection 1 / crawlyvol1.bin / magazine / aeo / aeopj_04 / aepj4.txt
Text File  |  1994-03-31  |  297KB  |  7,094 lines

  1. /**********************************************************************
  2.     Title:          AEOPJ4.TXT
  3.  
  4.     Created:        December 25, 1993
  5.     Last Modified:  March  31, 1994
  6.  
  7.     Purpose:        Fourth installment of AEO Programmers' Journal
  8.  
  9.     Editor:         Albert Dayes
  10.  
  11.     Legal Notes:    Copyright © 1993 Subspace Publishers
  12.                     All Rights Reserved
  13.  
  14. ***********************************************************************/
  15.  
  16. Publisher = Michael Lindsay                               [GE: EXPLORER]
  17. Managing Editor = Travis Guy                               [GE: AEO.MAG]
  18. Editor = Albert Dayes                      [GE: AEO.1] [CIS: 70007,3615]
  19. Technical Editor = Carl Barron           [GE: CBARRON] [CIS: 75066,3204]
  20. OBJECT::ATARI columnist = Warwick Allison      [In: warwick@cs.uq.oz.au]
  21. 68K columnist = Damien M. Jones                                [GE: DMJ]
  22. PASCAL columnist = Kris Gasteiger                      [CIS: 73637,2004]
  23. Parsing the human equation = Ron Whittam  [In: r.whittam@genie.geis.com]
  24.  
  25. :: Internet subscription service: stzmagazine-request@virginia.edu    ::
  26. ::                 (Internet subscription requests ONLY!)             ::
  27.  
  28. Contributing:
  29.  
  30. John Perry Barlow       [In: barlow@eff.org]
  31.  
  32. Roger Burrows           [GE: R.BURROWS1]
  33.  
  34. Gerry J. Elman, J.D.    [CIS: 72245,556]
  35.  
  36. Scott R. Garrigus       [GE: S.GARRIGUS]
  37.  
  38. Kurt Stammberger        [In: kurt@rsa.com]
  39.  
  40. Frederic M. Wilf, J.D.  [CIS: 72300,2061]
  41.  
  42. [ Where GE  = GEnie
  43.         In  = Internet
  44.         CIS = Compuserve ]
  45.  
  46. /***********************************************************************/
  47.  
  48. Table of Contents:
  49.  
  50. * Editorial
  51. * Meet the Authors - short biographical notes on the authors
  52. * What is in this issue of AEO-PJ.
  53. * 68K Column - Some Assembly Required by Damien M. Jones
  54. * C Column - First steps to learning C programming
  55. * Advanced Computing - Carl Barron YACCs with alert boxes
  56. * GFA Basic Column -- Scott R. Garrigus talks about Resources and RCS
  57. * Hard Core - Interview with Roger Burrows author of ExtenDOS
  58. * Dabbling in PASCAL - Kris Gasteiger discusses keyboard functions
  59. * Library - Damien examines a new Atari specific CD-ROM disc called Gemini.
  60. * Periodicals - A preprint from Wired magazine on the Clipper Chip + RSA info
  61. * OBJECT::ATARI - Warwick Allison on moving from C to shining C++
  62. * Parsing the human equation - by Ron Whittam
  63. * Language Watch - Current versions of developer tools
  64. * Bad Example - Do you really want to do that?
  65. * Legal Forum - A discussion of Intellectual Property issues
  66. * Best Software Development tools for 1993
  67. * On the Networks - Interactive programming online
  68. * Network Sign-up Information
  69. * Shareware survey - for shareware authors only
  70. * Brain Stem rotator - A true programming challenge?
  71. * Software Development Conference, March 14-18 in San Jose, California
  72. * 10 Tips From the Programming Pros
  73. * Glossary of Terms
  74. * ATARI DEVELOPER INFORMATION - Where to get the official Atari Docs
  75. * Sources of Information - References for this issue
  76. * Post Increment - What is coming up in the next issue
  77. * LEGAL NOTES
  78.  
  79. -------------------------------------------------------------------------
  80.      Editorial:  "Shareware - Does it really work?"
  81.                      By: Albert Dayes
  82. -------------------------------------------------------------------------
  83.  
  84. Category 3,  Topic 11
  85. Message 194       Sun Jan 23, 1994
  86. MIKE-ALLEN [NM~SysOp]        at 19:52 EST
  87.  
  88. I just received interesting EMail from Karsten Isakovic, the author of
  89. SysMon.  Thought folks might be interested.  His GEnie Email address is:
  90.  
  91.  KARSTEN_ISAKOVIC@B.MAUS.DE@INTERNET#
  92.  
  93.  
  94.  >Hello Mike,
  95.  >
  96.  >i read in AEO-PJ3 of December 19 that there was a discussion about my
  97.  >debugger SysMon in a Genie roundtable. I have some comments to that.
  98.  >I know its a bit late, but better late than never ;-)
  99.  >
  100.  >
  101.  >The version 1.05 which was in discussion in the RTC is more than 4
  102.  >years old.  It does not run on TOS 2.06 or TT. The current version
  103.  >1.08 runs on the TT and TOS 2.06, but not on the falcon.
  104.  >
  105.  >But the 1.09 is now in the beta test stage, and runs on the falcon.
  106.  >SysMon works even with graphic expansions like BlowUp or
  107.  >Screenblaster.
  108.  >
  109.  >It supports all new MTOS (AES 4.2)  and MagiX (Beta 2.10) AES Call,
  110.  >Speedo (Beta 4.2) the MiNT (1.08)/MagiX gemdos calls, all new falcon
  111.  >XBios calls (like DSP, SND and Video-Calls) and the Metados Xbios
  112.  >extensions..
  113.  >
  114.  >Some new AES protocolls and extensions are supported, like the new
  115.  >GEMINI- Messages (1.99), XACC, WinX (2.2), Kobold (2.5), Selectric
  116.  >(1.10)...
  117.  >
  118.  >The XBRA- and cookie list was also updated (up to XBRALIST of Dec 93).
  119.  >
  120.  >There is new code to find the internal system variables. Even if none
  121.  >of them is found, SysMon will run. But you get more information, if
  122.  >everything is known ;-)
  123.  >
  124.  >Since 1.0.8 there is an interface to the templemon debugger, you can
  125.  >now directly jump into TMON if a System function is used by the
  126.  >selected programs.  (BTW the current TMOS version is 2.2)
  127.  >
  128.  >The upcoming 1.09 does not yet work under MiNT/MTOS (but the all
  129.  >calls are already supported, since the MagiX-Beta offers some of
  130.  >them...), but a future version will do so..
  131.  >
  132.  >
  133.  >There is no newer version of SysMon in any FTP site or BBS since i
  134.  >did not allow this kind of distribution since the version 1.06
  135.  >(everybody used SysMon, nearly nobody paid the ShareWare fee...). I
  136.  >have only 3 US and 2 CA people in the database and as you see in the
  137.  >RTC, it is fairly common...
  138.  >
  139.  >Since then, you can still copy SysMon to a friend, but for a current
  140.  >version, you have to send a disc with a back envelope and two
  141.  >international relay coupons (Which i can exchange into stamps at the
  142.  >postal office). You dont have to register in advance, you can test
  143.  >SysMon as long as you wish. But if you use it regularly and like it,
  144.  >pay the fee.
  145.  >
  146.  >This simple modification to the distribution mode (and the
  147.  >announcement about it in the press) raised the percentage of people
  148.  >who paid the fee. I think it is because they had to get into 'real'
  149.  >contact with me. The SysMon is no longer an anonymous product, you
  150.  >know from whom you got it...
  151.  >
  152.  >My adress is:
  153.  >
  154.  >  Karsten Isakovic
  155.  >  Wilmersdorferstrasse 82
  156.  >  10629 Berlin
  157.  >  Germany
  158.  >
  159.  >You can also reach me via Email at ki@cs.tu-berlin.de and i could send
  160.  >SysMon as uuencoded Message (_very_ long, about 400 K with english
  161.  >documentation). I can also split it to several messages. But i still
  162.  >need your full name and adress.
  163.  >
  164.  >The MagiX/Falcon version 1.08 will be ready at the end of february. I
  165.  >dont know if there will be a new distribution mode, i still have to
  166.  >think about it...
  167.  >
  168.  >
  169.  >Greetings, Karsten
  170.  >
  171.  >PS: If there is also an american list of cookies, Xbra magics or
  172.  >Message protocolls, send it via email. We have nearly no information
  173.  >about GENEVA around here, so there is no support yet.
  174.  >
  175.  >
  176.  
  177. I have pointed him towards Dan Wilga for Geneva info and given him the
  178. Gnva cookie info as well as the CJar cookie info. Any other cookies
  179. that he might not have would be appreciated, I'm sure.
  180.  
  181. Only 5 North American registrations (3 USA, 2 Canada) - for shame!
  182.  
  183.  
  184.         Mike Allen
  185.         ST HelpDesk~Sysop
  186.  
  187.         Written: 5:42 PM Mountain Time
  188.                  Sunday, January 23, 1994
  189.  
  190.  
  191. Is there anything else that I can add to this message?  Probably not,
  192. it is very clear.  AEO-PJ is moving toward better support for
  193. shareware software developers and in our next issue we will have a
  194. debut column called Soft Core.  Since Hard Core is an interview with a
  195. commercial Atari developer Soft Core will be with a shareware Atari
  196. developer.  Also do not miss the shareware survey, later in this
  197. issue.
  198.  
  199. -- Albert
  200.  
  201. PS:  Anyone who would like to send feedback to AEO-PJ may send it via
  202.      any of the electronic addresses listed below.  Use the method
  203.      which is most convenient for you.
  204.  
  205. CIS: 70007,3615
  206. GE:  AEO.1
  207. In:  70007.3615@compuserve.com
  208.  
  209. /**********************************************************************/
  210.                       Meet the Authors
  211. /**********************************************************************/
  212.  
  213. //// John Perry Barlow
  214.  
  215. John Perry Barlow (barlow@eff.org) is co-founder and Vice-Chairman of
  216. the Electronic Frontier Foundation, a group which defends liberty,
  217. both in Cyberspace and the Physical World. He has three daughters.
  218.  
  219. //// Roger Burrows
  220.  
  221. Roger Burrows has written code in four high-level languages and five
  222. assembler languages and usually manages to remember which is which.
  223. He lives in Ottawa, Canada with his wife, cat, and computers.  He can
  224. be reached on GEnie as R.BURROWS1.
  225.  
  226. //// GERRY J. ELMAN
  227.  
  228. Mr. Elman holds an M.S. in Chemistry from Stanford University, in
  229. addition to his J.D. from Columbia University.  With 26 years of
  230. varied experience as a practicing attorney, he is an authority and
  231. widely published author on technology and the law.  His areas of
  232. expertise include biotechnology, computers and intellectual property.
  233.  
  234. For four years, Mr. Elman practiced as an in-house patent attorney for
  235. Rohm and Haas, a large multinational chemical company.  Then, as a
  236. Deputy Attorney General of Pennsylvania, Mr. Elman conducted
  237. litigation on behalf of the Commonwealth.  Later, as a trial attorney
  238. with the U.S. Department of Justice, Antitrust Division, he
  239. participated in civil and criminal investigations and complex
  240. litigation, including a trial of five pharmaceutical companies accused
  241. of fraud on the U.S.  Patent Office.  Mr. Elman returned to private
  242. practice in 1982.
  243.  
  244. Today, Mr. Elman is the founder and editor-in-chief of the lawyers'
  245. newsletter Biotechnology Law Report.  He has also served on the
  246. advisory board on biotechnology monographs for the Bureau of National
  247. Affairs (BNA) and the advisory board of the law journal Computer Law
  248. Reporter.  He frequently lectures on biotechnology and the law.  He
  249. has arbitrated multi-million dollar disputes for the American
  250. Arbitration Association, has served as an expert witness in patent
  251. law, and has represented both plaintiffs and defendants in litigation
  252. over intellectual property rights.  A profile of Mr. Elman appears in
  253. Who's Who in America.
  254.  
  255. //// FREDERIC M. WILF
  256.  
  257. Mr. Wilf has been practicing law with Mr. Elman since 1986.  He
  258. advises clients on copyright, trademark and business law, with an
  259. emphasis on computer and high technology issues.  He litigates
  260. copyright and trademark infringement actions and negotiates software
  261. development and license agreements.  Mr. Wilf also represents
  262. out-of-state corporations as local counsel, and prepares and
  263. prosecutes copyright and trademarks applications and related
  264. proceedings.
  265.  
  266. A graduate of Rutgers University and Case Western Reserve University
  267. Law School, Mr. Wilf writes and speaks extensively on topics involving
  268. computers and the law.  His articles have appeared in the Computer/Law
  269. Journal, the Computer Law Reporter and PC Magazine.  He and Mr. Elman
  270. wrote the chapter "Trademark Protection of Software" for L.J. Kutten's
  271. law treatise.  Computer Software:  Protection/Liability/Law/Forms.
  272. Mr.  Wilf contributed a chapter to a book entitled Winning with
  273. Computers.  Trial Practice in the Twenty-First Century, published by
  274. the American Bar Association (ABA) in 1991.  Mr. Wilf has also served
  275. as the organizer of the corporate law conference (CORPLAW) on the
  276. ABA's computer network, ABA/net.  A profile of Mr. Wilf appears in
  277. Who's Who in the East.
  278.  
  279. //// Scott R. Garrigus
  280.  
  281. Scott's first computer was the venerable Atari 800.  He once spent a
  282. whole summer vacation indoors because he loved using his computer so
  283. much.
  284.  
  285. Nowadays Scott is a college graduate musician and has just recently
  286. released his first record album, Pieces Of Imagination.  He uses his
  287. Atari ST for all aspects of album production, including writing his
  288. own MIDI utilities.
  289.  
  290. He also runs his own shareware business, SRG Music & Software and has
  291. released his first shareware program called EmailMan, the email
  292. address database.  A demo of EmailMan can be found on the new GEMini
  293. CD ROM.
  294.  
  295. Scott will be taking over our GFA BASIC column and he can be reached
  296. at any of the following email addresses:
  297.  
  298.  Delphi: GARRIGUS
  299.  GEnie: S.GARRIGUS
  300.  Internet: s.garrigus@genie.geis.com
  301.  PAN: GARRIGUS
  302.  
  303. //// Kurt Stammberger
  304.  
  305. Kurt Stammberger is a Technology Marketing Manager for RSA Data
  306. Security, Inc.
  307.  
  308.  
  309. /**********************************************************************/
  310.       What is in this issue of AEO-PJ and new in the Atari market
  311.                        By: Albert Dayes
  312. /**********************************************************************/
  313.  
  314. //// Atari Corp:
  315.  
  316. The Atari Jaguar (64-Bit Interactive Multimedia Entertainment System)
  317. continues to make good progress.  In addition, the Jaguar won several
  318. awards at the Winter CES (Consumer Electronics Show).
  319.  
  320. Discussions continue, on the subject of Atari clones, Falcon and TT
  321. accelerators and even new Atari computer magazines.  In addition, a
  322. new shipment of Atari TT computers to US dealers.
  323.  
  324. //// CD-ROM Technology:
  325.  
  326. In this issue we cover a few programming conferences, and a special
  327. one on CD-ROM.  The CD-ROM conference discusses how to use a CD-ROM
  328. drive on the Atari.  In addition an interview with Roger Burrows,
  329. author of a new CD-ROM driver (ExtenDOS) is also in the issue.
  330.  
  331. //// Legal Issues:
  332.  
  333. Recently the PTO (Patent & Trademark Office) decided to re-examine the
  334. Compton patent and is taking input from software developers on the
  335. issue of software patents.
  336.  
  337. In talking with a friend of mine (who has a software patent), I
  338. made some interesting findings.  Even though his software patent is in
  339. his name, the company owns it (which is expected).  Xerox, (the
  340. company he works for) has patent cross-licesing agreements with Kodak,
  341. IBM, etc.  That means that Xerox can use any of the patents that
  342. Kodak, IBM, etc hold.  And conversely, IBM can use all of the patents
  343. Xerox has, without paying any licensing fees.  For those companies or
  344. individuals without a large patent portfolio, paying licensing fees is
  345. the only option.
  346.  
  347. Since Intellectual Property is an important subject we have a nice
  348. article on the subject.  Fred Wilf and Gerry Elman (of the law firm,
  349. Elman Wilf & Fried) discuss the different aspects of Intellectual
  350. Property, in the article, "How to work with your intellectual property
  351. Attorney".  Many interesting aspects of the law that developers should
  352. know about are included.
  353.  
  354. Also, we have a pre-print from Wired magazine on the Clipper chip and
  355. what it means to US citizens.
  356.  
  357. //// Pure Profiler - a new programming tool:
  358.  
  359. A new Profiler from Gribnif Software, called Pure Profiler.  Based on
  360. the article in Desktop Notes -- Gribnif Software, article by Dan
  361. Wilga.
  362.  
  363. The newest programming tool we have to offer is the Pure Profiler,
  364. also from Application Systems in Germany.  This invaluable program
  365. generates statistics about the operation of other programs and helps
  366. you make decisions about how to get the best efficency from your code.
  367.  
  368. The Profiler runs much like the Pure Debugger in the Pure C package
  369. does.  It provides an unlimited number of windows which show you
  370. source code modules, 680x0 assembly, and profiler output.  The
  371. profiler is familiar with Pure C and Pure Pascal symbols, and also the
  372. DRI format.  This means that it can be used with programs which were
  373. generated by almost any compiler.
  374.  
  375. Statistics are broken up into major categories: Code Usage and
  376. Profiling.  Code Usage provides you with a visual representation of
  377. the lines in your program which were actually used as the program ran;
  378. they appear in boldface type.  This allows you to know if there are
  379. segments of "dead" code which are never used.
  380.  
  381. Profiling gives extensive information about how much time each module
  382. of your program takes to run and how many times the modules are
  383. called.  This same information is generated for every single line in
  384. the program, as well.  By using this information, you can decide where
  385. the program spends most of its time during execution, and possibly
  386. optimize that area of code.
  387.  
  388. The main level of the Profiling information is broken into two
  389. segments:  Operating System and Program calls.  The Operating System
  390. segment lists all of the major types of OS functions (GEMDOS, BIOS,
  391. AES, etc).  Clicking on a function type then gives you a list of the
  392. calls of that type, and provides you with a percentage of time used
  393. during each, and the totla number of calls.
  394.  
  395. In the Program calls list, you are given a list of all function in the
  396. program, along with the time data.  Further clicking on a function
  397. reveals the source code for that function, along with the time data
  398. for each line.
  399.  
  400. The Pure Profiler also keeps track of all file operations.  For each
  401. file which is used by your program, it maintains a list of how many
  402. times it was read, written, opened, etc., as well as the number of
  403. bytes that were operated upon and the underlying GEMDOS call used.
  404.  
  405. Furthermore, useful memeory statistics can be displayed.  You can
  406. find out how much heap (Malloc) memory the program is using currently,
  407. and the highest amount it has used at once.  The same data is also
  408. displayed for the program stack.
  409.  
  410. Breakpoints can also be set, and the program's instructions can be
  411. single-stepped.  Profile data can be saved to disk, optionally
  412. including the source/assembly code of each line of the program, to
  413. make evaluating the code easier.
  414.  
  415. At this time, the Pure Profiler includes a German manual; but the
  416. program itself is completely in English, and has a very intuitive user
  417. interface.  The Pure Profiler is extremely helpful tool that no
  418. serious programmer should be without.
  419.  
  420. //// DevPAK DSP
  421.  
  422. HiSoft/ORA is releasing Devpak DSP, which will make Motorola 56K
  423. Digital Signal Processor programming much more enjoyable.  The price
  424. should be close to $100.
  425.  
  426. //// Books
  427.  
  428. There was going to be a review of Writing Solid Code by Microsoft
  429. Press in this issue, but the Clipper article took its place.  For
  430. those who want to read a recent review can read it in the December
  431. 1993 issue of the C Users Journal.
  432.  
  433. Software Development: A Legal Guide recently arrived.  It includes a
  434. 720K floppy disk (works on the Atari) of all of the contracts listed
  435. in the book.  From a quick scan it covers many details that many
  436. people would just skip over in making agreements.  It also has icons
  437. to indicate when you should get a real Attorney to help you.  Some
  438. highlights include:
  439.  
  440. * when to use copyright, trademark, trade secret or patent protection
  441. * what the strengths and limitations of each type of protection are
  442. * how to avoid infringement
  443. * what you need to know about software patents
  444. * what key provisions to include when drafting an agreement
  445. * step-by-step instructions on drafting
  446.   - employment agreements
  447.   - agreements with independent contractors and consultants
  448.   - software publishing agreements
  449.   - agreements for the development of custom software
  450. * when and how to obtain permission to use materials in multimedia
  451.   projects
  452. * what you new to know about the new multimedia patent (Compton's)
  453. * when to contact an attorney
  454.  
  455. There will be a review of this book, in the next issue of AEO-PJ.
  456.  
  457.  
  458. /*                   DEVELOPERS, PLEASE NOTE!                        */
  459.  
  460. The Independent Association of Atari Developers (IAAD) provides peer
  461. support to commercial Atari developers.  The IAAD can help you find a
  462. shrinkwrap machine, weigh the benefits of different kinds of
  463. packaging, reach potential customers, tackle programming dilemmas,
  464. locate distributors for your products - in short, our members offer
  465. each other information on virtually every aspect of commercial
  466. software development and marketing.  Membership is open to registered
  467. Atari developers who have a commercial product currently shipping or
  468. about to launch.  To apply, please send a note to PERMIT$ on GEnie.
  469.  
  470.  
  471. /**********************************************************************/
  472.        68K Column - Some Assembly Required
  473.           By: Damien M. Jones
  474. /**********************************************************************/
  475.  
  476. -- Part 3: Round and round she goes... --
  477.  
  478. Yes, I'm back.  Last month I covered addressing modes and a few
  479. (three) instructions.  This month I'll cover a few more instructions,
  480. including a little looping.  This article will be a bit larger than
  481. the previous ones, as there's a lot to cover!
  482.  
  483. FLAGS
  484.  
  485. Whenever you do something with a 680x0 program, the CPU "takes notes".
  486. That is, it looks at the results of what you did and saves some
  487. information about those results in the "condition code register"
  488. (ccr).  You can play with this register directly, but there are also
  489. some special instructions that will look at its contents so you don't
  490. have to mess with it too much.
  491.  
  492. There are five flags in the ccr that are important.  Each has a
  493. letter and is set or cleared based on different properties.  Here they
  494. are:
  495.  
  496.     N   This is the "negative" bit.  If the result of the operation is
  497.         less than zero, this bit will be set (1); otherwise (if the
  498.         result is zero or greater) this bit will be cleared (0).
  499.  
  500.     Z   This is the "zero" bit.  It is set whenever the result of an
  501.         operation is zero, or cleared whenever the result is NOT zero.
  502.  
  503.     V   This is the "overflow" bit.  If the result of an operation is
  504.         too big for the size of the operands, an arithmetic overflow
  505.         occurred, and this bit will be set.  Otherwise it is cleared.
  506.  
  507.     C   This is the "carry" bit.  If the result of an addition created
  508.         a carry out of the highest bit, or if a borrow was needed on
  509.         the highest bit, this bit is set.  Otherwise it is cleared.
  510.  
  511.     X   This is the "extend" bit.  Only certain operations use it,
  512.         and it mostly is used for large (bigger than 32-bit)
  513.         operations.  When it is used, it will be a copy of the C bit.
  514.  
  515. MORE INSTRUCTIONS
  516.  
  517. Last month's example program used just three instructions, add, move,
  518. and trap.  There are quite a few more, but this month I'll cover a few
  519. variations of those three instructions, plus a few new ones.
  520.  
  521. Keep in mind that most assemblers will choose a more specialized
  522. variation of an instruction, if it can, so you can often just write
  523. the basic instruction and your assembler will fill in the proper form.
  524. The reason I am explaining some of the variations is because they
  525. usually have slightly different effects that you need to be aware of
  526. when writing programs.
  527.  
  528. move.s source,destination
  529.  
  530. I described this last time, but I did not say what happens to the
  531. flags in the ccr after the move (because I hadn't explained the flags
  532. yet).  So here is what happens to the flags, when you move something:
  533.  
  534.     N    Set if the value moved is negative.  Cleared otherwise.
  535.     Z    Set if the value moved is zero.  Cleared otherwise.
  536.     V    Always cleared.
  537.     C    Always cleared.
  538.     X    Not affected.  (It won't change.)
  539.  
  540. movea.s source,destination
  541.  
  542. This is just like the move instruction, with a few important
  543. differences.  First, the destination must be an address register (a0
  544. to a7).  As a matter of fact, if the destination is going to be an
  545. address register, you _must_ use the movea variation; fortunately most
  546. assemblers will slip the "a" in for you if you forget.
  547.  
  548. The other major difference is that this instruction does not change
  549. ANY of the ccr flags.  This means if you have just done something that
  550. sets some of the condition codes, you can still move data into an
  551. address register without changing those flags.  (This is more useful
  552. than it sounds.)  Just keep in mind that if you move something into an
  553. address register, the condition codes are not affected.
  554.  
  555. moveq #n,destination
  556.  
  557. This is like the move instruction, but it too has some differences.
  558. For one thing, the size is always a full 32-bit move.  Also, the
  559. destination must be a data register (d0 to d7).  Finally, the number
  560. moved must be between -128 and 127; although this means it's only an
  561. 8-bit value, it is sign-extended to 32 bits.
  562.  
  563. Otherwise, this instruction is like the regular move - the condition
  564. codes are set the same way.  You should use moveq whenever you can, as
  565. it is faster and uses less storage space than move.l #n,destination.
  566. Your assembler will normally make this distinction for you, but it can
  567. only do so if you're moving a long value (.l) and that value is in the
  568. range -128 to 127.
  569.  
  570. clr.s destination
  571.  
  572. This is the "clear" instruction.  Basically, it moves a zero into the
  573. destination.  The destination may be any size (byte, word, or long),
  574. but it can't be an address register.  The condition codes are affected
  575. as follows:
  576.  
  577.     N    Always cleared (since the result is never negative).
  578.     Z    Always set (since the result is always zero).
  579.     V    Always cleared.
  580.     C    Always cleared.
  581.     X    Not affected.
  582.  
  583. add.s source,destination
  584.  
  585. This was mostly explained last time, but as with move I didn't
  586. explain what happens to the condition codes:
  587.  
  588.     N   Set if the result of the addition was negative.  Cleared
  589.         otherwise.
  590.     Z   Set if the result of the addition was zero.  Cleared
  591.         otherwise.
  592.     V   Set if the addition caused an overflow.  Cleared otherwise.
  593.     C   Set if the addition caused a carry.  Cleared otherwise.
  594.     X   Set the same as the carry bit.
  595.  
  596. Also note that the plain-vanilla add instruction can _only_ be used if
  597. either the source or destination is a data register; if this is not
  598. the case, you will need to use a different "flavor" of add
  599. instruction.  (Again, normally your assembler will help you out here,
  600. but you should be aware of the differences.)
  601.  
  602. adda.s source,destination
  603.  
  604. This is mostly like the plain-vanilla add, except that the
  605. destination must be an address register.  In fact, if the destination
  606. is an address register, this form MUST be used, even if the source is
  607. a data register.  There are other differences as well.  The size may
  608. only be .w or .l; if you use the word size, the word value is
  609. sign-extended to a full 32 bits before being added to the address
  610. register.  And, just like the movea instruction, the condition codes
  611. are NOT affected at all by this instruction.
  612.  
  613. addi.s #n,destination
  614.  
  615. This is basically like the plain-vanilla add, with a few minor
  616. differences.  As you can see from the instruction format, the source
  617. must be immediate data.  The destination can be anything except an
  618. address register (if you need to add immediate data to an address
  619. register, you use adda instead).  Otherwise this is just like add.
  620.  
  621. The reason this instruction is present is because with the regular
  622. add, you can only add an immediate value to a data register--because
  623. either the source or destination must be an address register, and the
  624. source is already an immediate value.  With this instruction, you can
  625. add immediate data to anything, not just a data register.  Your
  626. assembler will normally make this distinction for you.
  627.  
  628. addq.s #n,destination
  629.  
  630. This is like a regular add, with some differences.  (That sounds
  631. familiar...)  The number that you can add is in the range 1 to 8.
  632. You can add this number to just about anything; if you add to an
  633. address register, the condition codes are not affected (like with
  634. adda), but if you add to anything else the condition codes will be set
  635. as for a regular add.  Also, if you add to an address register, the
  636. size is always long (.l).
  637.  
  638. You use addq because it is faster than a regular addition, and it
  639. uses less memory.  Usually your assembler will replace addi.s
  640. #n,destination with addq if it can.
  641.  
  642. sub, suba, subi, subq
  643.  
  644. These are the subtract instructions.  They are just like their
  645. addition counterparts, add, adda, addi, and addq, except they subtract
  646. instead of add.
  647.  
  648. HELLO, WORLD! REVISITED
  649.  
  650. In light of these new instructions, let's look again at last month's
  651. example program and see what we can do with it.  Here's the program
  652. (I've shortened the comments to a single line each; for the fully
  653. commented listing, see last month's AEO-PJ):
  654.  
  655. *    Hello world!
  656. *    Some Assembly Required, Article 2
  657.  
  658. *    First, display text on the screen.
  659.  
  660.     move.l #text,-(sp)     ; Put the address of our text on the stack.
  661.     move.w #9,-(sp)        ; Function code for cconws.
  662.     trap #1                ; Call GEMDOS.
  663.     add.w #6,sp            ; Remove our 6 bytes from the stack.
  664.  
  665. *    Now wait for a keypress.
  666.  
  667.     move.w #8,-(sp)        ; Function code for cnecin.
  668.     trap #1                ; Call GEMDOS.
  669.     add.w #2,sp            ; Remove our 2 bytes from the stack.
  670.  
  671. *    Now exit the program.
  672.  
  673.     move.w #0,-(a7)        ; Function code for pterm0.
  674.     trap #1                ; Call GEMDOS.
  675.  
  676. *    Data used by our program.
  677.  
  678. text    dc.b 'Hello, world!',0    ; Text to display.
  679.  
  680. All right, to begin with I see in the ninth line the following:
  681.  
  682.     add.w #6,sp            ; Remove our 6 bytes from the stack.
  683.  
  684. This could use the addq variation; while the assembler will normally
  685. fill this in for us, it's a good idea to do it yourself if you see it,
  686. so you know what's going on.  So we'll replace it with this:
  687.  
  688.     addq #6,sp             ; Remove our 6 bytes from the stack.
  689.  
  690. Since sp is really a7, and adding to an address register is always a
  691. 32-bit operation, I did not include the .l--but you can if you like.
  692. In a similar manner, the fifteenth line of our program (add.w #2,sp)
  693. can also be changed to addq.
  694.  
  695. As a last change, we can also change the ninteenth line of our
  696. program:
  697.  
  698.     move.w #0,-(a7)        ; Function code for pterm0.
  699.  
  700. The 680x0 has a handy instruction for putting zeroes in places, so we
  701. can use that instead:
  702.  
  703.     clr.w -(sp)        ; Function code for pterm0.
  704.  
  705. Note that I also changed a7 to sp.  They really mean the same thing,
  706. and I usually use a7 in my own programs, but everywhere else in the
  707. program I used sp, so I thought it would be better to be consistent.
  708. (Wish I knew how that a7 slipped in there. ;-)
  709.  
  710. WHAT ABOUT LOOPING?
  711.  
  712. Almost every program requires looping of some sort.  It's one of the
  713. three basic structures of a program (sequential, iteration, and
  714. branching).  The 680x0 has quite a few instructions to handle looping;
  715. I won't cover them all this month, but I will list some of the basics.
  716.  
  717. bra destination
  718.  
  719. This instruction means "branch always" to the destination address.
  720. The destination is a label inside your own program.  This is sort of
  721. like a GOTO in BASIC; those of you who prefer more structured
  722. programming may wince at the mention of the dreaded GOTO, but remember
  723. that all of the structures you're familiar with can be built from IF
  724. and GOTO statements.  (Next month I'll even show you how it's done.)
  725.  
  726. One thing to remember is that bra is a "relative" jump; that is,
  727. instead of telling the CPU exactly where to go, it tells it how far
  728. and what direction (forwards or backwards).  This means you can
  729. "relocate" or move the code, and as long as you move the destination
  730. along with it, the bra instruction will still indicate the proper
  731. destination.  Most of the time this is not an important distinction;
  732. later in this series I'll explain when it does matter.  When you write
  733. programs using bra, you don't have to figure out how far to jump; you
  734. just use the destination's label, and the assembler figures out how
  735. far it is.  This does mean, however, that you can only bra to
  736. destinations within your program.
  737.  
  738. bcc destination
  739.  
  740. This is really an entire class of instructions.  The "b" in "bcc"
  741. means branch, and the "cc" means condition codes.  This is sort of
  742. like an IF (condition) THEN GOTO in BASIC.  What it does is examine
  743. the condition codes (which are normally set by preceding instructions)
  744. and, if certain conditions are met, branches to a different place in
  745. your program.  If the conditions are NOT met, the instruction does
  746. nothing.  There are several different conditions you can check for;
  747. all use a two-letter code (to replace the "cc").  Here they are (note
  748. that I'm listing them with the "b" for branch):
  749.  
  750. beq    Branch if equal; that is, if the Z flag is set.  If the
  751.     preceding operation resulted in zero, the Z flag will be set, so
  752.     beq can also be used as a "branch if zero" instruction.  (This
  753.     mnemonic comes from its use with the compare instruction, cmp,
  754.     which I will discuss next month.)
  755.  
  756. bne    Branch if not equal; that is, if the Z flag is clear.  If the
  757.     preceding operation did not result in zero, the Z flag will be
  758.     cleared, so bne can also be used as a "branch if NOT zero"
  759.     instruction.  (Like beq, this mnemonic relates to the compare
  760.     instruction.)
  761.  
  762. bgt    Branch if greater than; specifically, if the N and V flags
  763.     match and the Z flag is clear.  If the preceding operation
  764.     resulted in a value greater than zero, the branch occurs.
  765.  
  766. bge    Branch if greater than or equal; specifically, if the N and V
  767.     flags match.  If the preceding operation resulted in a value
  768.     greater than or equal to zero, the branch occurs.
  769.  
  770. ble    Branch if less than or equal; specifically, if the N and V
  771.     flags do not match, or the Z flag is set.  If the preceding
  772.     operation resulted in a value less than or equal to zero, the
  773.     branch occurs.
  774.  
  775. blt    Branch if less than; specifically, if the N and V flags do not
  776.     match.  If the preceding operation resulted in a value less than
  777.     zero, the branch occurs.
  778.  
  779. bpl    Branch if plus (positive); that is, if the N bit is clear.  If
  780.     the preceding operation resulted in a positive value (greater than
  781.     or equal to zero), the branch occurs.
  782.  
  783. bmi    Branch is minus (negative); that is, if the N bit is set.  If
  784.     the preceding operation resulted in a negative value (less than
  785.     zero), the branch occurs.
  786.  
  787. bhi    Branch if higher; specifically, if the C and Z bits are both
  788.     clear.  If the preceding operation resulted in a value greater
  789.     than zero, the branch occurs.
  790.  
  791. bhs    Branch if higher or same; specifically, if the C bit is clear.
  792.     If the preceding operation resulted in a value greater than or
  793.     equal to zero, the branch occurs.  You can also use "bcc" in place
  794.     of "bhs"; "bcc" means "branch if carry clear", which is exactly
  795.     what bhs does.  (Sometimes one is more indicative of what you mean
  796.     than the other is.)
  797.  
  798. bls    Branch if lower or same; specifically, if the C or Z bit is
  799.     set.  If the preceding operation resulted in a value less than or
  800.     equal to zero, the branch occurs.
  801.  
  802. blo    Branch if lower; specifically, if the C bit is set.  If the
  803.     preceding operation resulted in a value less than zero, the branch
  804.     occurs.  You can also use "bcs" in place of "blo"; "bcs" means
  805.     "branch if carry set", which is exactly what blo does.  (Sometimes
  806.     one is more indicative of what you mean than the other is.)
  807.  
  808. bvc    Branch if overflow is clear; that is, if the V bit is clear.
  809.     If the preceding operation did not create an overflow, the branch
  810.     occurs.
  811.  
  812. bvs    Branch if overflow is set; that is, if the V bit is set.  If
  813.     the preceding operation caused an overflow, the branch occurs.
  814.  
  815. Looking at the descriptions for the various branch instructions, it
  816. may appear that there are duplicates.  The group bgt, bge, ble, and
  817. blt may look very similar to the group bhi, bhs, bls, and blo.  But if
  818. you look closely, you will see that the two groups test very different
  819. flags.  What's the "real" difference, and how do you tell which group
  820. to use?
  821.  
  822. The answer is simple.  The first group--bgt, bge, ble, and blt - react
  823. to conditions resulting from _signed_ arithmetic.  If you are working
  824. with signed numbers, use bgt, bge, ble, and blt.  The second
  825. group--bhi, bhs, bls, and blo--are for _unsigned_ arithmetic.  If you
  826. are working with unsigned numbers, use these.
  827.  
  828. BUT, WHAT ABOUT LOOPING?
  829.  
  830. All of this branching stuff is wonderful, but it doesn't mean a whole
  831. lot by itself.  The most common form of looping (although not the
  832. simplest) is probably the for loop.  So for this month's example
  833. program, I'll show a program that inverts the first sixteen colors of
  834. the desktop.  There's an instruction I'll be using to do the actual
  835. inverting, so let's define it now:
  836.  
  837. not.s destination
  838.  
  839. This instruction simply flips all the bits in the destination (i.e.
  840. it takes the one's complement).  The size can be byte, word, or long,
  841. and the destination can be anything except an address register.
  842. (Later in this series I will cover the rest of the bit manipulation
  843. instructions.)
  844.  
  845. Here's this month's program, outlined in C:
  846.  
  847. main()
  848. {
  849.     short index;    /* Our loop counter */
  850.     short color;    /* One color value  */
  851.  
  852.     for (index = 15; index >= 0; index--)    /* Process all colors */
  853.     {
  854.     color = setcolor(index, -1);             /* Get the old color  */
  855.     color = ~color;                          /* Invert the bits    */
  856.     setcolor(index, color);                  /* Set the new color  */
  857.     }
  858.  
  859.     pterm0();    /* Exit back to the desktop */
  860. }
  861.  
  862. In C, this could have been done more compactly (there really wasn't a
  863. need to use an extra color variable) but I wrote it this way because
  864. it more closely follows how the assembly program works.  Here's the
  865. assembly version:
  866.  
  867. *    Desktop color inverter
  868. *    Some Assembly Required, Article 3
  869.  
  870. *    I use d3 as index.  I didn't use d0 because it is "trashed" by TOS.
  871. *    I use d0 as color, because I don't call TOS before I'm finished
  872. *    with the value (so it never has a chance to trash it).
  873.  
  874. *    Set things up for our loop.
  875.  
  876.     moveq #15,d3        ; index starts at 15.  While index is really
  877.                 ; just a short (not a long), we're not doing
  878.                 ; anything with the higher 16 bits, so we
  879.                 ; can use moveq and fill in all 32 bits and
  880.                 ; not worry about it.
  881.  
  882. *    Do the body of the loop.
  883.  
  884. loop    move.w #-1,-(sp)    ; Push -1 onto the stack (returns old color).
  885.     move.w d3,-(sp)         ; This is our color number, index.
  886.     move.w #7,-(sp)         ; Function number for setcolor.
  887.     trap #14                ; Call XBIOS.
  888.     addq #6,sp              ; Remove our parameters from the stack.
  889.  
  890.                             ; setcolor() returns the old color value in
  891.                             ; d0, so I use it right where it is.
  892.     not.w d0                ; Flip all the color bits.
  893.  
  894.     move.w d0,-(sp)         ; This is the new color value (inverted).
  895.     move.w d3,-(sp)         ; This is our color number, index.
  896.     move.w #7,-(sp)         ; Function number for setcolor.
  897.     trap #14                ; Call XBIOS.
  898.     addq #6,sp              ; Remove our parameters from the stack.
  899.  
  900. *    Now update index and see if we're finished with the loop.
  901.  
  902.     subq.w #1,d3            ; Decrement "index".
  903.     bpl loop                ; If the result is a positive (>= 0) value,
  904.                             ; this will branch to "loop", processing the
  905.                             ; next color.
  906.  
  907. *    We're done, exit back to the desktop.
  908.  
  909.     clr.w -(sp)             ; Function number for pterm0 (0).
  910.     trap #1                 ; Call GEMDOS.
  911.  
  912. That's all.  If you follow the flow of the program, you will notice
  913. that the assembly program does not check the for condition (index >=
  914. 0) before entering the loop.  For this example, it's okay, as we know
  915. the first time through the loop (at least), index >= 0 will be TRUE.
  916. The C definition of for, however, checks the condition before entering
  917. the loop.  (We could do this by branching to our test before entering
  918. the loop.)
  919.  
  920. This program does assume that it's running in an ST graphics mode; if
  921. you have something nicer, you may want to switch to an ST graphics
  922. mode to convince yourself this program really does work.  (Run the
  923. program a second time to restore the colors.)
  924.  
  925. ARE WE DONE?
  926.  
  927. That's all for this month.  Next month I'll go over more looping and
  928. branching instructions, and show you ways to use them to piece
  929. together some high-level structures like IF, FOR, WHILE, and so on.
  930.  
  931. As a closing note, I'd like to point out that all of the Motorola
  932. manuals I have give instructions and registers and everything else in
  933. all upper case.  Generally I'm not fond of all upper case, and since
  934. most assemblers don't really care whether you use upper or lower case,
  935. I use lower case.  You can use whatever makes you happy.
  936.  
  937. (If you have questions regarding any of these articles, don't
  938. hesitate to contact me.  You can reach me at DMJ on GEnie, or
  939. dmj@genie.geis.com from the Internet.)
  940.  
  941. /***********************************************************************/
  942.                     C Programming Column
  943.                       By: Albert Dayes
  944. /***********************************************************************/
  945.  
  946. //// A new C Book and Configuration files
  947.  
  948. At the Software Development conference I picked up a new book on
  949. programming called "C Pointers and Dynamic Memory Management".  It's
  950. the only book I have seen that deals strictly with pointers in C.  It
  951. includes a 3.5 inch floppy disk with all of the source code examples
  952. used in the book.  It covers pointers for beginning to advanced C
  953. programmers.  A review will follow in the next issue of AEO-PJ.
  954.  
  955. For those who enjoy MicroSoft Windows style configuration files
  956. similar to WIN.INI, there is some code just for you.  The March 1994
  957. issue of Dr. Dobbs Journal had an article called "MULTIPLATFORM .INI
  958. FILES" which provides this capability.  If you are not familar with
  959. *.INI files an example from Adobe Acrobat Reader follows.
  960.  
  961. [AdobeViewer]
  962. IS8514=4
  963. DefaultMag=100
  964. ShowLargeDIBS=1
  965. Chameleons=0
  966. GreekThreshold=6
  967. MaxApp=1
  968.  
  969. [RecentFiles]
  970. File-1=D:\MANUAL.PDF
  971. File-2=D:\INTRO.PDF
  972. File-3=D:\HELPREAD.PDF
  973.  
  974. Each *.INI file is divided into sections and entries.  The sections
  975. are enclosed in [] and the entries follow.  The entries are in the
  976. form of entry_name=entry_value.
  977.  
  978. //// Functions
  979.  
  980. There are several useful functions in the C library, but one of the
  981. most useful ones is printf() and its offspring.  The printf() allows
  982. one to have formatted output, which is useful in itself.
  983.  
  984. Sprintf() is one of the most used functions since the output is
  985. directed to a buffer rather than standard output.  This allows for
  986. creating message strings for GEM form alert that can include different
  987. error messages.  For example:
  988.  
  989. char alert_buffer[100];
  990. int  error_number;
  991.  
  992. error_number = 37;
  993.  
  994. sprintf( alert_buffer, "[1][ Disk error # %d ][ OKAY ]", error_number );
  995.  
  996. form_alert( 1, alert_buffer );
  997.  
  998. When it comes to outputting strings as part of the output, it can be
  999. somewhat of a problem.  The length of each string is dynamic but it
  1000. can be controlled using special options within the printf() function.
  1001.  
  1002. To set the minimum width for a string use the following...
  1003.  
  1004. char string[100], buffer[100];
  1005. int  width, max_width;
  1006.  
  1007.   strcpy( string, "This is not a long string." );
  1008.  
  1009.   sprintf( buffer, "%*s", width, string );
  1010.  
  1011. To set the maximum width one can use the following...
  1012.  
  1013.   sprintf( buffer, "%*.*s", width, max_width, string );
  1014.  
  1015. Being able to set the maximum width of a string has many uses.  One
  1016. such use is in printing reports on a printer.  If you have a database
  1017. with a 100 character description field it must be limited if other
  1018. data is going to fit. (This is assuming that each printer line is 80
  1019. characters in length.)  One could limit the max output to 20
  1020. characters with the minimum being 5 characters.  For example
  1021.  
  1022.   sprintf( buffer, "%*.*s", 5, 20, string );
  1023.  
  1024. For left justified text one can use a negative value for the width.  For
  1025. example:
  1026.  
  1027.   sprintf( buffer, "%*.*s", -5, 20, string );
  1028.  
  1029. This is different than the normal use of printf() since the values
  1030. within the format string are dynamic rather than static.  The format
  1031. string is defined as follows.
  1032.  
  1033.    "%*.*s"  which equals "%[width].[precision]s"
  1034.  
  1035. With string data type, the precision becomes the maximum width
  1036. allowed.  By using "*" rather than numbers, one can control the look
  1037. of the output from within the program.  (That is, at run time and not
  1038. at compile time.)
  1039.  
  1040. For example one could open a dialog box and ask the user to input the
  1041. maximum length of a field for sending output to a file.
  1042.  
  1043. #define AEOPJ_ANSI 1
  1044.  
  1045. main()
  1046.   {
  1047.    int field_description_length;
  1048.  
  1049.    field_description_length = get_description_length();
  1050.  
  1051.    perform_output( field_description_length );
  1052.  
  1053.    return(0);
  1054.  
  1055.   } /* main() */
  1056.  
  1057. #if AEOPJ_ANSI > 0
  1058.  
  1059. perform_output( int field_length )
  1060.  
  1061. #else
  1062.  
  1063. perform_output( field_length )
  1064.   int field_length;
  1065.  
  1066. #endif
  1067.  
  1068.   {
  1069.    char big_buffer[100];
  1070.    char descript_string[] = "Database field description";
  1071.  
  1072.    /* make the minimum field description length at least 1 character */
  1073.  
  1074.    sprintf( big_buffer, "%*.*s\n", 1, field_length, descript_string );
  1075.  
  1076.    /* print big_buffer to the file */
  1077.  
  1078.    return(0);
  1079.  
  1080.   } /* perform_output() */
  1081.  
  1082. For more information on how printf() family is implemented a good
  1083. book on the subject is "The Standard C Library" by P.J. Plauger, ISBN
  1084. 0-13-131509-9.
  1085.  
  1086. Next time, more functions will be discussed and some pointers might be
  1087. thrown in as well.
  1088.  
  1089. /***********************************************************************/
  1090.                 Advanced Computing
  1091.                  By: Carl Barron
  1092. /***********************************************************************/
  1093.  
  1094. //// Introduction to YACC (Yet Another Compiler Compiler)
  1095.  
  1096. This time I will take our syntax checker of an alert box language and
  1097. create a compiler to create a C file of functions that will display
  1098. the alert boxes.
  1099.  
  1100. We need some more of yacc's directives to do this. We are going to
  1101. pass character pointers to strings and integers for other parameters.
  1102. A union is the 'proper' way to do this in C and yacc provides a %union
  1103. directive to create a stack type that is a union. The syntax is %union
  1104. { /* C definition of the union fields */ }
  1105.  
  1106. so after THE %} of alert.y we add
  1107. %union
  1108. {
  1109.      char *id;
  1110.      int  num;
  1111. }
  1112.  
  1113. Yacc also provides a way for it to remember which union element to
  1114. access for each terminal and non-terminal symbol.  Last time I gave a
  1115. simplified definition of the %token directive. The full blown
  1116. definition is %token <%union field name or nothing> <white space
  1117. separated list of token names>.
  1118.  
  1119. To continue modifying our previous yacc file change the %token
  1120. NUMBER line to :%token <num> NUMBER and the %token QSTRING line to
  1121. %token <id> ID QSTRING.  ID is a new token for an unquoted string.
  1122.  
  1123. In the actual definition of the language, we now add some C code to
  1124. aid our compiler.  Much of the work is done in the associated file
  1125. alert.c.  This file checks the semantics of the current defintion for
  1126. illegal conditions like more than five alert strings, etc.
  1127.  
  1128. The new grammar section is:
  1129. %%
  1130. alerts    :    alert          /* this allows multiple alert */
  1131.           |    alerts alert   /* boxes per file */
  1132.           ;
  1133.  
  1134. alert     :    alert_strt alert_data alert_end
  1135.           ;
  1136.  
  1137. alert_strt     :    alert_hdr ID   {add_id($2);/* save ID */}
  1138.                ;
  1139.  
  1140. alert_end :    END                 {write_alert();clean_alert();}
  1141.           ;
  1142.  
  1143. alert_hdr :    ALERT
  1144.           |    error ALERT         {clean_alert();}
  1145.           ;
  1146.  
  1147. alert_item :   ICON NUMBER    {if(add_icon($2)) YYERROR;}
  1148.           |    DEFAULT NUMBER {if(add_default($2)) YYERROR;}
  1149.           |    STRING QSTRING {if(add_string($2)) YYERROR;}
  1150.           |    BUTTON QSTRING {if(add_button($2)) YYERROR;}
  1151.           ;
  1152.  
  1153. alert_data     :    alert_item
  1154.                |    alert_data alert_item
  1155.                ;
  1156.  
  1157.  
  1158. Note that this grammar appears to allow an infinite number of items in
  1159. an alert box!  The add functions check to make sure that the system
  1160. limits are not exceeded and there is at least one string and button.
  1161. This is the easiest way to handle the problem of a finite max number
  1162. of entries in a grammar. It is possible to create a grammar definition
  1163. that would handle this but it is much more cumbersome and unneeded.
  1164.  
  1165. The lexer is a bit about the same the only entries changed are for
  1166. NUMBER, ID and QSTRING.
  1167.  
  1168. NUMBER and ID just return the lexigraphic value of these tokens in the
  1169. proper field of the union. Yylval is defined by yacc to hold this
  1170. infromation.  STR was used in the old lex file and string in the new
  1171. one for some reason.  The new one checks for an unterminated string
  1172. and prints a warning if a newline preceeds the closing quote of a
  1173. string.  The start state eat is used to eat the closing quote or
  1174. newline, and to exit back to the INITIAL start state of the lexer.
  1175.  
  1176. The additional C code does all the work of keeping track of what we
  1177. have so far. and printing out a C function for each alert box defined
  1178. without error conditions.
  1179.  
  1180. Error is a special yacc non-terminal symbol used when yacc is in an
  1181. error correcting state. The usage in this grammar is to skip to the
  1182. next possibly correct alert box definiton, if there is an error,
  1183. deleting all infromation about the invalid alert defintion. YYERROR is
  1184. a yac directive [actually a preprocessor macro] to place yacc in an
  1185. error correcting state.
  1186.  
  1187. The file symbol.c contains my special purpose memory allocators for
  1188. this project. They keep a linked list of all memory that is allocated
  1189. by malloc(), by this program. This to make memory deletion complete
  1190. and correct even under an error condition. If the only place the
  1191. addresses returned by malloc() were stored was the yacc stack, and an
  1192. error occurred the addresses would be lost before the memory can be
  1193. freed.  This is important to remember.
  1194.  
  1195. In writing this article I noted some gross errors in the first
  1196. article.  So gross that the code should never have made it thru yacc!
  1197. Nobody complained or mentioned it.  This seems to indicate that
  1198. prehaps I am talking to no one!  (The perils of publishing untested
  1199. code.) The code in the previous article was untested.
  1200.  
  1201. The complete tested source and executables of this alert box compiler
  1202. are enclosed in cmpalert folder or archive. As ussual I am on CIS and
  1203. GENIE almost every day at least once.
  1204.  
  1205. GENIE:CBARRON
  1206. CIS:75066,3204
  1207.  
  1208. Perhaps I will do some more yaccing next time, or maybe present an
  1209. overview of important unix style tools for text file manipulations
  1210. often done by programmers.
  1211.  
  1212.  
  1213. /***********************************************************************/
  1214.                 GFA BASIC
  1215.                 By: Scott R. Garrigus
  1216. /***********************************************************************/
  1217.  
  1218.  
  1219. //// Introducing...
  1220.  
  1221. Hi Everybody!  My name is Scott R. Garrigus and I'll be your new GFA
  1222. BASIC liason here at AEO-PJ.  (You can call me Mr. Garrigus if you'd
  1223. like. <grin>) We'll be covering the many facets of our beloved
  1224. language including using the Resource Construction Set and
  1225. incorporating its output into our programs, memory management of GFA
  1226. and the bugs therein :-(, and we'll also be exploring GEM programming
  1227. taking up where our good friend Eric Goodman left off, as well as
  1228. anything else that has to do with GFA.
  1229.  
  1230. //// Strike up the band!
  1231.  
  1232. Which brings us to a very important person in the GFA world; someone
  1233. whom I'm sure a lot of you may know... Mr. Han Kempen.  Mr. Kempen is
  1234. the author of 'Your Second GFA-BASIC 3 Manual', which is available
  1235. free of charge on any of the online services.  This manual includes no
  1236. less than 24 chapters of documentation pertaining to the ins and outs
  1237. of GFA BASIC.  And if that's not enough, it also includes the largest
  1238. library of GFA BASIC routines on the planet - at least the largest
  1239. that I know of.  If you need to do something specific in GFA, you can
  1240. usually find an example of it here.  The only thing I didn't like was
  1241. that all the doc files were in 1st Word format and I only have an
  1242. ASCII viewer, so I've taken the liberty of converting all the docs to
  1243. ASCII format and you can find them in the Atari ST Library on GEnie as
  1244. MANUAL_A.ZIP.
  1245.  
  1246. I'd like everyone to give Mr. Kempen a big round of applause for his
  1247. valient effort to keep our favorite language alive.  Thank you Mr.
  1248. Kempen!  We really appreciate your efforts!  And if it hasn't become
  1249. clear already, if you don't have these files, then go get'em because
  1250. we'll be using them when needed.
  1251.  
  1252. //// On with the show... the RCS, that is.
  1253.  
  1254. Okay, I've introduced myself; I've talked about Mr. Kempen's excellent
  1255. contributions; let's see... what else is there to do?  Ah, yes, maybe
  1256. we should do a little programming, huh? :-)  Well, first I want you to
  1257. find the files TOSI_10.DFN, TOSI_10.LST, and TOSI_10.RCS  (they're
  1258. included here in this archive).  These are the files we'll be working
  1259. with today and they are the start of a small utility program which
  1260. we'll be putting together.  The program is called TOS Info 1.0 and it
  1261. will be able to run as either a PRG or an ACC just by renaming it, be
  1262. resolution independent, and be compatible with all the Atari systems
  1263. and TOSes out there.  Sound complicated?  Don't worry, it's not
  1264. really... and if it sounds too simple, well, then you're ahead of me
  1265. but you may find a few interesting tidbits you hadn't learned before
  1266. so stick with us, okay?
  1267.  
  1268. Now let's zap outa here and get into the RSC program.  If you have a
  1269. multitasking system just run the RSC.PRG, if not then load this
  1270. magazine into your favorite desk accessory text editor and then run it
  1271. from within the RSC.  Here we go... <classic StarTrek transporter
  1272. sounds> ...okay I'm here!  Coming to you live from within the RCS S S
  1273. s s s... Did you make it? :-)  DON'T open the TOSI_10.RCS file yet.  I
  1274. want to take you through this step by step.  You can look at what I've
  1275. done when we're finished.
  1276.  
  1277. First we need a box to display inside of our program's window.  We're
  1278. going to make this resolution independent so we should use a Dialog
  1279. box.  The reason for this is because within a Dialog box, all our
  1280. elements will be snapped into place and they'll appear the same way in
  1281. any resolution we run the program in.  If we were to use a Panel then
  1282. we could place elements anywhere we wanted but they wouldn't appear
  1283. the same in different resolutions.  So grab a Dialog box and name it
  1284. MAIN and then open it.  Now we need four display elements to show the
  1285. TOS version, TOS date, System time, and the System date.  Grab an
  1286. EDIT:______ element (w/o the box around it) and place it on the
  1287. screen.  Double-click it to edit it and on the first, second and third
  1288. lines, enter
  1289.  
  1290.         TOS Version: ~~~~~~~~~~
  1291.         ~~~~~~~~~~~~~XXXXXXXXXX
  1292.         ~~~~~~~~~~~~~__________
  1293.  
  1294. This will give us an editable field with a label so that when we
  1295. enter a value for it in our program only the underlines will change
  1296. and the label TOS Version: will stay the way it is.  Now to explain
  1297. this, the first line gives us our label and saves a space for our
  1298. data.  The second line shows what type of data will be allowed...
  1299. using X means any type of data is allowed be it numerical or
  1300. alphabetical.  The third line gives us a mask to show where the data
  1301. will appear (represented by the underlines).  From here we give the
  1302. element a name, TOSVERS, and we hit Okay to accept it.  Now make three
  1303. copies of this element and with each one, place it on the display,
  1304. changing the first line to TOS Date: , System Time: , and System
  1305. Date: , respectively. (And be sure to give each a name.)  Place the
  1306. elements so they line up with each other and then resize the main box
  1307. so it's just big enough to hold the elements.  Close the dialog box.
  1308.  
  1309. Next we need a menu bar for our program.  Grab the menu icon and
  1310. place it on the screen.  Give it a name such as MENU <g>, and then
  1311. open it up.  You'll see a menu bar and two titles in it.  Select the
  1312. file title and delete it.  We won't be needing it in this program.
  1313. Now click on the Desk title to open it and double-click on the first
  1314. entry.  Type in the name of our program leaving two spaces at the
  1315. begining and the end to make it look good (ex.   TOS Info 1.0  ) and
  1316. give it a name such as DESKMENU.  Click on okay, and we're done.  Now
  1317. wasn't that easy?  We could also add a credit dialog like I did but
  1318. I'm sure you can figure that out from looking at the file I've
  1319. provided.  Be sure and study the TOSI_10.RSC file thoroughly so you
  1320. can get a good understanding of how it's put together and if you have
  1321. any questions, just send them my way and I'll cover them in the next
  1322. installment.
  1323.  
  1324. //// Coming up...
  1325.  
  1326. Next time we'll be covering memory management in GFA and how to find
  1327. the proper amount of memory for our program (thanks to the help of my
  1328. good friend Damien Jones whom I've been hounding for info. for the
  1329. past two weeks <grin>).  I'll be giving you the first part of the
  1330. listing for our utility program and I'll also be giving you your first
  1331. homework assignment...  (hee hee hee).  Until next time...!
  1332.  
  1333.  
  1334. /***********************************************************************/
  1335.      HARD CORE - Interview with Roger Burrows, author of ExtenDOS
  1336.      By: Albert Dayes
  1337. /***********************************************************************/
  1338.  
  1339. AD: What is your product for the Atari ST or Falcon030?
  1340. RB:
  1341.  
  1342.    The product is ExtenDOS, a CD-ROM driver for the ST, TT030, and now
  1343.    the Falcon030 as well.  It allows you to access the most popular
  1344.    CD-ROM formats (ISO-9660 and High Sierra) on any Atari system.  It
  1345.    really performs the same function as the CDROM.XFS file system
  1346.    driver for MultiTOS/MiNT, but with two advantages: you don't need
  1347.    MultiTOS or MiNT, and you get better performance.
  1348.  
  1349.  
  1350. AD: What prompted your interest in CD-ROM?
  1351. RB:
  1352.  
  1353.    I wanted access to all the data starting to become available on
  1354.    CD-ROM, including source code, electronic text, and graphics, and I
  1355.    wanted access from my TT.  I looked around but there didn't seem to
  1356.    be a well-supported, easy-to-use method, so I decided to write my
  1357.    own.
  1358.  
  1359.  
  1360. AD: How long did it take to develop ExtenDOS?
  1361. RB:
  1362.  
  1363.    About 6 months, working in the evenings and on weekends.  I started
  1364.    work on it in June 1993, began beta-testing at the end of
  1365.    September, and shipped the first version in January this year.
  1366.  
  1367.  
  1368. AD: What technical difficulties did you encounter and how did you
  1369.     overcome them?
  1370. RB:
  1371.  
  1372.    The greatest difficulty was debugging the hardware support code
  1373.    during beta test, when I had no hands-on access to the systems
  1374.    being debugged.  I relied very much on the problem descriptions by
  1375.    the beta testers.  Fortunately the people doing it had had previous
  1376.    beta test experience.  I also added trace and debugging code to my
  1377.    drivers, some of which remains in the distributed product, to help
  1378.    out if a user experiences problems.
  1379.  
  1380.    While adding the Falcon support, there were some initial problems
  1381.    because I didn't have all the hardware documentation.  However,
  1382.    thanks again to a beta tester, I borrowed a Falcon for a few days
  1383.    and figured out the missing information.
  1384.  
  1385.  
  1386. AD: What programming language did you use?
  1387. RB:
  1388.  
  1389.    ExtenDOS is written entirely in 68000 assembler.  Since it has to
  1390.    interface to the ACSI/SCSI hardware at a low level, it seemed the
  1391.    best choice, although it would have been possible to write it in a
  1392.    mixture of C and assembler.
  1393.  
  1394.  
  1395. AD: Compare and contrast the ISO-9660 filesystem vs GEMDOS.
  1396. RB:
  1397.  
  1398.    The ISO-9660 filesystem is optimised for a relatively slow,
  1399.    read-only, direct-access device such as a CD-ROM.  Since the device
  1400.    has relatively long seek times, a hierarchical directory structure
  1401.    like GEMDOS would slow down access because of the constant seeking
  1402.    between directories.  Thus ISO-9660 has all the paths to the
  1403.    directories stored in a single path table which is typically read
  1404.    into a buffer when a new CD-ROM is loaded, and remains there.
  1405.  
  1406.    The read-only nature of CD-ROM ensures that files cannot be
  1407.    deleted.  Thus there is no need to support the possibility of
  1408.    'holes' in allocated file space, and the FAT mechanism found in
  1409.    GEMDOS doesn't exist.  Each file is stored sequentially on the
  1410.    CD-ROM, which helps performance when reading a file.
  1411.  
  1412.    ISO-9660 is also designed to be architecturally independent, in
  1413.    that any numbers that need more than a byte to store them (such as
  1414.    filesizes or some internal pointers to filesystem structures) are
  1415.    stored in two forms: high-order byte first (Motorola-style) and
  1416.    low-order byte first (Intel-style).  In contrast, GEMDOS stores
  1417.    such data in only one form:  Intel-style (this is necessary since
  1418.    GEMDOS is designed to be compatible with MSDOS at the filesystem
  1419.    level).
  1420.  
  1421.    Finally, in order to be applicable to the widest range of
  1422.    platforms, ISO-9660 implements a minimal set of file attributes
  1423.    that correspond fairly well to those in GEMDOS:  file date/time is
  1424.    provided as well as an attribute that corresponds to GEMDOS's
  1425.    "hidden file" attribute.  The "read-only" and "system" attributes
  1426.    are not provided.
  1427.  
  1428.  
  1429. AD: What future enhancements are you planning for, or thinking
  1430.     about, for future editions of your product?
  1431. RB:
  1432.  
  1433.    The next enhancement I am planning is support for photoCD
  1434.    (including multi-session).  The main effort in this area will be
  1435.    supporting the wide range of implementations that different
  1436.    manufacturers of CD-ROM drives have used.  Another area that I am
  1437.    thinking about is integrated support for playing audio CDs.  It
  1438.    should also be feasible to read Mac HFS-format CD-ROMs, although
  1439.    that's not a priority since most CD-ROMs are ISO-9660 these days.
  1440.  
  1441.    Longer term, ExtenDOS could be used to add other facilities apart
  1442.    from CD-ROM, and I am looking at that too.
  1443.  
  1444.  
  1445. AD: Any hardware that you recommend or that is compatible with your
  1446.     product?
  1447. RB:
  1448.  
  1449.    To connect a SCSI CD-ROM drive to the ACSI port of an ST or TT, you
  1450.    need to use one of ICD's adapters.  This is in order to pass the
  1451.    full SCSI command set to the CD-ROM.  I use the AdSCSI Plus, but
  1452.    ICD have told me that all the following current and former ICD
  1453.    adapters use the same method to provide full SCSI, so they should
  1454.    all work equally well:
  1455.  
  1456.         Advantage ST
  1457.         Advantage Micro ST
  1458.         Advantage Plus ST,
  1459.         AdSCSI ST
  1460.         AdSCSI Micro ST
  1461.         AdSCSI Plus ST
  1462.         The Link.
  1463.  
  1464.    ICD received a copy of ExtenDOS recently and I'm waiting for them
  1465.    to confirm compatibility.
  1466.  
  1467.    As far as CD-ROM drives are concerned, any SCSI drive should work
  1468.    with ExtenDOS, since it only uses the most basic SCSI commands.
  1469.    There is also code in ExtenDOS to specifically support the Atari
  1470.    CDAR504, the only drive that can connect directly to the ACSI port.
  1471.    The following drives have been verified to work with ExtenDOS:
  1472.  
  1473.         Atari CDAR504
  1474.         Panasonic (Matsushita) CR-501
  1475.         NEC 3Xp
  1476.         NEC 74/84
  1477.         Sony CDU-541
  1478.         Toshiba 3401
  1479.  
  1480.    If you are contemplating buying a CD-ROM drive now, I would
  1481.    recommend getting one that supports the SCSI-2 command set.  This
  1482.    standardises many of the low-level commands, and will make it more
  1483.    likely that additional features of the drive, such as audio
  1484.    control, will be supported by future versions of ExtenDOS.  You may
  1485.    also want to make sure that the drive supports multi-session
  1486.    photoCD, although I haven't found any SCSI-2 compatible drives that
  1487.    don't.
  1488.  
  1489.    I personally use a Toshiba 3401 since it offers full SCSI-2 command
  1490.    set compatibility, as well as photoCD support that is very easy to
  1491.    implement, and very good performance.  Other drives that have been
  1492.    well-reviewed include the NEC, Chinon, and Plextor (formerly
  1493.    Texel), although I have had no experience with the latter two.
  1494.  
  1495. [ Editor's note:
  1496.  
  1497. ExtenDOS v1.1 is available immediately at only $19.95 (including
  1498. shipping & handling) from:
  1499.  
  1500.       Anodyne Software
  1501.       6 Cobbler Court
  1502.       Ottawa
  1503.       Ontario K1V 0B8
  1504.       CANADA.
  1505.  
  1506. Please make your payment by cheque or money order, in US$ for shipping
  1507. to the U.S.A., in Canadian$ for shipping within Canada.  Ontario
  1508. residents please add 8% sales tax.
  1509.  
  1510. Also contact your local Atari dealer to see if they carry the product.
  1511.  
  1512. ]
  1513.  
  1514. /***********************************************************************/
  1515.                      DABBLING IN PASCAL
  1516.                      By: Kris Gasteiger
  1517. /***********************************************************************/
  1518.  
  1519. (I was going to include an input verification routine for last month's
  1520. program, but I lost it along with some other goodies when my hard
  1521. drive crashed.)
  1522.  
  1523. I am currently using OSS/ICD Personal Pascal, Ver 2.02. on a 2.5Mb
  1524. 520ST with TOS 1.4, one double sided floppy drive, a ToadStor130 hard
  1525. drive, SC1224 color monitor, 2400 baud modem, 24 pin printer, and a
  1526. few other periferals. All code examples I present will run on MY
  1527. system, other TOS versions, may give problems, be cautious.
  1528.  
  1529. A reader asked for some help in getting the Bios call, Bconin, used in
  1530. the example program last month, to work in Modula II. I don't have
  1531. Modula II, but from his description of the Modula II version of the
  1532. call, the problem seems to be that while PP allows you to declare
  1533. Bconin as Byte, Short_Integer, or Long_Integer, M II declares it as
  1534. Long_Integer.  If Declared as Long_Integer, Bconin returns the Ascii
  1535. value of the key in the low word ,and the keyboard Scan Code in the
  1536. high word. (A word is 16 bits, a long word is 32 bits, so there are 4,
  1537. 8 bit, bytes in a long word.) The problem then is, how do you extract
  1538. just the ASCII value, the lowest Byte, from a 32 bit long word?
  1539.  
  1540. The following short program demonstrates...
  1541.  
  1542. (The text between the dashed lines is a complete Pascal program
  1543.  which I have compiled and run on MY system.)
  1544. ---------------------------------------------------------------------------
  1545. { This program is to be compiled for TOS by setting the compiler options }
  1546. { to TOS in the PP manager.                                              }
  1547. { It's purpose is to demonstrate how to use the arithmetic shift to      }
  1548. { extract the scan code and ascii value from the Long_Integer returned   }
  1549. { by Bconin.                                                             }
  1550. { Written in OSS/ICD Personal Pascal. 1/22/94 By: Kris J. Gasteiger.     }
  1551. { Parts copywrited by OSS/ICD.                                           }
  1552.  
  1553. Program Key_read( Input, Output );
  1554.  
  1555. Const
  1556.   Keyboard=2;  { Bconin looks for a character on the specified device.   }
  1557.                { Valid devices are: 1: the serial port, 2: the keyboard, }
  1558.                { and 3: the MIDI port. devices 0 and 4 aren't valid for  }
  1559.                { this call as far as I can tell...                       }
  1560.  
  1561.   Esc=65563;   { Raw Long_Integer value returned by Bconin. }
  1562.  
  1563. Var
  1564.   Ascii_Value, Keypressed, Temp: Long_Integer;
  1565.  
  1566. { ************************************************************************ }
  1567. { Bios Character-Oriented Device Input. Gets a character from the }
  1568. { specified device.                                               }
  1569.  
  1570. Function Bconin( Device: Short_Integer ): Long_Integer;
  1571.   Bios( 2 );
  1572.  
  1573. { Note: A long_Integer is 32 bits, a Short_Integer is 16 bits, and a Byte }
  1574. { is 8 bits UNSIGNED. These are all valid declarations for Bconin in PP.  }
  1575.  
  1576. { ************************************************************************ }
  1577. { Main }
  1578. Begin
  1579.   Writeln( 'Press a key, <Esc> ends program.' );
  1580.   Repeat
  1581.     Keypressed:=Bconin( Keyboard ); { Get a key from the keyboard. }
  1582.     Temp:=Shl( Keypressed, 16 );    { Shift left to discard the high word. }
  1583.     Ascii_Value:=Shr( Temp, 16 );   { Shift right to Put the low word back.}
  1584.  
  1585.     { The second parameter to the shifts is the number of bits to shift in }
  1586.     { the direction of the call. Anything shifted beyond the declared size }
  1587.     { of the variable parameter is lost. EG: Shr( byte, 1 ) discards the   }
  1588.     { right most bit of the byte. If the byte is all ones,  ( 11111111 ),  }
  1589.     { after the call, its highest bit will be a zero........( 01111111 ).  }
  1590.     { Shifting it back, Shl( byte, 1 ) will give............( 11111110 ).  }
  1591.     { However, if the byte contains.........................( 01111110 ),  }
  1592.     { then Shr( byte, 1 ) will give.........................( 00111111 ),  }
  1593.     { and Shl( byte, 1 ) will give..........................( 01111110 ).  }
  1594.  
  1595.     { Display the Ascii value and the character. }
  1596.     Writeln( 'Low word, Ascii value: ', Ascii_Value, '=',
  1597.               Chr(Ascii_Value ) );
  1598.  
  1599.    { Extract the high word and display it.}
  1600.     Writeln( 'High word, Scan code: ', Shr( Keypressed, 16 ) );
  1601.     Writeln;
  1602.   Until Keypressed=Esc;  { End the program if the Escape key is pressed. }
  1603. End.
  1604. ---------------------------------------------------------------------------
  1605.  
  1606. I hope that is of help to you readers who are translating to other
  1607. languages or trying to understand the different faces of Bconin.
  1608.  
  1609. Next time, we'll take that look at parts of GEM, and that simple
  1610. printer utility, maybe! Until then, have fun dabbling!
  1611.  
  1612.  
  1613. /**********************************************************************/
  1614.               The Library: Gemini, a new Atari CD-ROM disc
  1615.                       by Damien M. Jones
  1616. /***********************************************************************/
  1617.  
  1618. I should warn you that my "real" job - when I'm not writing Atari
  1619. software - is to write multimedia CD software on the PC.  Perhaps I'm
  1620. not the best person to review this disc, but I let slip that I had one
  1621. of these discs, and Albert Dayes insisted I write a review.  (Albert's
  1622. very persuasive...  no!  No!  Please don't hit me Albert, I'll get
  1623. this review done!  Really! <grin>)
  1624.  
  1625. Ahem.  Back to the review.  I'll start on the outside, since it's the
  1626. first thing I saw when I pulled the disc out of the nice, padded
  1627. envelope it was mailed to me in.  The disc comes in a jewel case,
  1628. which is pretty much standard for CD-ROMs these days.  (I won't
  1629. mention how many discs I've seen in cheap plastic sleeves, because
  1630. that's another story.)  The artwork on the case is tastefully done;
  1631. from the outside it appears that this is a high-quality disc, which is
  1632. appreciated.
  1633.  
  1634. Opening the jewel case, I found the CD; again, the art is tastefully
  1635. done, but it includes a befuddling line on the disc: "Type GO to
  1636. start".  Hmmm, must be a mistake.  Somebody's been spending too much
  1637. time in DOSland.  I took the disk out of the case and slipped it into
  1638. my PC.  (I don't have a CD-ROM drive attached to my Atari, so I'm
  1639. forced to look at the disk through Messy-DOS.)  It didn't take me long
  1640. to miss the ease of browsing files I get with my Atari, as well as my
  1641. favorite file viewer (View II).  But somehow I found the will to press
  1642. on.
  1643.  
  1644. The disk contains two copies of each file, really.  In one folder
  1645. (FILES) is the uncompressed set; this is great for poking through
  1646. what's there to see what you like and what you don't like.  The other
  1647. folder (ZIP) contains compressed versions of the same files; most of
  1648. these are compressed with ZIP or LZH.  This is ideal if you run a BBS,
  1649. as there are also pre-made indexes for several BBS packages.
  1650.  
  1651. Since I'm not running a BBS on this machine, I dived right into the
  1652. FILES folder and started puttering around.  There's another layer of
  1653. folders here, splitting this huge library into manageable categories.
  1654. Here's a list (please excuse the DOS format):
  1655.  
  1656.  Volume in drive D is ATARI_1293
  1657.  Directory of D:\FILES
  1658.  
  1659. [.]             [..]            [ACC]           [ARCHIVER]      [ASTRONMY]
  1660. [BBS]           [CLI]           [DATABASE]      [DEMO]          [DISKUTIL]
  1661. [DTP]           [EDITORS]       [EMAG]          [EMDEMO11]      [EMULATOR]
  1662. [ETFILES]       [FALCON]        [FONTS]         [GAGS]          [GAMES]
  1663. [GDOS]          [GEMINI]        [GENIE]         [GNU]           [GRAPHICS]
  1664. [JAGUAR]        [LANGUAGE]      [LYNX]          [MATH]          [MINT]
  1665. [MUSIC]         [NEODESK]       [OTHER]         [PORTFOLI]      [PROGRAM]
  1666. [SCRNSAVE]      [SP_SHEET]      [TELECOMM]      [TT]            [UTILITY]
  1667. [VIRUS]         [W_PROCS]
  1668.        42 file(s)          0 bytes
  1669.                            0 bytes free
  1670.  
  1671. Remember, each of these names is another folder... and many of them
  1672. are organized even more inside.  This may seem like a bit much, but
  1673. the disc boasts over 2800 programs - if these weren't organized, it'd
  1674. be almost impossible to find anything.  Each program, actually, has
  1675. its own folder, so you can keep track of which file goes with which
  1676. program.  Almost every folder has a 00_INDEX.TXT file, which is a list
  1677. of the folders that contain files, and a brief description of what the
  1678. program does.  Here's a sample from the VIRUS folder:
  1679.  
  1680. Virus utilitys
  1681.  
  1682. \virus\
  1683.  
  1684. atarivir\       Doc describing various atari viruses
  1685. bootech\        Boot technician, repair, modify, work with boot sector
  1686. chasseur\       Anti virus
  1687. co_pilot\       Not really an anti virus, but could be useful
  1688. fcheck25\       Link virus detector
  1689. flu\            Simulates a virus, but isn't actually one
  1690. grab_bag\       Screen dump and anti virus, with C codes
  1691. hospital\       Help for preventing virus contamination
  1692. noroach\        TT/MegaSTE boot delay setup and virus guard
  1693. monomon\        Disk Editor and Utility
  1694. peneciln\       One fo the 1st virus detectors
  1695. protect6\       Erik Lars' new one
  1696. sagrotan\       Great new virus killer.  Able to learn new viruses
  1697. uvk58dem\       Ultimate Virus Killer (Demo version)
  1698. virend31\       Virus killer
  1699. virusdie\       Virus killer
  1700. viruskil\       Virus killer
  1701. vkiller\        The 'best' of the virus killers, version dated 5/27/91
  1702.  
  1703. Most of the listings are MUCH longer than this one.  For example, the
  1704. MUSIC folder has 160 folders inside it, each with something different.
  1705. It may take me a long time to fully explore what's on this disc,
  1706. there's so much.
  1707.  
  1708. Something that can be very useful is the INDEX.TXT in the root
  1709. directory of the disc.  It's a list of every file in the ZIP folder.
  1710. So how useful is that?  Well, the FILES folder and the ZIP folder are
  1711. organized the same way - so if you know where a file is in the ZIP
  1712. folder, you know it will be in about the same place in the FILES
  1713. folder.  With a good text viewer, you can search the INDEX.TXT file
  1714. for something in particular, and it will jump right to that spot.
  1715. Make a note of where the file is, and go find it.  This is generally
  1716. faster than trying to search the directories - even if you have a
  1717. program search the directories, it can take a long time, because there
  1718. are so many.
  1719.  
  1720. That's pretty much all there is to the disc.  Lots and lots of
  1721. programs, well-organized, with reasonably good indexes.  I should
  1722. point out (as the disc's "authors" do) that many of the programs on
  1723. the disc have been updated since the program was found; if you like a
  1724. program, be sure to check local BBSs, GEnie, Delphi, or wherever to
  1725. see if there is a more current version.
  1726.  
  1727. Also keep in mind that much of what's on the disc is Shareware.  If
  1728. you use the Shareware, you are still required to pay for it.  (Buying
  1729. the disc only covers the cost of collecting all the programs into one
  1730. place.)
  1731.  
  1732. This disc has great value as a collection of useful software for all
  1733. Atari computers.  There are quite a few pictures, fonts, animations -
  1734. something for everyone.  It's not meant to be an end-all collection;
  1735. software moves too fast for that ever to happen.  But it is a
  1736. fantastic resource.  If you have a CD-ROM drive attached to your Atari
  1737. computer, this disc will give you a chance to do something with it.
  1738. (Maybe it will even give you an excuse to BUY a CD-ROM drive.)
  1739.  
  1740. Walnut Creek CD-ROM
  1741. 1547 Palos Verdes, Suite 260
  1742. Walnut Creek, CA 94596
  1743. USA
  1744. (800)-786-9907 (voice)
  1745. (510)-674-0821 (fax)
  1746.  
  1747.  
  1748. /**********************************************************************/
  1749.                          PERIODICALS
  1750.                       By: John Perry Barlow
  1751. /**********************************************************************/
  1752.  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  1753.  =-=-=-=-=-=-Copyright 1993,4 Wired USA Ltd.  All Rights Reserved=-=-=-=-=-=
  1754.  -=-=For complete copyright information, please see the end of this file=-=-
  1755.  =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  1756.  
  1757.  WIRED 2.04
  1758.  Electrosphere
  1759.  *************
  1760.  
  1761.  Jackboots on the Infobahn
  1762.  ^^^^^^^^^^^^^^^^^^^^^^^^^
  1763.  
  1764.  Clipper is a last ditch attempt by the United States, the last great
  1765.  power from the old Industrial Era, to establish imperial control over
  1766.  cyberspace.
  1767.  
  1768.  By John Perry Barlow
  1769.  
  1770.  [Note: The following article will appear in the April 1994 issue of
  1771.  WIRED.  We, the editors of WIRED, are net-casting it now in its
  1772.  pre-published form as a public service. Because of the vital and
  1773.  urgent nature of its message, we believe readers on the Net should
  1774.  hear and take action now. You are free to pass this article on
  1775.  electronically; in fact we urge you to replicate it throughout the
  1776.  net with our blessings. If you do, please keep the copyright
  1777.  statements and this note intact. For a complete listing of
  1778.  Clipper-related resources available through WIRED Online, send email
  1779.  to <infobot@wired.com> with the following message: "send
  1780.  clipper.index". - The Editors of WIRED]
  1781.  
  1782.  On January 11, I managed to schmooze myself aboard Air Force 2. It
  1783.  was flying out of LA, where its principal passenger had just outlined
  1784.  his vision of the information superhighway to a suited mob of
  1785.  television, show- biz, and cable types who  fervently hoped to own it
  1786.  one day - if they could ever figure out what the hell it was.
  1787.  
  1788.  From the standpoint of the Electronic Frontier Foundation the speech
  1789.  had been wildly encouraging. The administration's program, as
  1790.  announced by Vice President Al Gore, incorporated many of the
  1791.  concepts of open competition, universal access, and  deregulated
  1792.  common carriage that we'd been pushing for the previous year.
  1793.  
  1794.  But he had said nothing about the future of privacy, except to cite
  1795.  among the bounties of the NII its ability to "help law enforcement
  1796.  agencies thwart criminals and terrorists who might use advanced
  1797.  telecommunications to commit crimes."
  1798.  
  1799.  On the plane I asked Gore what this implied about administration
  1800.  policy on cryptography. He became as noncommittal as a cigar-store
  1801.  Indian. "We'll be making some announcements.... I can't tell you
  1802.  anything more." He hurried to the front of the  plane, leaving me to
  1803.  troubled speculation.
  1804.  
  1805.  Despite its fundamental role in assuring privacy, transaction
  1806.  security, and reliable identity within the NII, the Clinton
  1807.  administration has not demonstrated an enlightenment about
  1808.  cryptography up to par with the rest of its digital vision.
  1809.  
  1810.  The Clipper Chip - which threatens to be either the goofiest waste of
  1811.  federal dollars since President Gerald Ford's great Swine Flu
  1812.  program or, if actually deployed, a surveillance technology of
  1813.  profound malignancy - seemed at first an ugly legacy of the
  1814.  Reagan-Bush modus operandi. "This is going to be our Bay of Pigs,"
  1815.  one Clinton White House official told me at the time Clipper was
  1816.  introduced, referring to the disastrous plan to invade Cuba that
  1817.  Kennedy inherited from Eisenhower.
  1818.  
  1819.  (Clipper, in case you're just tuning in, is an encryption chip that
  1820.  the National Security Agency and FBI hope will someday be in every
  1821.  phone and computer in America. It scrambles your communications,
  1822.  making them unintelligible to all but their  intended recipients.
  1823.  All, that is, but the government, which would hold the "key" to your
  1824.  chip. The key would separated into two pieces, held in escrow, and
  1825.  joined with the appropriate "legal authority.")
  1826.  
  1827.  Of course, trusting the government with your privacy is like having a
  1828.  Peeping Tom install your window blinds. And, since the folks I've
  1829.  met in this White House seem like extremely smart, conscious
  1830.  freedom-lovers - hell, a lot of them are Deadheads -  I was sure that
  1831.  after they were fully moved in, they'd face down the National
  1832.  Security Agency and the FBI, let Clipper die a natural death, and
  1833.  lower the export embargo on reliable encryption products.
  1834.  
  1835.  Furthermore, the National Institutes of Standards and Technology and
  1836.  the National Security Council have been studying both Clipper and
  1837.  export embargoes since April. Given that the volumes of expert
  1838.  testimony they had collected overwhelmingly opposed both, I expected
  1839.  the final report would give the administration all the support it
  1840.  needed to do the right thing.
  1841.  
  1842.  I was wrong. Instead, there would be no report. Apparently, they
  1843.  couldn't draft one that supported, on the evidence, what they had
  1844.  decided to do instead.
  1845.  
  1846.  
  1847.  THE OTHER SHOE DROPS
  1848.  
  1849.  On Friday, February 4, the other jackboot dropped. A series of
  1850.  announcements from the administration made it clear that cryptography
  1851.  would become their very own "Bosnia of telecommunications" (as one
  1852.  staffer put it). It wasn't just that the old Serbs in the National
  1853.  Security Agency and the FBI were still making the calls. The alarming
  1854.  new reality was that the invertebrates in the White House were only
  1855.  too happy to abide by them.  Anything to avoid appearing soft on
  1856.  drugs or terrorism.
  1857.  
  1858.  So, rather than ditching Clipper, they declared it a Federal Data
  1859.  Processing Standard, backing that up with an immediate government
  1860.  order for 50,000 Clipper devices. They appointed the National
  1861.  Institutes of Standards and Technology and the Department of Treasury
  1862.  as the "trusted" third parties that would hold the Clipper key pairs.
  1863.  (Treasury, by the way, is also home to such trustworthy agencies as
  1864.  the Secret Service and the Bureau of Alcohol, Tobacco, and Firearms.)
  1865.  
  1866.  They reaffirmed the export embargo on robust encryption products,
  1867.  admitting for the first time that its purpose was to stifle
  1868.  competition to Clipper.  And they outlined a very porous set of
  1869.  requirements under which the cops might get the keys to your chip.
  1870.  (They would not go into the procedure by which the National Security
  1871.  Agency could get them, though they assured us it was sufficient.)
  1872.  
  1873.  They even signaled the impending return of the dread Digital
  1874.  Telephony, an FBI legislative initiative requiring fundamental
  1875.  reengineering of the information infrastructure; providing
  1876.  wiretapping ability to the FBI would then become the paramount design
  1877.  priority.
  1878.  
  1879.  
  1880.  INVASION OF THE BODY SNATCHERS
  1881.  
  1882.  Actually, by the time the announcements thudded down, I wasn't
  1883.  surprised by them. I had spent several days the previous week in and
  1884.  around the White House.
  1885.  
  1886.  I felt like I was in another remake of The Invasion of the Body
  1887.  Snatchers.  My friends in the administration had been transformed.
  1888.  They'd been subsumed by the vast mindfield on the other side of the
  1889.  security clearance membrane, where dwell the  monstrous bureaucratic
  1890.  organisms that feed on fear. They'd been infected by the
  1891.  institutionally paranoid National Security Agency's Weltanschauung.
  1892.  
  1893.  They used all the telltale phrases. Mike Nelson, the White House
  1894.  point man on the NII, told me, "If only I could tell you what I know,
  1895.  you'd feel the same way I do." I told him I'd been inoculated against
  1896.  that argument during Vietnam. (And it does seem to me that if you're
  1897.  going to initiate a process that might end freedom in America, you
  1898.  probably need an argument that isn't classified.)
  1899.  
  1900.  Besides, how does he know what he knows? Where does he get his
  1901.  information?  Why, the National Security Agency, of course. Which,
  1902.  given its strong interest in the outcome, seems hardly an
  1903.  unimpeachable source.
  1904.  
  1905.  However they reached it, Clinton and Gore have an astonishingly
  1906.  simple bottom line, to which even the future of American liberty and
  1907.  prosperity is secondary: They believe that it is their responsibility
  1908.  to eliminate, by whatever means, the  possibility that some terrorist
  1909.  might get a nuke and use it on, say, the World Trade Center. They
  1910.  have been convinced that such plots are more likely to ripen to
  1911.  hideous fruition behind a shield of encryption.
  1912.  
  1913.  The staffers I talked to were unmoved by the argument that anyone
  1914.  smart enough to steal a nuclear device is probably smart enough to
  1915.  use PGP or some other uncompromised crypto standard. And never mind
  1916.  that the last people who popped a hooter in the World Trade Center
  1917.  were able to get it there without using any cryptography and while
  1918.  under FBI surveillance.
  1919.  
  1920.  We are dealing with religion here. Though only ten American lives
  1921.  have been lost to terrorism in the last two years, the primacy of
  1922.  this threat has become as much an article of faith with these guys as
  1923.  the Catholic conviction that human life begins at conception or the
  1924.  Mormon belief that the Lost Tribe of Israel crossed the Atlantic in
  1925.  submarines.
  1926.  
  1927.  In the spirit of openness and compromise, they invited the Electronic
  1928.  Frontier Foundation to submit other solutions to the "problem" of the
  1929.  nuclear-enabled terrorist than key escrow devices, but they would
  1930.  not admit into discussion the argument that such a threat might, in
  1931.  fact, be some kind of phantasm created by the spooks to ensure their
  1932.  lavish budgets into the post-Cold War era.
  1933.  
  1934.  As to the possibility that good old-fashioned investigative
  1935.  techniques might be more valuable in preventing their show-case
  1936.  catastrophe (as it was after the fact in finding the alleged
  1937.  perpetrators of the last attack on the World Trade Center), they just
  1938.  hunkered down and said that when wiretaps were necessary, they were
  1939.  damned well necessary.
  1940.  
  1941.  When I asked about the business that American companies lose because
  1942.  of their inability to export good encryption products, one staffer
  1943.  essentially dismissed the market, saying that total world trade in
  1944.  crypto goods was still less than a billion dollars. (Well, right.
  1945.  Thanks more to the diligent efforts of the National Security Agency
  1946.  than to dim sales potential.)
  1947.  
  1948.  I suggested that a more immediate and costly real-world effect of
  1949.  their policies would be to reduce national security by isolating
  1950.  American commerce, owing to a lack of international confidence in the
  1951.  security of our data lines. I said that Bruce Sterling's fictional
  1952.  data-enclaves in places like the Turks and Caicos Islands were
  1953.  starting to look real-world inevitable.
  1954.  
  1955.  They had a couple of answers to this, one unsatisfying and the other
  1956.  scary.  The unsatisfying answer was that the international banking
  1957.  community could just go on using DES, which still seemed robust
  1958.  enough to them. (DES is the old federal Data Encryption Standard,
  1959.  thought by most cryptologists to be nearing the end of its
  1960.  credibility.)
  1961.  
  1962.  More frightening was their willingness to counter the data-enclave
  1963.  future with one in which no data channels anywhere would be secure
  1964.  from examination by one government or another. Pointing to unnamed
  1965.  other countries that were developing their own mandatory standards
  1966.  and restrictions regarding cryptography, they said words to the
  1967.  effect of, "Hey, it's not like you can't outlaw the stuff. Look at
  1968.  France."
  1969.  
  1970.  Of course, they have also said repeatedly - and for now I believe
  1971.  them - that they have absolutely no plans to outlaw non-Clipper
  1972.  crypto in the US.  But that doesn't mean that such plans wouldn't
  1973.  develop in the presence of some pending "emergency."  Then there is
  1974.  that White House briefing document, issued at the time Clipper was
  1975.  first announced, which asserts that no US citizen "as a matter of
  1976.  right, is entitled to an unbreakable commercial encryption product."
  1977.  
  1978.  Now why, if it's an ability they have no intention of contesting, do
  1979.  they feel compelled to declare that it's not a right? Could it be
  1980.  that they are preparing us for the laws they'll pass after some
  1981.  bearded fanatic has gotten himself a surplus nuke and used something
  1982.  besides Clipper to conceal his plans for it?
  1983.  
  1984.  If they are thinking about such an eventuality, we should be doing
  1985.  so as well. How will we respond? I believe there is a strong, though
  1986.  currently untested, argument that outlawing unregulated crypto would
  1987.  violate the First Amendment, which surely protects the manner of our
  1988.  speech as clearly as it protects the content.
  1989.  
  1990.  But of course the First Amendment is, like the rest of the
  1991.  Constitution, only as good as the government's willingness to uphold
  1992.  it. And they are, as I say, in the mood to protect our safety over
  1993.  our liberty.
  1994.  
  1995.  This is not a mind-frame against which any argument is going to be
  1996.  very effective. And it appeared that they had already heard and
  1997.  rejected every argument I could possibly offer.
  1998.  
  1999.  In fact, when I drew what I thought was an original comparison
  2000.  between their stand against naturally proliferating crypto and the
  2001.  folly of King Canute (who placed his throne on the beach and
  2002.  commanded the tide to leave him dry), my government opposition looked
  2003.  pained and said he had heard that one almost as often as jokes about
  2004.  roadkill on the information superhighway.
  2005.  
  2006.  I hate to go to war with them. War is always nastier among friends.
  2007.  Furthermore, unless they've decided to let the National Security
  2008.  Agency design the rest of the National Information Infrastructure as
  2009.  well, we need to go on working closely with them on the whole range
  2010.  of issues like access, competition, workplace privacy, common
  2011.  carriage, intellectual property, and such. Besides, the proliferation
  2012.  of strong crypto will probably happen eventually no matter what they
  2013.  do.
  2014.  
  2015.  But then again, it might not. In which case we could shortly find
  2016.  ourselves under a government that would have the automated ability to
  2017.  log the time, origin and recipient of every call we made, could track
  2018.  our physical whereabouts continuously, could keep better account of
  2019.  our financial transactions than we do, and all without a warrant.
  2020.  Talk about crime prevention!
  2021.  
  2022.  Worse, under some vaguely defined and surely mutable "legal
  2023.  authority," they also would be able to listen to our calls and read
  2024.  our e-mail without having to do any backyard rewiring. They wouldn't
  2025.  need any permission at all to monitor overseas calls.
  2026.  
  2027.  If there's going to be a fight, I'd rather it be with this
  2028.  government than the one we'd likely face on that hard day.
  2029.  
  2030.  Hey, I've never been a paranoid before. It's always seemed to me
  2031.  that most governments are too incompetent to keep a good plot strung
  2032.  together all the way from coffee break to quitting time. But I am now
  2033.  very nervous about the government of the United States of America.
  2034.  
  2035.  Because Bill 'n' Al, whatever their other new-paradigm virtues, have
  2036.  allowed the very old-paradigm trogs of the Guardian Class to define
  2037.  as their highest duty the defense of America against an enemy that
  2038.  exists primarily in the imagination - and is  therefore capable of
  2039.  anything.
  2040.  
  2041.  To assure absolute safety against such an enemy, there is no limit to
  2042.  the liberties we will eventually be asked to sacrifice. And, with a
  2043.  Clipper Chip in every phone, there will certainly be no technical
  2044.  limit on their ability to enforce those sacrifices.
  2045.  
  2046.  
  2047.  WHAT YOU CAN DO
  2048.  
  2049.  GET CONGRESS TO LIFT THE CRYPTO EMBARGO
  2050.  
  2051.  The administration is trying to impose Clipper on us by manipulating
  2052.  market forces. By purchasing massive numbers of Clipper devices, they
  2053.  intend to induce an economy of scale which will make them cheap while
  2054.  the export embargo renders all competition either expensive or
  2055.  nonexistent.
  2056.  
  2057.  We have to use the market to fight back. While it's unlikely that
  2058.  they'll back down on Clipper deployment, the Electronic Frontier
  2059.  Foundation believes that with sufficient public involvement, we can
  2060.  get Congress to eliminate the export embargo.
  2061.  
  2062.  Rep. Maria Cantwell, D-Washington, has a bill (H.R. 3627) before the
  2063.  Economic Policy, Trade, and Environment Subcommittee of the House
  2064.  Committee on Foreign Affairs that would do exactly that. She will
  2065.  need a lot of help from the public. They may not  care much about
  2066.  your privacy in DC, but they still care about your vote.
  2067.  
  2068.  Please signal your support of H.R. 3627, either by writing her
  2069.  directly or e-mailing her at cantwell@eff.org. Messages sent to that
  2070.  address will be printed out and delivered to her office. In the
  2071.  subject header of your message, please include the  words "support HR
  2072.  3627." In the body of your message, express your reasons for
  2073.  supporting the bill. You may also express your sentiments to Rep. Lee
  2074.  Hamilton, D-Indiana, the House Committee on Foreign Affairs chair, by
  2075.  e-mailing hamilton@eff.org.
  2076.  
  2077.  Furthermore, since there is nothing quite as powerful as a letter
  2078.  from a constituent, you should check the following list of
  2079.  subcommittee and committee members to see if your congressional
  2080.  representative is among them. If so, please copy them your  letter to
  2081.  Rep. Cantwell.
  2082.  
  2083.  > Economic Policy, Trade, and Environment Subcommittee:
  2084.  
  2085.  Democrats: Sam Gejdenson (Chair), D-Connecticut; James Oberstar, D-
  2086.  Minnesota; Cynthia McKinney, D-Georgia; Maria Cantwell,
  2087.  D-Washington; Eric Fingerhut, D-Ohio; Albert R. Wynn, D-Maryland;
  2088.  Harry Johnston, D-Florida; Eliot Engel, D-New York; Charles Schumer,
  2089.  D-New York.
  2090.  
  2091.  Republicans: Toby Roth (ranking), R-Wisconsin; Donald Manzullo,
  2092.  R-Illinois; Doug Bereuter, R-Nebraska; Jan Meyers, R-Kansas; Cass
  2093.  Ballenger, R-North Carolina; Dana Rohrabacher, R-California.
  2094.  
  2095.  > House Committee on Foreign Affairs:
  2096.  
  2097.  Democrats: Lee Hamilton (Chair), D-Indiana; Tom Lantos, D-California;
  2098.  Robert Torricelli, D-New Jersey; Howard Berman, D-California; Gary
  2099.  Ackerman, D-New York; Eni Faleomavaega, D-Somoa; Matthew Martinez, D-
  2100.  California; Robert Borski, D-Pennsylvania;  Donal Payne, D-New
  2101.  Jersey; Robert Andrews, D-New Jersey; Robert Menendez, D-New Jersey;
  2102.  Sherrod Brown, D-Ohio; Alcee Hastings, D-Florida; Peter Deutsch,
  2103.  D-Florida; Don Edwards, D-California; Frank McCloskey, D-Indiana;
  2104.  Thomas Sawyer, D-Ohio; Luis Gutierrez, D-Illinois.
  2105.  
  2106.  Republicans: Benjamin Gilman (ranking), R-New York; William
  2107.  Goodling, R-Pennsylvania; Jim Leach, R-Iowa; Olympia Snowe, R-Maine;
  2108.  Henry Hyde, R-Illinois; Christopher Smith, R-New Jersey; Dan Burton,
  2109.  R-Indiana; Elton Gallegly, R-California; Ileana  Ros-Lehtinen,
  2110.  R-Florida; David Levy, R-New York; Lincoln Diaz-Balart, R-Florida; Ed
  2111.  Royce, R-California.
  2112.  
  2113.  
  2114.  BOYCOTT CLIPPER DEVICES AND THE COMPANIES WHICH MAKE THEM.
  2115.  
  2116.  Don't buy anything with a Clipper Chip in it. Don't buy any product
  2117.  from a company that manufactures devices with Big Brother inside. It
  2118.  is likely that the government will ask you to use Clipper for
  2119.  communications with the IRS or when doing business with federal
  2120.  agencies. They cannot, as yet, require you to do so. Just say no.
  2121.  
  2122.  
  2123.  LEARN ABOUT ENCRYPTION AND EXPLAIN THE ISSUES TO YOUR UNWIRED FRIENDS
  2124.  
  2125.  The administration is banking on the likelihood that this stuff is
  2126.  too technically obscure to agitate anyone but nerds like us. Prove
  2127.  them wrong by patiently explaining what's going on to all the people
  2128.  you know who have never touched a computer and  glaze over at the
  2129.  mention of words like "cryptography."
  2130.  
  2131.  Maybe you glaze over yourself. Don't. It's not that hard. For some
  2132.  hands-on experience, download a copy of PGP - Pretty Good Privacy - a
  2133.  shareware encryption engine which uses the robust RSA encryption
  2134.  algorithm. And learn to use it.
  2135.  
  2136.  
  2137.  GET YOUR COMPANY TO THINK ABOUT EMBEDDING REAL CRYPTOGRAPHY IN ITS
  2138.  PRODUCTS
  2139.  
  2140.  If you work for a company that makes software, computer hardware, or
  2141.  any kind of communications device, work from within to get them to
  2142.  incorporate RSA or some other strong encryption scheme into their
  2143.  products. If they say that they are afraid to violate the export
  2144.  embargo, ask them to consider manufacturing such products overseas
  2145.  and importing them back into the United States. There appears to be
  2146.  no law against that. Yet.
  2147.  
  2148.  You might also lobby your company to join the Digital Privacy and
  2149.  Security Working Group, a coalition of companies and public interest
  2150.  groups - including IBM, Apple, Sun, Microsoft, and, interestingly,
  2151.  Clipper phone manufacturer AT&T - that is  working to get the embargo
  2152.  lifted.
  2153.  
  2154.  ENLIST!
  2155.  
  2156.  Self-serving as it sounds coming from me, you can do a lot to help by
  2157.  becoming a member of one of these organizations. In addition to
  2158.  giving you access to the latest information on this subject, every
  2159.  additional member strengthens our credibility  with Congress.
  2160.  
  2161.  > Join the Electronic Frontier Foundation by writing membership@eff.org.
  2162.  
  2163.  > Join Computer Professionals for Social Responsibility by e-mailing
  2164.  cpsr.info@cpsr.org. CPSR is also organizing a protest, to which you can
  2165.  lend your support by sending e-mail to clipper.petition@cpsr.org with
  2166.  "I oppose Clipper" in the message body. Ftp/gopher/WAIS to
  2167.  cpsr.org/cpsr/privacy/crypto/clipper for more info.
  2168.  
  2169.  
  2170.  In his LA speech, Gore called the development of the NII "a
  2171.  revolution." And it is a revolutionary war we are engaged in here.
  2172.  Clipper is a last ditch attempt by the United States, the last great
  2173.  power from the old Industrial Era, to establish imperial control over
  2174.  cyberspace. If they win, the most liberating development in the
  2175.  history of humankind could become, instead, the surveillance system
  2176.  which will monitor our grandchildren's morality. We can be better
  2177.  ancestors than that.
  2178.  
  2179.  San Francisco, California
  2180.  
  2181.  Wednesday, February 9, 1994
  2182.  
  2183.                                     * * *
  2184.  
  2185.  John Perry Barlow (barlow@eff.org) is co-founder and Vice-Chairman
  2186.  of the Electronic Frontier Foundation, a group which defends liberty,
  2187.  both in Cyberspace and the Physical World. He has three daughters.
  2188.  
  2189.  
  2190.  =-=-=-=-=-=-=-=-=-=-=-=WIRED Online Copyright Notice=-=-=-=-=-=-=-=-=-=-=-=
  2191.  
  2192.             Copyright 1993,4 Wired USA Ltd.  All rights reserved.
  2193.  
  2194.    This article may be redistributed provided that the article and this
  2195.    notice remain intact. This article may not under any circumstances
  2196.    be resold or redistributed for compensation of any kind without prior
  2197.    written permission from Wired Ventures, Ltd.
  2198.  
  2199.    If you have any questions about these terms, or would like information
  2200.    about licensing materials from WIRED Online, please contact us via
  2201.    telephone (+1 (415) 904 0660) or email (info@wired.com).
  2202.  
  2203.         WIRED and WIRED Online are trademarks of Wired Ventures, Ltd.
  2204.  
  2205. =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  2206.  
  2207.  
  2208. [ Editor's Note:
  2209.  
  2210. This is some background information on how RSA's technology works.
  2211. This was provided by Kurt Stammberger, Technology Marketing Manager of
  2212. RSA Data Security, Inc.
  2213.  
  2214. RSA Technology - By Kurt Stammberger
  2215.  
  2216. Privacy protection by conventional means such as DES (the government-
  2217. sponsered Data Encryption Standard is relatively easy in small networks,
  2218. requiring the exchange of secret encryption keys with each party. But as
  2219. a network grows in size, using symmetric encryption techniques like DES
  2220. by themselves becomes impractical.
  2221.  
  2222. As the network grows, arranging for the secure exchange of all those
  2223. secret keys becomes expensive to administer.  Moreover, DES requires secret
  2224. sharing: each person must trust the other to not reveal (or lose) the key
  2225. they share.
  2226.  
  2227. |========================================================================|
  2228. Figure 1:: The Convention System: DES
  2229.  
  2230.   Alice encodes a document with a DES key ... Bob decodes the document
  2231.   with the same key.
  2232.  
  2233.   |---\                 |---\          |---\                |---\
  2234.   |    |  KEY (des) =>  | // |  ---->  | // |  KEY (des) => |    |
  2235.   |____|                |____|         |____|               |____|
  2236.  
  2237. Sharing secret keys in conventional systmes requires prior relationship
  2238. between the parties.  The classic "chicken and egg" problem with DES is
  2239. how to exchange a secret key over an unsecure network with someone you
  2240. don't necessarily trust.
  2241. |========================================================================|
  2242.  
  2243. This means that in partical implementations, secure communcations can
  2244. only take place between people with some kind of prior relationship,
  2245. e.g., only between employees of the same company.  Finally, shared
  2246. secret keys prevent either part from proving what the other may have
  2247. done with that key.  Either party could forge a document using the
  2248. shared key, and a third party would be unable to identify the culprit.
  2249.  
  2250. The 1976 theoretical work of Drs. Whitfield Diffie and Martin Hellman
  2251. of Standford University came to fruition in 1977 wwith their
  2252. development of the Diffie-Hellman Key Agreement technique, and the
  2253. invention of the RSA Public Key Cryptosystem by Drs. Ronald Rivest,
  2254. Adi Shamir and Len Aldleman, then professors at the Massachusetts
  2255. Institute of Technology (MIT).
  2256.  
  2257. RSA is, quite simple, a method of exchanging authenticated secret
  2258. messages without exchanging secrets.  Rather than using the same key
  2259. to both encrypt and decrypt the data, the RSA system uses a matched
  2260. pair of encryption and decryption keys.  Each key performs a one-way
  2261. transformation upon the data -- what one encrypts, only the other can
  2262. decrypt.
  2263.  
  2264. |========================================================================|
  2265. Figure 2:: The RSA Public Key Concept
  2266.  
  2267.   |---\                 |---\          |---\                 |---\
  2268.   |    |  KEY (PUB) =>  | // |  ---->  | // |  KEY (PRIV) => |    |
  2269.   |____|                |____|         |____|                |____|
  2270.  
  2271. Anything encrypted with someone's RSA public key can only be decrypted
  2272. with the corresponding RSA private key, and vice-versa.
  2273. |=========================================================================|
  2274.  
  2275. Since it is computationaly infeasible to derive one key from the
  2276. other, one of the keys can be made "Public" while the other key is
  2277. kept "Private", or secret.  To send someone a private message, one
  2278. simply encrypts the message using the intended recipient's public key,
  2279. confident in the fact that only the recipient's private key could
  2280. decrypt it.  This forms the basis for the RSA Digital Envelope (see
  2281. figure #3).  The RSA Digital Envelope providess an encrption solution
  2282. that gives the user the best of both worlds: the speed of secret key
  2283. algorithms like DES, combined with the security of RSA.  Conversely,
  2284. when a message is encrypted with a private key it provides the basis
  2285. for a "digital signature" -- a scrambled message that only one person
  2286. could produce, but everyone could verify with that person's public
  2287. key.  But handwritten signatures do more than just identify the author
  2288. of a document, they in effect must vouch for the document's integrity.
  2289. A manager's signature on a letter typed by a secretary says "I have
  2290. reviewed this page, and the information it contains is the information
  2291. that I do, in fact wish to send."  The RSA algorithm can accomplish
  2292. even this.
  2293.  
  2294. |========================================================================|
  2295. Figure 3:: Privacy : the RSA Digital Envelope
  2296.  
  2297.   |---\                 |---\
  2298.   |    |  KEY (DES) =>  | // |
  2299.   |____|                |____|
  2300.  
  2301.  
  2302. 1. Alice encrpts the document with a random DES key.
  2303.                ________       ________
  2304. KEY (DES) =>  [__ PUB__|  => [__DES__|
  2305.                  |KEY|          |  |
  2306.                 _|  |          _|//|
  2307.                 |___|          |___|
  2308.  
  2309. 2. Alice looks up Bob's RSA public key in her network
  2310.    directory, and uses it to encrypt the DES key.
  2311.  
  2312.  ***************
  2313.  *  |---\      *
  2314.  *  | // |     *
  2315.  *  |____|     *
  2316.  *             *
  2317.  *   ________  *   ---->
  2318.  *   [__DES__| *
  2319.  *     |  |    *
  2320.  *    _|//|    *
  2321.  *    |___|    *
  2322.  *             *
  2323.  ***************
  2324.  
  2325.  3. The encrypted document & key together form the RSA Digital
  2326.     Envelope.  Only Bob's RSA private key can open this envelope
  2327.     "addressed" to him.
  2328.  
  2329. |==========================================================================|
  2330.  
  2331. The RSA Digital Signature employs a cryptographic "hashing" algorithm
  2332. to create a message digest that is unique to each document, much like
  2333. a fingerprint.  If even a single bit of the document is changed,
  2334. roughly 50 percent of the bits in the corresponding message digest
  2335. will change.  Furthermore, the hashing alogrithm is a one-way
  2336. function:  the document content cannot be reconstruction from the bits
  2337. of the message digest.  With RSA's MD family of message digest
  2338. alorithms -- featuring 128-bit message digests -- the probability that
  2339. different documents will have the same digest by coincidence is less
  2340. than 1 in a trillion trillion, effectively ensuring that the two
  2341. message digests will only match if their source documents are
  2342. bit-for-bit identical.
  2343.  
  2344. While the RSA Digital Signature is easy to produce and check it is
  2345. impossible to forge, and therefore positively identifies the author.
  2346. And unlike a handwritten signature, it also verifies the contents of a
  2347. document.
  2348.  
  2349. |========================================================================|
  2350. Figure 4:: Authentication : the RSA Digital Signature
  2351.  
  2352.   |---\
  2353.   |    |  ============
  2354.   |____|             |            ********************
  2355.                      |            *                  *
  2356.     |                |========>   *     _______      *
  2357.     |                             *     |      \     *  ---->
  2358.    ###                            *     |       |    *
  2359.   #####                    ===>   *     |_______|    *
  2360.    ###                     |      *     |  //   |    *
  2361.     |        ________      |      *      --------    *
  2362.     |       [__PRIV__|     |      *                  *
  2363.     V          |KEY|       |      ********************
  2364.    [.:..:] =>  _|  |  => [ // ]
  2365.               |___|
  2366.  
  2367.  Alice passes her document through a hashing algorithm to produce the
  2368.  message digest, then encrypts the digest with her RSA private key
  2369.  (forming an RSA Digital Signature) and transmits the signed document
  2370.  to Bob.
  2371.  
  2372.                #
  2373.  |---\        ###
  2374.  |    |   === ### ==============>     [.:..:]  <-------|
  2375.  |____|       ###                                      |
  2376.                #                                    COMPARE
  2377.                                                        |
  2378.  [ // ]  ===> KEY (pub) ========>     [.:..:]  <--------
  2379.  
  2380.  
  2381. After receiving Alice's transmission, Bob uses the same hashing
  2382. algorithm to create another message digest, and also decrypts the
  2383. signature using Alice's RSA public key.  The resulting message digests
  2384. are then compared.
  2385. |===========================================================================|
  2386.  
  2387. Security
  2388.  
  2389. The RSA Public Key Cryptosystem is recognized worldwide as the most
  2390. secure cryptographic technique commercially available.  To understand
  2391. why RSA is so strong, you need to understand a little bit more about
  2392. the math behind RSA.  The RSA Algorithm is fully disclosed -- that is,
  2393. there are no secrets about how the system actually works.  RSA
  2394. security is derived solely from its unqiue mathematical characterics.
  2395.  
  2396. RSA public and private keys are actually each made up of two numbers
  2397. -- an exponent and a modulus.  The modulus is common to both public
  2398. and the private key, and is the product of two very large prime
  2399. numbers.  Since the public key is, of course, made public the best
  2400. course for a potential attacker to take is to attempt to factor the
  2401. modulus back into its component primes, thereby gaining the
  2402. information required to derive the private key.
  2403.  
  2404. But factoring is one of the most fundamentally difficult mathematical
  2405. tasks -- there are precious few "shortcuts."  For example, using the
  2406. best available techniques, factoring a single typical 200-digit RSA
  2407. modulus would keep a network of one thousand high-powered (70 MIPS)
  2408. workstations busy for over one thousand years.  Even a Cray YMP
  2409. supercomputer would take tens of thousands of years just to crack one
  2410. user's key.
  2411.  
  2412. Even with the availability of ever-increasing computing power, RSA
  2413. remains secure.  Because of the nature of the algorithm, advances in
  2414. computer speed actually favors security over factorization, since
  2415. larger keys can be used more efficiently than they can be factored.
  2416.  
  2417. The above article is Copyright (c) 1994 RSA Data Security Inc.
  2418. Permission is NOT granted for reproduction in any form other than this
  2419. issue of AEO-PJ.
  2420.  
  2421. RSA Data Security Inc.
  2422. 100 Marine Parkway
  2423. Redwood City, CA 94065
  2424. USA
  2425. 415-595-8782 (voice)
  2426. 415-595-1873 (fax)
  2427.  
  2428. RSA Data Security was founded in 1982 and its technologies have since
  2429. grown to become defacto standards for data encryption and
  2430. authentication all over the world.  The corporation develops and
  2431. markets products for the development and end-use of encryption and
  2432. authentication technologies and provides comprehensive consulting,
  2433. licensing and research services in the cryptographic sciences field.
  2434.  
  2435. The RSA Public Key Cryptosystem, in its various forms has been
  2436. endorsed by the internet, the Pentagon and financial institutions
  2437. worldwide, and counts nearly every major computer hardware and
  2438. software corporation as among its many licencees.  The RSA Algorithm
  2439. (U.S. Patent #4,405,829) is widely recognized as the most secure
  2440. encryption and authentication method commercially available.
  2441. Licensees and strategic partners include Apple Computer, IBM,
  2442. Motorola, Sun Microsystems, Digital Equipment Corporation, Word
  2443. Perfect, Chemical Bank, Novell, Microsoft, General Electric, Lotus
  2444. Development Corporation, the National Aeronautics and Space
  2445. Administration, Merrill Lynch and the U.S. Department of Defense.
  2446.  
  2447. ]
  2448.  
  2449. /***********************************************************************/
  2450.                  OBJECT::ATARI
  2451.               By: Warwick Allison
  2452. /***********************************************************************/
  2453.  
  2454.         Part 5 : C++ Basics for C Programmers.
  2455.  
  2456. 1. Looking at C++
  2457. -----------------
  2458.  
  2459. We have looked at what Object Oriented programming is in a general
  2460. sense, so now is a good time to look specifically at C++ and what
  2461. makes it different from plain C.
  2462.  
  2463. C++ can be viewed in a number of ways.  One can look at is as a
  2464. completely new language, with a completely different programming
  2465. style, or one can see it as an extension of plain C to be slowly eased
  2466. into and explored.  Here, I will take this second view, for the
  2467. benefit of the great many C programmers in the Atari community.
  2468.  
  2469.  
  2470. 2. C++ - a Better C.
  2471. --------------------
  2472.  
  2473. C++ can be considered a C with a "class" concept for Object
  2474. Orientation.  In fact, early versions of C++ were called "C with
  2475. classes".
  2476.  
  2477. A class is the same as a a "struct" in C with a couple of extensions.
  2478. They are:
  2479.  
  2480.     1. Not only can you have data fields (or data "members"),
  2481.          but also have FUNCTIONS as members.
  2482.     2. You can restrict the access that others can make to the members.
  2483.     3. Values can be automatically initialized and de-initialized.
  2484.     4. One can define the standard operators for the class.
  2485.     5. One can inherit functionality from other classes.
  2486.     6. One can override functions of inherited classes.
  2487.  
  2488. Let's ease into that list with an example that looks at the first two.
  2489.  
  2490.  
  2491. 2.1 Member Functions
  2492.  
  2493.  
  2494.     1. Not only can you have data fields (or data "members"),
  2495.          but also have FUNCTIONS as members.
  2496.     2. You can restrict the access that others can make to the
  2497.          members.
  2498.  
  2499.  
  2500. In C, we might use a struct to store a pair of integers:
  2501.  
  2502. struct PairOfIntegers {
  2503.     int a;
  2504.     int b;
  2505. };
  2506.  
  2507. Then when declaring a variable of this type, we use:
  2508.  
  2509.     struct PairOfIntegers foo;
  2510.  
  2511. We can then make assignments to the fields:
  2512.  
  2513.     foo.a = 123;
  2514.     foo.b = 456;
  2515.  
  2516. And we can use the fields in expressions:
  2517.  
  2518.     return foo.a * foo.b;
  2519.  
  2520. In C++, we could model this with a class:
  2521.  
  2522. class PairOfIntegers {
  2523. public:
  2524.     int First()
  2525.     {
  2526.         return a;
  2527.     }
  2528.  
  2529.     int Second() { return b; } // Put it all on one line to save space.
  2530.  
  2531.     void SetFirst(int new_first) { a=new_first; }
  2532.     void SetSecond(int new_second) { b=new_second; }
  2533.  
  2534. private:
  2535.     int a;
  2536.     int b;
  2537. };
  2538.  
  2539. The keywords "public:" indicate that the members after it (which, in
  2540. our example are all member FUNCTIONS), are usable by anyone.
  2541.  
  2542. The keywords "private:" indicate that the members after it are only
  2543. accessible to member functions of this class.
  2544.  
  2545. When declaring a variable of this type, we use:
  2546.  
  2547.         PairOfIntegers foo;  // We don't need to say `struct' or `class'.
  2548.  
  2549. We can then change the values of the pair:
  2550.  
  2551.         foo.SetFirst(123);
  2552.         foo.SetSecond(456);
  2553.  
  2554. And we can use the values in expressions:
  2555.  
  2556.     return foo.First() * foo.Second();
  2557.  
  2558. Now, in C, we might often want to have some function that takes a
  2559. PairOfIntegers as a parameter, and returns some value.  For example:
  2560.  
  2561. int ProductOfPairOfIntegers(struct PairOfIntegers* pair)
  2562. {
  2563.     return pair.a * pair.b;
  2564. }
  2565.  
  2566. In C++, we would write a function like this as a MEMBER of the class
  2567. itself:
  2568.  
  2569. class PairOfIntegers {
  2570. public:
  2571.     int First() { return a; }
  2572.     int Second() { return b; }
  2573.     int Product() { return a * b; }
  2574.  
  2575.     void SetFirst(int new_first) { a=new_first; }
  2576.     void SetSecond(int new_second) { b=new_second; }
  2577.  
  2578. private:
  2579.     int a;
  2580.     int b;
  2581. };
  2582.  
  2583.  
  2584. We don't need to give it a long name like "ProductOfPairOfIntegers",
  2585. because it is a member function that only applies to PairOfIntegers.
  2586. It is used like this:
  2587.  
  2588.     bar = foo.Product();
  2589.  
  2590.  
  2591. THE PLOT THICKENS...
  2592.  
  2593. Now, what if we only occasionally changed the values of fields a and b,
  2594. but very frequently wanted to find the product?  Well, we could remember
  2595. the product, and update it whenever we changed the value of a or b.
  2596. In plain C:
  2597.  
  2598. struct PairOfIntegers {
  2599.     int a;
  2600.     int b;
  2601.     int a_times_b;
  2602. };
  2603.  
  2604. Now, we must rely on the user of this structure to change a_times_b
  2605. whenever they change a or b.  For example:
  2606.  
  2607.     struct PairOfIntegers foo;
  2608.  
  2609.     foo.a=123;
  2610.     foo.b=20;
  2611.     foo.a_times_b=foo.a*foo.b;
  2612.  
  2613. This is very error prone, and inefficient.  And what about all the
  2614. programs we wrote while PairOfIntegers just had a and b fields?  We
  2615. will have to go through them all and set a_times_b whenever a or b
  2616. changes.  In practice, people just put up with the inefficiency of
  2617. repeatedly calculating a*b.
  2618.  
  2619. But in C++, we don't need to change the usage of the class at all!
  2620.  
  2621. class PairOfIntegers {
  2622. public:
  2623.     int First() { return a; }
  2624.     int Second() { return b; }
  2625.     int Product() { return a_times_b; }
  2626.  
  2627.     void SetFirst(int new_first) { a=new_first; a_times_b=a*b; }
  2628.     void SetSecond(int new_second) { b=new_second; a_times_b=a*b; }
  2629.  
  2630. private:
  2631.     int a;
  2632.     int b;
  2633.     int a_times_b;
  2634. };
  2635.  
  2636. Voila!  Instantly we have a class that remembers the product and
  2637. updates it whenever a or b is changed.  And since we only have to
  2638. change this in one place, we can add further enhancements if we find
  2639. them helpful:
  2640.  
  2641. class PairOfIntegers {
  2642. public:
  2643.     int First() { return a; }
  2644.     int Second() { return b; }
  2645.     int Product() { return a_times_b; }
  2646.  
  2647.     void SetFirst(int new_first)
  2648.     {
  2649.         if (a!=new_first) {
  2650.             a=new_first;
  2651.             a_times_b=a*b;
  2652.         }
  2653.     }
  2654.  
  2655.     void SetSecond(int new_second)
  2656.     {
  2657.         if (b!=new_second) {
  2658.             b=new_second;
  2659.             a_times_b=a*b;
  2660.         }
  2661.     }
  2662.  
  2663. private:
  2664.     int a;
  2665.     int b;
  2666.     int a_times_b;
  2667. };
  2668. // NB: there is a problem with this implementation, described
  2669. // in the next section.  But it serves an example here.
  2670.  
  2671.  
  2672. Now this might not look like a very useful class.  But what if a and b
  2673. where X and Y co-ordinates, and you wanted to also provide polar
  2674. co-ordinates very regularly?  A class that allows this would make some
  2675. calculations MUCH faster.  I will not go into the details of that, as
  2676. anyone who understands operations on polar co-ordinates should be able
  2677. to see that advantage easily.  Polar co-ordinates are equivalent to
  2678. complex numbers.
  2679.  
  2680. So, the big advantage revealed here is that with C++, we can hide
  2681. certain information, and provide functions as members of a class to
  2682. access and modify that information in an orderly fashion.  Because we
  2683. can make certain guarantees about how the data is accessed, we can add
  2684. efficiency enhancements that would be too unreliable to consider in
  2685. plain C.
  2686.  
  2687.  
  2688. 2.2 Constructors and Destructors
  2689.  
  2690. There is one problem with the final PairOfIntegers description above:
  2691.  
  2692.     What if the fields a, b, and a_times_b are initialized to some
  2693.     random values?
  2694.  
  2695. For example, say a starts as 123, b starts as 10, and a_times_b starts
  2696. as 1948726664.  Then suppose we do this:
  2697.  
  2698.     PairOfIntegers foo;
  2699.  
  2700.     foo.SetFirst(123);
  2701.     foo.SetSecond(10);
  2702.  
  2703.     printf("%d\n",foo.Product());
  2704.  
  2705. What will be printed?  Well, since coincidentally, both values we
  2706. assigned to a and b equaled what random chance managed to leave in
  2707. them, a_times_b never got set!
  2708.  
  2709. The problem is that we are not ensuring that our values start at some
  2710. known value.
  2711.  
  2712. Fortunately, and as listed at the beginning of section 2:
  2713.  
  2714.     3. Values can be automatically initialized and de-initialized.
  2715.  
  2716. Ah-hah!  Just what we need.  Here is the corrected class:
  2717.  
  2718. class PairOfIntegers {
  2719. public:
  2720.     // We have a `constructor' for the class, which tells
  2721.     // us how to make an object of this class given some
  2722.     // parameters (in this case, no parameters).
  2723.     //
  2724.     PairOfIntegers()
  2725.     {
  2726.         // We don't care what a and b are,
  2727.         // so long as a_times_b is right.
  2728.         a_times_b=a*b;
  2729.  
  2730.         // If we had a_divided_by_b, we would want to also ensure b!=0.
  2731.     }
  2732.  
  2733.     // While we are at it, let's add another constructor that
  2734.     // lets us create a PairOfIntegers from 2 integers:
  2735.     PairOfIntegers(int first, int second)
  2736.     {
  2737.         a=first;
  2738.         b=second;
  2739.         a_times_b=a*b;
  2740.     }
  2741.  
  2742.     int First() { return a; }
  2743.     int Second() { return b; }
  2744.     int Product() { return a_times_b; }
  2745.  
  2746.     void SetFirst(int new_first)
  2747.     {
  2748.         if (a!=new_first) {
  2749.             a=new_first;
  2750.             a_times_b=a*b;
  2751.         }
  2752.     }
  2753.  
  2754.     void SetSecond(int new_second)
  2755.     {
  2756.         if (b!=new_second) {
  2757.             b=new_second;
  2758.             a_times_b=a*b;
  2759.         }
  2760.     }
  2761.  
  2762. private:
  2763.     int a;
  2764.     int b;
  2765.     int a_times_b;
  2766. };
  2767.  
  2768.  
  2769. Note:  There is an alternative form for writing the constructors.
  2770.        In fact, it is the preferred form, called an `initialization list':
  2771.  
  2772.     PairOfIntegers() :
  2773.         a_times_b(a*b)
  2774.     {
  2775.     }
  2776.  
  2777.     PairOfIntegers(int first, int second) :
  2778.         a(first),
  2779.         b(second),
  2780.         a_times_b(a*b)
  2781.     {
  2782.     }
  2783.  
  2784.     Note that the objects are actually assigned in the order they
  2785.     appear in the declaration:
  2786.  
  2787.         ...
  2788.         int a;
  2789.         int b;
  2790.         int a_times_b;
  2791.     };
  2792.  
  2793.     not in the order they appear in the constructor initialization
  2794.     list.  But you should put them both in the same order to avoid
  2795.     confusion (and because GNU C++ gets this wrong in some versions).
  2796.  
  2797.  
  2798. Now, what about destructors?  Well, there isn't really much use for
  2799. one in the above example.  But let's just pretend that it is vitally
  2800. important to set all fields to 25 before exiting (just say we ant to
  2801. do that so that some snoop can't go through memory after our program
  2802. terminates and find our bank accounts by looking for a sequence three
  2803. of words where the third is the product of the first two).  To do
  2804. this, we simply add another member:
  2805.  
  2806. class PairOfIntegers {
  2807. public:
  2808.     ...
  2809.  
  2810.     // This is the destructor.  It never have parameters.
  2811.     ~PairOfIntegers()
  2812.     {
  2813.         a = b = a_times_b = 25;
  2814.     }
  2815.  
  2816.     ...
  2817. };
  2818.  
  2819.  
  2820. 2.3 Operators
  2821.  
  2822. With the first PairOfIntegers example (let's ignore the "Product"
  2823. enhancement for now, if we want to add the fields of one pair to the
  2824. fields of another, we would do this is plain C:
  2825.  
  2826. {
  2827.     struct PairOfIntegers foo;
  2828.     struct PairOfIntegers bar;
  2829.  
  2830.     ...
  2831.  
  2832.     foo.a += bar.a;
  2833.     foo.b += bar.b;
  2834. }
  2835.  
  2836. Simple.  Now let's look at C++:
  2837.  
  2838. {
  2839.     PairOfIntegers foo;
  2840.     PairOfIntegers bar;
  2841.  
  2842.     ...
  2843.  
  2844.     foo.SetFirst(foo.First()+bar.First());
  2845.     foo.SetSecond(foo.Second()+bar.Second());
  2846. }
  2847.  
  2848. YUCK!  So verbose, just to add two pairs together.
  2849.  
  2850. Fortunately:
  2851.  
  2852.     4. One can define the standard operators for the class.
  2853.  
  2854. Continuing our example:
  2855.  
  2856. class PairOfIntegers {
  2857. public:
  2858.     ...
  2859.  
  2860.     // This member defines the operator "+=" that adds a pair
  2861.     // to this pair.  The word "operator" is a keyword.
  2862.     //
  2863.     void operator += (PairOfIntegers other_pair)
  2864.     {
  2865.         a+=other_pair.a;
  2866.         b+=other_pair.b;
  2867.     }
  2868.  
  2869.     ...
  2870. };
  2871.  
  2872. Then, all we need to write whenever we want to add pairs is:
  2873.  
  2874. {
  2875.     PairOfIntegers foo;
  2876.     PairOfIntegers bar;
  2877.  
  2878.     ...
  2879.  
  2880.     foo += bar;
  2881. }
  2882.  
  2883.  
  2884. HAH!  Even simpler than the plain C code.
  2885.  
  2886. You can define all sorts of operators - "+", "-", "==", etc. etc.  You
  2887. can even define the "()" operator, the "()" operator with any
  2888. parameters!  Very powerful.
  2889.  
  2890.  
  2891. 2.4 Inheritance
  2892.  
  2893. In all the above sections, we described how we could add features to a
  2894. class to improve its usefulness.
  2895.  
  2896. But what if SOMEONE ELSE wrote the class, and we don't want to go
  2897. around hacking at their code.  Or what if we want multiple variations,
  2898. with different extensions?
  2899.  
  2900. Well,
  2901.  
  2902.     5. One can inherit functionality from other classes.
  2903.  
  2904. Cool.  So, just say we have the original very first PairOfIntegers
  2905. class:
  2906.  
  2907. class PairOfIntegers {
  2908. public:
  2909.     int First()
  2910.     {
  2911.         return a;
  2912.     }
  2913.  
  2914.     int Second() { return b; } // Put it all on one line to save space.
  2915.  
  2916.     void SetFirst(int new_first) { a=new_first; }
  2917.     void SetSecond(int new_second) { b=new_second; }
  2918.  
  2919. private:
  2920.     int a;
  2921.     int b;
  2922. };
  2923.  
  2924. Now, let's add Product to this, without hacking at the code.
  2925.  
  2926. To do so, we create a new class which INHERITS the PairOfIntegers class:
  2927.  
  2928.  
  2929. class ProductablePairOfIntegers : public PairOfIntegers {
  2930. public:
  2931.     int Product() { return First() * Second(); }
  2932. };
  2933.  
  2934. Voila.  The words ": public PairOfIntegers" say that this new class
  2935. inherits all the functionality (and data) of the PairOfIntegers class,
  2936. and that everyone using the class is allowed to use this fact (hence
  2937. the "public" keyword after the ":").
  2938.  
  2939.  
  2940. 2.5 Overriding Inherited Functions
  2941.  
  2942. But how do we implement the optimization of having a_times_b set
  2943. whenever a or b changes?
  2944.  
  2945. Well, with the PairOfIntegers above, the best we can do is to keep the
  2946. fact that we inherit PairOfIntegers functionality a private secret,
  2947. then provide new versions of SetFirst and SetSecond that do the
  2948. appropriate checks, and possibly call the versions of SetFirst and
  2949. SetSecond in PairOfIntegers (the "base class" of our new class
  2950. FastProductablePairOfIntegers):
  2951.  
  2952. class FastProductablePairOfIntegers : private PairOfIntegers {
  2953. public:
  2954.     int Product() { return a_times_b; }
  2955.  
  2956.     int First()
  2957.     {
  2958.         // We just call the version of First
  2959.         // from our base class PairOfIntegers.
  2960.         // We use the `scope resolution operator', "::"
  2961.         // to specify that we want THAT version of
  2962.         // First, not the one found in this class,
  2963.         // which would cause infinite recursion!
  2964.         //
  2965.         // This is sometimes called `re-exporting' functions.
  2966.         //
  2967.         return PairOfIntegers::First();
  2968.     }
  2969.  
  2970.     int Second() { return PairOfIntegers::Second(); }
  2971.  
  2972.     void SetFirst(int new_first)
  2973.     {
  2974.         if (new_first != First()) {
  2975.             PairOfIntegers::SetFirst(new_first);
  2976.             a_times_b=First()*Second();
  2977.         }
  2978.     }
  2979.  
  2980.     void SetSecond(int new_second) ... and so on.
  2981.  
  2982. private:
  2983.     int a_times_b;
  2984. };
  2985.  
  2986. This does the job, but didn't we say:
  2987.  
  2988.     6. One can override functions of inherited classes.
  2989.  
  2990. ???
  2991.  
  2992. Yes, we can.  BUT, only if the original class (the "base class") has
  2993. allowed us to do so in advance.  This means the designer of the base
  2994. class has to think ahead a little bit about what some inheritor of the
  2995. class ("derived classes") might want to override.
  2996.  
  2997. Once the designer decides, all they have to do is add "virtual" to the
  2998. function description.  Let's change PairOfIntegers to allow SetFirst
  2999. and SetSecond to be overridden:
  3000.  
  3001.  
  3002. class PairOfIntegers {
  3003. public:
  3004.     int First() { return a; }
  3005.     int Second() { return b; }
  3006.  
  3007.     virtual void SetFirst(int new_first) { a=new_first; }
  3008.     virtual void SetSecond(int new_second) { b=new_second; }
  3009.  
  3010. private:
  3011.     int a;
  3012.     int b;
  3013. };
  3014.  
  3015.  
  3016. Simple.  Now, how do we override?  Well, we just DO IT:
  3017.  
  3018. class FastProductablePairOfIntegers : public PairOfIntegers {
  3019. public:
  3020.     int Product() { return a_times_b; }
  3021.  
  3022.     virtual void SetFirst(int new_first)
  3023.     {
  3024.         if (new_first != First()) {
  3025.             PairOfIntegers::SetFirst(new_first);
  3026.             a_times_b=First()*Second();
  3027.         }
  3028.     }
  3029.  
  3030.     virtual void SetSecond(int new_second) ... etc.
  3031.  
  3032. private:
  3033.     int a_times_b;
  3034. };
  3035.  
  3036.  
  3037. Done.
  3038.  
  3039.  
  3040. 3. Wrap up.
  3041.  
  3042. We quickly dived into the differences between a plain C "struct" and
  3043. a C++ "class".  But at least we have seen all those nice features of
  3044. a class, and we have seen clues as to how we can use the feature to
  3045. not only make our programs safer and easier to improve, but also how
  3046. these features can make for faster, more efficient programs.
  3047.  
  3048. What you do with these features is limited only to your limitless
  3049. imagination.
  3050.  
  3051.  
  3052. -- Warwick
  3053.  
  3054. /************************************************************************/
  3055.                  Parsing the human equation
  3056.                       by Ron Whittam
  3057. /************************************************************************/
  3058.  
  3059. Phone support for a product could be your most critical function to
  3060. maintain continued product sales.  This month I would like to jump
  3061. into this subject.  Primarily, how can a one-man shop handle its
  3062. customer base efficiently?
  3063.  
  3064. While an often used support-link is the commercial information
  3065. services like GEnie and Compuserve, not every customer of your product
  3066. will have access to such services.  However, the populariy of the
  3067. Internet being broadcast in public media is making electronic support
  3068. a closer reality then ever before.  Electronic support can be very
  3069. advantageous to a one-man shop.  Be this media a FAX, voice mail, or
  3070. computerized information services; it will allow you to handle many
  3071. problems and product requests in an efficient manner.
  3072.  
  3073. But, phone support is still a vital need in our world today.  It is so
  3074. important to some companies that they are sub-contracting customer
  3075. support companies to do this support full-time for them.  While the
  3076. professional support company handles problems, the developer can
  3077. continue to work on new products without interuptions.  Not so easy on
  3078. a one-man shop operation.
  3079.  
  3080. OK.  Let's say you have implemented the common support media.  You
  3081. have a FAX.  You have an address on a commercial information service.
  3082. You have a message base on a local BBS.  You have a phone.  Your phone
  3083. is augmented with an answering machine (voice mail).  There is still
  3084. no substitute for person to person communication when people need
  3085. help.
  3086.  
  3087. While some might believe a discussion on good phone support would
  3088. entail a lengthy dialog on phone etiquette, I choose a different path.
  3089. While phone etiquette is important to any business dealing, the tools
  3090. to be efficient are more so.  It would do very little good to have a
  3091. terrific phone personality and only speak gibberish.  This discussion
  3092. will focus on the tools you may use to increase effective customer
  3093. support while talking on the phone.
  3094.  
  3095. I believe a the real key to good support is good information that is
  3096. readily accessable.  Easily accessable information will reduce your
  3097. time on a phone call.  You should keep a file drawer near your phone
  3098. and a notebook near your phone.  Both of these will provide you with
  3099. hard copy information "nearly" at your fingertips.  Yet I have found
  3100. that the best method for supporting computer products is to use the
  3101. power of the computer.  While many database type products exist, I
  3102. would like to draw your attention to a simple flatfile database
  3103. method.
  3104.  
  3105. The flatfile method does not require the purchase of additional
  3106. software.  It uses a simple text editor and a simple utility.  The
  3107. flatfile is a text file you create and update on your computer.
  3108.  
  3109.  CREATE A TEXT FILE
  3110.  
  3111. Use a word processor or text editor to create a new file.  If you are
  3112. using a word processor (that doesn't have a search feature) be sure
  3113. you can save the file as ASCII text.  For our purposes, we will call
  3114. the file FLATFILE.DB and use this distiction throughout this
  3115. discussion.  Setup a "template record" such as this:
  3116.  
  3117.  [top of file]
  3118.  -----------------------------------------------------------------
  3119.  PROBLEM or BUG:
  3120.  
  3121.  SOLUTION or FIX:
  3122.  
  3123.  COMMENTS:
  3124.  ------------------------------------------------------------------
  3125.  [end of file]
  3126.  
  3127. Save this file as FLATFILE.DB.  This file is now seven (7) lines long.
  3128. To add data to this file, retreave it and then copy lines 1-6 below
  3129. line 7.  Then fill in the information.  Continue to make copies of the
  3130. first six lines and fill in the appropriate information.  Save the
  3131. file.
  3132.  
  3133. Or an alternate template might be:
  3134.  
  3135.  [top of file]
  3136.  ------------------------------------------------------------------
  3137.  CUSTOMER:
  3138.  CONTACT:
  3139.  ADDRESS:
  3140.  CITY:                     STATE:     ZIP:
  3141.  PHONE #1:
  3142.  PHONE #2:
  3143.  FAX NUMBER:
  3144.  
  3145.  PRODUCT:                         PURCHASE DATE:
  3146.  
  3147.  CONTACT HISTORY:
  3148.  
  3149.  ------------------------------------------------------------------
  3150.  [end of file]
  3151.  
  3152. Save this file as FLATFILE.DB.  This file is now fourteen (14) lines
  3153. long.  To add data to this file, retreave it and then copy lines 1-13
  3154. below line 14.  Then fill in the information.  Continue to make copies
  3155. of the first thirteen lines and fill in the appropriate information.
  3156. Save the file.
  3157.  
  3158.  UPDATE THE TEXT FILE
  3159.  
  3160. Now you have FLATFILE.DB on your disk with important information.  To
  3161. update this file, retreave it into your text editor and continue to
  3162. add information.
  3163.  
  3164.  USING "GREP" TO SEARCH FOR INFORMATION
  3165.  
  3166. A utility common to the UNIX crowd (and now ported to most every
  3167. computer platform) is a program called GREP.  The program will search
  3168. a file for string of text.  When found, it will display the line
  3169. number and the text of the line in which the match was found.  Once
  3170. the line number is identified you may use your text editor to display
  3171. that section of the file.
  3172.  
  3173.  USING A WORD PROCESSOR TO DO THE SEARCH
  3174.  
  3175. Many word processors have a FIND or SEARCH feature.  If this is your
  3176. case then you can forego the ASCII save and the use of GREP.  You can
  3177. exploit these FIND and SEARCH features to do the task just as well or
  3178. better.  ProTEXT has a very powerful FIND option in the TEXT menu.  So
  3179. do other word processors.  You can search for a word or a string of
  3180. words.  You may select an option to have the match case sensitive or
  3181. not.  You may search forward or backwards in the file.
  3182.  
  3183.  JUST DO IT
  3184.  
  3185. Implementing this search and display on the phone is a rather simple
  3186. procedure.   When you get a phone call, GREP the customer file with
  3187. their company or contact name.  Then retrieve the file, find that
  3188. record.  Now you have all the necessary and pertantant information on
  3189. that person on your screen.  You can talk personally and intellegently
  3190. with your customer.  If they report a problem, indicate that on their
  3191. customer record for cross reference, and save the file.  Now you can
  3192. GREP the problem file.  Retreve the file and go to the record that is
  3193. indicated by the result of the GREP.   If you cannot locate a similar
  3194. problem, create a new entry.
  3195.  
  3196. While a simple database or a relational database would do this for
  3197. you, this is definately a quick and dirty method.  SuperBase, Tracker
  3198. ST, dBMAN, and others are fine database programs available for the
  3199. Atari ST.  These products will require some programming and setup to
  3200. work as efficently as the flatfile.  If you have a large shop the
  3201. database programs would be a must.
  3202.  
  3203. Most importantly: Have information about your products, your
  3204. customers, and problems readily available near the phone.  You will
  3205. sound more professional and you will service your customers better.
  3206. That's it for this month.
  3207.  
  3208. If you have any suggestions please EMail me a message on the Internet.
  3209.  
  3210.  
  3211.                         ----===[O-O-0]===----
  3212.  
  3213. Ron Whittam is a Software Support Specialist for a small software firm
  3214. in Boise, Idaho; and the President of the Atari Boise Users Group.  He
  3215. can be contacted on GEnie or through the Internet at
  3216. r.whittam@genie.geis.com and on the ROVER BBS (208) 362-2243.
  3217.  
  3218.  
  3219. /***********************************************************************/
  3220.      Language Watch - Current versions of developer tools
  3221. /***********************************************************************/
  3222.  
  3223. DEV| version & date   | product
  3224. ==========================================================================
  3225. A  | 1.1 Jan 1993     | Pure C (with ASM/C source level debugger) (German)
  3226. A  |     Sep 4, 1992  | Pure Pascal (German) (Turbo pascal 7.x compatible)
  3227. A  | 1.0 Oct 3, 1993  | Pure Profiler (German)
  3228. A  | 2.x              | Interface, (resource file editor, with 3D icons)
  3229. B  | 3.10             | Devpac 3 (assembler)
  3230. B  | 1.0              | Devpak DSP (for 56K digital signal processor)
  3231. B  | 5.60             | Lattice C
  3232. B  | 2.10             | HiSoft BASIC 2 (includes compiler)
  3233. B  | 2.03.02          | HiSoft C (C interpreter)
  3234. B  | 3.02             | SuperBase Professional
  3235. B  | 1.6              | HiSpeed Pascal (Turbo pascal compatible)
  3236. B  | 1.21             | FTL Modula-2
  3237. B  | 1.24             | WERCS (resource file editor)
  3238. C  | 2.05             | Personal Pascal
  3239. D  |      Aug 3, 1988 | Assempro (assembler)
  3240. E  | 2.1  1989        | Laser C
  3241. E  | 1.1  1989        | Laser DB (assembly & C source level debugger)
  3242. F  | 3.7  1991        | GFA BASIC (includes compiler)
  3243. G  | 1.115, 1992      | Prospero C
  3244. G  | 2.165, 1992      | Prospero Pascal for GEM
  3245. G  | 2.165, 1992      | Prospero Fortran for GEM
  3246. G  | 1.12, 1992       | Prospero Developer's Toolkit
  3247. H  | 3.6d Oct 1, 1988 | Aztec C
  3248. H  | 3.6e Dec 6, 1988 | Aztec SDB (C source level debugger)
  3249. I  | 3.0.9, 1988      | Mark Williams C
  3250. I  | 1.0, 1988        | CSD (C Source level Debugger)
  3251. J  | ***              | GNU tools, compilers and assembler
  3252.  
  3253. A = Gribnif Software/Applications Systems Heidelberg
  3254. B = Oregon Research Associates and/or HiSoft
  3255. C = ICD/OSS
  3256. D = Abacus Software
  3257. E = Megamax
  3258. F = GFA
  3259. G = Prospero
  3260. H = Manx
  3261. I = Mark Williams Company
  3262. J = Free Software Foundation
  3263.  
  3264. *** see Warwick's OBJECT::ATARI part 2 for specifics
  3265.  
  3266. [ Editor's NOTE:
  3267.  
  3268.   Producers of development tools are encouraged to send press
  3269.   releases and upgrade announcements to the Editor. ]
  3270.  
  3271.  
  3272. /**********************************************************************/
  3273.       Bad Example--An Assembly Programmer's Nightmare (and pet peeve)
  3274.                       By Damien M. Jones
  3275. /**********************************************************************/
  3276.  
  3277. I learned assembly programming mostly by looking at other people's
  3278. programs, and then writing my own.  So I've seen lots of assembly
  3279. programs, and I've developed a number of pet peeves about source
  3280. code.  The following examples will illustrate both some problems and
  3281. some solutions.
  3282.  
  3283. -- BAD EXAMPLE --
  3284.  
  3285. *    Rectangle intersection.
  3286.  
  3287. is_rec    movem.l 4(a7),a0-a1
  3288.     move.l (a0),d0        ; xywh -> xyxy
  3289.     add.w d0,6(a0)
  3290.     swap d0
  3291.     add.w d0,4(a0)
  3292.     move.l (a1),d0
  3293.     add.w d0,6(a1)
  3294.     swap d0
  3295.     add.w d0,4(a1)
  3296.  
  3297.     move.w (a0)+,d0        ; compute intersection
  3298.     cmp.w (a1),d0
  3299.     blt.s .1
  3300.     move.w d0,(a1)
  3301. .1    move.w (a0)+,d0
  3302.     cmp.w 2(a1),d0
  3303.     blt.s .2
  3304.     move.w d0,2(a1)
  3305. .2    move.w (a0)+,d0
  3306.     cmp.w 4(a1),d0
  3307.     bgt.s .3
  3308.     move.w d0,4(a1)
  3309. .3    move.w (a0),d0
  3310.     cmp.w 6(a1),d0
  3311.     bgt.s .4
  3312.     move.w d0,6(a1)
  3313.  
  3314. .4    subq.w #6,a0        ; xyxy -> xywh
  3315.     move.l (a0),d0
  3316.     sub.w d0,6(a0)
  3317.     swap d0
  3318.     sub.w d0,4(a0)
  3319.     move.l (a1),d0
  3320.     sub.w d0,6(a1)
  3321.     swap d0
  3322.     sub.w d0,4(a1)
  3323.  
  3324.     ble.s .5        ; check overlap
  3325.     tst.w 6(a1)
  3326.     ble.s .5
  3327.     moveq #-1,d0
  3328.     rts
  3329. .5    moveq #0,d0
  3330.     rts
  3331.  
  3332. In the above example, it's almost impossible to figure out what's
  3333. going on.  Even if you know what the routine does - and the title only
  3334. hints at it - it can still be very difficult to see what it's doing,
  3335. and why.  Here is the same routine, reformatted and extensively
  3336. commented.
  3337.  
  3338. -- GOOD EXAMPLE --
  3339.  
  3340. *    Compute the intersection of two rectangles.
  3341. *    The rectangles are xywh, as the AES uses.  d0.l will contain
  3342. *    TRUE (-1) or FALSE (0), indicating whether the rectangles overlap.
  3343. *    The coordinates of the overlap (or the space between the rectangles,
  3344. *    if no overlap) will be written to the second rectangle.  If there
  3345. *    is no overlap, the width and/or height of the "between" rectangle
  3346. *    will be negative or zero.
  3347. *
  3348. *    Since d0 is the last item set by this routine, you can branch
  3349. *    immediately following the routine--no tst instruction is needed.
  3350.  
  3351. *    On the stack:
  3352. *    8(a7)    Address of second rectangle (will be changed).
  3353. *    4(a7)    Address of first rectangle.
  3354.  
  3355. *    d0-d2 and a0-a2 should be considered trashed by this routine.
  3356. *    The calling routine is responsible for fixing up the stack.
  3357. *    This is standard C calling protocol.
  3358.  
  3359. intersect_rectangles
  3360.     movem.l 4(a7),a0-a1   ; Get address for rectangles.
  3361.  
  3362. *    Convert xywh to xyxy.
  3363.  
  3364.     move.l (a0),d0        ; Get X and Y of first rectangle.
  3365.     add.w d0,6(a0)        ; Add Y to H to get Y2.
  3366.     swap d0               ; Get X.
  3367.     add.w d0,4(a0)        ; Add X to W to get X2.
  3368.  
  3369.     move.l (a1),d0        ; Get X and Y of second rectangle.
  3370.     add.w d0,6(a1)        ; Add Y to H to get Y2.
  3371.     swap d0               ; Get X.
  3372.     add.w d0,4(a1)        ; Add X to W to get X2.
  3373.  
  3374. *    Now compute the coordinates of the intersected rectangle.
  3375.  
  3376.     move.w (a0)+,d0       ; Get A(X1).
  3377.     cmp.w (a1),d0         ; Is A(X1) > B(X1)?
  3378.     blt.s .do_y1          ; No, B(X1) is bigger; use it.
  3379.     move.w d0,(a1)        ; Else use A(X1).
  3380.  
  3381. .do_y1    move.w (a0)+,d0 ; Get A(Y1).
  3382.     cmp.w 2(a1),d0        ; Is A(Y1) > B(Y1)?
  3383.     blt.s .do_x2          ; No, B(Y1) is bigger; use it.
  3384.     move.w d0,2(a1)       ; Else use A(Y1).
  3385.  
  3386. .do_x2    move.w (a0)+,d0 ; Get A(X2).
  3387.     cmp.w 4(a1),d0        ; Is A(X2) < B(X2)?
  3388.     bgt.s .do_y2          ; No, B(X2) is smaller; use it.
  3389.     move.w d0,4(a1)       ; Else use A(X2).
  3390.  
  3391. .do_y2    move.w (a0),d0  ; Get A(Y2).
  3392.     cmp.w 6(a1),d0        ; Is A(Y2) < B(Y2)?
  3393.     bgt.s .convert_xywh   ; No, B(Y2) is smaller; use it.
  3394.     move.w d0,6(a1)       ; Else use A(Y2).
  3395.  
  3396. *    Now convert the xyxy rectangles back to xywh.
  3397.  
  3398. .convert_xywh
  3399.     subq.w #6,a0          ; Move this back to start of rectangle.
  3400.  
  3401.     move.l (a0),d0        ; Get X1 and Y1 of first rectangle.
  3402.     sub.w d0,6(a0)        ; Subtract Y1 from Y2 to get H.
  3403.     swap d0               ; Get X1.
  3404.     sub.w d0,4(a0)        ; Subtract X1 from X2 to get W.
  3405.  
  3406.     move.l (a1),d0        ; Get X1 and Y1 of second rectangle.
  3407.     sub.w d0,6(a1)        ; Subtract Y1 from Y2 to get H.
  3408.     swap d0               ; Get X1.
  3409.     sub.w d0,4(a1)        ; Subtract X1 from X2 to get W.
  3410.  
  3411. *    Now see if the rectangles overlapped.
  3412.  
  3413.     ble.s .no_overlap     ; W is <= 0 (from above), means no overlap.
  3414.     tst.w 6(a1)           ; Is H <= 0?
  3415.     ble.s .no_overlap     ; Yes, no overlap.
  3416.  
  3417.     moveq #-1,d0          ; Else they do overlap.
  3418.     rts                   ; We're done.
  3419.  
  3420. .no_overlap
  3421.     moveq #0,d0           ; Rectangles do not overlap.
  3422.     rts                   ; We're done.
  3423.  
  3424. There are a few important differences I'd like to point out here,
  3425. along with a few style guidelines for assembly language.  The first is
  3426. that the bad example had a grand total of five comments for a 46-line
  3427. subroutine.  Assembly is difficult enough to program, even with
  3428. comments.  There are also only three blank lines separating the
  3429. routine.
  3430.  
  3431. In the good example, I expanded the routine header to explain what the
  3432. function does, and how the parameters are passed to it.  I also listed
  3433. how values are returned from it, and a tip for using return values
  3434. from the function.  Then I list which registers are destroyed.  Note
  3435. that while the routine does not actually destroy all the registers
  3436. listed, I listed the standard set of destroyed registers for C
  3437. functions; this lets me change the routine later, perhaps utilizing an
  3438. extra register or two, without having to rewrite the code that calls
  3439. it.
  3440.  
  3441. Then I took each of the small comments and put them on separate lines,
  3442. expanding them in the process.  This helps give an overview of the
  3443. important sections of the routine.  Writing comments as complete
  3444. sentences also increases the readability of the program, since this is
  3445. how we normally communicate and expect information to be presented.
  3446.  
  3447. The next step was to take the long blocks of code and break them up.
  3448. In general, each small block should contain only one "step".  This may
  3449. be a short concept (doing a simple operation on one set of data) or a
  3450. bit more complex (an if-then sort of step), but as a general rule it
  3451. should be no more than six or eight steps (four is ideal).  Any time
  3452. you start doing something different, or do it with a different piece
  3453. of data, is an excellent time to place a blank line in your code.
  3454.  
  3455. I then replaced the labels with more explicit, meaningful ones.  .5
  3456. doesn't tell me much, but .no_overlap does.  Good labels, especially
  3457. for routine names, are important.  If you came across a "bsr is_rec"
  3458. line in a program somewhere, you might wonder if it meant, "find out
  3459. if the passed data is a rectangle", or who knows what else.  If you
  3460. came across "bsr intersect_rectangles", though, you could be
  3461. reasonably certain the routine had something to do with intersecting
  3462. rectangles.  Don't be afraid of long names.
  3463.  
  3464. The final step was to add a comment to each line.  This is critical,
  3465. and often the most left-out step of writing assembly code.  If you
  3466. think I am exaggerating, take a look at the bad example again.  Sure,
  3467. you could figure out exactly what was going on, given time.  Now
  3468. imagine that you have FIFTY pages of assembly code, all just like that
  3469. bad example.  Things start to look a little grim, don't they?  Comment
  3470. every line.  You may know what your program does, now, but two weeks
  3471. from now, when you discover there's a bug in your program, you will
  3472. appreciate those comments.  If you do something differently than you
  3473. do it elsewhere, and there's a reason for it, spell out the reason;
  3474. you'll be saving yourself some head-scratching later as you wonder,
  3475. "Why did I do it that way...?"
  3476.  
  3477. This may seem very silly.  When I was getting started writing
  3478. programs, I didn't use very many comments.  I figured I knew what I
  3479. was doing (and back then, REM statements in BASIC were all that I
  3480. had), so why bother adding comments?  It seemed so silly.  I have
  3481. learned the hard way, as many must, that comments are not necessarily
  3482. for the here and now.  They are for the tomorrow, the next week, the
  3483. next year.  You can't remember everything.  Most languages, including
  3484. assembly, include the capability to comment every line of your
  3485. program.  Don't waste the opportunity.
  3486.  
  3487. A comment on the comments is appropriate here.  You will notice that
  3488. in many places in the good example, similar operations are performed
  3489. on different pieces of data.  You will also notice that, in these
  3490. cases, the comments are also very similar.  This is intentional, and
  3491. invaluable.  In general, you will be able to spot meaningful patterns
  3492. in the comments faster than you will be able to spot patterns in the
  3493. actual program, because the program statements are all very similar
  3494. anyway.  Use this to your advantage.
  3495.  
  3496. As a final note, many experienced assembly programmers will note that
  3497. my style of assembly is slightly non-traditional.  As an example,
  3498. here's the "traditional" style:
  3499.  
  3500.     move.l   (a0),d0     ; Get X and Y of first rectangle.
  3501.     add.w    d0,6(a0)    ; Add Y to H to get Y2.
  3502.     swap     d0          ; Get X1.
  3503.     add.w    d0,4(a0)    ; Add X to W to get X2.
  3504.  
  3505. Notice the tab between the instruction (add.w) and the operands
  3506. (d0,6(a0))?  I use a space, instead of a tab:
  3507.  
  3508.     move.l (a0),d0       ; Get X and Y of first rectangle.
  3509.     add.w d0,6(a0)       ; Add Y to H to get Y2.
  3510.     swap d0              ; Get X1.
  3511.     add.w d0,4(a0)       ; Add X to W to get X2.
  3512.  
  3513. I do this for two reasons.  Mostly it's because the more traditional
  3514. approach splits the instructions into two separate columns,
  3515. instructions and operands.  The effect of this is to bind the
  3516. operands more tightly to each other, instead of to the instructions.
  3517. In my approach, the instructions and their operands appear to be much
  3518. closer related.  In truth, your assembly won't care which you
  3519. use - but you might.
  3520.  
  3521. /*************************************************************************/
  3522.                  Legal Forum : Intellectual Property
  3523.                    by Fred Wilf and Gerry Elman
  3524. /*************************************************************************/
  3525.  
  3526.        HOW TO WORK WITH YOUR INTELLECTUAL PROPERTY ATTORNEY:
  3527.                  Steps in Obtaining Patents and
  3528.               Registering Trademarks and Copyrights
  3529.  
  3530.                Copyright (c) 1994 Elman Wilf & Fried.
  3531.                       All rights reserved.
  3532.  
  3533. In general, intellectual property is secured by various legal tools
  3534. including patents, trademarks and copyrights. This summary will
  3535. provide background information about these forms of intellectual
  3536. property and the process by which your rights in intellectual property
  3537. may be secured. It discusses various procedures, which will generally
  3538. involve assistance by a patent practitioner (who may be a patent
  3539. attorney or patent agent) or an attorney.
  3540.  
  3541. This summary is current as of January 1, 1994, but is likely to become
  3542. outdated as a result of changes in United States and international
  3543. statutes, regulations, fees and procedures.  It provides only general
  3544. information and should not be considered a substitute for legal
  3545. advice.  If you have specific questions about the law or how the law
  3546. affects you, then you should retain an attorney for legal
  3547. consultation.
  3548.  
  3549.                              Patents
  3550.  
  3551.      A United States patent gives the owner the right to exclude
  3552. others from making, using or selling in the United States the
  3553. invention, which is defined by a series of descriptive "claims." A
  3554. patent is available for an invention that is found to be (1) novel,
  3555. (2) useful, and (3) not obvious to someone of ordinary skill in the
  3556. relevant technology who is fully familiar with the "prior art."  The
  3557. prior art includes, for example, patents and publications worldwide,
  3558. as well as public uses and products on sale in the United States.
  3559. Another form of patent protection, called a "design patent," protects
  3560. ornamental features and the shape of a useful article, such as a
  3561. keyboard or a piece of laboratory apparatus.
  3562.  
  3563.      A patent application in the United States must contain a
  3564. disclosure of the invention - in the form of a description and any
  3565. drawings that may be appropriate - that is complete enough to enable
  3566. someone having ordinary skill in the field to make and use the
  3567. invention.  In addition, the application must disclose the best mode
  3568. of carrying out the invention that is known to the inventor at the
  3569. time the application is filed.
  3570.  
  3571.      Relevant technology may be located by searching in the files of
  3572. the Patent and Trademark Office or by a computer database or library
  3573. search.  A patent practitioner generally studies the results of such a
  3574. search and provides you with an opinion on the patentability of your
  3575. invention in light of the search results.  If you are interested in a
  3576. search to determine whether your proposed product might infringe
  3577. someone else's patent claims, then the depth of the search, and hence
  3578. the cost, would be greater, although the focus would be on only
  3579. unexpired patents.
  3580.  
  3581.      After receiving a discussion of the prior art, you may ask your
  3582. patent practitioner to prepare a patent application.  If so, you might
  3583. need to provide the practitioner with additional information to
  3584. complete the disclosure of your invention. You would expect the
  3585. practitioner to prepare the application and accompanying formal papers
  3586. and any drawings.  There may also be a document to assign ownership of
  3587. the patent application to your company or another company.
  3588.  
  3589.      Further prosecution of the patent application may be simple or
  3590. complex.  Your patent practitioner will prepare and file an
  3591. Information Disclosure Statement to present certain information of
  3592. which you have become aware, such as the results of searching.  There
  3593. is an absolute requirement of full disclosure of all known prior art
  3594. and prior public uses and offers for sale of the invention, whether by
  3595. yourself or others.  Failure to comply with this requirement would
  3596. jeopardize the validity of any patent which might issue and might
  3597. possibly subject you to pay damages in litigation with a potential
  3598. competitor.
  3599.  
  3600.      Further prosecution over ensuing months will likely include
  3601. amendment of the claims and argument in response to an Office Action
  3602. from the Patent Examiner and interviewing the Examiner.  In addition,
  3603. it is possible that such prosecution might include the preparation of
  3604. affidavits to overcome objections and rejetions by the Examiner,
  3605. petitions and appeals to higher authorities within the Patent and
  3606. Trademark Office and to a court, and the preparation of divisional,
  3607. continuation and continuation-in-part applications.
  3608.  
  3609.      The application (or the issued patent) may also become a party to
  3610. an interference proceeding to determine which of various claimants can
  3611. prove priority of invention.  "Priority of invention" is a legal
  3612. principle which does not depend only on the date the invention is
  3613. conceived.  It also requires proof of "diligence," continuous effort
  3614. to reduce the invention to practice - either actually, by carrying out
  3615. an actual demonstration of a complete prototype of the claimed
  3616. invention, or constructively, by filing a patent application.  Thus,
  3617. delays in responding to communications regarding a proposed U.S.
  3618. patent application should be kept to a minimum.
  3619.  
  3620.      Various government fees may also be payable during prosecution
  3621. and will be payable upon issuance of the patent, as well as to
  3622. maintain it in force at various points during its lifetime.  If the
  3623. application is not owned by, or licensed to, a business having 500 or
  3624. more employees, it will qualify for the 50% discount in government
  3625. fees available to "small entities." If so, your patent practitioner
  3626. should prepare and file a verified statement of your status as a
  3627. "small entity."
  3628.  
  3629.      You will need to make a decision regarding the strategy for
  3630. filing any foreign counterparts under the Patent Cooperation Treaty or
  3631. otherwise.  These patents would hopefully provide similar rights in
  3632. various foreign countries you may select.  In order to obtain the
  3633. benefit of the filing date of your United States application in the
  3634. countries that are members of the Paris Convention on patents, it is
  3635. required that such foreign counterparts be filed within twelve months
  3636. from the filing date of the United States application.  Beware that
  3637. although the United States permits inventors up to one year from their
  3638. own public disclosure or placing the invention on sale before their
  3639. U.S. patent application is time-barred by their own actions, most
  3640. foreign countries do not provide such a "grace period."  The best
  3641. strategy to preserve your rights is to file a U.S. patent application
  3642. BEFORE making a non-confidential disclosure of the invention to
  3643. anyone.  Moreover, certain foreign countries, notably Taiwan and
  3644. India, have not ratified the Paris Convention.
  3645.  
  3646. They do not grant priority rights on the basis of a United States
  3647. patent application.  Tell your patent practitioner immediately if you
  3648. are interested in protecting your rights in these countries or any
  3649. others that are of particular importance to you.
  3650.  
  3651.      Patent practitioners are also frequently asked to advise whether
  3652. a proposed product comes within the claims of a particular patent of a
  3653. competitor or other identified party.  In that event they would first
  3654. determine the scope of the claims by obtaining and reviewing a copy of
  3655. the prosecution history of the patent.  If the proposed product is not
  3656. clearly outside the scope of the issued claims, they would next seek
  3657. to determine if any of the claims might be invalid (e.g., because of
  3658. additional prior art not brought to the Patent Examiner's attention).
  3659. In the event that they are able to provide an opinion that the
  3660. proposed product does not infringe any valid claims of the patent,
  3661. then it would benefit your company because generally a court would
  3662. decline to award additional damages for "willful infringement," even
  3663. if the court were to disagree with your patent practitioners and find
  3664. that the patent is infringed.
  3665.  
  3666.                            Copyrights
  3667.  
  3668.        An attorney can help by advising you about United States and
  3669. international copyright protection, reviewing documents, prosecuting
  3670. copyright applications, and litigating copyright infringement suits.
  3671.  
  3672.      As soon as a work of authorship is fixed in a tangible medium of
  3673. expression (e.g., written on paper or saved on a computer disk) it is
  3674. protected by the U.S. Copyright Act.  The protection is automatic and
  3675. does not require that you take any further action. However, you should
  3676. consider taking two steps (which are optional for new works) to gain
  3677. additional protection.  These two steps are (1) place your copyright
  3678. notice on your work, and (2) register your copyright with the U.S.
  3679. Copyright Office.
  3680.  
  3681.      Your copyright notice should look like this:
  3682.  
  3683. Copyright * [Year of first publication] [Name of copyright owner].
  3684. All rights reserved.
  3685.  
  3686. where the * stands here in for the encircled-C symbol  (which is not
  3687. part of the ASCII character set).  It is advisable to use the
  3688. "encircled-C" symbol instead of "(c)" or "(C)".  If you can't use that
  3689. symbol, then include the word "Copyright" or the abbreviation "Copr."
  3690. If your work is not published (i.e., offered for distribution to the
  3691. general public), then leave out the year of first publication.
  3692. Although a copyright notice is not absolutely required for any work
  3693. first published on or after March 1, 1989, it is strongly recommended
  3694. to use copyright notices on all of your works.
  3695.  
  3696.      The second step is to register your copyrights.  You don't need
  3697. to register your copyright, but the law provides additional benefits
  3698. to those who do.  Moreover, you may not sue an infringer in court
  3699. unless and until you have received a certificate of copyright
  3700. registration for your work.  The U.S. filing fee is $20.00 per
  3701. application.  The registration process takes approximately four months
  3702. between the filing of the application and your receipt of the
  3703. certificate of registration.  You may speed up the registration
  3704. process (e.g., if you immediately need to sue an infringer) by paying
  3705. an additional $200.00 government filing fee per application.
  3706.  
  3707.      Your applications for copyright registration should be filed as
  3708. soon as possible after your work is created and before you distribute
  3709. your work.  Your cost of registering your works is lower when you are
  3710. not in a hurry to sue an infringer.  Further, if you file an
  3711. application for copyright registration before someone infringes your
  3712. work, or within three months of the date your work is first published
  3713. (if your work is published), then you receive two additional benefits
  3714. that you would not otherwise have.
  3715.  
  3716.      The first additional benefit is that the federal court may award
  3717. you your attorney's fees.  The second additional benefit is that you
  3718. may request the court to award "statutory" damages instead of any
  3719. actual damages that you have suffered.  Statutory damages are
  3720. preferred when you cannot prove that you actually lost money, or when
  3721. you have lost a rather small amount of money.  The judge may then
  3722. award statutory damages somewhere between $500.00 and $20,000.00 per
  3723. work.  If you can prove the infringer intentionally infringed your
  3724. copyright, then the judge may award you up to $100,000.00 of statutory
  3725. damages per work.
  3726.  
  3727.      It is recommended to file applications for copyright registration
  3728. before or at least soon after publishing anything that is valuable to
  3729. you.  Once the certificate of copyright registration issues, you do
  3730. not need to do anything further to secure your copyright rights in the
  3731. United States.
  3732.  
  3733.      It is important to understand that if the work of authorship is
  3734. created by an independent contractor, the client does not
  3735. automatically own the copyright.  An attorney should be consulted to
  3736. assist in making sure that agreements with independent contractors
  3737. fully protect the client if it wishes to own the copyright outright.
  3738.  
  3739.                            Trademarks
  3740.  
  3741.      Attorneys use the term "trademark" to refer to any design, word,
  3742. or combination of words and designs, used in connection with the
  3743. products or services of a business.  Technically, the term "service
  3744. mark" is used for designations of services, but a service mark is just
  3745. one type of trademark.
  3746.  
  3747.      As soon as you start using your trademark, you should use the
  3748. symbol "TM" to designate a trademark for goods and the symbol "SM" to
  3749. designate a service mark for services.  Thus, you may generally place
  3750. a tiny "TM" in or adjacent to each trademark for goods and a tiny "SM"
  3751. next to each service mark.
  3752.  
  3753.      If you desire to protect a trademark, it is common to first do a
  3754. search to find out if the marks you like are available.  One may start
  3755. by checking on-line databases of federal trademark applications and
  3756. registrations, plus state trademark registrations.  These databases
  3757. are organized for searching alphabetically for "direct hits," and also
  3758. by phonetic sound-alikes, and for suffixes and prefixes.  Your
  3759. attorney would use the search results to initially evaluate whether
  3760. your proposed trademarks are "confusingly similar" to the trademarks
  3761. of your competitors.
  3762.  
  3763.      If your marks come up reasonably clear from the initial search,
  3764. one may then check other databases and look for similar marks used by
  3765. companies that haven't yet registered their marks.  These companies
  3766. may develop "common law" rights in their trademarks by using their
  3767. trademarks.
  3768.  
  3769.      In addition to searching your proposed trademarks, your attorney
  3770. can advise you how to use the trademark in connection with your goods
  3771. (e.g., on labels and on the product) and with your services (e.g., in
  3772. marketing materials, brochures and advertisements).
  3773.  
  3774.      The U.S. trademark law was amended in 1989 to allow you to file
  3775. an application based on your bona fide ("good faith") intent to use
  3776. your trademark.  You may file an "intent to use" application even
  3777. before you place your trademark on your goods.  By comparison, you may
  3778. only file a "use" application after you have used your trademark in
  3779. interstate commerce, such as by shipping your goods to a customer in
  3780. another state or by advertising your services in another state.
  3781.  
  3782.      Your attorney can prepare for you a federal "use" or "intent to
  3783. use" trademark application and file it with the U.S. Patent and
  3784. Trademark Office.  The government charges a filing fee of $245.00 per
  3785. class of goods or services.  If your trademark consists of a logo,
  3786. design or stylized lettering, then your attorney would need to obtain
  3787. a black-and-white drawing of the design in the stylized form required
  3788. for federal trademark applications.
  3789.  
  3790.      Upon filing of your application for trademark registration, an
  3791. examining attorney in the U.S. Patent and Trademark Office ("PTO")
  3792. searches registered marks and pending federal applications for any
  3793. that may be confusingly similar to your trademark.  The PTO attorney
  3794. also examines the application for compliance with various technical
  3795. and legal standards.  The PTO attorney is likely to object to one or
  3796. more aspects of your application.  Your lawyer would generally
  3797. communicate by phone and in writing to respond to the PTO attorney.
  3798.  
  3799.      When and if the PTO attorney finds no further barriers to
  3800. granting your application, the PTO will publish your mark in the
  3801. Official Gazette of the Patent and Trademark Office.  Then, for a
  3802. month or so, others who may have adopted a similar mark will have the
  3803. opportunity to challenge your right to register your mark.  If your
  3804. mark is challenged, then the PTO conducts a proceeding to determine
  3805. the matter.  If there is no challenge, your application proceeds to
  3806. the next stage.
  3807.  
  3808.      If your application is an "actual use" application, then the PTO
  3809. registers the trademark and issues a certificate of registration to
  3810. you.
  3811.  
  3812.      If your application is an "intent to use" application, then the
  3813. PTO will not register your trademark until you file a sworn statement
  3814. that your mark has actually gone into bona fide use in interstate
  3815. commerce.  The filing fee for this statement is $100.00.
  3816.  
  3817.      Once the PTO grants to you a registration and sends you a
  3818. certificate of registration (but no sooner), you may then use the
  3819. encircled-R symbol in connection with your mark, or alternatively the
  3820. term "Reg. U.S. Pat. and T.M. Off." (which is more cumbersome). Until
  3821. you receive a certificate of trademark registration, you may use the
  3822. "TM" and "SM" symbols.
  3823.  
  3824.      This completes the registration process.  Once the PTO issues a
  3825. registration, you generally won't be involved with the PTO for another
  3826. five years.  Between the fifth and sixth anniversaries of the
  3827. registration date, you would need to file an affidavit that you are
  3828. still using the trademark in connection with the same goods and
  3829. services.  If the "affidavit of use" is not filed during that time,
  3830. the registration is canceled (although you could seek to re-register
  3831. your trademark).  The PTO filing fee for the affidavit of use is
  3832. $100.00 per class of goods and services.
  3833.  
  3834.      Further, if your trademark had not been found invalid or was not
  3835. in litigation at the time that you file the affidavit of use - or at
  3836. the end of any five-year period -  you could file an "affidavit of
  3837. incontestability."  The affidavit of incontestability may be filed by
  3838. itself or as part of the same document as the affidavit of use.  An
  3839. affidavit of incontestability provides additional rights in case you
  3840. need to sue a trademark infringer; the infringer would have a higher
  3841. standard to overcome to battle you in court as the validity of your
  3842. trademark would be "incontestable." (However, certain things about the
  3843. trademark may nevertheless be subject to challenge.) The PTO filing
  3844. fee for the affidavit of incontestability is $100.00 per class of
  3845. goods and services.
  3846.  
  3847.      A U.S. trademark registration is valid for ten years.  A renewal
  3848. of the registration must be filed anywhere between six months before
  3849. the anniversary to three months after the anniversary.  If you file
  3850. the renewal application too early or too late, the PTO will ignore it.
  3851. Unless the renewal application is filed within the window of
  3852. opportunity, the PTO will cancel your registration (although you could
  3853. seek to re-register your trademark).
  3854.  
  3855.      Your attorney can also help you register your trademarks in other
  3856. countries.
  3857.  
  3858.                           Other Matters
  3859.  
  3860.      Your attorney can also help you protect your intellectual
  3861. property in other ways, such as design patents and mask work
  3862. registrations.
  3863.  
  3864.  
  3865. Gerry J. Elman, J.D.
  3866.   CompuServe 72245,556
  3867.  
  3868. Frederic M. Wilf, J.D.
  3869.   CompuServe 72300,2061
  3870.  
  3871. Elman Wilf & Fried
  3872. 20 West Third Street
  3873. Media, PA  19063-2824
  3874.  
  3875. Phone: 610-892-9580
  3876. Fax: 610-892-9577
  3877.  
  3878. [ Editor's Note:
  3879.  
  3880. The above article is Copyright (c) 1994 Elman Wilf & Fried.
  3881. Permission is NOT granted for reproduction in any form other than this
  3882. issue of AEO-PJ.
  3883.  
  3884. Services provided by Elman Wilf & Fried encompass all of the following:
  3885.  
  3886.  Protecting intellectual property, Patents, Copyrights, Trade secrets,
  3887.  Trademarks, Unfair competition, Negotiating and drafting contracts,
  3888.  Licenses and joint research projects, Ownership of inventions by
  3889.  employees and independent contractors, Litigating technology and
  3890.  business disputes, Assisting purchasers and sellers of computer
  3891.  hardware and software, Incorporate and obtaining financing for start-up
  3892.  ventures, Obtaining regulatory approval of technological developments.
  3893.  
  3894. Gerry Elman is also a Sysop in the Innovator's forum on CompuServe.
  3895.  
  3896. This Forum is intended to act as a conduit for inventor's,
  3897. innovator's and those involved in technology transfer world-wide,
  3898. management people in large or small companies, venture capital firms,
  3899. investment bankers, new product managers, patent and trademark lawyers
  3900. or housewives. The purpose of the forum is networking, support and
  3901. development of new products or improving esisting ones. You will find
  3902. both experienced inventors and 'wannabees' here.
  3903.  
  3904. ]
  3905.  
  3906. /*************************************************************************/
  3907.     Editor's choice for 1993 - Software Development tools
  3908. /*************************************************************************/
  3909.  
  3910. The questions are:
  3911.  
  3912. a) Top 10 Development tools
  3913. b) Best books and periodicals
  3914. c) Best IDE (Integrated Development Environment)
  3915. d) Why number one (in your top 10 list) is number one.
  3916.  
  3917. //// Warwick Allison
  3918.  
  3919.  1. GNU C++        I can't live without it.
  3920.  2. GNU Make       I'd go crazy without it.
  3921.  3. GNU BASH       Anything less unix-like is a pain.
  3922.  4. Elvis          Anything less vi-like is a pain.
  3923.  5. MiNT           Makes life easier...
  3924.  6. TOSWIN_W       ... especially with this!
  3925.  7. ORCS           I just wish I could find Theodore Otto!
  3926.  8. grep, etc.     It's not complete without this gang.
  3927.  9. Drawing prg.   Any will do.  I used to like CrackArt, but STlow is too low.
  3928.  10. GNU C         Just so I don't have to convert all of NetHack to C++.
  3929.  
  3930. Other:
  3931.  
  3932.  1. GEM++          I love it.
  3933.  2. GEM++          But then again,
  3934.  3. GEM++          I guess I'm biased.
  3935.  
  3936. Seriously, I think that each programmer also has a favourite C (or C++)
  3937. library which they just couldn't live without.
  3938.  
  3939. //// Carl Barron
  3940.  
  3941. a) 1. my C compiler system (LATTICE) Without a good C compiler I
  3942.       would be lost.
  3943.    2. Flex 2.3.7
  3944.    3. Berkeley yacc
  3945.    4. gawk
  3946.    5. sed
  3947.    6. tavlr - threaded avl tree library - free
  3948.    7. regexp - Free regular expression library
  3949.    8. Hisoft Basic - good for porting 'foriegn' basic code.
  3950.    9. Hispeed pascal - ok but needs work, that does not appear to be
  3951.       forth coming.  Essentially a turbo pascal compiler.
  3952.    10. Devpac - good for stand alone assembler progs. I don't write
  3953.        too many.... Wow, I could find 10 <grin>
  3954.  
  3955. b). books purchased in 1993.
  3956.  
  3957.    1. Writing Solid Code  - Good methods of reducing the bugs in a
  3958.                             program from day one.
  3959.    2. Lex & Yacc ,Nutshell book.  Good at explaining use of lex and
  3960.       yacc and their clones.
  3961.    3. Sed & Awk , Nutshell book.  Good at explaining use of sed and
  3962.       awk,nawk,gawk.
  3963.    4. Numerical Recipes in C.  A good collection of numerical
  3964.       analysis routines.  Looks a lot like fortran conversions.
  3965.       Requires a robust malloc(),free() implementation, if the code
  3966.       is used directly.
  3967.  
  3968.   Periodicals
  3969.  
  3970.     1. C user's Journal.
  3971.     2. Dr. Dobb's Journal
  3972.     3. Software Development
  3973.  
  3974. c) Only IDE used often is Lattice C.  DevPac and others in a) are ok.
  3975.  
  3976. d) A language compiler is the most important item. Without it all
  3977. other tools are useless.  I use C because there exists so many pd
  3978. tools and libs to make life easier. [ex. flex yacc tavltr regexp]
  3979.  
  3980. //// Albert Dayes
  3981.  
  3982. a)  1. Pure C compiler (includes assembler and C source level debugger)
  3983.     2. Modem (Can anyone live without one?)
  3984.     3. grep
  3985.     4. EdHak   - the Super Editor (text and binary) by Clear Thinking
  3986.     5. Look It - Codehead's text and binary (multiple) file editor
  3987.     6. MT-C Shell - A UNIX C-shell by Beckemeyer Development
  3988.     7. SupEdit - Supra's hard disk sector editor
  3989.     8. C_PSLIB - a PostScript library for C programmers
  3990.     9. Greenleaf Database library - xBASE data/index/memo file compatible
  3991.     10. STraight Fax v2.x - fax software by NewStar technologies
  3992.  
  3993. b) books:
  3994.  
  3995.     1. The Atari Compendium by SDS Publishing - ISBN 0-9638331-0-3
  3996.     2. File Structures, 2nd Edition - ISBN 0-201-55713-4
  3997.     3. Unix Programmer's Reference - ISBN 0-88022-536-X
  3998.     4. Dictionary of Computing, 3rd Edition - ISBN 0-19-286131-X
  3999.     5. PostScript Language Reference Manual, 2nd Edition (Red-Book)
  4000.        ISBN 0-201-18127-4
  4001.  
  4002.   periodicals:
  4003.  
  4004.     1. C Users Journal
  4005.     2. Software Development
  4006.     3. Dr. Dobbs Journal
  4007.  
  4008. c)  Megamax's Laser C Shell.  The only GEM development environment with
  4009.     a CLI in a window.  The easiest way to access UNIX style tools and
  4010.     still enjoy the benefits of GEM.
  4011.  
  4012. d)  A great ANSI C compiler with an outstanding C source level debugger.
  4013.     Can anyone live with a true source level debugger?
  4014.  
  4015.  
  4016. //// Scott R. Garrigus
  4017.  
  4018. a)
  4019.   1. GFA BASIC
  4020.   2. GFA BASIC
  4021.   3. GFA BASIC
  4022.   4. GFA BASIC
  4023.   5. GFA BASIC
  4024.   6. GFA BASIC
  4025.   7. GFA BASIC
  4026.   8. GFA BASIC
  4027.   9. GFA BASIC
  4028.  10. GFA BASIC
  4029.  
  4030. //// Kris Gasteiger
  4031.  
  4032. a)
  4033.  
  4034. 1: OSS/ICD Personal Pascal ( of course! ).
  4035.  
  4036. 2: The Abacus Atari ST series of books. ( Out of print, but worth searching
  4037.    for in the used book stores. ).
  4038.  
  4039. 3: Compuserve.
  4040.  
  4041. 4: Tackle Box ST, by Rusty Mullins, no longer available, but probably
  4042.    replaceable by the Atari Compendium ( Which I really need to order! ).
  4043.  
  4044. 5: Someone else's code.
  4045.  
  4046. 6: A calculator capable of converting one numeric base to another. This can
  4047.    be hardware, or software ( Accessory ).
  4048.  
  4049. 7: A good text on pascal programing, my current favorite is: Introduction
  4050.    To Pascal, by Rodney Zaks. Sybex Publishing.
  4051.  
  4052. 8: Graph paper and pencil for mapping out what the program is to do, and how
  4053.    it is to do it. Also useful for bit maps and other graphics layout.
  4054.  
  4055. 9: Good Colombian Coffee or Peach Schnaps, depending on the time of day,
  4056.    and my current frame of mind.
  4057.  
  4058. 10: A hard drive with space to hold revision upon revision upon revision,
  4059.     until you realize that revision XXX.X worked best... A hard drive also
  4060.     speeds up compiles by an enormous amount.
  4061.  
  4062.  
  4063. //// Travis Guy
  4064.  
  4065.     A1) GFA BASIC 3.7 - Great editor. GFA makes it easy to throw an
  4066.         idea into the interpreter and see what happens.
  4067.  
  4068.     A2) My GFA libraries - ... but when it is time to compile
  4069.         something, I like to use my hand-built function libraries.
  4070.         GFA just does some weird things with their built-in GEM & TOS
  4071.         calls. I learned how to interface with GEM and TOS after
  4072.         years of strange bombs and lockups.
  4073.  
  4074.     A3) Devpac - You've got to use assembler to know your machine.
  4075.         Also useful for getting into those hard-to-reach areas that
  4076.         GFA'll never go.
  4077.  
  4078.     A4) Sozobon C - I actually wrote a real program in this once, and
  4079.         had AEO not appeared a month after I did that, I'm sure I
  4080.         would have written more. <g>
  4081.  
  4082.     A5) The original K-Resource. Great interface. I hear it's been
  4083.         updated to work with newer versions of TOS.
  4084.  
  4085.     B1) The Concise 68000 Programmer's Reference Guide - Whatta book.
  4086.  
  4087.     B2) One of the early MichTron GFA programming books - Sorry, but I
  4088.         can't remember its name, but I gave it a glowing review in ST
  4089.         Informer years ago. Only really useful for GFA programmers.
  4090.  
  4091.     B3) Chris Latham - Working with him on the Universal Item
  4092.         Selector (UIS) and his various GEMDOS replacement kernals and
  4093.         networking packages for the Atari was such an experience!
  4094.         I'll never forget when we finally started passing packets
  4095.         back and forth across the LocalTalk ports on our machines, we
  4096.         celebrated with a game of blitz chess and Cokes &
  4097.         cheeseburgers at the King Freeze - charged to the company.
  4098.  
  4099.     B4) The Atari Programming CAT on the GEnie ST RT - Filled with
  4100.         lots of experience, quick answers and great characters.
  4101.  
  4102.     B5) De Re Atari & Your Atari Computer (the purple book) - Yeah,
  4103.         these are 8-bit Atari programming books, but they gave me (a
  4104.         mere afternoon hacker) the urge to explore my 400's OS and
  4105.         get into serious programming. I wore out the spine on the
  4106.         purple book to the point where I had to bind it all together
  4107.         with duct tape. I'm saving my copy of De Re to be cremated
  4108.         with me.
  4109.  
  4110. //// Damien M. Jones
  4111.  
  4112. a) 1. Devpac 3.  For all the assembly I write, I couldn't survive
  4113.       without it.
  4114.    2. GFA BASIC 3.5.  I wouldn't recommend it to anyone else, but
  4115.       knowing most of its faults, I can work around them, and writing
  4116.       GEM code is easier in GFA.  (I dislike C for various reasons.)
  4117.    3. A custom CLI.  I didn't like any of the CLIs that were available;
  4118.       none of them did what I needed in the amount of memory I needed
  4119.       it done.  So I wrote my own.
  4120.    4. ORCS.  I use it for dialog construction because it's inexpensive
  4121.       and fairly simple to use.  I will probably buy a "real" RCS soon.
  4122.    5. A custom graphics program.  I often need a quick, simple graphics
  4123.       program to do a fast editing job on an icon, using tools not
  4124.       available in ORCS.  This custom program is small, and it loads fast.
  4125.    6. Geneva.  It's probably done more for my real productivity on the
  4126.       Atari than any other software package, and I'm still learning to
  4127.       use it more.
  4128.    7. Desk Manager 3.3.  Essential for switching configurations quickly,
  4129.       which I do a lot.
  4130.    8. Data Diet 2.  It helps keep the source files small enough to fit
  4131.       on my even smaller hard drive.
  4132.    9. NeoDesk 3.  I'm a visual person; I like icons.  (So why do I use a
  4133.       CLI?  They're better at some things.)  NeoDesk makes using my
  4134.       computer simpler and less taxing.
  4135.   10. Warp 9 3.8.  By making the whole system run faster and smoother, I
  4136.       can get more work done.
  4137.  
  4138. b) The Atari Compendium, no question.
  4139.    Graphics Gems I-III.  Graphics is one of the things I do, and these
  4140.    books have been invaluable tools here.
  4141.  
  4142. c) Devpac 3.  Editor, assembler, and debugger, all in one convenient
  4143.    package.
  4144.  
  4145. d) I'm slowly making the move to 100% assembly.  Some people believe
  4146.    that assembly is not the best tool for every job; I happen to be
  4147.    one of them.  But for almost everything _I_ want to do, it has to be
  4148.    assembly.  And if it has to be assembly, it has to be Devpac.  I've
  4149.    looked at other assemblers and debuggers--I just like how Devpac works.
  4150.  
  4151. //// Ron Whittam
  4152.  
  4153. a)  Top 10
  4154.  
  4155.   1. SOZOBON 2.0
  4156.   2. Dale Schumacher's dLIBS 1.20.0
  4157.   3. SZADB Sozobon Debuger
  4158.   4. STGREP 1.0 (ported by me from Unix to the ST)
  4159.   5. Gulam CLI
  4160.   6. Knife ST
  4161.   7. ZAP 2.0 binary editor
  4162.   8. MAKE.TOS (Tony Andrew's SOZOBON C make utility)
  4163.   9. ProEd 1.0f TOS Text Editor - for C script
  4164.  10. ProTEXT 4.5 Text Editor/WP - For documentation
  4165.  
  4166. b) Books/Periodicals
  4167.  
  4168.   1. Atari ST Internals; Bruckmann, English, Gerits; ABACUS
  4169.   2. "C" A Reference Manual; Harbison-Steel, Tartan Labs; Prentice Hall
  4170.   3. The Atari Compendium; Sanders; SDS
  4171.   4. C-manship Complete; Walnum; Taylor Ridge Books
  4172.   5. COMPUTE'S ST Programmer's Guide; Compute! Books
  4173.  
  4174. c) Best IDE
  4175.  
  4176.    Gulam CLI with my own menu program to integrate PROED (text
  4177.    editor), Sozobon's MAKE, Compiler, Optimizer, Assembler and Linker
  4178.    programs.  Does an OK job for a novice.
  4179.  
  4180. d) Why #1 is #1
  4181.  
  4182.    Sozobon C 2.0 is a low cost development system (price of shipping
  4183. the disks or downloading).  It has low overhead and is efficiently
  4184. fast for my uses.  While it is not ANSI compliant, there are many K&R
  4185. Style code on other platforms that can be easily ported to the ST with
  4186. Sozobon C.  I got it 'cuz it was simple to use and I wanted to have
  4187. something, other than BASIC, to support my own computer with.
  4188.  
  4189. e) Non-Fiction books. . .
  4190.  
  4191.    1 - Hackers, Steven Levy
  4192.    2 - The Hacker Crackdown, Bruce Sterling
  4193.  
  4194.  
  4195. /*************************************************************************/
  4196.                         On The Networks
  4197. /*************************************************************************/
  4198. =========================================================================
  4199. (C) 1994 by Atari Corporation, GEnie, and the Atari Roundtables. May
  4200. be reprinted only with this notice intact.  The Atari Roundtables on
  4201. GEnie are *official* information services of Atari Corporation. To sign
  4202. up for GEnie service, call (with modem) 800-638-8369.  Upon connection
  4203. type HHH (RETURN after that). Wait for the U#= prompt.Type XTX99437,GENIE
  4204. and press [RETURN]. The system will prompt you for your information.
  4205. ==========================================================================
  4206.  
  4207.                        Atari ST RoundTable
  4208.                       Real Time  Conference
  4209.  
  4210.                       Monday, Jan. 24, 1994
  4211.  
  4212.  
  4213.  
  4214.                   CD ROM for the Atari Computer!
  4215.                   ==============================
  4216.                                with
  4217.                         CD ROM Developers
  4218.              Greg Kopchak, Roger Burrows, Brian Grier
  4219.  
  4220.                           Special Guests
  4221.               David Troy, Damien Jones, S.Fardishgh
  4222.  
  4223.                          Host - Lou Rocha
  4224.  
  4225. <[HoST] ST.LOU> Our guests tonight are Greg Kopchak from It's All
  4226. Relative, David Troy from Toad Computers and Roger Burrows, from
  4227. Anodyne Software.
  4228.  
  4229. Our topic is CD ROM for the Atari and we look forward to hearing
  4230. about the latest developments for our platform. The crowd is small
  4231. right now, so if you have a question or comment please /raise your
  4232. hand.
  4233.  
  4234. I am going to ask our main guest, Greg Kopchak, to upload his
  4235. opening comments. GA Greg.
  4236.  
  4237. <GREG> I'd like to post a few things about Photo Show Pro supports
  4238. Kodak Photo CD on the Atari Falcon 030 and allows the user to
  4239. create scripted slide shows and presentations that make maximum
  4240. use of the built in hardware capabilities of the Falcon 030. Photo
  4241. Show Pro has twenty different fades and disolves when creating
  4242. scripts, allows overlay of text on graphics in your choice of
  4243. system colors, screen fades to black or white, inverse colors, and
  4244. image overlays. Photo Show scripts can be created directly from CD
  4245. using the Kodak Photo CD PCD format or created from disk using the
  4246. FTC 16 bit true color format. All effects are super smooth, even
  4247. when running under MultiTOS.
  4248.  
  4249. Digitized sound files in AVR format can scripted along with
  4250. graphics allowing the user to add commentary, sound effects, or
  4251. background music to their presentations.
  4252.  
  4253. For creating titles, Photo Show Pro displays 24-bit BMP files in
  4254. the Microsoft Windows bitmap format.
  4255.  
  4256. Photo Show Pro can be used with VGA, RGB (Atari monitor), and
  4257. standard broadcast televisions. Slide shows and presentations can
  4258. be recorded to VCR using either RF output or the higher quality
  4259. composite output of the Falcon 030.
  4260.  
  4261. Full 16 bit color with correct aspect ratios are displayed on all
  4262. monitor types except monochrome.
  4263.  
  4264. Photo Show Pro will auto show your Kodak Photo CD graphics using
  4265. 16 different effects directly from your Photo CD discs. A special
  4266. Corel mode allows the same auto shows using the Corel series of
  4267. Photo CD images. Corel is planning to release over 100 theme discs
  4268. of Kodak Photo CD graphics with each disc containing 100 images.
  4269. Conversions can be made to 16-bit FTC, 24-bit TIF, 24-bit EPS, and
  4270. 24-bit RAW formats from Kodak Photo CD's PCD format. Image
  4271. conversions can be done in pixel resolutions of 192 by 128 up to
  4272. 3072 by 2048.
  4273.  
  4274. <[HoST] ST.LOU> Thanks Greg. I didn't realize you were an old pro
  4275. at RTC uploads :-) Our next comment comes from Brian Grier. Go
  4276. Ahead, Brian.
  4277.  
  4278. <[Brian] B.GRIER> I really would like to make an announcement. I
  4279. have created a program to allow Atari users to access Compton's
  4280. New Media CD-Roms on Atari computers.
  4281.  
  4282. <[HoST] ST.LOU> Brian, can you tell us a little more about it?
  4283.  
  4284. <[Brian] B.GRIER> Please excuse my typing as this is my first RTC.
  4285.  
  4286. <[HoST] ST.LOU> You're doing EXCELLENT.
  4287.  
  4288. <[Brian] B.GRIER> My program accesses Compton's M.O.S.T discs. It
  4289. currently works with the "Book of Home Remedies", "The King James
  4290. Bible", and the "CIA/KGB information book" I would like to say it
  4291. works with more but I have to buy more CD-Roms to be sure.
  4292.  
  4293. Everything works pretty much as the windows(tm) version. You are
  4294. allowed to have as many open sections as you want, and can display
  4295. pictures, and play audio (STe/TT only right now).
  4296.  
  4297. <[HoST] ST.LOU> Sounds great! What CD ROM are you using and what
  4298. is M.O.S.T.? Does your PRG work with MultiTOS, Brian?
  4299.  
  4300. <[Brian] B.GRIER> That's about it. Except if this goes well I'll
  4301. be making a verson for Compton's Multi-Media encyclopedia.
  4302. M.O.S.T. is Multiple Operating System Technology.
  4303.  
  4304. <[HoST] ST.LOU> What CD are you using, Brian? Does your program
  4305. run under MulitTOS?
  4306.  
  4307. <[Brian] B.GRIER> If you mean drive I have a Chinon 431 (from
  4308. TOAD) and an NEC-84
  4309.  
  4310. <[HoST] ST.LOU> Let's move on to Lorne White.
  4311.  
  4312. <[Lorne] L.WHITE17> Thanks, As a would be developer, I would like
  4313. to know more about getting into a CD ROM type application
  4314. development..
  4315.  
  4316. <[HoST] ST.LOU> Greg, would you like to answer Lorne's question?
  4317.  
  4318. <GREG> Once you get your application running on the very big hard
  4319. disk you can approach one of the many CD publishers about getting
  4320. a master done. The big problem has been the minimums required by
  4321. most publishers and pressers.
  4322.  
  4323. <[HoST] ST.LOU> Lorne, any followup?
  4324.  
  4325. <[Lorne] L.WHITE17> Yes please. I've always presumed that the
  4326. shell program that drives the application could be tricky since
  4327. it's very much set up for the other platform. True or False.
  4328.  
  4329. <GREG> False. A CD looks like a VERY BIG hard disc to the OS
  4330.  
  4331. <[HoST] ST.LOU> Anything else, Lorne?
  4332.  
  4333. <[Lorne] L.WHITE17> But doesn't the interface have to be
  4334. consistent across platforms ??
  4335.  
  4336. <GREG> The CD can be a Mac CD, A PC CD. An Atari CD or cross-
  4337. platform. You decide what you want it to run on. The media itself
  4338. is very much cross-platform.
  4339.  
  4340. <[HoST] ST.LOU> Greg, you mentioned minimums for pressing CD's but
  4341. I thought PHOTO CD was economically feasible? How does one get
  4342. PHOTO CD's done?
  4343.  
  4344. <GREG> All you do is take a roll of film to Walmart and tell them
  4345. PCD please. Getting multiple copies pressed is not the same as
  4346. making a one-of disc.
  4347.  
  4348. <JOHN.KING.T> I am about to get a CDROM drive for my TT. Is a
  4349. Double Speed unit fast "enuf" or should I consider a triple or
  4350. quad unit? This unit would be SCSI and might be a dual use unit
  4351. with my PC laptop for tax data research. GA
  4352.  
  4353. <[HoST] ST.LOU> Maybe David Troy would like to handle that one.
  4354.  
  4355. <[Dave Troy] TOAD-SERV.> Sure... The double speed drives are
  4356. pretty quick. Triple speed is even better though [450K/sec vs.
  4357. 300K/sec & 150 with single speed.
  4358.  
  4359. <JOHN.KING.T> Price is not a problem. Are the faster units worth
  4360. the extra price?
  4361.  
  4362. <[Dave Troy] TOAD-SERV.> I would say that with the new technology
  4363. coming out, and if you don't mind spending the extra bucks
  4364. (approximately $100-$150), it might be a wise choice. Things are
  4365. always going to need to be faster, wider, lower, longer, etc. :)
  4366. And we sell double and triple speed NEC units at decent prices.
  4367.  
  4368. <JOHN.KING.T> That is cheap for the extra speed. Thanks for the
  4369. suggestions.
  4370.  
  4371. <[HoST] ST.LOU> Roger Burrows would like to add to Dave's
  4372. answer...
  4373.  
  4374. <[Roger] R.BURROWS1> Yes ... I agree with Dave. If you can afford
  4375. it, go for the fastest. But I think the speed difference from
  4376. single to double is enough for most of us poorer folks.
  4377.  
  4378. <[HoST] ST.LOU> Roger, I know you are working on ExtenDOS. What speed units
  4379. have you tested ?
  4380.  
  4381. <[Roger] R.BURROWS1> So far, single and double. Tintin is looking at a triplespeed, so I may get to test on
  4382. that soon .
  4383.  
  4384. <[Dave Troy] TOAD-SERV.> I think that that is very fair... Double
  4385. speed is pretty nice, but triple is maybe a little more future
  4386. oriented. I am tickled pink with the double speed drive myself. :)
  4387.  
  4388. I am used to the old 150K/sec 380ms crawlers. 200ms with 300K/sec
  4389. seems like a speed demon. <ga>
  4390.  
  4391. <[HoST] ST.LOU> I'll take that crawler off your hands :-)
  4392.  
  4393. <[Dave Troy] TOAD-SERV.> I got plenty of 'em... :)
  4394.  
  4395. <[HoST] ST.LOU> Next we have Sean Dougherty from Two Worlds
  4396. Publishing.
  4397.  
  4398. <[Sean@TWP] P-DIRECT> Right now, the uses of CD-ROM seem fairly
  4399. limited to the home user. Could one of you go over a few of the
  4400. more exciting practical things one can do with CD-ROM, just to
  4401. help convince people they need one? (this isn't prompted, I
  4402. swear!) GA
  4403.  
  4404. <GREG> DTP is a compelling reason. I have a CD with a couple
  4405. hundred meg of clip art. Corel has several thousand images
  4406. available now with more planned. The new Gemini CD has fonts ready
  4407. to go. Animations like FLI are fun to view. Photo CD brings your
  4408. images home and makes them personal.
  4409.  
  4410. <[Dave Troy] TOAD-SERV.> The secret to CD-ROM on the Atari is
  4411. finding applications which are not platform specific, as Greg
  4412. said. CD-ROM is very much a data storage medium and just as your
  4413. hard drive holds data files that your favorite programs can use,
  4414. so can a CD ROM. The only catch is that you don't get to write to
  4415. the CD ROM yourself, the way you can with a hard drive. So you are
  4416. challenged to find CD TOAD-SERV. ROM's that already have data that
  4417. your programme actually use. I think that Photo CD is a very
  4418. exciting technology for CD-ROM on the Atari, as well as the
  4419. potential for clip art, fonts, sound files (.WAV on Falcon!!), the
  4420. new Atari GEMINI CD ROM.
  4421.  
  4422. There are also lots of CD ROMS available with graphic images in
  4423. GIF format, soon JPG. format will become prevalent (are the
  4424. corel's JPG?) and the encyclopedia for the Compton's stuff from
  4425. Brian. Pretty exciting stuff. [ga]
  4426.  
  4427. <[HoST] ST.LOU> Mike Fulton is here and I know there was supposed
  4428. to be a CD DEV pack. Mike, can you comment?
  4429.  
  4430. <MIKE-FULTON> Well, as you said, I have been working on an Atari
  4431. Developer CDROM for several months now. Unfortunately, the
  4432. collecting of software and other files (shareware and PD stuff) is
  4433. the least of the whole project. One of the big bottlenecks has
  4434. been the editing and rewriting of Atari's developer documentation.
  4435. I've been working on putting it all (or as much as possible) into
  4436. an online-readable format. And this involves updating old
  4437. documentation, and a _lot_ of editing. It's taken a lot longer
  4438. than I originally anticipated. It's not hard, per se, just time
  4439. consuming. But it's coming along nicely and I do hope to have it
  4440. done soon. In a lot of ways, it would be a lot easier to write a
  4441. program to display and otherwise deal with an existing database
  4442. (like some of the online encyclopedias and so forth).
  4443.  
  4444. <[HoST] ST.LOU> From what I saw at Las Vegas Comdex, these DEV
  4445. CD's have arrived in force. Good luck getting finished, Mike. Rob
  4446. Sattler is next...
  4447.  
  4448. <[Rob] R.SATTLER> Hello everyone, this is some great stuff! Q- Can
  4449. you get by without MultiTOS?
  4450.  
  4451. <[HoST] ST.LOU> Rob, I will let Roger Burrows answer that one.
  4452.  
  4453. <[Roger] R.BURROWS1> Yes, you can ... that's what ExtenDOS does.
  4454. It's designed for those people who don't need all the function of
  4455. MultiTOS and/or have maybe a small hardware config. It's pretty
  4456. straight forward to use, and works with pretty much any drive.
  4457.  
  4458. <[HoST] ST.LOU> What about Falcon and PHOTO CD support, Roger?
  4459.  
  4460. <[Roger] R.BURROWS1> Falcon support is on its way, I hope by the
  4461. weekend. Photo CD is in the plans ... I only just got a pCD drive
  4462. to test with.
  4463.  
  4464. <[HoST] ST.LOU> Mike Allen is next.
  4465.  
  4466. <MIKE-ALLEN> First let me say that the developments from Roger and
  4467. Brian are exciting! These apps for the Falcon are all very nice,
  4468. but how about us non-Falcon types? What I'd like to know is can I
  4469. use a CD on my MSTe with an older ICD HA (pre AdSCSI). Would I
  4470. only be able to read files, etc or is there some way I can look at
  4471. photo-cds too?
  4472.  
  4473. <GREG> Not Yet Mike. The Photo Cd process looks best with lots of
  4474. color. We have samples of Photo CD to SPC up on GEnie. They were
  4475. done with DMJ-GIF You can convert a PCD to other formats. You see
  4476. it best in true color. Studio Photo will run on an ST. All you
  4477. need is for Roger to make a PCD driver for you.
  4478.  
  4479. <[HoST] ST.LOU> Roger, is there anyway to use ExtenDOS with the
  4480. ICD HA setup? Dave, do you have any configs for Mike?
  4481.  
  4482. <[Dave Troy] TOAD-SERV.> You can attach a CD ROM drive to an ICD
  4483. host but I don't know about the pre-AdSCSI models. ICD's Link &
  4484. Pro utilities comes with a DMA 0-7 CD ROM driver for Metados.
  4485.  
  4486. <[Roger] R.BURROWS1> ExtenDOS on the ST needs an ICD AdSCSI or
  4487. equivalent.
  4488.  
  4489. <[Rob] R.SATTLER> Is Extendos available now? How much?
  4490.  
  4491. <[Roger] R.BURROWS1> Yes, available now, currently direct mail
  4492. from me, hopefully soon at your friendly Atari mail-order dealer.
  4493. Re price: $19.95 including everything (US$ in US, Cdn$ in Canada)
  4494. Ontario residents, add sales tax (sorry).
  4495.  
  4496. <[Dave Troy] TOAD-SERV.> Toad Computers will be talking to Roger
  4497. about ExtenDOS. :)
  4498.  
  4499. <[Tintin] C.LABELLE> I noticed TOAD advertises NEC 3xp. Have they
  4500. been tested with Falcon and XFS?
  4501.  
  4502. <[Dave Troy] TOAD-SERV.> Yes, but right now MultiSession support
  4503. won't work with the NEC drives. They DO support single session
  4504. Photo CD's with the XFS driver. The problem is not, of course, in
  4505. the drive. They are fully multisession. The XFS driver, however,
  4506. doesn't understand NEC multisession right now. The only drive that
  4507. the XFS driver works with in multisession is the Toshiba 3401,
  4508. which is a double speed drive and can be expensive. I know that
  4509. Greg @ It's all relative is working on modifying the driver to
  4510. support multisession on a wider variety of drives, especially the
  4511. NEC. So all this means is that you would be restricted, right now,
  4512. to Photo CD's with only one directory (development cycle) right
  4513. now, but this is changing quickly. And of course all other CD's
  4514. work fine.
  4515.  
  4516. <[Tintin] C.LABELLE> OK so this denies earlier reports that the
  4517. 3xp were not working with Falcon.
  4518.  
  4519. <[Dave Troy] TOAD-SERV.> I have not had problems, but it does seem
  4520. to be very driver related. There are many drivers out there, even
  4521. among XFS varieties (2 or 3 versions).
  4522.  
  4523. <[HoST] ST.LOU> Next we have Charles Smeton of NewSTar Technology
  4524.  
  4525. <C.S.SMETON> I wanted to ask about ExtendDOS and the Falcon, but
  4526. this was already answered. So I will ask a bit about how ExtendDOS
  4527. works, i.e. how is it installed, how does it differ from MetaDOS,
  4528. etc.
  4529.  
  4530. <[Roger] R.BURROWS1> OK, well the basic idea is exactly the same
  4531. as MetaDOS, that is, there's a supervisor (ExtenDOS) that traps
  4532. the necessary system calls then there are drivers that deal with
  4533. hardware and file systems. I have another driver written right
  4534. now, and am working on still others. If they work out, they may be
  4535. of more limited interest than the CD-ROM.
  4536.  
  4537. <C.S.SMETON> Do you need any Falcon beta testers? ;-)
  4538.  
  4539. <[Roger] R.BURROWS1> It depends :-) probably not, I have a
  4540. volunteer in the Ottawa area, and believe me it's tough debugging
  4541. hardware-level code over the phone!
  4542.  
  4543. <[HoST] ST.LOU> Thanks Roger and Charles. Our next question comes
  4544. from Mario Georgiou at DMC Publishing.
  4545.  
  4546. <[mario] DMCPUBLISH> Hello all, I would like to know what formats
  4547. are currently supported and whether you plan to support CDI and
  4548. the new Pro PCD.
  4549.  
  4550. <GREG> We will have Portfolio format this summer. I just got a
  4551. mailing from Kodak last week on the update. The PRO format is
  4552. tough. Files are 64 meg uncompressed. This is what you call BIG.
  4553.  
  4554. <[HoST] ST.LOU> Whew!
  4555.  
  4556. <GREG> The Portfolio format will have many discs published for it.
  4557.  
  4558. <[Dave Troy] TOAD-SERV.> That's where you need more memory for the
  4559. falcon... 14MB gets tight.
  4560.  
  4561. <[mario] DMCPUBLISH> Big but needed, I look forward to replacing
  4562. my MetaDOS ... Good luck
  4563.  
  4564. <[Nima Montase] S.FARSHIDGH> Well, it's been about 30 mins now,
  4565. but I was just going to add that I was just going to add that you
  4566. can also use Audio CDs on your system, as another reason to buy a
  4567. CDROM!
  4568.  
  4569. <[Dave Troy] TOAD-SERV.> Oh yeah - you can.. Good point. Lots of
  4570. PD players are available.
  4571.  
  4572. <[HoST] ST.LOU> I would like to hear more specs, Nima.
  4573.  
  4574. <[Nima Montase] S.FARSHIDGH> Well, right now you can play AUDIO
  4575. CDs on all ATARI systems (did the Falcon one)
  4576.  
  4577. <[HoST] ST.LOU> What is your software?
  4578.  
  4579. ** <[Nima Montase] S.FARSHIDGH> ** disconnected
  4580.  
  4581. <GREG> Nima is the author of CD_AUD20 available as shareware here
  4582. on GEnie. He is working on a Falcon CD audio player too but work
  4583. is proceeding slowly as he doesn't have a test system. Watch for
  4584. something in the next couple of weeks though. And if you are using
  4585. his CD player, send in the registration.
  4586.  
  4587. <[HoST] ST.LOU> Nima is back. Do you have more to comment, Nima?
  4588.  
  4589. <S.FARSHIDGH> As I was saying, (Greg, did the Falcon AUD CD work
  4590. fine?)
  4591.  
  4592. <GREG> NOT yet
  4593.  
  4594. <S.FARSHIDGH> Anyways, the Audio CD supports all ATARI ST/TTs now,
  4595. it has play, stop, pause, track with the option of playing
  4596. random/programmable tracks, fast forward and rewind, eject, and
  4597. also the capability of taking external data files (which is fully
  4598. configurable) for any non SCSI II compliant CD ROMs. It should
  4599. work fine on any CDROM that supports the SCSI II commands, I have
  4600. also include a almost fully functional data file for NEC drives
  4601. (older ones, the SCSI II not compliant ones), I am just waiting
  4602. for some users' feedback!
  4603.  
  4604. <[Dave Troy] TOAD-SERV.> Does the CD audio spec allow for playing
  4605. digital data backwards, or do you always have to play forward from
  4606. a fixed point on the disk?
  4607.  
  4608. <S.FARSHIDGH> Yes, you can go back and forth either by passing
  4609. along which track # you want or using the up and down option which
  4610. moves the song up or down!
  4611.  
  4612. <[Dr. Bob] W.PARKS3> First, I'd like to thank Charles for so
  4613. accurately asking _MY_ question. <grin> Where can one find out
  4614. more about ExtenDOS? I don't dislike MultiTos but I'd rather not
  4615. have to add another level between the OS and a CD? Does it support
  4616. a variety of CD-ROMS? etc.
  4617.  
  4618. <[Roger] R.BURROWS1> I posted a notice in one of the conferences
  4619. recently. Yes, ExtenDOS should support any SCSI CD-ROM drive. It's
  4620. available mail-order direct from me, or hopefully soon from TOAD.
  4621.  
  4622. <[Dr. Bob] W.PARKS3> Ok. The price is very nice - that doesn't
  4623. bother me. What concerns me is when I start scratching my head
  4624. wondering why the CDROM won't work or what. Does it have some
  4625. technical documentation?
  4626.  
  4627. <[Roger] R.BURROWS1> It comes with a manual, and I think it covers
  4628. everything you need and I'm available by phone or via GEnie if
  4629. that doesn't do it.
  4630.  
  4631. <[Dr. Bob] W.PARKS3> Ok, thanks- sounds good! <we now return you
  4632. to...>
  4633.  
  4634. <[HoST] ST.LOU> Thanks Roger and Doc. Rob Sattler has our last
  4635. question.
  4636.  
  4637. <[Rob] R.SATTLER> I'm a Falcon user and own a Toshiba 3401b, but I
  4638. can't seem to get it to handle a driver porperly. I understand
  4639. Atari has a driver, how can I get it? Also, what would be better
  4640. to use? AHDI, or ICD-Pro bootware?
  4641.  
  4642. <[HoST] ST.LOU> Who wants it?
  4643.  
  4644. <[HoST] ST.LOU> Everyone does :-)  OK, one at a time. Mike
  4645. Fulton...
  4646.  
  4647. <MIKE-FULTON> The CDROM driver is independent of the hard disk
  4648. software. Therefore, it doesn't really matter if you use Atari's
  4649. hard disk driver or ICD's. Theoretically, a CDROM driver could
  4650. link in with a hard disk driver, but that's not the way that the
  4651. MetaDOS or MiNT XFS drivers work.
  4652.  
  4653. <[HoST] ST.LOU> GREG is next, then Roger then Brian.
  4654.  
  4655. <[Rob] R.SATTLER> OK, but you do need either extendos or multitos?
  4656.  
  4657. <GREG> The version of the XFS driver we ship will all our Photo CD
  4658. products is the most current XFS for MultiTOS and works quite well
  4659. with all our suggested drives.
  4660.  
  4661. <[Roger] R.BURROWS1> Basically, you need ExtenDOS or MultiTOS ...
  4662. At the moment, ExtenDOS doesn't handle Falcon ... But that should
  4663. be fixed in a week.
  4664.  
  4665. <[HoST] ST.LOU> Brian, anything to add?
  4666.  
  4667. <[Brian] B.GRIER> According to howard at ICD they are having problems with
  4668. Atari's CD-ROM XFS driver and their software on the Falcon.
  4669.  
  4670. If you need a CD-Rom driver that works with ALL Atari computers,
  4671. but does not yet support Photo-CD you'll probably need ExtenDOS or
  4672. my CD ROM XFS driver that's works on all computers (I wrote it
  4673. because last year I couldn't find a driver that worked on the SCSI
  4674. port of my TT :( <ga>
  4675.  
  4676. <[Dave Troy] TOAD-SERV.> We have not had a problem using ICD Pro &
  4677. the Atari XFS?
  4678.  
  4679. <GREG> ICD is shipping an older version
  4680.  
  4681. <[Dave Troy] TOAD-SERV.> It seems to work fine.
  4682.  
  4683. <[HoST] ST.LOU> Dave, thank you for coming tonight. Would you like
  4684. to make any closing comments?
  4685.  
  4686. <[Dave Troy] TOAD-SERV.> Just to thank everyone for their interest
  4687. in CD ROM. It's a new and exciting technology, and I hope that
  4688. everyone gets involved with it so we can build the critical mass
  4689. necessary to get some apps together. The Gemini CD ROM is selling
  4690. great! I think that's a good sign. Thanks again. <ga>
  4691.  
  4692. <[HoST] ST.LOU> You're welcome. Greg Kopchak, thank you for
  4693. organizing the group and getting everyone here tonight. Any
  4694. closing comments?
  4695.  
  4696. <GREG> Thanks goes to Rene Guimont and Rene Tremblay for providing
  4697. the Gemini CD. As the conference was on tonight I got an Airborne
  4698. package from our German publisher, totronic. Watch for an
  4699. announcement shortly.
  4700.  
  4701. <[HoST] ST.LOU> Sounds exciting.
  4702.  
  4703. <GREG> I would also like to post some info on the Gemini CD.
  4704.  
  4705. Walnut Creek CDROM announces the release of the GEMini CDROM for
  4706. Atari Computers. The CDROM contains 616 MB, and 2872 public domain
  4707. programs, shareware programs and commercial demos for the Atari
  4708. ST, TT, and Falcon Computers plus a section for the Portfolio
  4709. palmtop computer. It also contains text and graphics for the Lynx
  4710. and Jaguar video game systems.
  4711.  
  4712. The GEMini CDROM is set up in a logical tree structure which
  4713. simpifies seaching for and running the programs. You can find
  4714. files in areas such as accessories, archives, astronomy, database,
  4715. fonts, games, GNU, programming, screeen savers, virus , text
  4716. editors, utilities, etc.
  4717.  
  4718. It includes 50 megabytes of games and entertainment software. For
  4719. the desktop publisher, it contains 15 megabytes of fonts. Many
  4720. programs include source code. All programs may be run directly
  4721. from the CDROM so there is no need to decompress onto the hard
  4722. drive in order to use the files. Each directory contains an index
  4723. and a list of files to make it easier for a user to locate a file.
  4724.  
  4725. <[HoST] ST.LOU> Greg, thanks again to you and your guests. Mike
  4726. Fulton, Roger Burrows, Brian Grier, S.Fardishgh, Dave Troy, Damien
  4727. Jones. We really appreciate the time and are keenly interested in
  4728. this new era for our Atari Computers. Good night.
  4729.  
  4730.                   Programming Real Time Conference
  4731.  
  4732.                            January 6, 1994
  4733.  
  4734.                           Host - Mike Allen
  4735.  
  4736.  
  4737. <[Host] MIKE-ALLEN> Ok guys, capture on! The homework idea sure stirred
  4738. up some good discussion in cat3/top11.  I was glad to see it.  There were
  4739. 4 homework submittals I saw, Keith, Carl, Erin and myself.  All seemed to
  4740. take a different approach to the problem.  Carl was quite elegant in C.
  4741. It was a TOS program.  Carl - I couldn't get it to run under MultiTos -
  4742. Kept getting a "out of stack space" message.  Any comments Carl? ga.
  4743.  
  4744. <CBARRON>  They were interesting, even some had some 'bugs' in some
  4745. others.  Don't know why it was straight gemdos conws() IO and nothing
  4746. wierd. Might have been those so called documented settings.  ga
  4747.  
  4748. <[Host] MIKE-ALLEN> It ran fine with Geneva and a normal MSTe.
  4749.  
  4750. <CBARRON> Oh well, someday I will figure out how to use my MTOS, let
  4751. alone program it. ga
  4752.  
  4753. <[Host] MIKE-ALLEN> Keith wrote a VERY small assy prog that did
  4754. everything in a dialog box.  It ran fine with normal system, Geneva and
  4755. MTOS.  Comments Keith? ga
  4756.  
  4757. <[Keith] K.GERDES> Not that I can think of.  The dialog box was actually
  4758. a simple form alert.  I didn't want to go overboard on the graphic out...
  4759.  ;) ga
  4760.  
  4761. <[Host] MIKE-ALLEN> Really small 800 and some odd bytes.
  4762.  
  4763. <[Keith] K.GERDES> Actually it was 428, but who's counting.  GA
  4764.  
  4765. <[Host] MIKE-ALLEN> Hmmm - I thought it was larger - oh well, I was
  4766. impressed! Erin Monaco wrote one that ran in a window.  He used C.  It
  4767. too ran with a normal system, Geneva and MTOS.  I wrote mine in assembly
  4768. as a TOS program.  Not as fancy as the "real" programmers, but it worked
  4769. - again, normal system, Geneva and MTOS.  Lets see if anyone else
  4770. downloaded the prgs and has any comments.  Phil, did you get a chance to
  4771. look at the prgs? ga
  4772.  
  4773. <[Phil] P.HANZE> I downloaded yours, but haven't uncompressed it yet.
  4774.  
  4775. <[JAB] J.BATES15> This should start something.  Being new to programming
  4776. the ST line, I need some reccommendations of languages and such.
  4777.  
  4778. <[Host] MIKE-ALLEN> Ok - phil, don't laugh too hard.
  4779.  
  4780. <CBARRON>  On languages, German is preferred these days, Hardly anyone
  4781. comments in english any more. <g>
  4782.  
  4783. <[Host] MIKE-ALLEN> JAB - <Jeff isn't it>  I think most of us agree on
  4784. either C or assembly.  Carl (CBARRON) will extol the virtues of FLEX,
  4785. given an chance.  Bud - did you get a chance to look at the prgs? ga
  4786.  
  4787. <[JAB] J.BATES15> Well, John actually
  4788.  
  4789. <[Host] MIKE-ALLEN> <sorry - there was another J.BATES in the other night
  4790. - I guess the number was different.>
  4791.  
  4792. <[Bud] B.CONNOLLY1> No I didn't Mike. I wanted to get started on mine
  4793. before I looked at the others efforts, but I ended taking a vacation from
  4794. programming over Christmas.  ga
  4795.  
  4796. <[Host] MIKE-ALLEN> Ok bud, I guess that's allowable. <g>  J2 - did you
  4797. look at them? ga
  4798.  
  4799. <[John too] J.G.H.> No I didn't get a chance to look at any of them ;(
  4800. been busy here of late ;> ga
  4801.  
  4802. <[Host] MIKE-ALLEN> Ok - Hi Erin. Discussing the homework.  You have any
  4803. comments on your prg or any of the others that were uploaded? ga
  4804.  
  4805. <E.MONACO> Haven't really had time to update mine or check out the
  4806. others...  been playing with geneva <sheepish grin>
  4807.  
  4808. <[Host] MIKE-ALLEN> Understand.  I've been playing with 003 too.  Carl -
  4809. any comments on any of the other prgs that were uploaded?  ga
  4810.  
  4811. <CBARRON>   Erics was nice, almost forces me to upgrade my compiler.  All
  4812. looked ok, after all this was not to be the program of the century, they
  4813. work, don't look too much like gwbasic spagetti either.  ga
  4814.  
  4815. <[Host] MIKE-ALLEN> hehe - I dunno, mine was spaghettish.  Keith - did
  4816. you have a chance to look at the other uploads?  Any thoughts if so? ga
  4817. <Keith's been pretty busy in the ST Aladdin RT!>
  4818.  
  4819. <[Keith] K.GERDES> No...  Sorry.  ga
  4820.  
  4821. <[JAB] J.BATES15> So C and assembler.  What will access the DSP in the
  4822. Falcon?
  4823.  
  4824. <[Host] MIKE-ALLEN> Hmmmm - well I guess not too many folks had a chance
  4825. to review other folks work.  If any of you get a chance, you might take a
  4826. look.  John - hang on a couple 'til we get to general discussion please.
  4827.  
  4828. <[JAB] J.BATES15> No problemo
  4829.  
  4830. <[Host] MIKE-ALLEN> I noticed a couple of things.  Seems like terminolgy
  4831. bit some of us.  Especially when it came to how version numbers were
  4832. stored.  I like to refer to the storage of most of the Atari version
  4833. numbers as "Packed BCD."  Does that need explanation?
  4834.  
  4835. <[Bud] B.CONNOLLY1> Go for it Mike, so we'll all be on the same page.
  4836.  
  4837. <[Host] MIKE-ALLEN> e.g. AES version 1.9 is stored a $0190.
  4838.  
  4839. <CBARRON>  all I did was report a straight hex conversion.  Gemdos
  4840. version is small endian rest the normal big endian.
  4841.  
  4842. <[Host] MIKE-ALLEN> Each byte is actually 2 BCD (Binary Coded Decimal)
  4843. digits.  As carl noted, except for GEMDOS, the versions are Major Rev in
  4844. the first byte and the minor rev in the low byte.  make that 2nd byte to
  4845. avoid confusion! <hehe>.  GEMDOS is backwards, like Intel uses or, as
  4846. Scott refers to it, "Little endian!"
  4847.  
  4848. <[Bud] B.CONNOLLY1> Carl or Mike, can you explain the 'ENDIANs'?
  4849.  
  4850. <[Host] MIKE-ALLEN> Now the first place I ran into confusion was with the
  4851. GEMDOS version.
  4852.  
  4853. <CBARRON>  The fun will come from the cookies, some are 32 bit #'s some
  4854. are only 16 bit # 's and some are really only one byte #'s.  That becomes
  4855. more fun, I cheated, I reported all as longs....  Big endian means the
  4856. high bytes before for the low bytes  the number twenty would be [as
  4857. normal] 20 in a high endian, or 02 in low endian.
  4858.  
  4859. <[Host] MIKE-ALLEN> Bud - Big Endian is like the 68k uses - if you load a
  4860. word into a register the Most significant byte is in bits 15-8 and the
  4861. least signigicant byte is in bits 7-0.  Little endian does it the other
  4862. way around.
  4863.  
  4864. <[Bud] B.CONNOLLY1> thanx guys.
  4865.  
  4866. <[Host] MIKE-ALLEN> Little endian words are also referred to as
  4867. byte-reversed.
  4868.  
  4869. <CBARRON> 6502 was little endian too
  4870.  
  4871. <[Host] MIKE-ALLEN> True.
  4872.  
  4873. <[Bud] B.CONNOLLY1> So Intel format is Little Endian.
  4874.  
  4875. <E.MONACO> I also reported cookie values as longs (hex).
  4876.  
  4877. <[Host] MIKE-ALLEN> My first confusion was with the GEMDOS version.
  4878. <correct, Bud> I understood that it was byte reversed, but I had mixed
  4879. signals at to whether it was in packed BCD or binary.  Most of the
  4880. European docs (devpac, etc.) reference binary values where as the
  4881. Compendium says they are Packed BCD.  e.g. GEMDOS for TOS 2.05 is 0.19 in
  4882. the Compendium and 0.25 in the DevPac docs.
  4883.  
  4884. <E.MONACO> So which should we use?
  4885.  
  4886. <[Host] MIKE-ALLEN> I was leaning towards the European convention since
  4887. the disk based version of TOS reports a $0D00.
  4888.  
  4889. <[Bud] B.CONNOLLY1> I like the Compendium method. $1900 is 0.19 is a lot
  4890. easier to keep straight.
  4891.  
  4892. <[Host] MIKE-ALLEN> However, Scott swears that Atari says they are now
  4893. using packed BCD.  This seems to be verified since the GEMDOS version for
  4894. TOS 2.06 is $2000 which is one minor rev up from $1900 that was used for
  4895. TOS 2.05.
  4896.  
  4897. <CBARRON> $0d is not a bcd decimal <grin> packed or not.
  4898.  
  4899. <[Host] MIKE-ALLEN> Carl - you got that right!
  4900.  
  4901. <E.MONACO> I would lean towards the consistant bcd myself.
  4902.  
  4903. <[Host] MIKE-ALLEN> I think we should stick with the Compendium version -
  4904. Packed BCD, byte reversed.
  4905.  
  4906. <E.MONACO> good, I don't have to change it... again :)
  4907.  
  4908. <CBARRON> I THINK atari means they are hex but read as decimal. Seems to
  4909. be more consistant than the 'normal' definitions.  ga
  4910.  
  4911. <[Host] MIKE-ALLEN> Now where I really got confused was in the cookie
  4912. Jar.  <Erin - I changed mine to Compendium the same time you changed
  4913. yours to binary.  hehe> Carl - I think you are right, which is why I like
  4914. to refer to them as packed BCD.  Each 4 bits of a byte defines one
  4915. decimal number.
  4916.  
  4917. <E.MONACO> well I'll be glad to get it all straight
  4918.  
  4919. <[Host] MIKE-ALLEN> Now, the cookie jar is wild! For instance it appears
  4920. the MTOS reports a version in packed BCD, whereas the _CPU cookie returns
  4921. a binary number for the CPU type.  Confused the hell out of me! The _CPU
  4922. cookie returns a $0000001E for a 68030!
  4923.  
  4924. <E.MONACO> It is if you wanted to define the meanings of various cookie
  4925. values... I just report them like carl.
  4926.  
  4927. <[Host] MIKE-ALLEN> Well, I was kinda of interested in what the cookies
  4928. meant.  <g> Any further discussion before we look for a new assignment?
  4929. ga <he says, ducking>
  4930.  
  4931. <E.MONACO> I thought about it... it could be done using the compendium,
  4932. then for all none standard cookies... probably be easier to just report
  4933. the long value as is.  er none=non
  4934.  
  4935. <[Host] MIKE-ALLEN> I was decoding and reporting the Geneva, MTOS and
  4936. GDOS cookies in my prg.
  4937.  
  4938. <CBARRON>  There is no consistancy on what the parameter is. Plain and
  4939. simple it is cookie specific.  To use a cookie value, you need to know
  4940. what it is or what it points to.  There is a cookie standard, all cookies
  4941. are standard. Some are ATARI's.  ga
  4942.  
  4943. <E.MONACO> I have a suggestion for a new assignment, how about a simple
  4944. gem windowed editor...
  4945.  
  4946. <[Host] MIKE-ALLEN> I have uploaded the Atari defined cookies as per the
  4947. compendium to lib 19 for those who don't have the compendium.  I would
  4948. encourage those who have insight into other cookies to upload the info to
  4949. lib 19.  Erin - Gee, I haven't figured out how to open a window yet! <g>
  4950.  
  4951. <E.MONACO> yes, when dealing with cookies you HAVE to know what the
  4952. values mean.  good time to learn mike! <g>
  4953.  
  4954. <CBARRON>   gee you got some ideas<grin>   I still am waiting for some
  4955. cookie info on some graphics cards.   w_handle=
  4956. wind_create(0,20,20,200,100); wind_open(w_handle,20,20,200,200);<g> ga
  4957.  
  4958. <[Host] MIKE-ALLEN> Ok - suggestions for the next homework assignment.
  4959. Remember that the next meeting is a Templemon/Sysmon session with some
  4960. very expert experts.  So any assignment would be due the first meeting in
  4961. Feb.  Suggestions?  Expand on what we have been doing?  Something
  4962. entirely new (like Erin's suggestion)?  Something else?  Forget it?  ga.
  4963.  
  4964. <CBARRON>  good, I got to get to yacc'ing again. >grin< Seriously gem
  4965. text sounds important, but are we 'up to' it?\
  4966.  
  4967. <E.MONACO> experts?! hardly, although I did get it running and sorta know
  4968. how to use it.
  4969.  
  4970. <[Bud] B.CONNOLLY1> Good point Carl, Erin, how 'simple' do you mean?
  4971.  
  4972. <E.MONACO> I think we are up to the challenge, especially collectively...
  4973. and we have the CAT where help is always available.
  4974.  
  4975. <[Host] MIKE-ALLEN> Carl - that is my thought.  Maybe we could work up to
  4976. it in steps?  Like the first step is open a window with certain gadgets
  4977. and put some GDOS text into it?
  4978.  
  4979. <[Bud] B.CONNOLLY1> good suggestion Mike.
  4980.  
  4981. <[Host] MIKE-ALLEN> I know how we could be 'heros!'  Figure out why
  4982. Falcon and FOTI don't work on TOS 2.xx and up and fix them!  <g>
  4983.  
  4984. <E.MONACO> I was thinking a simple one window editor (24 lines) cursor
  4985. movements, insert, delete, bs, that sort of thing.
  4986.  
  4987. <[Host] MIKE-ALLEN> Erin - GDOS?
  4988.  
  4989. <E.MONACO> Nah... at least not at this poind.  er point.  I like the
  4990. steps idea... lets break it down further.
  4991.  
  4992. <[Host] MIKE-ALLEN> So, erin, no scroll bars, no fuller gadget, etc?
  4993.  
  4994. <E.MONACO> Nope, just a window that'll hold 24 lines 40 or 80 cols with
  4995. simple editing.
  4996.  
  4997. <[Bud] B.CONNOLLY1> That might be a little too 'simple' Mike. <g>
  4998.  
  4999. <CBARRON>  GDOs who uses GDOS? Only gdos I use is with AW occasionally...
  5000. First get some user inputted text in the window.  A hero's project, is a
  5001. GEM APPLICATION code generator using gem... <grin>
  5002.  
  5003. <E.MONACO> I suggest we start with just vdi text, skip using GDOS.
  5004.  
  5005. <[Host] MIKE-ALLEN> Erin - so later on we could expand it?  Do you want
  5006. it to be able to load a file or just save it?  Word wrap?  give us a
  5007. definition of the first step.  <Carl - my #1 son wants to play Falcon and
  5008. FOTI on my MSTe! You'd be a hero to him if you could fix them!>
  5009.  
  5010. <E.MONACO> hmmm, first step no load or save, just 24 lines of programmers
  5011. choice of text printed into window where the user could then edit it.
  5012.  
  5013. <[Host] MIKE-ALLEN> It comes up with text?
  5014.  
  5015. <E.MONACO> doesn't have to...  you could let the user enter and edit it,
  5016. but keep it to one windows worth
  5017.  
  5018. <[Host] MIKE-ALLEN> sounds like a good first step.  Lemme see if I have
  5019. it right.  Open a GEM window with space for 24 lines of 40 or 80 column
  5020. text (depending on the rez) and then allow entry and editing using the
  5021. keyboard, cursor keys, bs and delete.  OK?
  5022.  
  5023. <E.MONACO> after all the editing is going to be the tricky part... we
  5024. could always expand the buffer and add load, save, search, replace, etc,
  5025. etc. sounds perfect.
  5026.  
  5027. <[Host] MIKE-ALLEN> Gotta run with Geneva and MTOS too!
  5028.  
  5029. <E.MONACO> of course! :)
  5030.  
  5031. <[Host] MIKE-ALLEN> any objections? <boy am I about to learn things!>
  5032.  
  5033. <E.MONACO> lets start it with a menu too... with just an about item and
  5034. quit.
  5035.  
  5036. <[Host] MIKE-ALLEN> Ok, I have no objection to the menu - makes Geneva's
  5037. life easier.
  5038.  
  5039. <E.MONACO> I think the menu should be in a rsc file, so additions will be
  5040. easier latter on.
  5041.  
  5042. <CBARRON>  Can't guarantee it will run without a stack overflow! Might be
  5043. a compiler problem, but based on past perfomance...  A menu means you are
  5044. going to do a lot of work, the scrolling is a small part of it, if the
  5045. data is stored properly.  go
  5046.  
  5047. <[Host] MIKE-ALLEN> Besides, you can brag a little in the "about" box.
  5048. Yeah I agree with the .rsc, but not as a requirement at this time
  5049.  
  5050. <[Bud] B.CONNOLLY1> You can do that if everyone has a Resource Editor.
  5051.  
  5052. <[Host] MIKE-ALLEN> Looks like I get to learn WERCS too.
  5053.  
  5054. <E.MONACO> the rsc file is just a suggestion on my part, I've found it
  5055. much easier to modify rsc files then to modify embedded rsc's.
  5056.  
  5057. <[Host] MIKE-ALLEN> Lets make the menu optional, but encouraged.  <grin>
  5058.  
  5059. <CBARRON>  If you are going to do gem programming you need one, there is
  5060. at least one in the libs, if you don't have one.  RSC file is a good idea
  5061. at this point, for menus, dialogs at least...
  5062.  
  5063. <[Bud] B.CONNOLLY1> How will you exit the program without a Menu?
  5064.  
  5065. <E.MONACO> ok, but if we plan to add load and save, etc features it
  5066. should be HIGHLY recommended.
  5067.  
  5068. <[Host] MIKE-ALLEN> Bud - why do you always come up with those pesky
  5069. little details?  <g>
  5070.  
  5071. <[Phil] P.HANZE> what about <cntrl>-q?
  5072.  
  5073. <E.MONACO> control-c or have a close box... but then you wouldn't get 24
  5074. lines.
  5075.  
  5076. <[Bud] B.CONNOLLY1> Because, that's what I do at work all day long... <G>
  5077.  
  5078.  
  5079. <[Host] MIKE-ALLEN> You could exit with the close gadget.
  5080.  
  5081. <CBARRON>   Exits without menu things like <alt-q>, <esc>q, etc.... I'd
  5082. stay away from cntrl-C. I like that for kill operation.
  5083.  
  5084. <[Bud] B.CONNOLLY1> Yep, forgot about that.
  5085.  
  5086. <E.MONACO> if you have a close box, you should have a title, and for a
  5087. multitaskers sake, a move bar.
  5088.  
  5089. <[Bud] B.CONNOLLY1> Some more pesky little details Mike!
  5090.  
  5091. <[Host] MIKE-ALLEN> Use the Atari Standard for exiting - ^Q
  5092.  
  5093. <CBARRON>  Ah yes, the infamous     while(handle_input()!=WM_CLOSED); GA
  5094.  
  5095. <[Host] MIKE-ALLEN> Ok, I think we have enough to start on - let's keep
  5096. the discussion going in cat3/top11.  I'm sure things will get refined
  5097. there ok?
  5098.  
  5099. <[Bud] B.CONNOLLY1> okay
  5100.  
  5101. <E.MONACO> sounds good.
  5102.  
  5103. <CBARRON> FINE
  5104.  
  5105. <[Phil] P.HANZE> sounds fine to me
  5106.  
  5107. <[Host] MIKE-ALLEN> Thanks for the suggestion, Erin.  Considering what I
  5108. learned with the simple assignement we started with, this one ought to be
  5109. a real education!
  5110.  
  5111. <E.MONACO> no problem, glad to help :) btw, I've learned a few things
  5112. myself!
  5113.  
  5114. <CBARRON> Thanks erin <grin> I might get back into gem yet. <grin>
  5115.  
  5116. <[Host] MIKE-ALLEN> Ok, general discussion.  John has been waiting
  5117. patiently for some suggestions about compilers/assemblers.  Give him some
  5118. ideas. ga all.
  5119.  
  5120. <[Bud] B.CONNOLLY1> What are you looking for John?
  5121.  
  5122. <[JAB] J.BATES15> thanks Mike I need a C that will run on a Falcon
  5123.  
  5124. <[Host] MIKE-ALLEN> Lattice 5.60?
  5125.  
  5126. <E.MONACO> Lattice 5.60 is supposed to work fairly well with the falcon
  5127.  
  5128. <CBARRON>   As for assemblers, I can only recommend devpac,   C compilers
  5129. , I use Lattice , Pure is OK.  Most others are not supported these days.
  5130. Lattice is supposed to run on a falcon.
  5131.  
  5132. <[JAB] J.BATES15> downward copatability would be nice
  5133.  
  5134. <E.MONACO> I agree if you need languages... check out HiSofts... they
  5135. have nice, albeit expensive products.
  5136.  
  5137. <[Bud] B.CONNOLLY1> Prospero has a TT version of their C compiler, that
  5138. should work on the Falcon.
  5139.  
  5140. <[Host] MIKE-ALLEN> I believe that DevPac 3.1 is supposed to run on a
  5141. F030/
  5142.  
  5143. <E.MONACO> Lattice C and DevPac III is a killer programming combo.
  5144.  
  5145. <[Host] MIKE-ALLEN> I'm using DevPac2.  Haven't freed up enought disk
  5146. space to install 3 yet.  8^{
  5147.  
  5148. <E.MONACO> mike? when is the next assignment due???
  5149.  
  5150. <CBARRON>   I compile old style K&R from the wonderful world of unix with
  5151. lattice no problems, It even has an old style preprocessor if that is
  5152. required.  Lattice is o.tion city. It is gui driven.  Comes with loads of
  5153. stuff, checkout cat 33 top.
  5154.  
  5155. <[Host] MIKE-ALLEN> Erin - First thursday in Feb.
  5156.  
  5157. <E.MONACO> DevPac III is ... sweet.
  5158.  
  5159. <CBARRON> topic 6 that is.
  5160.  
  5161. <E.MONACO> thanks mike...
  5162.  
  5163. <[JAB] J.BATES15> now about a Resource editor?
  5164.  
  5165. <[Bud] B.CONNOLLY1> Mike, the meetings are First and Third Thursday now?
  5166.  
  5167. <CBARRON> Lattic comes with wercs.
  5168.  
  5169. <E.MONACO> Hey, can I use a Pure C lib with lattice? Wanna update
  5170. Geneva's Task Manager... without lots of porting hassles.
  5171.  
  5172. <[Host] MIKE-ALLEN> Bud - I thought they were always the 1st and 3rd.
  5173. <girn>
  5174.  
  5175. <[Bud] B.CONNOLLY1> I got K-Resource 2 with the Prospero Developers
  5176. Toolkit.
  5177.  
  5178. <[Host] MIKE-ALLEN> girn?
  5179.  
  5180. <[Bud] B.CONNOLLY1> No, Mike, I thought it was every other Thursday.  But
  5181. I could be wrong ,g.  <g>
  5182.  
  5183. <E.MONACO> I checked out ORCS... seems... relatively complete/complex,
  5184. any comments on it?
  5185.  
  5186. <[Host] MIKE-ALLEN> Bud - sorry - I meant it to be 1st and 3rd.  Twice a
  5187. month.
  5188.  
  5189. <CBARRON>  I tried it it seems to work, but since I have lattice I use
  5190. wercs.
  5191.  
  5192. <[Bud] B.CONNOLLY1> No problem Mike, every other Thursday was just easy
  5193. for me to remember, PAYDAY!
  5194.  
  5195. <[JAB] J.BATES15> and the Compendium?
  5196.  
  5197. <[Host] MIKE-ALLEN> The Compendium is a "gotta have."
  5198.  
  5199. <E.MONACO> I know what you mean carl... why fix what aint broke
  5200. (regarding Wercs)
  5201.  
  5202. <[Bud] B.CONNOLLY1> Yep, gotta get it! Toad has it for $45.
  5203.  
  5204. <[JAB] J.BATES15> And you want this program when?
  5205.  
  5206. <[Bud] B.CONNOLLY1> Feb. 3
  5207.  
  5208. <[Host] MIKE-ALLEN> JAB - 1st thursday in Feb.
  5209.  
  5210. <[JAB] J.BATES15> no problem!
  5211.  
  5212.                    Programming Real Time Conference
  5213.  
  5214.                           January 20, 1994
  5215.  
  5216.                           Host - Mike Allen
  5217.  
  5218.                       Guest Speakers - Erin Monaco
  5219.                                        Keith Kerdes
  5220.                                        Scott Sanders
  5221.  
  5222.  
  5223.  
  5224.  
  5225. <[Host] MIKE-ALLEN> Ok folks, our Guests are all here . .  and I guess we
  5226. should get started.  The capture buffer is on, so watch yourselves.
  5227.  
  5228. <[Scott @ SDS] S.SANDERS2> Ooooh mild aftershock, that was neat.
  5229.  
  5230. <[Host] MIKE-ALLEN> Tonight Erin, Keith and Scott have agreed to discuss
  5231. and answer questions about TempleMon and SysMon.  Since we aren't loaded
  5232. with folks I will try to keep it informal.  I will ask that you try and
  5233. keep a little order.  What I suggest is that after each question, the
  5234. guests answer in turn, first Erin, then Keith and then Scott (in order of
  5235. arrival) I'll try and moderate a little, but I hope I don't need to do
  5236. too much.  You guys have been doing great so far.  Each of the guests,
  5237. please use a GA (go ahead) when you are done so that the next person
  5238. knows to proceed.  Using the /rai command for everyone else will let me
  5239. get things organized.  I already have Charles with a /rai.
  5240.  
  5241. <C.S.SMETON> Can I speak?
  5242.  
  5243. <[Host] MIKE-ALLEN> Charles - hang on while I ask the guests for opening
  5244. comments on SysMon and temple mon.  Charles yea go for a quickie.  ga
  5245. <changed my mind in mid-type!  GA Charles>
  5246.  
  5247. <C.S.SMETON> Does anyone know the latest version of SysMon? I have 1.0.8
  5248. (10/11/91) Is there a Falcon compatible version or a way to make it work
  5249. on a F030? ga
  5250.  
  5251. <[Host] MIKE-ALLEN> Erin?
  5252.  
  5253. <[Erin] E.MONACO> 1.0.8 is the latest version that I know of charles. No
  5254. idea on a Falcon version. GA
  5255.  
  5256. <[Host] MIKE-ALLEN> Keith? ga
  5257.  
  5258. <[Keith] K.GERDES> 1.0.8 is the version I have running in the background
  5259. right now.  It's dated 1-26-92.  wish there was a Falcon comp. version.
  5260. GA
  5261.  
  5262. <[Host] MIKE-ALLEN> Hmmm - scott doesn't use it? <Boy is GEnie slow
  5263. tonight!>
  5264.  
  5265. <[Scott @ SDS] S.SANDERS2> Yes, I use 1.08.  That's the best/most recent
  5266. as far as I can tell. ga
  5267.  
  5268. <C.S.SMETON> 1.08 has a problem on my Mega STe/TOS 2.06 that wraps the
  5269. screen (right edge over the left side).  That should have said 1.0.8 and
  5270. it has a date of 10.11.91 when you hit the Help key in SysMon ga
  5271.  
  5272. <[Host] MIKE-ALLEN> Hmmm - let's let Erin start with opening comments.
  5273. What is Sysmon/TempleMon and why should I use them?  <generic I> GA
  5274.  
  5275. <[Erin] E.MONACO> All versions that I have seen seem to shift the screen
  5276. to the right in like 16 bit increments. I just keep toggling between
  5277. sysmon and the app till it corrects itself.
  5278.  
  5279. Hmmm, I don't have a speech prepared, but Sysmon is a VERY powerful
  5280. developement tool which almost completely monitors every aspect of your
  5281. machines current state. TempleMon is a resident debugger that can be used
  5282. hand in hand with Sysmon In combination you have a very powerful
  5283. debugging/monitor system. GA
  5284.  
  5285. <[Host] MIKE-ALLEN> <BTW, with the Slowdown with GEnie tonight, I suggest
  5286. everyone keep their lines short so we know that you haven't died> Erin -
  5287. what is the latest version of Templemon? ga
  5288.  
  5289. <[Erin] E.MONACO> 2.01 or something like that... can't recall exactly. GA
  5290.  
  5291. <[Host] MIKE-ALLEN> Ok - Keith your comments?  <do you know the latest
  5292. version of Templemon?> ga
  5293.  
  5294. <[Keith] K.GERDES> I'm not familiar with TempleMon's development...  I do
  5295. know SysMon though! SysMon is an excellent programmer's aid.  You can
  5296. monitor these system functions: AES VDI GEMDOS LINE-A XBIOS & BIOS You
  5297. can also get the status of different facets of the system, such as
  5298. memory, vectors, etc.  GA
  5299.  
  5300. <[Host] MIKE-ALLEN> Thanks.
  5301.  
  5302. <[Erin] E.MONACO> Mike, 2.01 is the latest version available on GEnie.
  5303. Docs & Prg in German.  GA
  5304.  
  5305. <[Host] MIKE-ALLEN> Keith - it what way does it monitor those functions?
  5306. Some sort of real time display or what?  GA Erin - thanks.
  5307.  
  5308. <[Keith] K.GERDES> Yes.  SysMon works in the background.  It hooks into
  5309. the system and you can control which aspects you want to monitor....in
  5310. realtime.  The info displayed is a detailed readout of each TOS function
  5311. as it is performed- parameters passed and results returned.  You can even
  5312. send the text output to various devices- serial, parallel, file, etc.  GA
  5313.  
  5314. <[Host] MIKE-ALLEN> Wow - sounds like what is needed to debug the BPS.
  5315. <g> I'm gonna have to look into it.
  5316.  
  5317. <[Erin] E.MONACO> I'd like to add to keiths comments.  ga
  5318.  
  5319. <[Host] MIKE-ALLEN> GA, Erin.
  5320.  
  5321. <[Erin] E.MONACO> Sysmon gives you the option to turn on/off tracing of
  5322. each OS call.  In addition, with the profiler you can do a quick initial
  5323. run to find out which calls were made and how many times they were made.
  5324. hmmm, gee I'll shut up for now :) GA
  5325.  
  5326. <[Host] MIKE-ALLEN> Thanks Erin.  Scott, your turn for comments.  GA
  5327.  
  5328. <[Scott @ SDS] S.SANDERS2> I've used both Sysmon and Templemon for
  5329. debugging, however, I haven't used them actively in some time because
  5330. neither one likes MultiTOS v1.08 and I have to switch setups to use them.
  5331. Reportedly, v2.01 of Templemon does work, though, I have been unable to
  5332. have any success with its setup (it's quite involved).  Both tools got me
  5333. out some sticky situations and helped in writing the Compendium
  5334. (shameless plug) by disassembling the OS when Atari couldn't answer a
  5335. question about an obscure function. ga
  5336.  
  5337. <[Host] MIKE-ALLEN> Thanks Scott.  Sounds like you need a boot handler
  5338. such as MouseBoot, etc.  I use Mouseboot to swtich from Geneva to MTOS to
  5339. vanilla MSTe, etc.
  5340.  
  5341. <[Scott @ SDS] S.SANDERS2> I use Xboot but it's still a fuss.  ga
  5342.  
  5343. <[Host] MIKE-ALLEN> Well, I guess we are ready for questions.  /raises
  5344. please.  GA
  5345.  
  5346. <[Erin] E.MONACO> I've installed 2.01 it works well with my STE and
  5347. Geneva.  ga
  5348.  
  5349. <[Host] MIKE-ALLEN> <no questions? c'mon, folks!>
  5350.  
  5351. <[Keith] K.GERDES> I can send a sample SysMon output file if you'd like
  5352. to see it?
  5353.  
  5354. <[Host] MIKE-ALLEN> Ok, bud - ask away! ga
  5355.  
  5356. <[Bud] B.CONNOLLY1> So, let's see if I have this right...  SysMon will
  5357. tell me about the OS, what it is doing, and Templemon will tell me what
  5358. my program is up to? ga
  5359.  
  5360. <[Host] MIKE-ALLEN> Erin? GA
  5361.  
  5362. <[Erin] E.MONACO> Basically.  SysMon show calls made to the OS and y
  5363. which process as well as detailed reports on system variables, vectors,
  5364. I/O buffers, ect.  ga
  5365.  
  5366. <[Host] MIKE-ALLEN> Keith, GA
  5367.  
  5368. <[Keith] K.GERDES> You would use TempleMon to debug a program at the
  5369. instruction level- ie. a monitor/debugger.  MonST is another example.
  5370. SysMon is a "system call" monitor.  If you want to see what parameters to
  5371. pass, you could see how another program does it.  TempleMon is at a lower
  5372. level. GA
  5373.  
  5374. <[Host] MIKE-ALLEN> Keith why don't you dump that sysmon output now.  I'd
  5375. kinda like to see it.  ga
  5376.  
  5377. <[Keith] K.GERDES> Ok...
  5378.  
  5379. *****************************************************************
  5380. *
  5381. * This file was created by SYS_MON, the ATARI ST System Monitor,
  5382. * copyright by Karsten Isakovic, Berlin
  5383. *
  5384. * It is forbidden to publish this file or extracts of it without
  5385. * the copyright header !
  5386. *
  5387.  ALAD     wind_update    BEG_UPDATE -> 1
  5388.  ALAD     wind_get       H 0 TOP   -> 1
  5389.  ALAD     wind_update    END_UPDATE -> 1
  5390.  ALAD     evnt_multi     KYBD BUT { 2,1,1 } MSG TIMER  { 0,0 } Buf $0DE35E ->
  5391.                          (124,72 ) B$00 K$00 Key $2300 But $FF Event =
  5392.                          MU_TIMER
  5393.  ALAD     wind_update    BEG_UPDATE -> 1
  5394.  ALAD     wind_get       H 0 TOP   -> 1
  5395.  ALAD     graf_mouse     HIDE_MOUSE $000000 ->
  5396.  ALAD     graf_mouse     SHOW_MOUSE $000000 ->
  5397.  ALAD     graf_mouse     HIDE_MOUSE $000000 ->
  5398.  ALAD     graf_mouse     SHOW_MOUSE $000000 ->
  5399.  ALAD     wind_update    END_UPDATE -> 1
  5400.  ALAD     wind_update    BEG_UPDATE -> 1
  5401.  ALAD     wind_get       H 0 TOP   -> 1
  5402.  ALAD     wind_update    END_UPDATE -> 1
  5403.  ALAD     evnt_multi     KYBD BUT { 2,1,1 } MSG TIMER  { 0,0 } Buf $0DE35E ->
  5404.                          (124,72 ) B$00 K$00 Key $2300 But $FF Event =
  5405.                          MU_TIMER
  5406.  
  5407.  
  5408. <[Keith] K.GERDES> GA
  5409.  
  5410. <[Host] MIKE-ALLEN> <bet I know why he had that! grin>
  5411.  
  5412. <[Erin] E.MONACO> :)
  5413.  
  5414. <[Host] MIKE-ALLEN> Scott - anything to add? ga
  5415.  
  5416. <[Scott @ SDS] S.SANDERS2> Not much. Sysmon and Templemon each have
  5417. features useful to specific situations.  Sysmon cannot disassemble
  5418. assembly code for instance.  ga
  5419.  
  5420. <[Host] MIKE-ALLEN> Ok, I have MonST, etc., from DevPac3.  Is there any
  5421. advantage to TempleMon over my HiSoft stuff?  Ga Erin.
  5422.  
  5423. <[Erin] E.MONACO> Yes, TempleMon remains resident and can be called up at
  5424. any time, ever try to debug a desk accessory or worse a TSR? :) GA
  5425.  
  5426. <[Host] MIKE-ALLEN> I thought I could use AMONST for resident use? ga
  5427.  
  5428. <[Erin] E.MONACO> er, got me! I'm not sure. GA
  5429.  
  5430. <[Host] MIKE-ALLEN> Ok.  Keith? ga
  5431.  
  5432. <[Keith] K.GERDES> AMONST is the AUTO TSR version of MonST.  Very small
  5433. and quite handy.  GA
  5434.  
  5435. <[Erin] E.MONACO> Thanks Keith. ga
  5436.  
  5437. <[Host] MIKE-ALLEN> Keith - any comments on TempleMon vs. MonST? ga
  5438.  
  5439. <[Keith] K.GERDES> I used TempleMon in an initial release but that was
  5440. several years ago...  GA
  5441.  
  5442. <[Host] MIKE-ALLEN> Scott - any further comments?  GA
  5443.  
  5444. <[Scott @ SDS] S.SANDERS2> I would say that AMONST would probably be
  5445. better (slightly) than Templemon but I only have MonST which doesn't have
  5446. the resident capabilites which are essential to me.  MonST can trace C
  5447. source code (sort) of which is its main advantage.  ga
  5448.  
  5449. <[Host] MIKE-ALLEN> Thanks Scott.  What does it take to set up TempleMon.
  5450. Can I use SysMon without TempleMon?  Erin - GA
  5451.  
  5452. <[Erin] E.MONACO> TempleMon and SysMon are designed to work together
  5453. Using TempleMon 2.01 with Sysmon 1.0.8 in TT hires they will share the
  5454. same screen. (can't test this but I bet it'd be nice) Yes, you can use
  5455. both Sysmon and TempleMon independantly. ga
  5456.  
  5457. <[Host] MIKE-ALLEN> How do you set up Templemon?  Scott indicated some
  5458. problems.  GA Scott.
  5459.  
  5460. <[Scott @ SDS] S.SANDERS2> I had problems with 2.01. It is advertised to
  5461. work with MultiTOS but doesn't specify a version so I suspect it was
  5462. tested on 1.01, not 1.08 which I use.  The earlier Templemon is simply
  5463. one AUTO program.  The latest Templmon requires an AUTO program, several
  5464. overlays, things placed in named directorys, and environment setup. Looks
  5465. powerful but is a bear to setup (Erin seems to have got it though).  ga
  5466.  
  5467. <[Host] MIKE-ALLEN> Thanks - Keith - comment? GA
  5468.  
  5469. <[Keith] K.GERDES> Just that I'd take TempleMon over DB anyday...  <g> GA
  5470.  
  5471. <[Host] MIKE-ALLEN> <someone else MUST have some questions!> Erin -
  5472. comment?  GA.
  5473.  
  5474. <[Erin] E.MONACO> 2.01 isn't to difficult when you get past the german
  5475. translations.  It comes with an installation program that'll modify the
  5476. actually program mainly it consists of preferences, like assigning
  5477. hotkeys, colors, buffers, edit modes and the like. GA
  5478.  
  5479. <[Scott @ SDS] S.SANDERS2> I speak pretty good german (must be the new
  5480. math :).
  5481.  
  5482. <[Host] MIKE-ALLEN> Ok Erin, thanks.  Bud has a question.  GA Bud.
  5483.  
  5484. <[Bud] B.CONNOLLY1> How tough are breakpoints to set up in TempleMon?
  5485. What do you need to be able to set a breakpoint,(ie assembler listing)?
  5486. ga
  5487.  
  5488. <[Host] MIKE-ALLEN> Erin - ga.
  5489.  
  5490. <[Erin] E.MONACO> I've just played with it, so I can't say. GA
  5491.  
  5492. <[Host] MIKE-ALLEN> Keith - can you help bud? ga
  5493.  
  5494. <[Keith] K.GERDES> Breakpoints in a debugger are either set from the
  5495. commandline input or with a hotkey at an address.  GA
  5496.  
  5497. <[Host] MIKE-ALLEN> Scott - GA.
  5498.  
  5499. <[Scott @ SDS] S.SANDERS2> For instance, if you want a breakpoint at
  5500. 0x1FFFFF you type:
  5501.  
  5502.  b1 1FFFFF
  5503.  
  5504. which sets breakpoint 1 to the given address
  5505.  
  5506.  b+
  5507.  
  5508. turns breakpoints on... after this point, anytime the PC==address,
  5509. Templmon is entered. ga
  5510.  
  5511. <[Erin] E.MONACO> I can add a little more. ga
  5512.  
  5513. <[Host] MIKE-ALLEN> GA Erin.
  5514.  
  5515. <[Erin] E.MONACO> SysMon gives the address at which OS calls were made
  5516. you could use this to your advantage. Also since TempleMon and SysMon
  5517. work cooperatively you can actually TELL SysMon to jump to TempleMon when
  5518. certain OS calls are made. ga
  5519.  
  5520. <[Host] MIKE-ALLEN> Hmmm.  Bud - any more? ga
  5521.  
  5522. <[Bud] B.CONNOLLY1> thinking...
  5523.  
  5524. <[Host] MIKE-ALLEN> Erin - could I use sysmon to figure out why the
  5525. Spectrum-Holobyte games don't work on my MSTe? ga
  5526.  
  5527. <[Erin] E.MONACO> I'd be willing to bet that you could, especially if its
  5528. because of a bad OS call. If its just some weird code you'd locate it
  5529. using a debugger. ga
  5530.  
  5531. <[Host] MIKE-ALLEN> I think it is a bad mouse or event handler call.
  5532. Where in the auto folder does SysMon reside? Keith ga
  5533.  
  5534. <[Keith] K.GERDES> SysMon can be run at any point in the AUTO folder.
  5535. Since it takes up quite a bit of memory, I just run it from the desktop
  5536. when needed.  GA
  5537.  
  5538. <[Host] MIKE-ALLEN> Doesn't have to run before or after Warp9 or geneva?
  5539. ga
  5540.  
  5541. <[Keith] K.GERDES> Shouldn't require any special run order.
  5542.  
  5543. It even has a provision for de-installing if you run it from the desktop.
  5544. GA
  5545.  
  5546. <[Host] MIKE-ALLEN> That's great.  I'm gonna have to try it.  I wanna
  5547. look at the Speedo calls in Atari Works and see why I get the Black Page
  5548. Syndrome!
  5549.  
  5550. <[Erin] E.MONACO> SysMon/Geneva/Warp_9 doesn't work... at least for me..
  5551. 3 bombs. ga
  5552.  
  5553. <[Host] MIKE-ALLEN> Anyone else have any questions before we let our guests get
  5554. some sleep?
  5555.  
  5556. <[Bud] B.CONNOLLY1> I'm sure we could go all night Mike, but I need some
  5557. sleep myself. 6:00 am comes pretty early! <G>
  5558.  
  5559. <[Host] MIKE-ALLEN> <me too, Bud>
  5560.  
  5561. <[Host] MIKE-ALLEN> Guess not.  Closing comments Erin? ga.
  5562.  
  5563. <[Erin] E.MONACO> In closing... SysMon is VERY handy, well worth the time
  5564. to learn and use. ga
  5565.  
  5566. <[Host] MIKE-ALLEN> Keith? ga
  5567.  
  5568. <[Keith] K.GERDES> GA
  5569.  
  5570. <[Host] MIKE-ALLEN> hehe
  5571.  
  5572. <[Host] MIKE-ALLEN> Scott?  GA.
  5573.  
  5574. <[Scott @ SDS] S.SANDERS2> Both programs are very handy. I can't wait to
  5575. see something running under MultiTOS such as Spy under Windows. Oh well.
  5576. ga
  5577.  
  5578. <[Host] MIKE-ALLEN> Thanks to our guests, Erin, Keith and Scott.  I'm
  5579. gonna have to try Sysmon for sure.
  5580.  
  5581. <[Bud] B.CONNOLLY1> Thanx Erin, Keith and Scott. You've given me some
  5582. useful information, now I'll just have to dive in and try 'em out!
  5583.  
  5584. <[Host] MIKE-ALLEN> Capture buffer off.  Rabble time.
  5585.  
  5586.                       Wednesday Night Real Time Conference
  5587.  
  5588.                               February 3, 1994
  5589.  
  5590.                           Host - Larry Duke
  5591.  
  5592.  
  5593.  
  5594. <[Temp Host] LARRY.D> I'm gonna be eating pizza while typing.  If you see
  5595. some cheese on my text, you'll understand....
  5596.  
  5597. <[John too] J.G.H.> hehe....and drinking Jolt and smoking cigarettes?
  5598.  
  5599. <[The MadMan] W.JONES43> Keith!  Long time no chat!
  5600.  
  5601. <[Temp Host] LARRY.D> As the room slowly fills.....
  5602.  
  5603. <[John too] J.G.H.> isn't that the programmer's diet?
  5604.  
  5605. <[Temp Host] LARRY.D> It is for me.  Went to the dentist today, and I'm
  5606. dying to try out this new cap.  I may also type a bit hard to understand,
  5607. considering the Novacaine....
  5608.  
  5609. <[Bill] W.JONES43> Forgot I was being the programmer type tonight! <grin>
  5610.  
  5611. <E.MONACO> \nam Erin
  5612.  
  5613. <E.MONACO> ack!
  5614.  
  5615. <[John too] J.G.H.> ack...ack
  5616.  
  5617. <[Temp Host] LARRY.D> We knew who you were anyway, Erin...
  5618.  
  5619. <E.MONACO> ok... never mind then! :)
  5620.  
  5621. <[Bill] W.JONES43> I finally got a Thursday off work - haven't been to
  5622. this particular RTC before.  What type of programming are we discussing?
  5623.  
  5624. <[Temp Host] LARRY.D> All types, Bill.  C, Assembly, GFA BASIC, whatever
  5625. you want to....
  5626.  
  5627. <[John too] J.G.H.> Larry is tonight's "Special" host, Mike is busy
  5628. tonight
  5629.  
  5630. <CBARRON> gee, thats a wide area<grin>
  5631.  
  5632. <[Bill] W.JONES43> Ah - PureC's my favorite environment.  Hisoft BASIC
  5633. for quick and dirty hacks.
  5634.  
  5635. <[Temp Host] LARRY.D> You don't want to join us, Rob? (Rob's hiding in
  5636. the other room)
  5637.  
  5638. <[John too] J.G.H.> I am currently playing with M.A.G.E. and GFA
  5639.  
  5640. <[Bill] W.JONES43> John, is M.A.G.E. a toolbox for GFA or library
  5641. routines?  Could it be interfaced to C?  The results I've seen look
  5642. pretty impressive.
  5643.  
  5644. <E.MONACO> I can't stay long but Mike wanted us to define our objectives
  5645. for the next homework assignment a little better.
  5646.  
  5647. <[John too] J.G.H.> It is a Graphics Engine and I think it currently only
  5648. works with GFA of course you can use C in GFA so it probably is possible
  5649.  
  5650. <[Bill] W.JONES43> Did my time with STOS - very nice results if you have
  5651. LOTS of patience.
  5652.  
  5653. <[Temp Host] LARRY.D> True enough, Bill.  Interesting language, isn't it?
  5654.  
  5655. <[Bill] W.JONES43> Yeah, but I don't own GFA and can't get a lead on 4.0.
  5656. The 2.0 version crashes BADLY on my TT.  OTOH, PureC's editor is a dream
  5657. in TT-Med res.
  5658.  
  5659. <[Temp Host] LARRY.D> I'm using GFA 3.6TT Bill.  Works great in all
  5660. resolutions (including 1280*960)  Of course, the guys at GFA will swear
  5661. up and down there is no 3.6, but that's what mine says....
  5662.  
  5663. <[John too] J.G.H.> Also MAGE comes with the latest version of GFA BASIC
  5664. Interpreter, compiler and assembler on disk
  5665.  
  5666. <[Bill] W.JONES43> Larry - yeah I heard that from them too.  Actually
  5667. they told me _NO_ version of GFA was TT compatible.
  5668.  
  5669. <E.MONACO> It'd be nice if they offered a version of M.A.G.E without GFA
  5670. for those who already own it.
  5671.  
  5672. <[Temp Host] LARRY.D> Naw - they are the ones that sold it to me.  I
  5673. think anything after 3.6E is TT compatible...
  5674.  
  5675. <[Temp Host] LARRY.D> Back from lurking, Rob?
  5676.  
  5677. <[/dev/null] R.ANISKO> unlurked... how is everyone tonight?
  5678.  
  5679. <[Bill] W.JONES43> Larry, programs _written_ in 3.5E MAY be TT
  5680. compatible.  All depends on how you set the fastload and TT-RAM bits.
  5681. I've gotten a few to work well.
  5682.  
  5683. <[Temp Host] LARRY.D> I see that Carl uploaded homework for this one.
  5684. What was the actual assignment?
  5685.  
  5686. <[carl] CBARRON>  Re: Homework, good idea, how complicated a editor are
  5687. we 'eventually' writing?
  5688.  
  5689. <[Bill] W.JONES43> As long as the author stayed away from the RESERVE
  5690. command.
  5691.  
  5692. <[John too] J.G.H.> I know programs using MAGE don't like screen
  5693. accelerators
  5694.  
  5695. <[Bill] W.JONES43> John, actually Dark Pearl plays fine here with NVDI on
  5696. the TT.  Too damn fast to get past the first few inches of the board, but
  5697. it _DOES_ run!
  5698.  
  5699. <[Temp Host] LARRY.D> Bill - The earlier versions of GFA have a little
  5700. problem with their MENU S$ command - it always defaulted to an 8 pixel
  5701. height character.  TT resolutions made the menus terribly compressed and
  5702. overwritten.
  5703.  
  5704. <[carl] CBARRON> I did?  I have an incomplete one on my HD. Perhaps that
  5705. was the first assignment Mike's looks a little more structured, this
  5706. time.<grin>
  5707.  
  5708. <[Bill] W.JONES43> Larry - THAT'S what caused that.  Always wondered
  5709. about it.
  5710.  
  5711. <[John too] J.G.H.> I just turn off my warp 9
  5712.  
  5713. <[Temp Host] LARRY.D> Even earlier versions of GFA will still run if you
  5714. use 24BIT.PRG in the auto folder.  They stored additional info in the
  5715. upper 8 bits of the addresses.
  5716.  
  5717. <[John too] J.G.H.> MajicSoft also have BUTTONZBASIC a GUI shell for GFA
  5718. which makes things easier ;>
  5719.  
  5720. <[Temp Host] LARRY.D> I use GFA for things quick and dirty.  For real
  5721. programming, I use DEV PAC TT.  I gotta upgrade to 3.0 soon....
  5722.  
  5723. <[Bill] W.JONES43> Larry - actually I use PMMU.  Nicer, fixes a couple of
  5724. mapping problems for games that ask for the ROM version directly and
  5725. doesn't require a keypress if you have it in the auto folder.
  5726.  
  5727. <E.MONACO> Our assignment was to write a simple windowed editor that
  5728. would edit one windows worth of information.  Just do simple stuff like
  5729. cursor movement, insert, delete.  If you wanted you could add a resource
  5730. contianing a menu with info & Quit.
  5731.  
  5732. <[John too] J.G.H.> I am trying to get the folks from MajicSoft on GEnie
  5733. for an RTC
  5734.  
  5735. <[/dev/null] R.ANISKO> I have a quick "C" question if anyone could answer
  5736. it?
  5737.  
  5738. <[Bill] W.JONES43> Shoot, Rob...
  5739.  
  5740. <E.MONACO> I don't think anybody got into the editing part of it yet. I
  5741. didn't.
  5742.  
  5743. <[carl] CBARRON> where are we going with this editor?  I have some gap
  5744. buffer code, I might use if this is really an editor.  I do use Lattice C
  5745. and misc. unix tools ported to ST/TT.  If this is going to go no place a
  5746. simple arrangement is possible without
  5747.  
  5748. <[/dev/null] R.ANISKO> real simple (but i haven't figured it out) - how
  5749. could I simply write a  ?
  5750.  
  5751. <[/dev/null] R.ANISKO> oops. hang on...
  5752.  
  5753. <[Temp Host] LARRY.D> That sounds like a very adventurous homework
  5754. assignment....
  5755.  
  5756. <[carl] CBARRON> without any real editor code.
  5757.  
  5758. <[/dev/null] R.ANISKO> how can I ask for a keypress and treat it as a
  5759. hotkey - that is, take the keypresss and act *without* needing to hit
  5760. RETURN? in "C" that is
  5761.  
  5762. <[Bill] W.JONES43> Which C are you using?
  5763.  
  5764. <[/dev/null] R.ANISKO> GCC
  5765.  
  5766. <E.MONACO> How far I am not sure, we had talked about adding maybe load
  5767. and save, search and replace, things like that in later assignments.
  5768.  
  5769. <[Bill] W.JONES43> Oh - in your TOS binding you'll find int Bconin(int
  5770. port).  Use port 2 for the keyboard.  Inputs 1 character from device.
  5771.  
  5772. <E.MONACO> "How far" is something we can address now.
  5773.  
  5774. <[/dev/null] R.ANISKO> ok - will have to "grep" my header files and see
  5775. what asscoaiets (associates) to it (typos tonight)...
  5776.  
  5777. <[Bill] W.JONES43> Rob - or to be more "general", get(stdin) also works.
  5778.  
  5779. <[Temp Host] LARRY.D> Is anybody having problems with the homework
  5780. assignment so far?
  5781.  
  5782. <[/dev/null] R.ANISKO> hmm, Bill, get(stdin) and not stdin(  (oops)
  5783. getch(stdin) or getchar(stdin)?
  5784.  
  5785. <[Bill] W.JONES43> Rob - getch(stdin) in GCC.  PureC has a couple of
  5786. shortcuts.
  5787.  
  5788. <[/dev/null] R.ANISKO> which Programming RTC had the latest and greatest
  5789. description of the homweork? maybe i'll write myself an online
  5790. spell-checker :-)
  5791.  
  5792. <E.MONACO> Was it 6th of Jan?
  5793.  
  5794. <[carl] CBARRON> Ok if we are going to do something with it sometime, I
  5795. will play with a gap buffer.  Got the generic code for one.
  5796.  
  5797. <[/dev/null] R.ANISKO> which file transcript though?
  5798.  
  5799. <[Keith] K.GERDES> I think the description was uploaded to the Topic.
  5800.  
  5801. <[/dev/null] R.ANISKO> ok - will see if i can capture the info later...
  5802.  
  5803. <[John too] J.G.H.> I will go look for ya ;>
  5804.  
  5805. <[Temp Host] LARRY.D> You know, writing an editor is something I've
  5806. wanted to do for a long time.  I am by no means a professional
  5807. programmer, and my little mind doesn't come up with any creative thoughts
  5808. on buffering ideas.
  5809.  
  5810. <E.MONACO> I believe Keith is right, it should be in the Topic.
  5811.  
  5812. <[Bill] W.JONES43> Rob - if you're programming TOS style and don't intend
  5813. to port your code, use TOS for all it's got.  Your code will be faster.
  5814. You need to list out your BIOS.H, GEMDOS.H and other headers and just
  5815. prowl around.
  5816.  
  5817. <[/dev/null] R.ANISKO> i wrote a simple editor under microsoft-c some
  5818. time ago - might have to steal some of my old code (unfortunately it's
  5819. not Atari code :-(
  5820.  
  5821. <[Temp Host] LARRY.D> What is the best way to do this?  A gap buffer, I
  5822. realize is what is needd, but how should each line be stored in memory?
  5823. After an edit, should the entire document be reformatted in memory and
  5824. the inserted in the proper place? (that should read "the LINE inserted in
  5825. the proper place.")
  5826.  
  5827. <[/dev/null] R.ANISKO> ph well, will try to hack around sometimes this
  5828. week - i need to go now though - maybe see yunz at the brodie rtc...
  5829.  
  5830. <[John too] J.G.H.> here it is ;>
  5831. hmmmmm....
  5832.  
  5833. <[Bill] W.JONES43> Larry, shouldn't an editor insert 1 character at a
  5834. time and reformat as quickly as possible?  Otherwise you can't see what
  5835. you're doing until you finish the line!
  5836.  
  5837. <[John too] J.G.H.> well if anyone else needs the info on the homework
  5838. here it is
  5839.  
  5840. Number: 31565  Name: PRGRTC04.ARC
  5841. Address: MIKE-ALLEN                Date: 940108
  5842. Approximate # of bytes: 10496
  5843. Number of Accesses: 54  Library: 13
  5844.  
  5845. Description: Transcript of the 4th Programming RTC held on 6 January,
  5846. 1994.  Comments and reviews of the 1st homework assignment.  Second
  5847. homework assignment defined.
  5848.  
  5849. <[carl] CBARRON>  A gap buffer keeps the free space of the buffer at the
  5850. insert point. Pointers to the start of lines, with lengths is one
  5851. approach to lines.
  5852.  
  5853. <E.MONACO> I'd planned on doing its something like that.  Not worrying
  5854. about wrapping or stuff like that.
  5855.  
  5856. <[Bill] W.JONES43> Carl - I like that concept.  Easy to implement too.  I
  5857. guess since I wasn't in the original "assignment" RTC I should hush now,
  5858. though... <smile>
  5859.  
  5860. <[carl] CBARRON>  Easy but not that easy, when all the possibilities are
  5861. considered. Have DDJ's C source on that someplace.
  5862.  
  5863. <[Temp Host] LARRY.D> So, you basically just have an array of addresses
  5864. for the start of each line?
  5865.  
  5866. <[Bill] W.JONES43> Carl, is your line size defined?  If so, then you
  5867. don't need pointers to the start of each line unless your trying to
  5868. conserve memory.
  5869.  
  5870. <[Temp Host] LARRY.D> It would be relatively easy if all lines were a
  5871. given length, but how do you work with variable line lengths, and edits
  5872. that extend over 1 line?
  5873.  
  5874. <[Bill] W.JONES43> Any of you ever been on a BBS using FidoDoor?
  5875.  
  5876. <[carl] CBARRON> That is the only real approach. It also complicates the
  5877. gap buffer approach some as the start of a line in the buffer is
  5878. variable.  A gap buffer is going to move lots of text variable lines get
  5879. the most out of a fixed amount of memory and reduce the 'mallocs'
  5880. involved for long lines.  The one thing I hate about some editors is a
  5881. line max. Some as small as 100 characters.  terrible for editing ascii
  5882. text files....
  5883.  
  5884. <[Bill] W.JONES43> Larry, why would an edit extend past one line?  You'd
  5885. have to make changes character by character or the user wouldn't see the
  5886. results as they typed.
  5887.  
  5888. <[carl] CBARRON>  Search and replace will edit in more than one character
  5889. at a time...
  5890.  
  5891. <[Temp Host] LARRY.D> Here's my thought, Bill (it's probably really
  5892. screwed up, and I'm hoping somebody can set me straight)....
  5893.  
  5894. <[Bill] W.JONES43> Carl, I see your point.  Yes, then you'll have to have
  5895. pointers to the start of each line and your search routine will have to
  5896. ignore whatever you're using as an EOL marker.
  5897.  
  5898. <[Temp Host] LARRY.D> Each character is displayed when it's entered, and
  5899. the text is stored in a temporary buffer.  Once ENTER, an arrow key, or
  5900. something like that is pressed, the contents of the buffer is dumped into
  5901. the TEXT buffer and stored.  That way, you could have an UNDO function
  5902. really easily.
  5903.  
  5904. <[Bill] W.JONES43> But the gap concept isn't totally off.  Insert or
  5905. modify the necessary text, then increment/decrement the line pointers
  5906. after the modified line by the changed length if any, then redraw.
  5907. Larry!  I'm gonna have to do something like that in MY editor (for real
  5908. editor, not this project).  So obvious it never dawned upon me.  I have
  5909. an undelete line function, but not an undo right now.
  5910.  
  5911. <E.MONACO> I'd planned on going pretty much the same route.
  5912.  
  5913. <[Bill] W.JONES43> Actually, it'd be easier just to have a "twin" of your
  5914. real text buffer - when they hit your "hot" keys, copy it back to the
  5915. "real" buffer.  Always display the "twin" on screen.
  5916.  
  5917. <[Temp Host] LARRY.D> If you insert text, the TEXT buffer would then be
  5918. reformatted with the new text inserted in the right place.  It would take
  5919. LOTS of memory moves to create the text buffer in a sequential order.
  5920.  
  5921. <[carl] CBARRON>  Larry that is one approach useful in reducing memory
  5922. moves of a gap buffer as well.  Bill, all lines after the edit as well
  5923. will move with a gap buffer.
  5924.  
  5925. <[Bill] W.JONES43> Carl, yes - I meant to modify ALL the line pointers
  5926. after the affected line.  Inserting text requires 1 memmove() call.
  5927. Carl, maybe I don't follow you.  You have a SECOND area of memory for
  5928. your gap buffer?  Why not just create the gap in your REAL text buffer?
  5929.  
  5930. <[carl] CBARRON> memmove is ok, but with a project like this and a 680x0
  5931. a better approach is to move longs if possible, providing the size of the
  5932. move is bigger than 16 bytes.
  5933.  
  5934. <[Bill] W.JONES43> That's the way Bryan Hall and I did it with FidoDoor.
  5935.  
  5936. <E.MONACO> Would using the blitter speed it up?
  5937.  
  5938. <[Temp Host] LARRY.D> My experiences with the Blitter are that it's not
  5939. quite as fast as straight assembly moves....
  5940.  
  5941. <[Bill] W.JONES43> Carl - true.  And YES, blitted moves will make it FLY,
  5942. but only if you're moving 16 bytes or better.  But sheesh, how fast are
  5943. you expecting someone to type? Larry, but this isn't being coded in
  5944. assembly, is it? Or does the language matter?
  5945.  
  5946. <E.MONACO> Using longs you have to insure that your working on even
  5947. addresses, and on the newer 680X0's using a longword boundry will speed
  5948. it up even further
  5949.  
  5950. <[carl] CBARRON>  A gap buffer moves the 'free area' to  the insertion
  5951. point any time the text is changed.  If you use a simple edit approach in
  5952. a second buffer then insert it onta return or cursor movement.  Moving
  5953. 64k or 128K at a time to insert one chara cter is slow....
  5954.  
  5955. <[Bill] W.JONES43> Carl, okay - but for display purposes you need have a
  5956. pointer that say which line is currently held in the gap buffer and its
  5957. location.  Also that makes you have a size limit on edits, correct?
  5958.  
  5959. <[carl] CBARRON> No, you write the text SKIPPING THE AREA OF THE GAP
  5960. buffer. It is constantly changing in location BTW.
  5961.  
  5962. <[Bill] W.JONES43> Carl, now I'm confused.  Don't you want to display the
  5963. changes they're making AS THEY MAKE THEM?  Otherwise you won't know if
  5964. you made a typo until you move the cursor.
  5965.  
  5966. <[carl] CBARRON> Well it is confusing to talk in three lines. A gap
  5967. buffer is a block of unused memory that is moved to where it will be
  5968. used. If you set the pointer of the current line to an input buffer, no
  5969. problem, it will display the input buffer.  It is possible in design,
  5970. details are not infront of me. As we are seeing this is not as simple as
  5971. first appears....
  5972.  
  5973. <[Bill] W.JONES43> Carl, okay.  That's what I meant.  Display all
  5974. unchanged lines PLUS the gap buffer they're currently typing.  Something
  5975. I've been meaning to add to FidoDoor, in fact to speed up its redraw
  5976. speed.
  5977.  
  5978. <[Temp Host] LARRY.D> I honestly thought this was an ambitious project
  5979. for this early in the Programmer's RTC life - it may well be over the
  5980. heads of most people (me included)
  5981.  
  5982. <[carl] CBARRON>  over heads, only if thinking past the 'design specs' of
  5983. the assignment. I do think, it should be in pieces myself.  After years
  5984. of reading, I am often lost myself....
  5985.  
  5986. <[Temp Host] LARRY.D> Can we redefine the assignment?  Has anybody got it
  5987. handy?
  5988.  
  5989. <[carl] CBARRON>  for the assignment an array of say 500 byte lines is
  5990. more than sufficient, as it stands.  512 makes more sense <grin>
  5991.  
  5992. <E.MONACO> Carl, for some people even working with GEM is totally new.
  5993. Why don't we just concentrate on opening a window with a title and close
  5994. box if thats not enough we could do a displayed cursor that can be moved
  5995. with the arrow keys.
  5996.  
  5997. <[Temp Host] LARRY.D> That's not a bad idea.  I personally would be
  5998. intimidated by an assignment to write an editor like this.  I could,
  5999. however, write something that opened windows, reacted to all of the
  6000. window commands, etc.  I could then take THAT knowledge and use it later
  6001. for a project like this.
  6002.  
  6003. <[carl] CBARRON>  Gem text is something I hardly ever do. Fine we can
  6004. open a window, clear its contents and redraw it. That is essentially what
  6005. my shell is doing.
  6006.  
  6007. <[Temp Host] LARRY.D> Still, I'm a little unclear as to the actual
  6008. assignment.  I realize it's a text editor in a window, but with INSERT,
  6009. DELETE, and stuff like that? Just writing the cursor control portion
  6010. would be a relatively long project...
  6011.  
  6012. <[carl] CBARRON>   Supposedly, eventually...  Cursor control with mouse
  6013. or just gadgets and cursor keys???
  6014.  
  6015. <E.MONACO> It shouldn't be that hard.  You need routines that will turn
  6016. the cursor on and off and adjust its onscreen position.  I'd like to see
  6017. mouse control.  That'd be a nice feature and not to hard to implement
  6018. once the regular routines are in place and working correctly.
  6019.  
  6020. <[carl] CBARRON>  a small box drawn in xor mode over the text is the
  6021. normal way to draw a cursor. removal is the same as drawing...  thought
  6022. lag....
  6023.  
  6024. <E.MONACO> Keith, what do you think?
  6025.  
  6026. <[Keith] K.GERDES> I sent Mike email a couple weeks ago about starting
  6027. out small and working the way up through the AES ladder.
  6028.  
  6029. <E.MONACO> I believe thats the best way to procede.
  6030.  
  6031. <[Keith] K.GERDES> The project as it stands is way too ambitious IMO...
  6032.  
  6033. <[tony] T.SMOLAR> hello everyone
  6034.  
  6035. <[Temp Host] LARRY.D> I think that's a good idea, Keith.  The first
  6036. assignment was to check the computer status and display it on screen.
  6037. Now, why not do the same thing in a window? Hiya, Tony.  We take what we
  6038. already know, then build up slowly.  Next time, we add resources.  The
  6039. time after that, we add something else, etc...
  6040.  
  6041. <[tony] T.SMOLAR> I was wondering if anyone could help me, I'm having
  6042. problems getting GNU C working
  6043.  
  6044. <[Temp Host] LARRY.D> Pretty soon, we've done every call in standard TOS,
  6045. and we can then start with the extended calls of MiNT, etc....  Shoot,
  6046. Tony - I can't answer, but there are people here that probably can.
  6047.  
  6048. <[carl] CBARRON>   Not a bad idea, KISS there are a lot of people with
  6049. not a lifetime to devote to a project.<grin>  Structured design helps a
  6050. lot....
  6051.  
  6052. <G.SIMUNOVICH> I've got GNU C up, what's the matter.
  6053.  
  6054. <[tony] T.SMOLAR> I'm trying to get GNU C working with either Gulam, or
  6055. GNU BASH, preferably BASH But when we try to use the compiler, it seems
  6056. like it can't find something\
  6057.  
  6058. <E.MONACO> I have to go... so are we just going to worry about getting a
  6059. window up and handling that?
  6060.  
  6061. <[Temp Host] LARRY.D> Eric - that's my preference.  Of course, I'm just a
  6062. small player in a big band...  Oops - EriN
  6063.  
  6064. <[carl] CBARRON>   Erin, looks like you are right.  I don't think mike is
  6065. ready for a full editor at this time either....
  6066.  
  6067. <E.MONACO> I like the stats in a window idea, but have already done that,
  6068. I suppose I could add to it though.
  6069.  
  6070. <[Temp Host] LARRY.D> George, any ideas on how to help Tony?
  6071.  
  6072. <G.SIMUNOVICH> How about a text viewer in a window???
  6073.  
  6074. <E.MONACO> I agree, I've done alot on my project but at the expense of
  6075. getting other work done, I'd like to see it toned down a bit. :)
  6076.  
  6077. <[Temp Host] LARRY.D> That's not a bad idea, George.  No editing, just
  6078. viewing, etc...
  6079.  
  6080. <G.SIMUNOVICH> Depends on what it cann't find as to the problem,
  6081. environment variable probably.
  6082.  
  6083. <[carl] CBARRON>   About GNU C sounds like some environment strings are
  6084. wrong. I don't use gnu C  so the specifics I don't have...
  6085.  
  6086. <[tony] T.SMOLAR> I have GCC set up (in gulam) as per the "Quick Start"
  6087. instructions.
  6088.  
  6089. <E.MONACO> Okay.  Take care everyone.
  6090.  
  6091. <[Temp Host] LARRY.D> After this, we could add SEARCH capabilities, then
  6092. menu's to load, etc...
  6093.  
  6094. <G.SIMUNOVICH> 3 variables are needed GCCEXEC "setenv GCCEXEC
  6095. d:/<path>/gcc-" GNUINC "setenv GNUINC d:/<path to includes>" GNULIB
  6096. "setenv GNULIB d:/<path to libs>"
  6097.  
  6098. <[Temp Host] LARRY.D> Tony - does that sound like it will work?
  6099.  
  6100. <[tony] T.SMOLAR> Could the problem be that I am using "\" pathname
  6101. separators instead of the UNIX-like "/" ones?
  6102.  
  6103. <G.SIMUNOVICH> with GCCEXEC the "gcc-" is needed as it prefixs the
  6104. executable needed "ld", "as", etc with the variable.  This assumes the
  6105. executables are named "gcc-ld", "gcc-as".  Tony, it should not "/" & "\"
  6106. are the same for most GNU and public domain thing.
  6107.  
  6108. <[tony] T.SMOLAR> Can someone tell me more about "UNIXMODE" under Bash?
  6109. How do I set Bash up to work with it?
  6110.  
  6111. <G.SIMUNOVICH> Also, instead of "d:/<>" you could try "/dev/d/<>", these
  6112. programs treat both as the same.  Tony, you can send me mail if this
  6113. doesn't work, include what errors are produced, etc and I'll reply.
  6114.  
  6115. <[tony] T.SMOLAR> Thanks.
  6116.  
  6117. <[Splat!] DMJ> Hello...
  6118.  
  6119. <G.SIMUNOVICH> UNIXMODE is to complex to explain here, but I'll send you
  6120. some docs I have.
  6121.  
  6122. <[carl] CBARRON> Da fun of 'cheap' software.... <grin>  Written for unix
  6123. masters... <grin>
  6124.  
  6125. <[tony] T.SMOLAR> Ok, I'll give that a shot, thanks for the help.  and
  6126. I'll look forward to that doc file.
  6127.  
  6128. <G.SIMUNOVICH> Written to get UNIX things working ok on the Atari.
  6129.  
  6130. <[Splat!] DMJ> So what's all the discussion about tonight?
  6131.  
  6132. <[carl] CBARRON> True, you don't happen to have berkeley yacc 1.9
  6133. compiled?
  6134.  
  6135. <[Splat!] DMJ> (And _don't_ ask me if I did my homework...)
  6136.  
  6137. <[Temp Host] LARRY.D> Damien, did you do your homework?
  6138.  
  6139. <[carl] CBARRON> What is the discussion? a) splitting the homework, b)
  6140. how to edit text, c)other.
  6141.  
  6142. <[Temp Host] LARRY.D> (I had to do that)
  6143.  
  6144. <[Splat!] DMJ> I said not to ask me that! No, I didn't do my homework.
  6145.  
  6146. <G.SIMUNOVICH> No yacc here, just starting to get GNU stuff, damn they're
  6147. big.
  6148.  
  6149. <[Splat!] DMJ> I've _never_ done my homework, if I could get away with
  6150. it... ever since I started school.  Might explain why I nearly flunked
  6151. out.
  6152.  
  6153. <[carl] CBARRON> Just downloaded f2c (f77 to c) translator only 594K
  6154. compressed tar file.<grin>
  6155.  
  6156. <[Splat!] DMJ> Geez, tiny download...
  6157.  
  6158. <G.SIMUNOVICH> Just got CS-TeX, 4meg.  Ghostscript 1meg, thank god for
  6159. fast modems.
  6160.  
  6161. <[Splat!] DMJ> I could never get into UNIX-type tools.  For some reason,
  6162. they just don't appeal to me.  Carl, however, loves them...  So it's
  6163. probably just me.
  6164.  
  6165. <G.SIMUNOVICH> I got really hooked on Unix at school, I REALLY like suns.
  6166.  
  6167. <[carl] CBARRON> True but it might contain the code I need to write a
  6168. fortran file reader for my  c code..... They do work esp. sed/gawk....
  6169.  
  6170. <[Splat!] DMJ> I always knew I was warped.
  6171.  
  6172. <G.SIMUNOVICH> For my entire Atari setup I might be able to buy a CPU.<g>
  6173.  
  6174. <[Splat!] DMJ> Maybe if I'd had the chance to work on a Sun or other UNIX
  6175. workstation I might like it more.  But then again, my fondness for neat,
  6176. compact, _usable_ programs might get in the way... <g> Anybody see Keith
  6177. Gerdes' post about Missouri?
  6178.  
  6179. <G.SIMUNOVICH> "compact" would be really nice.
  6180.  
  6181. <[Temp Host] LARRY.D> Nope - he just left, though (actually, he was
  6182. disconnected)
  6183.  
  6184. <[Splat!] DMJ> Hmmm.  Maybe he knew I was coming.  I have a feeling we
  6185. might not be on speaking terms, soon.  (Sigh)
  6186.  
  6187. <[carl] CBARRON>   Small useable tools are the backbone of unix style
  6188. operations. this stuff is source and often underdocumented [for
  6189. 'dummies'] documentation.
  6190.  
  6191. <[Splat!] DMJ> That depends what you call a usable tool.
  6192.  
  6193. <[Temp Host] LARRY.D> "If it was hard to write, it should be hard to use"
  6194. "Real programmers don't document" or comment their code....
  6195.  
  6196. <[Splat!] DMJ> For example, a program to display memory usage in a
  6197. windowed dialog, updated every five seconds or so...  How big, in C? I
  6198. must not be a real programmer, then.
  6199.  
  6200. <[Temp Host] LARRY.D> Big - in assembly?  Small...
  6201.  
  6202. <[carl] CBARRON>  Larry, that is the problem and they resent profesional
  6203. writers doing it for them!
  6204.  
  6205. <[Splat!] DMJ> No, how big would such a program be in C? i.e. how many K
  6206. is the executable.  Did I mention resolution-independent? Works as a
  6207. program or accessory? Is MTOS & Geneva aware? Includes an option to shut
  6208. off the five-second update thing?
  6209.  
  6210. <[Temp Host] LARRY.D> I'd say as a minimum it would be 18K (if you have a
  6211. good optimizing compiler)
  6212.  
  6213. <G.SIMUNOVICH> GNU C produces about a 15k file to do nothing (stripped).
  6214. Damn those huge libs.
  6215.  
  6216. <[Splat!] DMJ> Uses 100% legal GEMDOS and AES calls? Right now, mine is
  6217. sitting at 5K.  And it wasn't something I slaved at for weeks, either.
  6218.  
  6219. <[carl] CBARRON> Depends on the compiler and slim down startups. maybe
  6220. 8-12K in LC5.
  6221.  
  6222. <[Splat!] DMJ> I didn't go to any great pains to make it small.  If I
  6223. had, I wouldn't have embedded a complete .RSC file in the program.  I
  6224. think I'm making an ass of myself here.  I should stop.
  6225.  
  6226. <[Temp Host] LARRY.D> Written in assembly, Damien?
  6227.  
  6228. <[Splat!] DMJ> Of course.  It will probably be ready by Saturday.  If I
  6229. didn't have to work tomorrow, it'd be tomorrow.
  6230.  
  6231. <[carl] CBARRON>   Size of the 'lib stuff' is signifigant only on small
  6232. student sized projects. a project like ldw power not so....
  6233.  
  6234. <G.SIMUNOVICH> Anyone know a a good RSC editor (recent) availiable???
  6235.  
  6236. <[Splat!] DMJ> That's true, Carl.
  6237.  
  6238. <[Temp Host] LARRY.D> You know, those are my feelings, too.  I write in
  6239. assembly, never learned C because of the terrible overhead.  I started on
  6240. a 16K computer, and have been very memory conscious ever since.
  6241.  
  6242. <[Splat!] DMJ> In a 100K program, who cares about a 10K library?
  6243.  
  6244. <[carl] CBARRON>  commericial - I use wercs.  Free ORCS works, but is not
  6245. 3d aware, I do not believe.
  6246.  
  6247. <[Temp Host] LARRY.D> George - I have INTERFACE from GRIBNIF software.
  6248. It's really nice.  The new one from ATARI is supposed to be really nice,
  6249. too.
  6250.  
  6251. <SAM-RAPP> Hello.  Is this informal?
  6252.  
  6253. <[Splat!] DMJ> ORCS is not 3D aware, no.  It's what I use.  Yep,
  6254. informal.
  6255.  
  6256. <G.SIMUNOVICH> Not many people write 100K programs.
  6257.  
  6258. <[Splat!] DMJ> Really? Huh.  I'll keep that in mind when I try to keep
  6259. Sound Lab under 200K.
  6260.  
  6261. <SAM-RAPP> Can I ask a non-programming related question?
  6262.  
  6263. <[Splat!] DMJ> Won't bother _me_. <g>
  6264.  
  6265. <[Temp Host] LARRY.D> INTERFACE is really nice.  GRIBNIF hasn't finished
  6266. the English docs yet, and I hope to get those in the mail when it then
  6267. completed.  Nice RCS, though.  Next time you're in town, I'll be glad to
  6268. show you, George...
  6269.  
  6270. <[carl] CBARRON>  I got one 141K demo exec, will get bigger since I found
  6271. the problem. over 400K of source, I did not write...
  6272.  
  6273. <[Splat!] DMJ> Yeah, those demos are usually huge.  A lot of it is
  6274. because they use straight-line code, tho'.
  6275.  
  6276. <[carl] CBARRON> esp. when it is msdos code!
  6277.  
  6278. <[Splat!] DMJ> They get great speed by eliminating the looping overhead.
  6279.  
  6280. <SAM-RAPP> How can one use a WOrd Perfect file on an Atari?
  6281.  
  6282. <[Splat!] DMJ> Oh, MS-DOS code.  That's different.  That's always huge,
  6283. no matter what you do.  Use WordPerfect ST?
  6284.  
  6285. <SAM-RAPP> All I have is WORKS.
  6286.  
  6287. <[carl] CBARRON>  unsigned char foo[]={....}; stuff over 400K....
  6288.  
  6289. <[Splat!] DMJ> Even a 386 takes twice as many instructions to do the same
  6290. task as a 68000.  It's ridiculous.  I don't know AW, Sam... can't help
  6291. you.  Perhaps one of these other enlightened individuals?
  6292.  
  6293. <[Temp Host] LARRY.D> There is a program to convert Word Perfect to ASCII
  6294. somewhere in the library...
  6295.  
  6296. <SAM-RAPP> Where?  ;-)
  6297.  
  6298. <[Splat!] DMJ> Which would strip out all the formatting, but would be
  6299. useful if all you needed was the text.
  6300.  
  6301. <[Temp Host] LARRY.D> Are we talking WP 4.1 or a later version?
  6302.  
  6303. <SAM-RAPP> I dunno.  I FTPed some files off internet, and I THINK they
  6304. are wordperfect.
  6305.  
  6306. <[carl] CBARRON>   Its about 75% of the msdos side. On WP there is
  6307. program to translate wp5.2 files to something in the libs I downloaded,
  6308. but did no use....  internet, tex, or postscript is more likely....
  6309.  
  6310. <SAM-RAPP> The first two characters are "WP" and one line further down
  6311. says "NEC SILENTWRITER..." There is a lot of crappy formatting stuff
  6312. throughout.
  6313.  
  6314. <[Temp Host] LARRY.D> Yep - that's a WP file, alright.  Search the
  6315. library (item 3) for CONVERT and see if something shows up.
  6316.  
  6317. <[carl] CBARRON>  ok is probably a word perfect file. I'll let some
  6318. search the libs. It is less than a month old if I recall.  I can find it
  6319. if it's there!  Thanks.  I'm gonna go look!  Thanks! Bye!
  6320.  
  6321.  
  6322. /************************************************************************/
  6323.                         NETWORK SIGN-UP INFORMATION
  6324. /************************************************************************/
  6325. ---------------------------------------------------------------------------
  6326. --       --==--==--       GEnie Sign-Up Information      --==--==--      --
  6327. --                                                                       --
  6328. --   1. Set your communications software for half duplex (local echo)    --
  6329. --   at 300, 1200, or 2400 baud.                                         --
  6330. --                                                                       --
  6331. --   2.  Dial toll free: 1-800-638-8369 (or in Canada, 1-800-387-8330).  --
  6332. --   Upon connection, enter HHH.                                         --
  6333. --                                                                       --
  6334. --   3.  At the U# prompt, enter XTX99436,GENIE then press <Return>.     --
  6335. --                                                                       --
  6336. --   4.  Have a major credit card ready.  In the U.S., you may also use  --
  6337. --   your checking account number.                                       --
  6338. --                                                                       --
  6339. --   For more information in the United States or Canada, call 1-800-    --
  6340. --   638-9636 or write: GEnie, c/o GE Information Services, P.O. Box     --
  6341. --   6403, Rockville, MD 20850-1785.                                     --
  6342. --                                                                       --
  6343. --       --==--==--  Atari's Official Online Resource!   --==--==--      --
  6344. ---------------------------------------------------------------------------
  6345. ---------------------------------------------------------------------------
  6346. --       --==--==--    CompuServe Sign-Up Information    --==--==--      --
  6347. --                                                                       --
  6348. --                                                                       --
  6349. --                                                                       --
  6350. -- To sign up for CompuServe service, call (voice call) (800) 848-8199.  --
  6351. -- Ask for operator #198. You will be sent a $15.00 value CIS membership --
  6352. -- kit for free.                                                         --
  6353. --                                                                       --
  6354. --                                                                       --
  6355. --                                                                       --
  6356. --       --==--==--    CompuServe Sign-Up Information    --==--==--      --
  6357. ---------------------------------------------------------------------------
  6358. ---------------------------------------------------------------------------
  6359. --       --==--==--      Delphi Sign-Up Information      --==--==--      --
  6360. --                                                                       --
  6361. --  To enroll as a Delphi subscriber, modem call 1-800-365-4636. Press   --
  6362. --  [Return] once or twice, and type IP26 [Return] at Password:          --
  6363. --                                                                       --
  6364. --  Answer all of the questions, and you'll be cleared for Delphi        --
  6365. --  access in a few days. If you have questions about Delphi services,   --
  6366. --  give a voice call to Delphi Member Services at 1-800-544-4005.       --
  6367. --                                                                       --
  6368. --       --==--==--      Delphi Sign-Up Information      --==--==--      --
  6369. ---------------------------------------------------------------------------
  6370.  
  6371.  
  6372.  
  6373. /************************************************************************/
  6374.              Shareware survey - for shareware authors only
  6375.              By: Albert Dayes
  6376. /************************************************************************/
  6377.  
  6378.  The survey will only be used for statistical purposes only.  It will not
  6379.  be used for any other purpose.  If you have any questions feel free to
  6380.  send me e-mail.
  6381.  
  6382.  Shareware Author's Name:
  6383.  Program Name:
  6384.  Program Type (game,application, utility):
  6385.  Date of first Release:
  6386.  Number of Registrations:
  6387.  Demo (Yes/No):
  6388.  Updated (Yes/No):
  6389.  Current Version:
  6390.  Suggested Donation:
  6391.  
  6392.  Fill out the above form and send it via e-mail to the editor.  Please
  6393.  send seperate forms for each individual peice of software.
  6394.  
  6395.  Send your filled out form via e-mail to any of the following addresses.
  6396.  
  6397.  CIS: 70007,3615
  6398.  GE:  AEO.1
  6399.  In:  70007.3615@Compuserve.com
  6400.  
  6401.  The results will be in the next issue of AEO-PJ.
  6402.  
  6403. /************************************************************************/
  6404.                  Brain Stem Rotator
  6405.                  By: Russell Sasamori
  6406. /************************************************************************/
  6407.  
  6408. Problem: Implement !a&&c&&!d||a&&!b&&c||b&&d in C without using unary or
  6409.          binary operators.  a,b,c,d are integers holding boolean values.
  6410.          
  6411.          
  6412. /*-----------------------------------------------------------------------*/
  6413.  
  6414. A possible solution for the last Brain Stem Rotator (AEO-PJ #3) was sent 
  6415. via e-mail.  The original problem is listed first followed by the 
  6416. solution.
  6417.  
  6418. PROBLEM:
  6419.  
  6420. Write a program that will take an integer number as input and generate
  6421. Roman Numerals for the output.  Attempt to use 20 lines or less of code.
  6422. Maximum input value is 32767, while the minimum is 1.
  6423.  
  6424. Examples:
  6425.  
  6426. input:  5
  6427. output: V
  6428.  
  6429. input:  9
  6430. output: IX
  6431.  
  6432.  
  6433. SOLTUION:
  6434.  
  6435. Albert:
  6436.  
  6437. Re: Roman numerals (and back), this does not quite meet your specs,
  6438.     but you might find it interesting.
  6439.  
  6440. Henry K. van Eyken
  6441.  
  6442.  
  6443. From "Fleabyte" Course, 1987
  6444. Written for Casio pocket computer
  6445.  
  6446.  
  6447. a.  From decimal system to Roman numerals:
  6448.  
  6449.            10 PRINT CSR3;"ROMAN NVMERALS", CSR5;
  6450.               "under 8999,"""
  6451.            20 GOSUB 500
  6452.            40 INPUT "Decimal number:",N
  6453.            50 IF N>= 8999 THEN 40
  6454.            60 FOR J=7 TO 1 STEP -2
  6455.            70 A=10^INT(J/2)
  6456.            80 B= INT(N/A)
  6457.            90 N=N-B*A
  6458.           100 IF J=7 THEN 150
  6459.           110 IF B=9 THEN PRINT Q$(J);Q$(J+2);
  6460.               : GOTO 190
  6461.           130 IF B=4 THEN PRINT Q$(J);Q$(J+1);
  6462.               : GOTO 190
  6463.           140 IF B>=5 THEN PRINT Q$(J+1);:B=B-5
  6464.           150 IF B=0 THEN 190
  6465.           160 FOR K=1 TO B
  6466.           170 PRINT Q$(J);
  6467.           180 NEXT K
  6468.           190 NEXT J
  6469.           200 PRINT ""
  6470.           210 GOTO 40    
  6471.           500 REM *ENTER SYMBOLS*
  6472.           510 FOR I=1 TO 7
  6473.           520 READ Q$(I)
  6474.           530 NEXT I
  6475.           540 RETURN
  6476.           550 DATAI,V,X,L,C,D,M
  6477.  
  6478.     The last subroutine is for computers that have READ and DATA   
  6479.     in their vocabulary.  For the others, the corresponding sub 
  6480.     is:     
  6481.  
  6482.                500 REM *ENTER SYMBOLS*
  6483.                510 R$="I":S$="V":T$="X":U$="L":V$="C"
  6484.                    :W$="D":X$="M"
  6485.                520 RETURN
  6486.  
  6487.  
  6488. My sources show evidence that different conventions existed - and, 
  6489. indeed, still do as you may observe by comparing the Roman numeral 
  6490. for four used for page or paragraph numbering with the four on the 
  6491. face of a clock.  In writing a program we must make a choice.  The 
  6492. program I made will print,  for example, 1496 as MCDXCVI, not as 
  6493. MXDVI.  The number 49 will produce XLIX, not IL.  I gather that, 
  6494. although MCDXCVI is acceptable, XLIX may raise eyebrows. You might 
  6495. want to modify the program by adding or changing these lines:
  6496.  
  6497.                          30 F=0:$=""
  6498.                         110 IF B=9 THEN F=F
  6499.                             +2:$=Q$(J)+Q$(J
  6500.                             +F): GOTO 190
  6501.                         120 F+0: PRINT $;:$
  6502.                             =""
  6503.                         130 IF B=4 THEN F=F
  6504.                             +1:$=Q$(J)+Q$(J
  6505.                             +F): GOTO 190 
  6506.                         200 PRINT $,""
  6507.                         210 GOTO 30
  6508.  
  6509. The symbol M for 1000 used to be written in a form resembling (I), 
  6510. 10000 like ((I)),  and 100000 like (((I))).  I have avoided these 
  6511. symbols by declaring an upper limit of 8998,  probably naively so.  
  6512. An  old sign for 5000 resembles I)), just as that for 500 looked 
  6513. like I), which  has since become D.
  6514.  
  6515. A  subroutine places the Roman symbols in variables R$ - X$.  The 
  6516. "J-loop" performs three distinct operations, which might well have 
  6517. been placed in separate subs.  The first (lines 70 - 90) is to 
  6518. extract from the given number the thousands first, the hundreds 
  6519. next, then the tens, and the ones.  Lines 100 - 150 handle the 
  6520. actual translation and the positioning of the Roman symbols.  The 
  6521. "K-loop" (lines 160 - 180) counts out the number of each symbol to 
  6522. be printed.  This exhibit may be helpful: 
  6523.  
  6524.          Cause:  
  6525.  
  6526.            Q$(7)  Q$(6)  Q$(5)  Q$(4)  Q$(3)  Q$(2)  Q$(1)   
  6527.            M      D      C      L      X      V      I
  6528.  
  6529.        & Effect:  
  6530.  
  6531.          If B = 9(000), line line 170 prints nine times M 
  6532.          If B = 9(00),  line 110 prints Q$(5) + Q$(7): CM                      
  6533.          If B = 9(0),   line 110 prints Q$(3) + Q$(5): XC
  6534.          If B = 9,      line 110 prints Q$(1) + Q$(3): IX
  6535.          If B = 4(00),  line 130 prints Q$(5) + Q$(6): CD
  6536.          If B = 5, 6, 7, or 8, line 150 prints Q$(2) and 
  6537.                   lets B = 0, 1, 2, or 3, and so forth.
  6538.  
  6539.  
  6540. b.  From Roman numerals to the decimal system:
  6541.  
  6542. The program for converting from Roman to arabic number writing is 
  6543. a lot easier to make and to read:
  6544.  
  6545.                         10 PRINT "   BACK
  6546.                            FROM ROME",""
  6547.                         20 GOSUB 500
  6548.                         30 P=0:N=0
  6549.                         40 INPUT "Roman nu
  6550.                            meral",$
  6551.                         50 FOR I= LEN($) T
  6552.                            O 1 STEP -1
  6553.                         60 FOR J=1 TO 7
  6554.                         70 IF MID$(I,1)=Q$
  6555.                            (J) THEN GOSUB
  6556.                            400
  6557.                         80 NEXT J
  6558.                         90 NEXT I
  6559.                        100 PRINT N
  6560.                        110 GOTO 30
  6561.                        199 END
  6562.                        400 REM **CALC**
  6563.                        410 IF J>= P THEN P=J
  6564.                            :N=N+A(J): GOTO
  6565.                             230
  6566.                        420 N=N-A(J)
  6567.                        430 RETURN
  6568.                        500 REM **ARRAYS** 
  6569.                        510 FOR I=1 TO 7
  6570.                        520 READ Q$(I),A(I)
  6571.                        530 NEXT I
  6572.                        540 RETURN
  6573.                        550 DATAI,1,V,5,X,1
  6574.                            0,L,50,C,100,D,
  6575.                            500,M,1000
  6576.          
  6577.  
  6578. /*************************************************************************/
  6579.             Software Development Conference and Exhibition
  6580.                       By: Albert Dayes
  6581. /************************************************************************/
  6582.  
  6583. Software Development (SD) is for continuing education of programmers and
  6584. product managers.  It offers many different classes including:
  6585.  
  6586. Aligning Information System Straegies with Business
  6587. Strategic User Experiences
  6588. Development Teams More Art than Science?
  6589. Modeling the Cost of Software Quality
  6590. 21 Rules of Thumb for Shipping Great Software
  6591. Model-Driven Rapid Application Prototyping
  6592. Power, Politics and Developer Productivity
  6593. Why Settle for Late Software
  6594. ISO-90001: International Madness or Improving Methods
  6595. Reengineering Development for Object Oriented Software
  6596. Managing Design
  6597. Legal Protection of Software: What Works and What Won't
  6598. Introduction to C++ Virutal Functions
  6599. How to Develop GUI Design Standards and Methodology
  6600. Creating Best-In-Class Software thru Customer Centered Development
  6601. OLE 2.0 Component Objects
  6602. Introduction to C++ Exceptions and Pointers
  6603. Making the Move to C++
  6604. Strategies for writing Portable C code
  6605. C++ Class Design
  6606. C++ Programming Style
  6607. Compating Object Database Management Systems
  6608. Unix System Release (SVR4.2) 4.2 MP Security
  6609.  
  6610. This is only a very small list of the many classes that were available.  A
  6611. week's worth of classes is close to $1000 which is not too bad.  But for
  6612. 3 days of Exhibits Only is $50 or for free.  After attending a few different
  6613. programmer related shows one will start receiving many offers for free
  6614. exhibit passes to the different conferences.
  6615.  
  6616. Many of my friends who attended the conference said it seemed smaller than
  6617. in past years.  But, even still they said the classes are always the best
  6618. part of the show.  Real world questions, and solutions to programming
  6619. problems.  There is approximately 200 classes to choose from and over
  6620. 250 vendors exhibiting at Software Development this year.
  6621.  
  6622.  
  6623.       California, USA
  6624.           |
  6625.           |
  6626.           V
  6627.  
  6628.        |-------|
  6629.        |       |
  6630.        |       |
  6631.        \    * <---------- San Jose
  6632.         \        \
  6633.          \        \
  6634. Pacific   \        \
  6635. Ocean      \        \
  6636.              \        \
  6637.                -------
  6638.  
  6639. The show is also known for new product announcements and good prices on
  6640. software.  For example Computer Associates was giving away CA-Realizer
  6641. version 2.0 just for sitting through a 15 minute seminar.  Other booths
  6642. had drawings once a day for one free copy of their software as well.
  6643.  
  6644. Suddenly I heard shotgun blasts and screams coming from the middle of
  6645. the hall.  Rational was showing off ID software's game DOOM to show the
  6646. power of its DOS extender (breaks the 640K barrier, 32-bit flat model).
  6647. (You can find an interview with ID software in new magazine, Game
  6648. Developer.)  I can't wait to see it on the Jaguar.
  6649.  
  6650. Walnut Creek had several CD-ROMs on display including the new Atari
  6651. GEMini CD-ROM, (see a review of the GEMini disc earlier in this issue).
  6652. They also had an updated version of C User Journal CD-ROM which includes
  6653. all disks (thru 384) thru Dec 1993.
  6654.  
  6655. Speaking of CD-ROMs there will be a CD-ROM disc of all the proceedings of
  6656. Software Development (SD) conference available on CD-ROM.  The cost was
  6657. supposed to be around $50 or so.
  6658.  
  6659. The Programmers' Shop, Programmer's Paradise and ProVantage were raffling
  6660. off new software every hour or so, with T-Shirts were a being a big
  6661. favorite among show goers.  Watching people scrambling for flying T-shirts
  6662. was really a sight to behold.
  6663.  
  6664. I also found some good literature on RSA's security products which will
  6665. you find in this issue.  For a complete source code license is only a mere
  6666. $25,000.  Its similar to the price AT&T used to charge for Unix source code
  6667. too.  There are other software development kits available for under $500
  6668. that do not include complete source code.  Also some freeware kits are
  6669. available on internet as well.
  6670.  
  6671. There are always many programming related publications available for
  6672. no charge as well.  The list includes:
  6673.  
  6674. Software Development, Network Administrator, LAN - the network solutions
  6675. magazine, Windows/DOS Developer's Journal, Application Development Trends,
  6676. Microsoft System Journal, Windows Tech Journal, DBMS - Database &
  6677. Client/Server Solutions, Dr. Dobbs Journal, Unix Review, Embedded Systems
  6678. and a few others.
  6679.  
  6680. In addition to magazines there were several book publishers present
  6681. including MS Press, M&T books and QED/Wiley.  Show discounts were ranging
  6682. from 10 to 30 percent for most books.  M&T was giving away a free copy
  6683. of Al Steven's book C++ Database Developent (this was on the last day of
  6684. exhbits). Al Steven's writes the C column for Dr. Dobbs Journal in addition
  6685. to the several books he has published over the years.
  6686.  
  6687. There was heavy emphasis on MS Windows, which is expected.  And the big
  6688. fight was in C/C++ compiler area with Microsoft, Borland, Watcom and
  6689. Symantec going all out for the top prize (your money).  Borland had a daily
  6690. drawing to win a brand new CD-ROM drive.  You can never have too many of
  6691. those.
  6692.  
  6693. In addition cross-platform GUI libraries were being pushed very hard
  6694. as well.  With Zapp, XVT, Zinc and others going through the paces.  The
  6695. best thing about the show is you can see a demo, ask questions and play
  6696. with the software yourself.  Zapp encouraged new users to play with the
  6697. demos and ask any questions about their GUI library.  In addition to these
  6698. third parties Novell and Borland were pushing AppWare their new cross
  6699. platform GUI library.  Borland's OWL (proprietary GUI library) was
  6700. demonstrated with the new capability to generate AppWare code as well.
  6701. Microsoft was pushing Microsoft Foundation Classes (MFCs) for its portable
  6702. GUI effort.  These cross-platform libraries will allow one to use the same
  6703. source code on DOS, Windows, UNIX (Motif), Windows NT and Macintosh
  6704. platforms.
  6705.  
  6706. In addition to programming/management classes and exhibits are the parties.
  6707. This is another chance to win some more software in addition to talking
  6708. with more developers until the early morning hours.  This usually happened
  6709. from 8pm to Midnight on most nights.  The exhibit hours were from 11 am to
  6710. 6 pm, Tuesday thru Thursday.
  6711.  
  6712.                           "Code or Die"
  6713.  
  6714. After several days of hype it was finally time to backup those comments
  6715. with real working code.  The C++/Visual Programming Superbowl brought
  6716. out teams of two people from MicroSoft, Borland and Symantec to code a
  6717. working Windows application within 45 minutes.
  6718.  
  6719. Each team was allowed to come in one hour before the event and load their
  6720. software on the machines (which were 486 DX2-66 machines with 20 megs
  6721. of ram).  Each monitor was projected on a big screen behind the participants
  6722. so everyone in the Ballroom could see.  The crowd was hushed as the
  6723. moderator told the teams to get ready.  The command go instantly got some
  6724. of the crowd screaming "Go Borland!"
  6725.  
  6726. The programmers were also allowed to use sample code included with their
  6727. compilers.  The moderator talked about Symantec's incredible progress on
  6728. their application (since Symantec never showed up).  Every 45 seconds a
  6729. scream "Go Borland!" ripped through the crowd.  The people screaming were
  6730. rewarded with T-Shirts that were flung over the crowd to reward the
  6731. screaming participants.
  6732.  
  6733. The moderator had fun with teams members telling them that their code
  6734. looked funny or took jabs at the companies themselves.  The jabs on the
  6735. legal problems centered on Borland's C++ v4.0 license agreement which was
  6736. a radical departure from all previous versions.  This has since been
  6737. changed but only after much ranting and raving in their forum on CompuServe.
  6738. The crowd reacted with glee but then moderator quickly reminded MicroSoft
  6739. about being compressed recently.  In reference to their latest loss to Stac
  6740. over data compression technology used in MS-DOS 6.
  6741.  
  6742. It was great to see the true development cycle (edit, compile, link, run) on
  6743. the big screen.  Almost everytime Borland was compiling their code there was
  6744. the typical "Go Borland" scream.  The Moderator made sure he commented on
  6745. the type of errors the teams were getting.  It was with great delight when
  6746. he commented on compiler or linker errors.  When MicroSoft made a small
  6747. mistake page after page of errors (maybe 100+ compiler errors) were the
  6748. result.  The crowd reacted as would sharks smelling blood with a lone
  6749. voice yelling "Go Borland!"
  6750.  
  6751. The pace increased as team members searched directories (some in vain)
  6752. looking for the special peice of example source code.  It was also a great
  6753. way for other developers to see how effective the IDEs (Integrated
  6754. Development Environments) that the companies had designed.  The screens
  6755. flipped quickly as team member copies blocks of code from the examples
  6756. to their application.  The "Go Borland" yell was much less frequent as
  6757. the count down to completion neared.
  6758.  
  6759. 5-4-3-2-1 ... the last compile and link and it was over.  Then the
  6760. moderator read through the software specification, with each team to
  6761. demonstrate the feature for the judges.  A cheer would rise from respective
  6762. company employees when a company demonstrated working code.  When a
  6763. feature didn't work on MicroSoft's application according to the
  6764. specification, the moderator commented "The next release right?"  The
  6765. crowd responded with a loud OOOOOOOOOOOOOOOOOOhhhhhhhhhhhhh which soon
  6766. melted away into quiet laughter.  After the finally tally of points
  6767. Microsoft won by a narrow margin of five percent.
  6768.  
  6769. This contest was really great especially after some of those hyped stats
  6770. coming from both vendors.  It was fun watching someone else sweat bullets
  6771. trying to meet a deadline for a project too.  It was definitely the best
  6772. part of the show in my opinion.
  6773.  
  6774. If you ever get a chance to go to Software Development it is well worth it.
  6775. Even if you do not get to the programming classes themselves the exhibits
  6776. with all the free software and magazines is definately worth your while.
  6777.  
  6778. /************************************************************************/
  6779.              10 Tips From the Programming Pros
  6780.                     By: Albert Dayes
  6781. /************************************************************************/
  6782.  
  6783. On Compuserve (in the Atari Gaming forum) there was a discussion about
  6784. Atari's Laservideo game FireFox.  Based on the movie of the same name and
  6785. the only laser disk game Atari ever made.  This was 10 years ago, back
  6786. in 1984.
  6787.  
  6788. In the magazine Atari Connection (the magazine before it was renamed
  6789. Atari Explorer magazine) there was a review of FireFox and an interview
  6790. with Atari's corporate composer Jeffrey Gusman.  To quote from that
  6791. article "The Sound of Micros" by Michael Goodwin.
  6792.  
  6793.      Or, if you prefer, you can drop a coin into Atari's hot,
  6794.      new arcade game, FireFox, an interactive video-disk
  6795.      adventure for which Gusman wrote an astonishing, modular,
  6796.      30 part orchestral score that fits together in thousands
  6797.      of different ways to provide a seamless, pulse-stirring
  6798.      soundtrack regardless of which of the 120 path-choices the
  6799.      game takes.
  6800.  
  6801. That was a great game and they used a real orchestra too.  You would
  6802. have to hear it to believe how good it was.  Or even better, play it!
  6803.  
  6804. In the same magazine there are a few programming articles, but the one
  6805. on tips was very useful, and still is even though it's 10 years old.  So
  6806. below you will find a reprint of article from the Summer 1984 issue of
  6807. Atari Connection magazine.
  6808.  
  6809.              10    Tips From the Programming Pros
  6810.                hex
  6811.  
  6812.    Atari Advanced Games Groups Speaks Your (Computer's) Language.
  6813.  
  6814. TTTTTT AKE TEN COMPUTER PROFESSIONALS, each with diverse experience and
  6815.   TT   at least one successful video game credit.  Add the support of a
  6816.   TT   major hihg-tech company, ample facilities, state-of-the-art
  6817.   TT   hardware and the freedom to explore and create original software.
  6818.  
  6819. What you'd get would be a consortium like the Atari Advanced Games Group.
  6820.  
  6821. For the past 14 months they have been writing text adventures, creating
  6822. skill-and-action games, dreaming up entirely new electronic entertainment
  6823. forms for the coin arcades, home computers, and video game systems.  And
  6824. without the pressure of the marketplace -- the group's mandate was to
  6825. please itself, with Atari picking up the tab.  Even with the quality and
  6826. polish of the ensemble, Atari expected only 30 to 60 percent of their
  6827. projects to make it -- a respectable estimate given the vicissititudes
  6828. of the market.  Currently the group's score is a perfect three for three:
  6829. its first game Final Legacy has just been released, and slated to
  6830. follow is an innovative maze game and fully upgraded sequal to Star Raiders.
  6831.  
  6832. There's a lot of excited conversation around the games-group offices.  You
  6833. hear serious talk about magic rings, black holes, star fighters and their
  6834. mathematical representations.  Also lots of laughter and music.  An
  6835. appropriate tune would be "You Can Be a Star."  Sly Stone might have been
  6836. thinking of the Advanced Games Group.
  6837.  
  6838. When we asked the group for Ten Tips, we forgot they think in code.  What
  6839. we got was ten hexadecimal tips -- which translates into a few extra.
  6840. Not a baker's dozen, but a programmer's generous count.
  6841.  
  6842. 1. Don't be afraid of criticism
  6843.  
  6844. Once you've developed a part of your program to your satisfaction, ask a
  6845. friend or someone you trust to take a look at it.  Listen to what is said.
  6846. Criticism is a very touchy subject with most people, but it does work -- to
  6847. your advantage.  Never forget, though, that it's your program.  You're
  6848. the final judge.
  6849.  
  6850. 2. Be eclectic
  6851.  
  6852. A video game must put the player inside a world, not just in front of a
  6853. television screen.  A game designer must know more than just computers.
  6854. The more well-rounded you are, the more you draw from all the aspects of
  6855. this world, the better your game will be.
  6856.  
  6857. 3. Learn Assembly Language
  6858.  
  6859. It's true that Assembly language is fast and memory-efficient, but the
  6860. real reason to learn it is that you'll never really understand how the
  6861. computer sees the world until you do.  If you're going to program for
  6862. real, why do it on a "mystery machine?"
  6863.  
  6864. 4. Keep learning -- ask questions.
  6865.  
  6866. Programming in general, and game programming in particular, is a constant
  6867. changing process.  There's no such thing as "finally mastering it," the
  6868. way you might master, say algebra; so never try to conceal you ignorance.
  6869. Everybody needs help sometime.  When that time comes, realize it so that
  6870. you can get on with the job and your learning by asking.  Just make sure
  6871. you do learn, so you don't have to face that problem a second time.
  6872.  
  6873. 5. Take chances and big risks
  6874.  
  6875. Yes, there are lots of people out there making Q-Bert clones, and some
  6876. of them are doing quite well, unfortunately.  But that's not why you got
  6877. into computing.  Why not experiement?  Try something nobody's done before.
  6878. This is still a new field, and big breakthroughs have been made by people
  6879. just like you.
  6880.  
  6881. 6.  Get something running as soon as possible so you have feedback
  6882.  
  6883. Use whatever language you're most comfortable with, just to get a feel
  6884. for the program.  Don't worry about graphics or error-checking.  The
  6885. program itself may not be exactly what you want -- if fact it probably
  6886. won't; but you can't play-test a flow chart.
  6887.  
  6888. 7. Know your audience
  6889.  
  6890. Any good programmer will make a memory map or sketch out screens
  6891. beforehand: so decide who your audience is.  Many programmers have set out
  6892. to write software without considering the user.  Before you write for other
  6893. people, talk to them; afterward, let them test it out.  Non-programmers
  6894. are not going to be satisfied with mediocre products, primarily because
  6895. they still think computers are magic.
  6896.  
  6897. 8. Make it simple for the user
  6898.  
  6899. If the game needs complex commands, make sure the player can get by
  6900. without knowing all of them at the lower levels.  When someone buys a game,
  6901. he wants to play it, not wade through pages of print.(But read on.)
  6902.  
  6903. 9. Read the manual again
  6904.  
  6905. It's very easy for programmers to get set their ways.  So many times we're
  6906. in such a hurry to use that new hard- or software that we only glace at the
  6907. instructions long enough to set it up--and sometimes not even that long.
  6908. Once you've got it doing what you initially wanted it to do, take the time
  6909. to see what else is available.  Why reinvent the wheel?  Programmers are
  6910. tool users.  When programming you're almost always working with hard- or
  6911. software developed by someone else.  But they become yours if you
  6912. understand them.
  6913.  
  6914. A. Clear the decimal flag.
  6915.  
  6916. Is this facetious? No! When you first learn Assembly language or experiment
  6917. with your Atari computer, its often convenient to access Assembly routines
  6918. from BASIC.  One problem that invariably occurs is that BASIC sets the
  6919. Decimal Flag when doing math functions, and doesn't tell you.  So your
  6920. program crashes and you spend hours trying to find out why.  So--clear
  6921. that flag whenever you use USR.
  6922.  
  6923. B. Throw it out
  6924.  
  6925. The time always comes when a routine tunrs into a mess.  First you try to
  6926. make it do too much.  Then you find a bug and you start rearranging things.
  6927. Finally you have no idea what's going on anymore.  That's the time to pull
  6928. out a clean piece of paper, get away from the keyboard, and break it all
  6929. down into smaller routines.
  6930.  
  6931. C. Choose your tools according to the job
  6932.  
  6933. No matter whom you ask for advice, you're the one who implements it. You're
  6934. the one who has to sit over the keyboard for hours or months on end so
  6935. choose the language, programming style, hardware and so forth that suit
  6936. the project--and you.
  6937.  
  6938. D. Take advantage of your computer
  6939.  
  6940. Today's machine have amazing sound and graphics capabilities.  The best
  6941. software(especially games) use every bit of these they can.  If you were
  6942. a quarterback, you wouldn't run a quarterback sneak every play; you'd
  6943. use every play you could devise, and all the players on your team.
  6944.  
  6945. There, we never even got to ten.  If you don't understand, see Tip 3.
  6946.  
  6947. [ Editor's Note:
  6948.  
  6949. The above article is Copyright (c) 1984 Atari Corp.  It originally
  6950. appeared in Atari Connection magazine, Summer 1984 Vol 4, No.2., pages
  6951. 40 and 41.
  6952.  
  6953. Members of the Atari Games Group include Jim Morris, Robert Weatherby,
  6954. Mike Gurganus, Jack Ritter, Chris Horseman (group leader), Dave Menconi,
  6955. Steve Englehard, Eric Wilmunder, Dan Oliver and Rita Pless.
  6956.  
  6957. Back in 1984 the Atari 8-bit line was the only computer line Atari had.
  6958. So some of the comments are attributed specifically to that platform.
  6959.  
  6960. Permission is NOT granted for reproduction in any form other than this
  6961. issue of AEO-PJ.
  6962.  
  6963. ]
  6964.  
  6965.  
  6966. /*************************************************************************/
  6967.                             Glossary of Terms
  6968. /*************************************************************************/
  6969.  
  6970. ADA     = A Programming Language created by the US DOD for use in embedded
  6971.           systems.  The name is in honor of Ada Lovelace who, some claim to
  6972.           be the world's first programmer.
  6973. AES     = Application Environment System
  6974. AI      = Artificial Intelligence
  6975. CLASS   = An abstract data type which includes information on variables.
  6976.           In addition one may define precisely what functions have access
  6977.           to those variables.  It can be thought of in C++, as a struct that
  6978.           allows functions to be part of the struct itself.
  6979. DOD     = Department of Defense (USA)
  6980. DSP     = Digital Signal Processor
  6981. FORTRAN = Acronym for formula translation.  This programming language is
  6982.           very popular for scientific computation
  6983. GEM     = Graphics Environment Manager
  6984. GRAMMER = One of the principal ways of specifying an infinite formal
  6985.           language by finite means
  6986. LALR    = Look ahead left right (a class of grammer) common when
  6987.           discussing bottom-up parsing
  6988. LEX     = Lexical Analyzer
  6989. PROLOG  = A logic programming language which is quite popular in AI
  6990.           community
  6991. RCS     = Resource Construction Set
  6992. RCS     = Revision Control System
  6993. SDK     = Software Development Kit
  6994. VDI     = Virtual Device Interface
  6995. YACC    = Yet Another Compiler Compiler
  6996.  
  6997. /*************************************************************************/
  6998.                       ATARI DEVELOPER INFORMATION
  6999. /*************************************************************************/
  7000.  
  7001.    What you can buy from Atari in terms of developer documentation and
  7002.    support.  Contact Atari for the specific details.
  7003.  
  7004.    Atari Corp
  7005.    1196 Borregas Ave
  7006.    Sunnyvale, CA 94089
  7007.    USA
  7008.    (408)-745-2000 (voice)
  7009.  
  7010.    Some of the benefits:
  7011.  
  7012.    + Several disks and approximately two thousand pages of programming
  7013.      documentation.
  7014.    + Atari Developer newsletter: ATARI.RSC
  7015.    + Atari Developer RoundTable support on GEnie (private)
  7016.    + Atari Developer CD-ROM (coming soon)
  7017.    + book: Atari Compendium, by SDS Publishing
  7018.  
  7019.    Call or write for details.
  7020.  
  7021.  
  7022. /************************************************************************/
  7023.                    Sources of Information (References)
  7024.  
  7025.                  Books, Magazines and Company Information
  7026. /************************************************************************/
  7027.  
  7028. book: The C Programming Language (2nd edition, ANSI C)
  7029.       By Brian Kernighan and Dennis Ritche
  7030.       ISBN 0-13-110362-8
  7031.  
  7032.       The Standard C Library
  7033.       By P.J. Plauger
  7034.       ISBN 0-13-131509-9
  7035.  
  7036. Prentice Hall
  7037. Englewood Cliffs, New Jersey 07632
  7038. USA
  7039. [ CIS: GO PHCP ]
  7040.  
  7041.  
  7042.  
  7043. /***********************************************************************/
  7044.                              POST INCREMENT
  7045.               (what is coming up in the next installment)
  7046. /***********************************************************************/
  7047.  
  7048. We are always looking for new articles, tricks, questions, tips and
  7049. suggestions related to programming on the Atari.  Also Brain Stem
  7050. Rotator style problems are also needed.
  7051.  
  7052. * More on Advanced Computing using YACC
  7053. * Object Oriented Programming
  7054. * C++
  7055. * GFA BASIC
  7056. * Developer Perspective
  7057.  
  7058. The type of articles we are looking for are anything programming
  7059. related.  STOS, dBMAN, C, Assembly, BASIC, Pascal, Lex, YACC, etc,
  7060. etc.  This is of course a very small list.
  7061.  
  7062. Letters and comments are always welcome!  And if you have a better
  7063. technique for solving a problem we want to hear from you.  If one has
  7064. a suggestion on a particular topic that he/she would like covered
  7065. please send EMail to the editor.
  7066.  
  7067. Developers [Worldwide] send press releases about your products as
  7068. well.  We want everyone to know about the newest developer tools
  7069. available.
  7070.  
  7071.  
  7072. /************************************************************************/
  7073.                               LEGAL NOTES
  7074. /************************************************************************/
  7075.  
  7076. Articles and letters in Atari Explorer Online Programmers' Journal
  7077. (AEO-PJ) represent the views of the authors and do not necessarily
  7078. reflect those of the publisher.
  7079.  
  7080. Note all code and listings in Atari Explorer Online Programmers'
  7081. Journal (AEO-PJ) appear "as is," and AEO-PJ makes no guarantee or
  7082. warranty of their quality, performance, accuracy, or suitability for
  7083. any particular purpose.  AEO-PJ assumes no responsibility or liability
  7084. to any person or entity with respect to any damage caused or alleged
  7085. to be caused by their use.
  7086.  
  7087. Material published in this issue may be reprinted under the following
  7088. terms only: articles must remain unedited and include the issue number
  7089. and author at the top of each article reprinted.  Reprint permission
  7090. is granted, unless otherwise noted at the beginning of the article, to
  7091. registered Atari user groups and not for profit publications.
  7092.  
  7093. /************************************************************************/
  7094.