home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1995 November / PCWK1195.iso / inne / podstawy / dos / 4dos / 4uzytki / 4dman10b.exe / MAN.BTM next >
Text File  |  1992-10-20  |  5KB  |  156 lines

  1. @echo off^goto man_start
  2. :man_help 
  3. REM  MAN 1.0ß by Jouni Vääriskoski (vaarisko@tnclus.tele.nokia.fi)
  4. text
  5.  
  6.  MAN -- Searches for user manual related to the given command. Version 1.0ß.
  7.  
  8.  Usage: MAN <command>
  9.       ( MAN /a <command> <document_file> - to add a record to MAN.DB )
  10.  
  11.  <command> may be on of the following (checked in this order):
  12.  
  13.  * An executable extension - MAN shows manual for the related command.
  14.  * A 4dos alias - MAN displays the alias definition, and,
  15.    if the first command in alias is *<command>, OR the alias doesn't include
  16.    carets and doesn't start with "if" or "for", asks for permission to
  17.    call itself with the first alias command as parameter.
  18.  * An internal 4dos cmd - MAN calls 4dos help.
  19.  * An external command - MAN searches for the following files:
  20.    - Files named <prg_name>.<txt|doc|man|hlp> in program file's directory.
  21.    - File MAN.DB, and if found, line starting with "<prg_name> ",
  22.      continued by the full name of the related document file.
  23.  
  24.  Using wildcards (other than leading '*') in <command>, forces MAN
  25.  to search for external files only. The path of the first matching
  26.  filename is used, and all matching files in that directory are processed.
  27.  Note: In most cases, "MAN list.com" leads to an internal 4dos command 
  28.  "list", since it is the way used by 4DOS when parsing command lines.
  29. endtext
  30. return
  31.  
  32. :man_start
  33. if %# eq 0 .or. "%1" == "/?" (gosub man_help^quit) 
  34. if "%debug" eq "%0" echo on
  35. if "%1" eq "/a" goto add_record
  36.  
  37. setlocal
  38. set pa=%@upper[%@path[%1]]
  39. set targ=%@upper[%@name[%1]]
  40. set ex=%@upper[%@ext[%1]]
  41. echo.
  42.  
  43. if "%ex" == "" goto noext
  44. if %ex == COM .or. %ex == EXE .or. %ex == BTM .or. %ex == BAT goto catext
  45.  
  46. set ey=.%ex
  47. iff "%[%ey]" ne "" then
  48.  echo Executable extension = %@upper[%[%ey]]
  49.  iff "%@path[%[%ey]]" == "" then
  50.   REM Call myself, no return:
  51.   %0 %@name[%[%ey]].%@ext[%[%ey]]
  52.  endiff
  53.  iff not exist %[%ey] then 
  54.   echo Extension program not found
  55.  endiff
  56. else
  57.  echo Executable extension .%ex definition not found
  58. endiff
  59. quit
  60.  
  61. :catext
  62. set targ=%[targ].%[ex]
  63. :noext
  64.   
  65. iff isalias %[pa]%[targ] then
  66.   REM Add quotes in case of compaund characters:
  67.   set alcmd=%@word[0,%@alias[%[pa]%[targ]]]
  68.   set alcaret=%@index["%@alias[%[pa]%[targ]]",%@char[94]]
  69.   set alstrct=%@index[.iff.if.for,.%[alcmd]]
  70.   echo 4dos Alias: 
  71.   alias %[pa]%[targ]
  72.   iff "%[alcmd]" eq "*%targ" .or. %[alcaret] eq -1 .and. %[alstrct] eq -1 then
  73.     inkey /k"yn[Enter][Esc]" Continue with "%@upper[%0] %[alcmd]" (Y/n) ?  %%a
  74.     if "%a" eq "y" .or. "%@ascii[%a]" eq "64" %0 %[alcmd]
  75. rem  elseiff %[alcaret] eq -1 .and. %[alstrct] eq -1 then
  76. rem    inkey /k"yn[Enter][Esc]" Continue with "%@upper[%0] %[alcmd]" (Y/n) ?  %%a
  77. rem    if "%a" eq "y" .or. "%@ascii[%a]" eq "64" %0 %[alcmd]
  78.   endiff
  79.   quit
  80. endiff
  81.  
  82. REM Note: Remove leading "*", if found ("isinternal *dir" returns false!).
  83. iff %@substr[%targ,0,1] eq * then
  84.   set targ=%@substr[%targ,1]
  85. endiff
  86.  
  87. set targ=%pa%%targ%
  88. REM Note: Above the path, if given, must be included, othervise command 
  89. REM like "MAN c:\util\list.com" would go into the next iff, because 
  90. REM "isinternal LIST.COM" returns TRUE! (Bug in 4dos?)
  91.  
  92. REM Check if an internal 4DOS Command:
  93. iff isinternal %targ then
  94.   echo Internal 4dos command - calling 4DOS HELP...
  95.   *help %targ
  96.   REM Plain "HELP" not used here - it may not refer to 4dos help.exe.
  97.   quit
  98. endiff
  99.  
  100. REM Try to find the file(s) on PATH:
  101. set targ=%@search[%targ]
  102. iff "%targ" ne "" then
  103.  for %targ in (%targ) do gosub find_doc
  104. else
  105.  echo Unknown command - check spelling.
  106. endiff
  107. quit
  108.  
  109. :find_doc
  110.  
  111. echos %@upper[%targ]
  112. set desc=%@descript[%targ%]
  113. REM Show description, if found:
  114. iff "%desc" ne "" then^echo  :  %desc^else^echo.^endiff
  115. REM Find files with the same NAME and extension used for document files:
  116. for %dex in (.DOC .MAN .TXT .HLP) do (
  117.  set doc=%@search[%@path[%targ]%@name[%targ]%dex]
  118.  iff "%doc" ne "" then
  119.   list %doc
  120.   set %targ=OK
  121.  endiff
  122. )
  123. iff "%[%targ]" ne "OK" .AND. "%@search[man.db]" ne "" then 
  124.  for %ln in (@%@search[man.db]) do (
  125.   iff "%@name[%targ]" eq "%@word[0,%ln]" then
  126.    set doc=%@search[%@word[1,%ln]]
  127.    iff "%doc" ne "" then
  128.     list %doc
  129.     set %targ=OK
  130.    else
  131.     beep^echo %@upper[%0]: Error in MAN.DB on line "%ln" - doc file not found.
  132.    endiff
  133.   endiff
  134.  )
  135. endiff
  136. if "%[%targ]" ne "OK" echo Related documentation not found. Try executing with /? switch.
  137. unset /q %targ
  138. echo.
  139. return
  140.  
  141. :Add_Record
  142. REM Adds a line to MAN.DB.
  143. if "%3" eq "" (echo %@upper[%0]: Missing parameters.^quit 2)
  144. setlocal
  145. set Targ=%@search[%2]
  146. if "%[Targ]" eq "" (echo %@upper[%0]: Program file "%2" missing - not recorded.^quit 2)
  147. set Targ=%@search[%@path[%[Targ]]%@name[%3].%@ext[%3]]
  148. if "%[Targ]" eq "" set Targ=%@search[%3]
  149. if "%[Targ]" eq "" (echo %@upper[%0]: Document file "%3" missing - not recorded.^quit 2)
  150. set Targ=%@path[%0]%0.db
  151. iff not exist %[Targ] then
  152.  inkey /k"ny" %[Targ] doesn't exist - create it (Y/n) ?  %%k
  153.  if "%[k]" eq "n" (echo Cancelled.^quit)
  154. endiff
  155. echo %2 %3 >> %[Targ]
  156.