Commits

Anonymous committed e43d056

DOS security package

Comments (0)

Files changed (57)

ADMINSEC.TR2

Binary file added.
+The DOS security package was originally designed for the Arts PC,
+as I call it, it's an 80386 running MS-DOS 6.22 and Windows 3.1
+(OT - Old Technology as I like to say).
+
+Here is is the design criteria:
+
+1. The system should ensure that all users log on correctly
+2. All log on / log offs / other events should be logged.
+3. Users are only allowed to use the computer X hours per day.
+4. When a users time is up the PC should stop the user from using it.
+5. All settings must be kept in a secret encrypted control file.
+6. The log must be inaccessable and encrypted to the users.
+7. Changes to the control file must be detected with checksums.
+8. If tampering if detected nobody should log on.
+
+The administrator should enjoy thiese privilleges:
+
+1. Read and clear the log file.
+2. Change the control file through options (not direct access)
+3. Access an administator mode where everything may be changed.
+4. Add / remove / disable user accounts.
+#ifndef __INC_ADMIN_H
+#define __INC_ADMIN_H
+#include "Headers\BeginCH.H"
+/*-------------------------------------------------------------------------*/
+/* This functions prompts the admin for his password, it returns FALSE
+if the user is not permitted.  TRUE is returned if the password is entered
+correctly.  You can specify the retries permitted, if zero it is unlimited.
+Optionally you may get the retry on which the user was correct.  If you do
+decide to get the retry count on which the user was correct and the user
+was wrong the value is the try they got to when they cancelled or ran out
+of attempts. */
+typedef struct _S_PROMPTDETAIL
+{
+  HWND ParentWinHandle; /* Set before call, handle of parent of prompt dialog, NULL for no parent, any other handle MUST be valid */ 
+  unsigned int Retries; /* Set before call, number of retries allowed, 0 is infinate */
+  unsigned int ReachedTry; /* This is set by the call it it the count of retries reached */
+  BOOL Try; /* The try flag is set if the user was trying, ie. if the user clicks CANCEL this is FALSE */
+} S_PROMPTDETAIL, *PS_PROMPTDETAIL;
+
+BOOL admin_PromptPsw(PS_PROMPTDETAIL PromptDetail);
+/*-------------------------------------------------------------------------*/
+#endif /*__INC_ADMIN_H*/

AdminSec.DSW

Binary file added.
+#ifndef __INC_ADMINSEC_H
+#define __INC_ADMINSEC_H
+#include "Headers\BeginCH.H"
+/*-------------------------------------------------------------------------*/
+/* This is the main app header */
+#include "AdminSec.RHI" /* Resources */
+#include "CtrlFile.H" /* Type S_CTRLFILE & access to the registry */
+
+extern S_CTRLFILE _ControlFile; /* Global access to the control file */
+/*-------------------------------------------------------------------------*/
+#include "Headers\EndCH.H"
+#endif /*__INC_ADMINSEC_H*/
+#define IDD_PSWPROMPT	3
+#define IDB_ARMAGEDDEN	3
+#define IDB_UNLOCKSWITCH	2
+#define IDB_LOCKSWITCH	1
+#define IDD_ARMAGEDDEN	2
+#define IDC_STATICTEXT1	101
+#define IDC_PSWCUSTOMMSG	101
+#define IDC_STATICTEXT6	102
+#define IDC_LISTBOX1	103
+#define IDC_ACCLIST	103
+#define IDC_BUTTON3	104
+#define IDC_ACCADDBTN	104
+#define IDC_BUTTON4	105
+#define IDC_ACCDEL	105
+#define IDC_STATICFRAME1	102
+#define IDC_EDIT1	103
+#define IDC_PSWPSWEDIT	103
+#define IDC_ADMINPSWEDIT	103
+#define IDC_STATICTEXT2	104
+#define IDC_STARMPSW1	104
+#define IDC_STATICTEXT3	105
+#define IDC_STARMPSW2	105
+#define IDC_STATICTEXT4	106
+#define IDC_STATICTEXT7	107
+#define IDC_STARMPSW3	106
+#define IDC_EDIT2	107
+#define IDC_EDARMPSW1	107
+#define IDC_EDIT3	108
+#define IDC_FULLNAMEED	108
+#define IDC_STATICTEXT8	109
+#define IDC_EDIT6	110
+#define IDC_ACCPSWED	110
+#define IDC_BUTTON5	111
+#define IDC_CHANGEBTN	111
+#define IDC_EDIT4	109
+#define IDC_EDARMPSW3	109
+#define IDC_BUTTON1	110
+#define IDC_CONSENSIS	110
+#define IDC_STATICFRAME2	111
+#define IDC_STATICTEXT5	112
+#define IDC_STSAFEDESC	112
+#define IDC_EDIT5	113
+#define IDC_HDAYED	113
+#define IDC_STATICTEXT9	114
+#define IDC_CHECKBOX1	115
+#define IDC_NOLIMITCHK	115
+#define IDC_CHECKBOX2	116
+#define IDC_DISABLECHK	116
+#define IDC_CHECKBOX3	117
+#define IDC_USERCHANGECHK	117
+#define IDC_ACCDELBTN	105
+#define IDC_EDITSEALEDCODE	113
+#define IDC_STATICFRAME3	114
+#define IDC_STATICBITMAP1	115
+#define IDC_LOCKIMG	115
+#define IDC_STATICBITMAP2	116
+#define IDC_ARMAGIMG	116
+#define IDC_CONSENSISBTN	110
+#define IDC_CONFIRMBTN	117
+#define IDC_EDARMPSW2	108
+#define IDC_STADMINPSW	101
+#define IDI_USERS	1
+#define IDD_MAINWIN	1
+#define IDC_BUTTON2	101
+#define IDC_ARMAGEDDENLAUNCH	101
+#define IDS_INSTMUTEX	  101
+#define IDS_ALRUN         102
+#define IDS_APPNAME       103
+#define IDS_ERROR         104
+#define IDS_DLGFAILCREATE 105
+#define IDS_GETVERFAILED  106
+#define IDS_WINNTONLY     107
+#define IDS_CTRLNOFOUND   108
+#define IDS_CTRLERROPEN   109
+#define IDS_OUTOFMEM      110
+#define IDS_CTRLTOOBIG    111
+#define IDS_CTRLCOF       112
+#define IDS_INTERR        113
+#define IDS_CTRLTAMP      114
+#define IDS_CTRLBAD       115
+#define IDS_INTRUDER      116
+#define IDS_ACCDEL        117
+#define IDS_SELACC2DEL    118
+#define IDS_CONFACCDEL    119
+#define IDS_CONFACCSDEL   120
+#define VERSIONINFO_1	1
+#ifndef __INC_ADMINREC_RHI
+#define __INC_ADMINREC_RHI
+
+#include "AdminSec.RH" /* Resources */
+
+#endif /*__INC_ADMINREC_RHI*/

AdminSec.ide

Binary file added.

AdminSec.mbt

Binary file added.

AdminSec.mrt

Binary file added.
+/* This header includes all dialogs and windows in AdminSec */
+
+#include "ArmDlg.H" /* Armagedden dialog */
+#include "MainWin.H" /* Main window dialog */
+#ifndef __INC_ARMDLG_H
+#define __INC_ARMDLG_H
+#include "Headers\BeginCH.H"
+
+/* Armagedden launch dialog header */
+/*-------------------------------------------------------------------------*/
+typedef struct _S_ARMDLG /* Armagedden dialog class */
+{
+  /* PRIVATE */
+    HWND _handle; /* Handle of this dialog */
+  /* PUBLIC */
+  HWND (*Create)(void*, const HWND Parent); /* Creates dialog (hidden) */
+  BOOL (*Show)(void*, int nCmdShow); /* Shows dialog, creates if not created */
+  HWND (*RegisterEnableOnExit)(const HWND handle); /* Registers a control to be enabled when the dialog closes, if NULL no action taken, returns previous (usually NULL).  There is only one, it cannot be instantaniated even if there are multiple dialogs */
+  HWND (*GetRegisteredEnableOnExit)(void); /* Get handle of window which is registered for enablement when the dialog closes.  There is only one, it cannot be instantaniated, even if there are multiple dialogs */
+  HWND (*GetHandle)(void*); /* Get handle of dialog */
+  BOOL (*Destroy)(void*); /* Destroys the visual element */
+} S_ARMDLG, *PS_ARMDLG;
+
+void S_ARMDLG_Construct(PS_ARMDLG PObject); /* Constructs the object */
+void S_ARMDLG_Destruct(PS_ARMDLG PObject); /* Destructs the object */
+
+/* This next function enables a section on the dialog, the dialog is made from
+several sections, only one of which may be active at any one time, EnDis specifes
+enablement (TRUE) or disablement (FALSE), in the case of enablement the function
+recursivly calls itself to disable the other sections.  The function can fail
+and will if the section number is out of range or if the handle is invalid
+in some way. */
+BOOL EnableArmDlgSection(const HWND Hwnd, const unsigned short SectionNum, const BOOL EnDis);
+/*-------------------------------------------------------------------------*/
+#include "Headers\EndCH.H"
+#endif /*__INC_ARMDLG_H*/

CFADDUSR.IDE

Binary file added.

CFAU32.IDE

Binary file added.

CFAU32.TR2

Binary file added.
+/* Format of security control file - and access functions */
+
+#ifndef __INC_CTRLFILE_H
+#define __INC_CTRLFILE_H
+#include "Headers\BeginCH.H"
+/*-------------------------------------------------------------------------*/
+/* These definitions come first for definition reasons only, the actual
+file starts with the file header.
+In the account info structure an offset is given to the account
+table, which has a number of elements, each of which is a
+_S_CTRLFILE_FORMAT_ACCTABLE
+*/
+
+#define CTRLFILE_PSWLEN (127) /* The length of a password in the control file, always this number +1 for a NULL terminator */
+typedef struct _S_CTRLFILE_FORMAT_ACCINF /* User account info data */
+{
+  char AdminPsw[CTRLFILE_PSWLEN+1]; /* Administrator's password */
+  BYTE MinPswLen; /* Minimum password length acceptable */
+  WORD Accounts; /* # accounts in table */
+  DWORD OffAccTable; /* Offset of account table offset from file base */
+} S_CTRLFILE_FORMAT_ACCINF, *PS_CTRLFILE_FORMAT_ACCINF;
+
+typedef struct _S_CTRLFILE_FORMAT_ACCTABLE /* Format of an entry in the account table */
+{
+  char UserName[128]; /* Name to use during logon, if dialog wants to work that way */
+  char FullName[512]; /* Full name */
+  BYTE Disabled; /* If TRUE, account disabled and user cannot log on */
+  BYTE UserPswChange; /* TRUE if user can change their own password */
+  BYTE HoursPerDay; /* Number of hours per day user may use machine, 0 for unlimited */
+  char UserPsw[CTRLFILE_PSWLEN+1]; /* This user's password */
+} S_CTRLFILE_FORMAT_ACCTABLE, *PS_CTRLFILE_FORMAT_ACCTABLE;
+
+typedef DWORD CHECKSUM32;
+/* The file header is the first structure in the file */
+typedef struct _S_CTRLFILE_FORMAT_FILEHEAD /* File header of control file */
+{
+  DWORD Sig; /* Signature of control file (constant) */
+  WORD Ver; /* Format of control file (version) */
+  CHECKSUM32 Checksum; /* Checksum of control file, must match! */
+  S_CTRLFILE_FORMAT_ACCINF AccInf; /* Account info */
+} S_CTRLFILE_FORMAT_FILEHEAD, *PS_CTRLFILE_FORMAT_FILEHEAD;
+
+#define CTRLFILE_SIG (0x7A80009CUL) /* Expected signature of control file */
+
+/* Control of the control file */
+#define CONTROLFILE "C:\\Security\\Control.FIL" /* Filename of control file */
+typedef unsigned int CTRLFILE_ERROR; /* Error type for use with error information functions */
+/* These errors can occur, all have assosiated messages */
+#define CTRLFILE_ERROR_NOERROR            (0x0) /* No error */
+#define CTRLFILE_ERROR_NOTFOUND           (0x1) /* Control file not found */
+#define CTRLFILE_ERROR_ERROPEN            (0x2) /* Cannot open control file */
+#define CTRLFILE_ERROR_TAMPERED           (0x3) /* Tampering or corruption of control file detected */
+#define CTRLFILE_ERROR_BAD                (0x4) /* Bad control file or control file not recognised */
+#define CTRLFILE_ERROR_OUTOFMEM           (0x5) /* Not enough memory! */
+#define CTRLFILE_ERROR_TOOLARGE           (0x6) /* Control file is too large to fit in memory! */
+#define CTRLFILE_ERROR_PREVLOAD           (0x7) /* Control file was already loaded */
+#define CTRLFILE_ERROR_NOTLOAD            (0x8) /* An attempt to access the control file could not complete, the control file was not loaded */
+#define CTRLFILE_ERROR_CANTOBTAINFACTOR   (0x9) /* Internal error: Cannot obtain blocking factor for control file */
+#define CTRLFILE_ERROR_INDEXRANGE         (0xA) /* Internal error: Account index out of range */
+#define CTRLFILE_ERROR_ENDMARKER (CTRLFILE_ERROR_INDEXRANGE) /* Marks end of error numbers, keep up to date */
+
+typedef struct _S_CTRLFILE /* C-style class to control control file */
+{
+  /* PRIVATE: Do not touch from outside! */
+	 #ifdef __FLAT__
+	 BYTE* _memFile;
+	 #else
+	 BYTE far* _memFile; /* Holds a copy of the control file in memory (plaintext - the actual disk file is encrypted) */
+	 #endif /*__FLAT__*/
+	 DWORD _memFileSize; /* States the size of the file in memory to stop overruns */
+	 BOOL _fileChanged; /* Set TRUE if control file in mem has changed since last save */
+	 CTRLFILE_ERROR _lastError; /* Last error number generated */
+  BOOL (*XorFileData)(void*); /* Xors file data when loaded to (en/de)cypher it */
+  /* PUBLIC: May be accessed from outside */
+  BOOL (*Load)(void*); /* Loads the security file from disk, FALSE is returned on failure, then call GetLastError() */
+  BOOL (*Check)(void*); /* Checks the integrity (untampered) of the control file, if tampered call GetLastError() for reason */
+  BOOL (*Save)(void*); /* Saves the file back to disk, if it fails call GetLastError() */
+  BOOL (*AddAccount)(void*, const PS_CTRLFILE_FORMAT_ACCTABLE PNewAccount); /* Adds an account to the user account table, if you would like to know it's new position call AddAccounti() which gives the index too, return FALSE on failure then call GetLastError() */
+  BOOL (*AddAccounti)(void*, const PS_CTRLFILE_FORMAT_ACCTABLE PNewAccount, WORD* NewPos); /* Same as AddAccount(), if you'd like to know the position the account was added to though pass a pointer to a DOWRD in the 2nd param */
+  BOOL (*DelAccount)(void*, const WORD NewPos); /* Deletes an account, following accounts are shifted up */
+  BOOL (*FindAccountwp)(void*, const char* Psw, WORD* PPos); /* Finds an account (gives Pos through pointer PPos) with a password. WARNING! The password must be plaintext not encrypted.  The function returns FALSE if the string was not found */
+  BOOL (*FindAccountwn)(void*, const char* Name, WORD* PPos); /* Finds an account (gives Pos through pointer PPos) with a UserName.  WARNING! The UserName must be plaintext not encrypted.  The function returns FALSE if the string was not found */
+  BOOL (*GetUser)(void*, const WORD NewPos, PS_CTRLFILE_FORMAT_ACCTABLE); /* Gets a user's account info through a pointer to a structure when given a position */
+  BOOL (*SetUser)(void*, const WORD NewPos, PS_CTRLFILE_FORMAT_ACCTABLE); /* Saves a user's account info back to a position */
+  BOOL (*IsAccPosInRange)(void*, const WORD NewPos); /* Simple return of TRUE or FALSE, account in range or not */
+  WORD (*CountOfAccounts)(void*); /* Returns # accounts in account table */
+  unsigned int (*GetMinPswLen)(void*); /* Recovers the minimum password length specified by admin, zero can't be valid so count this as an error */
+  BOOL (*SetMinPswLen)(void*, const unsigned int NewMinPswLen); /* Sets the new minimum password length, only admin should be allowed to do this */
+  CTRLFILE_ERROR (*GetLastError)(void*); /* Returns last error number for this class */
+  const char* (*GetErrorMessage)(const CTRLFILE_ERROR ErrorNumber); /* Gets error message assosiated with error number */
+  CHECKSUM32 (*CalcChecksum)(void*, BOOL* PErrChk); /* Calculates the checksum of the loaded file, PErrChk is optional and is loaded with TRUE or FALSE where FALSE should cause you to call GetLastError() */
+  int (*GetAdminPsw)(void*, char* Buffer, const int MaxCharsBuff); /* Returns the administrator password into your buffer, the maximum number of character that may be loaded into it must be specifed.  Function returns the length.  It is reconmended that you wipe your buffer after use */
+  BOOL (*SetAdminPsw)(void*, const char* Buffer); /* Sets the admin password, a return of FALSE indicates a file format releate problem */
+  BOOL (*UpdateChecksum)(void*); /* Calculates and updates the checksum of the in-memory control file */
+} S_CTRLFILE, *PS_CTRLFILE;
+
+void S_CTRLFILE_Construct(PS_CTRLFILE PObject); /* Construct the object */
+BOOL S_CTRLFILE_ConstructAndLoad(PS_CTRLFILE PObject); /* Construct the object and load the security control file */
+void S_CTRLFILE_Destruct(PS_CTRLFILE PObject); /* Destruct the object */
+/*-------------------------------------------------------------------------*/
+#include "Headers\EndCH.H"
+#endif /*__INC_CTRLFILE_H*/
+;**********************************************************************;
+;*                      D O S S T U B . A S M                         *;
+;*--------------------------------------------------------------------*;
+;*    Task           : MS-DOS Stub program for Security Admin app     *;
+;*--------------------------------------------------------------------*;
+;*    Author         : DAVID DUNCAN ROSS PALMER                       *;
+;*    Developed on   : 01/06/1999                                     *;
+;*    Last update    : 01/06/1999                                     *;
+;*--------------------------------------------------------------------*;
+;*    Assembly       : MASM:   masm testexe;                          *;
+;*                             link testexe;                          *;
+;*                                                                    *;
+;*                     TASM:   tasm testexe                           *;
+;*                             tlink testexe                          *;
+;**********************************************************************;
+
+;== Stack ==============================================================
+
+stackseg  segment para STACK 'STACK'      ;Definition of stack segment
+
+          dw 3 dup (?)          ;The stack comprises 3 words
+
+stackseg  ends                     ;End of stack segment 
+        
+;== Data ===============================================================
+
+data      segment para 'DATA'     ;Definition of data segment 
+
+          ;-- All data, buffers and variables can be stored here -------
+          
+StubMsg db "The Security Administrator application does not run from DOS,",13,10
+        db "please note that if you are not an administrator you will not",13,10
+        db "be able to run the program anyway.",13,10,"$"
+
+data      ends                    ;End of data segment
+
+;== Code ===============================================================
+
+code      segment para 'CODE'     ;Definition of CODE segment
+
+          assume cs:code, ds:data, ss:stackseg
+
+                                  ;CS defines the code segment, DS
+                                  ;DS the data segment and SS the stack
+                                  ;segment. ES can be accessed freely
+                                  
+prog      proc far                ;This procedure is the main routine,
+                                  ;and is accessed right after the start
+                                  ;of the program
+
+          ;-- CS and SS are already initialized. DS must be initialized 
+          ;-- manually, because it prints to the PSP (like ES)
+          
+          mov  ax,data            ;Load segment address of data segment
+          mov  ds,ax              ;into the DS register 
+
+
+          ;-- Place additional main program code here ------------------
+          
+          mov ah,09h            ;Prepare to call int 21h func 09h (display string)
+          mov dx,offset StubMsg ;Load string address
+          int 21h               ;Display the string
+
+          ;--- End program here using DOS function 4Ch -----------------
+
+          mov  ax,4C00h           ;Load function number and error code 00
+          int  21h                ;DOS call                   
+                                  
+          ;--- Program execution stops here because of DOS call --------
+          
+prog      endp                    ;End of PROG procedure
+
+;-- Subroutines --------------------------------------------------------
+;-- This is the area provided for subroutines within the program -------
+
+a_proc    proc near
+
+          ;...
+          ;...
+          ;...
+          ret
+
+a_proc    endp 
+
+b_proc    proc near
+
+          ;...
+          ;...
+          ;...
+          ret
+
+b_proc    endp 
+
+;-- SETFREE: Release unused memory -------------------------------------
+;-- Input    : ES = Address of PSP
+;-- Output   : none 
+;-- Registers: AX, BX, CL and FLAGS are affected
+;-- Info     : Since the stack segment is always the last segment in an
+;              EXE file, ES:0000 points to the beginning of the program
+;              in memory, and SS:SP points to the end. This allows easy
+;              calculation of the program's length.
+
+setfree   proc near
+
+          mov  bx,ss              ;Compute distance between
+          mov  ax,es              ;PSP and stack
+          sub  bx,ax
+
+          mov  ax,sp              ;Compute stack length
+          add  ax,15              ;in paragraphs
+          mov  cl,4                         
+          shr  ax,cl              ;Stack length
+
+          add  bx,ax              ;Add two values of current length
+
+          mov  ah,4ah             ;Reserve this memory only
+          int  21h                ;DOS call
+
+          ret                     ;Return to caller
+
+setfree endp
+
+;== End ================================================================
+
+code      ends                    ;End of CODE segment
+          end  prog               ;Begin execution with PROG procedure
+                                  
+#ifndef __INC_INIT_H
+#define __INC_INIT_H
+#include "Headers\BeginCH.H"
+/*-------------------------------------------------------------------------*/
+/* Verifies security and integrity of control file, displays a
+message stating if not */
+BOOL init_IsCtrlFileClean(const HWND ParentWinHandle);
+/* Checks duting init routine to see if user knows password */
+BOOL init_PromptAdminPsw(void);
+/*-------------------------------------------------------------------------*/
+#include "Headers\EndCH.H"
+#endif /*__INC_INIT_H*/

LOGON.IDE

Binary file added.

LOGON.TR2

Binary file added.

LogOn.DSW

Binary file added.

LogOn.mbt

Binary file added.

LogOn.mrt

Binary file added.
+/Tde/x/l/v/c/k /V3.10 /LC:\BC5\LIB +
+-v+ C:\BC5\LIB\c0s.obj+
+-v+ sdynmem.obj+
+-v+ elogger.obj+
+-v+ excpthdr.obj+
+-v+ ansisfnc.obj+
+-v+ ctrlfile.obj+
+-v+ logon.obj
+logon.exe
+
+-v+ C:\BC5\LIB\noehs.lib+
+-v+ C:\BC5\LIB\cs.lib
+

MAKECF.IDE

Binary file added.

MAKECF32.IDE

Binary file added.
+#ifndef __INC_MAINWND_H
+#define __INC_MAINWND_H
+#include "Headers\BeginCH.H"
+
+/* Main window header */
+/*-------------------------------------------------------------------------*/
+typedef struct _S_MAINWND /* Main window handle control class */
+{
+  /* PRIVATE: Don't touch from outside the class */
+    HWND _hMainWnd; /* Handle of main window */
+    S_ARMDLG _ArmDlg; /* We own an armagedden dialog */
+
+  /* PUBLIC: Anybody can access these */
+  HWND (*Create)(void*); /* Creates main window (hidden) */
+  BOOL (*Show)(void*, int nCmdShow); /* Shows main window */
+  HWND (*GetHandle)(void*); /* Get's window handle, the handle may not be set */
+  BOOL (*Destroy)(void*); /* Destroys the window */
+} S_MAINWND, *PS_MAINWND;
+
+extern S_MAINWND _MainWindow; /* ONE Instance of main window */
+
+void S_MAINWND_Construct(PS_MAINWND PObject); /* Construct main window */
+void S_MAINWND_Destruct(PS_MAINWND PObject); /* Destruct main window */
+
+void mainwnd_EnableAccDetails(const HWND Hwnd, const BOOL Enablement); /* Enables / disables the account detail display on the main window */
+void mainwnd_CopyToAccDetails(const HWND Hwnd, PS_CTRLFILE_FORMAT_ACCTABLE PAcc); /* Copies details from dialog into structure */
+void mainwnd_CopyFromAccDetails(const HWND Hwnd, const PS_CTRLFILE_FORMAT_ACCTABLE CPAcc); /* Copies details from structure onto dialog */
+/*-------------------------------------------------------------------------*/
+#include "Headers\EndCH.H"
+#endif /*__INC_MAINWND_H*/

MakeCF.DSW

Binary file added.
+/* Make Security Control File - Administators kit : main header */
+
+#ifndef __INC_MAKECF_H
+#define __INC_MAKECF_H
+/*-------------------------------------------------------------------------*/
+void ExitApp(int StatusCode); /* Exits the program, does not return */
+/*-------------------------------------------------------------------------*/
+#endif /*__INC_MAKECF_H*/

MakeCF.mbt

Binary file added.

MakeCF.mrt

Binary file added.
+/Tde/x/l/v/c/k /V3.10 /LC:\BC5\LIB +
+-v+ C:\BC5\LIB\c0c.obj+
+-v+ ctrlinpt.obj+
+-v+ excpthdr.obj+
+-v+ ansisfnc.obj+
+-v+ in1char.obj+
+-v+ makecf.obj
+makecf.exe
+
+-v+ C:\BC5\LIB\noehc.lib+
+-v+ C:\BC5\LIB\cc.lib
+
+#ifndef __INC_MSGS_H
+#define __INC_MSGS_H
+#include "Headers\BeginCH.H"
+/*-------------------------------------------------------------------------*/
+void ErrorAlreadyRunning(const HWND ParWin); /* Program already running error */
+void ErrorDlgFailCreate(const HWND ParWin); /* Dialog could not be created error */
+void ErrorSelAcc2Del(const HWND ParWin); /* When an account should have been selected for deletion but wasn't */
+int ConfAccDel(const HWND ParWin, int HowMany); /* Displays a YES / NO choice dialog to confirm the deletion of accounts.  'HowMany' should be the # of SELECTED items */
+/*-------------------------------------------------------------------------*/
+#include "Headers\EndCH.H"
+#endif /*__INC_MSGS_H*/
+#include <Windows.H>
+#pragma hdrstop
+
+#include "AdminSec.H" /* Main header including resources */
+#include "WinStuff\HInst.H" /* App instance handle */
+#include "Msgs.H" /* Our header */
+/*-------------------------------------------------------------------------*/
+void ErrorDlgFailCreate(const HWND ParWin)
+{
+  TCHAR msg[40];
+  TCHAR tit[10];
+  size_t msgSize = sizeof(msg);
+  size_t titSize = sizeof(tit);
+
+  #ifdef UNICODE
+    msgSize /= 2;
+    titSize /= 2;
+  #endif /*UNICODE*/
+
+  /* Prepare message */
+  LoadString(GetInstanceHandle(), IDS_DLGFAILCREATE, msg, msgSize-1);
+  LoadString(GetInstanceHandle(), IDS_ERROR, tit, titSize-1);
+  /* Display message */
+  MessageBox(ParWin, msg, tit, MB_OK + MB_ICONINFORMATION);
+}
+/*-------------------------------------------------------------------------*/
+void ErrorAlreadyRunning(const HWND ParWin)
+{
+  TCHAR msg[80];
+  TCHAR tit[30];
+  size_t msgSize = sizeof(msg);
+  size_t titSize = sizeof(tit);
+
+  #ifdef UNICODE
+    msgSize /= 2;
+    titSize /= 2;
+  #endif /*UNICODE*/
+
+  /* Prepare message */
+  LoadString(GetInstanceHandle(), IDS_ALRUN, msg, msgSize-1);
+  LoadString(GetInstanceHandle(), IDS_APPNAME, tit, titSize-1);
+  /* Display message */
+  MessageBox(ParWin, msg, tit, MB_OK + MB_ICONINFORMATION);
+}
+/*-------------------------------------------------------------------------*/
+void ErrorSelAcc2Del(const HWND ParWin)
+{
+  TCHAR msg[40];
+  TCHAR tit[20];
+  size_t msgSize = sizeof(msg);
+  size_t titSize = sizeof(tit);
+
+  #ifdef UNICODE
+    msgSize /= 2;
+    titSize /= 2;
+  #endif /*UNICODE*/
+
+  /* Prepare message */
+  LoadString(GetInstanceHandle(), IDS_SELACC2DEL, msg, msgSize-1);
+  LoadString(GetInstanceHandle(), IDS_ACCDEL, tit, titSize-1);
+  /* Display message */
+  MessageBox(ParWin, msg, tit, MB_OK + MB_ICONEXCLAMATION);
+}
+/*-------------------------------------------------------------------------*/
+int ConfAccDel(const HWND ParWin, int HowMany)
+{
+  TCHAR msg[100];
+  TCHAR tit[20];
+  size_t msgSize = sizeof(msg);
+  size_t titSize = sizeof(tit);
+
+  #ifdef UNICODE
+    msgSize /= 2;
+    titSize /= 2;
+  #endif /*UNICODE*/
+
+  /* Prepare message */
+  if (HowMany == 1) /* Just one account! */
+  {
+    LoadString(GetInstanceHandle(), IDS_CONFACCDEL, msg, msgSize-1); /* Use string which is phrased to make sense for a singularity */
+  }
+  else /* Multiple accounts? (or negative number but ignore that) */
+  {
+    LoadString(GetInstanceHandle(), IDS_CONFACCSDEL, msg, msgSize-1); /* Use string which is phrased to make sense for a muliple */
+  }
+
+  LoadString(GetInstanceHandle(), IDS_ACCDEL, tit, titSize-1); /* Load title */
+  return MessageBox(ParWin, msg, tit, MB_YESNO | MB_ICONEXCLAMATION | MB_DEFBUTTON2); /* Display message and return result */
+}
+/*-------------------------------------------------------------------------*/
+#ifndef __INC_PSWDLG_H
+#define __INC_PSWDLG_H
+#include "Headers\BeginCH.H"
+
+/* Password prompt dialog header */
+BOOL CALLBACK PswDlgProc( HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam); /* Message handler */
+BOOL pswdlg_Ok(void); /* Returns TRUE if OK was clicked, FALSE otherwise */
+char* pswdlg_GetPswEdit(void); /* Returns a pointer to a buffer which holds
+the password in the dialog even after destruction.  Call pswdlg_GreePswBuff()
+when you no longer need the password, the freer must be called after the
+window is destroyed if the user has typed a password */
+void pswdlg_SetCreateModal(const BOOL YesOrNo); /* Sets whether the dialog was created modally or not, before the dialog is destroyed this must be valid */
+BOOL pswdlg_GetCreateModal(void); /* Gets the above state */
+void pswdlg_FreePswBuff(void); /* Frees the internal password buffer, must be called by user after window destruction, wipe password by calling WipePswBuff() automatically */
+void pswdlg_WipePswBuff(void); /* Zeros out the space used to store the password */
+/*-------------------------------------------------------------------------*/
+#include "Headers\EndCH.H"
+#endif /*__INC_ARMDLG_H*/

TDCONFIG.TD

Binary file added.
+#ifndef __INC__WINVER_H
+#define __INC__WINVER_H
+#include "Headers\BeginCH.H"
+/*-------------------------------------------------------------------------*/
+/* Return TRUE if program can run, FALSE if Windows isn't good
+enough for this program */
+BOOL SupportedWindows(void);
+/*-------------------------------------------------------------------------*/
+#include "Headers\EndCH.H"
+#endif /*__INC__WINVER_H*/
+#ifdef UNICODE /* Unicode mode? */
+  #undef UNICODE /* Mustn't use Unicode because it might not be NT */
+  #define REDEFUNICODE /* Redefine it after Windows header inclusion */
+#endif /*UNICODE*/
+#include <Windows.H> /* Now use ANSI Windows */
+#ifdef REDEFUNICODE /* Unicode must be redefined */
+  #define UNICODE /* Turn it back on */
+#endif /*UNICODE*/
+#pragma hdrstop
+
+#include "WinStuff\HInst.H" /* App instance handle */
+#include "AdminSec.RHI" /* Resources */
+#include "_WinVer.H" /* Our header */
+/*-------------------------------------------------------------------------*/
+BOOL SupportedWindows()
+{
+  #ifdef __WIN32__
+    OSVERSIONINFO VerInf; /* Windows version structure */
+
+    VerInf.dwOSVersionInfoSize = sizeof(VerInf); /* Set size of structure (a strange requirement for this function( */
+    if (GetVersionExA(&VerInf)) /* Get windows version */
+    {
+      #ifdef UNICODE
+        /* When the program is built as Unicode, only WinNT can run it */
+        if (VerInf.dwPlatformId != VER_PLATFORM_WIN32_NT) /* Not Windows NT? */
+        {
+          /* We must display an error stating that this program only runs on Windows NT
+          but we mustn't use Unicode functions to do it */
+          char msg[100];
+          char tit[30];
+          size_t msgSize = sizeof(msg);
+          size_t titSize = sizeof(tit);
+
+          LoadStringA(GetInstanceHandle(), IDS_WINNTONLY, msg, msgSize-1);
+          LoadStringA(GetInstanceHandle(), IDS_APPNAME, tit, titSize-1);
+          MessageBoxA(NULL, msg, tit, MB_OK | MB_ICONSTOP); /* Display error */
+          return FALSE; /* Then this program can't be run */
+        }
+      #endif /*UNICODE*/
+    }
+    else /* Failed to obtain Windows version info */
+    {
+      char tit[30];
+      char msg[100];
+      size_t titSize = sizeof(tit);
+      size_t msgSize = sizeof(msg);
+
+      /* Because we don't know the platform we're running on, we can't
+      use the Unicode versions of these functions even if we are supposed
+      to because LoadStringW() is WinNT only and MessageBoxW() is Win95
+      only */
+      LoadStringA(GetInstanceHandle(), IDS_GETVERFAILED, msg, msgSize-1);
+      LoadStringA(GetInstanceHandle(), IDS_APPNAME, tit, titSize-1);
+      MessageBoxA(NULL, msg, tit, MB_ICONSTOP|MB_OK); /* Display stop program error */
+      return FALSE; /* This version of Windows did not suffice */
+    }
+  #else /* Win16? */
+  #endif /*__WIN32__*/
+
+  return TRUE; /* This version of Windows suffices */
+}
+/*-------------------------------------------------------------------------*/
+/* The function avilable through this module prompts for
+the administrator password and returns FALSE if the user
+is wrong */
+
+#include <Windows.H>
+#include <Assert.H>
+#include "Stds\DLStdInc.H" /* Daybo Logic */
+#pragma hdrstop
+
+#include "AdminSec.H"
+#include "Admin.H" /* Our header */
+#include "PswDlg.H" /* IDD_PSWPROMPT (S_PSWDLG) */
+#include "Headers\TStr.H" /* Unicode / ASCII macros */
+#include "WinStuff\HInst.H" /* Instance keeper */
+#include "WinStuff\CntrWin.H" /* Window centering */
+/*-------------------------------------------------------------------------*/
+BOOL admin_PromptPsw(PS_PROMPTDETAIL PromptDetail)
+{
+  /* locals */
+  BOOL retVal = FALSE; /* Return value of this function */
+  BOOL IntruderOverride = FALSE; /* If set the user is not called an intruder even if they get the password wrong */
+  char RealPsw[CTRLFILE_PSWLEN+1]; /* Buffer to hold the real admin password */
+
+  /* Check parent window's handle */
+  if (PromptDetail->ParentWinHandle) /* Window will have parent */
+    assert(IsWindow(PromptDetail->ParentWinHandle));
+
+  _ControlFile.GetAdminPsw(&_ControlFile, RealPsw, sizeof(RealPsw)-1); /* Get the real admin password to compare with */
+  for (PromptDetail->ReachedTry = 0;
+       PromptDetail->ReachedTry < PromptDetail->Retries;
+       PromptDetail->ReachedTry++)
+  {
+    char* TryPsw; /* Password user tries */
+
+    pswdlg_SetCreateModal(TRUE); /* It is common knowledge that we are creating the password dialog modally */
+    if (DialogBox(GetInstanceHandle(), MAKEINTRESOURCE(IDD_PSWPROMPT), PromptDetail->ParentWinHandle, PswDlgProc) == -1)
+    {
+      TCHAR ErrMsg[50]; /* Holds an error message */
+      TCHAR tit[40]; /* Title of dialog */
+      size_t ErrMsgSize = sizeof(ErrMsg);
+      size_t titSize = sizeof(tit);
+      ErrMsgSize /= BYTESPERCHAR;
+      titSize /= BYTESPERCHAR;
+
+      LoadString(GetInstanceHandle(), IDS_DLGFAILCREATE, ErrMsg, ErrMsgSize-1);
+      LoadString(GetInstanceHandle(), IDS_ERROR, tit, titSize-1);
+      MessageBox(PromptDetail->ParentWinHandle, ErrMsg, tit, MB_OK | MB_ICONSTOP);
+      /* Fail to get out */
+      retVal = FALSE;
+      IntruderOverride = TRUE; /* Don't call the user an intruder, guv.  It's just that we couldn't create the dialog */
+      goto Cleanup;
+    }
+
+    if (!pswdlg_Ok()) /* User did not click OK? */
+    {
+      retVal = FALSE; /* User did not get password correct */
+      IntruderOverride = TRUE; /* Don't call them an intruder */
+      break; /* No further password tests */
+    }
+
+    TryPsw = pswdlg_GetPswEdit(); /* Get password of dialog */
+    if (TryPsw) /* Any password at all? */
+    {
+      BOOL Matched = (strcmp(RealPsw, TryPsw) == 0) ? TRUE : FALSE; /* Compare password */
+      pswdlg_FreePswBuff(); /* Release block used to copy password from dialog */
+      if (Matched) /* Password correct? */
+      {
+        retVal = TRUE; /* Set function return value */
+        goto Cleanup; /* Cleanup & exit function */
+      }
+    } /* (TryPsw) */
+  } /* Begining of password retry loop */
+
+Cleanup: /* Jump to here to exit the function */
+  if (!retVal && !IntruderOverride) /* Call user an intruder? */
+  {
+    TCHAR msg[100]; /* Buffer to hold error message */
+    TCHAR tit[40]; /* Buffer to hold title of message box */
+    size_t msgSize = sizeof(msg);
+    size_t titSize = sizeof(tit);
+    msgSize /= BYTESPERCHAR;
+    titSize /= BYTESPERCHAR;
+
+    LoadString(GetInstanceHandle(), IDS_INTRUDER, msg, msgSize-1);
+    LoadString(GetInstanceHandle(), IDS_APPNAME, tit, titSize-1);
+    MessageBox(NULL, msg, tit, MB_OK | MB_ICONEXCLAMATION);
+  }
+  return retVal; /* Give return value to caller */
+}
+/*-------------------------------------------------------------------------*/
+/* Admin applet main source file */
+
+#include <Windows.H>
+#include <Assert.H>
+#include "Stds\DLStdInc.H"
+#pragma hdrstop
+
+#include "AdminSec.H" /* Our header */
+#include "ArmDlg.H" /* Armagedden dialog controller */
+#include "MainWnd.H" /* Main window controller */
+#include "WinStuff\HInst.H" /* Access to app handle */
+#include "WinStuff\CntrWin.H" /* Window centring thing */
+#include "Msgs.H" /* Message dialog functions */
+#include "_WinVer.H" /* SupportedWindows() */
+#include "Headers\TStr.H" /* For Widechar/ASCII interoperability of macros */
+#include "Init.H" /* Init routines to keep WinMain() cleanish */
+/*-------------------------------------------------------------------------*/
+static void GlobalObjectConstructor(void);
+static void GlobalObjectDestructor(void);
+static void CClassGlobalConstruct(void);
+static void CClassGlobalDestruct(void);
+/*-------------------------------------------------------------------------*/
+/* Actual storage of global data here... */
+S_CTRLFILE _ControlFile; /* Global access to control file API */
+/*-------------------------------------------------------------------------*/
+int WINAPI WinMain(
+    HINSTANCE hInstance,
+    HINSTANCE hPrevInstance,
+    LPSTR lpszCmdLine,
+    int nCmdShow
+)
+{
+  /* locals */
+  #ifdef __WIN32__
+    TCHAR IMutexName[50]; /* Space to load mutex name from resources */
+    size_t IMutexNameSize = sizeof(IMutexName);
+    HANDLE hIMutex; /* Handle to instance control mutex */
+  #endif /*__WIN32__*/
+  MSG msg;
+
+  UNREFERENCED_PARAMETER(lpszCmdLine);
+  #ifdef __WIN32__
+    UNREFERENCED_PARAMETER(hPrevInstance);
+  #endif /*__WIN32__*/
+
+  SetInstanceHandle(hInstance); /* Load base address of module global for every part of app */
+  if (!SupportedWindows()) /* Not a supported version of Windows? */
+    return 0; /* Exit program */
+  GlobalObjectConstructor(); /* Construct global objects */
+  atexit(GlobalObjectDestructor); /* Schedule global object destruction for exit */
+
+  #ifdef UNICODE
+    #ifdef __WIN32__
+      IMutexNameSize /= 2;
+    #endif /*__WIN32__*/
+  #endif /*UNICODE*/
+
+  #ifdef __WIN32__
+    LoadString(GetInstanceHandle(), IDS_INSTMUTEX, IMutexName, IMutexNameSize-1); /* Load name of instance control mutex */
+    hIMutex = CreateMutex(NULL, FALSE, IMutexName);
+    if (GetLastError() == ERROR_ALREADY_EXISTS) /* Another instance of app running? */
+  #else
+    if (hPrevInstance)
+  #endif /*__WIN32__*/
+  {
+    ErrorAlreadyRunning(NULL); /* Display an error */
+    return 0;
+  }
+
+  /* There are several security checks to perform before the main window can be shown */
+  if (!init_IsCtrlFileClean(NULL)) /* The control file be clean, note that the param means "No parent window for error box" */
+    return 0; /* Otherwise app does not run */
+  #ifndef __DAYBO_DEBUGGING__ /* Ignore the following during debugging... */
+    if (!init_PromptAdminPsw()) /* User must know admin password */
+      return 0; /* Otherwise app does not run */
+  #endif /*!__DAYBO_DEBUGGING__*/
+
+  _MainWindow.Create(&_MainWindow); /* Create main window */
+  CentreWindow(_MainWindow.GetHandle(&_MainWindow), GetDesktopWindow()); /* Move window to centre of screen */
+  _MainWindow.Show(&_MainWindow, nCmdShow); /* Show main window */
+
+  /* Message loop */
+  while (GetMessage(&msg, (HWND) NULL, 0, 0))
+  {
+    TranslateMessage(&msg);
+    DispatchMessage(&msg);
+  }
+
+  /* Cleanup */
+  CloseHandle(hIMutex); /* Close handle of instance control mutex so another instance of app can start */
+  /* Return the exit code to Windows. */
+  return msg.wParam;
+}
+/*-------------------------------------------------------------------------*/
+static void GlobalObjectConstructor()
+{
+  CClassGlobalConstruct(); /* Construct global C objects */
+}
+/*-------------------------------------------------------------------------*/
+static void GlobalObjectDestructor()
+{
+  CClassGlobalDestruct(); /* Destruct global C objects */
+}
+/*-------------------------------------------------------------------------*/
+static void CClassGlobalConstruct()
+{
+  S_MAINWND_Construct(&_MainWindow); /* Construct main window */
+  S_CTRLFILE_Construct(&_ControlFile); /* Construct control file API object */
+}
+/*-------------------------------------------------------------------------*/
+static void CClassGlobalDestruct()
+{
+  S_MAINWND_Destruct(&_MainWindow); /* Destruct main window */
+  S_CTRLFILE_Destruct(&_ControlFile); /* Destruct control file API object */
+}
+/*-------------------------------------------------------------------------*/
+[directory stream]
+DelayMaxSize=0
+[file handle]
+DelayMaxSize=0
+[file stream]
+DelayMaxSize=0
+[memory block]
+DelayMaxSize=512
+[object]
+DelayMaxSize=512
+[object array]
+DelayMaxSize=512
+[pipe stream]
+DelayMaxSize=0
+[Windows global memory]
+DelayMaxSize=512
+[Windows local memory]
+DelayMaxSize=512
+[Options]
+ErrorCaption=Something bad has happened
+ErrorText=We found possible errors that would cause run-time problems, checkout AdminSec.CGL
+[Windows module]
+DelayMaxSize=0
+NAME 'AdminSec'
+DESCRIPTION 'Administrator security applet - NO ACCESS TO USERS'
+HEAPSIZE 262144, 32768
+STACKSIZE 262144, 8192
+STUB 'DOSStub.EXE'
+/****************************************************************************
+
+
+adminsec.rc
+
+produced by Borland Resource Workshop
+
+
+*****************************************************************************/
+
+#include "AdminSec.RH"
+
+VERSIONINFO_1 VERSIONINFO
+FILEVERSION 0, 0, 1, 0
+PRODUCTVERSION 0, 0, 1, 0
+FILEOS VOS_NT_WINDOWS32
+FILETYPE VFT_APP
+{
+ BLOCK "StringFileInfo"
+ {
+  BLOCK "040904E4"
+  {
+   VALUE "CompanyName", "Daybo Logic\000\000"
+   VALUE "FileDescription", "Security admin applet\000"
+   VALUE "FileVersion", "0.01\000\000"
+   VALUE "InternalName", "AdminSec\000"
+   VALUE "LegalCopyright", "Daybo Logic 1999\000\000"
+   VALUE "OriginalFilename", "AdminSec.EXE\000"
+   VALUE "ProductName", "DOS Security\000\000"
+  }
+
+ }
+
+ BLOCK "VarFileInfo"
+ {
+  VALUE "Translation", 0x409, 1252
+ }
+
+}
+
+STRINGTABLE 
+{
+ IDS_INSTMUTEX, "ADMINSECMUTEX"
+ IDS_ALRUN, "Another instance of the administator app is already running on the system"
+ IDS_APPNAME, "Admin security program"
+ IDS_ERROR, "Error"
+ IDS_DLGFAILCREATE, "Failed to create dialog box"
+ IDS_GETVERFAILED, "Failed to obtain Windows version number,\nthe program must assume that the platform is insufficient."
+ IDS_WINNTONLY, "The administrator program is designed only to run under Windows NT or a Unicode compatible system"
+ IDS_CTRLNOFOUND, "CRITICAL SECURITY ALERT:\n\nThe security control file was not found,\nthe program will terminate."
+ IDS_CTRLERROPEN, "CRITICAL SECURITY ALERT:\n\nThe security control file cannot be opened as demanded,\nthe program will terminate."
+ IDS_OUTOFMEM, "The program ran out of memory and will die,\ntry freeing more memory before retrying by closing some documents or applictions"
+ IDS_CTRLTOOBIG, "CRITICAL SECURITY ALERT:\n\nThe security control file was too big to be loaded,\nthe program will terminate."
+ IDS_CTRLCOF, "CRITICAL SECURITY ALERT:\n\nThe file blocking factor of the security control file could not be obtained, this may lead to a system lockout."
+ IDS_INTERR, "An internal error has caused an abnormal program termination,\nplease contact your administrator."
+ IDS_CTRLTAMP, "CRITICAL SECURITY ALERT:\n\nThe control file has been corrupted or tampered with, the security info may be unreliable so this program will terminate."
+ IDS_CTRLBAD, "CRITICAL SECURITY ALERT:\n\nThe control file cannot be understood it may be corrupt or have a bad format."
+ IDS_INTRUDER, "You are a user or an intruder and are not allowed access to the admin program"
+ IDS_ACCDEL, "Delete account"
+ IDS_SELACC2DEL, "Please select the account to delete"
+ IDS_CONFACCDEL, "It is not possible to undo such an action,\n\nAre you sure you wish to delete this account?"
+ IDS_CONFACCSDEL, "It is not possible to undo such an action,\n\nAre you sure you wish to delete these accounts?"
+}
+
+IDD_MAINWIN DIALOG 0, 0, 203, 220
+EXSTYLE WS_EX_APPWINDOW
+STYLE DS_3DLOOK | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX
+CAPTION "Security administrator"
+FONT 8, "MS Sans Serif"
+{
+ CONTROL "&Armagedden...", IDC_ARMAGEDDENLAUNCH, "button", BS_PUSHBUTTON | BS_CENTER | WS_CHILD | WS_VISIBLE | WS_DISABLED | WS_TABSTOP, 128, 8, 64, 14
+ CONTROL "Registered user accounts:", IDC_STATICTEXT6, "static", SS_LEFTNOWORDWRAP | WS_CHILD | WS_VISIBLE, 8, 4, 108, 9
+ CONTROL "", IDC_ACCLIST, "listbox", LBS_STANDARD | LBS_EXTENDEDSEL | LBS_DISABLENOSCROLL | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 8, 12, 108, 100
+ CONTROL "&Add", IDC_ACCADDBTN, "button", BS_PUSHBUTTON | BS_CENTER | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 128, 68, 64, 14
+ CONTROL "&Delete...", IDC_ACCDELBTN, "button", BS_PUSHBUTTON | BS_CENTER | WS_CHILD | WS_VISIBLE | WS_DISABLED | WS_TABSTOP, 128, 86, 64, 14
+ CONTROL "Details:", IDC_STATICTEXT4, "static", SS_LEFTNOWORDWRAP | WS_CHILD | WS_VISIBLE, 8, 112, 56, 9
+ CONTROL "Full name:", IDC_STATICTEXT7, "static", SS_LEFT | WS_CHILD | WS_VISIBLE, 8, 125, 48, 9
+ CONTROL "", IDC_FULLNAMEED, "edit", ES_LEFT | WS_CHILD | WS_VISIBLE | WS_DISABLED | WS_BORDER | WS_TABSTOP, 48, 121, 124, 13
+ CONTROL "Password:", IDC_STATICTEXT8, "static", SS_LEFT | WS_CHILD | WS_VISIBLE, 8, 140, 36, 9
+ CONTROL "", IDC_ACCPSWED, "edit", ES_LEFT | ES_PASSWORD | ES_READONLY | WS_CHILD | WS_VISIBLE | WS_DISABLED | WS_BORDER | WS_TABSTOP, 48, 138, 84, 13
+ CONTROL "Change...", IDC_CHANGEBTN, "button", BS_PUSHBUTTON | BS_CENTER | WS_CHILD | WS_VISIBLE | WS_DISABLED | WS_TABSTOP, 140, 138, 56, 13
+ CONTROL "Time allowed per day:", IDC_STATICTEXT5, "static", SS_LEFT | WS_CHILD | WS_VISIBLE, 8, 156, 88, 9
+ CONTROL "", IDC_HDAYED, "edit", ES_LEFT | ES_NUMBER | WS_CHILD | WS_VISIBLE | WS_DISABLED | WS_BORDER | WS_TABSTOP, 88, 155, 28, 13
+ CONTROL "hours.", IDC_STATICTEXT9, "static", SS_LEFT | WS_CHILD | WS_VISIBLE, 124, 156, 60, 9
+ CONTROL "Unlimited use", IDC_NOLIMITCHK, "button", BS_AUTOCHECKBOX | WS_CHILD | WS_VISIBLE | WS_DISABLED | WS_TABSTOP, 12, 168, 184, 12
+ CONTROL "Disable user account", IDC_DISABLECHK, "button", BS_AUTOCHECKBOX | WS_CHILD | WS_VISIBLE | WS_DISABLED | WS_TABSTOP, 12, 186, 184, 12
+ CONTROL "User may change their own password", IDC_USERCHANGECHK, "button", BS_AUTOCHECKBOX | WS_CHILD | WS_VISIBLE | WS_DISABLED | WS_TABSTOP, 12, 204, 188, 12
+}
+
+IDI_USERS ICON 
+{
+ '00 00 01 00 01 00 20 20 10 00 00 00 00 00 E8 02'
+ '00 00 16 00 00 00 28 00 00 00 20 00 00 00 40 00'
+ '00 00 01 00 04 00 00 00 00 00 80 02 00 00 00 00'
+ '00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+ '00 00 00 00 80 00 00 80 00 00 00 80 80 00 80 00'
+ '00 00 80 00 80 00 80 80 00 00 80 80 80 00 C0 C0'
+ 'C0 00 00 00 FF 00 00 FF 00 00 00 FF FF 00 FF 00'
+ '00 00 FF 00 FF 00 FF FF 00 00 FF FF FF 00 00 00'
+ '00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+ '00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+ '00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 EE'
+ 'EE EE E0 00 6E EE 00 3D D0 00 DD 00 DD 00 E6 EE'
+ 'EE E6 0E E0 E6 E0 E0 B5 03 30 5D D0 55 00 6E 6E'
+ 'EE 60 EE E0 6E 0E E0 0B 3B 37 70 50 00 00 E6 E6'
+ 'E6 0E EE E0 00 0E E0 0B B3 37 70 00 00 00 00 6E'
+ '60 6E EE 0F FF 00 E0 83 B3 8F 70 00 00 00 00 00'
+ '06 EE E0 FF FF F0 07 3B 38 FF 70 00 00 00 00 00'
+ '0E 6E 0F FF FF F0 08 B3 8F F8 70 00 00 00 00 00'
+ '06 00 FF FF FF 00 08 33 F7 70 00 00 00 00 00 00'
+ '00 0F FF F0 00 00 00 73 FF FF FF FF 70 00 00 00'
+ '00 0F FF FF FF FF FF 07 8F FF FF FF F0 00 00 00'
+ '00 00 0F FF FF FF FF F0 8F FF FF FF 80 00 00 00'
+ '00 00 0F FF FF FF FF F0 8F FF FF 70 00 00 00 00'
+ '00 00 0F FF FF FF F0 07 8F FF FF FF 80 00 00 00'
+ '00 00 0F FF FF FF FF F0 8F FF FF F0 00 00 00 00'
+ '00 00 FF FF FF FF FF F0 88 FF FF FF FF 00 00 00'
+ '00 0F FF FF FF FF FF 00 08 FF FF FF F0 00 00 00'
+ '00 0F FF FF FF FF FF FF 0F FF CC FF 00 00 00 00'
+ '00 00 0F FF FF F0 FF F0 7F FF 70 07 00 00 00 00'
+ '00 00 0F FF FF 00 FF 07 8F FF F8 88 00 00 00 00'
+ '00 00 00 0F FF F0 00 7B 38 FF FF FF 70 00 00 00'
+ '00 00 00 0F FF FF 00 78 30 8F 0F 0F 37 00 00 00'
+ '00 00 00 0F FF FF F0 7B 0B 33 B3 B3 8B 00 00 00'
+ '00 00 00 0F FF FF 00 78 B8 BB BB 3B BB 00 00 00'
+ '00 00 00 00 00 00 00 7B 8B BB BB BB B0 00 00 00'
+ '00 00 00 00 00 00 00 78 B8 BB BB BB 00 00 00 00'
+ '00 00 00 00 00 00 00 0B 8B BB BB 00 00 00 00 00'
+ '00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+ '00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+ '00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF'
+ 'FF FF FF FF FF FF FF FF FF FF C0 00 00 00 00 00'
+ '00 00 00 00 00 03 00 00 00 0F 00 00 00 3F C0 00'
+ '00 3F F0 00 00 3F F0 00 00 07 F0 00 00 03 F8 00'
+ '00 03 E0 00 00 03 E0 00 00 03 C0 00 00 03 C0 00'
+ '00 01 80 00 00 01 00 00 00 03 00 00 00 07 00 00'
+ '00 07 00 00 00 07 00 00 00 03 00 00 00 01 00 00'
+ '00 01 80 00 00 01 80 00 00 03 C0 00 00 07 C0 00'
+ '00 0F E0 00 00 3F F0 00 7F FF FC 00 FF FF'
+}
+
+IDD_ARMAGEDDEN DIALOG 0, 0, 221, 201
+STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "ARMAGEDDEN ! ! !"
+FONT 8, "MS Sans Serif"
+{
+ CONTROL "CONFIRM", IDC_CONFIRMBTN, "BUTTON", BS_PUSHBUTTON | BS_CENTER | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 128, 4, 50, 14
+ CONTROL "No, I don't want this", IDCANCEL, "BUTTON", BS_DEFPUSHBUTTON | BS_CENTER | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 44, 4, 76, 14
+ CONTROL "Enter admin password:", IDC_STADMINPSW, "static", SS_LEFT | WS_CHILD | WS_VISIBLE | WS_DISABLED, 4, 32, 80, 9
+ CONTROL "Frame1", IDC_STATICFRAME1, "static", SS_ETCHEDFRAME | WS_CHILD | WS_VISIBLE, 0, 24, 220, 1
+ CONTROL "", IDC_ADMINPSWEDIT, "edit", ES_LEFT | ES_AUTOHSCROLL | ES_PASSWORD | WS_CHILD | WS_VISIBLE | WS_DISABLED | WS_BORDER | WS_TABSTOP, 88, 28, 124, 14
+ CONTROL "1st assigned armagedden password:", IDC_STARMPSW1, "static", SS_LEFT | WS_CHILD | WS_VISIBLE | WS_DISABLED, 4, 47, 124, 9
+ CONTROL "2nd assigned armagedden password:", IDC_STARMPSW2, "static", SS_LEFT | WS_CHILD | WS_VISIBLE | WS_DISABLED, 4, 60, 124, 9
+ CONTROL "3rd assigned armagedden password:", IDC_STARMPSW3, "static", SS_LEFT | WS_CHILD | WS_VISIBLE | WS_DISABLED, 4, 72, 124, 8
+ CONTROL "", IDC_EDARMPSW1, "edit", ES_LEFT | ES_AUTOHSCROLL | ES_PASSWORD | ES_NUMBER | WS_CHILD | WS_VISIBLE | WS_DISABLED | WS_BORDER | WS_TABSTOP, 132, 47, 84, 14
+ CONTROL "", IDC_EDARMPSW2, "edit", ES_LEFT | ES_AUTOHSCROLL | ES_PASSWORD | ES_NUMBER | WS_CHILD | WS_VISIBLE | WS_DISABLED | WS_BORDER | WS_TABSTOP, 132, 60, 84, 14
+ CONTROL "", IDC_EDARMPSW3, "edit", ES_LEFT | ES_AUTOHSCROLL | ES_PASSWORD | ES_NUMBER | WS_CHILD | WS_VISIBLE | WS_DISABLED | WS_BORDER | WS_TABSTOP, 132, 73, 84, 14
+ CONTROL "Consensis verified", IDC_CONSENSISBTN, "button", BS_PUSHBUTTON | BS_CENTER | WS_CHILD | WS_VISIBLE | WS_DISABLED | WS_TABSTOP, 8, 90, 204, 12
+ CONTROL "Frame2", IDC_STATICFRAME2, "static", SS_ETCHEDFRAME | WS_CHILD | WS_VISIBLE, 0, 108, 232, 1
+ CONTROL "Enter code stored in a sealed envelope in the Daybo Logic safe:", IDC_STSAFEDESC, "static", SS_LEFT | WS_CHILD | WS_VISIBLE | WS_DISABLED, 4, 112, 212, 17
+ CONTROL "", IDC_EDITSEALEDCODE, "edit", ES_LEFT | ES_NUMBER | WS_CHILD | WS_VISIBLE | WS_DISABLED | WS_BORDER | WS_TABSTOP, 4, 132, 212, 12
+ CONTROL "Frame3", IDC_STATICFRAME3, "static", SS_ETCHEDFRAME | WS_CHILD | WS_VISIBLE, 0, 151, 228, 1
+ CONTROL IDB_LOCKSWITCH, IDC_LOCKIMG, "static", SS_BITMAP | SS_REALSIZEIMAGE | SS_SUNKEN | WS_CHILD | WS_VISIBLE, 4, 160, 75, 31
+ CONTROL IDB_ARMAGEDDEN, IDC_ARMAGIMG, "static", SS_BITMAP | SS_REALSIZEIMAGE | SS_SUNKEN | WS_CHILD | WS_VISIBLE | WS_BORDER, 104, 160, 109, 33
+}
+
+IDB_LOCKSWITCH BITMAP 
+{
+ '42 4D F6 0A 00 00 00 00 00 00 76 00 00 00 28 00'
+ '00 00 6E 00 00 00 30 00 00 00 01 00 04 00 00 00'
+ '00 00 80 0A 00 00 00 00 00 00 00 00 00 00 00 00'
+ '00 00 00 00 00 00 00 00 00 00 00 00 80 00 00 80'
+ '00 00 00 80 80 00 80 00 00 00 80 00 80 00 80 80'
+ '00 00 80 80 80 00 C0 C0 C0 00 00 00 FF 00 00 FF'
+ '00 00 00 FF FF 00 FF 00 00 00 FF 00 FF 00 FF FF'
+ '00 00 FF FF FF 00 22 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 00 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 00 22 22 BB BB BB B2 2B BB B2 22'
+ '2B BB B2 2B B2 2B B2 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 00 22 22'
+ 'BB 22 22 22 BB 22 BB 22 BB 22 BB 2B B2 BB 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 00 22 22 BB 22 22 22 BB 22 BB 22'
+ 'BB 22 22 2B BB B2 22 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 00 22 22'
+ 'BB 22 22 22 BB 22 BB 22 BB 22 22 2B BB 22 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22'
+ 'BB BB 22 22 BB 22 BB 22 BB 22 2B BB B2 22 2B BB'
+ 'B2 2B B2 2B B2 00 22 22 BB 22 22 22 BB 22 BB 22'
+ 'BB 22 22 2B BB B2 22 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 22 22 2B B2 2B B2 22 BB 22 BB 22'
+ 'BB 22 BB 22 BB 22 BB 22 BB 2B B2 BB 22 00 22 22'
+ 'BB 22 22 22 BB 22 BB 22 BB 22 BB 2B B2 BB 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 BB'
+ '22 22 BB 22 BB 22 BB 22 BB 22 BB 22 BB 22 BB 22'
+ '22 2B BB B2 22 00 22 22 BB 22 22 22 2B BB B2 22'
+ '2B BB B2 2B B2 2B B2 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 22 22 BB 22 22 BB 22 BB 22 BB 22'
+ 'BB 22 BB 22 BB 22 BB 22 22 2B BB 22 22 00 22 22'
+ 'BB 22 22 22 22 22 22 22 22 22 22 2B B2 22 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 BB'
+ '22 22 BB 22 BB 22 BB 22 BB 22 BB 22 BB 22 BB 22'
+ '22 2B BB B2 22 00 22 22 BB 22 22 22 22 22 22 22'
+ '22 22 22 2B B2 22 22 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 22 22 BB 22 22 BB 22 BB 22 BB 22'
+ 'BB 22 BB 22 BB 22 BB 22 BB 2B B2 BB 22 00 22 22'
+ 'BB 22 22 22 22 22 22 22 22 22 22 2B B2 22 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 BB'
+ '22 22 BB 22 BB BB B2 22 BB 22 2B BB B2 22 2B BB'
+ 'B2 2B B2 2B B2 00 22 22 22 22 22 00 00 00 00 00'
+ '00 00 22 22 22 22 22 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 22 22 BB 22 22 BB 22 22 22 22 22'
+ 'BB 22 22 22 22 22 22 22 22 2B B2 22 22 00 22 22'
+ '22 22 22 0B 9B 9B 9B 9B 9B 90 22 22 22 22 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 BB'
+ '22 22 BB 22 22 22 22 22 BB 22 22 22 22 22 22 22'
+ '22 2B B2 22 22 00 22 22 22 22 22 09 B9 B9 B9 B9'
+ 'B9 B0 22 22 22 22 22 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 22 22 BB 22 22 BB 22 22 22 22 22'
+ 'BB 22 22 22 22 22 22 22 22 2B B2 22 22 00 22 22'
+ '22 22 22 0B 9B 9B 9B 9B 9B 90 22 22 22 22 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 00 22 22 22 22 22 09 B9 B9 B9 B9'
+ 'B9 B0 22 22 22 22 22 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 00 22 22'
+ '22 22 22 0B 9B 9B 9B 9B 9B 90 22 22 22 22 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 00 22 22 22 00 00 09 B9 B9 B9 B9'
+ 'B9 B0 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+ '00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+ '00 00 00 00 00 00 00 00 00 22 22 22 22 00 22 22'
+ '22 07 77 0B 9B 9B 9B 9B 9B 90 77 77 77 77 77 77'
+ '77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77'
+ '77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77'
+ '70 22 22 22 22 00 22 22 22 07 77 09 B9 B9 B9 B9'
+ 'B9 B0 77 77 77 77 77 77 77 77 77 77 77 77 77 77'
+ '77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77'
+ '77 77 77 77 77 77 77 77 70 22 22 22 22 00 22 22'
+ '22 07 77 0B 9B 9B 9B 9B 9B 90 77 77 77 77 77 77'
+ '77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77'
+ '77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77'
+ '70 22 22 22 22 00 22 22 22 07 77 09 B9 B9 B9 B9'
+ 'B9 B0 77 77 77 77 77 77 77 77 77 77 77 77 77 77'
+ '77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77'
+ '77 77 77 77 77 77 77 77 70 22 22 22 22 00 22 22'
+ '22 07 77 0B 9B 9B 9B 9B 9B 90 77 77 77 77 77 77'
+ '77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77'
+ '77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77'
+ '70 22 22 22 22 00 22 22 22 07 77 09 B9 B9 B9 B9'
+ 'B9 B0 77 77 77 77 77 77 77 77 77 77 77 77 77 77'
+ '77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77'
+ '77 77 77 77 77 77 77 77 70 22 22 22 22 00 22 22'
+ '22 07 77 0B 9B 9B 9B 9B 9B 90 00 00 00 00 00 00'
+ '00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+ '00 00 00 00 00 00 00 00 00 00 00 00 00 00 77 77'
+ '70 22 22 22 22 00 22 22 22 07 77 09 B9 B9 B9 B9'
+ 'B9 B0 77 77 77 77 77 77 77 77 77 77 77 77 77 77'
+ '77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77'
+ '77 77 77 77 77 77 77 77 70 22 22 22 22 00 22 22'
+ '22 07 77 0B 9B 9B 9B 9B 9B 90 77 77 77 77 77 77'
+ '77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77'
+ '77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77'
+ '70 22 22 22 22 00 22 22 22 07 77 09 B9 B9 B9 B9'
+ 'B9 B0 77 77 77 77 77 77 77 77 77 77 77 77 77 77'
+ '77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77'
+ '77 77 77 77 77 77 77 77 70 22 22 22 22 00 22 22'
+ '22 07 77 0B 9B 9B 9B 9B 9B 90 77 77 77 77 77 77'
+ '77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77'
+ '77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77'
+ '70 22 22 22 22 00 22 22 22 07 77 09 B9 B9 B9 B9'
+ 'B9 B0 77 77 77 77 77 77 77 77 77 77 77 77 77 77'
+ '77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77'
+ '77 77 77 77 77 77 77 77 70 22 22 22 22 00 22 22'
+ '22 07 77 0B 9B 9B 9B 9B 9B 90 77 77 77 77 77 77'
+ '77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77'
+ '77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77'
+ '70 22 22 22 22 00 22 22 22 00 00 09 B9 B9 B9 B9'
+ 'B9 B0 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+ '00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+ '00 00 00 00 00 00 00 00 00 22 22 22 22 00 22 22'
+ '22 22 22 0B 9B 9B 9B 9B 9B 90 22 22 22 22 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 00 22 22 22 22 22 09 B9 B9 B9 B9'
+ 'B9 B0 22 22 22 22 22 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 00 22 22'
+ '22 22 22 0B 9B 9B 9B 9B 9B 90 22 22 22 22 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 00 22 22 22 22 22 09 B9 B9 B9 B9'
+ 'B9 B0 22 22 22 22 22 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 00 22 22'
+ '22 22 22 0B 9B 9B 9B 9B 9B 90 22 22 22 22 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 00 22 22 22 22 22 09 B9 B9 B9 B9'
+ 'B9 B0 22 22 22 22 22 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 00 22 22'
+ '22 22 22 00 00 00 00 00 00 00 22 22 22 22 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 00 22 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 00 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 00 22 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 00 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 00 22 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 00 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 00 22 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 00 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 00'
+}
+
+IDB_UNLOCKSWITCH BITMAP 
+{
+ '42 4D F6 0A 00 00 00 00 00 00 76 00 00 00 28 00'
+ '00 00 6E 00 00 00 30 00 00 00 01 00 04 00 00 00'
+ '00 00 80 0A 00 00 00 00 00 00 00 00 00 00 00 00'
+ '00 00 00 00 00 00 00 00 00 00 00 00 80 00 00 80'
+ '00 00 00 80 80 00 80 00 00 00 80 00 80 00 80 80'
+ '00 00 80 80 80 00 C0 C0 C0 00 00 00 FF 00 00 FF'
+ '00 00 00 FF FF 00 FF 00 00 00 FF 00 FF 00 FF FF'
+ '00 00 FF FF FF 00 22 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 00 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 00 22 22 BB BB BB B2 2B BB B2 22'
+ '2B BB B2 2B B2 2B B2 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 00 22 22'
+ 'BB 22 22 22 BB 22 BB 22 BB 22 BB 2B B2 BB 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 00 22 22 BB 22 22 22 BB 22 BB 22'
+ 'BB 22 22 2B BB B2 22 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 00 22 22'
+ 'BB 22 22 22 BB 22 BB 22 BB 22 22 2B BB 22 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22'
+ 'BB BB 22 22 BB 22 BB 22 BB 22 2B BB B2 22 2B BB'
+ 'B2 2B B2 2B B2 00 22 22 BB 22 22 22 BB 22 BB 22'
+ 'BB 22 22 2B BB B2 22 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 22 22 2B B2 2B B2 22 BB 22 BB 22'
+ 'BB 22 BB 22 BB 22 BB 22 BB 2B B2 BB 22 00 22 22'
+ 'BB 22 22 22 BB 22 BB 22 BB 22 BB 2B B2 BB 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 BB'
+ '22 22 BB 22 BB 22 BB 22 BB 22 BB 22 BB 22 BB 22'
+ '22 2B BB B2 22 00 22 22 BB 22 22 22 2B BB B2 22'
+ '2B BB B2 2B B2 2B B2 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 22 22 BB 22 22 BB 22 BB 22 BB 22'
+ 'BB 22 BB 22 BB 22 BB 22 22 2B BB 22 22 00 22 22'
+ 'BB 22 22 22 22 22 22 22 22 22 22 2B B2 22 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 BB'
+ '22 22 BB 22 BB 22 BB 22 BB 22 BB 22 BB 22 BB 22'
+ '22 2B BB B2 22 00 22 22 BB 22 22 22 22 22 22 22'
+ '22 22 22 2B B2 22 22 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 22 22 BB 22 22 BB 22 BB 22 BB 22'
+ 'BB 22 BB 22 BB 22 BB 22 BB 2B B2 BB 22 00 22 22'
+ 'BB 22 22 22 22 22 22 22 22 22 22 2B B2 22 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 BB'
+ '22 22 BB 22 BB BB B2 22 BB 22 2B BB B2 22 2B BB'
+ 'B2 2B B2 2B B2 00 22 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 22 22 BB 22 22 BB 22 22 22 22 22'
+ '00 00 00 00 00 00 00 22 22 2B B2 22 22 00 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 BB'
+ '22 22 BB 22 22 22 22 22 0B 9B 9B 9B 9B 9B 90 22'
+ '22 2B B2 22 22 00 22 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 22 22 BB 22 22 BB 22 22 22 22 22'
+ '09 B9 B9 B9 B9 B9 B0 22 22 2B B2 22 22 00 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 22 22 22 0B 9B 9B 9B 9B 9B 90 22'
+ '22 22 22 22 22 00 22 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22'
+ '09 B9 B9 B9 B9 B9 B0 22 22 22 22 22 22 00 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 22 22 22 0B 9B 9B 9B 9B 9B 90 22'
+ '22 22 22 22 22 00 22 22 22 00 00 00 00 00 00 00'
+ '00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+ '00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+ '09 B9 B9 B9 B9 B9 B0 00 00 22 22 22 22 00 22 22'
+ '22 07 77 77 77 77 77 77 77 77 77 77 77 77 77 77'
+ '77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77'
+ '77 77 77 77 77 77 77 77 0B 9B 9B 9B 9B 9B 90 77'
+ '70 22 22 22 22 00 22 22 22 07 77 77 77 77 77 77'
+ '77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77'
+ '77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77'
+ '09 B9 B9 B9 B9 B9 B0 77 70 22 22 22 22 00 22 22'
+ '22 07 77 77 77 77 77 77 77 77 77 77 77 77 77 77'
+ '77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77'
+ '77 77 77 77 77 77 77 77 0B 9B 9B 9B 9B 9B 90 77'
+ '70 22 22 22 22 00 22 22 22 07 77 77 77 77 77 77'
+ '77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77'
+ '77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77'
+ '09 B9 B9 B9 B9 B9 B0 77 70 22 22 22 22 00 22 22'
+ '22 07 77 77 77 77 77 77 77 77 77 77 77 77 77 77'
+ '77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77'
+ '77 77 77 77 77 77 77 77 0B 9B 9B 9B 9B 9B 90 77'
+ '70 22 22 22 22 00 22 22 22 07 77 77 77 77 77 77'
+ '77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77'
+ '77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77'
+ '09 B9 B9 B9 B9 B9 B0 77 70 22 22 22 22 00 22 22'
+ '22 07 77 00 00 00 00 00 00 00 00 00 00 00 00 00'
+ '00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+ '00 00 00 00 00 00 00 00 0B 9B 9B 9B 9B 9B 90 77'
+ '70 22 22 22 22 00 22 22 22 07 77 77 77 77 77 77'
+ '77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77'
+ '77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77'
+ '09 B9 B9 B9 B9 B9 B0 77 70 22 22 22 22 00 22 22'
+ '22 07 77 77 77 77 77 77 77 77 77 77 77 77 77 77'
+ '77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77'
+ '77 77 77 77 77 77 77 77 0B 9B 9B 9B 9B 9B 90 77'
+ '70 22 22 22 22 00 22 22 22 07 77 77 77 77 77 77'
+ '77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77'
+ '77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77'
+ '09 B9 B9 B9 B9 B9 B0 77 70 22 22 22 22 00 22 22'
+ '22 07 77 77 77 77 77 77 77 77 77 77 77 77 77 77'
+ '77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77'
+ '77 77 77 77 77 77 77 77 0B 9B 9B 9B 9B 9B 90 77'
+ '70 22 22 22 22 00 22 22 22 07 77 77 77 77 77 77'
+ '77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77'
+ '77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77'
+ '09 B9 B9 B9 B9 B9 B0 77 70 22 22 22 22 00 22 22'
+ '22 07 77 77 77 77 77 77 77 77 77 77 77 77 77 77'
+ '77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77'
+ '77 77 77 77 77 77 77 77 0B 9B 9B 9B 9B 9B 90 77'
+ '70 22 22 22 22 00 22 22 22 00 00 00 00 00 00 00'
+ '00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+ '00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+ '09 B9 B9 B9 B9 B9 B0 00 00 22 22 22 22 00 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 22 22 22 0B 9B 9B 9B 9B 9B 90 22'
+ '22 22 22 22 22 00 22 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22'
+ '09 B9 B9 B9 B9 B9 B0 22 22 22 22 22 22 00 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 22 22 22 0B 9B 9B 9B 9B 9B 90 22'
+ '22 22 22 22 22 00 22 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22'
+ '09 B9 B9 B9 B9 B9 B0 22 22 22 22 22 22 00 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 22 22 22 0B 9B 9B 9B 9B 9B 90 22'
+ '22 22 22 22 22 00 22 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22'
+ '09 B9 B9 B9 B9 B9 B0 22 22 22 22 22 22 00 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 22 22 22 00 00 00 00 00 00 00 22'
+ '22 22 22 22 22 00 22 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 00 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 00 22 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 00 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 00 22 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 00 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 00 22 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 00 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22'
+ '22 22 22 22 22 00'
+}
+
+IDB_ARMAGEDDEN BITMAP 
+{
+ '42 4D 16 10 00 00 00 00 00 00 76 00 00 00 28 00'
+ '00 00 A0 00 00 00 32 00 00 00 01 00 04 00 00 00'
+ '00 00 A0 0F 00 00 00 00 00 00 00 00 00 00 00 00'
+ '00 00 00 00 00 00 00 00 00 00 00 00 80 00 00 80'
+ '00 00 00 80 80 00 80 00 00 00 80 00 80 00 80 80'
+ '00 00 80 80 80 00 C0 C0 C0 00 00 00 FF 00 00 FF'
+ '00 00 00 FF FF 00 FF 00 00 00 FF 00 FF 00 FF FF'
+ '00 00 FF FF FF 00 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 BB BB BB BB B9 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 BB BB 99 99 9B BB 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 BB B9 99 99 99 BB B9 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 9B BB 99 99 99 9B BB 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 BB B9 99 99 BB BB 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 9B B9 99 BB BB 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 BB BB BB 99 99 9B BB'
+ 'BB BB 9B BB BB 99 99 BB BB B9 BB BB B9 BB BB B9'
+ '99 BB BB B9 BB B9 99 BB BB BB BB 99 99 99 9B BB'
+ 'BB 99 99 99 BB BB BB B9 99 99 9B BB BB BB 99 99'
+ '99 9B BB BB 99 99 BB BB B9 BB BB B9 99 9B B9 99'
+ '99 99 99 99 99 99 99 99 99 99 BB B9 99 99 99 99'
+ 'BB BB 99 9B BB 99 99 99 BB B9 99 BB B9 99 BB B9'
+ '99 BB BB BB BB BB B9 BB BB 99 99 99 99 99 BB BB'
+ 'B9 BB B9 99 BB BB 9B BB BB 99 9B BB B9 BB BB B9'
+ '99 BB BB B9 BB B9 99 BB B9 99 BB B9 99 9B BB B9'
+ '99 99 99 99 99 99 99 99 99 99 9B B9 99 99 99 99'
+ 'BB B9 99 9B BB 99 99 99 BB B9 99 BB B9 99 BB B9'
+ '99 BB B9 9B BB BB B9 BB B9 99 99 99 99 99 BB BB'
+ '99 9B B9 9B BB B9 99 BB B9 99 BB BB 99 9B BB 99'
+ '99 BB BB 99 9B B9 99 BB B9 99 BB B9 99 9B BB B9'
+ '99 99 99 99 99 99 99 99 99 99 99 BB B9 99 99 99'
+ 'BB BB 99 99 BB B9 99 99 9B BB 99 9B BB 99 9B BB'
+ '99 9B BB 99 9B BB 99 99 BB BB BB 99 99 99 BB BB'
+ '99 99 99 99 BB BB 99 9B BB 99 9B BB B9 99 BB B9'
+ '99 BB BB 99 99 99 99 9B BB 99 9B BB 99 99 9B B9'
+ '99 99 99 99 99 99 99 99 99 99 99 9B B9 99 99 99'
+ 'BB B9 99 99 BB B9 99 99 9B BB 99 9B BB 99 9B BB'
+ '99 99 BB B9 9B BB 99 99 BB B9 BB B9 99 99 BB BB'
+ '99 99 99 99 BB B9 99 9B BB 99 9B BB 99 99 BB B9'
+ '99 BB BB 99 99 99 99 9B BB 99 9B BB 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 BB BB BB BB'
+ 'BB BB 99 99 9B BB 99 99 99 BB B9 99 BB B9 99 BB'
+ 'B9 99 99 BB BB BB B9 99 BB B9 99 BB B9 99 9B BB'
+ '99 99 99 99 9B BB 99 99 BB B9 99 BB B9 99 9B BB'
+ '99 9B BB 99 99 99 99 99 BB B9 99 BB B9 99 99 BB'
+ '99 99 99 99 99 99 99 99 99 99 99 99 9B B9 99 99'
+ 'BB B9 99 99 9B BB 99 99 99 BB B9 99 BB B9 99 BB'
+ 'B9 99 99 99 BB BB B9 99 BB B9 99 BB B9 99 9B BB'
+ '99 99 99 99 9B BB 99 99 BB B9 99 BB B9 99 9B BB'
+ '99 9B BB 99 99 99 99 99 BB B9 99 BB B9 99 99 BB'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 BB B9 99'
+ 'BB BB 99 99 99 BB B9 99 99 9B BB 99 9B BB 99 9B'
+ 'BB 99 99 99 99 9B BB 99 9B BB 99 9B BB 99 99 BB'
+ 'BB BB BB BB B9 BB B9 99 9B BB 99 9B BB 99 99 BB'
+ 'B9 99 BB BB BB BB BB B9 9B BB 99 9B BB 99 99 9B'
+ 'B9 99 99 99 99 99 99 99 99 99 99 99 99 9B B9 99'
+ 'BB B9 99 99 99 BB B9 99 99 9B BB B9 9B BB B9 9B'
+ 'BB 99 99 BB B9 9B BB 99 9B BB 99 9B BB BB 99 9B'
+ 'B9 99 BB BB 99 9B B9 99 BB BB 99 99 BB 99 9B BB'
+ 'B9 99 9B B9 99 BB BB 99 9B BB B9 9B BB 99 99 9B'
+ 'B9 99 99 99 99 99 99 99 99 99 99 99 99 99 BB B9'
+ 'BB BB 99 99 99 BB BB BB B9 9B BB BB BB BB BB BB'
+ 'BB B9 99 9B BB 99 BB B9 99 9B BB 9B BB B9 99 99'
+ 'BB B9 BB BB B9 99 BB B9 BB BB B9 99 9B BB 9B BB'
+ 'BB 99 99 BB B9 BB BB B9 9B BB BB BB BB B9 99 9B'
+ 'BB B9 99 99 99 99 99 99 99 99 99 99 99 99 9B B9'
+ 'BB B9 99 99 99 99 BB BB B9 99 9B B9 BB BB 99 BB'
+ 'BB 99 99 99 BB BB BB 99 99 99 BB BB B9 99 99 99'
+ '99 BB BB B9 99 99 99 BB BB BB B9 99 99 9B BB BB'
+ 'BB 99 99 99 BB BB B9 99 99 9B B9 BB BB 99 99 9B'
+ 'BB B9 99 99 99 99 99 99 99 99 99 99 99 99 99 BB'
+ 'BB BB 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 9B BB 99 99 99 99 99'
+ 'BB B9 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ 'BB BB 99 99 99 99 99 99 99 99 99 99 99 99 99 9B'
+ 'BB B9 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 9B BB 99 99 99 99 99'
+ 'BB B9 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ 'BB BB 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ 'BB BB 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 BB B9 99 99 99 99'
+ '9B BB 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '9B BB B9 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '9B B9 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 BB B9 99 99 99 99'
+ '9B BB 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '9B BB B9 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 BB 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 BB BB 99 99 99 99'
+ '9B BB B9 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 BB BB 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 BB 99 99 99 99'
+ '99 9B B9 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 9B B9 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99'
+ '99 99 99 99 99 99'
+}
+
+IDD_PSWPROMPT DIALOG 0, 0, 240, 82
+STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "Enter password"
+FONT 8, "MS Sans Serif"
+{
+ CONTROL "OK", IDOK, "BUTTON", BS_PUSHBUTTON | BS_CENTER | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 180, 60, 50, 14
+ CONTROL "Cancel", IDCANCEL, "BUTTON", BS_PUSHBUTTON | BS_CENTER | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 12, 60, 50, 14
+ CONTROL "", IDC_PSWCUSTOMMSG, "static", SS_LEFT | WS_CHILD | WS_VISIBLE, 4, 4, 232, 30
+ CONTROL "Enter password:", IDC_STATICTEXT6, "static", SS_LEFTNOWORDWRAP | WS_CHILD | WS_VISIBLE, 4, 43, 76, 13
+ CONTROL "", IDC_PSWPSWEDIT, "edit", ES_LEFT | ES_PASSWORD | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP, 60, 40, 172, 12
+}
+
+
+
+
+/* Armagedden launcher dialog controller code */
+
+#include <Windows.H>
+#pragma hdrstop
+
+#include "AdminSec.H" /* Main app header */
+#include "WinStuff\HInst.H" /* For app instance handle */
+#include "ArmDlg.H" /* This dialog's header */
+
+static void S_ARMDLG_Link(PS_ARMDLG PObject);
+static void S_ARMDLG_Init(PS_ARMDLG PObject);
+static HWND S_ARMDLG_Create(void*, const HWND Parent);
+static BOOL S_ARMDLG_Show(void*, int nCmdShow);
+static HWND S_ARMDLG_RegisterEnableOnExit(const HWND handle);
+static HWND S_ARMDLG_GetRegisteredEnableOnExit(void);
+static HWND S_ARMDLG_GetHandle(void*);
+static BOOL S_ARMDLG_Destroy(void*);
+static HWND _enableOnExit = NULL; /* A control handle to enable when dialog closes, only one, not instantaniated */
+static void OnClose(void); /* Close dialog event handler */
+static void ConfirmBtnClick(const HWND Hdlg, const HWND Hcontrol); /* Event handler for a click on CONFIRM */
+static void ConsensisBtnClick(const HWND Hdlg, const HWND Hcontrol); /* Event handler for a click on Consensis confirmed */
+static BOOL CALLBACK ArmDlgProc( HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam); /* Message handler */
+/*-------------------------------------------------------------------------*/
+void S_ARMDLG_Construct(PS_ARMDLG PObject)
+{
+  S_ARMDLG_Link(PObject); /* Link to member functions */
+  S_ARMDLG_Init(PObject); /* Init data members */
+}
+/*-------------------------------------------------------------------------*/
+void S_ARMDLG_Destruct(PS_ARMDLG PObject)
+{
+  PObject->Destroy(PObject); /* Destroy the dialog */
+}
+/*-------------------------------------------------------------------------*/
+static void S_ARMDLG_Link(PS_ARMDLG PObject)
+{
+  PObject->Create = S_ARMDLG_Create;
+  PObject->Show = S_ARMDLG_Show;
+  PObject->RegisterEnableOnExit = S_ARMDLG_RegisterEnableOnExit;
+  PObject->GetRegisteredEnableOnExit = S_ARMDLG_GetRegisteredEnableOnExit;
+  PObject->GetHandle = S_ARMDLG_GetHandle;
+  PObject->Destroy = S_ARMDLG_Destroy;
+}
+/*-------------------------------------------------------------------------*/
+static void S_ARMDLG_Init(PS_ARMDLG PObject)
+{
+  PObject->_handle = NULL; /* Dialog not yet created */
+}
+/*-------------------------------------------------------------------------*/
+static HWND S_ARMDLG_Create(void* PObject, const HWND Parent)
+{
+  PS_ARMDLG s = (S_ARMDLG*)PObject; /* Cast object pointer */
+
+  s->_handle = CreateDialog(GetInstanceHandle(), MAKEINTRESOURCE(IDD_ARMAGEDDEN), Parent, ArmDlgProc);
+  return s->_handle; /* Give handle to caller */
+}
+/*-------------------------------------------------------------------------*/
+static BOOL S_ARMDLG_Show(void* PObject, int nCmdShow)
+{
+  PS_ARMDLG s = (S_ARMDLG*)PObject; /* Cast object pointer */
+  
+  if (s->_handle) /* Created window? */
+  {
+    return ShowWindow(s->_handle, nCmdShow); /* Show as state */
+  }
+  return FALSE; /* Failed! */
+}
+/*-------------------------------------------------------------------------*/
+BOOL CALLBACK ArmDlgProc( HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam )
+{
+  switch (msg)
+  {
+    case WM_INITDIALOG :
+    {
+      return TRUE; /* Default focus */
+    }
+    case WM_CLOSE : /* Request to close dialog */
+    {
+      OnClose(); /* Call on close event handler */
+      ShowWindow(hwndDlg, FALSE); /* Hide window */
+      break;
+    } /*WM_CLOSE*/
+    case WM_COMMAND :
+    {
+      HWND Hcontrol = (HWND)lParam; /* Get window handle of control */
+      WORD wID = LOWORD(wParam); /* Get control ID */
+
+      switch (wID)
+      {
+        case IDCANCEL : /* Cancel */
+        {
+          PostMessage(hwndDlg, WM_CLOSE, 0U, 0UL); /* Post close mesage to ourselves */
+          break;
+        }
+        case IDC_CONFIRMBTN : /* Confirm */
+        {
+          ConfirmBtnClick(hwndDlg, Hcontrol);
+          break;
+        }
+        case IDC_CONSENSISBTN : /* Consensis verfied */
+        {
+          ConsensisBtnClick(hwndDlg, Hcontrol);
+          break;
+        }
+      } /*wID*/
+      break;
+    } /*WM_COMMAND*/
+    default : /* A message I have not written code to process */
+    {
+      return 0; /* Did not process message */
+    }
+  } /* switch (msg) */
+
+  return 1; /* Processed message */
+}
+/*-------------------------------------------------------------------------*/
+static void OnClose()
+{
+  if (_enableOnExit) /* A control should be enabled now? */
+  {
+    EnableWindow(_enableOnExit, TRUE); /* Enable registered window */
+    _enableOnExit = NULL; /* Prevent this action until handle is re-registered */
+  }
+}
+/*-------------------------------------------------------------------------*/
+static HWND S_ARMDLG_RegisterEnableOnExit(const HWND handle)
+{
+  HWND PrevHandle = _enableOnExit; /* Save current handle */
+  _enableOnExit = handle; /* Set to new handle (possibly NULL to unregister) */
+  return PrevHandle; /* Give previous handle to caller */
+}
+/*-------------------------------------------------------------------------*/
+static HWND S_ARMDLG_GetRegisteredEnableOnExit(void)
+{
+  return _enableOnExit; /* Simply give handle to caller */
+}
+/*-------------------------------------------------------------------------*/
+static HWND S_ARMDLG_GetHandle(void* PObject)
+{
+  PS_ARMDLG s = (S_ARMDLG*)PObject; /* Cast object pointer */
+
+  return s->_handle; /* Just give handle to caller */
+}
+/*-------------------------------------------------------------------------*/
+static BOOL S_ARMDLG_Destroy(void* PObject)
+{
+  PS_ARMDLG s = (S_ARMDLG*)PObject; /* Cast object pointer */
+
+  if (s->_handle) /* Dialog was created? */
+  {
+    if (DestroyWindow(s->_handle)) /* Destroy the window */
+    {
+      s->_handle = NULL; /* Mark as not loaded */
+      return TRUE; /* Destroyed window */
+    }
+  }
+  return FALSE; /* Did not destroy window, window didn't need to be destroyed */
+}
+/*-------------------------------------------------------------------------*/
+static void ConfirmBtnClick(const HWND Hdlg, const HWND Hcontrol)
+{
+  EnableArmDlgSection(Hdlg, 1, TRUE); /* Enables section 1 on the dialog */
+}
+/*-------------------------------------------------------------------------*/
+static void ConsensisBtnClick(const HWND Hdlg, const HWND Hcontrol)
+{
+  EnableArmDlgSection(Hdlg, 2, TRUE); /* Enables section 2 on the dialog */
+}
+/*-------------------------------------------------------------------------*/
+BOOL EnableArmDlgSection(const HWND Hwnd, const unsigned short SectionNum, const BOOL EnDis)
+{
+  const unsigned short MAXSECTION = 3; /* Maximum section number */
+  unsigned short i; /* Iterator control var */
+
+  if (SectionNum > MAXSECTION) /* Section number out of range 0-3 */
+    return FALSE;
+
+  if (!Hwnd || !IsWindow(Hwnd)) /* Not a valid window handle? */
+    return FALSE;
+
+
+  if (EnDis) /* A section enablement */
+  {
+    for (i = 0; i < MAXSECTION; i++) /* All sections */
+    {
+      if (i != SectionNum) /* EXCEPT THIS ONE! */
+      {
+        /* Should be disabled */
+        EnableArmDlgSection(Hwnd, i, FALSE); /* So do a recursive call */
+      } /* (i != SectionNum) */
+    } /* loop */
+  } /* (EnDis) */
+
+
+  /* Please note: These is no default clause in the switch compound, this
+  is because the ranges have already been trapped, it is therefore impossible
+  for the 'SectionNum' to not fit on the cases */
+  switch (SectionNum) /* Evaluate section number */
+  {
+    case 0 : /* 1st section */
+    {
+      EnableWindow(GetDlgItem(Hwnd, IDC_CONFIRMBTN), EnDis);
+      break;
+    }
+    case 1 : /* 2nd section */
+    {
+      EnableWindow(GetDlgItem(Hwnd, IDC_STADMINPSW), EnDis);
+      EnableWindow(GetDlgItem(Hwnd, IDC_ADMINPSWEDIT), EnDis);
+      EnableWindow(GetDlgItem(Hwnd, IDC_STARMPSW1), EnDis);
+      EnableWindow(GetDlgItem(Hwnd, IDC_EDARMPSW1), EnDis);
+      EnableWindow(GetDlgItem(Hwnd, IDC_STARMPSW2), EnDis);
+      EnableWindow(GetDlgItem(Hwnd, IDC_EDARMPSW2), EnDis);
+      EnableWindow(GetDlgItem(Hwnd, IDC_STARMPSW3), EnDis);
+      EnableWindow(GetDlgItem(Hwnd, IDC_EDARMPSW3), EnDis);
+      EnableWindow(GetDlgItem(Hwnd, IDC_CONSENSIS), EnDis);
+      break;
+    }
+    case 2 : /* 3rd section */
+    {
+      EnableWindow(GetDlgItem(Hwnd, IDC_STSAFEDESC), EnDis);
+      EnableWindow(GetDlgItem(Hwnd, IDC_EDITSEALEDCODE), EnDis);
+      break;
+    }
+    case 3 : /* 4th section */
+    {
+      EnableWindow(GetDlgItem(Hwnd, IDC_LOCKIMG), EnDis);
+      EnableWindow(GetDlgItem(Hwnd, IDC_ARMAGIMG), EnDis);
+      break;
+    }
+  }
+
+  return TRUE; /* Success */
+}
+/*-------------------------------------------------------------------------*/

cfaddusr.DSW

Binary file added.
+/* This program is part of the DOS security software for the DOS
+machine leant to the the boyz! This one adds a user to the control file */
+
+#include <StdIO.H> /* To communicate with user */
+#include <StdLib.H>
+#include <Assert.H>
+#include <String.H>
+#include "Stds\DLStdInc.H" /* Daybo Logic standard inclusions header */
+#include "DLUtils\DLUtils.H" /* Daybo Logic utilities */
+#pragma hdsrtop
+
+#include "Headers\CtrlInpt.H" /* Controlled input loop */
+#include "CtrlFile.H" /* Control file interface */
+#include "Replace\In1Char.H" /* Way to get 1 keyboard char */
+
+static void ShowTitle(void); /* Shows program tite */
+static BOOL AddUser(PS_CTRLFILE PCtrlFile); /* Gets user to enter info about a user which is then added to the control file */
+/*-------------------------------------------------------------------------*/
+int main()
+{
+  S_CTRLFILE ControlFile; /* Control file class */
+  int retVal = EXIT_SUCCESS; /* The valud returned to the calling program */
+
+  S_CTRLFILE_Construct(&ControlFile); /* Call control file class constructor */
+  ShowTitle(); /* Show program title */
+  if (!ControlFile.Load(&ControlFile)) /* Load the control file to memory */
+  {
+	 fprintf(stderr, "%s\n", ControlFile.GetErrorMessage(ControlFile.GetLastError(&ControlFile)));
+  }
+  if (!ControlFile.Check(&ControlFile)) /* Verify control file integrity */
+  {
+	 printf("The control file had problems!\n\n");
+	 fprintf(stderr, "\n%s\n", ControlFile.GetErrorMessage(ControlFile.GetLastError(&ControlFile)));