home *** CD-ROM | disk | FTP | other *** search
/ ftp.wwiv.com / ftp.wwiv.com.zip / ftp.wwiv.com / pub / MISC / MKDATE12.ZIP / makedate.pas < prev    next >
Pascal/Delphi Source File  |  2003-06-21  |  4KB  |  212 lines

  1. program makedate;
  2.  
  3. uses
  4.  dos, block, filedef, sublist, message, block2;
  5.  
  6. const
  7.  numchanged: word = 0;
  8.  
  9. var
  10.  atfile: string;
  11.  subname: string[8];
  12.  result: longint;
  13.  makenew, ismulti: boolean;
  14.  
  15.  header: headertype;
  16.  
  17. procedure nextseq;
  18.  begin
  19.   err := 0;
  20.   if result <> 0 then
  21.    begin
  22.     if result <> headerfpos then
  23.      begin
  24.       seek(mainsub.headerf.filevar, ((result - 1) shl 8) +
  25.        mainsub.headerf.offset);
  26.       err := ioresult
  27.      end;
  28.     if err = 0 then
  29.      begin
  30.       headerfpos := result;
  31.       blockread(mainsub.headerf.filevar, header, 256);
  32.       err := ioresult
  33.      end;
  34.     if err = 0 then
  35.      inc(headerfpos)
  36.     else
  37.      begin
  38.       result := 0;
  39.       headerfpos := -1
  40.      end
  41.    end
  42.  end;
  43.  
  44. procedure getnextseq;
  45.  begin
  46.   if header.nextseqrec = result then
  47.    result := 0
  48.   else
  49.    result := header.nextseqrec;
  50.   nextseq
  51.  end;
  52.  
  53. procedure findhead(ix: ixtype; id: longint);
  54.  begin
  55.   result := findheader(header, ix, id, 0)
  56.  end;
  57.  
  58. procedure writeback;
  59.  begin
  60.   writeblockfile(mainsub.headerf, result, @header);
  61.   inc(numchanged)
  62.  end;
  63.  
  64. procedure maindate;
  65.  var
  66.   msgnum, curnum, newlast: longint;
  67.  begin
  68.   newlast := mainsub.subinfo.firstmsg;
  69.   if newlast < mainsub.subinfo.lastmsg then
  70.    begin
  71.     msgnum := newlast;
  72.     repeat
  73.      findhead(seq, msgnum);
  74.      if result = 0 then
  75.       inc(msgnum)
  76.     until (result <> 0) or (msgnum >= mainsub.subinfo.lastmsg);
  77.  
  78.     while (result <> 0) do
  79.      begin
  80.       curnum := header.id[seq];
  81.       if newlast < curnum then
  82.        newlast := curnum;
  83.  
  84.       with header.date do
  85.        if makenew then
  86.         if year < 80 then
  87.          begin
  88.           year := year + 100;
  89.           writeback
  90.          end
  91.         else
  92.        else
  93.         if year >= 100 then
  94.          begin
  95.           year := year - 100;
  96.           writeback
  97.          end;
  98.  
  99.       getnextseq
  100.      end
  101.    end
  102.  end;
  103.  
  104. procedure setsubname(var tmp: string);
  105.  var
  106.   x: byte;
  107.  begin
  108.   subname := tmp;
  109.   for x := 1 to length(subname) do
  110.    subname[x] := upcase(subname[x])
  111.  end;
  112.  
  113. procedure paramparse;
  114.  var
  115.   tmp: string;
  116.   x: integer;
  117.  begin
  118.   if paramcount <> 2 then
  119.    begin
  120.     writeln('Syntax: makedate new subname');
  121.     writeln('    or: makedate old subname');
  122.     writeln;
  123.     writeln('    or: makedate new @listfile');
  124.     writeln('    or: makedate old @listfile');
  125.     halt(1)
  126.    end;
  127.  
  128.   tmp := paramstr(1);
  129.   if tmp[1] = '/' then
  130.    delete(tmp, 1, 1);
  131.   makenew := (upcase(tmp[1]) = 'N');
  132.  
  133.   if makenew and (cf.version < 500) then
  134.    begin
  135.     writeln('The "new" function only works with SL 5.0 or later.');
  136.     halt(1)
  137.    end;
  138.  
  139.   tmp := paramstr(2);
  140.   ismulti := (tmp[1] = '@');
  141.  
  142.   if ismulti then
  143.    begin
  144.     delete(tmp, 1, 1);
  145.     atfile := tmp
  146.    end
  147.   else
  148.    setsubname(tmp)
  149.  end;
  150.  
  151. procedure onesub;
  152.  begin
  153.   write('Adjusting dates in ', subname, ' to ');
  154.   if makenew then
  155.    write('new')
  156.   else
  157.    write('old');
  158.   write(' format... ');
  159.   p := sublistroot;
  160.   while (p <> nil) and (p^.fname <> subname) do
  161.    p := p^.next;
  162.   if p^.fname = subname then
  163.    if lockopen then
  164.     begin
  165.      maindate;
  166.      lockclose;
  167.      writeln('OK')
  168.     end
  169.    else
  170.     writeln('could not open')
  171.   else
  172.    writeln('not found');
  173.   writeln
  174.  end;
  175.  
  176. procedure allsubs;
  177.  var
  178.   list: text;
  179.   tmp: string;
  180.  begin
  181.   assign(list, atfile);
  182.   reset(list);
  183.   repeat
  184.    readln(list, tmp);
  185.    setsubname(tmp);
  186.    onesub
  187.   until eof(list);
  188.   close(list)  
  189.  end;
  190.  
  191. begin
  192.  writeln('Makedate for Searchlight v1.2');
  193.  writeln('Copyright (c) 2003 William McBrine');
  194.  writeln;
  195.  if openfiles([configf]) then
  196.   begin
  197.    closeallfiles;
  198.    paramparse;
  199.  
  200.    sublistinit(subboards);
  201.  
  202.    if ismulti then
  203.     allsubs
  204.    else
  205.     onesub;
  206.  
  207.    writeln(numchanged, ' messages updated')
  208.   end
  209.  else
  210.   writeln('Could not open CONFIG File')
  211. end.
  212.