home *** CD-ROM | disk | FTP | other *** search
/ Programmer 7500 / MAX_PROGRAMMERS.iso / PASCAL / ECO30603.ZIP / ECO30603.LZH / ECOLIBII / DEMOS / NOVELL / SERVLIST.PAS < prev    next >
Encoding:
Pascal/Delphi Source File  |  1992-12-17  |  5.9 KB  |  227 lines

  1. {$A-,B-,D-,E-,F+,I-,L-,N-,O-,R-,S-,V-}
  2. {$M 65520, 0, 655360}
  3. uses
  4.   eco_lib, crt, dos, eco_novl
  5.   
  6.   ;
  7.  
  8.  
  9.  
  10. const
  11.   first : boolean =  true;
  12.   func  : boolean = false;
  13.   maxorigin       =    60;
  14.  
  15.  
  16. type
  17.   str62 = string[62];
  18.   ori_artype = array[1..maxorigin] of str62;
  19.  
  20.  
  21.  
  22. var
  23.   really                 :   boolean;
  24.   station,
  25.   retcode, 
  26.   volume_number, 
  27.   conntype, 
  28.   drive_num, 
  29.   server_num, 
  30.   count, 
  31.   handle_num             :   integer;
  32.   node, username, 
  33.   volume_name, 
  34.   server, 
  35.   name, datetime, 
  36.   hex_id, 
  37.   realname, 
  38.   pathname, 
  39.   boot,
  40.   version, 
  41.   network, 
  42.   fromfield, 
  43.   export, 
  44.   subject,
  45.   retitem,
  46.   socket                 :    string;
  47.   tofield, 
  48.   edctrl                 : _editctrl;
  49.   x, y, f, b, errlev     :      byte;
  50.   i, selkey              :      word;
  51.  
  52.   { scan object variables }
  53.   replysecurity, back,
  54.   foundori               :      byte;
  55.   object_type, 
  56.   replytype, 
  57.   replyflag, 
  58.   replyproperties        :   integer;
  59.   lastseen, replyid      :   longint;
  60.   object_name, replyname :    string;
  61.  
  62.   fout                   :      text;
  63.  
  64.   listpickptr            :  _pickptr;
  65.  
  66.   origin                 : ^ori_artype;
  67.  
  68.  
  69.   {$F+}
  70.   function order(var data1, data2): boolean; far;
  71.   begin
  72.     order := string(data1) < string(data2)
  73.   end;
  74.   {$F-}
  75.  
  76.  
  77.  
  78.   function select_origin : byte;
  79.   begin
  80.     selkey := $00; retitem := '';
  81.     {if first then begin}
  82.       listpickptr := __makesel(
  83.         {coord}    19, 5, 61, 16,
  84.         {fore}             white,
  85.         {back}              back,
  86.         {fore}             black,
  87.         {back}             white,
  88.         {keyptr}             nil,
  89.         {itemlen}             22,
  90.         {# of item}     foundori,
  91.         {itemsize}            62,
  92.         {numcols}              1,
  93.         {nuspace}              1, 
  94.         {arptr}           origin,
  95.         {ispointers}       false
  96.       );
  97.       if first then begin
  98.         __bandwin(false, 19, 5, 61, 16, white, back, sh_default, bt_single);
  99.         __betwscn(19, 61, 4, white, back, '[ Sorted Servers ]');
  100.         __write(5, 07, yellow, black, '');
  101.         __write(5, 15, yellow, black, '');
  102.         __write(3, 10, yellow, black, '<ESC>');
  103.         __write(2, 12, yellow, black, '<ENTER>');
  104.       end;
  105.     {end;}
  106.     first := false;
  107.     select_origin := __picksel(listpickptr, retitem, selkey);
  108.     __zapsel(listpickptr);
  109.   end;
  110.  
  111.  
  112.   function __keep32127(s: string): string;
  113.   var
  114.     t : string;
  115.     i :   byte;
  116.  
  117.   begin
  118.     t := '';
  119.     for i := 1 to length(s) do if ord(s[i]) in [32..127] then t := t + s[i];
  120.     __keep32127 := t;
  121.   end;
  122.  
  123.  
  124.  
  125. begin
  126.   x := wherex; y := wherey;
  127.   __savscn(scn1);
  128.   gotoxy(1, 25); __stdio; __setblwin(false); 
  129.  
  130.   back := blue;
  131.   if baseofscreen = $b000 then back := black;
  132.  
  133.   boot := __up(getenv('boot'));
  134.  
  135.   getstation(station, retcode);       { pull your station number fm network }
  136.   getuser(station, username, retcode);{ pull your current userid fm network }
  137.   get_realname(username, realname, retcode);
  138.   getnode(node, retcode);    { pull your network physical id / never changes }
  139.   get_internet_address(station, network, node, socket, retcode);
  140.   getservername(server, retcode);
  141.   getconnectioninfo(station, name, hex_id, conntype, datetime, retcode);
  142.   gethexid(name, hex_id, retcode);
  143.   new(origin); fillchar(origin^, sizeof(origin^), #0); __setblwin(false);
  144.   __cls;
  145.  
  146.   if (
  147.     __inparams('/?', i) or __inparams('-?', i) or __inparams('?', i)
  148.   ) then begin
  149.     writeln;
  150.     writeln('   ', __progname, ' for Novell Netware by Floor A.C. Naaijkens - Version 0.01ß');
  151.     writeln('   ', __rep(60, '─'));
  152.     writeln;
  153.     writeln('   Usage');
  154.     writeln('     ', __progname, ' Chooses from servers. Basta.');
  155.     writeln('     ', __rep(length(__progname), ' '), ' Ends on errlev 255 if error.');
  156.     writeln('     ', __rep(length(__progname), ' '), ' Ends on errlev 254 if no bootdisc.');
  157.     writeln('     ', __rep(length(__progname), ' '), ' Ends on errlev 0 if OK.');
  158.     halt;
  159.   end;
  160.  
  161.   (*
  162.   writeln('FOUND SERVERS:'); func := true;
  163.   for count := 1 to 8 do begin
  164.     get_file_server_name(count, server);
  165.     if server <> '' then begin
  166.       set_preferred_connection_id(count);
  167.       getserverinfo;
  168.       get_server_version(version);
  169.       writeln('  ', server, ' under ', version);
  170.       with serverinfo do writeln(
  171.         '  MAX: ', connections_max, '; USED: ', connections_in_use, 
  172.         '; PEAK: ', peak_connections_used, '.'
  173.       );
  174.     end;
  175.   end;
  176.   *)
  177.  
  178.   lastseen := -1;      { -1 means start at first entry }
  179.   object_type := 4;    {1=users 2=group 3=print server 4=file server}
  180.   object_name := '*';  {wildcard '*' means everyone}
  181.   retcode := 0;
  182.   getserverinfo;
  183.   count := 0;
  184.  
  185.   foundori := 0;
  186.   while retcode = 0 do begin
  187.     scan_object(
  188.       lastseen, object_type, object_name, 
  189.       replyid, replytype, replyname, replyflag, replysecurity, 
  190.       replyproperties, retcode
  191.     );
  192.     if (retcode = 0) and (__nw(__keep32127(replyname)) <> '') then begin
  193.       inc(foundori);
  194.       origin^[foundori] := __up(__nw(__keep32127(replyname)));
  195.       lastseen := replyid;
  196.     end;
  197.   end;
  198.   errlev := 255;
  199.   { sorteren }
  200.  
  201.  
  202.   __qsortsrt(origin, foundori, sizeof(str62), @order);
  203.   for i := 1 to foundori do origin^[i] := __juststr(
  204.     __num(i), '0', 2, _right_just_str
  205.   ) + ': ' + __juststr(origin^[i], ' ', 35, _right_just_str);
  206.  
  207.   i := select_origin;
  208.  
  209.   if i > 0 then begin
  210.     export := __nw(copy(origin^[i], 10, 52));
  211.     writeln('Selected: ', export);
  212.     if __existpath(upcase(boot[1]) + ':') then begin
  213.       assign(fout, 'c:\set$$$.bat'); rewrite(fout); errlev := 0;
  214.       writeln(fout, '@echo off');
  215.       writeln(fout, 'SET SERVER=', export);
  216.       close(fout);
  217.     end else begin
  218.       errlev := 254; 
  219.     end;
  220.   end else begin writeln('Quit!'); export := '' end;
  221.   
  222.   __resscn(scn1);
  223.   if errlev = 254 then writeln(export);
  224.   gotoxy(x, y);
  225.   halt(errlev);
  226. end.
  227.