home *** CD-ROM | disk | FTP | other *** search
/ GEMini Atari / GEMini_Atari_CD-ROM_Walnut_Creek_December_1993.iso / files / bbs / fn132bin / fdman / chapter.11 < prev    next >
Text File  |  1991-09-03  |  13KB  |  252 lines

  1.  
  2.  
  3. Chapter 11:  Shells vs.  the Desktop                                     143
  4.  
  5.  
  6.  
  7.  
  8. 11  Shells vs.  the Desktop
  9.  
  10.  
  11.    On the  Atari  ST, the  standard  environment is  the GEM  Desktop  (that
  12. screen full of disk drive  icons, windows, pull-down menus and so on).   But
  13. one may  also choose to run  the system by means  of a ``shell'' or  ``CLI''
  14. (which stands for  Command Line Interface).   Instead of double-clicking  on
  15. an icon  to run  a program,  you type its  name; instead  of dragging  icons
  16. around to copy files,  you type a command like `cp file1 file2';  et cetera.
  17. In this Chapter, we'll discuss how the choice of desktop  vs.  shell affects
  18. the operation of Fnordadel.
  19.  
  20.    From  day  one,   the  Citadel  system  has  been  designed   around  the
  21. command-line style  of operation,  and Fnordadel hasn't  changed this;  most
  22. programs  in  the  distribution  take  arguments  on  the  command  line  to
  23. determine  their behaviour.    This  is  antithetical to  the  mouse-driven,
  24. interactive  philosophy of  GEM, but  it  doesn't mean  that you  can't  run
  25. Fnordadel from the desktop.  You just have to kludge things around a bit.
  26.  
  27.  
  28.  
  29. 11.1  Running from the Desktop
  30.  
  31.    There are a few  things you need to know.   Firstly, all the  programs in
  32. the distribution come  with a `.tos' extender.   As with standard  ST usage,
  33. this means  that the programs  use no GEM features  of any kind---just  TOS.
  34. (As an  aside:  someone once  suggested that we  graft a GEM front-end  onto
  35. citadel.  His body hasn't surfaced yet.).
  36.  
  37.    So,  what this  means for  desktop  users is  that double-clicking  on  a
  38. Fnordadel program will  simply launch the program;  the program will not  be
  39. supplied with any command-line arguments.  For some  programs, this is fine,
  40. but for  others,  notably citadel,  it isn't.   The  solution?   Rename  the
  41. programs to which you would like to supply arguments to  `program.ttp'.  Now
  42. when you run  them from the desktop, a  dialogue box will pop up  asking for
  43. the command  line arguments to be  supplied.  Type  them and hit `<CR>'  (or
  44. click on `OK') to launch the program.
  45.  
  46.    This doesn't entirely  solve the problem,  because complex programs  like
  47. citadel can take  far more parameters than can  be fit into the  small space
  48. provided by  the GEM .ttp parameter  dialogue box.   Also, the GEM  dialogue
  49. converts all the parameters  you type into upper-case before giving  them to
  50. the program.   This is a Bad Thing  if the program in question  is expecting
  51. lower-case values.   Fortunately, we've  tried to eliminate this problem  in
  52. all Fnordadel programs by not checking case with parameters.
  53.  
  54.    There are  companies that  make enhancement or  replacement products  for
  55. the  GEM Desktop,  such as  NeoDesk 3  by  Gribnif Software  and Hotwire  by
  56. CodeHead Software.  Some of these products replace  the normal GEM parameter
  57. dialogue with one that will accept more parameters,  or doesn't convert them
  58. to upper-case, or  both.  It might  be worth your while to  investigate some
  59. of these products if  you're having trouble using Fnordadel to  its fullest,
  60. but  like working  in a  graphical, mouse-oriented  environment.   (We  have
  61. never used  any of these  products ourselves, so  we're unable to  recommend
  62. them.  However,  if you try them out  and find them useful, let us  know how
  63. and why so we can record that fact in future versions of this manual.)
  64.  
  65.  
  66.  
  67. Chapter 11:  Shells vs.  the Desktop                                     144
  68.  
  69.  
  70.  
  71.  
  72.    We've tried  to make all  of the programs  in the Fnordadel  distribution
  73. decently desktop-friendly.   (Or, at least, not as blindingly  unfriendly as
  74. before.)   They can  detect when they  have been run  from the desktop,  and
  75. will always prompt  you to ``hit any key''  before they exit.   For programs
  76. like clog, popular, et  cetera, this is a lifesaver.  (Note that  this ``hit
  77. any key'' business is only from the desktop; if  you run a Fnordadel program
  78. from a  shell, or from  a door within  Fnordadel, or  whatever, it won't  do
  79. this.)
  80.  
  81.  
  82. A desktop trick
  83.  
  84.    A trick  that used  to be popular  back in  the days when  people ran  ST
  85. Citadels on tiny one-drive systems was to fool the ST  into thinking you had
  86. two drives, in the following manner:
  87.  
  88.  1. Arrange  your files  so that  all of  your startup  stuff (auto  folder,
  89.     `configur.tos',  `citadel.tos', et cetera)  is on  a disk marked  ``A'',
  90.     and all of your BBS data files are on a disk marked ``B''.
  91.  
  92.  2. Edit `ctdlcnfg.sys'  to point #msgdir, #sysdir,  et cetera, at drive  B:
  93.     rather than drive A:.
  94.  
  95.  3. Now  here's the  trick:   rename  the Fnordadel  binaries  from .tos  to
  96.     `.prg' extensions.
  97.  
  98.  4. When  you boot from  disk ``A''  and run  citadel GEM will  pop up  that
  99.     familiar ``Insert Disk B into Drive A'' box, and  off you go!  Fnordadel
  100.     will work  as normal; the computer will  see the data files as  being on
  101.     drive B:, but that's fine by us.
  102.  
  103.    A word  of  caution:   Many a  Sysop employing  this  technique has  come
  104. home to  find his  BBS frozen at  a ``Please  insert Disk A  into Drive  A''
  105. box.   Make sure that  all the directories  your system needs during  normal
  106. operation start with B:\...  rather than A:\....  This includes  system file
  107. directories  in `ctdlcnfg.sys',  directories  attached to  directory  rooms,
  108. pathnames of files used to archive rooms, etc.
  109.  
  110.    Also note that  using this trick  requires naming all Fnordadel  programs
  111. that  you intend  to  use (`citadel.tos',  `configur.tos',  utilities)  with
  112. the  `.prg' extender.    Unfortunately, a  side-effect  is that  you can  no
  113. longer supply any  command-line parameters to these  programs.  Some of  the
  114. third-party GEM enhancements/replacements  referred to above may solve  this
  115. problem by  letting you  have a  parameter dialogue  box for  use with  .prg
  116. programs as  well as  .ttp ones.   Also,  Double Click  is rumoured to  have
  117. released a neat hack to allow passing parameters to .prg programs.
  118.  
  119.    If you do run Fnordadel  from the desktop, be warned that  you're missing
  120. out on  some stuff.   The primary thing  is that the  desktop has no way  of
  121. catching return  codes from programs.    (Programs on the  ST may return  an
  122. integer exit value  to the calling program;  it's a way of indicating  error
  123. conditions and stuff.)   citadel makes use  of return codes to tell  you why
  124. it is exiting; see also Chapter 7 [Events], page 93.
  125.  
  126.    The  bottom line,  then,  is  that  while  you  can hack  your  way  into
  127. increased functionality when  trying to use Fnordadel from the  GEM Desktop,
  128.  
  129.  
  130.  
  131. Chapter 11:  Shells vs.  the Desktop                                     145
  132.  
  133.  
  134.  
  135.  
  136. you won't ever be able to fully exploit the  system's capabilities until you
  137. start using  a command shell of  some kind.   If you're interested in  doing
  138. so, read on.
  139.  
  140.  
  141.  
  142. 11.2  Running from a Shell
  143.  
  144.    If your  system has a  hard disk,  using a  shell is highly  recommended.
  145. One reason for  this is the concept of  the ``path'', a list  of directories
  146. you define  that tells the shell  where to look  for programs that you  wish
  147. to execute.    Thus you  don't have  to know  which directory  a program  is
  148. in  to run  it,  as long  as  the directory  is  on your  path.    Some  GEM
  149. enhancements/replacements  offer a  similar function  (e.g.   Hotwire),  but
  150. you  have  to set  things  up  a program  at  a  time, and  then  call  them
  151. using ``hot-keys''  from the Desktop.    Is it easier  to remember to  press
  152. Control-Alt-F7 to run citadel, or to simply type `citadel' and hit return?
  153.  
  154.    If  you've  got  only  floppies,  we  still   recommend  using  a  shell,
  155. especially if you  have 1MB or more  of RAM. (If you  have 512K of RAM,  get
  156. an upgrade; they're  cheap and you'll be glad you  did.)  It will  make life
  157. easier.   Both  Fnordadel developers  are fans  of the  public domain  gulam
  158. shell.   It's  what we use  full-time; our  systems auto-boot straight  into
  159. gulam, so about  the only time we see  the GEM Desktop is if  gulam crashes.
  160. Fortunately, that's  rare.   If you want  a copy of gulam,  let us know  and
  161. we  can supply  you with  one, or  just  ask around  your local  area---it's
  162. everywhere.
  163.  
  164.    There  are  many  reasons  to use  a  shell  to  run  Fnordadel.     Some
  165. were mentioned  above:   to supply  more parameters  to programs;  to  avoid
  166. parameter  conversion to  upper-case  (although  some shells  do  this  too,
  167. notably pcommand and command.tos);  to avoid having GEM erase the  output of
  168. a program before you  can see it; etc.   A further benefit of gulam  is that
  169. it has a built-in  version of the powerful microEmacs text editor,  which is
  170. very handy for people who frequently edit text files.
  171.  
  172.    However, we  think the  main reason  you'll want  to use a  shell to  run
  173. Fnordadel is  that shells  can catch  the values returned  by programs  and,
  174. with most  shells, can be  setup to do different  things depending on  which
  175. code was returned.  You'll want to use this  in conjunction with events (see
  176. Chapter 7 [Events],  page 93), because  each event causes Fnordadel to  exit
  177. with a different  specific code.  You'll also  want to use this even  if you
  178. have no events  defined, because citadel itself  uses a few result codes  to
  179. indicate different exit conditions.
  180.  
  181.    We  have included  a  sample  gulam  shellscript called  `bbs.g'  in  the
  182. distribution.   It's for managing the  overall operation of your system;  to
  183. start up  your BBS with  it, simply  edit it as  required, put it  somewhere
  184. pointed to  by your  PATH, and  type `bbs'.    The script  is reprinted  for
  185. convenience below:
  186.  
  187.       set continue 1          # 'continue' flag
  188.       set oldpath $path       # save the old path and set a new one
  189.       set path c:\bin,e:\citmain,e:\citnet,e:\citutil,e:\
  190.       cd e:\                  # change directory to where ctdltabl.sys lives
  191.  
  192.  
  193.  
  194. Chapter 11:  Shells vs.  the Desktop                                     146
  195.  
  196.  
  197.  
  198.  
  199.       while { $continue > 0 }         # Loop until we set 'continue' to '0'
  200.  
  201.           if { -e ctdltabl.sys } == 0         # is ctdltabl.sys there?
  202.               configur x                      # If not, reconfigure.
  203.           endif
  204.  
  205.           citadel +line +ymodem +purge        # run citadel
  206.  
  207.           if { $status == 0 }                 # Did citadel.tos return '0'?
  208.               set continue 0                  # If so, it was ^LQ from the
  209.               echo 'Normal console termination.'      # Console.
  210.  
  211.           ef { $status == 1 }                 # Did it return '1'?
  212.               echo 'Performing regular backup...'     # If so, it was a
  213.               cp -R d:\secret\sys g:\backup   # defined Timeout (see the
  214.               cp -R d:\secret\net g:\backup   # Reference Manual and
  215.               cp -R d:\secret\audit g:\backup # ctdlcnfg.doc).
  216.               echo 'Finished.'
  217.  
  218.           ef { $status == 2 }                 # Did it return '2'?
  219.               set continue 0                  # It crashed. The file 'crash'
  220.               echo 'Something must be buggered.'    # may help explain why.
  221.  
  222.           ef { $status == 3 }                 # Did it return '3'?
  223.               set continue 0                  # That means someone used ^LQ
  224.               echo 'Somebody took it down from remote.'       # from remote.
  225.  
  226.           ef { $status == 255 }               # Did it return '255'?
  227.               set continue 0                  # **BOOM!**  Can try checking
  228.               echo 'Something is REALLY* buggered.'   # 'crash', but....
  229.  
  230.           ef { $status == 15 }                # Here's another #event! This
  231.               echo 'Exercising the feeping creatures...'     # one is for
  232.               clog -t > d:\secret\library\userlog.sys        # nightly stats
  233.               popular -msb > d:\secret\library\popular.sys   # gathering and
  234.               callstat -c                                    # stuff like
  235.               cp d:\secret\audit\callbaud.sys d:\secret\library # that...
  236.               cp d:\secret\audit\callstat.sys d:\secret\library
  237.           endif
  238.       endwhile                        # ....and loop back to the top again.
  239.  
  240.       # if we reach here, it means that something up there set 'continue'
  241.       # to '0', meaning we're supposed to quit.
  242.       set path $oldpath               # Reset the path we had before
  243.       unset oldpath                   # and remove the variable.
  244.       # Done!
  245.  
  246.    Everything in the  above script should  be pretty much  self-explanatory.
  247. Make  sure  that  path  is set  to  point  at  directories  containing  your
  248. Fnordadel binaries; that way  you can type stuff like `callstat -c'  and the
  249. shell will find  where callstat lives.   If you have another kind  of shell,
  250. the same principles should apply, though the mechanics may vary.
  251.  
  252.