home *** CD-ROM | disk | FTP | other *** search
/ The Arcade BBS / arcadebbs.zip / arcadebbs / WINBANG.ZIP / BANGINST.PAS < prev    next >
Pascal/Delphi Source File  |  1991-12-03  |  5KB  |  216 lines

  1. {$A+,B+,D-,E-,F-,I+,L+,N-,O-,R-,S-,V+}
  2. {$M 16384,0,0}
  3. program banginst;
  4.  
  5.  
  6. uses bangimg1, bangimg2, bangimg3, dos, crt;
  7.  
  8.  
  9.  
  10. var dir : dirstr;
  11.     name : namestr;
  12.     ext : extstr;
  13.     f, fout : text;
  14.     c : char;
  15.     s, bang, windoom : string;
  16.     i, j : integer;
  17.     bangline, nobang : boolean;
  18.     firlefanz : integer absolute $b800:0000;
  19.  
  20.  
  21.   label 42;
  22.  
  23.  
  24.   procedure yeah;
  25.  
  26.     var c : char;
  27.  
  28.     begin
  29.       move(yeahdata, firlefanz, yeahdata_length);
  30.       while keypressed do c := readkey;
  31.       c := readkey
  32.     end;
  33.  
  34.  
  35.   procedure error(s : string);
  36.  
  37.     var c : char;
  38.  
  39.     begin
  40.       i := ioresult;
  41.       move(errordata, firlefanz, errordata_length);
  42.       gotoxy(20, 12);
  43.       writeln(s);
  44.       while keypressed do c := readkey;
  45.       c := readkey;
  46.       halt(42);
  47.     end;
  48.  
  49.  
  50.   function upper (s : string) : string;
  51.  
  52.     var i : integer;
  53.  
  54.     begin
  55.       for i := 1 to length(s) do s[i] := upcase(s[i]);
  56.       upper := s
  57.     end;
  58.  
  59.  
  60.   function loadstr : string;
  61.  
  62.     var s : string;
  63.         c : char;
  64.  
  65.     begin
  66.       s := '';
  67.       repeat
  68.         read(f, c);
  69.         write(fout, c);
  70.         s := s+c
  71.       until (c = #$0d) or (c = '=') or eof(f);
  72.       if c = #$0d then delete (s, length(s), 1);
  73.       if s[1] = #10 then delete(s, 1, 1);
  74.       loadstr := s;
  75.     end;
  76.  
  77.  
  78. begin
  79.   bangline := false;
  80.   move(imagedata, firlefanz, imagedata_length);
  81.   gotoxy(1,24);
  82.   nobang := false;
  83.   {seek bang.exe}
  84. {$I-}
  85.   fsplit(fexpand(paramstr(0)),dir, name, ext);
  86.   bang := dir+'bang.exe';
  87.   assign(f, bang);
  88.   reset (f);
  89.   if ioresult <> 0 then
  90.     begin
  91.       writeln('Can''t find ',bang);
  92.       nobang := true;
  93.     end;
  94.   close(f);
  95.   i := ioresult;
  96.   {seek win.ini}
  97.   write('Enter WINDOWS drive and directory: ');
  98.   readln(windoom);
  99.   if windoom[length(windoom)] <> '\' then windoom := windoom+'\';
  100.   windoom := windoom+'win.ini';
  101.   fsplit(fexpand(windoom), dir, name, ext);
  102.   windoom := dir+name+ext;
  103.   assign(f, windoom);
  104.   reset(f);
  105.   if ioresult <> 0 then error('Can''t find '+windoom);
  106.   close(f);
  107.  
  108.   {copy bang.exe}
  109.  
  110.   swapvectors;
  111.   exec(getenv('COMSPEC'),'/c copy '+bang+' '+dir+'*.*>nul');
  112.   swapvectors;
  113.   if doserror <> 0 then error('Unrecoverable application error');
  114.   {erase win.bak}
  115.   assign(f, dir+name+'.bak');
  116.   erase(f);
  117.   i := ioresult;
  118. {$i+}
  119.  
  120.   {seek for 'load=' in win.ini }
  121.  
  122.   assign(f, windoom);
  123.   rename(f,dir+name+'.BAK');
  124.   assign(fout, windoom);
  125.   rewrite(fout);
  126.   reset(f);
  127.   repeat
  128.     s := loadstr
  129.   until eof(f) or ((upper(copy(s, 1, 4)) = 'LOAD') and (s[length(s)] = '='));
  130.   if eof(f) then {No load= found !!??}
  131.     begin
  132.       reset(f);
  133.       rewrite(fout);
  134.       {copy [WinDoom] line}
  135.       readln(f, s);
  136.       writeln(fout, s);
  137.       writeln(fout, 'load='+windoom[1]+':BANG.EXE');
  138.     end
  139.   else {load= found}
  140.     begin
  141.       readln(f, s);
  142.       i := pos('BANG.EXE', upper(s));
  143.       if i <> 0 then
  144.         begin
  145.           writeln('BANG is already installed. Deinstall (Y/N) ?');
  146.           repeat
  147.             c := readkey
  148.           until pos(c, 'yYnN') <> 0;
  149.           if (c = 'y') or (c = 'Y') then
  150.             begin
  151.  
  152.               { Store entries before BANG.EXE }
  153.  
  154.               repeat
  155.                 j := pos(' ', s);
  156.                 if j = 0 then j := 255;
  157.                 if j < i then
  158.                   begin
  159.                     write(fout, copy(s, 1, j));
  160.                     delete(s, 1, j);
  161.                     i := i-j;
  162.                     j := -1
  163.                   end
  164.               until j > i;
  165.               delete(s, 1, j);
  166.               writeln(fout, s);
  167.               goto 42;
  168.             end
  169.           else
  170.             begin
  171.               writeln(fout, s);
  172.               s := ''
  173.             end
  174.         end;
  175.       if s <> '' then
  176.         begin
  177.           if not nobang then
  178.             begin
  179.               if s[length(s)] <> ' ' then s := s+' ';
  180.               s := s+windoom[1]+':BANG.EXE';
  181.               yeah;
  182.             end;
  183.           writeln(fout, s);
  184.         end;
  185.     end;
  186.  
  187. 42:
  188.   repeat
  189.     s := loadstr;
  190.   if upper(copy(s, 1, 6)) = '[BANG]' then
  191.     bangline := true
  192.   until eof(f);
  193.   if not bangline then
  194.     begin
  195.       writeln(fout);
  196.       writeln(fout, '[bang]');
  197.       writeln(fout);
  198.       writeln(fout, '   BBBBBB         AA       N     N     GGGGGG');
  199.       writeln(fout, '   B      B     A    A     NN    N    G');
  200.       writeln(fout, '   B      B    A      A    N N   N    G');
  201.       writeln(fout, '   BBBBBB      A      A    N  N  N    G   GGG');
  202.       writeln(fout, '   B      B    AAAAAAAA    N   N N    G      G');
  203.       writeln(fout, '   B      B    A      A    N    NN    G      G');
  204.       writeln(fout, '   BBBBBB      A      A    N     N     GGGGGG');
  205.       writeln(fout);
  206.       writeln(fout, 'Written by REMBRANDT, POWER MIKE and McJOSH');
  207.       writeln(fout);
  208.       writeln(fout, 'Each WinDoom application is adding some rubbish to the WIN.INI');
  209.       writeln(fout, 'file. This one too !!!');
  210.       writeln(fout);
  211.       writeln(fout, 'Enjoy it');
  212.       writeln(fout);
  213.     end;
  214.   close(fout);
  215.   close(f);
  216. end.