Annotation of mstools/samples/sdktools/winat/winat.c, revision 1.1

1.1     ! root        1: //===========================================================================
        !             2: //
        !             3: // Module: WINAT.C
        !             4: //
        !             5: // Purpose: Main program for WINAT.exe.  This program is a GUI Windows
        !             6: //          NT AT Command Scheduler.  The base code was taken from the
        !             7: //          Windows NT AT command files.  I have preserved (mostly) the
        !             8: //          same algorithms and data structures.
        !             9: //
        !            10: // Author: Kory Gill
        !            11: //
        !            12: // Date  : March 1993
        !            13: //
        !            14: // Copyright: Copyright Microsoft Corporation 1993
        !            15: //
        !            16: // Original banner from Windows NT at.c
        !            17: //
        !            18: //      /*++
        !            19: //
        !            20: //      Copyright (c) 1987-1992  Microsoft Corporation
        !            21: //
        !            22: //      Module Name:
        !            23: //
        !            24: //          atcmd.c
        !            25: //
        !            26: //      Abstract:
        !            27: //
        !            28: //          Code for AT command, to be used with SCHEDULE service on
        !            29: //          Windows NT.
        !            30: //
        !            31: //          The module was taken from LanManager\at.c and then modified
        !            32: //          considerably to work with NT Schedule service.
        !            33: //
        !            34: //      Author:
        !            35: //
        !            36: //          Vladimir Z. Vulovic     (vladimv)       06 - November - 1992
        !            37: //
        !            38: //      Environment:
        !            39: //
        !            40: //          User Mode - Win32
        !            41: //
        !            42: //      Revision History:
        !            43: //
        !            44: //          06-Nov-1992     vladimv
        !            45: //              Created
        !            46: //
        !            47: //          20-Feb-1993     yihsins
        !            48: //              Get rid of hard coded strings and parse/print time according
        !            49: //              to user profile
        !            50: //
        !            51: //      --*/
        !            52: //
        !            53: //===========================================================================
        !            54: 
        !            55: 
        !            56: //===========================================================================
        !            57: // includes
        !            58: //===========================================================================
        !            59: 
        !            60: #include <windows.h>    // required for all Windows applications
        !            61: #include "lmcons.h"     // LAN Manager defines
        !            62: #include "MYnetmsg.h"   // APE2 defines
        !            63: #include "lmerr.h"      // LAN Manager error messages
        !            64: #include "lmat.h"       // AT Command prototypes
        !            65: #include "lmapibuf.h"   // NetApiBufferFree
        !            66: #include "WINAT.h"      // specific to this program
        !            67: #include "listhapi.h"   // hotizontal listbox routines
        !            68: #include <assert.h>     // assert
        !            69: #include <stdio.h>      // assert
        !            70: 
        !            71: 
        !            72: //===========================================================================
        !            73: // global variables
        !            74: //===========================================================================
        !            75: 
        !            76: ATTIME  AtTime[NUM_TIMES] =                 // time strings and ms since 12am
        !            77:     {
        !            78:         "00:00",  0, "00:30",  0, "01:00",  0, "01:30",  0,
        !            79:         "02:00",  0, "02:30",  0, "03:00",  0, "03:30",  0,
        !            80:         "04:00",  0, "04:30",  0, "05:00",  0, "05:30",  0,
        !            81:         "06:00",  0, "06:30",  0, "07:00",  0, "07:30",  0,
        !            82:         "08:00",  0, "08:30",  0, "09:00",  0, "09:30",  0,
        !            83:         "10:00",  0, "10:30",  0, "11:00",  0, "11:30",  0,
        !            84:         "12:00",  0, "12:30",  0, "13:00",  0, "13:30",  0,
        !            85:         "14:00",  0, "14:30",  0, "15:00",  0, "15:30",  0,
        !            86:         "16:00",  0, "16:30",  0, "17:00",  0, "17:30",  0,
        !            87:         "18:00",  0, "18:30",  0, "19:00",  0, "19:30",  0,
        !            88:         "20:00",  0, "20:30",  0, "21:00",  0, "21:30",  0,
        !            89:         "22:00",  0, "22:30",  0, "23:00",  0, "23:30",  0
        !            90:     };
        !            91: AT_INFO GlobalAtInfo;                       // at information structure
        !            92: BOOL    fTimer;                             // flag for timer events
        !            93: DWORD   GlobalJobId;                        // job id as dword
        !            94: DWORD   dwDisposition;                      // used for registry calls
        !            95: DWORD   dwH = DWH;                          // height of main window
        !            96: DWORD   dwTime;                             // time in milliseconds
        !            97: DWORD   dwW = DWW;                          // width of main window
        !            98: DWORD   dwX = DWX;                          // x location of main window
        !            99: DWORD   dwY = DWY;                          // y location of main window
        !           100: FARPROC lpAmPmProc;                                                    // subclass for add/change AmPm edit control
        !           101: FARPROC lpAmPmDefProc;                                         // default handler for add/change AmPm edit control
        !           102: FARPROC lpDownButtonProc;                                      // subclass for spin button
        !           103: FARPROC lpDownButtonDefProc;                           // default handler for spin buttons
        !           104: FARPROC lpHourProc;                                                    // subclass for add/change hour edit control
        !           105: FARPROC lpHourDefProc;                                         // default handler for add/change hour edit control
        !           106: FARPROC lpMinProc;                                                     // subclass for add/change min edit control
        !           107: FARPROC lpMinDefProc;                                          // default handler for add/change min edit control
        !           108: FARPROC lpUpButtonProc;                                                // subclass for spin button
        !           109: FARPROC lpUpButtonDefProc;                                     // default handler for spin buttons
        !           110: HANDLE  hInst;                              // instance
        !           111: HCURSOR hCursorOld;                         // old cursor
        !           112: HCURSOR hCursorWait;                        // hourglass cursor
        !           113: HFONT   hFont;                              // handle to font
        !           114: HANDLE  GlobalMessageHandle;                // handle to netmsg.dll
        !           115: HKEY    hkHandle;                           // hangle to registry
        !           116: HWND    hCurrentFocus = NULL;                          // handle to window with focus (used for hour/min/ampm spin buttons)
        !           117: HWND    hGlobalhWnd;                        // handle to main window
        !           118: HWND    hGlobalAddChg = NULL;               // handle to Add/Change dialog when active
        !           119: HWND   hHour = NULL;                       // handle to hour
        !           120: HWND   hMin = NULL;                        // handle to minutes
        !           121: HWND    hAmPm = NULL;                       // handle to ampm 
        !           122: LOGFONT lf;                                 // font
        !           123: PWSTR   GlobalComputerName;                 // currently selected comp. name
        !           124: UCHAR   szRegistryPath[] = SZREGPATH;       // path to registry for stored info
        !           125: UCHAR   szAppName[] = SZAPPTITLE;           // name of this application
        !           126: UCHAR   szAtCommand[MAX_ATCMD_LEN+1];       // entire line in atcommand listbox
        !           127: UCHAR   szCommandM[MAXCOMMANDLEN+1];        // multibyte command
        !           128: UCHAR   szComputerM[MAXCOMPUTERNAMELEN+1];  // multibyte comp. name
        !           129: UCHAR   szDateAbbr[4];                      // store day of month as string
        !           130: UCHAR   szDayAbbr[7][4]   =                 // abbreviations
        !           131:     {
        !           132:         "M ", "T ", "W ", "Th ", "F ", "Sa ", "Su "
        !           133:     };
        !           134: UCHAR   szDefault[] = " ";                  // default char for wide conversion
        !           135: UCHAR   szError[] = SZGENERROR;             // error message
        !           136: UCHAR   szNoEntries[] = SZNOENTRIES;        // error message
        !           137: UCHAR   szTime[8];                          // store time as string
        !           138: UCHAR   szTitle[]   = SZAPPTITLE;           // title bar text
        !           139: UCHAR   szWhenDay[MAXWHENDAYLEN + 1];       // used to build when/day string
        !           140: UINT    uAmPmChars;                                                    // count of characters in add/change AmPm edit control
        !           141: UINT    uHourChars;                                                    // count of characters in add/change hour edit control
        !           142: UINT    uMinChars;                                                     // count of characters in add/change min edit control
        !           143: UINT    uTimer;                             // handle of timer 
        !           144: WCHAR   szCommandW[MAXCOMMANDLEN+1];        // widechar command
        !           145: WCHAR   szComputerW[MAXCOMPUTERNAMELEN+1];  // widechar comp. name
        !           146: 
        !           147: 
        !           148: 
        !           149: //===========================================================================
        !           150: // FUNCTION: AddChangeDlgProc()
        !           151: //===========================================================================
        !           152: 
        !           153: BOOL APIENTRY
        !           154: AddChangeDlgProc(
        !           155:     HWND hWnd,         // window handle
        !           156:     UINT message,      // type of message
        !           157:     UINT uParam,       // additional information
        !           158:     LONG lParam        // additional information
        !           159:     )
        !           160: {
        !           161: 
        !           162:     NET_API_STATUS  status;
        !           163:     PAT_INFO        pAtInfo = NULL;
        !           164:     SYSTEMTIME      SystemTime;
        !           165:     UCHAR           szAtCommand[MAX_ATCMD_LEN];
        !           166:     UCHAR           szTemp[30];
        !           167:     char *          ptr;
        !           168:     int             JobId;
        !           169:     int             i;
        !           170:     int             wmEvent;
        !           171:     int             wmId;
        !           172:     static BOOL     fChange;
        !           173:     BOOL                       Translated;
        !           174:     UINT                       Value;
        !           175:     int                        Delta;    
        !           176:     
        !           177:     // owner draw stuff
        !           178:     static LPDRAWITEMSTRUCT  lpdis;          // Long Pointer to owner-draw struct
        !           179:     LPMEASUREITEMSTRUCT      lpmis;          // Long Pointer to o-d measure struct
        !           180:     static HBITMAP           hButtonUpDef,   // for button's regular state bm
        !           181:                              hButtonUpDep,   // for button's pushed  state bm
        !           182:                              hButtonDownDef, // for button's regular state bm
        !           183:                              hButtonDownDep; // for button's pushed  state bm
        !           184:     
        !           185:     switch (message) {
        !           186:                
        !           187:                case WM_SPINBUTTON:
        !           188:             
        !           189:             if ( (hCurrentFocus != hHour) && (hCurrentFocus != hMin) && (hCurrentFocus != hAmPm) ) {
        !           190:             
        !           191:                break;
        !           192:                
        !           193:             }
        !           194:             
        !           195:                if ( lParam == UP ) {
        !           196:                                
        !           197:                        Delta = UP;
        !           198:                                        
        !           199:                } else {
        !           200:                                
        !           201:                                Delta = DOWN;                   
        !           202:                                        
        !           203:                }
        !           204:                                        
        !           205:                if ( uParam == (UINT)GetDlgItem( hWnd, IDC_HOUR ) ) {
        !           206:                                                
        !           207:                                Value = GetDlgItemInt( hWnd, IDC_HOUR, &Translated, FALSE );
        !           208:                                                        
        !           209:                                if ( Translated == 0 ) {
        !           210:                                                                
        !           211:                                        SetDlgItemInt( hWnd, IDC_HOUR, DEFAULT_HOUR, FALSE );
        !           212:                                                                
        !           213:                                } else {
        !           214:                                                                
        !           215:                                        if ( ( Value >= 12 || Value < 1 ) && Delta == UP ) {
        !           216:                                                                 
        !           217:                                                Value = 1;
        !           218:                                                                        
        !           219:                                        } else if ( ( Value > 12 || Value <= 1 ) && Delta == DOWN ) {
        !           220:                                                                
        !           221:                                                Value = 12;
        !           222:                                                                    
        !           223:                                        } else {
        !           224:                                                                        
        !           225:                                                if ( (Value == 11 && Delta == UP) || (Value == 12 && Delta == DOWN) ) {
        !           226:                                                                                
        !           227:                                                        GetDlgItemText( hWnd, IDC_AMPM, (LPTSTR)&szTemp, sizeof(szTemp) );   
        !           228:                                                                        
        !           229:                                                if ( szTemp[0] == 'A' || szTemp[0] == 'a' ) {
        !           230:                                                                        
        !           231:                                                        SetDlgItemText( hWnd, IDC_AMPM,  (LPCTSTR)"PM" );
        !           232:                                                                                
        !           233:                                                } else {
        !           234:                                                                        
        !           235:                                                                SetDlgItemText( hWnd, IDC_AMPM,  (LPCTSTR)"AM" );
        !           236:                                                                                        
        !           237:                                                        }
        !           238:                                                }
        !           239:                                                                        
        !           240:                                                Value += Delta;
        !           241:                                                                        
        !           242:                                        }
        !           243:                                                                
        !           244:                                        SetDlgItemInt( hWnd, IDC_HOUR, Value, FALSE );
        !           245:                                                                        
        !           246:                                }
        !           247:                                
        !           248:                                SendDlgItemMessage( hWnd, IDC_HOUR, EM_SETSEL, 0, -1 );         
        !           249:                                //SetFocus( (HWND)uParam );
        !           250:                                                
        !           251:                        } else if ( uParam == (UINT)GetDlgItem( hWnd, IDC_MIN ) ) {
        !           252:                                
        !           253:                Value = GetDlgItemInt( hWnd, IDC_MIN, &Translated, FALSE );
        !           254:                                                        
        !           255:                                if ( Translated == 0 ) {
        !           256:                                                                
        !           257:                                        SetDlgItemInt( hWnd, IDC_MIN, DEFAULT_MIN, FALSE );
        !           258:                                                                
        !           259:                                } else {
        !           260:                                                                
        !           261:                                        if ( ( Value >= 59 || Value < 0 ) && Delta == UP ) {
        !           262:                                                                
        !           263:                                                Value = 0;
        !           264:                                                                                              
        !           265:                                        } else if ( ( Value > 59 || Value <= 0 ) && Delta == DOWN ) {
        !           266:                                                                
        !           267:                                                Value = 59;
        !           268:                                                                
        !           269:                                        } else {
        !           270:                                                                        
        !           271:                                                Value += Delta;
        !           272:                                                                        
        !           273:                                        }
        !           274:                                                        
        !           275:                                }
        !           276:                                
        !           277:                                if ( Value > 9 ) {
        !           278:                                                                
        !           279:                                        SetDlgItemInt( hWnd, IDC_MIN, Value, FALSE );
        !           280:                                                                
        !           281:                                } else {
        !           282:                                                                        
        !           283:                                        szTemp[0] = '0';
        !           284:                                        szTemp[1] = '0' + Value;
        !           285:                                        szTemp[2] = '\0';
        !           286:                                                                
        !           287:                                SetDlgItemText( hWnd, IDC_MIN, szTemp );
        !           288:                            }          
        !           289:                                
        !           290:                                SendDlgItemMessage( hWnd, IDC_MIN, EM_SETSEL, 0, -1 );                          
        !           291:                                //SetFocus( (HWND)uParam );
        !           292:                                                        
        !           293:                } else if ( uParam == (UINT)GetDlgItem( hWnd, IDC_AMPM ) ) {
        !           294:                                                
        !           295:                        GetDlgItemText( hWnd, IDC_AMPM, (LPTSTR)&szTemp, sizeof(szTemp) );   
        !           296:                                                
        !           297:                        if ( szTemp[0] == 'A' || szTemp[0] == 'a' ) {
        !           298:                                                
        !           299:                                SetDlgItemText( hWnd, IDC_AMPM,  (LPCTSTR)"PM" );
        !           300:                                                        
        !           301:                        } else {
        !           302:                                                
        !           303:                                        SetDlgItemText( hWnd, IDC_AMPM,  (LPCTSTR)"AM" );
        !           304:                                                                
        !           305:                                }
        !           306:                 
        !           307:                 SendDlgItemMessage( hWnd, IDC_AMPM, EM_SETSEL, 0, -1 );                
        !           308:                        //SetFocus( (HWND)uParam );
        !           309: 
        !           310:                        }
        !           311:                                
        !           312:                break;
        !           313:                        
        !           314:         case WM_MEASUREITEM:
        !           315: 
        !           316:             lpmis = (LPMEASUREITEMSTRUCT)lParam; // for convenience
        !           317:             lpmis->itemWidth  = 7;
        !           318:             lpmis->itemHeight = 7;
        !           319: 
        !           320:             break;
        !           321: 
        !           322:         case WM_DRAWITEM:
        !           323: 
        !           324:             lpdis = (LPDRAWITEMSTRUCT)lParam;    // for convenience
        !           325: 
        !           326:             switch (lpdis->itemAction) {
        !           327: 
        !           328:                 case ODA_DRAWENTIRE:
        !           329:                     if ( lpdis->CtlID == IDD_DOWNBUT ) {
        !           330:                        DrawBitmap(lpdis->hDC, lpdis->rcItem.left, lpdis->rcItem.top, hButtonDownDef, SRCCOPY);
        !           331:                     } else {
        !           332:                        DrawBitmap(lpdis->hDC, lpdis->rcItem.left, lpdis->rcItem.top, hButtonUpDef, SRCCOPY);
        !           333:                     }
        !           334:                     
        !           335:                     break;
        !           336:                 
        !           337:                 case ODA_SELECT:
        !           338:                     // handle select state -- text is right & down 2 pixels
        !           339:                     // also handle focus state since it's associated
        !           340:                     if (lpdis->itemState & ODS_SELECTED) {
        !           341:                         if ( lpdis->CtlID == IDD_DOWNBUT ) {
        !           342:                                DrawBitmap(lpdis->hDC, lpdis->rcItem.left, lpdis->rcItem.top, hButtonDownDep, SRCCOPY);
        !           343:                            } else {
        !           344:                                DrawBitmap(lpdis->hDC, lpdis->rcItem.left, lpdis->rcItem.top, hButtonUpDep, SRCCOPY);
        !           345:                            }
        !           346:                     }
        !           347:                     else {
        !           348:                         if ( lpdis->CtlID == IDD_DOWNBUT ) {
        !           349:                                DrawBitmap(lpdis->hDC, lpdis->rcItem.left, lpdis->rcItem.top, hButtonDownDef, SRCCOPY);
        !           350:                            } else {
        !           351:                                DrawBitmap(lpdis->hDC, lpdis->rcItem.left, lpdis->rcItem.top, hButtonUpDef, SRCCOPY);
        !           352:                            }
        !           353:                                
        !           354:                                if ( hCurrentFocus != NULL ) {
        !           355:                                
        !           356:                                        SetFocus( hCurrentFocus );
        !           357:                                        
        !           358:                                }
        !           359:     
        !           360:                     }
        !           361:                     break;
        !           362: 
        !           363:                 case ODA_FOCUS:
        !           364:                     if (lpdis->itemState & ODS_FOCUS) {
        !           365: 
        !           366:                            break;
        !           367:                        }
        !           368: 
        !           369:                        break;
        !           370: 
        !           371:                 default:
        !           372: 
        !           373:                     break;
        !           374: 
        !           375:             }  //itemAction
        !           376: 
        !           377:             break;
        !           378:                
        !           379:         case WM_INITDIALOG:
        !           380:                        
        !           381:                        /* load bitmaps and get area of text rectangle for owner-draw button */        
        !           382:             
        !           383:             hButtonUpDef = LoadBitmap(hInst,"BUTTONUPDEF"); // regular state
        !           384:             hButtonUpDep   = LoadBitmap(hInst,"BUTTONUPDEP");   // pushed  state
        !           385:             
        !           386:             
        !           387:             hButtonDownDef = LoadBitmap(hInst,"BUTTONDOWNDEF"); // regular state
        !           388:             hButtonDownDep = LoadBitmap(hInst,"BUTTONDOWNDEP");   // pushed  state
        !           389:             
        !           390:             hCurrentFocus = NULL;
        !           391:             hHour = GetDlgItem( hWnd, IDC_HOUR );
        !           392:             hMin  = GetDlgItem( hWnd, IDC_MIN );
        !           393:             hAmPm = GetDlgItem( hWnd, IDC_AMPM );
        !           394:             
        !           395:                        SendDlgItemMessage( hWnd, IDC_NEWCOMMAND, WM_SETFONT, (WPARAM)hFont, 1L );    
        !           396:                        SendDlgItemMessage( hWnd, IDC_DAYS, WM_SETFONT, (WPARAM)hFont, 1L );
        !           397:                        SendDlgItemMessage( hWnd, IDC_HOUR, WM_SETFONT, (WPARAM)hFont, 1L );
        !           398:                        SendDlgItemMessage( hWnd, IDC_MIN, WM_SETFONT,  (WPARAM)hFont, 1L );
        !           399:                        SendDlgItemMessage( hWnd, IDC_AMPM, WM_SETFONT, (WPARAM)hFont, 1L );
        !           400:                                                
        !           401:             // fill in Days
        !           402:             SendDlgItemMessage(hWnd, IDC_DAYS, LB_ADDSTRING, 0, (LPARAM)"Monday");
        !           403:             SendDlgItemMessage(hWnd, IDC_DAYS, LB_ADDSTRING, 0, (LPARAM)"Tuesday");
        !           404:             SendDlgItemMessage(hWnd, IDC_DAYS, LB_ADDSTRING, 0, (LPARAM)"Wednesday");
        !           405:             SendDlgItemMessage(hWnd, IDC_DAYS, LB_ADDSTRING, 0, (LPARAM)"Thursday");
        !           406:             SendDlgItemMessage(hWnd, IDC_DAYS, LB_ADDSTRING, 0, (LPARAM)"Friday");
        !           407:             SendDlgItemMessage(hWnd, IDC_DAYS, LB_ADDSTRING, 0, (LPARAM)"Saturday");
        !           408:             SendDlgItemMessage(hWnd, IDC_DAYS, LB_ADDSTRING, 0, (LPARAM)"Sunday");
        !           409:                           
        !           410:             for ( i=1; i<=9; ++i ) {
        !           411: 
        !           412:                 UCHAR szDateAbbr[2];
        !           413: 
        !           414:                 szDateAbbr[0] = i + '0';
        !           415:                 szDateAbbr[1] = '\0';
        !           416: 
        !           417:                 SendDlgItemMessage(hWnd, IDC_DAYS, LB_ADDSTRING, 0, (LPARAM)szDateAbbr );
        !           418: 
        !           419:             }
        !           420:       
        !           421:                for ( i=10; i<=31; ++i ) {
        !           422: 
        !           423:                 UCHAR szDateAbbr[3];
        !           424: 
        !           425:                 szDateAbbr[0] = i/10 + '0';
        !           426:                 szDateAbbr[1] = i%10 + '0';
        !           427:                 szDateAbbr[2] = '\0';
        !           428: 
        !           429:                 SendDlgItemMessage(hWnd, IDC_DAYS, LB_ADDSTRING, 0, (LPARAM)szDateAbbr );
        !           430: 
        !           431:             }
        !           432: 
        !           433:                if ( lParam == IDC_ADD ) {
        !           434:                            
        !           435:                    SendDlgItemMessage(hWnd, IDC_DAYS, LB_SETCURSEL, 0, 0);
        !           436:                    
        !           437:                    // fill in Time
        !           438:                    
        !           439:                        SetDlgItemInt( hWnd, IDC_HOUR, DEFAULT_HOUR, FALSE );
        !           440:                        
        !           441:                        if ( DEFAULT_MIN > 9 ) {
        !           442:                                                
        !           443:                                        SetDlgItemInt( hWnd, IDC_MIN, DEFAULT_MIN, FALSE );
        !           444:                                                
        !           445:                                } else {
        !           446:                                                        
        !           447:                                        szTemp[0] = '0';
        !           448:                                        szTemp[1] = '0' + DEFAULT_MIN;
        !           449:                                        szTemp[2] = '\0';
        !           450:                                                
        !           451:                                SetDlgItemText( hWnd, IDC_MIN, szTemp );
        !           452:                            }                                
        !           453:                                                
        !           454:                        SetDlgItemText( hWnd, IDC_AMPM, (LPCTSTR)DEFAULT_AMPM );
        !           455:                           
        !           456:                    // set the Every radio button
        !           457:                 
        !           458:                    SendDlgItemMessage(hWnd, IDC_EVERY, BM_SETCHECK, TRUE, 0);
        !           459:                    
        !           460:                    fChange = FALSE;
        !           461:                            
        !           462:                        lstrcpy( szTemp, "Add Command" );
        !           463:                
        !           464:                SetWindowText( hWnd, szTemp );
        !           465:                                        
        !           466:                } else {
        !           467:                    
        !           468:                    fChange = TRUE;
        !           469:                    
        !           470:                                lstrcpy( szTemp, "Change Command" );
        !           471:                                
        !           472:                                SetWindowText( hWnd, szTemp );
        !           473:                                
        !           474:                                // fill in current command info
        !           475: 
        !           476:                                SendDlgItemMessage( 
        !           477:                        hGlobalhWnd, 
        !           478:                        IDC_ATCOMMANDS, 
        !           479:                        LB_GETTEXT, 
        !           480:                        SendDlgItemMessage( hGlobalhWnd, IDC_ATCOMMANDS, LB_GETCURSEL, 0, 0 ), 
        !           481:                        (LPARAM)szAtCommand 
        !           482:                        );
        !           483:                        
        !           484:                        // get job id
        !           485:                                
        !           486:                    JobId = 0;
        !           487:                            
        !           488:                    ptr   = szAtCommand;
        !           489:                
        !           490:                    while( *ptr >= '0' && *ptr <= '9' ) {
        !           491:                
        !           492:                        JobId *= 10;
        !           493:                        JobId += (UINT)*ptr - '0';
        !           494:                
        !           495:                        ptr++;
        !           496:                
        !           497:                    }   
        !           498:                            
        !           499:                    // get info on this job
        !           500:                            
        !           501:                    status = NetScheduleJobGetInfo(
        !           502:                     GlobalComputerName,
        !           503:                        JobId,
        !           504:                        (LPBYTE *)&pAtInfo
        !           505:                        );                              
        !           506:                                
        !           507:                    if ( status != NERR_Success ) {
        !           508:                                
        !           509:                        //MessageBox( hWnd, "Problem getting Job Info.", SZWINDOWTITLE, MB_OK | MB_ICONEXCLAMATION );
        !           510:                        
        !           511:                        MessagePrint( status );
        !           512:                                
        !           513:                        EndDialog( hWnd, 0 );
        !           514:                                
        !           515:                    }
        !           516:                            
        !           517:                    // fill in command
        !           518:                            
        !           519:                    WideCharToMultiByte( 
        !           520:                        (UINT)CP_ACP,  
        !           521:                        (DWORD)0, 
        !           522:                        (LPWSTR)pAtInfo->Command, 
        !           523:                        MAX_ATCMD_LEN,
        !           524:                     (LPSTR)szCommandM, 
        !           525:                     MAX_ATCMD_LEN, 
        !           526:                     (LPSTR)NULL, (LPBOOL)NULL
        !           527:                     );          
        !           528:                         
        !           529:                 SetDlgItemText( hWnd, IDC_NEWCOMMAND, szCommandM );
        !           530:                                                        
        !           531:                // set days this command runs
        !           532:                        
        !           533:                if ( pAtInfo->DaysOfWeek != 0) {
        !           534:                        
        !           535:                        for ( i=0; i<7; ++i ) {
        !           536:                        
        !           537:                                if ( ( pAtInfo->DaysOfWeek & (1 << i) ) != 0 ) {
        !           538:                                        
        !           539:                                        SendDlgItemMessage( hWnd, IDC_DAYS, LB_SETSEL, TRUE, i );
        !           540:                                                
        !           541:                                }
        !           542:                                        
        !           543:                        }
        !           544:                                
        !           545:                }
        !           546:                     
        !           547:                 if ( pAtInfo->DaysOfMonth != 0) {
        !           548:                        
        !           549:                        for ( i=0; i<31; ++i ) {
        !           550:                        
        !           551:                                if ( ( pAtInfo->DaysOfMonth & (1L << i) ) != 0 ) {
        !           552:                                        
        !           553:                                        SendDlgItemMessage( hWnd, IDC_DAYS, LB_SETSEL, TRUE, i+7 );
        !           554:                                                
        !           555:                                }
        !           556:                                        
        !           557:                        }
        !           558:                                
        !           559:                } 
        !           560:                        
        !           561:                // fill in every/today/tomorrow/next flag
        !           562:                        
        !           563:                if ( pAtInfo->Flags & JOB_RUN_PERIODICALLY ) {
        !           564:                        
        !           565:                        SendDlgItemMessage( hWnd, IDC_EVERY, BM_SETCHECK, TRUE, 0 );
        !           566:                        
        !           567:                        SendMessage( hWnd, WM_COMMAND, IDC_EVERY, 0 );
        !           568:                                
        !           569:                } else if ( (pAtInfo->DaysOfWeek != 0) || (pAtInfo->DaysOfMonth != 0) ) {
        !           570:  
        !           571:                        SendDlgItemMessage( hWnd, IDC_NEXT, BM_SETCHECK, TRUE, 0 );
        !           572:                        
        !           573:                        SendMessage( hWnd, WM_COMMAND, IDC_NEXT, 0 );
        !           574:                                        
        !           575:                                } else if ( pAtInfo->Flags & JOB_RUNS_TODAY ) {
        !           576:                                                                
        !           577:                        SendDlgItemMessage( hWnd, IDC_TODAY, BM_SETCHECK, TRUE, 0 );
        !           578:                        
        !           579:                        SendMessage( hWnd, WM_COMMAND, IDC_TODAY, 0 );
        !           580:                                
        !           581:                                } else {
        !           582:                                                                
        !           583:                        SendDlgItemMessage( hWnd, IDC_TOMORROW, BM_SETCHECK, TRUE, 0 );
        !           584:                        
        !           585:                        SendMessage( hWnd, WM_COMMAND, IDC_TOMORROW, 0 );
        !           586:                                
        !           587:                                }
        !           588:                            
        !           589:                    // set time for this command
        !           590:                                                   
        !           591:                 {
        !           592: 
        !           593:                     UINT  uJobTime = (UINT)(pAtInfo->JobTime / 1000 / 60 / 60);
        !           594:                        UINT  uAM = TRUE;
        !           595:                        
        !           596:                        if ( uJobTime == 0 ) {
        !           597:                                
        !           598:                                uJobTime = 12;
        !           599:                                
        !           600:                        } else if ( uJobTime == 12 ) {
        !           601:                            
        !           602:                            uAM = FALSE;
        !           603:                            
        !           604:                        } else if ( uJobTime > 12 ) {
        !           605:                        
        !           606:                            uJobTime -= 12; 
        !           607:                            
        !           608:                            uAM = FALSE;
        !           609:                                        
        !           610:                                }                       
        !           611: 
        !           612:                        SetDlgItemInt( hWnd, IDC_HOUR, uJobTime, FALSE );
        !           613:                        
        !           614:                        uAM ? SetDlgItemText( hWnd, IDC_AMPM, "AM" ) : SetDlgItemText( hWnd, IDC_AMPM, "PM" );
        !           615:                                                
        !           616:                                        if ( (UINT)(pAtInfo->JobTime / 1000 / 60 % 60) > 9 ) {
        !           617:                                                        
        !           618:                                                SetDlgItemInt( hWnd, IDC_MIN, (UINT)(pAtInfo->JobTime / 1000 / 60 % 60), FALSE );
        !           619:                                                        
        !           620:                                        } else {
        !           621:                                                                
        !           622:                                                szTemp[0] = '0';
        !           623:                                                szTemp[1] = '0' + (UINT)(pAtInfo->JobTime / 1000 / 60 % 60);
        !           624:                                                szTemp[2] = '\0';
        !           625:                                                        
        !           626:                                        SetDlgItemText( hWnd, IDC_MIN, szTemp );
        !           627:                                    }                   
        !           628:                            
        !           629:                            }
        !           630:                            
        !           631:                 // free buffer
        !           632:                     
        !           633:                                NetApiBufferFree( (LPVOID)pAtInfo );
        !           634:                
        !           635:                }
        !           636:             
        !           637:             // set up subclass functions
        !           638:             
        !           639:                        lpAmPmProc = MakeProcInstance( (FARPROC)AmPmProc, hInst );
        !           640:                        lpAmPmDefProc = (FARPROC) SetWindowLong( GetDlgItem( hWnd, IDC_AMPM ), GWL_WNDPROC, (LONG)lpAmPmProc );
        !           641:                        lpDownButtonProc = MakeProcInstance( (FARPROC)DownButtonProc, hInst );
        !           642:                        lpDownButtonDefProc = (FARPROC) SetWindowLong( GetDlgItem( hWnd, IDD_DOWNBUT ), GWL_WNDPROC, (LONG)lpDownButtonProc );
        !           643:                        lpUpButtonProc = MakeProcInstance( (FARPROC)UpButtonProc, hInst );
        !           644:                        lpUpButtonDefProc = (FARPROC) SetWindowLong( GetDlgItem( hWnd, IDD_UPBUT ), GWL_WNDPROC, (LONG)lpUpButtonProc );
        !           645:                        lpHourProc = MakeProcInstance( (FARPROC)HourProc, hInst );
        !           646:                        lpHourDefProc = (FARPROC) SetWindowLong( GetDlgItem( hWnd, IDC_HOUR ), GWL_WNDPROC, (LONG)lpHourProc );
        !           647:                        lpMinProc = MakeProcInstance( (FARPROC)MinProc, hInst );
        !           648:                        lpMinDefProc = (FARPROC) SetWindowLong( GetDlgItem( hWnd, IDC_MIN ), GWL_WNDPROC, (LONG)lpMinProc );
        !           649:                        
        !           650:                        // will default to two chars
        !           651:                                       
        !           652:                        uHourChars = 2;
        !           653:                        uMinChars = 2;                  
        !           654:                        
        !           655:                        
        !           656:                        hGlobalAddChg = hWnd;
        !           657:                        
        !           658:                break;
        !           659:         
        !           660:         case WM_COMMAND:    // message: command from application menu
        !           661: 
        !           662:                        wmId    = LOWORD(uParam);
        !           663:                        wmEvent = HIWORD(uParam);
        !           664: 
        !           665:                        switch (wmId) {
        !           666:                                
        !           667:                 case IDC_TODAY:
        !           668:                 case IDC_TOMORROW:
        !           669:                     
        !           670:                     GetLocalTime( &SystemTime );
        !           671:                     
        !           672:                     if ( SystemTime.wDayOfWeek == 0 ) {
        !           673:                     
        !           674:                        SystemTime.wDayOfWeek = 7;
        !           675:                        
        !           676:                     }
        !           677:                     
        !           678:                        for( i=0; i<NUMDAYITEMS; ++i ) {
        !           679:                        
        !           680:                                SendDlgItemMessage( hWnd, IDC_DAYS, LB_SETSEL, FALSE, i );
        !           681:                        
        !           682:                        }
        !           683:                        
        !           684:                        SendDlgItemMessage( 
        !           685:                                hWnd, 
        !           686:                                IDC_DAYS, 
        !           687:                                LB_SETSEL, 
        !           688:                                TRUE, 
        !           689:                                wmId == IDC_TOMORROW ? SystemTime.wDayOfWeek : SystemTime.wDayOfWeek - 1 ); 
        !           690:                        
        !           691:                     EnableWindow(GetDlgItem(hWnd, IDC_DAYS), FALSE);
        !           692: 
        !           693:                     break;
        !           694: 
        !           695:                 case IDC_EVERY:
        !           696: 
        !           697:                     EnableWindow(GetDlgItem(hWnd, IDC_DAYS), TRUE);
        !           698: 
        !           699:                     break;
        !           700: 
        !           701:                 case IDC_NEXT:
        !           702: 
        !           703:                     EnableWindow(GetDlgItem(hWnd, IDC_DAYS), TRUE);
        !           704: 
        !           705:                     break;
        !           706: 
        !           707:                                case IDCANCEL:
        !           708:                                    
        !           709:                                    hCurrentFocus = NULL; 
        !           710:                                    DeleteObject( hButtonUpDef );
        !           711:                                    DeleteObject( hButtonUpDep );
        !           712:                                    DeleteObject( hButtonDownDep );
        !           713:                                    DeleteObject( hButtonDownDef );
        !           714: 
        !           715:                                        EndDialog( hWnd, IDCANCEL );
        !           716:                                        
        !           717:                                        break;
        !           718:                                        
        !           719:                 case IDOK:
        !           720:                                
        !           721:                     if ( ValidateAddChangeArguments( hWnd ) == TRUE ) {
        !           722:                         
        !           723:                         if( fChange == TRUE) {
        !           724:                         
        !           725:                                status = JobDel( DEL_ID_CHANGE, hGlobalhWnd);
        !           726:                                
        !           727:                         }
        !           728:                         
        !           729:                        status = JobAdd();
        !           730:        
        !           731:                            if ( status == NERR_Success ) {
        !           732:        
        !           733:                                SendMessage( hWnd, WM_COMMAND, IDC_REFRESH, (LPARAM)SCS_BOTTOM );
        !           734:                                                        
        !           735:                                                        hCurrentFocus = NULL;
        !           736:                                                        DeleteObject( hButtonUpDef );
        !           737:                                                    DeleteObject( hButtonUpDep );
        !           738:                                                    DeleteObject( hButtonDownDep );
        !           739:                                                    DeleteObject( hButtonDownDef );                                       
        !           740:                                                    
        !           741:                                                    EndDialog( hWnd, IDOK );    
        !           742:                                                        
        !           743:                            } else {
        !           744:                            
        !           745:                                //MessageBox( hWnd, "Problem adding command.", SZWINDOWTITLE, MB_OK | MB_ICONEXCLAMATION );
        !           746:                                
        !           747:                                MessagePrint( status );
        !           748:                                
        !           749:                            }
        !           750:                     
        !           751:                     }
        !           752:                         
        !           753:                     break;
        !           754:                                 
        !           755:                 case IDC_ADDCHANGEHELP:
        !           756: 
        !           757:                     if (!WinHelp (hWnd, "WINAT.HLP", HELP_KEY,(DWORD)(LPSTR)"CONTENTS")) {
        !           758:                                                MessageBox (GetFocus(),
        !           759:                                                        "Unable to activate help",
        !           760:                                                        SZWINDOWTITLE, MB_SYSTEMMODAL|MB_OK|MB_ICONHAND);
        !           761:                     }
        !           762: 
        !           763:                     break;
        !           764: 
        !           765:             }
        !           766: 
        !           767:             break;
        !           768: 
        !           769:     }
        !           770: 
        !           771:     return (0);
        !           772: 
        !           773: }
        !           774: 
        !           775: 
        !           776: 
        !           777: //===========================================================================
        !           778: // FUNCTION: AmPmProc()
        !           779: //===========================================================================
        !           780: LRESULT APIENTRY AmPmProc( HWND hWnd, UINT message, UINT uParam, LONG lParam )
        !           781: {
        !           782:     UCHAR szCurVal[3];
        !           783:     
        !           784:     switch ( message ) {
        !           785: 
        !           786:            case WM_COPY:
        !           787:            case WM_PASTE:
        !           788:            case WM_CUT:
        !           789:        
        !           790:                        // cut and paste dont seem to work...
        !           791:                
        !           792:                break;
        !           793:     
        !           794:        case WM_CHAR:
        !           795:     
        !           796:                        if ( uParam == VK_BACK ) {
        !           797:                        
        !           798:                                if ( uAmPmChars > 0 ) {
        !           799:                                        
        !           800:                                        --uAmPmChars;
        !           801:                                        
        !           802:                                }
        !           803:                                
        !           804:                                return CallWindowProc( (WNDPROC)lpAmPmDefProc, hWnd, message, uParam, lParam ) ;
        !           805:                                
        !           806:                        } else {
        !           807:                        
        !           808:                                uAmPmChars = (UINT) SendMessage( hWnd, WM_GETTEXT, 2, (LPARAM)szCurVal );
        !           809:                                
        !           810:                                if ( uAmPmChars == 0 ) {
        !           811:                                
        !           812:                                    switch( uParam ) {
        !           813:                                    
        !           814:                                        case 'a':
        !           815:                                        case 'A':
        !           816:                                            
        !           817:                                            szCurVal[0] = 'A';
        !           818: 
        !           819:                                                break;
        !           820:                                        
        !           821:                                        case 'p':
        !           822:                                        case 'P':
        !           823:                                                  
        !           824:                                            szCurVal[0] = 'P';
        !           825:                                            
        !           826:                                            break;
        !           827:                                            
        !           828:                                        default:
        !           829:                                        
        !           830:                                                MessageBeep( MB_OK );
        !           831:                                                
        !           832:                                                return( 0 );
        !           833:                                            
        !           834:                                    }
        !           835:                                    
        !           836:                                    szCurVal[1] = 'M';
        !           837:                                    szCurVal[2] = '\0';
        !           838:                                    uAmPmChars  = 2;
        !           839:                                     
        !           840:                                    SendMessage( hWnd, WM_SETTEXT, 0, (LPARAM)szCurVal );
        !           841:                                    
        !           842:                                    return( 0 );
        !           843:                                    
        !           844:                            } else if ( uAmPmChars == 1 ) {
        !           845:                            
        !           846:                                if ( (szCurVal[0] != 'a' && szCurVal[0] != 'A' &&
        !           847:                                      szCurVal[0] != 'p' && szCurVal[0] != 'P'    ) ||
        !           848:                                     (uParam != 'm' && uParam != 'M')                  ) {
        !           849:                                     
        !           850:                                     MessageBeep( MB_OK );
        !           851:                                     
        !           852:                                     return( 0 );
        !           853:                                     
        !           854:                                }
        !           855:                                
        !           856:                            } else if ( uAmPmChars == 2 ) {
        !           857:                            
        !           858:                                if ( (szCurVal[0] != 'a' && szCurVal[0] != 'A' && 
        !           859:                                      szCurVal[0] != 'p' && szCurVal[0] != 'P'    ) ) {
        !           860:                                     
        !           861:                                     MessageBeep( MB_OK );
        !           862:                                     
        !           863:                                     SendMessage( hWnd, WM_SETTEXT, 0, (LPARAM)"" );
        !           864:                                     
        !           865:                                     return( 0 );
        !           866:                                     
        !           867:                                } else if ( szCurVal[1] != 'm' && szCurVal[1] != 'M' ) {
        !           868:                                
        !           869:                                        szCurVal[1] = '\0';                               
        !           870:                                        
        !           871:                                        MessageBeep( MB_OK );
        !           872:                                        
        !           873:                                        SendMessage( hWnd, WM_SETTEXT, 0, (LPARAM)szCurVal );
        !           874:                                        
        !           875:                                        return( 0 );
        !           876:                                        
        !           877:                                }
        !           878:                                
        !           879:                            } else if ( uAmPmChars > 2 ) {
        !           880:                                
        !           881:                                uAmPmChars = 0;
        !           882:                                
        !           883:                                MessageBeep( MB_OK );
        !           884:                                
        !           885:                                SendMessage( hWnd, WM_SETTEXT, 0, (LPARAM)"" );
        !           886:                             
        !           887:                                return( 0 );
        !           888:                                
        !           889:                            }
        !           890:                        
        !           891:                        }
        !           892:                        
        !           893:                break;
        !           894:        
        !           895:        } // switch
        !           896:        
        !           897:        return CallWindowProc( (WNDPROC)lpAmPmDefProc, hWnd, message, uParam, lParam ) ;
        !           898:        
        !           899: }
        !           900: 
        !           901: 
        !           902: 
        !           903: //===========================================================================
        !           904: // FUNCTION: AreYouSure()
        !           905: //
        !           906: // Arguments:
        !           907: //
        !           908: //   Uses globals.
        !           909: //
        !           910: // Return Value:
        !           911: //
        !           912: //   ID_YES if the yes button pressed
        !           913: //   ID_NO  if the  no button pressed
        !           914: //
        !           915: //===========================================================================
        !           916: UINT
        !           917: AreYouSure(
        !           918:     HWND hWnd
        !           919:     )
        !           920: {
        !           921: 
        !           922:     return ( MessageBox(
        !           923:                  hWnd,
        !           924:                  "Remove the selected command?",
        !           925:                  "Confirm Remove",
        !           926:                  MB_YESNO | MB_ICONEXCLAMATION
        !           927:                  )
        !           928:            );
        !           929: 
        !           930: }
        !           931: 
        !           932: 
        !           933: 
        !           934: //===========================================================================
        !           935: // FUNCTION: DownButtonProc()
        !           936: //===========================================================================
        !           937: LRESULT APIENTRY DownButtonProc( HWND hWnd, UINT message, UINT uParam, LONG lParam )
        !           938: {
        !           939:     
        !           940:     switch ( message ) {
        !           941:         
        !           942:         case WM_SETFOCUS:
        !           943:                        
        !           944:                        if ( (uParam == (UINT)hHour) || (uParam == (UINT)hMin) || (uParam == (UINT)hAmPm) ) {
        !           945:                                
        !           946:                                hCurrentFocus = (HWND)uParam;
        !           947:                 
        !           948:                 PostMessage( hGlobalAddChg, WM_SPINBUTTON, uParam, (LONG)DOWN );
        !           949:                 
        !           950:                        } else {
        !           951: 
        !           952:                                hCurrentFocus = (HWND)uParam;
        !           953:                                        
        !           954:                        }
        !           955:                        
        !           956:                        break;      
        !           957:        
        !           958:        } // switch
        !           959:        
        !           960:        return CallWindowProc( (WNDPROC)lpDownButtonDefProc, hWnd, message, uParam, lParam ) ;
        !           961:        
        !           962: }
        !           963: 
        !           964: 
        !           965: 
        !           966: /****************************************************************************
        !           967: 
        !           968:     FUNCTION: DrawBitmap
        !           969: 
        !           970:     PURPOSE:  Draw default or pushed button bitmap
        !           971: 
        !           972: ****************************************************************************/
        !           973: 
        !           974: void DrawBitmap(
        !           975:        HDC     hDC,
        !           976:        LONG    xStart, 
        !           977:        LONG    yStart,
        !           978:        HBITMAP hBitmap,
        !           979:        DWORD   rop)
        !           980: {
        !           981:   BITMAP        bm;
        !           982:   HDC           hMemDC;
        !           983:   POINT                        pt;
        !           984: 
        !           985:   hMemDC = CreateCompatibleDC (hDC);
        !           986:   SelectObject (hMemDC, hBitmap);
        !           987:   GetObject (hBitmap, sizeof (BITMAP), (LPSTR) &bm);
        !           988:   pt.x = bm.bmWidth;
        !           989:   pt.y = bm.bmHeight;
        !           990:   BitBlt (hDC, xStart, yStart, pt.x, pt.y, hMemDC, 0, 0, rop);
        !           991:   DeleteDC (hMemDC);
        !           992: }
        !           993: 
        !           994: 
        !           995: 
        !           996: //===========================================================================
        !           997: // FUNCTION: HourProc()
        !           998: //===========================================================================
        !           999: LRESULT APIENTRY HourProc( HWND hWnd, UINT message, UINT uParam, LONG lParam )
        !          1000: {
        !          1001:     UINT  uCurVal;        
        !          1002:     UCHAR szCurVal[3];
        !          1003:     
        !          1004:     switch ( message ) {
        !          1005:            
        !          1006:            case WM_COPY:
        !          1007:            case WM_PASTE:
        !          1008:            case WM_CUT:
        !          1009:        
        !          1010:                        // cut and paste dont seem to work...
        !          1011:                
        !          1012:                break;
        !          1013:     
        !          1014:        case WM_CHAR:
        !          1015:     
        !          1016:                        if ( uParam == VK_BACK ) {
        !          1017:                        
        !          1018:                                if ( uHourChars > 0 ) {
        !          1019:                                        
        !          1020:                                        --uHourChars;
        !          1021:                                        
        !          1022:                                }
        !          1023:                                
        !          1024:                                return CallWindowProc( (WNDPROC)lpHourDefProc, hWnd, message, uParam, lParam ) ;
        !          1025:                                
        !          1026:                        } else {
        !          1027:                        
        !          1028:                                uHourChars = (UINT) SendMessage( hWnd, WM_GETTEXT, 2, (LPARAM)szCurVal );
        !          1029:                                
        !          1030:                                if ( uHourChars == 0 ) {
        !          1031:                            
        !          1032:                                uCurVal = 0;
        !          1033:                                
        !          1034:                            } else if ( uHourChars == 1 ) {
        !          1035:                            
        !          1036:                                uCurVal = szCurVal[0] - '0';
        !          1037:                                
        !          1038:                            } else if ( uHourChars == 2 ) {
        !          1039:                            
        !          1040:                                uCurVal  = szCurVal[0] - '0';
        !          1041:                                uCurVal *= 10;
        !          1042:                                uCurVal  = szCurVal[1] - '0';
        !          1043:                            
        !          1044:                            } else if ( uHourChars > 2 ) {
        !          1045:                                
        !          1046:                                uHourChars = 0;
        !          1047:                                
        !          1048:                                SendMessage( hWnd, WM_SETTEXT, 0, (LPARAM)"" );
        !          1049:                             
        !          1050:                                return( 0 );
        !          1051:                                
        !          1052:                            }
        !          1053:                        
        !          1054:                        }
        !          1055:                        
        !          1056:                        if ( ( uParam == ' ' )                                     ||  // space
        !          1057:                             ( uParam < '0' || uParam > '9')                       ||  // not a number
        !          1058:                             ( uParam == '0' && uCurVal == 0 )                     ||  // trying to enter 0 as first char
        !          1059:                             ( (uParam > '2' && uCurVal >= 1) && uHourChars >= 1)  ||  // greater than 12
        !          1060:                             ( uParam <= '2' && uCurVal > 1)                           // greater than 12
        !          1061:                           ) {
        !          1062:                        
        !          1063:                                 MessageBeep( MB_OK );
        !          1064:                                 
        !          1065:                                 return( 0 );
        !          1066:                                 
        !          1067:                        } else if ( uHourChars < 2 ) {
        !          1068:                        
        !          1069:                                ++uHourChars;
        !          1070:                                
        !          1071:                        } else {
        !          1072:         
        !          1073:                    MessageBeep( MB_OK );
        !          1074:                                 
        !          1075:                            return( 0 );
        !          1076:                         
        !          1077:                        }
        !          1078:                
        !          1079:                break;
        !          1080:        
        !          1081:        } // switch
        !          1082:        
        !          1083:        return CallWindowProc( (WNDPROC)lpHourDefProc, hWnd, message, uParam, lParam ) ;
        !          1084:        
        !          1085: }
        !          1086: 
        !          1087: 
        !          1088: 
        !          1089: //===========================================================================
        !          1090: // FUNCTION: JobAdd()
        !          1091: //
        !          1092: // Routine Description:
        !          1093: //
        !          1094: //     Adds a new item to schedule.
        !          1095: //
        !          1096: // Arguments:
        !          1097: //
        !          1098: //     None.  Uses globals.
        !          1099: //
        !          1100: // Return Value:
        !          1101: //
        !          1102: //     NET_API_STATUS return value of remote api call
        !          1103: //
        !          1104: //===========================================================================
        !          1105: NET_API_STATUS
        !          1106: JobAdd(
        !          1107:     VOID
        !          1108:     )
        !          1109: {
        !          1110: 
        !          1111:     NET_API_STATUS          status;
        !          1112: 
        !          1113:     status = NetScheduleJobAdd(
        !          1114:                 GlobalComputerName,
        !          1115:                 (LPBYTE)&GlobalAtInfo,
        !          1116:                 &GlobalJobId
        !          1117:                 );
        !          1118: 
        !          1119:     if ( status != NERR_Success ) {
        !          1120: 
        !          1121:         /*MessageBox(
        !          1122:             hGlobalhWnd,
        !          1123:             ( status == NERR_ServiceNotInstalled ? "The service has not been started" : "Message could not be added." ),
        !          1124:             SZWINDOWTITLE,
        !          1125:             MB_OK | MB_ICONEXCLAMATION
        !          1126:             );
        !          1127:         */
        !          1128:         
        !          1129:         MessagePrint( status );
        !          1130:     }               
        !          1131:     
        !          1132:     return ( status );
        !          1133: 
        !          1134: }
        !          1135: 
        !          1136: 
        !          1137: 
        !          1138: //===========================================================================
        !          1139: //
        !          1140: // FUNCTION: JobDel()
        !          1141: //
        !          1142: //
        !          1143: // Routine Description:
        !          1144: //
        !          1145: //     This does all of the processing necessary to dump out the entire
        !          1146: //     schedule file.  It loops through on each record and formats its
        !          1147: //     information for printing and then goes to the next.
        !          1148: //
        !          1149: // Arguments:
        !          1150: //
        !          1151: //     DEL_ALL if to delete all jobs, DEL_ID otherwise.
        !          1152: //     Uses globals.
        !          1153: //
        !          1154: // Return Value:
        !          1155: //
        !          1156: //     ERROR_SUCCESS                       if everything enumerated OK
        !          1157: //     error returned by remote api        otherwise
        !          1158: //
        !          1159: //===========================================================================
        !          1160: NET_API_STATUS
        !          1161: JobDel(
        !          1162:     UINT Method,
        !          1163:     HWND hWnd
        !          1164:     )
        !          1165: {
        !          1166: 
        !          1167:     DWORD                      dwSelection;
        !          1168:     NET_API_STATUS  status;
        !          1169:     UCHAR           szAtCommand[MAX_ATCMD_LEN];
        !          1170:     UINT            JobId;
        !          1171:     UINT                       uSelection;
        !          1172:     UINT                       uCount;
        !          1173:     char *          ptr;
        !          1174: 
        !          1175: 
        !          1176:     if ( Method != DEL_ID_CHANGE ) {
        !          1177:        
        !          1178:        if ( AreYouSure(hWnd) == IDNO ) {
        !          1179: 
        !          1180:                return( ERROR_SUCCESS );
        !          1181:         
        !          1182:         }
        !          1183: 
        !          1184:     }
        !          1185: 
        !          1186:     switch( Method ) {
        !          1187: 
        !          1188:         case DEL_ALL:
        !          1189: 
        !          1190:             status = NetScheduleJobDel(
        !          1191:                     GlobalComputerName,
        !          1192:                     0,
        !          1193:                     (DWORD)-1
        !          1194:                     );
        !          1195: 
        !          1196:             if ( status == NERR_Success ) {
        !          1197: 
        !          1198:                 SendMessage( hWnd, WM_COMMAND, IDC_REFRESH, (LPARAM)SCS_NONE );
        !          1199:                 break;
        !          1200: 
        !          1201:             }
        !          1202: 
        !          1203:             break;
        !          1204: 
        !          1205:         case DEL_ID:
        !          1206:         case DEL_ID_CHANGE:
        !          1207: 
        !          1208:             // compute id
        !          1209:             
        !          1210:             uSelection = SendDlgItemMessage( hWnd, IDC_ATCOMMANDS, LB_GETCURSEL, 0, 0 );
        !          1211:             uCount     = SendDlgItemMessage( hWnd, IDC_ATCOMMANDS, LB_GETCOUNT,  0, 0 );
        !          1212:             
        !          1213:             SendDlgItemMessage( 
        !          1214:                hWnd, 
        !          1215:                IDC_ATCOMMANDS, 
        !          1216:                LB_GETTEXT, 
        !          1217:                uSelection,
        !          1218:                (LPARAM)szAtCommand 
        !          1219:                );
        !          1220: 
        !          1221:             JobId = 0;
        !          1222:             ptr   = szAtCommand;
        !          1223: 
        !          1224:             while( *ptr >= '0' && *ptr <= '9' ) {
        !          1225: 
        !          1226:                 JobId *= 10;
        !          1227:                 JobId += (UINT)*ptr - '0';
        !          1228: 
        !          1229:                 ptr++;
        !          1230: 
        !          1231:             }
        !          1232: 
        !          1233:             status = NetScheduleJobDel(
        !          1234:                     GlobalComputerName,
        !          1235:                     JobId,
        !          1236:                     JobId
        !          1237:                     );
        !          1238: 
        !          1239:             if ( status != NERR_Success) {
        !          1240: 
        !          1241:                 //MessageBox( hWnd, "Problem deleteing a job.", SZWINDOWTITLE, MB_OK | MB_ICONEXCLAMATION );
        !          1242:                 
        !          1243:                 MessagePrint( status );
        !          1244: 
        !          1245:                 break;
        !          1246: 
        !          1247:             }
        !          1248:             
        !          1249:             if ( uCount == 1 ) {
        !          1250:                                                    
        !          1251:                                // this was the only job
        !          1252:                                
        !          1253:                SendMessage( hWnd, WM_COMMAND, IDC_REFRESH, (LPARAM)SCS_NONE );
        !          1254:                
        !          1255:             } else if ( uSelection == 0 ) {
        !          1256:             
        !          1257:                // the first/top job was selected and there is more than 1 job
        !          1258:                
        !          1259:                SendMessage( hWnd, WM_COMMAND, IDC_REFRESH, (LPARAM)SCS_TOP );
        !          1260:             
        !          1261:             } else if ( ( uCount - 1 ) == uSelection ) {
        !          1262:                
        !          1263:                // the last/bottom job was selected
        !          1264:                
        !          1265:                SendMessage( hWnd, WM_COMMAND, IDC_REFRESH, (LPARAM)SCS_BOTTOM );
        !          1266:             
        !          1267:             } else {
        !          1268:             
        !          1269:                // the 2nd thru last-1 job was selected
        !          1270:                
        !          1271:                dwSelection  = 0;
        !          1272:                dwSelection |= uSelection << 16;
        !          1273:                dwSelection |= SCS_SELINHIGHWORD;
        !          1274:                
        !          1275:                SendMessage( hWnd, WM_COMMAND, IDC_REFRESH, (LPARAM)dwSelection );
        !          1276:             
        !          1277:             }
        !          1278: 
        !          1279:             break;
        !          1280: 
        !          1281:     }
        !          1282: 
        !          1283:     return( status );
        !          1284: 
        !          1285: }
        !          1286: 
        !          1287: 
        !          1288: 
        !          1289: //===========================================================================
        !          1290: //
        !          1291: // FUNCTION: JobEnum()
        !          1292: //
        !          1293: //
        !          1294: // Routine Description:
        !          1295: //
        !          1296: //     This does all of the processing necessary to dump out the entire
        !          1297: //     schedule file.  It loops through on each record and formats its
        !          1298: //     information for printing and then goes to the next.
        !          1299: //
        !          1300: // Arguments:
        !          1301: //
        !          1302: //     None.  Uses globals.
        !          1303: //
        !          1304: // Return Value:
        !          1305: //
        !          1306: //     ERROR_SUCCESS                       if everything enumerated OK
        !          1307: //     error returned by remote api        otherwise
        !          1308: //
        !          1309: //===========================================================================
        !          1310: NET_API_STATUS
        !          1311: JobEnum(
        !          1312:     DWORD SetCurrentSelection
        !          1313:     )
        !          1314: {
        !          1315: 
        !          1316:     BOOL            fFlag;
        !          1317:     BOOL            first = TRUE;
        !          1318:     DWORD           EntriesRead;
        !          1319:     DWORD           ResumeJobId = 0;
        !          1320:     DWORD           TotalEntries;
        !          1321:     LPVOID          EnumBuffer = NULL;
        !          1322:     NET_API_STATUS  status = NERR_Success;
        !          1323:     PAT_ENUM        pAtEnum;
        !          1324:     //UCHAR           szTemp[80];
        !          1325:     static UINT                uSelection;
        !          1326:     static UINT                uTopIndex;
        !          1327:     int             i;
        !          1328:     
        !          1329:     // initialize to current selection
        !          1330:     
        !          1331:        uSelection = SendDlgItemMessage( hGlobalhWnd, IDC_ATCOMMANDS, LB_GETCURSEL,   0, 0 );
        !          1332:        uTopIndex  = SendDlgItemMessage( hGlobalhWnd, IDC_ATCOMMANDS, LB_GETTOPINDEX, 0, 0 );
        !          1333:        
        !          1334:        if ( uSelection == LB_ERR ) {
        !          1335:        
        !          1336:                uSelection = 0;
        !          1337:                
        !          1338:        }
        !          1339: 
        !          1340:     for ( ; ;) {
        !          1341: 
        !          1342:         status = NetScheduleJobEnum(
        !          1343:                 GlobalComputerName,
        !          1344:                 (LPBYTE *)&EnumBuffer,
        !          1345:                 (DWORD)-1,
        !          1346:                 &EntriesRead,
        !          1347:                 &TotalEntries,
        !          1348:                 &ResumeJobId
        !          1349:                 );
        !          1350:          
        !          1351:         if ( status != ERROR_SUCCESS  &&  status != ERROR_MORE_DATA) {
        !          1352:             
        !          1353:             //
        !          1354:             // not needded since both the if/else(MessagePrint) will set this text now
        !          1355:             //
        !          1356:             //SendDlgItemMessage( hGlobalhWnd, IDC_ATCOMMANDS, LB_RESETCONTENT, 0, 0 );
        !          1357:             //
        !          1358:             //SendDlgItemMessage( hGlobalhWnd, IDC_ATCOMMANDS, LB_ADDSTRING, 0, (LPARAM)szError );
        !          1359:                    
        !          1360:             EnableWindow( GetDlgItem( hGlobalhWnd, IDC_ADD    ), FALSE );
        !          1361:             EnableWindow( GetDlgItem( hGlobalhWnd, IDC_CHANGE ), FALSE );
        !          1362:                EnableWindow( GetDlgItem( hGlobalhWnd, IDC_REMOVE ), FALSE );
        !          1363:                
        !          1364:                if ( status == NERR_ServiceNotInstalled ) {
        !          1365:             
        !          1366:                 SendDlgItemMessage( hGlobalhWnd, IDC_ATCOMMANDS, LB_RESETCONTENT, 0, 0 );
        !          1367: 
        !          1368:                 SendDlgItemMessage( hGlobalhWnd, IDC_ATCOMMANDS, LB_ADDSTRING, 0, (LPARAM)"Schedule service not started." );
        !          1369: 
        !          1370:                        if ( ServiceNotStartedHandler() == FALSE ) {
        !          1371:                
        !          1372:                                return( status );
        !          1373:                        
        !          1374:                        } else {
        !          1375:                                      
        !          1376:                            continue;
        !          1377:                                
        !          1378:                        }
        !          1379:                                     
        !          1380:                } else  {
        !          1381: 
        !          1382:                 /*wsprintf( szTemp, "The computer %s cannot be found.\nError %u.", &szComputerM[2], status );
        !          1383:                                  
        !          1384:                    MessageBox(
        !          1385:                         hGlobalhWnd,
        !          1386:                                        szTemp,
        !          1387:                        SZWINDOWTITLE,
        !          1388:                        MB_OK | MB_ICONEXCLAMATION
        !          1389:                        );
        !          1390:                    */
        !          1391:                    
        !          1392:                                MessagePrint( status );
        !          1393:                                
        !          1394:                    return( status );
        !          1395: 
        !          1396:                }
        !          1397:                        
        !          1398:         }
        !          1399: 
        !          1400:         assert( status == ERROR_SUCCESS ? TotalEntries == EntriesRead : TotalEntries > EntriesRead );
        !          1401: 
        !          1402:         if ( TotalEntries == 0) {
        !          1403: 
        !          1404:             break;  //  no items found
        !          1405: 
        !          1406:         }
        !          1407: 
        !          1408:         if ( first == TRUE) { 
        !          1409: 
        !          1410:             ResetListboxExtents( GetDlgItem( hGlobalhWnd, IDC_ATCOMMANDS ) );
        !          1411:             SendDlgItemMessage( hGlobalhWnd, IDC_ATCOMMANDS, LB_RESETCONTENT, 0, 0 );
        !          1412: 
        !          1413:             first = FALSE;
        !          1414: 
        !          1415:         }
        !          1416: 
        !          1417:         for ( pAtEnum = EnumBuffer;  EntriesRead-- > 0;  pAtEnum++) {
        !          1418: 
        !          1419:             // not sure what this is doing...
        !          1420: 
        !          1421:             /*
        !          1422:             if ( pAtEnum->Flags & JOB_EXEC_ERROR) {
        !          1423: 
        !          1424:                 if ( MessageGet( APE2_GEN_ERROR, &smallBuffer, 0 ) == 0) {
        !          1425: 
        !          1426:                     // error reported already
        !          1427:                     exit( -1);
        !          1428: 
        !          1429:                 }
        !          1430: 
        !          1431:                 printf( DUMP_FMT1, smallBuffer );
        !          1432:                 LocalFree( smallBuffer );
        !          1433: 
        !          1434:             } else {
        !          1435: 
        !          1436:                 printf( DUMP_FMT1, L"");
        !          1437: 
        !          1438:             }
        !          1439:             */
        !          1440: 
        !          1441:             // replate with...
        !          1442: 
        !          1443:             if ( pAtEnum->Flags & JOB_EXEC_ERROR) {
        !          1444: 
        !          1445:                 MessagePrint( APE2_GEN_ERROR );
        !          1446: 
        !          1447:             }
        !          1448: 
        !          1449:             szWhenDay[0] = '\0';
        !          1450: 
        !          1451:             if ( pAtEnum->Flags & JOB_RUN_PERIODICALLY ) {
        !          1452: 
        !          1453:                 lstrcat( szWhenDay, "Each " );
        !          1454: 
        !          1455:             } else if ( pAtEnum->DaysOfWeek != 0 || pAtEnum->DaysOfMonth != 0 ) {
        !          1456: 
        !          1457:                 lstrcat( szWhenDay, "Next " );
        !          1458: 
        !          1459:             } else if ( pAtEnum->Flags & JOB_RUNS_TODAY ) {
        !          1460: 
        !          1461:                 lstrcat( szWhenDay, "Today " );
        !          1462: 
        !          1463:             } else {
        !          1464: 
        !          1465:                 lstrcat( szWhenDay, "Tomorrow " );
        !          1466: 
        !          1467:             }
        !          1468: 
        !          1469:             if ( pAtEnum->DaysOfWeek != 0 ) {
        !          1470: 
        !          1471:                 for ( i=0; i<7; ++i ) {
        !          1472: 
        !          1473:                     if ( ( pAtEnum->DaysOfWeek & ( 1 << i ) ) != 0 ) {
        !          1474: 
        !          1475:                         lstrcat( szWhenDay, szDayAbbr[i] );
        !          1476: 
        !          1477:                     }
        !          1478: 
        !          1479:                 }
        !          1480: 
        !          1481:             }
        !          1482: 
        !          1483:             if ( pAtEnum->DaysOfMonth != 0 ) {
        !          1484: 
        !          1485:                 for ( i=0; i<31; ++i ) {
        !          1486: 
        !          1487:                     if ( ( pAtEnum->DaysOfMonth & ( 1L << i ) ) != 0 ) {
        !          1488: 
        !          1489:                         wsprintf( szDateAbbr, "%d ", i+1 );
        !          1490: 
        !          1491:                         lstrcat( szWhenDay, szDateAbbr );
        !          1492: 
        !          1493:                     }
        !          1494: 
        !          1495:                 }
        !          1496: 
        !          1497:             }
        !          1498: 
        !          1499: 
        !          1500:             dwTime     = pAtEnum->JobTime / 1000 / 60;       // total minutes
        !          1501: 
        !          1502:             szTime[0]  = (UCHAR)( dwTime / 600 ) + '0';      // 10s of hours
        !          1503:             dwTime    %= 600;
        !          1504: 
        !          1505:             szTime[1]  = (UCHAR)( dwTime / 60 )  + '0';      // 1s of hours
        !          1506:             dwTime    %= 60;
        !          1507: 
        !          1508:             szTime[2]  = ':';
        !          1509: 
        !          1510:             szTime[3]  = (UCHAR)( dwTime / 10 )  + '0';      // 10s of minutes
        !          1511:             dwTime    %= 10;
        !          1512: 
        !          1513:             szTime[4]  = (UCHAR)( dwTime )       + '0';      // 1s of minutes
        !          1514: 
        !          1515:             szTime[5]  = '\0';
        !          1516:             
        !          1517:             // convert this 24-hour time to AM/PM form
        !          1518:             
        !          1519:             szTime[5] = 'A';
        !          1520:             szTime[6] = 'M';
        !          1521:             szTime[7] = '\0';
        !          1522:                                                     
        !          1523:                        // if it is past 1000 but before 2000 (24-hour time)
        !          1524:                                                                            
        !          1525:             if ( szTime[0] == '1' ) {
        !          1526:                        
        !          1527:                        // if it is past 1100
        !          1528: 
        !          1529:                        if ( szTime[1] >= '2' ) {
        !          1530:                        
        !          1531:                                szTime[5] = 'P';     
        !          1532:                                
        !          1533:                        }
        !          1534:                        
        !          1535:                    if( szTime [1] > '2' ) {
        !          1536:            
        !          1537:                        szTime[0] -= 1;
        !          1538:                        szTime[1] -= 2;
        !          1539:                        
        !          1540:                    }
        !          1541: 
        !          1542:             } else if ( szTime[0] == '2' ) {
        !          1543:                
        !          1544:                // it is 2000 or later 
        !          1545:                          
        !          1546:                 szTime[5] = 'P';
        !          1547: 
        !          1548:                    // if it is 2200 or later 
        !          1549: 
        !          1550:                    if( szTime [1] >= '2' ) {
        !          1551:        
        !          1552:                        szTime[0] -= 1;
        !          1553:                        szTime[1] -= 2;
        !          1554:                        
        !          1555:                    } else {
        !          1556:                        
        !          1557:                        szTime[0] -= 2;
        !          1558:                        szTime[1] += 8;
        !          1559:                        
        !          1560:                    }
        !          1561:                    
        !          1562:                }
        !          1563: 
        !          1564:                        if ( szTime[0] == '0' ) {
        !          1565:                        
        !          1566:                                if ( szTime[1] == '0' ) {
        !          1567:                                
        !          1568:                                        // 12 am or pm
        !          1569:                                
        !          1570:                                        szTime[0] = '1';
        !          1571:                                        szTime[1] = '2';
        !          1572:                                        
        !          1573:                                } else {
        !          1574:                                
        !          1575:                                        szTime[0] = ' ';
        !          1576:                                        
        !          1577:                                }
        !          1578:                                
        !          1579:                }
        !          1580:             
        !          1581:             WideCharToMultiByte(
        !          1582:                 CP_ACP,
        !          1583:                 0,
        !          1584:                 pAtEnum->Command,
        !          1585:                 -1,
        !          1586:                 szCommandM,
        !          1587:                 MAXCOMMANDLEN,
        !          1588:                 szDefault,
        !          1589:                 &fFlag
        !          1590:                 );
        !          1591: 
        !          1592:             wsprintf( szAtCommand, "%d\t", pAtEnum->JobId );
        !          1593:             lstrcat( szAtCommand, szWhenDay  );
        !          1594:             lstrcat( szAtCommand, "\t"       );
        !          1595:             lstrcat( szAtCommand, szTime     );
        !          1596:             lstrcat( szAtCommand, "\t"       );
        !          1597:             lstrcat( szAtCommand, szCommandM );
        !          1598: 
        !          1599:             WAddExtentEntry( GetDlgItem( hGlobalhWnd, IDC_ATCOMMANDS ), szAtCommand );
        !          1600:             SendDlgItemMessage( hGlobalhWnd, IDC_ATCOMMANDS, LB_ADDSTRING, 0, (LPARAM)szAtCommand );
        !          1601: 
        !          1602:         }
        !          1603: 
        !          1604:         if ( EnumBuffer != NULL ) {
        !          1605: 
        !          1606:             (VOID)NetApiBufferFree( (LPVOID)EnumBuffer );
        !          1607:             EnumBuffer = NULL;
        !          1608: 
        !          1609:         }
        !          1610: 
        !          1611:         if ( status == ERROR_SUCCESS ) {
        !          1612: 
        !          1613:             break;  //  we have read & displayed all the items
        !          1614: 
        !          1615:         }
        !          1616: 
        !          1617:     } // for
        !          1618: 
        !          1619:     if ( first == TRUE) {
        !          1620: 
        !          1621:         ResetListboxExtents( GetDlgItem( hGlobalhWnd, IDC_ATCOMMANDS ) );
        !          1622:         SendDlgItemMessage( hGlobalhWnd, IDC_ATCOMMANDS, LB_RESETCONTENT, 0, 0 );
        !          1623:         WAddExtentEntry( GetDlgItem( hGlobalhWnd, IDC_ATCOMMANDS ), szNoEntries );
        !          1624:         SendDlgItemMessage( hGlobalhWnd, IDC_ATCOMMANDS, LB_ADDSTRING, 0, (LPARAM)szNoEntries );
        !          1625:         
        !          1626:         EnableWindow( GetDlgItem( hGlobalhWnd, IDC_ADD ), TRUE );
        !          1627:         EnableWindow( GetDlgItem( hGlobalhWnd, IDC_CHANGE ), FALSE );
        !          1628:         EnableWindow( GetDlgItem( hGlobalhWnd, IDC_REMOVE ), FALSE );
        !          1629:                
        !          1630:     } else {
        !          1631:     
        !          1632:        switch ( LOWORD( SetCurrentSelection ) ) {
        !          1633:        
        !          1634:                case SCS_BOTTOM:
        !          1635:                        
        !          1636:                        uSelection = SendDlgItemMessage( hGlobalhWnd, IDC_ATCOMMANDS, LB_GETCOUNT, 0, 0 ) - 1;
        !          1637:                        
        !          1638:                        SendDlgItemMessage( hGlobalhWnd, IDC_ATCOMMANDS, LB_SETCURSEL,  uSelection,     0 );    
        !          1639:                        
        !          1640:                        break;
        !          1641:                                 
        !          1642:                    case SCS_NOCHANGE:
        !          1643:                
        !          1644:                                // uSelection has already been set
        !          1645:                                
        !          1646:                    SendDlgItemMessage( hGlobalhWnd, IDC_ATCOMMANDS, LB_SETCURSEL,  uSelection, 0 );
        !          1647:                    
        !          1648:                    break;
        !          1649:                    
        !          1650:                case SCS_TOP:
        !          1651:                        
        !          1652:                        uSelection = 0;
        !          1653:                                
        !          1654:                                SendDlgItemMessage( hGlobalhWnd, IDC_ATCOMMANDS, LB_SETCURSEL,  uSelection,     0 );
        !          1655:                                
        !          1656:                                break;
        !          1657:                                
        !          1658:                case SCS_SELINHIGHWORD:
        !          1659:                            
        !          1660:                            uSelection = HIWORD( SetCurrentSelection );
        !          1661:                                
        !          1662:                                SendDlgItemMessage( hGlobalhWnd, IDC_ATCOMMANDS, LB_SETCURSEL,  uSelection,     0 );
        !          1663:                                
        !          1664:                                break;
        !          1665:                                
        !          1666:                        case SCS_NONE:
        !          1667:                        default:
        !          1668:                        
        !          1669:                                break;  
        !          1670:                        
        !          1671:        }       
        !          1672:        
        !          1673:        SendDlgItemMessage( hGlobalhWnd, IDC_ATCOMMANDS, LB_SETTOPINDEX,  uTopIndex,    0 );    
        !          1674:        
        !          1675:        EnableWindow( GetDlgItem( hGlobalhWnd, IDC_ADD ), TRUE );
        !          1676:        EnableWindow( GetDlgItem( hGlobalhWnd, IDC_CHANGE ), TRUE );
        !          1677:        EnableWindow( GetDlgItem( hGlobalhWnd, IDC_REMOVE ), TRUE );
        !          1678:        
        !          1679:     }
        !          1680: 
        !          1681:     return( ERROR_SUCCESS );
        !          1682: 
        !          1683: }
        !          1684: 
        !          1685: 
        !          1686: 
        !          1687: 
        !          1688: //===========================================================================
        !          1689: // FUNCTION: MessagePrint()
        !          1690: //===========================================================================
        !          1691: DWORD
        !          1692: MessagePrint(
        !          1693:     IN      DWORD       MessageId,
        !          1694:     ...
        !          1695:     )
        !          1696: /*++
        !          1697: 
        !          1698: Routine Description:
        !          1699: 
        !          1700:     Finds the unicode message corresponding to the supplied message id,
        !          1701:     merges it with caller supplied string(s), and prints the resulting
        !          1702:     string.  
        !          1703: 
        !          1704: Arguments:
        !          1705: 
        !          1706:     MessageId       -   message id
        !          1707: 
        !          1708: Return Value:
        !          1709: 
        !          1710:     Count of characters, not counting the terminating null character,
        !          1711:     printed by this routine.  Zero return value indicates failure.
        !          1712: 
        !          1713: --*/
        !          1714: {
        !          1715:     va_list             arglist;
        !          1716:     UCHAR *             buffer = NULL;
        !          1717:     UCHAR *                    ptr;
        !          1718:     DWORD               length;
        !          1719:     LPVOID              lpSource;
        !          1720:     DWORD               dwFlags = FORMAT_MESSAGE_ARGUMENT_ARRAY |
        !          1721:                                   FORMAT_MESSAGE_ALLOCATE_BUFFER;
        !          1722: 
        !          1723:  
        !          1724:     va_start( arglist, MessageId );
        !          1725: 
        !          1726:     if ( MessageId < NERR_BASE) {
        !          1727:         //
        !          1728:         //  Get message from system.
        !          1729:         //
        !          1730:         lpSource = NULL; // redundant step according to FormatMessage() spec
        !          1731:         dwFlags |= FORMAT_MESSAGE_FROM_SYSTEM;
        !          1732: 
        !          1733:     } else if (  ( MessageId >= APE2_AT_DEL_WARNING
        !          1734:                     &&  MessageId <= APE2_AT_DI_COMMAND)
        !          1735:               //
        !          1736:               // I cannot find these definitions!!!!
        !          1737:               //
        !          1738:               //|| ( MessageId >= IDS_LOAD_LIBRARY_FAILURE 
        !          1739:               //      &&  MessageId <= IDS_USAGE )
        !          1740:               ) {
        !          1741:         //
        !          1742:         //  Get message from this module.
        !          1743:         //
        !          1744:         lpSource = NULL;
        !          1745:         dwFlags |= FORMAT_MESSAGE_FROM_HMODULE;
        !          1746: 
        !          1747:     } else {
        !          1748:         //
        !          1749:         //  Get message from netmsg.dll.
        !          1750:         //
        !          1751:         lpSource = GlobalMessageHandle;
        !          1752:         dwFlags |= FORMAT_MESSAGE_FROM_HMODULE;
        !          1753:     }
        !          1754: 
        !          1755:     length = FormatMessage(
        !          1756:             dwFlags,                                          //  dwFlags
        !          1757:             lpSource,                                         //  lpSource
        !          1758:             MessageId,                                        //  MessageId
        !          1759:             0L,                                               //  dwLanguageId
        !          1760:             (LPTSTR)&buffer,                                 //  lpBuffer
        !          1761:             0,                                                //  size
        !          1762:             (va_list *) arglist                               //  lpArguments
        !          1763:             );
        !          1764: 
        !          1765:     if ( length != 0) {
        !          1766: 
        !          1767:         //change to MessageBox
        !          1768:         //printf( "%ws", buffer );
        !          1769:         
        !          1770:         ptr = buffer;
        !          1771:         
        !          1772:         while ( *ptr ) {
        !          1773:             
        !          1774:             if ( ( *ptr < ' ' ) || ( *ptr > '~' ) ) {
        !          1775:                 
        !          1776:                *ptr = ' ';
        !          1777:                
        !          1778:             }
        !          1779: 
        !          1780:                ptr++;          
        !          1781:                
        !          1782:         }
        !          1783:                  
        !          1784:         SendDlgItemMessage( hGlobalhWnd, IDC_ATCOMMANDS, LB_RESETCONTENT, 0, 0 );
        !          1785:                
        !          1786:         SendDlgItemMessage( hGlobalhWnd, IDC_ATCOMMANDS, LB_ADDSTRING, 0, (LPARAM)(LPTSTR)buffer );
        !          1787: 
        !          1788:         MessageBox( hGlobalhWnd, (LPCTSTR)buffer, SZWINDOWTITLE, MB_OK | MB_ICONEXCLAMATION );
        !          1789: 
        !          1790:         LocalFree( buffer );
        !          1791:     
        !          1792:     }
        !          1793: 
        !          1794:     return( length);
        !          1795: 
        !          1796: } // MessagePrint()
        !          1797: 
        !          1798: 
        !          1799: 
        !          1800: //===========================================================================
        !          1801: // FUNCTION: MinProc()
        !          1802: //===========================================================================
        !          1803: LRESULT APIENTRY MinProc( HWND hWnd, UINT message, UINT uParam, LONG lParam )
        !          1804: {
        !          1805:     UINT  uCurVal;        
        !          1806:     UCHAR szCurVal[3];
        !          1807:     
        !          1808:     switch ( message ) {
        !          1809:            
        !          1810:            case WM_COPY:
        !          1811:            case WM_PASTE:
        !          1812:            case WM_CUT:
        !          1813:        
        !          1814:                        // cut and paste dont seem to work...
        !          1815:                
        !          1816:                break;
        !          1817:     
        !          1818:        case WM_CHAR:
        !          1819:     
        !          1820:                        if ( uParam == VK_BACK ) {
        !          1821:                        
        !          1822:                                if ( uMinChars > 0 ) {
        !          1823:                                        
        !          1824:                                        --uMinChars;
        !          1825:                                        
        !          1826:                                }
        !          1827:                                
        !          1828:                                return CallWindowProc( (WNDPROC)lpMinDefProc, hWnd, message, uParam, lParam ) ;
        !          1829:                                
        !          1830:                        } else {
        !          1831:                        
        !          1832:                                uMinChars = (UINT) SendMessage( hWnd, WM_GETTEXT, 2, (LPARAM)szCurVal );
        !          1833:                                
        !          1834:                                if ( uMinChars == 0 ) {
        !          1835:                            
        !          1836:                                uCurVal = 0;
        !          1837:                                
        !          1838:                            } else if ( uMinChars == 1 ) {
        !          1839:                            
        !          1840:                                uCurVal = szCurVal[0] - '0';
        !          1841:                                
        !          1842:                            } else if ( uMinChars == 2 ) {
        !          1843:                            
        !          1844:                                uCurVal  = szCurVal[0] - '0';
        !          1845:                                uCurVal *= 10;
        !          1846:                                uCurVal  = szCurVal[1] - '0';
        !          1847:                            
        !          1848:                            } else if ( uMinChars > 2 ) {
        !          1849:                                
        !          1850:                                uMinChars = 0;
        !          1851:                                
        !          1852:                                SendMessage( hWnd, WM_SETTEXT, 0, (LPARAM)"" );
        !          1853:                             
        !          1854:                                return( 0 );
        !          1855:                                
        !          1856:                            }
        !          1857:                        
        !          1858:                        }
        !          1859:                        
        !          1860:                        if ( ( uParam == ' ' )                  ||  // space
        !          1861:                             ( uParam < '0' || uParam > '9' )   ||  // not a number
        !          1862:                             ( uCurVal >= 6  )                      // greater than 59
        !          1863:                           ) {
        !          1864:                        
        !          1865:                                 MessageBeep( MB_OK );
        !          1866:                                 
        !          1867:                                 return( 0 );
        !          1868:                                 
        !          1869:                        } else if ( uMinChars < 2 ) {
        !          1870:                        
        !          1871:                                ++uMinChars;
        !          1872:                                
        !          1873:                        } else {
        !          1874:         
        !          1875:                    MessageBeep( MB_OK );
        !          1876:                                 
        !          1877:                            return( 0 );
        !          1878:                         
        !          1879:                        }
        !          1880:                
        !          1881:                break;
        !          1882:        
        !          1883:        } // switch
        !          1884:        
        !          1885:        return CallWindowProc( (WNDPROC)lpMinDefProc, hWnd, message, uParam, lParam ) ;
        !          1886:        
        !          1887: }
        !          1888: 
        !          1889: 
        !          1890: 
        !          1891: //===========================================================================
        !          1892: // FUNCTION: Refresh()
        !          1893: //===========================================================================
        !          1894: UINT                           
        !          1895: Refresh(UINT Command)
        !          1896: {
        !          1897: 
        !          1898:     static BOOL fOkayToRefresh;
        !          1899:        static BOOL     fOkayToRefreshSave;
        !          1900:        
        !          1901:        switch( Command ) {
        !          1902:        
        !          1903:                case REFRESH_FALSE:
        !          1904:                    
        !          1905:                    fOkayToRefresh = FALSE;
        !          1906:                    
        !          1907:                        break;
        !          1908: 
        !          1909:                case REFRESH_TRUE:
        !          1910:                    
        !          1911:                    fOkayToRefresh = TRUE;
        !          1912:                    
        !          1913:                        break;
        !          1914:                        
        !          1915:                case REFRESH_QUERY:
        !          1916:                    
        !          1917:                        return( fOkayToRefresh );    
        !          1918:                    
        !          1919:                        break;
        !          1920:                        
        !          1921:                case REFRESH_SAVE:
        !          1922:                    
        !          1923:                    fOkayToRefreshSave = fOkayToRefresh;
        !          1924:                    
        !          1925:                        break;
        !          1926:                
        !          1927:                case REFRESH_RESTORE:
        !          1928:                    
        !          1929:                    fOkayToRefresh = fOkayToRefreshSave;
        !          1930:                    
        !          1931:                        break;                  
        !          1932:        }
        !          1933:        
        !          1934:        return( REFRESH_ERROR );
        !          1935:                                                
        !          1936: }
        !          1937: 
        !          1938: 
        !          1939: 
        !          1940: //===========================================================================
        !          1941: // FUNCTION: SelectComputerProc()
        !          1942: //===========================================================================
        !          1943: BOOL APIENTRY SelectComputerProc(
        !          1944:         HWND hWnd,         // window handle
        !          1945:         UINT message,      // type of message
        !          1946:         UINT uParam,       // additional information
        !          1947:                LONG lParam)       // additional information
        !          1948: {
        !          1949: 
        !          1950:     DWORD           dwLen = MAXCOMPUTERNAMELEN + 1;
        !          1951:     UCHAR           szSelectComputer[MAXCOMPUTERNAMELEN+1];
        !          1952:     int             wmEvent;
        !          1953:     int             wmId;
        !          1954:         
        !          1955:     switch (message) {
        !          1956: 
        !          1957:         case WM_INITDIALOG:
        !          1958:             
        !          1959:             SendDlgItemMessage( hWnd, IDC_SELECTCOMPUTER, WM_SETFONT, (WPARAM)hFont, 0 );
        !          1960: 
        !          1961:             if ( !GetComputerName( szSelectComputer, &dwLen ) ) {
        !          1962:                                
        !          1963:                                        MessageBox( hWnd, "Problem getting computer name.", SZWINDOWTITLE, MB_OK | MB_ICONEXCLAMATION );
        !          1964:                            
        !          1965:                        } else {
        !          1966:                            
        !          1967:                                SetDlgItemText( hWnd, IDC_SELECTCOMPUTER, szSelectComputer );
        !          1968: 
        !          1969:                        }
        !          1970:                        
        !          1971:                break;
        !          1972: 
        !          1973:         case WM_COMMAND:    // message: command from application menu
        !          1974: 
        !          1975:             // Message packing of uParam and lParam have changed for Win32, let us
        !          1976:             // handle the differences in a conditional compilation:
        !          1977: 
        !          1978:                        wmId    = LOWORD(uParam);
        !          1979:                        wmEvent = HIWORD(uParam);
        !          1980: 
        !          1981:                        switch (wmId) {
        !          1982:             
        !          1983:                                case IDCANCEL:
        !          1984:                                
        !          1985:                                        EndDialog( hWnd, IDCANCEL );
        !          1986:                                        
        !          1987:                                        break;
        !          1988:                                        
        !          1989:                 case IDOK:
        !          1990:                                     
        !          1991:                     GetDlgItemText( hWnd, IDC_SELECTCOMPUTER, &szComputerM[2], MAXCOMPUTERNAMELEN );
        !          1992:                     
        !          1993:                     if ( lstrlen(&szComputerM[2]) > 15 || lstrlen(&szComputerM[2]) == 0 ) {
        !          1994:                     
        !          1995:                        MessageBox( hWnd, "Computer names are 1 to 15 characters long.", SZWINDOWTITLE, MB_OK | MB_ICONEXCLAMATION );
        !          1996:                        
        !          1997:                     } else {
        !          1998:                     
        !          1999:                            SetDlgItemText( hGlobalhWnd, IDC_COMPUTER, &szComputerM[2] );
        !          2000:                            
        !          2001:                            szComputerM[0] = '\\';
        !          2002:                                        szComputerM[1] = '\\';
        !          2003:                                                
        !          2004:                                                MultiByteToWideChar(
        !          2005:                                                CP_ACP,
        !          2006:                                                MB_PRECOMPOSED,
        !          2007:                                                szComputerM,
        !          2008:                                                -1,
        !          2009:                                                szComputerW,
        !          2010:                                                MAXCOMPUTERNAMELEN
        !          2011:                                                );               
        !          2012:                                    
        !          2013:                         GlobalComputerName = szComputerW;
        !          2014:                                
        !          2015:                                Refresh( REFRESH_TRUE );
        !          2016:                                    
        !          2017:                            EndDialog( hWnd, IDOK );
        !          2018:                               
        !          2019:                        }
        !          2020:                        
        !          2021:                     break;
        !          2022:             
        !          2023:             }
        !          2024: 
        !          2025:                        break;
        !          2026: 
        !          2027:     }
        !          2028:  
        !          2029:     return (0);
        !          2030: 
        !          2031: }
        !          2032: 
        !          2033: 
        !          2034: 
        !          2035: //===========================================================================
        !          2036: // FUNCTION: ServiceNotStartedHandler()
        !          2037: //=========================================================================== 
        !          2038: BOOL 
        !          2039: ServiceNotStartedHandler(VOID)
        !          2040: {
        !          2041: 
        !          2042:     BOOL            Done;
        !          2043:     SC_HANDLE       schSCManager;
        !          2044:     SC_HANDLE       schService;
        !          2045:     SERVICE_STATUS  ssServiceStatus;
        !          2046:     UCHAR           szService[] = "Schedule";
        !          2047:     UCHAR           szTemp[80];
        !          2048:     
        !          2049:     wsprintf( szTemp, "Schedule service on %s not started.\nWould you like to start it?", &szComputerM[2] );
        !          2050:                                         
        !          2051:        if ( MessageBox( hGlobalhWnd, szTemp, SZWINDOWTITLE, MB_YESNO ) == IDYES ) {
        !          2052: 
        !          2053:            schSCManager = OpenSCManager( szComputerM, NULL, SC_MANAGER_ALL_ACCESS );
        !          2054:                                    
        !          2055:            if ( schSCManager == NULL ) {
        !          2056:                                                        
        !          2057:                wsprintf( szTemp, "Problem accessing Service Control Manager.\n\nError %d.", GetLastError() );
        !          2058:                
        !          2059:                MessageBox( hGlobalhWnd, szTemp, SZWINDOWTITLE, MB_OK | MB_ICONEXCLAMATION );
        !          2060:                    
        !          2061:                    return( FALSE );
        !          2062:                                    
        !          2063:            } else {
        !          2064:                                                        
        !          2065:                        schService = OpenService( schSCManager, szService, SERVICE_ALL_ACCESS );
        !          2066:                                                                
        !          2067:                        if ( schService == NULL ) {
        !          2068:                                                                
        !          2069:                        wsprintf( szTemp, "Problem opening Schedule service.\n\nError %d.", GetLastError() );
        !          2070:                        
        !          2071:                        MessageBox( hGlobalhWnd, szTemp, SZWINDOWTITLE, MB_OK | MB_ICONEXCLAMATION );
        !          2072:                                            
        !          2073:                        return( FALSE );
        !          2074:                    
        !          2075:                    } else {
        !          2076:                                                                
        !          2077:                                if ( StartService( schService, 0, NULL ) == FALSE ) {
        !          2078:                                                                        
        !          2079:                                wsprintf( szTemp, "Problem starting Schedule service.\n\nError %d.", GetLastError() );
        !          2080:                                
        !          2081:                                MessageBox( hGlobalhWnd, szTemp, SZWINDOWTITLE, MB_OK | MB_ICONEXCLAMATION );
        !          2082: 
        !          2083:                                        return( FALSE );
        !          2084:                                                                                            
        !          2085:                            } else {
        !          2086:                            
        !          2087:                                // wait for service to start
        !          2088:                                
        !          2089:                                Done = FALSE;
        !          2090:                                
        !          2091:                                while( !Done ) {
        !          2092:                                    
        !          2093:                                        if ( QueryServiceStatus( schService, &ssServiceStatus ) == FALSE ) {
        !          2094:                                                                                
        !          2095:                                                wsprintf( szTemp, "Problem getting service status.\n\nError %d.", GetLastError() );
        !          2096:                                                
        !          2097:                                                MessageBox( hGlobalhWnd, szTemp, SZWINDOWTITLE, MB_OK | MB_ICONEXCLAMATION );
        !          2098:                
        !          2099:                                                        return( FALSE );
        !          2100:                                                        
        !          2101:                                                } else {
        !          2102:                                                
        !          2103:                                                        switch ( ssServiceStatus.dwCurrentState ) {
        !          2104:                                                        
        !          2105:                                                                case SERVICE_START_PENDING:
        !          2106:                                                                        
        !          2107:                                                                        Sleep( ssServiceStatus.dwWaitHint );
        !          2108:                                                                        
        !          2109:                                                                        break;
        !          2110:                                                                        
        !          2111:                                                                case SERVICE_RUNNING:
        !          2112:                                                                    
        !          2113:                                                                    Done = TRUE;
        !          2114:                                                                    
        !          2115:                                                                        break;
        !          2116:                                                                        
        !          2117:                                                                default:
        !          2118:                                                                        
        !          2119:                                                                        wsprintf( szTemp, "Unexpected service state.\n\nState %d.", ssServiceStatus.dwCurrentState );
        !          2120:                                                
        !          2121:                                                                MessageBox( hGlobalhWnd, szTemp, SZWINDOWTITLE, MB_OK | MB_ICONEXCLAMATION );
        !          2122:                                                                      
        !          2123:                                                                Done = TRUE;
        !          2124:                                                                      
        !          2125:                                                                break;
        !          2126:                                                                
        !          2127:                                                        }
        !          2128:                                                
        !          2129:                                                }
        !          2130:                                                
        !          2131:                                        }
        !          2132:                                        
        !          2133:                            }
        !          2134:                            
        !          2135:                        CloseServiceHandle(schService);
        !          2136:                
        !          2137:                }
        !          2138:                
        !          2139:                CloseServiceHandle(schSCManager);      
        !          2140:            
        !          2141:            }           
        !          2142: 
        !          2143:                SendDlgItemMessage( hGlobalhWnd, IDC_ATCOMMANDS, LB_RESETCONTENT, 0, 0 );
        !          2144:                
        !          2145:         SendDlgItemMessage( 
        !          2146:                hGlobalhWnd, 
        !          2147:                IDC_ATCOMMANDS, 
        !          2148:                LB_ADDSTRING, 
        !          2149:                0, 
        !          2150:                (LPARAM)"The Schedule service was started successfully." );             
        !          2151:                
        !          2152:                MessageBox( 
        !          2153:                        hGlobalhWnd, 
        !          2154:                        "The Schedule service was started successfully.", 
        !          2155:                        SZWINDOWTITLE, 
        !          2156:                        MB_OK );
        !          2157:                        
        !          2158:                return( TRUE ); 
        !          2159:        
        !          2160:        } else {
        !          2161:            
        !          2162:            Refresh( REFRESH_FALSE );
        !          2163:            
        !          2164:                MessageBox( 
        !          2165:                        hGlobalhWnd, 
        !          2166:                        "The display will not be refreshed automatically.  Chose File, Select Computer to refresh the display.", 
        !          2167:                        SZWINDOWTITLE, 
        !          2168:                        MB_OK | MB_ICONEXCLAMATION );
        !          2169:                
        !          2170:        }
        !          2171:        
        !          2172:        return( FALSE );
        !          2173: 
        !          2174: }       
        !          2175: 
        !          2176: 
        !          2177: 
        !          2178: //===========================================================================
        !          2179: // FUNCTION: UpButtonProc()
        !          2180: //===========================================================================
        !          2181: LRESULT APIENTRY UpButtonProc( HWND hWnd, UINT message, UINT uParam, LONG lParam )
        !          2182: {
        !          2183:     switch ( message ) {
        !          2184:         
        !          2185:         case WM_SETFOCUS:
        !          2186:                        
        !          2187:                        if ( (uParam == (UINT)hHour) || (uParam == (UINT)hMin) || (uParam == (UINT)hAmPm) ) {
        !          2188:                                
        !          2189:                                hCurrentFocus = (HWND)uParam;
        !          2190:                 
        !          2191:                 PostMessage( hGlobalAddChg, WM_SPINBUTTON, uParam, (LONG)UP );
        !          2192:                                        
        !          2193:                        } else {
        !          2194: 
        !          2195:                                hCurrentFocus = (HWND)uParam;
        !          2196:                                        
        !          2197:                        }
        !          2198:                        
        !          2199:                        break;      
        !          2200:        
        !          2201:        } // switch
        !          2202:        
        !          2203:        return CallWindowProc( (WNDPROC)lpUpButtonDefProc, hWnd, message, uParam, lParam ) ;
        !          2204:        
        !          2205: }
        !          2206: 
        !          2207: 
        !          2208: 
        !          2209: //===========================================================================
        !          2210: // FUNCTION: ValidateAddChangeArguments()
        !          2211: //=========================================================================== 
        !          2212: BOOL
        !          2213: ValidateAddChangeArguments(
        !          2214:        HWND hWnd
        !          2215:        )
        !          2216: {
        !          2217: 
        !          2218:     SYSTEMTIME              SysTime;
        !          2219:     UCHAR                   szAmPm[3];
        !          2220:     UINT                    Items[NUMDAYITEMS];
        !          2221:     UINT                    NumSelected;
        !          2222:     UINT                    i;
        !          2223:                
        !          2224:        // initialize
        !          2225: 
        !          2226:     memset( (PBYTE)&GlobalAtInfo, '\0', sizeof(GlobalAtInfo) );
        !          2227: 
        !          2228:        // command
        !          2229: 
        !          2230:     SendDlgItemMessage( hWnd, IDC_NEWCOMMAND, WM_GETTEXT, MAXCOMMANDLEN, (LPARAM)szCommandM );
        !          2231: 
        !          2232:     if ( szCommandM[0] == 0 ) {
        !          2233: 
        !          2234:         MessageBox(
        !          2235:             hWnd,
        !          2236:             "Enter a command.",
        !          2237:             SZWINDOWTITLE,
        !          2238:             MB_OK | MB_ICONEXCLAMATION
        !          2239:             );
        !          2240:         
        !          2241:         SetFocus( GetDlgItem( hWnd, IDC_NEWCOMMAND ) );
        !          2242:         
        !          2243:         return ( FALSE );
        !          2244: 
        !          2245:     }  
        !          2246: 
        !          2247:        MultiByteToWideChar(
        !          2248:         CP_ACP,
        !          2249:         MB_PRECOMPOSED,
        !          2250:         szCommandM,
        !          2251:         -1,
        !          2252:         szCommandW,
        !          2253:         MAXCOMMANDLEN
        !          2254:         );
        !          2255: 
        !          2256:     GlobalAtInfo.Command = szCommandW;
        !          2257:     
        !          2258:        // hours
        !          2259:                         
        !          2260:     GlobalAtInfo.JobTime = GetDlgItemInt( hWnd, IDC_HOUR, NULL, FALSE );
        !          2261:     
        !          2262:     GetDlgItemText( hWnd, IDC_AMPM, (LPTSTR)&szAmPm, sizeof(szAmPm) );
        !          2263:     
        !          2264:     if ( szAmPm[0] == 'P' || szAmPm[0] == 'p' ) {
        !          2265: 
        !          2266:        if( GlobalAtInfo.JobTime != 12 ) {
        !          2267:        
        !          2268:                GlobalAtInfo.JobTime += 12;
        !          2269:                
        !          2270:        }
        !          2271: 
        !          2272:     } else if( GlobalAtInfo.JobTime == 12 ) {
        !          2273:        
        !          2274:                GlobalAtInfo.JobTime = 0;
        !          2275:                
        !          2276:     }
        !          2277:     
        !          2278:     
        !          2279:     // convert to minutes
        !          2280:     
        !          2281:        GlobalAtInfo.JobTime *= 60;
        !          2282:        
        !          2283:        // add minutes
        !          2284:        
        !          2285:        GlobalAtInfo.JobTime += GetDlgItemInt( hWnd, IDC_MIN, NULL, FALSE );
        !          2286:        
        !          2287:        // convert to milliseconds
        !          2288:        
        !          2289:        GlobalAtInfo.JobTime *= 60 * 1000;
        !          2290:        
        !          2291:        GetLocalTime( &SysTime );
        !          2292:        
        !          2293:     if ( SendDlgItemMessage( hWnd, IDC_TODAY, BM_GETCHECK, 0, 0 ) ) {
        !          2294:      
        !          2295:                if ( (DWORD)( (SysTime.wHour * 60 + SysTime.wMinute) * 60 * 1000) >= GlobalAtInfo.JobTime ) {   
        !          2296:                
        !          2297:                        MessageBox( 
        !          2298:                                hWnd, 
        !          2299:                                "The time you have selected has already passed.  The command will run tomorrow.", 
        !          2300:                                SZWINDOWTITLE, 
        !          2301:                 MB_OK | MB_ICONEXCLAMATION
        !          2302:                 );
        !          2303:                        
        !          2304:                }
        !          2305:        
        !          2306:        }
        !          2307:        
        !          2308:        if ( SendDlgItemMessage( hWnd, IDC_EVERY, BM_GETCHECK, 0, 0 ) ||
        !          2309:             SendDlgItemMessage( hWnd, IDC_NEXT, BM_GETCHECK, 0, 0 )    ) {     
        !          2310:        
        !          2311:                // day 
        !          2312:                // NOTE: I am assuming that this lisbox will always be correct
        !          2313:                //       and if you select Today/Tomorrow the proper day is selected.
        !          2314:                
        !          2315:                NumSelected = SendDlgItemMessage( hWnd, IDC_DAYS, LB_GETSELCOUNT, 0, 0 );
        !          2316:                
        !          2317:                if ( NumSelected == 0 ) {
        !          2318: 
        !          2319:                MessageBox(
        !          2320:                    hWnd,
        !          2321:                    "Select the day(s) this command will run.",
        !          2322:                    SZWINDOWTITLE,
        !          2323:                    MB_OK | MB_ICONEXCLAMATION
        !          2324:                    );
        !          2325:                
        !          2326:                SetFocus( GetDlgItem( hWnd, IDC_DAYS ) );
        !          2327:                
        !          2328:                return ( FALSE );
        !          2329: 
        !          2330:        }       
        !          2331: 
        !          2332:                SendDlgItemMessage( hWnd, IDC_DAYS, LB_GETSELITEMS, NUMDAYITEMS, (LPARAM)Items );                                               
        !          2333:                                                
        !          2334:                for( i=0; i<NumSelected; ++i ) {
        !          2335:                
        !          2336:                        if ( Items[i] > 6 ) {
        !          2337:                        
        !          2338:                                // days of month
        !          2339:                                //0-based, 7 and up are dates (1-31)
        !          2340:                
        !          2341:                            GlobalAtInfo.DaysOfMonth |= ( 1 << ( Items[i]-7 ) );
        !          2342:                            
        !          2343:                        } else {
        !          2344:                        
        !          2345:                            // days of week
        !          2346:                            // 0-based, first 7 are days (M-Su)       
        !          2347:                
        !          2348:                        GlobalAtInfo.DaysOfWeek |= ( 1 << Items[i] );
        !          2349:                        
        !          2350:                        }       
        !          2351:                
        !          2352:                }
        !          2353:                 
        !          2354:                // flags
        !          2355: 
        !          2356:         if ( SendDlgItemMessage( hWnd, IDC_EVERY, BM_GETCHECK, 0, 0 ) ) {
        !          2357: 
        !          2358:             GlobalAtInfo.Flags |= JOB_RUN_PERIODICALLY;
        !          2359:     
        !          2360:         }  
        !          2361:        
        !          2362:        } else if ( SendDlgItemMessage( hWnd, IDC_TOMORROW, BM_GETCHECK, 0, 0 ) ) { 
        !          2363:        
        !          2364:                i = SendDlgItemMessage( hWnd, IDC_DAYS, LB_GETCURSEL, 0, 0 );
        !          2365:                
        !          2366:                if ( i == 0 ) {
        !          2367:                                                         
        !          2368:                    // set to Sunday
        !          2369:                    
        !          2370:                        GlobalAtInfo.DaysOfWeek = ( 1 << 6 );
        !          2371:                        
        !          2372:                } else {
        !          2373:                                                           
        !          2374:                    // increment to tomorrow                                       
        !          2375:                        
        !          2376:                        GlobalAtInfo.DaysOfWeek |= ( 1 << i );
        !          2377:                        
        !          2378:                }
        !          2379:                
        !          2380:        }
        !          2381:            
        !          2382:        return( TRUE );
        !          2383: 
        !          2384: }
        !          2385: 
        !          2386: 
        !          2387: 
        !          2388: //===========================================================================
        !          2389: // FUNCTION: WINATDlgProc()
        !          2390: //===========================================================================
        !          2391: BOOL APIENTRY WINATDlgProc(
        !          2392:         HWND hWnd,         // window handle
        !          2393:         UINT message,      // type of message
        !          2394:         UINT uParam,       // additional information
        !          2395:                LONG lParam)       // additional information
        !          2396: {
        !          2397: 
        !          2398:     FARPROC         lpAddChangeDlgProc;  // pointer to the "AddChange" function
        !          2399:     FARPROC         lpProcSelect;
        !          2400:     NET_API_STATUS  status;
        !          2401:     int             wmEvent;
        !          2402:     int             wmId;
        !          2403:     int                                iDlgRetCode;
        !          2404:     
        !          2405:     switch (message) {
        !          2406: 
        !          2407:         case WM_INITDIALOG:
        !          2408: 
        !          2409:             lf.lfEscapement    = 0;
        !          2410:             lf.lfOrientation   = 0;
        !          2411:             lf.lfOutPrecision  = OUT_DEFAULT_PRECIS;
        !          2412:             lf.lfClipPrecision = CLIP_DEFAULT_PRECIS;
        !          2413:             lf.lfHeight        = 14;
        !          2414:             lf.lfWidth         = 0; //6; //5
        !          2415:             lf.lfWeight        = 0;
        !          2416: 
        !          2417:             lf.lfItalic        = 0;
        !          2418:             lf.lfUnderline     = 0;
        !          2419:             lf.lfStrikeOut     = 0;
        !          2420: 
        !          2421:             lf.lfPitchAndFamily=VARIABLE_PITCH | FF_SWISS;
        !          2422: 
        !          2423:             hFont = CreateFontIndirect( &lf );
        !          2424: 
        !          2425:             if ( hFont != NULL ) {
        !          2426: 
        !          2427:                 SendDlgItemMessage( hWnd, IDC_ATCOMMANDS, WM_SETFONT, (WPARAM)hFont, 1L );
        !          2428:                 
        !          2429:             } else {
        !          2430: 
        !          2431:                 MessageBox( hWnd, "Problem creating font.", SZWINDOWTITLE, MB_OK | MB_ICONEXCLAMATION );
        !          2432: 
        !          2433:             }
        !          2434: 
        !          2435:             hCursorWait = LoadCursor( NULL, IDC_WAIT );
        !          2436: 
        !          2437:             if ( !FInitListboxExtents( GetDlgItem( hWnd, IDC_ATCOMMANDS ) ) ) {
        !          2438: 
        !          2439:                 MessageBox( hWnd, "Scrolling broken", SZWINDOWTITLE, MB_OK | MB_ICONEXCLAMATION );
        !          2440: 
        !          2441:             }
        !          2442: 
        !          2443:             hGlobalhWnd = hWnd;
        !          2444: 
        !          2445:             // get values from registry                         
        !          2446:             
        !          2447:             SendMessage(hWnd, WM_COMMAND, IDM_GET_FROM_REGISTRY, 0);
        !          2448: 
        !          2449:             // set tabstops for commands
        !          2450: 
        !          2451:             {
        !          2452:                 
        !          2453:                 UINT Tabs[3] = { 25, 110, 145 };
        !          2454: 
        !          2455:                 SendDlgItemMessage( hWnd, IDC_ATCOMMANDS, LB_SETTABSTOPS, 3, (LPARAM)Tabs );
        !          2456: 
        !          2457:             }
        !          2458: 
        !          2459:                        // get local computer name                 
        !          2460:                        
        !          2461:                        {
        !          2462:                                
        !          2463:                                DWORD dwLen = MAXCOMPUTERNAMELEN;
        !          2464:                                
        !          2465:                                if ( !GetComputerName( &szComputerM[2], &dwLen ) ) {
        !          2466:                                
        !          2467:                                        MessageBox( hWnd, "Problem getting computer name", SZWINDOWTITLE, MB_OK | MB_ICONEXCLAMATION );
        !          2468:                            
        !          2469:                            } else {
        !          2470:                            
        !          2471:                                    szComputerM[0] = '\\';
        !          2472:                                szComputerM[1] = '\\';
        !          2473:                                        
        !          2474:                                    MultiByteToWideChar(
        !          2475:                                        CP_ACP,
        !          2476:                                        MB_PRECOMPOSED,
        !          2477:                                        szComputerM,
        !          2478:                                        -1,
        !          2479:                                        szComputerW,
        !          2480:                                        MAXCOMMANDLEN
        !          2481:                                        );
        !          2482:                                                                        
        !          2483:                     // set GlobalComputerName for all functions to use
        !          2484:                                        // only Select Computer will ever change this value
        !          2485:                                                                                                                
        !          2486:                     GlobalComputerName = szComputerW;
        !          2487:                        
        !          2488:                                SendDlgItemMessage( hWnd, IDC_COMPUTER, WM_SETTEXT, 0, (LPARAM)&szComputerM[2]  );
        !          2489:                                
        !          2490:                        }
        !          2491:                 
        !          2492:                        }
        !          2493:             
        !          2494:             // set initial states of buttons to disabled
        !          2495:             
        !          2496:             EnableWindow( GetDlgItem( hGlobalhWnd, IDC_ADD    ), FALSE );
        !          2497:             EnableWindow( GetDlgItem( hGlobalhWnd, IDC_CHANGE ), FALSE );
        !          2498:                EnableWindow( GetDlgItem( hGlobalhWnd, IDC_REMOVE ), FALSE );
        !          2499:                
        !          2500:                // initialize the commands window
        !          2501:                
        !          2502:                SendDlgItemMessage( hWnd, IDC_ATCOMMANDS, LB_ADDSTRING, 0, (LPARAM)"Initializing" );
        !          2503:                
        !          2504:                // set up timer to go off very soon after the dlgbox is created
        !          2505:                
        !          2506:             uTimer = SetTimer( hWnd, 1, 1000, NULL );
        !          2507:             fTimer = FIRST_TIME; 
        !          2508:             Refresh( REFRESH_TRUE );
        !          2509: 
        !          2510: 
        !          2511:             GlobalMessageHandle = LoadLibrary( "netmsg.dll" );
        !          2512: 
        !          2513:             if ( GlobalMessageHandle == NULL ) {
        !          2514: 
        !          2515: ;//                MessagePrint( IDS_LOAD_LIBRARY_FAILURE, GetLastError() );
        !          2516: 
        !          2517:             }
        !          2518: 
        !          2519:             break;
        !          2520:             
        !          2521:         case WM_TIMER:
        !          2522:             
        !          2523:                        if ( fTimer == FIRST_TIME ) {
        !          2524:                        
        !          2525:                                uTimer = SetTimer( hWnd, 1, REFRESH_RATE, NULL );
        !          2526:                        
        !          2527:                                fTimer = !FIRST_TIME;
        !          2528:                                
        !          2529:                        }
        !          2530:                                                                        
        !          2531:             if ( Refresh( REFRESH_QUERY ) == TRUE ) {
        !          2532:                
        !          2533:                SendMessage( hWnd, WM_COMMAND, IDC_REFRESH, (LPARAM)SCS_NOCHANGE );
        !          2534:                
        !          2535:             }
        !          2536:             
        !          2537:             break;
        !          2538: 
        !          2539:         case WM_COMMAND:    // message: command from application menu
        !          2540: 
        !          2541:             // Message packing of uParam and lParam have changed for Win32, let us
        !          2542:             // handle the differences in a conditional compilation:
        !          2543: 
        !          2544:                        wmId    = LOWORD(uParam);
        !          2545:                        wmEvent = HIWORD(uParam);
        !          2546: 
        !          2547:                        switch (wmId) {
        !          2548: 
        !          2549:                                case IDC_ATCOMMANDS:
        !          2550: 
        !          2551:                            if ( LBN_DBLCLK == wmEvent ) {
        !          2552: 
        !          2553:                                if ( IsWindowEnabled( GetDlgItem( hWnd, IDC_CHANGE ) ) ) {
        !          2554:                                        
        !          2555:                                        PostMessage( hWnd, WM_COMMAND, IDC_CHANGE, 0 ); 
        !          2556:                                
        !          2557:                                }
        !          2558:                                                        
        !          2559:                            }
        !          2560:                                                    
        !          2561:                                break;
        !          2562: 
        !          2563:                 case IDC_REFRESH:
        !          2564:                     
        !          2565:                     if ( Refresh( REFRESH_QUERY ) == TRUE ) {
        !          2566:                                                   
        !          2567:                            Refresh( REFRESH_FALSE );
        !          2568:                            
        !          2569:                            hCursorOld = SetCursor( hCursorWait );
        !          2570:                            
        !          2571:                            status = JobEnum( lParam );
        !          2572:        
        !          2573:                            SetCursor( hCursorOld );
        !          2574:                            
        !          2575:                            if ( status == NERR_Success || status == ERROR_SUCCESS ) {
        !          2576:                            
        !          2577:                                Refresh( REFRESH_TRUE );
        !          2578:                                
        !          2579:                            }
        !          2580:                            
        !          2581:                        }
        !          2582: 
        !          2583:                     break;
        !          2584:                                
        !          2585:                                case IDC_ADD:
        !          2586:                                    
        !          2587:                                    Refresh( REFRESH_FALSE );
        !          2588:                                    
        !          2589:                                    lpAddChangeDlgProc = MakeProcInstance((FARPROC)AddChangeDlgProc, hInstance);
        !          2590:                                
        !          2591:                                    iDlgRetCode = DialogBoxParam(
        !          2592:                                        hInst,
        !          2593:                                        "ADDCHANGEDLG",
        !          2594:                                        hWnd,
        !          2595:                                        (DLGPROC)lpAddChangeDlgProc,
        !          2596:                                        IDC_ADD);
        !          2597:                                    
        !          2598:                                    hGlobalAddChg = NULL;
        !          2599:                                    
        !          2600:                                    FreeProcInstance(lpAddChangeDlgProc);
        !          2601:                                    FreeProcInstance(lpAmPmProc);
        !          2602:                                    FreeProcInstance(lpAmPmDefProc);
        !          2603:                                    FreeProcInstance(lpHourProc);
        !          2604:                                    FreeProcInstance(lpHourDefProc);
        !          2605:                                    FreeProcInstance(lpMinProc);
        !          2606:                                    FreeProcInstance(lpMinDefProc);     
        !          2607:                                    FreeProcInstance(lpDownButtonProc);
        !          2608:                                    FreeProcInstance(lpDownButtonDefProc);
        !          2609:                                    FreeProcInstance(lpUpButtonProc);
        !          2610:                                    FreeProcInstance(lpUpButtonDefProc);
        !          2611: 
        !          2612:                                    Refresh( REFRESH_TRUE );
        !          2613:                                    
        !          2614:                                    if ( iDlgRetCode == IDOK ) {
        !          2615:                                        
        !          2616:                                        SendMessage( hWnd, WM_COMMAND, IDC_REFRESH, (LPARAM)SCS_BOTTOM );
        !          2617:                                        
        !          2618:                                    }
        !          2619:                                                                
        !          2620:                     break;
        !          2621:                     
        !          2622:                 case IDC_CHANGE:         
        !          2623:                        
        !          2624:                        Refresh( REFRESH_FALSE );
        !          2625:                                                            
        !          2626:                     lpAddChangeDlgProc = MakeProcInstance((FARPROC)AddChangeDlgProc, hInstance);
        !          2627:                                
        !          2628:                                    iDlgRetCode = DialogBoxParam(
        !          2629:                                        hInst,
        !          2630:                                        "ADDCHANGEDLG",
        !          2631:                                        hWnd,
        !          2632:                                        (DLGPROC)lpAddChangeDlgProc,
        !          2633:                                        IDC_CHANGE);
        !          2634:                                    
        !          2635:                                    hGlobalAddChg = NULL;
        !          2636:                                    
        !          2637:                                    FreeProcInstance(lpAddChangeDlgProc);
        !          2638:                                    FreeProcInstance(lpAmPmProc);
        !          2639:                                    FreeProcInstance(lpAmPmDefProc);
        !          2640:                                    FreeProcInstance(lpHourProc);
        !          2641:                                    FreeProcInstance(lpHourDefProc);
        !          2642:                                    FreeProcInstance(lpMinProc);
        !          2643:                                    FreeProcInstance(lpMinDefProc);
        !          2644:                                    FreeProcInstance(lpDownButtonProc);
        !          2645:                                    FreeProcInstance(lpDownButtonDefProc);
        !          2646:                                    FreeProcInstance(lpUpButtonProc);
        !          2647:                                    FreeProcInstance(lpUpButtonDefProc);
        !          2648:                                    
        !          2649:                                        Refresh( REFRESH_TRUE );
        !          2650:                                                                            
        !          2651:                                    if ( iDlgRetCode == IDOK ) {
        !          2652:                                        
        !          2653:                                        SendMessage( hWnd, WM_COMMAND, IDC_REFRESH, (LPARAM)SCS_BOTTOM );
        !          2654:                                        
        !          2655:                                    }
        !          2656: 
        !          2657:                     break;
        !          2658:                 
        !          2659:                 case IDC_REMOVE:
        !          2660:                     
        !          2661:                     status = JobDel( DEL_ID, hWnd );   
        !          2662:                                        
        !          2663:                        break;
        !          2664:                        
        !          2665:                 case IDM_GET_FROM_REGISTRY:
        !          2666: 
        !          2667:                     RegCreateKeyEx(REG_HKEY,
        !          2668:                                    szRegistryPath,
        !          2669:                                    0,
        !          2670:                                    "",
        !          2671:                                    REG_OPTION_NON_VOLATILE,
        !          2672:                                    KEY_ALL_ACCESS,
        !          2673:                                    NULL,
        !          2674:                                    &hkHandle,
        !          2675:                                    &dwDisposition);
        !          2676: 
        !          2677:                     if ( dwDisposition == REG_CREATED_NEW_KEY ) {
        !          2678: 
        !          2679:                         RegSetValueEx(hkHandle, "dwX", 0, REG_DWORD, (LPBYTE)DWX, sizeof(DWORD));
        !          2680:                         RegSetValueEx(hkHandle, "dwY", 0, REG_DWORD, (LPBYTE)DWY, sizeof(DWORD));
        !          2681: 
        !          2682:                     }
        !          2683: 
        !          2684:                     {
        !          2685:                         DWORD dwType = REG_DWORD;
        !          2686:                         DWORD dwSize = sizeof(DWORD);
        !          2687: 
        !          2688:                         RegQueryValueEx(hkHandle, "dwX", 0, &dwType, (LPBYTE)&dwX, &dwSize);
        !          2689:                         RegQueryValueEx(hkHandle, "dwY", 0, &dwType, (LPBYTE)&dwY, &dwSize);
        !          2690: 
        !          2691:                     }
        !          2692: 
        !          2693:                     RegCloseKey(hkHandle);
        !          2694: 
        !          2695:                     {
        !          2696:                         RECT Rect;
        !          2697: 
        !          2698:                         if(!GetWindowRect(hWnd, &Rect)) {
        !          2699: 
        !          2700:                             MessageBox(
        !          2701:                                 hWnd,
        !          2702:                                 "Problem getting window coordinates.",
        !          2703:                                 SZWINDOWTITLE,
        !          2704:                                 MB_OK | MB_ICONEXCLAMATION
        !          2705:                                 );
        !          2706: 
        !          2707:                         } else {
        !          2708: 
        !          2709:                             dwW = Rect.right  - Rect.left;
        !          2710:                             dwH = Rect.bottom - Rect.top;
        !          2711: 
        !          2712:                         }
        !          2713: 
        !          2714:                     }
        !          2715: 
        !          2716:                     MoveWindow(hWnd, (INT)dwX, (INT)dwY, (INT)dwW, (INT)dwH, TRUE);
        !          2717: 
        !          2718:                     break;
        !          2719: 
        !          2720:                  case IDM_SAVE_TO_REGISTRY:
        !          2721: 
        !          2722:                     RegCreateKeyEx(REG_HKEY,
        !          2723:                                    szRegistryPath,
        !          2724:                                    0,
        !          2725:                                    "",
        !          2726:                                    REG_OPTION_NON_VOLATILE,
        !          2727:                                    KEY_ALL_ACCESS,
        !          2728:                                    NULL,
        !          2729:                                    &hkHandle,
        !          2730:                                    &dwDisposition
        !          2731:                                    );
        !          2732: 
        !          2733:                     {
        !          2734:                         RECT Rect;
        !          2735: 
        !          2736:                         if(!GetWindowRect(hWnd, &Rect)) {
        !          2737: 
        !          2738:                             dwX = DWX;
        !          2739:                             dwY = DWY;
        !          2740: 
        !          2741:                             MessageBox(
        !          2742:                                 hWnd,
        !          2743:                                 "Problem getting coordinates.",
        !          2744:                                 SZWINDOWTITLE,
        !          2745:                                 MB_OK | MB_ICONEXCLAMATION
        !          2746:                                 );
        !          2747: 
        !          2748:                         } else {
        !          2749: 
        !          2750:                             dwX = Rect.left;
        !          2751:                             dwY = Rect.top;
        !          2752: 
        !          2753:                         }
        !          2754: 
        !          2755:                     }
        !          2756: 
        !          2757:                     RegSetValueEx(hkHandle, "dwX", 0, REG_DWORD, (LPBYTE)&dwX, sizeof(DWORD));
        !          2758:                     RegSetValueEx(hkHandle, "dwY", 0, REG_DWORD, (LPBYTE)&dwY, sizeof(DWORD));
        !          2759: 
        !          2760:                     RegCloseKey(hkHandle);
        !          2761: 
        !          2762:                     break;
        !          2763: 
        !          2764:                 case IDM_ABOUT:
        !          2765:                                            
        !          2766:                                        Refresh( REFRESH_SAVE );
        !          2767:                     Refresh( REFRESH_FALSE );
        !          2768:                     
        !          2769:                     if ( ShellAbout( hGlobalhWnd, SZWINDOWTITLE, SZCREDITS, LoadIcon( hInst, (LPSTR)SZAPPTITLE ) ) == -1 ) {
        !          2770:                     
        !          2771:                        MessageBox( hGlobalhWnd, "Out of memory error.", SZWINDOWTITLE, MB_OK | MB_ICONEXCLAMATION );
        !          2772:                        
        !          2773:                     }
        !          2774:                                        
        !          2775:                                        Refresh( REFRESH_RESTORE );
        !          2776:                                        
        !          2777:                                        break;
        !          2778:                 
        !          2779:                 case IDM_SELECTCOMPUTER:
        !          2780:                     
        !          2781:                     Refresh( REFRESH_SAVE );
        !          2782:                     Refresh( REFRESH_FALSE );
        !          2783:                     
        !          2784:                     lpProcSelect = MakeProcInstance((FARPROC)SelectComputerProc, hInst);
        !          2785: 
        !          2786:                                        iDlgRetCode = DialogBox(hInst,   
        !          2787:                                                "SelectComputer",            
        !          2788:                                                hWnd,                  
        !          2789:                                                (DLGPROC)lpProcSelect);
        !          2790: 
        !          2791:                                        FreeProcInstance(lpProcSelect);
        !          2792:                                                              
        !          2793:                     Refresh( REFRESH_TRUE );
        !          2794:                                                              
        !          2795:                                        if ( iDlgRetCode == IDOK ) {
        !          2796:                                        
        !          2797:                                                SendMessage( hWnd, WM_COMMAND, IDC_REFRESH, (LPARAM)SCS_TOP );
        !          2798:                                                
        !          2799:                                        }
        !          2800:                                        
        !          2801:                        break;
        !          2802:                        
        !          2803:                 case IDM_EXIT:
        !          2804:                 
        !          2805:                     Refresh( REFRESH_FALSE );
        !          2806:                     FFreeListboxExtents( GetDlgItem( hWnd, IDC_ATCOMMANDS ) );
        !          2807:                     ShowWindow( hWnd, SW_RESTORE );
        !          2808:                     SendMessage( hWnd, WM_COMMAND, IDM_SAVE_TO_REGISTRY, 0 );
        !          2809:                     DeleteObject( hFont );  
        !          2810:                     KillTimer( hWnd, 1 );
        !          2811:                     EndDialog( hWnd, 0 );
        !          2812:                                        
        !          2813:                                        break;
        !          2814: 
        !          2815:                 case IDC_HELP:
        !          2816:                     
        !          2817:                     if (!WinHelp (hWnd, "WINAT.HLP", HELP_KEY,(DWORD)(LPSTR)"CONTENTS")) {
        !          2818:                                                MessageBox (GetFocus(),
        !          2819:                                                        "Unable to activate help",
        !          2820:                                                        SZWINDOWTITLE, MB_SYSTEMMODAL|MB_OK|MB_ICONHAND);
        !          2821:                     }                     
        !          2822:                                        break;
        !          2823: 
        !          2824:                 case IDM_HELPCONTENTS:
        !          2825:                                           
        !          2826:                     if (!WinHelp (hWnd, "WINAT.HLP", HELP_KEY,(DWORD)(LPSTR)"CONTENTS")) {
        !          2827:                                                MessageBox (GetFocus(),
        !          2828:                                                        "Unable to activate help",
        !          2829:                                                        SZWINDOWTITLE, MB_SYSTEMMODAL|MB_OK|MB_ICONHAND);
        !          2830:                     }
        !          2831: 
        !          2832:                     break;
        !          2833: 
        !          2834:                                case IDM_HELPSEARCH:
        !          2835: 
        !          2836:                     if (!WinHelp(hWnd, "WINAT.HLP", HELP_PARTIALKEY, (DWORD)(LPSTR)"")) {
        !          2837:                                                MessageBox (GetFocus(),
        !          2838:                                                        "Unable to activate help",
        !          2839:                                                        SZWINDOWTITLE, MB_SYSTEMMODAL|MB_OK|MB_ICONHAND);
        !          2840:                     }
        !          2841: 
        !          2842:                     break;
        !          2843: 
        !          2844:                                case IDM_HELPHELP:
        !          2845: 
        !          2846:                     if(!WinHelp(hWnd, (LPSTR)NULL, HELP_HELPONHELP, 0)) {
        !          2847:                                                MessageBox (GetFocus(),
        !          2848:                                                        "Unable to activate help",
        !          2849:                                                        SZWINDOWTITLE, MB_SYSTEMMODAL|MB_OK|MB_ICONHAND);
        !          2850:                     }
        !          2851: 
        !          2852:                     break;
        !          2853: 
        !          2854:             }
        !          2855: 
        !          2856:             break;
        !          2857: 
        !          2858:         case WM_CLOSE:
        !          2859:         case WM_ENDSESSION:
        !          2860: 
        !          2861:             SendMessage(hWnd, WM_COMMAND, IDM_EXIT, 0);
        !          2862: 
        !          2863:             break;
        !          2864: 
        !          2865:     }
        !          2866: 
        !          2867:     return (0);
        !          2868: 
        !          2869: }
        !          2870: 
        !          2871: 
        !          2872: 
        !          2873: //===========================================================================
        !          2874: // FUNCTION: WinMain()
        !          2875: //===========================================================================
        !          2876: int APIENTRY WinMain(
        !          2877:        HANDLE hInstance,
        !          2878:        HANDLE hPrevInstance,
        !          2879:        LPSTR lpCmdLine,
        !          2880:        int nCmdShow)
        !          2881: {
        !          2882: 
        !          2883:     FARPROC   lpWINATDlgProc;
        !          2884:     WNDCLASS  wc;
        !          2885: 
        !          2886:     hInst       = hInstance;
        !          2887: 
        !          2888:        // Fill in window class structure with parameters that describe the
        !          2889:        // main window.
        !          2890: 
        !          2891:     wc.style         = CS_HREDRAW | CS_VREDRAW;
        !          2892:     wc.lpfnWndProc   = (WNDPROC)DefDlgProc;
        !          2893:     wc.cbClsExtra    = 0;
        !          2894:     wc.cbWndExtra    = DLGWINDOWEXTRA;
        !          2895:     wc.hInstance     = hInstance;
        !          2896:     wc.hIcon         = LoadIcon (hInstance, szAppName);
        !          2897:     wc.hCursor       = LoadCursor(NULL, IDC_ARROW);
        !          2898:     wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
        !          2899:     wc.lpszMenuName  = szAppName;
        !          2900:     wc.lpszClassName = szAppName;
        !          2901: 
        !          2902:     // Register the window class
        !          2903: 
        !          2904:     RegisterClass(&wc);
        !          2905: 
        !          2906: 
        !          2907:     //
        !          2908:     // this program is only a single dialog box
        !          2909:     //
        !          2910: 
        !          2911:     lpWINATDlgProc = MakeProcInstance((FARPROC)WINATDlgProc, hInstance);
        !          2912: 
        !          2913:     DialogBox(hInstance,
        !          2914:         "WINATDLG",
        !          2915:         0,
        !          2916:         (DLGPROC)lpWINATDlgProc
        !          2917:         );
        !          2918: 
        !          2919:     FreeProcInstance(lpWINATDlgProc);
        !          2920:                                    
        !          2921:     return 0;
        !          2922: 
        !          2923: }
        !          2924: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.