


    one common problem of all mystic sysops, is that in some time in the 
    past, we had to delete a message base (or even a file base), which 
    lead to the problem of having index numbers, for the bases, that are 
    not consecutive. this should be of a problem, but mystic bbs, 
    specially when using MPS/MPY, needs the index numbers to be 
    consecutive or perhaps the sysop/modder thinks that some specific 
    functions work in a different way... :?
    
    what i mean is this... lets see an example... in pseudo-code... lets 
    say you want to write a script that takes some info from the message 
    base, so you have to "sweep" them one by one to take this info. you 
    should write something like:
    
    i:=1;
    while getmbase(i) = True do begin
      ...
      ...
      ...
      i:=i+1;
    end;
    
    if the index numbers are not consecutive, the code above, will end 
    "pre-maturely" :) with out passing all msg.bases. when it reaches an 
    index number that it doesn't exist any more, it will break the loop. 
    there are other ways to avoid this situation, but new mystic 
    modders/scripters, discover this in a hard way :) i was also very 
    troubled in the beginning, until i found why this was happening.
    
    so to avoid this, but also other problems, the easy solution is to 
    re-index the mbases.dat file. and following script does exactly that. 
    make sure to make a backup, even if the script doesn't affect the 
    original mbases.dat file, but just to be sure.
    
    the code is in MPS to be cross-platform and you can execute it via 
    your bbs or even from the terminal/shell like this:
    
              mystic -uuser -ppassword -xNameOfScript
              
    make sure to compile it first with MPLC.
    
    Note...
    if you want to make a file base re-indexer, you can, by just altering 
    the base record with the one for the file bases. you will find it 
    inside the records.112 file, inside the /DOCS directory. have fun!


--- xq-mbrindx.mps ----------------------------------------------------------
    
uses cfg;

Const
  mysMaxAcsSize      = 30;                                
  mysMaxPathSize     = 80;

Type
  RecMessageBase = Record                                 
    Index     : Word;
    Name      : String[60];
    QWKName   : String[13];                               
    NewsName  : String[60];                               
    FileName  : String[40];
    Path      : String[mysMaxPathSize];
    NetType   : Byte;                                     
    ReadType  : Byte;                                     
    ListType  : Byte;                                     
    ListACS   : String[mysMaxAcsSize];
    ReadACS   : String[mysMaxAcsSize];
    PostACS   : String[mysMaxAcsSize];
    SysopACS  : String[mysMaxAcsSize];
    ListEACS  : String[mysMaxAcsSize];
    PostEACS  : String[mysMaxAcsSize];
    ColQuote  : Byte;
    ColText   : Byte;
    ColTear   : Byte;
    ColOrigin : Byte;
    ColKludge : Byte;
    NetAddr   : Byte;                                     
    Origin    : String[50];                               
    DefNScan  : Byte;                                     
    DefQScan  : Byte;                                     
    MaxMsgs   : LongInt;                                  
    MaxAge    : Word;                                     
    Header    : String[20];                               
    RTemplate : String[20];                               
    ITemplate : String[20];                               
    Flags     : LongInt;                                  
    Created   : LongInt;
    EchoTag   : String[40];                               
    QwkNetID  : LongInt;
    QwkConfID : Word;
    Res       : Array[1..136] of Byte;                    
  End;

Procedure ReIndex;
Var
  f  : file;
  fp : file;
  i  : integer = 1;
  baserec : RecMessageBase;
Begin
  fassign(f,CfgDataPath+'mbases.dat',66);
  freset(f);
  fassign(fp,CfgDataPath+'new_mbases.dat',66);
  frewrite(fp);
  While Not fEof(f) Do Begin
    fillchar(baserec,sizeof(baserec),#0);
    fread(f,baserec,sizeof(baserec));
    baserec.index := i;
    fwrite(fp,baserec,sizeof(baserec));
    i := i + 1;
  End;  
  fclose(fp)
  fclose(f);
End;
  
  
Begin
  Clrscr;
  TextColor(15);
  Writeln('Message Base Re-Indexer, for Mystic BBS 1.12A43');
  writeln(' ')
  TextColor(7);
  Writeln('This script will re-index your Message Bases. It will give them '+
  'a ');
  writeln('continues index number, in case you have deleted some of them and');
  writeln('that broke the index order.');
  writeln(' ');
  textcolor(11);
  writeln('The script will create a new MBASES.DAT file named as '+
  'NEW_MBASES.DAT');
  writeln('inside the /DATA directory. Make a backup of your current file '+
  'and then');
  writeln('replace it with the new one. Test things, and if all is good '+
  'you are OK.');
  writeln('In case of problems, replace your backup file and it will '+
  'fix things.')
  textcolor(14);
  Writeln(' ');
  if inputyn('Proceed?') then Begin
    ReIndex;
    textcolor(7);
    writeln('File NEW_MBASES.DAT, created.')
  end else begin
    textcolor(7);
    writeln('Operation aborted.')
  end;
End;
    
-----------------------------------------------------------------------------    


  <<< null e-magazine x008 (text edition) >>>    
      ____  _____          _____   _____           http://github.com/xqtr/null
  ___/.   \/    /_________/.   /__/.   /__jp!_          andr01d.zapto.org:9999
 //_       \    .   /         /   \   /    _//                   agency.bbs.nz
   /____/\____/    /    /__________________\                          d1st.org
              \________/                        