#include #include #include void Disconnect (char *devname); void ShowConnections(); void ShowUse(); void Connect (char *devname, char *extname, char *password); struct REGPACK regs; char localname[16]; char netname[128]; void main(int argc, char **argv) { printf ("NETLIST.EXE v1.2 (C) 1992 David Woodhouse.\n\n"); regs.r_ax=0x5e00; /* get local machine name */ regs.r_dx=(unsigned)netname; regs.r_ds=FP_SEG(netname); intr (0x21,®s); if (regs.r_flags&1) /* if carry set */ printf ("\007Error: MS-Net not running on this system.\n"); else { if (argc<2) ShowConnections(); else if (argc<3 || !strcmp (argv[1],"/?")) { ShowUse(); ShowConnections(); } else if (!stricmp (argv[2],"/d")) Disconnect (argv[1]); else if (!stricmp (argv[1],"/d")) Disconnect (argv[2]); else Connect (argv[1],argv[2],argv[3]); } } /* ShowConnections() - Show all net redirections */ void ShowConnections() { int count=0; printf ("Local machine name: %s\n\n" "Network connections:\n Local name Network name\n" ,netname); regs.r_ax=0x5f02; /* get redirection entry #BX */ regs.r_es=FP_SEG(netname); regs.r_di=(unsigned)netname; regs.r_si=(unsigned)localname; regs.r_bx=0; intr (0x21,®s); do { printf ("%16s %s\n",localname,netname); regs.r_ax=0x5f02; regs.r_bx=++count; intr (0x21, ®s); } while (!(regs.r_flags&1)); /* while carry not set */ } void ShowUse() { printf ( "Use: NETLIST /D Disconnect device\n" " NETLIST [] Attach device\n" " NETLIST List net devices\n" " NETLIST /? Display this list\n\n"); } void Disconnect(char *devname) { regs.r_ax=0x5f04; regs.r_si=(unsigned)devname; regs.r_ds=FP_SEG(devname); strupr (devname); intr (0x21,®s); if (regs.r_flags&1) { /* carry set - error */ printf (" Error disconnecting %s ",devname); switch (regs.r_ax) /* holds error code */ { case 15: printf ("Device not connected.\n"); break; default: printf ("No. %2X\n",regs.r_ax); } } else { if (devname[1]==':') printf ("Drive"); else printf ("Device"); printf(" %s disconnected.\n",devname); } } void Connect (char *devname, char *extname, char *password) { strupr (devname); strupr (extname); if (password==NULL) password="\0"; else strupr (password); regs.r_bx=(devname[1]==':')?4:3; /* set printer/drive flag in BL */ regs.r_cx=3; /* arbitrary parameter - why not 3? */ regs.r_ax=0x5f03; regs.r_ds=FP_SEG(devname); regs.r_si=(unsigned)devname; regs.r_es=FP_SEG(netname); regs.r_di=(unsigned)netname; sprintf(netname, "%s%c%s",extname, '\0', password); intr (0x21, ®s); if (regs.r_flags&1) { /* carry set - error */ printf (" Error connecting %s to %s -\n",devname, extname); switch (regs.r_ax) { case 0x35: printf ("Network path not found.\n"); break; case 0x56: printf ("Access denied.\n"); break; case 0x47: printf ("Server closed.\n"); break; case 0x55: if (devname[1]==':') printf ("Drive"); else printf ("Device"); printf (" in use.\n"); break; default: printf ("No. %.2X\n",regs.r_ax); } } else { if (regs.r_bx==3) printf ("Device"); else printf ("Drive"); printf (" %s connected to %s\n",devname,extname); } }