/*
 *  Task Manager
 *
 *  Copyright 1999-2001 Brian Palmer
 *
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
 */

#include "resource.h"

#pragma code_page(65001)

LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT

/*
 Menus
*/

IDR_TASKMANAGER MENU
BEGIN
    POPUP "&File"
    BEGIN
        MENUITEM "&New Task (Run...)",          ID_FILE_NEW
        MENUITEM SEPARATOR
        MENUITEM "E&xit Task Manager",          ID_FILE_EXIT
    END
    POPUP "&Options"
    BEGIN
        MENUITEM "&Always on Top",              ID_OPTIONS_ALWAYSONTOP
        , CHECKED
        MENUITEM "&Minimize On Use",            ID_OPTIONS_MINIMIZEONUSE
        , CHECKED
        MENUITEM "&Hide When Minimized",        ID_OPTIONS_HIDEWHENMINIMIZED
        , CHECKED
        MENUITEM "&Show 16-bit tasks",          ID_OPTIONS_SHOW16BITTASKS
        , CHECKED
    END
    POPUP "&View"
    BEGIN
        MENUITEM "&Refresh Now",                ID_VIEW_REFRESH
        POPUP "&Update Speed"
        BEGIN
            MENUITEM "&High",                       ID_VIEW_UPDATESPEED_HIGH
            MENUITEM "&Normal",                     ID_VIEW_UPDATESPEED_NORMAL
            , CHECKED
            MENUITEM "&Low",                        ID_VIEW_UPDATESPEED_LOW
            MENUITEM "&Paused",                     ID_VIEW_UPDATESPEED_PAUSED

        END
        MENUITEM SEPARATOR
        MENUITEM "Lar&ge Icons",                ID_VIEW_LARGE
        MENUITEM "S&mall Icons",                ID_VIEW_SMALL
        MENUITEM "&Details",                    ID_VIEW_DETAILS, CHECKED
        MENUITEM "&Select Columns...",          ID_VIEW_SELECTCOLUMNS
        POPUP "&CPU History"
        BEGIN
            MENUITEM "&One Graph, All CPUs",        ID_VIEW_CPUHISTORY_ONEGRAPHALL

            MENUITEM "One Graph &Per CPU",          ID_VIEW_CPUHISTORY_ONEGRAPHPERCPU
            , CHECKED
        END
        MENUITEM "&Show Kernel Times",          ID_VIEW_SHOWKERNELTIMES
    END
    POPUP "&Windows"
    BEGIN
        MENUITEM "Tile &Horizontally",          ID_WINDOWS_TILEHORIZONTALLY
        MENUITEM "Tile &Vertically",            ID_WINDOWS_TILEVERTICALLY
        MENUITEM "&Minimize",                   ID_WINDOWS_MINIMIZE
        MENUITEM "Ma&ximize",                   ID_WINDOWS_MAXIMIZE
        MENUITEM "&Cascade",                    ID_WINDOWS_CASCADE
        MENUITEM "&Bring To Front",             ID_WINDOWS_BRINGTOFRONT
    END
    POPUP "&Help"
    BEGIN
        MENUITEM "&Contents",                   ID_HELP_TOPICS
        MENUITEM "&About Task Manager",         ID_HELP_ABOUT
    END
END

IDR_WINDOWSMENU MENU
BEGIN
    MENUITEM "Tile &Horizontally",          ID_WINDOWS_TILEHORIZONTALLY
    MENUITEM "Tile &Vertically",            ID_WINDOWS_TILEVERTICALLY
    MENUITEM "&Minimize",                   ID_WINDOWS_MINIMIZE
    MENUITEM "Ma&ximize",                   ID_WINDOWS_MAXIMIZE
    MENUITEM "&Cascade",                    ID_WINDOWS_CASCADE
    MENUITEM "&Bring To Front",             ID_WINDOWS_BRINGTOFRONT
END

IDR_APPLICATION_PAGE_CONTEXT1 MENU
BEGIN
    POPUP "DUMMY"
    BEGIN
        MENUITEM "&New Task (Run...)",          ID_FILE_NEW
        MENUITEM SEPARATOR
        MENUITEM "Lar&ge Icons",                ID_VIEW_LARGE
        MENUITEM "S&mall Icons",                ID_VIEW_SMALL
        MENUITEM "&Details",                    ID_VIEW_DETAILS, CHECKED
    END
END

IDR_APPLICATION_PAGE_CONTEXT2 MENU
BEGIN
    POPUP "DUMMY"
    BEGIN
        MENUITEM "&Switch To",                  ID_APPLICATION_PAGE_SWITCHTO
        MENUITEM "&Bring To Front",             ID_WINDOWS_BRINGTOFRONT
        MENUITEM SEPARATOR
        MENUITEM "Tile &Horizontally",          ID_WINDOWS_TILEHORIZONTALLY
        MENUITEM "Tile &Vertically",            ID_WINDOWS_TILEVERTICALLY
        MENUITEM "&Minimize",                   ID_WINDOWS_MINIMIZE
        MENUITEM "Ma&ximize",                   ID_WINDOWS_MAXIMIZE
        MENUITEM "&Cascade",                    ID_WINDOWS_CASCADE
        MENUITEM SEPARATOR
        MENUITEM "&End Task",                   ID_APPLICATION_PAGE_ENDTASK
        MENUITEM "&Go To Process",              ID_APPLICATION_PAGE_GOTOPROCESS
    END
END

IDR_TRAY_POPUP MENU
BEGIN
    POPUP "DUMMY"
    BEGIN
        MENUITEM "&Restore",                    ID_RESTORE
        MENUITEM "&Close",                      ID_FILE_EXIT
        MENUITEM SEPARATOR
        MENUITEM "&Always on Top",              ID_OPTIONS_ALWAYSONTOP
    END
END

IDR_PROCESS_PAGE_CONTEXT MENU
BEGIN
    POPUP "DUMMY"
    BEGIN
        MENUITEM "&End Process",                ID_PROCESS_PAGE_ENDPROCESS
        MENUITEM "End Process &Tree",           ID_PROCESS_PAGE_ENDPROCESSTREE

        MENUITEM "&Debug",                      ID_PROCESS_PAGE_DEBUG
        MENUITEM SEPARATOR
        POPUP "Set &Priority"
        BEGIN
            MENUITEM "&Realtime",                   ID_PROCESS_PAGE_SETPRIORITY_REALTIME

            MENUITEM "&High",                       ID_PROCESS_PAGE_SETPRIORITY_HIGH

            MENUITEM "&AboveNormal",                ID_PROCESS_PAGE_SETPRIORITY_ABOVENORMAL

            MENUITEM "&Normal",                     ID_PROCESS_PAGE_SETPRIORITY_NORMAL

            MENUITEM "&BelowNormal",                ID_PROCESS_PAGE_SETPRIORITY_BELOWNORMAL

            MENUITEM "&Low",                        ID_PROCESS_PAGE_SETPRIORITY_LOW

        END
        MENUITEM "Set &Affinity...",            ID_PROCESS_PAGE_SETAFFINITY
	MENUITEM "Edit Debug &Channels...",	ID_PROCESS_PAGE_DEBUGCHANNELS
    END
END

/*
 String Tables
*/

STRINGTABLE
BEGIN
    IDS_APP_TITLE           "Task Manager"
    IDC_TASKMGR             "Task Manager"
    IDS_RUNDLG_CAPTION      "Create New Task"
END

STRINGTABLE
BEGIN
    ID_FILE_NEW             "Runs a new program"
    ID_OPTIONS_ALWAYSONTOP  "Task Manager remains in front of all other windows unless minimized"
    ID_OPTIONS_MINIMIZEONUSE
                            "Task Manager is minimized when a SwitchTo operation is performed"
    ID_OPTIONS_HIDEWHENMINIMIZED "Hide the Task Manager when it is minimized"
    ID_VIEW_REFRESH         "Force Task Manager to update now, regardless of Update Speed setting"
    ID_VIEW_LARGE           "Displays tasks by using large icons"
    ID_VIEW_SMALL           "Displays tasks by using small icons"
    ID_VIEW_DETAILS         "Displays information about each task"
    ID_VIEW_UPDATESPEED_HIGH "Updates the display twice per second"
    ID_VIEW_UPDATESPEED_NORMAL "Updates the display every two seconds"
    ID_VIEW_UPDATESPEED_LOW "Updates the display every four seconds"
END

STRINGTABLE
BEGIN
    ID_VIEW_UPDATESPEED_PAUSED "Does not automatically update"
    ID_WINDOWS_TILEHORIZONTALLY
                            "Tiles the windows horizontally on the desktop"
    ID_WINDOWS_TILEVERTICALLY "Tiles the windows vertically on the desktop"
    ID_WINDOWS_MINIMIZE     "Minimizes the windows"
    ID_WINDOWS_MAXIMIZE     "Maximizes the windows"
    ID_WINDOWS_CASCADE      "Cascades the windows diagonally on the desktop"
    ID_WINDOWS_BRINGTOFRONT "Brings the window front, but does not switch to it"
    ID_HELP_TOPICS          "Displays Task Manager help topics"
    ID_HELP_ABOUT           "Displays program information, version number, and copyright"
    ID_FILE_EXIT            "Exits the Task Manager application"
    ID_OPTIONS_SHOW16BITTASKS
                            "Shows 16-bit tasks under the associated ntvdm.exe"
    ID_VIEW_SELECTCOLUMNS   "Select which columns will be visible on the Process page"
    ID_VIEW_SHOWKERNELTIMES "Displays kernel time in the performance graphs"
    ID_VIEW_CPUHISTORY_ONEGRAPHALL
                            "A single history graph shows total CPU usage"
    ID_VIEW_CPUHISTORY_ONEGRAPHPERCPU "Each CPU has its own history graph"
    ID_APPLICATION_PAGE_SWITCHTO
                            "Brings a task to the foreground, switch focus to that task"
END

STRINGTABLE
BEGIN
    ID_ENDTASK              "Tells the selected tasks to close"
    ID_GOTOPROCESS          "Switches the focus to the process of the selected task"
    ID_RESTORE              "Restores the Task Manager from its hidden state"
    ID_PROCESS_PAGE_ENDPROCESS "Removes the process from the system"
    ID_PROCESS_PAGE_ENDPROCESSTREE
                            "Removes this process and all descendants from the system"
    ID_PROCESS_PAGE_DEBUG   "Attaches the debugger to this process"
    ID_PROCESS_PAGE_SETAFFINITY
                            "Controls which processors the process will be allowed to run on"
    ID_PROCESS_PAGE_SETPRIORITY_REALTIME
                            "Sets process to the REALTIME priority class"
    ID_PROCESS_PAGE_SETPRIORITY_HIGH "Sets process to the HIGH priority class"
    ID_PROCESS_PAGE_SETPRIORITY_ABOVENORMAL
                            "Sets process to the ABOVE NORMAL priority class"
    ID_PROCESS_PAGE_SETPRIORITY_NORMAL
                            "Sets process to the NORMAL priority class"
    ID_PROCESS_PAGE_SETPRIORITY_BELOWNORMAL
                            "Sets process to the BELOW NORMAL priority class"
    ID_PROCESS_PAGE_SETPRIORITY_LOW "Sets process to the LOW priority class"
    ID_PROCESS_PAGE_DEBUGCHANNELS
                            "Controls Debug Channels"
END

STRINGTABLE
BEGIN
    IDS_VIEW_LARGE                     "Lar&ge Icons"
    IDS_VIEW_SMALL                     "S&mall Icons"
    IDS_VIEW_DETAILS                   "&Details"
    IDS_WINDOWS                        "&Windows"
    IDS_VIEW_SELECTCOLUMNS             "&Select Columns..."
    IDS_OPTIONS_SHOW16BITTASKS         "&Show 16-bit tasks"
    IDS_VIEW_CPUHISTORY                "&CPU History"
    IDS_VIEW_CPUHISTORY_ONEGRAPHALL    "&One Graph, All CPUs"
    IDS_VIEW_CPUHISTORY_ONEGRAPHPERCPU "One Graph &Per CPU"
    IDS_VIEW_SHOWKERNELTIMES           "&Show Kernel Times"
    IDS_APPLICATIONS                   "Applications"
    IDS_PROCESSES                      "Processes"
    IDS_PERFORMANCE                    "Performance"
    IDS_STATUS_BAR_CPU_USAGE           "CPU Usage: %3d%%"
    IDS_STATUS_BAR_PROCESSES           "Processes: %d"
    IDS_STATUS_BAR_MEMORY_USAGE        "Mem Usage: %dK / %dK"
END

STRINGTABLE
BEGIN
    IDS_IMAGENAME         "Image Name"
    IDS_PID               "PID"
    IDS_CPUUSAGE          "CPU"
    IDS_CPUTIME           "CPU Time"
    IDS_MEMORYUSAGE       "Mem Usage"
    IDS_MEMORYUSAGEDELTA  "Mem Delta"
    IDS_PEAKMEMORYUSAGE   "Peak Mem Usage"
    IDS_PAGEFAULTS        "Page Faults"
    IDS_USEROBJECTS       "USER Objects"
    IDS_IOREADS           "I/O Reads"
    IDS_IOREADBYTES       "I/O Read Bytes"
    IDS_SESSIONID         "Session ID"
    IDS_USERNAME          "Username"
    IDS_PAGEFAULTSDELTA   "PF Delta"
    IDS_VIRTUALMEMORYSIZE "VM Size"
    IDS_PAGEDPOOL         "Paged Pool"
    IDS_NONPAGEDPOOL      "NP Pool"
    IDS_BASEPRIORITY      "Base Pri"
    IDS_HANDLECOUNT       "Handles"
    IDS_THREADCOUNT       "Threads"
    IDS_GDIOBJECTS        "GDI Objects"
    IDS_IOWRITES          "I/O Writes"
    IDS_IOWRITEBYTES      "I/O Write Bytes"
    IDS_IOOTHER           "I/O Other"
    IDS_IOOTHERBYTES      "I/O Other Bytes"
END

STRINGTABLE
BEGIN
    IDS_WARNING_TITLE               "Task Manager Warning"
    IDS_PRIORITY_CHANGE_MESSAGE     "WARNING: Changing the priority class of this process may\n\
                                     cause undesired results including system instability. Are you\n\
                                     sure you want to change the priority class?"
    IDS_PRIORITY_UNABLE2CHANGE      "Unable to Change Priority"
    IDS_TERMINATE_MESSAGE           "WARNING: Terminating a process can cause undesired\n\
                                     results including loss of data and system instability. The\n\
                                     process will not be given the chance to save its state or\n\
                                     data before it is terminated. Are you sure you want to\n\
                                     terminate the process?"
    IDS_TERMINATE_UNABLE2TERMINATE  "Unable to Terminate Process"
    IDS_DEBUG_MESSAGE               "WARNING: Debugging this process may result in loss of data.\n\
                                     Are you sure you wish to attach the debugger?"
    IDS_DEBUG_UNABLE2DEBUG          "Unable to Debug Process"
    IDS_AFFINITY_ERROR_MESSAGE      "The process must have affinity with at least one processor"
    IDS_AFFINITY_ERROR_TITLE        "Invalid Option"
    IDS_AFFINITY_UNABLE2ACCESS      "Unable to Access or Set Process Affinity"
END

STRINGTABLE
BEGIN
    IDS_SYSTEM_IDLE_PROCESS            "System Idle Process"
    IDS_APPLICATION_NOT_RESPONDING     "Not Responding"
    IDS_APPLICATION_RUNNING            "Running"
    IDS_APPLICATION_TASK               "Task"
    IDS_APPLICATION_STATUS             "Status"
    IDS_DEBUG_CHANNEL                  "Debug Channels"
    IDS_DEBUG_CHANNEL_FIXME            "Fixme"
    IDS_DEBUG_CHANNEL_ERR              "Err"
    IDS_DEBUG_CHANNEL_WARN             "Warn"
    IDS_DEBUG_CHANNEL_TRACE            "Trace"
END

LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL

/*
 Icon
*/

/* Icon with lowest ID value placed first to ensure application icon
   remains consistent on all systems. */
/* @makedep: taskmgr.ico */
IDI_TASKMANAGER         ICON taskmgr.ico

/* @makedep: window.ico */
IDI_WINDOW              ICON window.ico

/* @makedep: windowsm.ico */
IDI_WINDOWSM            ICON windowsm.ico

/*
 Version
*/

VS_VERSION_INFO VERSIONINFO
 FILEVERSION 1,0,0,1
 PRODUCTVERSION 1,0,0,1
 FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
 FILEFLAGS 0x1L
#else
 FILEFLAGS 0x0L
#endif
 FILEOS 0x40004L
 FILETYPE 0x1L
 FILESUBTYPE 0x0L
BEGIN
    BLOCK "StringFileInfo"
    BEGIN
        BLOCK "040904b0"
        BEGIN
            VALUE "CompanyName", "Brian Palmer\0"
            VALUE "FileDescription", "Task Manager by Brian Palmer\0"
            VALUE "FileVersion", "1.0.0.1\0"
            VALUE "InternalName", "taskmgr\0"
            VALUE "LegalCopyright", "Copyright © Brian Palmer 2000\0"
            VALUE "OriginalFilename", "taskmgr.exe\0"
            VALUE "ProductName", "Task Manager by Brian Palmer\0"
            VALUE "ProductVersion", "1.0.0.1\0"
        END
    END
    BLOCK "VarFileInfo"
    BEGIN
        VALUE "Translation", 0x409, 1200
    END
END

/*
 Bitmap
*/

/* @makedep: traymask.bmp */
IDB_TRAYMASK            BITMAP traymask.bmp

/* @makedep: trayicon.bmp */
IDB_TRAYICON            BITMAP trayicon.bmp

/* @makedep: font.bmp */
IDB_FONT                BITMAP font.bmp
