9c8072046fb33fce52495d6d18f4ed41e7c7213d
[openafs.git] / src / WINNT / afssvrmgr / svc_col.cpp
1 /*
2  * Copyright 2000, International Business Machines Corporation and others.
3  * All Rights Reserved.
4  * 
5  * This software has been released under the terms of the IBM Public
6  * License.  For details, see the LICENSE file in the top-level source
7  * directory or online at http://www.openafs.org/dl/license10.html
8  */
9
10 extern "C" {
11 #include <afs/param.h>
12 #include <afs/stds.h>
13 }
14
15 #include "svrmgr.h"
16 #include "svc_col.h"
17
18
19 /*
20  * SERVICE-VIEW COLUMNS _______________________________________________________
21  *
22  */
23
24 void Services_SetDefaultView (LPVIEWINFO lpvi)
25 {
26    lpvi->lvsView = FLS_VIEW_LIST;
27    lpvi->nColsAvail = nSERVICECOLUMNS;
28
29    for (size_t iCol = 0; iCol < nSERVICECOLUMNS; ++iCol)
30       {
31       lpvi->cxColumns[ iCol ]  = SERVICECOLUMNS[ iCol ].cxWidth;
32       lpvi->idsColumns[ iCol ] = SERVICECOLUMNS[ iCol ].idsColumn;
33       }
34
35    lpvi->iSort = svccolNAME;
36
37    lpvi->nColsShown = 3;
38    lpvi->aColumns[0] = (int)svccolNAME;
39    lpvi->aColumns[1] = (int)svccolSTATUS;
40    lpvi->aColumns[2] = (int)svccolDATE_STARTSTOP;
41 }
42
43
44 /*
45  * ROUTINES ___________________________________________________________________
46  *
47  */
48
49 size_t Services_GetAlertCount (LPSERVICE lpService)
50 {
51    return Alert_GetCount (lpService->GetIdentifier());
52 }
53
54
55 LPTSTR Services_GetColumnText (LPIDENT lpi, SERVICECOLUMN svccol, BOOL fShowServerName)
56 {
57    static TCHAR aszBuffer[ nSERVICECOLUMNS ][ cchRESOURCE ];
58    static size_t iBufferNext = 0;
59    LPTSTR pszBuffer = aszBuffer[ iBufferNext++ ];
60    if (iBufferNext == nSERVICECOLUMNS)
61       iBufferNext = 0;
62    *pszBuffer = TEXT('\0');
63
64    LPSERVICESTATUS lpss = NULL;
65    LPSERVICE_PREF lpsp;
66    if ((lpsp = (LPSERVICE_PREF)lpi->GetUserParam()) != NULL)
67       lpss = &lpsp->ssLast;
68
69    switch (svccol)
70       {
71       case svccolNAME:
72          if (!fShowServerName)
73             lpi->GetServiceName (pszBuffer);
74          else
75             {
76             TCHAR szNameSvr[ cchNAME ];
77             TCHAR szNameSvc[ cchNAME ];
78             lpi->GetServerName (szNameSvr);
79             lpi->GetServiceName (szNameSvc);
80             LPTSTR pszName = FormatString (IDS_SERVER_SERVICE, TEXT("%s%s"), szNameSvr, szNameSvc);
81             lstrcpy (pszBuffer, pszName);
82             FreeString (pszName);
83             }
84          break;
85
86       case svccolTYPE:
87          if (lpss)
88             {
89             if (lpss->type == SERVICETYPE_SIMPLE)
90                GetString (pszBuffer, IDS_SERVICETYPE_SIMPLE);
91             else if (lpss->type == SERVICETYPE_FS)
92                GetString (pszBuffer, IDS_SERVICETYPE_FS);
93             else
94                GetString (pszBuffer, IDS_SERVICETYPE_CRON);
95             }
96          break;
97
98       case svccolPARAMS:
99          if (lpss)
100             {
101             lstrncpy (pszBuffer, lpss->szParams, cchRESOURCE-1);
102             pszBuffer[ cchRESOURCE-1 ] = TEXT('\0');
103
104             for (LPTSTR pch = pszBuffer; *pch; ++pch)
105                {
106                if (*pch == TEXT('\r') || *pch == TEXT('\t') || *pch == TEXT('\n'))
107                   *pch = TEXT(' ');
108                }
109             }
110          break;
111
112       case svccolNOTIFIER:
113          if (lpss)
114             {
115             lstrncpy (pszBuffer, lpss->szNotifier, cchRESOURCE-1);
116             pszBuffer[ cchRESOURCE-1 ] = TEXT('\0');
117
118             for (LPTSTR pch = pszBuffer; *pch; ++pch)
119                {
120                if (*pch == TEXT('\r') || *pch == TEXT('\t') || *pch == TEXT('\n'))
121                   *pch = TEXT(' ');
122                }
123             }
124          break;
125
126       case svccolSTATUS:
127          if (lpss)
128             {
129             if (lpss->state == SERVICESTATE_RUNNING)
130                GetString (pszBuffer, IDS_SERVICESTATE_RUNNING);
131             else if (lpss->state == SERVICESTATE_STOPPING)
132                GetString (pszBuffer, IDS_SERVICESTATE_STOPPING);
133             else if (lpss->state == SERVICESTATE_STARTING)
134                GetString (pszBuffer, IDS_SERVICESTATE_STARTING);
135             else
136                GetString (pszBuffer, IDS_SERVICESTATE_STOPPED);
137             }
138          break;
139
140       case svccolDATE_START:
141          if (lpss)
142             {
143             if (!FormatTime (pszBuffer, TEXT("%s"), &lpss->timeLastStart))
144                pszBuffer[0] = TEXT('\0');
145             }
146          break;
147
148       case svccolDATE_STOP:
149          if (lpss)
150             {
151             if (!FormatTime (pszBuffer, TEXT("%s"), &lpss->timeLastStop))
152                pszBuffer[0] = TEXT('\0');
153             }
154          break;
155
156       case svccolDATE_STARTSTOP:
157          if (lpss)
158             {
159             LPSYSTEMTIME pst;
160             int ids;
161             if ((lpss->state == SERVICESTATE_RUNNING) || (lpss->state == SERVICESTATE_STARTING))
162                {
163                ids = IDS_SERVICE_STARTDATE;
164                pst = &lpss->timeLastStart;
165                }
166             else
167                {
168                ids = IDS_SERVICE_STOPDATE;
169                pst = &lpss->timeLastStop;
170                }
171
172             TCHAR szDate[ cchRESOURCE ];
173             if (FormatTime (szDate, TEXT("%s"), pst))
174                {
175                LPTSTR psz = FormatString (ids, TEXT("%s"), szDate);
176                lstrcpy (pszBuffer, psz);
177                FreeString (psz);
178                }
179             }
180          break;
181
182       case svccolDATE_FAILED:
183          if (lpss)
184             {
185             if (!FormatTime (pszBuffer, TEXT("%s"), &lpss->timeLastFail))
186                pszBuffer[0] = TEXT('\0');
187             }
188          break;
189
190       case svccolLASTERROR:
191          if (lpss)
192             {
193             LPTSTR psz = FormatString (IDS_SERVICE_LASTERROR, TEXT("%ld"), lpss->dwErrLast);
194             lstrcpy (pszBuffer, psz);
195             FreeString (psz);
196             }
197          break;
198       }
199
200    return pszBuffer;
201 }
202