home *** CD-ROM | disk | FTP | other *** search
/ Programmer 7500 / MAX_PROGRAMMERS.iso / PASCAL / ECO30603.ZIP / ECO30603.LZH / ECOLIBII / DEMOS / NOVELL / NM.PAS < prev    next >
Encoding:
Pascal/Delphi Source File  |  1992-12-16  |  13.9 KB  |  444 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, eco_novl
  5.   
  6.   ;
  7.  
  8.  
  9.  
  10. const
  11.   func : boolean = false;
  12.  
  13.  
  14. var
  15.   really                 : boolean;
  16.   station, 
  17.   retcode, 
  18.   volume_number, 
  19.   conntype, 
  20.   drive_num, 
  21.   server_num, 
  22.   count, 
  23.   handle_num             : integer;
  24.   node, username, 
  25.   volume_name, 
  26.   server, 
  27.   name, datetime, 
  28.   hex_id, 
  29.   realname, 
  30.   pathname, 
  31.   version, 
  32.   network, 
  33.   socket                 :  string;
  34.  
  35.   { scan object variables }
  36.   replysecurity          :    byte;
  37.   object_type, 
  38.   replytype, 
  39.   replyflag, 
  40.   replyproperties        : integer;
  41.   lastseen, replyid      : longint;
  42.   object_name, replyname :  string;
  43.  
  44.   i                      :    word;
  45.  
  46.  
  47.  
  48.  
  49.   function __strip1013(s: string): string;
  50.   var
  51.     i :   byte;
  52.     t : string;
  53.  
  54.   begin
  55.     t := '';
  56.     for i := 1 to length(s) do if not(s[i] in [#10, #13]) then t := t + s[i];
  57.     __strip1013 := t;
  58.   end;
  59.  
  60.  
  61.  
  62.  
  63.  
  64.   procedure __loggedusers(search: string);
  65.   var
  66.     pservers, 
  67.     x, write_it, 
  68.     not_logged_in : integer;
  69.     total         : integer;
  70.     filler        :  string;
  71.  
  72.  
  73.     procedure header;
  74.     begin
  75.       filler := '                    ';
  76.       getservername(server, retcode);
  77.       getnode(node, retcode);
  78.       getstation(station, retcode);
  79.       getconnectioninfo(station, username, hex_id, conntype, datetime, retcode);
  80.       if search = '' then 
  81.         writeln('List of currently logged on users for server ', server) else
  82.         writeln('List for user ', __up(search), ' on ', server, '.');
  83.       writeln;
  84.     end;
  85.  
  86.     
  87.     procedure display_all_users;
  88.     var count : integer;
  89.     begin
  90.       total := 0; not_logged_in := 0; x := 0; pservers := 0; getserverinfo;
  91.       for count := 1 to serverinfo.connections_max do begin
  92.         get_internet_address(count, network, node, socket, retcode);
  93.         if retcode=0 then begin
  94.           getuser(count, username, retcode);
  95.           if username <> '' then begin
  96.             total := total + 1;
  97.             write_it := 0;
  98.             if search = '' then write_it := 1;
  99.             if ((search <> '') and (pos(__up(search), __up(username))>0)) then
  100.               write_it := 1;
  101.               getconnectioninfo(
  102.                 count, username, hex_id, conntype, datetime, retcode
  103.               );
  104.             if write_it = 1 then inc(x);
  105.             if write_it = 1 then if count=station then
  106.               write('*') else write(' ');
  107.             {is the connection an USER or an utility connection}
  108.             if conntype <> 1 then begin
  109.               username := '<'+username+'>'; inc(pservers)
  110.             end;
  111.             if write_it = 1 then write(
  112.               copy(__num(count)+filler, 1, 3), ' ', 
  113.               copy(username+filler, 1, 15), ' ', datetime
  114.             );
  115.             if write_it = 1 then if x = 1 then write('  |  ');
  116.             if x=2 then begin; x := 0; writeln end;
  117.           end else not_logged_in := not_logged_in + 1;
  118.         end; { end of connection in use }
  119.       end;
  120.     end;
  121.  
  122.     
  123.     procedure footer;
  124.     begin
  125.       writeln;
  126.       if x = 1 then writeln;
  127.       write(total, ' user');
  128.       if total=1 then write(' is ') else write('s are ');
  129.       writeln('logged-in on ', server, ' as of ', __curdate);
  130.       if not_logged_in > 0 then begin
  131.         write(not_logged_in, ' other connection');
  132.         if not_logged_in = 1 then write(' is ') else write('s are ');
  133.         writeln('in use, but the workstation has logged out.');
  134.       end;
  135.       if pservers > 0 then writeln(
  136.         pservers, ' of the ', total, ' users were logged-in on ', 
  137.         server, ' as print servers.'
  138.       );
  139.     end;
  140.  
  141.     
  142.     procedure change_server;    { change default server to something else }
  143.     var
  144.       x, y, z    : integer;
  145.       new_server, 
  146.       servername :  string;
  147.  
  148.     begin
  149.       z := 0;
  150.       x := pos('/', search); new_server := __up(__nw(copy(search, 1, x-1)));
  151.       search := __up(__nw(copy(search, x+1, 255)));
  152.       writeln(new_server);
  153.       func := true;
  154.  
  155.       lastseen := -1;      { -1 means start at first entry }
  156.       object_type := 4;    {1=users 2=group 3=print server 4=file server}
  157.       object_name := '*';  {wildcard '*' means everyone}
  158.       retcode := 0;
  159.       getserverinfo;
  160.       writeln;
  161.       writeln('List of file servers');
  162.       writeln;
  163.       count := 0;
  164.       writeln('OBJNAME OBJTYP RETCODE REPLYNAME           FLAG SECURITY TYPE');
  165.       while retcode=0 do begin
  166.         scan_object(
  167.           lastseen, object_type, object_name, 
  168.           replyid, replytype, replyname, replyflag, replysecurity, 
  169.           replyproperties, retcode
  170.         );
  171.         if retcode = 0 then begin
  172.           if __comp(replyname, new_server) then begin
  173.             z := 1;
  174.             {set_preferred_connection_id();}
  175.             writeln('     ', 
  176.               __juststr(object_name         , ' ',  5, _left_just_str), ' ', 
  177.               __juststr(__num(object_type)  , ' ',  5, _left_just_str), ' ', 
  178.               __juststr(__num(retcode)      , ' ',  5, _left_just_str), ' ', 
  179.               __juststr(replyname           , ' ', 20, _left_just_str), ' ', 
  180.               __juststr(__num(replyflag)    , ' ',  5, _left_just_str), ' ', 
  181.               __juststr(__num(replysecurity), ' ',  5, _left_just_str), ' ', 
  182.               '  ', 
  183.               __juststr(__num(replytype)    , ' ',  5, _left_just_str)
  184.             );
  185.           end;
  186.           lastseen := replyid;
  187.         end;
  188.       end;
  189.  
  190.       if z = 0 then begin
  191.         writeln('Server ', new_server, ' not found.');
  192.         halt;
  193.       end;
  194.     end;
  195.  
  196.  
  197.   begin
  198.     if (search <> '') then change_server;
  199.     header;
  200.     display_all_users;
  201.     footer;
  202.   end;
  203.  
  204.  
  205.  
  206.  
  207. var
  208.   tofield, 
  209.   fromfield, 
  210.   subject     :    string;
  211.   edctrl      : _editctrl;
  212.   f, b        :      byte;
  213.  
  214. begin
  215.   gotoxy(1, 11); __stdio; __setblwin(false);
  216.   getstation(station, retcode);       { pull your station number fm network }
  217.   getuser(station, username, retcode);{ pull your current userid fm network }
  218.   get_realname(username, realname, retcode);
  219.   realname := __strip1013(realname);
  220.   getnode(node, retcode);    { pull your network physical id / never changes }
  221.   get_internet_address(station, network, node, socket, retcode);
  222.   getservername(server, retcode);
  223.   getconnectioninfo(station, name, hex_id, conntype, datetime, retcode);
  224.   gethexid(name, hex_id, retcode);
  225.  
  226.   __cls;
  227.   __bandwin(true, 7, 4, 73, 7, 15, 1, sh_default, bt_single);
  228.   __betwscn(
  229.     7, 73, 5, 15, 1, 
  230.     'Station #' + __num(station) + ', under ' + server + ' as ' +
  231.     username + ' @ ' + node + '/' + __num(__str(network))
  232.   );
  233.   __betwscn(
  234.     5, 75, 6, 15, 1, 
  235.     'via socket ' + socket + ' in hex-ID: ' + hex_id + ' at ' + datetime
  236.   );
  237.  
  238.  
  239.   if (
  240.     __inparams('/?', i) or __inparams('-?', i) or __inparams('?', i) or
  241.     (paramcount = 0)
  242.   ) then begin
  243.     writeln;
  244.     writeln('   ', __progname, ' for Novell Netware by Floor A.C. Naaijkens - Version 0.01ß');
  245.     writeln('   ', __rep(60, '─'));
  246.     writeln;
  247.     writeln('   Usage');
  248.     writeln('     NovMsg [USER] [MSGSTR]');
  249.     writeln('     /S or /servers      info on all servers');
  250.     writeln('     /V or /volumes      info on all volumes');
  251.     writeln('     /D or /drives       info on all drives');
  252.     writeln('     /U or /users        info on all users');
  253.     writeln('     /L                  info on all logged-in users');
  254.     writeln('     /R or /read         read msg from cmdline i.s.o. by kbd.');
  255.     {
  256.     writeln('     /logged X           info on all logged-in users on server X');
  257.     writeln('     /logged *           info on all logged-in users on all servers');
  258.     }
  259.     writeln('     /X name             present yourself as "name"');
  260.     writeln;
  261.     writeln('   Note: Spaces can be represented by underscores (_)');
  262.     halt;
  263.   end;
  264.  
  265.  
  266.   if (                                                        { ** SERVERS ** }
  267.     __inparams('/s', i) or __inparams('/servers', i)
  268.   ) then begin
  269.     writeln('SERVERS'); func := true;
  270.     for count := 1 to 8 do begin
  271.       get_file_server_name(count, server);
  272.       if server <> '' then begin
  273.         set_preferred_connection_id(count);
  274.         getserverinfo;
  275.         get_server_version(version);
  276.         writeln('  ', server, ' under ', version);
  277.         with serverinfo do writeln(
  278.           '  MAX: ', connections_max, '; USED: ', connections_in_use, 
  279.           '; PEAK: ', peak_connections_used, '.'
  280.         );
  281.       end;
  282.     end;
  283.     lastseen := -1;      { -1 means start at first entry }
  284.     object_type := 4;    {1=users 2=group 3=print server 4=file server}
  285.     object_name := '*';  {wildcard '*' means everyone}
  286.     retcode := 0;
  287.     getserverinfo;
  288.     writeln('List of file servers');
  289.     count := 0;
  290.     while retcode=0 do begin
  291.       scan_object(
  292.         lastseen, object_type, object_name, 
  293.         replyid, replytype, replyname, replyflag, replysecurity, 
  294.         replyproperties, retcode
  295.       );
  296.       if retcode = 0 then begin
  297.         if ((count mod 4) = 0) and (count <> 0) then writeln; inc(count);
  298.         write(__juststr(replyname, ' ', 19, _left_just_str));
  299.         lastseen := replyid;
  300.       end;
  301.     end;
  302.     halt;
  303.   end;
  304.  
  305.  
  306.   {-------------------------------------------------------------------------}
  307.   { loop through the 32 possible volumes on all novell servers and retreive }
  308.   { the name of the volume     ie:  sys:                                    }
  309.   {-------------------------------------------------------------------------}
  310.   { loop through 8 connected servers }
  311.   if (                                                        { ** VOLUMES ** }
  312.     __inparams('/volumes', i) or __inparams('/v', i)
  313.   ) then for count := 1 to 8 do begin
  314.     get_file_server_name(count, server); func := true;
  315.     if server <> '' then begin
  316.       writeln('volumes mounted on ', server);
  317.       set_preferred_connection_id(count);
  318.       getserverinfo;
  319.       for volume_number := 0 to serverinfo.max_connected_volumes do begin
  320.         get_volume_name(volume_name, volume_number, retcode);
  321.         if (volume_name > '') then writeln(
  322.           '  network volume #', volume_number, ' is called ', volume_name
  323.         );
  324.       end;
  325.       writeln;
  326.       end;
  327.     halt;
  328.   end;
  329.  
  330.  
  331.  
  332.   if (                                                         { ** DRIVES ** }
  333.     __inparams('/drives', i) or __inparams('/d', i)
  334.   ) then begin
  335.     writeln; writeln('network mapped drives:');  writeln; func := true;
  336.     for count := 1 to 32 do begin { check each dos drive 1=a: 2=b: 3=c: etc.. }
  337.       get_drive_connection_id(count, server_num);
  338.       if server_num > 0 then begin
  339.         get_file_server_name(server_num, server);
  340.         set_preferred_connection_id(server_num);
  341.         get_drive_handle_id(count, handle_num);
  342.         get_directory_path(handle_num, pathname, retcode);
  343.         writeln('drive ', chr(count+64), ': = ', server, '/', pathname);
  344.       end;
  345.     end;
  346.     halt;
  347.   end;
  348.  
  349.  
  350.  
  351.  
  352.   if (                                                          { ** USERS ** }
  353.     __inparams('/users', i) or __inparams('/u', i)
  354.   ) then begin
  355.     func := true;
  356.     lastseen := -1;      { -1 means start at first entry }
  357.     object_type := 1;    {1=users 2=group 3=print server 4=file server}
  358.     object_name := '*';  {wildcard '*' means everyone}
  359.     retcode := 0;
  360.     getserverinfo;
  361.     count := 0;
  362.     writeln('userlist for ', serverinfo.name); writeln;
  363.     while retcode = 0 do begin
  364.       scan_object(
  365.         lastseen, object_type, object_name, 
  366.         replyid, replytype, replyname, replyflag, replysecurity, 
  367.         replyproperties, retcode
  368.       );
  369.       if retcode = 0 then begin
  370.         inc(count);
  371.         write(__juststr(replyname, ' ', 19, _left_just_str));
  372.         if (count mod 4) = 0 then writeln;
  373.         lastseen := replyid;
  374.       end;
  375.       end;
  376.     writeln;
  377.     halt;
  378.   end;
  379.  
  380.  
  381.   if (                                                   { ** LOGGED USERS ** }
  382.     __inparams('/logged', i) or __inparams('/l', i)
  383.   ) then begin
  384.     if __inparams('/logged', i) then __loggedusers(paramstr(i)) else
  385.       __loggedusers(''); func := true;
  386.   end;
  387.  
  388.  
  389.   if not(func or __inparams('/nomsg', i)) then begin
  390.     tofield := __up(paramstr(1));
  391.     getuser(station, username, retcode);
  392.     fromfield := __up(username);
  393.  
  394.     if __inparams('/X', i) then fromfield := __xlatestr(paramstr(i), '_', ' ');
  395.  
  396.     if (
  397.       __inparams('/read', i) or __inparams('/r', i)
  398.     ) then begin
  399.       subject := __xlatestr(paramstr(2), '_', ' ');
  400.     end else with edctrl do begin
  401.       _viewx1 := 1; _viewx2 := 61; _viewy1 := 14;
  402.       __loc(wherex, wherey, f, b);
  403.       _vscnfore := yellow; _vscnback := brown;
  404.       _vscncols := 60; _showflags := false;
  405.       __betwscn(
  406.         1, _curcolumns, 12, lightcyan, blue,
  407.         'NovellMessage by Floor A.C. Naaijkens -- V1.01ß'
  408.       );
  409.       subject := '';
  410.       really := __editline(subject, edctrl); writeln; writeln;
  411.     end;
  412.     if really then begin
  413.       writeln(
  414.         'Attempt to write following msg to ', tofield, ':', #10#13, 
  415.         subject, ' by ', fromfield
  416.       );
  417.       send_message_to_username(
  418.         tofield, fromfield + ': ' + subject, retcode
  419.       );
  420.       if retcode <> 0 then begin
  421.         writeln(
  422.           'User is not logged-in on a server anywhere!!'
  423.         );
  424.         __loggedusers('');
  425.       end;
  426.     end;
  427.   end;
  428.  
  429.  
  430.  
  431.  
  432.  
  433. end.
  434.  
  435.  
  436.  Any questions can be directed to:                               
  437.  Mark Bramwell                                                   
  438.  University of western ontario                                   
  439.  London, ontario, n6a 3k7                                        
  440.  Phone:  519-473-3618 [work]              519-473-3618 [home]
  441.  Bitnet: mark@hamster.business.uwo.ca     packet: ve3pzr @ ve3gyq
  442.  Anonymous FTP to 129.100.22.100  pascal directory  api_tp6.zip
  443.  (Any other novell units gladly accepted.)
  444.