#include #include #include #include #include #include "spxtype.h" #define MAX(a,b) (a > b ? a : b) /* Get a list of available services */ int spxlist ( void ) { int ccode, rval; char searchObjectName[] = "*"; WORD searchObjectType = SPXTYPE; long objectID = -1; char objectName[48]; WORD objectType; char objectHasProperties; char objectFlag; char objectSecurity; BYTE access; WORD SPXConnection; PS_INFO server_info; char *p, *foo; int i; printf ("Name\n"); printf ("------------------------\n"); for (objectID = -1, ccode = 0; !ccode;) { /* Search the bindery for our type */ ccode = ScanBinderyObject (searchObjectName, searchObjectType, &objectID, objectName, &objectType, &objectHasProperties, &objectFlag, &objectSecurity); if (ccode == 0) { /* Some service names have the form name@company@productCode just display the name portion */ if ((foo = (char *)strchr ((char *)objectName, '@'))) { *foo = 0; } printf ("%-23s\r\n", objectName); } } return 0; } /* See if a service name is valid */ int spxfind (char *name) { int ccode, len; char searchObjectName[] = "*"; WORD searchObjectType = SPXTYPE; long objectID = -1; char objectName[48]; WORD objectType; char objectHasProperties; char objectFlag; char objectSecurity; for (objectID = -1, ccode = 0; !ccode;) { /* Search the bindery for our service type */ ccode = ScanBinderyObject (searchObjectName, searchObjectType, &objectID, objectName, &objectType, &objectHasProperties, &objectFlag, &objectSecurity); if (ccode == 0) { /* Service name can either be name or name@company@productCode We only want the name portion */ len = MAX(strlen(name), strcspn ((char *)objectName, "@")); if (!strncmpi (objectName, name, len)) { strcpy (name, objectName); printf ("found %s\r\n", objectName); return 0; } } } return -1; }