home *** CD-ROM | disk | FTP | other *** search
/ ftp.robelle3000.ai 2014 / 2014.06.ftp.robelle3000.ai.tar / ftp.robelle3000.ai / newsletter / 1989 / w1989-02.txt < prev    next >
Text File  |  1999-04-28  |  28KB  |  505 lines

  1.  
  2.          What's Up DOCumentation
  3.  
  4.  
  5.  
  6.         Robelle Consulting Ltd.
  7.         8648 Armstrong Rd., R.R.#6
  8.         Langley, B.C.  Canada V3A 4P9
  9.         Telephone: (604) 888-3666  Telex: 04-352848
  10.         Fax:  (604) 888-7731
  11.  
  12.  Date:  March 8, 1989
  13.  From:  Robert M. Green, President
  14.         David J. Greer, Research & Development
  15.         Michael C. Shumko, Customer Support
  16.  To:    Users of Robelle Software
  17.  Re:    News of the HP 3000, 1989 #2
  18.  
  19.       What You Will Find in This News Memo:
  20.  
  21.         News Tidbits
  22.         Technical Tips
  23.         Mental Migration, Part 2, by Jeff Kell
  24.         Introducing Barbara Janicki
  25.         Robelle Products:  Problems, Solutions, and Suggestions
  26.  
  27.  
  28.                                  News Tidbits
  29.  
  30.  Contest Reminder.  The cutoff for sending programs to the INTEREX Contributed
  31.  Library is about April 15th, if you want your program to be eligible for the
  32.  amazing Robelle Prize:  $2500 to the best program submitted this year (and
  33.  Bob Green picks the winner).
  34.  
  35.  San Francisco.  Robelle is pleased to announce that we are hosting another
  36.  customer party.  Monday, September 11th at 7 PM, we will take you on board a
  37.  beautiful Hornblower yacht, "City of San Francisco", for a cocktail cruise of
  38.  the bay.  Buses will transport guests from the San Francisco Hilton Square
  39.  and the Ramada Renaissance Hotel to the dock from 6:30 pm.
  40.  The yacht will only hold 750 guests, so make sure you pick up a ticket from
  41.  the Robelle booth (#340/342) between noon and five Monday.  Limit of two
  42.  tickets per customer.  You must have a ticket to board both the bus and the
  43.  yacht.  After the tour, buses will be waiting to return you to the Hilton and
  44.  Ramada Hotels.
  45.  
  46.  Reach Out and Bite Someone.  Having recently suffered a disastrous severance
  47.  of its East Coast fiber-optic cable system, AT&T is making sure the same
  48.  thing doesn't happen to TAT8, the transatlantic fiber-optic cable that went
  49.  live last week.  The big threat at sea is sharks, which for some unknown
  50.  reason find fiber-optic cable extraordinarily toothsome.  So AT&T had its
  51.  research and development subsidiary, Bell Laboratories, develop
  52.  Fishbite-Protection cable, which now protects TAT8 in shark-infested waters.
  53.  [ComputerWorld, Dec. 19, 1988]
  54.  
  55.  Data Loss and Worse.  Some wallets and purses are being manufactured with
  56.  magnetic closures.  The intent is good:  wallets can be closed without any
  57.  fumbling with the clasps.  Should you own an item with these closures,
  58.  obviously you have to avoid carrying diskettes in your purse where entire
  59.  files could be turned into pudding.  But think about your credit cards: on
  60.  their reverse side is a little black stripe.  That's a magnetic stripe.  Let
  61.  it jostle against your wallet clasp, and no bank machine in the world is
  62.  going to give you money.
  63.  
  64.  Workstation Configurator.  Charles Newman reports that HP's Workstation
  65.  Configurator product is now free with MPE.  Just call HP and ask for it.  You
  66.  will have to pay for a manual if you want one.
  67.  
  68.  Discount for Robelle Users.  Cumulus, the 3rd-party CRT that emulates a
  69.  700/92 and a 700/94 at a lower price with a bigger display and a five year
  70.  warranty, are now shipping 1200 units a month.  Robert David at Cumulus has
  71.  offered a 5% rebate to any Robelle customer in the US who orders before May
  72.  30th.  (800) 648-6004.  Be prepared to come up with a Robelle invoice.
  73.  
  74.  100 QEDIT Customers in Scandinavia!  Ole Nord AB announces that they now have
  75.  more than 100 customers for QEDIT in Scandinavia.  Customer number 100 was
  76.  Carelcomp in Finland, a software house.  As a thank you, Robelle and Ole Nord
  77.  AB gave Carelcomp a copy of SUPRTOOL.  Together these 100 customers represent
  78.  nearly 200 QEDIT installations.  Ole Nord AB is located at Strandvagen 39,
  79.  191 45 Sollentuna Sweden, Tel 08/35 46 66.
  80.  
  81.                                 Technical Tips
  82.  
  83.  How To Keep A Base Open? Vladimir Volokh passed on this tip to us.  You may
  84.  want to keep any base open all day artificially, if that base is frequently
  85.  opened, then closed, by users.  The first accessor always pays a heavy
  86.  performance penalty in DBOPEN.  Use this job to keep CUST.BASE open until you
  87.  do an ABORTJOB:
  88.      !job keepopen,mgr.useracct/pass,pub;outclass=,2;hipri
  89.      !build suspend;msg;temp;rec=-80,,,ascii
  90.      !run query.pub.sys
  91.      base=CUST.BASE
  92.      ;
  93.      1
  94.      xeq suspend
  95.      !eoj
  96.  
  97.  Spectrum Surprise!  You are running QEDIT on your new 925 and you want to go
  98.  into VISUAL mode.  Instead of typing VI, you type CI by mistake.  All of a
  99.  sudden, you have launched a new Command Interpreter from in QEDIT, with a
  100.  regular MPE XL prompt and everything!  You think you have been kicked out of
  101.  QEDIT, so you enter QEDIT again (nested this time).  You can't edit your file
  102.  because it is 'busy'.  Workaround:  EXIT from the second QEDIT, EXIT from the
  103.  CI and you are back in the original QEDIT.  [Margarite Way]
  104.  
  105.  PCLINK Version.  To find out the version number of PCLINK, the file transfer
  106.  program for Reflection, try RUN PCLINK.PUB.SYS,VERSION.  If that doesn't
  107.  work, try RUN PCLINK.PUB.SYS;PARM=1.  You should see something like #A&
  108.  @M#@#a1.20# 5.168C#@ where 5.168 is the version.
  109.  
  110.  QEDIT Versus HPToolset.  Gunnar Fredlund sent in this comparison of QEDIT and
  111.  Toolset (HP's veteran "extra-cost" screen editor, not to be confused with the
  112.  new HP Edit):  "This example shows a comparison for a project involving three
  113.  programmers and a total of 42 Cobol and Pascal programs."
  114.                                 Toolset             QEDIT
  115.  Disc space for source code    65,000 sectors      5,400 sectors
  116.  Compilation of typical COBOL program  120 seconds  48 seconds
  117.     For large Cobol programs, it was faster to exit Toolset, compile and
  118.     start Toolset again than compile from Toolset.
  119.  Environment                   One workspace for   QEDIT used for all
  120.                                COBOL, one for Pascal,  COBOL, Pascal,
  121.                                Editor for Job streams,  Job streams and
  122.                                and Macintosh for doc.   documentation.
  123.  Several programmers           A workspace needed  All code shared,
  124.                                per programmer,     no duplication.
  125.                                duplication of code.
  126.  Renumber and Screen editing   The new screen shows  The new screen
  127.                                new line but same   shows same line,
  128.                                line number!        new line number.
  129.  Add code in full screen       Run out of line     Handles a lot of lines.
  130.                                numbers after a few lines.
  131.  We always use separate development and production accounts.  This is trivial
  132.  using QEDIT, but caused us some problems using Toolset; it is impossible to
  133.  copy a whole Toolset environment from one account to another because some
  134.  file names cannot be changed." [Gunnar]
  135.  Gunnar Fredlund is the president of Nord Software in Santa Barbara
  136.  California, a software consulting firm with extensive experience in HP 3000s.
  137.  Telephone:  (805) 652-4179.
  138.  
  139.  What If...  "I get my best ideas in the shower, but I forget them by the time
  140.  I get out."  A common complaint.  But here's an idea: keep a microcassette
  141.  recorder in the shower, in a Ziploc-type bag.  An alternative: mount a
  142.  write-on/wipe-off board in the shower.
  143.  
  144.  Predictive Support.  You don't necessarily need a HP Support Link modem to
  145.  make HP Predictive Support work.  A Hayes-compatible modem will do the job
  146.  nicely.  One gotcha, though, is that Predictive will send the string "ATZ" to
  147.  the modem, looking for a response of "OK".  If your modem has response codes
  148.  disabled, Predictive will not be able to dial out, because it won't be able
  149.  to figure out what kind of modem it's talking to.
  150.  
  151.  
  152.                 Mental Migration from MPE-V to Spectrum Part 2
  153.                      By Jeff Kell, UTC Computing Services
  154.                         Reprinted from SIGED Newsletter
  155.  
  156.  Following the manager's course, I was scheduled for the programmer's
  157.  migration course.  This was a rather intensive 6-day class which has since
  158.  been divided into two parts for future generations (and a good idea since you
  159.  are well saturated with new information by this time).  We learned about the
  160.  various Native-Mode compilers, the Compatibility-Mode emulator, TurboIMAGEXL,
  161.  and touched on Native-Mode stacks and debugging.  We also learned about mode
  162.  switching, which concerned me, due to our robust library of SPL utilities.
  163.  
  164.  The first lab involved Compatibility Mode, object code translation, and
  165.  Native Mode comparisons.  Understanding just what these things are is one of
  166.  the primary keys to successful "mental migration" and subsequent sanity, and
  167.  I would like to elaborate further.
  168.  
  169.  MPE XL contains a Compatibility Mode (CM) Emulator which is logically
  170.  equivalent to the microcode on a Classic 3000.  It reads Classic code as data
  171.  and executes it like an interpreter, simulating all of the hardware features
  172.  of the Classic 3000 in the process.  The emulator is so good that initial MPE
  173.  XL releases contained only a small kernel written in Native Mode and the rest
  174.  was MPE-V being fed into the CM emulator.  This is also one of the primary
  175.  reasons that early MPE XL systems had such poor performance:  a Series 930 in
  176.  Compatibility Mode is essentially a Classic Series 70.  Later versions of MPE
  177.  XL contain more Native-Mode code as the CM code is phased out, but some
  178.  subsystems remain in CM such as KSAM, FCOPY, EDITOR, etc.
  179.  
  180.  Now the important part that many people missed:  you don't really lose much
  181.  of anything by moving to a Spectrum.  You heard, no doubt, that it doesn't do
  182.  SPL.  Horsefeathers.  It compiles SPL (running the compiler in CM), PREPs the
  183.  USL (using Segmenter in CM), and RUNs the program using the CM emulator.  We
  184.  are currently doing program development and maintenance for our 58 on our
  185.  950; it is quite capable of generating CM programs which will run on a
  186.  Classic system.  The only thing you cannot do is get native mode code from an
  187.  unsupported CM language like SPL, FORTRAN 66, old vanilla BASIC, COBOL 68,
  188.  RPG, and so forth.
  189.  
  190.  Next comes "translated code" which is CM code that has been fed into the
  191.  Object Code Translator (OCT).  If you can picture the emulator operating by
  192.  fetching an instruction, decoding it, and branching off into an appropriate
  193.  emulation routine, then translated code removes the first two steps.  OCTCOMP
  194.  replaces the CM instructions with a series of procedure calls into the
  195.  emulation routines, and then optimizes the resulting code.  The final product
  196.  is appended to the CM program file transparently (if you accidentally move an
  197.  OCT-program to a Classic system, it will run, but you waste the file space
  198.  containing the translated code).
  199.  
  200.  Finally, we have "Native Mode" (NM) code.  This is a program which was
  201.  compiled using a NM compiler and "linked" with the NM link editor.  It
  202.  executes entirely in Native Mode, and may execute much faster than the
  203.  previous two forms.  The NM compilers provide optional optimization to
  204.  increase the code efficiency even further.  As an assignment, we ran a
  205.  FORTRAN benchmark to generate prime numbers.  The results:
  206.         * Compatibility Mode   - 3.34 seconds CPU
  207.         * Translated code      - 1.56
  208.         * Native Mode          - 0.89
  209.         * Native optimized     - 0.83
  210.  I later ran a Whetstone benchmark on our 58 and 950:
  211.         * Series 58            - 222 seconds CPU
  212.         * Compatibility Mode   - 214
  213.         * Translated code      - 110
  214.         * Native optimized     -  22
  215.  The Whetstone code was an unusual case for us to compare against, as it is
  216.  almost exclusively floating-point number crunching with calls to mathematical
  217.  library functions.  For our typical COBOL/IMAGE applications we found that,
  218.  in general, Compatibility Mode was four times faster (ie, 75% reduction) that
  219.  the Classic 58, and Native Mode was twice as fast (ie, 50% reduction) as CM.
  220.  This yields an average rule of thumb that the 950 in Native Mode is eight
  221.  times faster than our 58.  later.
  222.  
  223.  Finally we began working with the compilers themselves.  The most immediately
  224.  obvious difference is speed of compilation; they were ridiculously fast even
  225.  on the 930 (granted, they were small class assignments, but it still "felt"
  226.  faster).  A compile, link, and go will flash by the screen faster than you
  227.  can read it.  This is even more dramatic now that we are compiling our own
  228.  real programs.  On previous systems, we have a de-facto standard that we
  229.  always run noncritical compiles in batch due to (a) impact on other
  230.  interactive work and (b) length of time it takes to compile.  On the 950, it
  231.  takes longer to build a compile job stream than to simply compile it
  232.  interactively.  One of our largest programs (8500 lines plus many included
  233.  COPYLIB modules) takes 241 CPU seconds to compile on the 58; this amounts to
  234.  about 8-10 minutes wall time if nobody else is doing anything significant.
  235.  The same program compiles on the 950 in 24 seconds, typically less than a
  236.  minute of wall time.
  237.  
  238.  The next difference is both a "mental migration" issue and a "warm fuzzy"
  239.  feature.  If you turn on MAP or VERBS in COBOL (or equivalent in another
  240.  language) you are in for somewhat of a surprise.  First, values are in
  241.  hexadecimal.  Yes, hex.  You can say so long and good luck to accumulated
  242.  octal trivia; a string of four blanks is no longer %020040 %020040 but
  243.  instead $20202020 (32-bit machine now, so we group bytes in fours!).  You can
  244.  also say goodbye to uppercase symbols, as all procedure labels and so forth
  245.  are now lowercase by default.  Now the "warm fuzzy" feature:  resolving
  246.  addresses of data and/or code.  All data references are byte addresses
  247.  relative to the Native-Mode data pointer (DP), and they are enclosed in one
  248.  linear space.  No more bother about DB+/Q+/S+/byte/word confusion, all the
  249.  map addresses are straightforward offsets from DP.  Procedures and code are
  250.  relative to the current "chunk" (segment) of code, but you only have one
  251.  "chunk" to deal with unless you have an extremely big COBOL program (only
  252.  COBOL chunks its code) or call a subroutine that is outside the current
  253.  compilation.  Typically there is only one, and in any case the offset is
  254.  direct and straightforward; no more worry with P+/PB+/PL-/STT/segment
  255.  translation.  And in the event that your program aborts, the "tombstone"
  256.  gives the "chunk" or procedure name and the offset (it stores this symbolic
  257.  information in the program file).  Very straightforward.
  258.  Now, unless you are very brave, do not dive right in with DEBUG.  If you ever
  259.  need to be reminded just how much you really don't know about Spectrum, use
  260.  DEBUG.  One of the largest and most confusing manuals you will get with MPE
  261.  XL is the System Debug manual.  If you just want to do something
  262.  straightforward (like you might do on the Classic) it is very nice and almost
  263.  friendly.  But it has a host of features that I cannot begin to explain.  For
  264.  example, it can process a system dump, process macro files, format system
  265.  tables or user-defined structures in memory, and other esoteric things.  It
  266.  has its own command language, variables, functions, and macros.  DEBUG even
  267.  does windows.  In CM DEBUG, you can turn on windows and get the important
  268.  registers at the top of the screen, the current block of instructions next, a
  269.  specified DB, Q, or S relative data area at the bottom (in decimal, octal,
  270.  hex, or ASCII); you can then single step one instruction at a time, and any
  271.  screen value that changes during that cycle will be highlighted for you.  You
  272.  can even open a text window and display your source file inside it.  I'm
  273.  certain that it is an amazing little creature, but with everything else I
  274.  need to be learning now, the sheer magnitude of it scares the heck out of me.
  275.  Classes are finally over, and its back to Chattanooga for a two week break
  276.  before our scheduled week at the Atlanta Migration Center.  We select a very
  277.  large COBOL application with subroutines to convert, and begin to collect
  278.  source for the SPL procedures that will require mode switching procedures (to
  279.  allow NM code to call CM subroutines).  We had learned about them in class,
  280.  they seemed to be fairly simple.  You run a menu driven program called SWAT
  281.  (SWitch Assist Tool) and it generates a Pascal program for you.  You compile
  282.  the Pascal code and link it into an XL file (an NM SL) and it performs the
  283.  magic that will keep you afloat until you convert the SPL to "something"
  284.  native.  That was still somewhat of a scary issue, especially since we had
  285.  identified nearly 100 SPL utility routines.
  286.  A colleage and I, armed with recent backup tapes, arrived in Atlanta somewhat
  287.  cautiously optimistic.  After obtaining necessary badges and clearance
  288.  (unlike the flashy showrooms downstairs, the migration center was located on
  289.  an HP staff floor) we met our second Spectrum.  It was a 930 without much
  290.  memory, but it did have a recent MPE XL release.  In fact, it was one of the
  291.  original systems that I feel sure would have stories to tell if it could
  292.  talk.  Unlike the 930 in Rockville, there was no identification on the box at
  293.  all other than a nameplate in the upper left corner with the familiar HP logo
  294.  and one word:  INDIGO.  Yes, this was one of the prototypes, and it had never
  295.  officially been dubbed a 3000 or 9000.
  296.  A 3000 or 9000?  They sure look alike, don't they?  Many people have wondered
  297.  just what the difference is, and nobody will say officially.  If you strip
  298.  off the peripherals, there is no obvious difference other than the nameplate.
  299.  But what else?  The unofficial word says only a few bits in a ROM in the
  300.  "Processor Dependent Hardware" board.  Can a 3000 run Unix?  If you get a
  301.  chance, watch your CE when he does diagnostics on your 3000.  You get a tape
  302.  called the "HP-UX System Diagnostics" that the CE will load and promptly
  303.  logon as 'root' on the console (yes, folks, that really was a Unix kernel).
  304.  To make matters more mysterious, recall the ISL program I mentioned from the
  305.  startup procedure?  Your CE gave it a Unix load command to get the kernel in
  306.  the first place, and it understood it!  If you figure out how to get DEBUG to
  307.  scan through low memory addresses while MPE XL is running, you will find
  308.  things like "HP-UX SLLIC Assembler 1.4 (c) 1984, Hewlett-Packard Co." and the
  309.  like.  So, can a 3000 run Unix?  Probably, unofficial word will not say no.
  310.  Can a 9000 system run MPE?  No idea, unofficial word says no.  But back to
  311.  migration.
  312.  We created the necessary accounts and restored the production IMAGE databases
  313.  and related files.  First test was to verify Compatibility Mode; should be a
  314.  piece of cake, :RUN REGISTER.PUB;LIB=P.  The system gave the familiar
  315.  linefeed after loading the program and...  nothing.  No abort, no message,
  316.  nothing; the system appears to be in a loop.  Well, perhaps it was just a
  317.  fluke, and another program might be more appropriate.  Break, :ABORT, :RUN
  318.  GETSCHED.PUB;LIB=P.  Linefeed and nothing, looping again.  I feel sick, and
  319.  my SE stopped smiling.  The migration specialist comes over for a look,
  320.  verifies the loop, looks over the code, then looks puzzled.  I feel faint, my
  321.  SE looks at the migration SE, he looks out the window.  We try again, with
  322.  ;DEBUG, and turn on windows, and after several instructions the loop appears.
  323.  Our programs use an SPL procedure for initialization of the terminal I/O
  324.  routines that we use.  This routine does the old familiar method of tracing
  325.  back down through the stack markers to find the PARM and INFO values.  I was
  326.  burned by this one when we installed MPE-V/E with new firmware, but that
  327.  error caused bounds violations.  Could this be related?  Yes, indeed it was;
  328.  CM uses pre-V/E stack markers, and the code was looping on a Delta-Q value of
  329.  zero.  One quick SLPATCH session later, everything was working in CM, my SE
  330.  was smiling again, and I was regaining my appetite.  We tried other programs
  331.  and found one additional bug, also due to the SPL procedures.  A common
  332.  database open routine, leftover from the days of the Series III, was reading
  333.  the system switch register to check for the 0-bit being set (an old mechanism
  334.  we used to disable database access).  Compatibility Mode appears to assume
  335.  the "Read Switch Register" instruction is privileged.  One more SLPATCH and
  336.  all is well.
  337.  Despite initial fears, everything was indeed now working in CM, and the
  338.  response time was much better than ever experienced.  We streamed several
  339.  batch reports (in CM) and were amazed at the results; after using OCT on some
  340.  selected programs the results were even better.  At least now I felt
  341.  confident that I was "at least" getting a faster Classic 3000, whether the
  342.  migration to Native Mode was done or not.  In other words, compatibility was
  343.  now confirmed and I felt much more secure; with two minor exceptions, CM was
  344.  indeed working.
  345.  The remainder of the day was spent creating "stub" procedures with SWAT so
  346.  that we could interface the existing SPL library routines with an NM COBOL
  347.  program.  As soon as enough stubs were complete to test a small application,
  348.  we gave it a try but it was quite a disappointment:  we got the Native Mode
  349.  equivalent of a bounds violation.  Stubs were checked, code was checked,
  350.  traces were added, phone calls were made, and my SE stopped smiling again.
  351.  By the close of the day we had discovered the problem:  another SPL quirk.
  352.  Our terminal I/O routines are called with four parameters, but we soon grew
  353.  tired of coding "CALL" statements with the full complement of parameters.
  354.  The initialization routine was altered to store the parameter addresses in
  355.  the DB-negative area, and a secondary entry point to the I/O routines was
  356.  created that could be called without any parameters (it retrieved the
  357.  addresses stored earlier).  Because of the way the stub procedures operate,
  358.  this scheme fails for reasons too intricate to explain in detail here.
  359.  To make a long story short, a workaround was devised using global pointers
  360.  within the stub by manually modifying the stub source.  The first variation
  361.  on this idea involved modifying the calling program source code to declare
  362.  externals (not terribly desirable) but a later idea spawned an experiment
  363.  Friday morning to link the global pointers between the initialization stub
  364.  and the I/O stub through an RL.  This worked, and negated the need for source
  365.  code modification.  It also negated our source conversion for the week (done
  366.  with source changes) but we did produce a fully compatible stub library we
  367.  eventually used in the live migration.  In spite of several close calls and
  368.  the near panic caused as a result, the overall week was very productive.
  369.  The next few weeks were spent playing the "waiting game" as various
  370.  components of the system were delivered.  One morning a driver came in with a
  371.  delivery of 400 pounds in one carton.  I expected a printer but the carton
  372.  contained manuals, 39 of them, in navy blue "MPE XL" binders.  These were the
  373.  MPE XL FOS manuals; no purchased software, only the basic manuals.  I
  374.  replaced my nine V/E FOS manuals (and quite a bit of other shelf space) with
  375.  the XL manuals.  Welcome to MPE XL.
  376.  Finally, everything else is in place, and the CPU arrives by padded truck.
  377.  ...
  378.      { to be completed next month}
  379.  
  380.  
  381.  
  382.  
  383.  
  384.  
  385.  
  386.                           Introducing Barbara Janicki
  387.  
  388.  About a year ago, Robelle went looking for an official technical writer to
  389.  replace our amateur-programmer efforts.  After wading through 350 resumes and
  390.  interviewing 11 people, we settled on Barbara Janicki.  Despite her continual
  391.  commuting between East and West Canada, we all agree we made a good choice.
  392.  Barbara has been busy updating manuals, generating Quick Reference Guides and
  393.  data sheets, creating Novice Guides and Tutorial packages, and generally
  394.  upgrading the quality of all of our words.   ...  Here is how Barbara
  395.  describes it:
  396.  
  397.            Insight to Robellian
  398.            By Barbara Janicki
  399.            Rebellion brewed.  The crew were few.
  400.            Far between were their coffee breaks.
  401.            The programmers too were sullen.
  402.            We would write code, they cried,
  403.            Not documentation, a dull endeavor,
  404.            That gives us belly aches.
  405.  
  406.            Passage of Xpress messages lit them.
  407.            Clamshells gleamed in pallid acclaim.   {Literary Hint, clamshell =
  408.            Laptop!}
  409.            They were revolting.
  410.            Step-by-step, item-by-item,
  411.            Bit-by-bit, name-by-name:
  412.            Someone to compile help files
  413.            And do proof-reading.
  414.            Someone with the wiles
  415.            To drain the blustery bloated boils of redundancy,
  416.            And to uncoil the word-snakes' nests
  417.            That clustered like the cables
  418.            Beneath their desks.
  419.  
  420.            Plain-spoken, word-warden, I
  421.            Met the three jewelled disputers;
  422.            I knew something of computers--
  423.            PCs only--but curiously
  424.            Intrigued by IMAGE, a reader
  425.            Eager To re-do or
  426.            To champion their bulletins.
  427.            They tried my skill in tons of tests,
  428.            And asked for my degree defense.
  429.            I passed my word to furnish reference
  430.            Manuals; to burnish brighter
  431.            The enhancement requests;
  432.            To be their Technical Writer.
  433.  
  434.            Their hearts leapt up, as they beheld
  435.            Time to compile! time enough to run!
  436.            So it was when I began.  Meanwhile,
  437.            We shared some cookies; and so
  438.            Passed the year since they rebelled.
  439.            When nothing else exists you'd rather do,
  440.            You cannot really call it work, can you?
  441.            Let them write code.
  442.  
  443.  
  444.  
  445.  
  446.  
  447.  
  448.             Robelle Products:  Problems, Solutions, and Suggestions
  449.  
  450.  SUPRTOOL  Version 3.0
  451.  
  452.  Non-Collating Dates.  Because dates in DDMMYY form do not collate correctly,
  453.  SUPRTOOL does not support greater-than type comparisions on them (only strict
  454.  equality or non-equality).  For example:
  455.      >input myfile
  456.      >define mydate,1,6         {first six bytes are date}
  457.      >item mydate,date,DDMMYY   {sample date =  251188}
  458.      >if mydate >= $date(88/11/01)    {compare would fail!}
  459.      ERROR: Invalid date format for comparison
  460.  Workarounds:  Because this particular date field is X-type (character), the
  461.  DEFINE command can isolate the day, month, and year portions of the date.
  462.  With these new fields, it is usually possible to select for specific date
  463.  ranges.  However, the $DATE and $TODAY features are not available and this
  464.  technique does not work for J2 dates.
  465.      >define myday  ,1,2
  466.      >define mymonth,3,2
  467.      >define myyear ,5,2
  468.      >if myyear >= "88" and mymonth >= "11"
  469.  Alternative For Any Date Type:  Since date selection is often for a single
  470.  month, create twelve files, one per month, each containing the valid dates
  471.  for the month.  Then load the file into a TABLE and use $LOOKUP.  (In
  472.  SUPRTOOL 3.0, you must re-DEFINE J2-type dates as X-type, but it still
  473.  works).  You could use this same scheme to select any small subset of dates:
  474.      >table daytable,mydate,file,march
  475.      >if $lookup (daytable,mydate)
  476.  
  477.  Checking A Byte For A Numeric Value? SUPRTOOL does not have one-byte
  478.  integers, making it it difficult to check a single byte for a specific
  479.  numeric value.  Use a two-byte integer DEFINE field and the bit-extract
  480.  operator to solve this problem:
  481.      >define word,transcode,2,integer
  482.      >if word.(0:8)=13
  483.  
  484.  Instant Mailing Labels You want to extract NAME, ADDR (3X40) and PHONE and
  485.  print each on a separate line.  How to do it?  DEFINE a two-byte integer
  486.  field named CRLF and use it between each EXTRACT field, set to the value 3338
  487.  (%6412, which equals CR and LF).
  488.      >define crlf,1,2,integer
  489.      >extract name,crlf=3338,addr(1),crlf=3338,addr(2),&
  490.      >crlf=3338,addr(3),crlf=3338,phone
  491.      >output *
  492.  
  493.  QEDIT  Version 3.7 and 3.7.1
  494.  
  495.  FTN 77 A.01.00 Patch.  V-Delta-4 contains a version of Fortran 77 that goes
  496.  into an infinite loop when you attempt to feed it a QEDIT source file.  This
  497.  patch fixes the problem, and the second part allows the compiler to read
  498.  temporary source files:
  499.      :run patch.pub.sys
  500.      File=ftn.pub.sys
  501.      ?m,32,10125
  502.      051404,140050     {endless loop}
  503.      ?m,32,10054
  504.      041403,021003     {temp files}
  505.