/*
 *  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 ""
    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 ""
    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 ""
    BEGIN
        MENUITEM "#msgctxt#window#&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 ""
    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
