home *** CD-ROM | disk | FTP | other *** search
/ Amiga Elysian Archive / AmigaElysianArchive.iso / screen / jazzbenc.zoo / README < prev    next >
Text File  |  1989-03-06  |  15KB  |  335 lines

  1. ===============================================================================
  2. -------------------------------------------------------------------------------
  3. ----------------------J A Z Z B E N C H  (alpha 0.8)---------------------------
  4. -------------------------------------------------------------------------------
  5. ===============================================================================
  6.     
  7.     Welcome to my Workbench replacement program!  I haven't decided on a
  8.     name yet, but I've tentatively named it JazzBench.
  9.     
  10.         JazzBench (0.8) Copyright 1989 by David Navas
  11.         ALL RIGHTS RESERVED.
  12.         
  13.     Of course, this will have to change as code is written by other people,
  14.     but all of these details can be worked out later (unless someone
  15.     else finds some pressing need...).
  16.     
  17.     
  18.     Starting up:
  19.     0) copy <this disk>:libs/ppipc.library libs:
  20.         1) assign wb: <this disk>:wb
  21.         2) wb:wbsetup
  22.             This works much better if done BEFORE loadwb has executed...
  23.         (suggestion -- put it into your s:startup-seq.)
  24.     3) wb:wbaudio wb:hal9000  (for a cool beep...)
  25.     Caveats:
  26.     
  27.         The code for this set of programs does not comfortably fit into 
  28.     a 512k computer.  If you've got a 512k computer -- return my disks!
  29.     (sorry, maybe we can work out something when code has been translated
  30.     into assembly...)  Actually -- try running the program without
  31.     wb:WBrefr, wb:wbcal, wb:wbabout, etc., and wb:WBaudio.
  32.     In order to accomplish this, edit the file wb:startup and erase the line
  33.       with wb:wbrefr, wb:wbcal, etc., leaving only WBserver, WBwindow,
  34.       and WBinput.  Don't execute the wb:wbaudio command.
  35.     Do the words I wanna Fat AGNUS ring a bell with anyone?   sigh.
  36.     
  37.     
  38.  
  39.     The programs:
  40.         1] WBsetup -- is now responsible for sending properly placed
  41.             default images, etc. to wbserver.  It opens the backdrop
  42.             window and attaches the default Menu to it.  It then starts
  43.         WBdisk.  Searching the startup file it starts whatever programs
  44.         it finds there.  It then waits for WBserver to request all of
  45.         WBsetup's default material, and then passes it on.
  46.     
  47.             WBsetup opens a default configuration file and get its default
  48.         images, programs-to-start, etc. from there.
  49.             See info on MenuItem 'LibEdit', for whatever further information
  50.         is available.
  51.  
  52.         2] WBserver -- handles all message passing between the different
  53.             WorkBench programs.  It is the program which handles all of
  54.             the interpretation of IPCMsg Ids, and figures out to which
  55.             programs what messages will be sent.  This is where hooks
  56.             have been attached to intercept certain types of Ids and send
  57.             them to some custom program.  (See WBcool)
  58.  
  59.         3] WBwindow -- in theory, handles Window graphic activities.  All
  60.             scrolling (selected icons and window icons), Icon placement &
  61.             display, and window OPENs are done here.  However, not all
  62.             the DrawImage()s are done here.  Some errant ones may still
  63.             be done in WBdisk (when the backdrop disk icons are removed).
  64.     
  65.             For the most part, WBwindow is complete and in its final form.
  66.             The code has been drastically cleaned (no more 3 page-long
  67.             if-then statements...).  I don't see how much else will change.
  68.         Probably will display more info about files under TEXT windows.
  69.  
  70.         4] WBinput -- obviously handles all IntuiMessages sent to the
  71.             JazzBench IntuiPort.  Has some (perhaps) curious flags which
  72.             keep track of MouseMove messages:  when another message is
  73.             available;  what window ReportMouse activated;  etc.  This is
  74.             very important as all refreshes occur here as well.  This
  75.             ought to be a message handled by WBwindow -- and will be.
  76.             Unfortunately, every once in awhile my program and Intuition
  77.             appear to fight over who reigns over refreshing, and the
  78.             window borders remain unrefreshed.  I believe it has something
  79.             to do with what I'm doing with Begin/EndRefresh(), but I'm
  80.             not sure.  Any bug fixes -- or firm ways in which to get this
  81.             to reoccur are welcome.  (I believe this has been fixed since
  82.         last version)
  83.             WBinput also handles the stripping of the MsgPort, Menus, etc.
  84.             before a window is closed -- and puts this same information
  85.             back into the window structure when it is opened.
  86.  
  87.         5] WBdisk -- currently referred to (fondly?) as THE MONSTER.
  88.             This is the program that needs the most attention, before
  89.             it makes the disk too heavy to lift ;-}.
  90.     
  91.             Anyhow, WBdisk takes care of all disk copies, renames, deletes,
  92.             directory searches (valid form, and fastdir method from Amazing
  93.             Computing), icon retrievals, etc.  It is also in charge
  94.             of Trash emptying (just a delete, right?), icon saves, and
  95.             other stuff that I'm sure exists but doesn't come to mind
  96.             right now.
  97.     
  98.             There are at least two bugs in this program.  It doesn't
  99.             react properly to the 1.2 RamDisk.  Rename sometimes doesn't
  100.         return the error code correctly.
  101.     
  102.         6] WBlist -- an outdated program, now that Hidden (the MenuItem)
  103.             works.  It lists the directory of the window in which you
  104.             press the HELP key.  Cute, but only useful for some debugging
  105.             operations now.
  106.     
  107.         7] WBcool -- gives that MKnTOSS (:-)) look for the opening/closing
  108.             of windows/icons.  Mostly a demonstration of some code
  109.             for intercepting messages.
  110.     
  111.         8] WBrefr -- intercepts the refresh message and acts accordingly
  112.             with the knowledge that there is now a patterned backdrop
  113.             on the BackDrop window.  I suppose this could be enhanced
  114.             to include putting an IFF picture onto the background.
  115.         8.5] WBcolrefr -- same as WBrefr -- different pattern  (really
  116.         hideous).
  117.  
  118.         9] WBaudio -- reads in a binary dump of an audio sound and sends
  119.             the new data to WBserver to serve as JazzBench's new beep
  120.             sample.  I like HAL9000 myself (being a Dave...).
  121.  
  122.     10] WBabout -- the about window demoing graphic menu additions
  123.  
  124.     11] WBleodie -- In the tradition of Leo Schwab (forgive my
  125.         misspellings), a cute way to kill a window when it's
  126.         closing.
  127.  
  128.     12] WBiconize -- iconizes the current window.  Needs to put the icon
  129.         in a more visible place.  (Shoot, it needs a real icon,
  130.         really).  Currently some text of the icons end up to
  131.         the left of the screen.
  132.     
  133.         
  134.     Usage:
  135.     
  136.        Well, all menu items are always on -- although that is perhaps not
  137.     the best way of doing things.  If something is not available, JazzBench
  138.     will beep.  Notice the lack of a ZZpointer.  The only
  139.     time that you are prevented from getting an immediate response from the
  140.     program is when the program is LoadSeg'ing another program, or WBdisk
  141.     is trying to do a copy to prt: or something that takes a long time --
  142.     although input requests ARE queued (be patient...).
  143.     
  144.     Menus:
  145.     USER:
  146.       custom programs put menuitems and stuff here.
  147.     FILE:
  148.       OPEN -- opens the current Select List.          Amiga-O
  149.       CLOSE -- closes the active window.
  150.       COPY -- copies selected objects.                Amiga-C
  151.       RENAME -- renames first object on Select List   Amiga-R
  152.       DELETE -- deletes all objects on Select List    Amiga-X
  153.       INITIALIZE -- the disk format
  154.       MAKE DRAWER -- makes a directory with          Amiga-M
  155.         default icon
  156.       ASSIGN -- will assign <selected object's name>: Amiga-@
  157.                 to the object.
  158.       EXECUTE -- executes script with IconX
  159.  
  160.     SYSTEM:
  161.       EMPTY TRASH -- obvious
  162.       CLIPBOARD -- the non-existent program which
  163.                   I'd like to have show clipboard contents.
  164.             (Anyone want to write one?)
  165.       INFO -- hey, talk to David S. King about this one.
  166.       LIBEDIT -- edit the config and startup files which define
  167.                 startup conditions:
  168.     Device Copy:  am't in bytes to transfer to a non-disk format (eg.
  169.             prt:)
  170.     File Copy:    am't in bytes to transfer between disks at one time
  171.              interval
  172.     Menu: MenuTitle.  Use arrows to scroll.
  173.     Item: Title (if TEXT!)  Use arrows to scroll.
  174.     Command: keyboard equivalent of current MenuItem (if any -- bug if
  175.         Item not TEXT)
  176.     Assign:  command the ASSIGN menuitem calls.
  177.     DiskCopy: not used -- DiskCopy gets it's default ToolName from the
  178.       DefaultTool in the Disk Icon.
  179.     Format:  command INITIALIZE calls.
  180.     INFO:  Not used, really.
  181.     LibEdit: the program LibEdit runs.
  182.     New Drawer -- title of new drawer that MAKE DRAWER creates.
  183.     Title -- screen title.
  184.     Startup -- list of files started on entry.  Must include WBwindow,
  185.         WBinput, WBserver!
  186.  
  187.       LAST ERROR -- displays last error              Amiga-E
  188.       VERSION -- displays version              Amiga-V
  189.       STOP ALL COPYING -- stops any copying the
  190.               program is doing.
  191.       SHOW DEVICES -- shows devices available
  192.  
  193.     ICONS:
  194.       SHOW HIDDEN ICONS -- shows hidden icons..       Amiga-H
  195.       SHOW TEXT -- show icons as text titles only     Amiga-T
  196.       ORIGINAL ICONS -- show normal icons only        Amiga-N
  197.       ALPHABETIZE -- alphabetize the text-only          Amiga-A
  198.                   windows
  199.       SNAPSHOT -- due to user demand, I'd like a      Amiga-S
  200.         mask to determine just what information to
  201.         save, and what information to leave intact.
  202.       REDRAW -- redraw, refresh window/gadgets
  203.       CLEAN UP -- reorganize icons.
  204.       PUT AWAY -- ever want to rid youself of those   Amiga-P
  205.        pesky icons you've left on the backdrop window?
  206.     Well, PUT it AWAY...
  207.       CYCLE COLORS -- change window colors          Amiga-=
  208.     
  209.  
  210.     Interesting stuff:
  211.       SHIFT-CTRL-LEFTMOUSE unselects a selected icon without loosing
  212.           the rest of the selected icons.
  213.       Drag-starts.  Drag POroject onto Tool.
  214.       
  215.       There are 12 ways to add ports and intercept messages from WBserver:
  216.          GADB, GADA -- intercept GADG, GADU, GADD, DOUB, MOUS, CLOZ messages
  217.        (Before/After) WBserver does its 'thing'
  218.        GADU -- GADGETUP
  219.        GADD -- GADGETDOWN
  220.        GADG -- obj selected
  221.        DOUB -- open this obj
  222.        MOUS -- MOUSEBUTTONS
  223.        CLOZ -- CLOSEWINDOW
  224.      MENB, MENA -- intercept all Menu commands.
  225.      KEYB, KEYA -- intercept all RAWKEYS
  226.      REFB, REFA -- intercept REFRESHWINDOW
  227.      DSKB, DSKA -- intercept DISKINSERTED/REMOVED
  228.      WINB, WINA -- intercept Window Open events (window already open --
  229.              intercept before/after WBinput and WBdisk changes
  230.             UserPort/gets directory/etc.
  231.      see ipc.h, WBserver.c, and example programs for implementation
  232.              details.
  233.       
  234.  
  235.     Known Bugs:
  236.        Locking problems with 1.2 Ram Disk.  (get 1.3...)
  237.        Disk whirs a lot when deleting lots of files.  Not a bug, just getting
  238.            all the necessary locks.
  239.        WBLibEdit -- Command key not recognized if MenuItem not TEXT upon
  240.                    startup
  241.        Rename does not return the correct error code.
  242.        WBcal does NOT work completely well with A1000 keyboards --
  243.            no divides/multiplies.  Fix as you'd like.
  244.  
  245.     To be added:
  246.     
  247.        WBLibEdit needs to be made pretty printed.  
  248.        Better support for text listings/edits.  (see BackDropPass in jb.h)
  249.        WBserver needs to be cleaned as far as ports/names are concerned.
  250.             (why is a CLOZ sent within a GADG scope? -- I don't
  251.              know either, it seemed best at the time...)
  252.        WBdisk may get better hooks -- need to compress COPY code.
  253.        WBiconize needs to be prettied-up.
  254.        WBaudio/server needs layering (multiple sounds for different msgs)
  255.        WBserver port adds need to use ln_Pri bits.
  256.        TEXT windows will display more info about the files (creation dates/
  257.                etc.)
  258.     
  259.  
  260.  
  261.     Compiling:
  262.     Unlike the rest of the world, I haven't learned how to use make files
  263.        efficiently -- so here's how to compile my program.
  264.  
  265.     If you can precompile jb.h, that'll help, otherwise uncomment the
  266.        #include "jb.h" in the program.
  267.     You will need ipc.lib for linking all programs
  268.        which use the ipc functions (as in, all of these programs...)
  269.     Now compile the program and link in with ipc.lib
  270.  
  271.     Note: please use long (32 bit) integers
  272.     
  273.     Writing support routines:
  274.     For a good idea of what goes on, see WBserver.c.  You may
  275.         intercept six kinds of messages -- refresh, raw keycodes,
  276.         menu operations, disk inserted/removed, window opened, 
  277.         and gadget type messages.  You may intercept these messages
  278.         either before or after the program is done with them.  The Id
  279.         to pass in the IPCMessage is something like GADA, GADB (for
  280.         GADget After, GADget Before), MENA, MENB, etc.  To remove, the
  281.         Id will look something like RMEN, RKEY, RREF (for Remove MENu,
  282.         Remove KEY, Remove REFresh).  See ipc.h for IPCMessage format.
  283.          Also see example programs
  284.  
  285.     You might try an online HELP guide to the program.  Or even nioer,
  286.         a menu item to reload the directory of an already open window.
  287.         Be careful to de-allocate the previously allocated directory
  288.         list stored in obj->wo_DrawerData->dd_Dir.  When the menuitem
  289.         is selected, dd_Dir is cleared and freed, and a WIND message
  290.         is sent to WBserver.  Now that I think about it, I might just
  291.         write it to see how it works.
  292.  
  293.     Try using the GlobalInfo (reported back from server when you 'RINF'
  294.                               it [puts into msg->ipc_Items[0].ii_Ptr]) 
  295.         ->showtext to write a simple showtext.  IE. program puts
  296.         a menuitem into menubar with 'MIAL', waits for it to be selected,
  297.         then sends a 'RUN ' with Items[0].ii_Id = GlobalInfo->showtext,
  298.         and Items[0].ii_Ptr = GlobalInfo->Select;
  299.  
  300.     Experiment, and REPORT BUGS!!!
  301.  
  302.     
  303.     Until next time, ideas, etc. welcome at:
  304.     
  305.     David Navas
  306.     1918 Hackett Ave.
  307.     Mt. View, CA 94043
  308.     (415) 967-2382  (voice only -- unless some kind gent wants to donate
  309.                      a modem...)
  310.     you can try to send messages to c60c-1ea@WEB.Berkeley.Edu  but that
  311.     account closes in June, I'll try to post new accounts later.
  312.     
  313.     Thank YOU very much for your time and effort in this project.
  314.     Hopefully others will appreciate it also -- and not to far off either...
  315.     
  316.     
  317.     
  318.     Many thanks go to the author of Hackbench, without whose code I would
  319.     not have had the guts to write this program (and no idea of
  320.     how to write some of it).  Also my deep thanks to Dave H. who
  321.     wrote the fastdir algorithm making those idiot .info files
  322.     found in all directories to be pretty much useless and
  323.     unnecessary.  And last but not least, thanks to Pete Goodeve and
  324.     Peter da Silva for thrashing out the IPC code used for all of
  325.     my communication needs.
  326.  
  327.     All code compiled by Manx 3.4a compiler -- feel free to modify to
  328.     whatever extent necessary in order to work with other compilers.
  329.  
  330.  
  331.                     Until next we meet,
  332.  
  333.  
  334.                     David Navas
  335.