#include "shellprv.h"
#include "defview.h"
#include "views.h"
#include "ids.h"

#include <stdlib.h>
#include <stdio.h>

struct valstr {
    int     val;
    char *  str;
};

#define TABENT(id)  { id, # id },
struct valstr ValStrTab[] = {
    // these guys come from doing:
    // qgrep IDM_ *.h unicpp/*.h ../inc/*.h
    // qgrep DVM_ *.h unicpp/*.h ../inc/*.h
    // magic editor commands to change to the right format:
    //  g/#define/s/.*#define /TABENT(/
    //  g/TABENT/s/\([^ ]*\).*/\1)/

    // inc/shellp.h
    // todo?

    // inc/startids.h
    // todo?

#if 0
    // commui.h
    TABENT(CMIDM_LINK)
    TABENT(CMIDM_COPY)
    TABENT(CMIDM_MOVE)
#endif

    // defview.h
    TABENT(SFVIDM_SELECT_FIRST)
    TABENT(SFVIDM_SELECT_ALL)
    TABENT(SFVIDM_SELECT_INVERT)
    TABENT(SFVIDM_DESELECT_ALL)
    TABENT(SFVIDM_VIEW_FIRST)
    TABENT(SFVIDM_VIEW_ICON)
    TABENT(SFVIDM_VIEW_SMALLICON)
    TABENT(SFVIDM_VIEW_LIST)
    TABENT(SFVIDM_VIEW_DETAILS)
    TABENT(SFVIDM_VIEW_FIRSTVIEW)
    TABENT(SFVIDM_VIEW_LASTVIEW)
    TABENT(SFVIDM_VIEW_OPTIONS)
    TABENT(SFVIDM_VIEW_VIEWMENU)
    TABENT(SFVIDM_VIEW_CUSTOMWIZARD)
    TABENT(SFVIDM_VIEW_COLSETTINGS)
    TABENT(SFVIDM_VIEW_EXTFIRST)
    TABENT(SFVIDM_VIEW_EXTLAST)
    TABENT(SFVIDM_VIEW_SVEXTFIRST)
    TABENT(SFVIDM_VIEW_SVEXTLAST)
    TABENT(SFVIDM_VIEW_EXTENDEDFIRST)
    TABENT(SFVIDM_VIEW_EXTENDEDLAST)
    TABENT(SFVIDM_ARRANGE_FIRST)
    TABENT(SFVIDM_ARRANGE_AUTO)
    TABENT(SFVIDM_ARRANGE_DISPLAYICONS)
    TABENT(SFVIDM_ARRANGE_AUTOGRID)
    TABENT(SFVIDM_TOOL_FIRST)
    TABENT(SFVIDM_TOOL_CONNECT)
    TABENT(SFVIDM_TOOL_DISCONNECT)
    TABENT(SFVIDM_HELP_FIRST)
    TABENT(SFVIDM_HELP_TOPIC)
    TABENT(SFVIDM_MISC_FIRST)
    TABENT(SFVIDM_MISC_REFRESH)
    TABENT(SFVIDM_CLIENT_FIRST)
    TABENT(SFVIDM_CLIENT_LAST)
    TABENT(SFVIDM_DESKTOP_FIRST)
#ifdef SFVIDM_DESKTOPHTML_ONOFF
    TABENT(SFVIDM_DESKTOPHTML_ONOFF)
    TABENT(SFVIDM_DESKTOPHTML_UPDATE)
#endif
    TABENT(SFVIDM_DESKTOP_LAST)
    TABENT(SFVIDM_COLUMN_FIRST)
    TABENT(SFVIDM_COLUMN_LAST)
    TABENT(SFVIDM_CONTEXT_FIRST)
    TABENT(SFVIDM_CONTEXT_LAST)
    TABENT(SFVIDM_BACK_CONTEXT_FIRST)
    TABENT(SFVIDM_BACK_CONTEXT_LAST)

    // ids.h
    TABENT(IDM_NOOP)
    TABENT(IDM_OPENCONTAINING)
    TABENT(IDM_CASESENSITIVE)
    TABENT(IDM_REGULAREXP)
    TABENT(IDM_SAVESEARCH)
    TABENT(IDM_CLOSE)
    TABENT(IDM_SAVERESULTS)
    TABENT(IDM_HELP_FIND)
    TABENT(IDM_HELP_WHATSTHIS)
    TABENT(IDM_MENU_OPTIONS)
    TABENT(IDM_FIND_MENU_FIRST)
    TABENT(IDM_FIND_MENU_LAST)

    // views.h
    TABENT(FSIDM_OBJPROPS_FIRST)
    TABENT(FSIDM_PROPERTIESBG)
    TABENT(FSIDM_FINDFILES)
    TABENT(FSIDM_FINDCOMPUTER)
    TABENT(FSIDM_DRIVES_FIRST)
    TABENT(FSIDM_FORMAT)
    TABENT(FSIDM_DISCONNECT)
    TABENT(FSIDM_EJECT)
    TABENT(FSIDM_DISKCOPY)
    TABENT(FSIDM_NETWORK_FIRST)
    TABENT(FSIDM_CONNECT)
    TABENT(FSIDM_NETPRN_INSTALL)
    TABENT(FSIDM_CONNECT_PRN)
    TABENT(FSIDM_DISCONNECT_PRN)
    TABENT(FSIDM_CPLPRN_FIRST)
    TABENT(FSIDM_SETDEFAULTPRN)
    TABENT(FSIDM_SHARING)
    TABENT(FSIDM_DOCUMENTDEFAULTS)
    TABENT(FSIDM_SERVERPROPERTIES)
    TABENT(FSIDM_OPENPRN)
    TABENT(FSIDM_RESUMEPRN)
    TABENT(FSIDM_PAUSEPRN)
    TABENT(FSIDM_WORKONLINE)
    TABENT(FSIDM_WORKOFFLINE)
    TABENT(FSIDM_PURGEPRN)
    TABENT(FSIDM_SORT_FIRST)
    TABENT(FSIDM_MENU_SENDTO)
    TABENT(FSIDM_SENDTOFIRST)
    TABENT(FSIDM_SENDTOLAST)
    TABENT(FSIDM_MENU_NEW)
    TABENT(FSIDM_NEWFOLDER)
    TABENT(FSIDM_NEWLINK)
    TABENT(FSIDM_NEWOTHER)
    TABENT(FSIDM_NEWLAST)
    TABENT(FSIDM_RESTORE)
    TABENT(FSIDM_PURGE)
    TABENT(FSIDM_PURGEALL)
    TABENT(FSIDM_MENU_BRIEFCASE)
    TABENT(FSIDM_UPDATEALL)
    TABENT(FSIDM_UPDATESELECTION)
    TABENT(FSIDM_SPLIT)
    TABENT(FSIDM_FOLDER_SEP)
    TABENT(FSIDM_VIEW_SEP)
#if 0
    TABENT(DCMIDM_LINK)
    TABENT(DCMIDM_DELETE)
    TABENT(DCMIDM_RENAME)
    TABENT(DCMIDM_PROPERTIES)
    TABENT(DCMIDM_CUT)
    TABENT(DCMIDM_COPY)
    TABENT(DCMIDM_PASTE)
#endif

    // unicpp/resource.h
    TABENT(FCIDM_NEXTCTL)
    TABENT(FCIDM_FINDFILES)
    TABENT(IDM_DCCM_FIRST)
    TABENT(IDM_DCCM_PROPERTIES)
    TABENT(IDM_DCCM_CUSTOMIZE)
    TABENT(IDM_DCCM_CLOSE)
    TABENT(IDM_DCCM_FULLSCREEN)
    TABENT(IDM_DCCM_SPLIT)
    TABENT(IDM_DCCM_RESTORE)
    TABENT(IDM_DCCM_LASTCOMPITEM)
    TABENT(FCIDM_REFRESH)
    TABENT(FCIDM_BROWSER_VIEW)
    TABENT(FCIDM_BROWSER_TOOLS)
    TABENT(FCIDM_STOP)
    TABENT(FCIDM_ADDTOFAVNOUI)
    TABENT(FCIDM_VIEWITBAR)
    TABENT(FCIDM_VIEWSEARCH)
    TABENT(FCIDM_CUSTOMIZEFOLDER)
    TABENT(FCIDM_VIEWFONTS)

    // unicpp/resource.h
    TABENT(FCIDM_STOP)
    TABENT(FCIDM_THEATER)
    TABENT(FCIDM_JAVACONSOLE)
    TABENT(FCIDM_BROWSER_EDIT)
    TABENT(FCIDM_MOVE)
    TABENT(FCIDM_COPY)
    TABENT(FCIDM_PASTE)
    TABENT(FCIDM_SELECTALL)
    TABENT(FCIDM_LINK)
    TABENT(FCIDM_EDITPAGE)
    TABENT(DVIDM_HELPSEARCH)
};
#undef TABENT

void PrTab(struct valstr *pvs, int n);

int _cdecl main()
{
    PrTab(ValStrTab, ARRAYSIZE(ValStrTab));
    return 0;
}

void PrTab(struct valstr *pvs, int n)
{
    for (; n > 0; n--, pvs++) {
        printf("%s\t0x%x\r\n", pvs->str, pvs->val);
    }
    return;
}