home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 35 Internet / 35-Internet.zip / tinymush.zip / TinyMush / Startmush.cmd < prev    next >
OS/2 REXX Batch file  |  1999-08-28  |  7KB  |  212 lines

  1. /* ------------------------------------------------------------------ */
  2. /* OS/2 Rexx file to start Netmush                                    */
  3. /* ------------------------------------------------------------------ */
  4.  
  5. /* Stuff from mush.config                                             */
  6.  
  7. GAMEDIR="."                               /* Not actually used here.  */
  8. GAMENAME="netmush"                        /* Filename base            */
  9. OWNER="mush_admin@your_site.your_domain"  /* Not actually used here.  */
  10.  
  11. /* You should never need to change these.                             */
  12.  
  13. NEW_DB=GAMENAME||".db.new"
  14. INPUT_DB=GAMENAME||".db"
  15. GDBM_DB=GAMENAME||".gdbm"
  16. CRASH_DB=GAMENAME||".db.CRASH"
  17. SAVE_DB=GAMENAME||".db.old"
  18. BACKUP_DB=GAMENAME||".db.bk"
  19. LOGNAME=GAMENAME||".log"
  20. SAVENAME=GAMENAME||".tar.Z"
  21.  
  22. MAKE_DB=""
  23.  
  24. /* Make sure there isn't already a MUSH running.                      */
  25.  
  26. if isrun( netmush.exe ) then
  27. do
  28.   say "MUSH already running."
  29.   exit 0
  30. end
  31.  
  32. /* Make sure the indices are up to date.                              */
  33.  
  34. '@mkindx news.txt news.indx'
  35. '@mkindx help.txt help.indx'
  36. '@mkindx wizhelp.txt wizhelp.indx'
  37.  
  38. /* Check for a panic dump.  If there is one and it is good, copy      */
  39. /* it on top of the last checkpoint DB written by mush.  If it is     */
  40. /* bad, just delete it.                                               */
  41.  
  42. if FileExist( CRASH_DB ) == 1 then
  43. do
  44.   if checkdb( CRASH_DB ) == 1 then
  45.   do
  46.     if FileExist( NEW_DB ) == 1 then '@del ' || NEW_DB || ' > nul'
  47.     '@rename ' || CRASH_DB || ' ' || NEW_DB || ' > nul'
  48.   end
  49.   else
  50.   do
  51.     '@del ' || CRASH_DB || ' > nul'
  52.     say "Warning: PANIC dump corrupt using older db."
  53.   end
  54. end
  55.  
  56. /* Save a copy of the previous input database and log.                */
  57.  
  58. if FileExist( INPUT_DB ) == 1 then
  59. do
  60.   if FileExist( SAVE_DB ) == 1 then '@del ' || SAVE_DB || ' > nul'
  61.   '@rename ' || INPUT_DB || ' ' || SAVE_DB || ' > nul'
  62. end
  63.  
  64. /* Copy the log to log.old                                            */
  65.  
  66. if FileExist( LOGNAME ) == 1 then
  67. do
  68.   if FileExist( LOGNAME || '.old' ) then '@del ' || LOGNAME || '.old' || ' > nul'
  69.   '@rename ' || LOGNAME || ' ' || LOGNAME || '.old' || ' > nul'
  70. end
  71.  
  72. /* If we have a good checkpoint database, make it the input database. */
  73. /* If not, use the backup of the input database.                      */
  74.  
  75. if FileExist( NEW_DB ) == 1 then
  76. do
  77.   if FileExist( INPUT_DB ) == 1 then '@del ' || INPUT_DB || ' > nul'
  78.   '@rename ' || NEW_DB || ' ' || INPUT_DB || ' > nul'
  79. end
  80. else
  81. do
  82.   if FileExist( SAVE_DB ) == 1 then
  83.   do
  84.     say "No recent checkpoint db. Using older db."
  85.     '@copy ' || SAVE_DB || ' ' || INPUT_DB || ' > nul'
  86.   end
  87.   else
  88.   do
  89.     say "No recent db. Will initialise new database."
  90.     MAKE_DB = '-s'
  91.   end
  92. end
  93.  
  94. say "Starting netmush..."
  95. '@netmush ' || MAKE_DB || ' ' || GAMENAME || '.conf' /* '.conf > ' || LOGNAME || ' 2>&1' */
  96.  
  97. exit 0
  98.  
  99. /* ------------------------------------------------------------------ */
  100. /* FileExist() and isrun() were cribbed from "REXX Tips & Tricks".    */
  101. /* ------------------------------------------------------------------ */
  102.  
  103. /* ------------------------------------------------------------------ */
  104. /* function: Check if a file exists                                   */
  105. /*                                                                    */
  106. /* returns:  -2 - invalid parameter                                   */
  107. /*           -1 - cannot detect (e.g. the drive is not ready)         */
  108. /*            0 - neither a file, a device nor a directory with this  */
  109. /*                name exist                                          */
  110. /*            1 - the file exist                                      */
  111. /*            2 - a device driver with the name exists                */
  112. /*            3 - a directory with the name exists                    */
  113. /*                                                                    */
  114. FileExist: PROCEDURE
  115.   parse arg fileName .
  116.   SIGNAL ON NOTREADY NAME FileExistError
  117.   SIGNAL ON FAILURE  NAME FileExistError
  118.   SIGNAL ON ERROR    NAME FileExistError
  119.   thisRC = -2
  120.   if strip( fileName ) <> "" then
  121.   do
  122.     thisRC = -1
  123.     call stream fileName
  124.     SIGNAL OFF NOTREADY
  125.     if stream( fileName, "c", "QUERY EXISTS" ) <> "" then
  126.     do
  127.       if stream( fileName, "c", "QUERY DATETIME" ) == "" then
  128.         thisRC = 2
  129.       else
  130.         thisRC = 1
  131.     end
  132.     else
  133.     do
  134.       thisDir = directory()
  135.       tempDir = directory( fileSpec( "Drive", fileName ) )
  136.       if directory( fileName ) <> "" then
  137.         thisRC = 3
  138.       else
  139.         thisRC = 0
  140.       call directory tempDir
  141.       call directory thisDir
  142.     end
  143.   end
  144. FileExistError:
  145. RETURN thisRC
  146.  
  147. /* ------------------------------------------------------------------ */
  148. /* function: isrun.cmd checks if a specific program is running        */
  149. /*                                                                    */
  150. /* returns:  0 - program is not running                               */
  151. /*           1 - program is running                                   */
  152. /*           2 - usage error                                          */
  153. /*                                                                    */
  154. /* Notes:    This program needs the program PSTAT to be in a          */
  155. /*           directory in the PATH                                    */
  156. /*                                                                    */
  157. isrun: PROCEDURE
  158.   thisRC = 0
  159.   parse upper arg progname
  160.   if progName = '' | pos( '?', progName ) <> 0 then
  161.   do
  162.     say 'Usage: isrun exeName'
  163.     thisRC = 2
  164.   end
  165.   if thisRC = 0 then
  166.   do
  167.     do while queued() <> 0; parse pull; end;
  168.     i = lastPos( '.', progName )
  169.     j = lastPos( '\', progName )
  170.     if ( i = 0 ) | ( i < j ) then
  171.       progName = progName || '.EXE'
  172.     '@pstat /c | rxqueue'
  173.     processList.0 = 0
  174.     do while queued() <> 0
  175.       curLine = lineIn( 'QUEUE:' )
  176.       parse upper var curLine ,
  177.         1 ProcessID 11 ParentProcessID 21 SessionID 31 exeName .
  178.       if pos( '\', exeName ) <> 0 then
  179.       do
  180.         i = processList.0+1
  181.         processList.i = strip( exeName )
  182.         processList.0 = i
  183.       end
  184.     end
  185.     do i = 1 to processList.0 while thisRC = 0
  186.       if pos( '\', progName )= 0 then
  187.         thisRC = (progname = translate( filespec( 'n', processList.i ) ) )
  188.       else
  189.         thisRC = ( progName = processList.i )
  190.     end
  191.   end
  192. RETURN thisRC
  193.  
  194. /* ------------------------------------------------------------------ */
  195. /* function: checkdb makes sure the database was written fully        */
  196. /*                                                                    */
  197. /* returns:  0 - database not written                                 */
  198. /*           1 - database written                                     */
  199. /*                                                                    */
  200. checkdb: PROCEDURE
  201.   thisRC = 0
  202.   parse arg filename
  203.   do
  204.     '@type ' || filename || ' | rxqueue'
  205.     processList.0 = 0
  206.     do while queued() <> 0
  207.       curLine = lineIn( 'QUEUE:' )
  208.       if curLine == '***END OF DUMP***' then thisRC = 1
  209.     end
  210.   end
  211. RETURN thisRC
  212.