home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Shareware BBS: 11 Util
/
11-Util.zip
/
SGROUP2.ZIP
/
SGROUP.C
< prev
next >
Wrap
C/C++ Source or Header
|
1991-01-08
|
5KB
|
222 lines
#define INCL_WIN
#define INCL_WINPROGRAMLIST
#define INCL_DOS
#include <os2.h>
#include <mt\search.h>
#include <mt\stdio.h>
#include <mt\conio.h>
#include <mt\stdlib.h>
#include <mt\string.h>
#include "sgroup.h"
CHAR GroupName[BIG_STRING];
int CompareProgs(const void * Elem1, const void * Elem2);
void ParseParms(SHORT Count, PSZ Arguments[]);
SHORT ParmType (PSZ);
void ShowVersionInfo (void);
void ErrorAndDie (PSZ, USHORT);
void UserError (PSZ);
void SortGroup (PSZ pName);
void SortByHandle (HPROGRAM hSort, HPROGRAM hOld);
void main (int argv, char *argc[])
{
HAB hab;
ShowVersionInfo();
hab = WinInitialize(0);
ParseParms(argv, argc);
SortGroup(GroupName);
WinTerminate(hab);
DosExit(EXIT_PROCESS, 0);
}
void ShowVersionInfo(void)
{
printf("\nSGroup Version %s: 1990, Mike Donnelly\n\n", SGROUP_VERSION);
}
void ParseParms(SHORT Count, PSZ Arguments[])
{
BOOL GotFile = FALSE;
BOOL NeedHelp = FALSE;
PSZ Argument;
CHAR LastChar;
if (Count == 1)
NeedHelp = TRUE;
while ( *(++Arguments) )
{
Argument = *(Arguments);
LastChar = *(Argument + (strlen(Argument) - 1) );
switch ( ParmType(Argument) )
{
case PARM_HELP:
case PARM_BAD:
NeedHelp = TRUE;
break;
case PARM_STRING:
GotFile = TRUE;
strcpy(GroupName, Argument);
break;
default:
ErrorAndDie("Internal casing error at ParseParms", 1);
break;
}
}
if (NeedHelp == TRUE)
{
printf("Usage: SGROUP groupname\n");
DosExit(EXIT_PROCESS, 0);
}
if (GotFile == FALSE)
UserError("No groupname specified.");
}
SHORT ParmType(PSZ Parm)
{
SHORT Type = PARM_NONE;
if ( (*Parm == '-') ||
(*Parm == '/') )
{
switch ( toupper( *(Parm + 1)) )
{
case '?':
case 'H':
Type = PARM_HELP;
break;
default:
Type = PARM_BAD;
break;
}
}
else
Type = PARM_STRING;
return(Type);
}
void UserError(PSZ Text)
{
printf("SGROUP: %s\n", Text);
DosExit(EXIT_PROCESS, 1);
}
void ErrorAndDie(PSZ Message, USHORT Error)
{
printf("SGROUP: %s error %u\n", Message, Error);
DosExit(EXIT_PROCESS, Error);
}
void SortGroup(PSZ pName)
{
BOOL GotIt = FALSE;
USHORT Index;
ULONG BufSize;
ULONG Titles;
PPROGDETAILS pDetails;
PPROGTITLE pGroups = NULL;
PPROGTITLE pBase;
HPROGRAM hgroupOld;
HPROGRAM hgroupNew;
BufSize = PrfQueryProgramTitles(HINI_USERPROFILE, SGH_ROOT, pGroups,
0L, &Titles);
pGroups = malloc( (USHORT) BufSize);
pBase = pGroups;
PrfQueryProgramTitles(HINI_USERPROFILE, SGH_ROOT, pGroups, BufSize, &Titles);
for (Index = 0; Index < (USHORT) Titles; Index++)
{
if ( stricmp(pGroups->pszTitle, pName) == 0)
{
GotIt = TRUE;
break;
}
pGroups++;
}
if (GotIt == FALSE)
UserError("No such group.");
BufSize = PrfQueryDefinition(HINI_USERPROFILE, pGroups->hprog, NULL, 0L);
pDetails = malloc( (USHORT) BufSize);
PrfQueryDefinition(HINI_USERPROFILE, pGroups->hprog, pDetails, BufSize);
strcpy(pDetails->pszTitle, "Temp");
free(pDetails);
PrfChangeProgram(HINI_USERPROFILE, pGroups->hprog, pDetails);
hgroupNew = PrfCreateGroup(HINI_USERPROFILE, pGroups->pszTitle,
SHE_VISIBLE | SHE_UNPROTECTED);
hgroupOld = pGroups->hprog;
free(pBase);
SortByHandle(hgroupNew, hgroupOld);
}
void SortByHandle(HPROGRAM hSort, HPROGRAM hOld)
{
USHORT Index;
ULONG BufSize;
ULONG Titles;
PPROGDETAILS pDetails;
PPROGTITLE pProgs = NULL;
PPROGTITLE pBase;
BufSize = PrfQueryProgramTitles(HINI_USERPROFILE, hOld, pProgs,
0L, &Titles);
pProgs = malloc( (USHORT) BufSize);
pBase = pProgs;
PrfQueryProgramTitles(HINI_USERPROFILE, hOld, pProgs, BufSize, &Titles);
pProgs = pBase;
qsort(pBase, (USHORT) Titles, sizeof(PROGTITLE), CompareProgs);
for (Index = 0; Index < (USHORT) Titles; Index++)
{
printf("P: %02u --> %s\n", Index, pProgs->pszTitle);
BufSize = PrfQueryDefinition(HINI_USERPROFILE, pProgs->hprog, 0, 0L);
pDetails = malloc( (USHORT) BufSize);
PrfQueryDefinition(HINI_USERPROFILE, pProgs->hprog, pDetails, BufSize);
PrfAddProgram(HINI_USERPROFILE, pDetails, hSort);
free(pDetails);
pProgs++;
}
pProgs = pBase;
PrfDestroyGroup(HINI_USERPROFILE, hOld);
free(pBase);
}
int CompareProgs(const void * Elem1, const void * Elem2)
{
return( strcmp( ( (PPROGTITLE) Elem1)->pszTitle,
( (PPROGTITLE) Elem2)->pszTitle) );
}