[Back to NETWORK SWAG index] [Back to Main SWAG index] [Original]

     {
     Program Name : Netted.Pas
     Written By   : Anonymous
     E-Mail       : nothing
     Web Page     : nothing
     Program
     Compilation  : Turbo Pascal 5.0 or later

     Program Description :

     Usefulness for BBS'S and general communications.
     For a detailed description of this code source, please,
     read the file TENTOOLS.DOC. Thank you
     }
    Program Netted;
    Uses DOS,CRT,Tentools;
    VAR
       Nodelist : NABuffer;
       SSList : NABuffer;
       DisplayList : NABuffer;
       MaxRows,MaxNodes,MaxSS,MaxDisplay : Integer;
       P2 : String;
       QNode : S12;
       CNode : S12;
       I,L : Integer;
       TestLetter : Char;
       NetRet,RetCode : Word;
       Super,WS : Boolean;
       Sorted : Boolean;
       TempNode : S12;
       Param : Array[1..2] of String;

    Procedure ErrorOut(ECode : Word);
    Begin
       Writeln('Error in Tentools function NODES: ',ECode);
       Halt;
    End;

    Procedure Help;
    Begin
       Writeln('Syntax:  NETTED [<S,W,*,!>] [<nodename>]');
       Writeln(' where    "S" returns Superstations only');
       Writeln('          "W" returns Workstations (& Superstations)');
       Writeln('          "*" (same as "W")');
       Writeln('          "!" returns the status of your local node');
       Writeln('  and  <nodename> returns only the status of that node.');
       Writeln(' NOTE: Usage with a nodename will return to DOS with ErrorCode set');
       Writeln('       to 1 for a return of FALSE, or 0 for TRUE. Usage with "!"');
       Writeln('       will also return a 0 if the local node is "Loaded" or a 1');
       Writeln('       if it is not!');
       Halt;
    End;

    Function InGroup(NodeName : S12;VAR Group : NABuffer; Max : Integer): Boolean;
    { This function checks for the inclusion of Nodename in the NABuffer array
    "Group". Max is the size of the group. }
    VAR
       I : Integer;
    Begin
       I:=1;
       While ((Group[I]<>Nodename)and(I<Max)) do Inc(I);
       InGroup:=(Group[I]=Nodename);
    end;

    Begin
       QNode:='';
       TestLetter:=#0;
       If ParamCount=0
       then Help
       else
        begin
           Param[1]:=ParamStr(1);
           If (ParamCount>1)
           then
            begin
               Param[2]:=ParamStr(2);
               If (Length(Param[1])>1)
               then
                begin
                   QNode:=Param[1];
                   TestLetter:=Upcase(Param[2][1]);
                end
               else
                begin
                   QNode:=Param[2];
                   TestLetter:=Upcase(Param[1][1]);
                end;
            end
           else
            begin
               if (Length(Param[1])=1)
               then TestLetter:=Upcase(Param[1][1])
               else QNode:=Param[1];
            end;
           If QNode<>''
           then
            begin
               for I:=1 to Length(QNode) do QNode[I]:=Upcase(QNode[I]);
               While length(QNode)<12 do QNode:=QNode+' ';
            end;
        end;
       IF TestLetter='!'
       then
        begin
           if Loaded
           then
            begin
               QNode:=Nodename;
               TextColor(White);
               Write(QNode,' is currently on the Network!');
               Halt(0);
            end
           else
            begin
               TextColor(LightRed);
               Write('This Node is NOT currently on the Network!');
               Halt(1);
            end
        end
       else
        begin
           MaxNodes:=140;
           NetRet:=Nodes(Nodelist,MaxNodes,False); {Full list of Nodes}
           If (NetRet<>0) then ErrorOut(NetRet);
           MaxSS:=140;
           NetRet:=Nodes(SSList,MaxSS,True);       {List of Superstations}
           If (NetRet<>0) then ErrorOut(NetRet);
           If (QNode<>'')
           then
            begin
               Super:=InGroup(QNode,SSList,MaxSS);
               If not Super then WS:=InGroup(QNode,NodeList,MaxNodes)
               else WS:=True;
               Case Testletter of
               #0,'W' : If WS
                        then
                         begin
                            RetCode:=0;
                            TextColor(White);
                         end
                        else
                         begin
                            RetCode:=1;
                            TextColor(LightRed);
                         end;
               'S' : If Super
                     then
                      begin
                         RetCode:=0;
                         TextColor(White);
                      end
                     else
                      begin
                         RetCode:=1;
                         TextColor(LightRed);
                      end;
               else Help;
               end; {Case}
               If Super then Writeln(QNode,' is a Superstation!')
               else if WS then Writeln(QNode,' is a WorkStation!')
               else Writeln(QNode,' is not currently on the network!');
               Halt(RetCode);
            end
           else
            begin
               QNode:=NodeName;
               For I:=1 to Length(QNode) do QNode[I]:=Upcase(QNode[I]);
               While length(QNode)<12 do QNode:=QNode+' ';
               ClrScr;
               {Sort Nodelist}
               Repeat
                  Sorted:=True;
                  For I:=1 to MaxNodes-1 do
                   if Nodelist[I]>Nodelist[I+1] then
                    begin
                       TempNode:=Nodelist[I];
                       Nodelist[I]:=NodeList[I+1];
                       Nodelist[I+1]:=TempNode;
                       Sorted:=False;
                    end;
               Until Sorted;
               {Sort SSList}
               Repeat
                  Sorted:=True;
                  For I:=1 to MaxSS-1 do
                   if SSlist[I]>SSlist[I+1] then
                    begin
                       TempNode:=SSlist[I];
                       SSlist[I]:=SSList[I+1];
                       SSlist[I+1]:=TempNode;
                       Sorted:=False;
                    end;
               Until Sorted;
               If (TestLetter='S')
               then
                begin
                   Move(SSList,DisplayList,Sizeof(SSList));
                   MaxDisplay:=MaxSS;
                end
               else
                begin
                   Move(Nodelist,DisplayList,Sizeof(Nodelist));
                   MaxDisplay:=MaxNodes;
                end;
               For I:=1 to MaxDisplay do
                begin
                   MaxRows:=MaxDisplay div 6;
                   If (MaxDisplay mod 6)>0 then Inc(MaxRows);
                   GotoXY(((I-1) div MaxRows)*13+1,(I-1) mod MaxRows+2);
    {               GotoXY(((I-1) mod 4)*20+1,(I-1) div 4+3); }
                   If (DisplayList[I]=QNode)
                   then
                    begin
                       TextColor(White);
                       Write(DisplayList[I]);
                       If InGroup(DisplayList[I],SSList,MaxSS)
                       then TextColor(LightCyan) else TextColor(White);
                       GotoXY(((I-1) div MaxRows)*13+1,(I-1) mod MaxRows+2);
                       Write(DisplayList[I][1]);
                    end
                   else
                    begin
                       TextColor(LightGreen);
                       Write(DisplayList[I]);
                       If InGroup(DisplayList[I],SSList,MaxSS)
                       then TextColor(LightCyan) else TextColor(LightRed);
                       GotoXY(((I-1) div MaxRows)*13+1,(I-1) mod MaxRows+2);
                       Write(DisplayList[I][1]);
                    end;
                end;
              GotoXY(1,MaxRows+3);
              Write(MaxDisplay);
              If (TestLetter='S') then Write(' Superstations ')
              else Write(' Nodes ');
              Writeln('on the Network...');
              Halt(0);
            end;
       End;
    End.

[Back to NETWORK SWAG index] [Back to Main SWAG index] [Original]