Changeset 40


Ignore:
Timestamp:
Mar 30, 2018, 5:52:26 AM (7 years ago)
Author:
Alex Taylor
Message:

Add Sys2QuerySysValue function

Location:
rxutilex/trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • rxutilex/trunk/rxutilex.c

    r39 r40  
    4545#define INCL_WINCLIPBOARD
    4646#define INCL_WINERRORS
     47#define INCL_WINSYS
    4748#define INCL_DOS
    4849#define INCL_DOSDEVIOCTL
     
    9192
    9293#define SZ_LIBRARY_NAME         "RXUTILEX"  // Name of this library
    93 //#define SZ_ERROR_NAME           "SYS2ERR"   // REXX variable used to store error codes
    94 #define SZ_VERSION              "0.1.5"     // Current version of this library
     94//#define SZ_ERROR_NAME       "SYS2ERR"   // REXX variable used to store error codes - must be defined in Makefile
     95#define SZ_VERSION              "0.1.6"     // Current version of this library
    9596
    9697// Maximum string lengths...
     
    149150    "Sys2SyncBuffer",
    150151    "Sys2Write",
     152    "Sys2QuerySysValue",
    151153    "Sys2Version"
    152154};
     
    174176
    175177RexxFunctionHandler Sys2QueryPhysicalMemory;
     178RexxFunctionHandler Sys2QuerySysValue;
    176179
    177180RexxFunctionHandler Sys2LocateDLL;
     
    25262529
    25272530
     2531/* ------------------------------------------------------------------------- *
     2532 * Sys2QuerySysValue                                                         *
     2533 *                                                                           *
     2534 * Query the given system value.                                             *
     2535 *                                                                           *
     2536 * REXX ARGUMENTS:                                                           *
     2537 *   1. The system value identifier  (REQUIRED)                              *
     2538 *                                                                           *
     2539 * REXX RETURN VALUE: The requested system value, or "" on error.            *
     2540 * ------------------------------------------------------------------------- */
     2541ULONG APIENTRY Sys2QuerySysValue( PSZ pszName, ULONG argc, RXSTRING argv[], PSZ pszQueue, PRXSTRING prsResult )
     2542{
     2543    CHAR szResult[ US_INTEGER_MAXZ ];
     2544    LONG lID,
     2545         lValue;
     2546
     2547    // Reset the error indicator
     2548    WriteErrorCode( 0, NULL );
     2549
     2550    // Make sure we have exactly one valid argument
     2551    if ( argc != 1  || ( !RXVALIDSTRING(argv[0]) )) return ( 40 );
     2552
     2553    // Parse the identifier
     2554    lID = -1;
     2555    strupr( argv[0].strptr );
     2556    if (( sscanf( argv[0].strptr, "%d", &lID )) != 1 ) {
     2557        if ( ! stricmp( argv[0].strptr, "ALARM")) lID =                    SV_ALARM;
     2558        else if ( ! stricmp( argv[0].strptr, "ALTMNEMONIC")) lID =         SV_ALTMNEMONIC;
     2559        else if ( ! stricmp( argv[0].strptr, "ANIMATIONSPEED")) lID =      SV_ANIMATIONSPEED;
     2560        else if ( ! stricmp( argv[0].strptr, "ANIMATION")) lID =           SV_ANIMATION;
     2561        else if ( ! stricmp( argv[0].strptr, "BEGINDRAG")) lID =           SV_BEGINDRAG;
     2562        else if ( ! stricmp( argv[0].strptr, "BEGINDRAGKB")) lID =         SV_BEGINDRAGKB;
     2563        else if ( ! stricmp( argv[0].strptr, "BEGINSELECT")) lID =         SV_BEGINSELECT;
     2564        else if ( ! stricmp( argv[0].strptr, "BEGINSELECTKB")) lID =       SV_BEGINSELECTKB;
     2565        else if ( ! stricmp( argv[0].strptr, "CHORDTIME")) lID =           SV_CHORDTIME;
     2566        else if ( ! stricmp( argv[0].strptr, "CICONTEXTLINES")) lID =      SV_CICONTEXTLINES;
     2567        else if ( ! stricmp( argv[0].strptr, "CMOUSEBUTTONS")) lID =       SV_CMOUSEBUTTONS;
     2568        else if ( ! stricmp( argv[0].strptr, "CONTEXTHELPKB")) lID =       SV_CONTEXTHELPKB;
     2569        else if ( ! stricmp( argv[0].strptr, "CONTEXTHELP")) lID =         SV_CONTEXTHELP;
     2570        else if ( ! stricmp( argv[0].strptr, "CONTEXTMENU")) lID =         SV_CONTEXTMENU;
     2571        else if ( ! stricmp( argv[0].strptr, "CONTEXTMENUKB")) lID =       SV_CONTEXTMENUKB;
     2572        else if ( ! stricmp( argv[0].strptr, "CPOINTERBUTTONS")) lID =     SV_CPOINTERBUTTONS;
     2573        else if ( ! stricmp( argv[0].strptr, "CTIMERS")) lID =             SV_CTIMERS;
     2574        else if ( ! stricmp( argv[0].strptr, "CURSORLEVEL")) lID =         SV_CURSORLEVEL;
     2575        else if ( ! stricmp( argv[0].strptr, "CURSORRATE")) lID =          SV_CURSORRATE;
     2576        else if ( ! stricmp( argv[0].strptr, "CXALIGN")) lID =             SV_CXALIGN;
     2577        else if ( ! stricmp( argv[0].strptr, "CXBORDER")) lID =            SV_CXBORDER;
     2578        else if ( ! stricmp( argv[0].strptr, "CXBYTEALIGN")) lID =         SV_CXBYTEALIGN;
     2579        else if ( ! stricmp( argv[0].strptr, "CXCHORD")) lID =             SV_CXCHORD;
     2580        else if ( ! stricmp( argv[0].strptr, "CXDBLCLK")) lID =            SV_CXDBLCLK;
     2581        else if ( ! stricmp( argv[0].strptr, "CXDLGFRAME")) lID =          SV_CXDLGFRAME;
     2582        else if ( ! stricmp( argv[0].strptr, "CXFULLSCREEN")) lID =        SV_CXFULLSCREEN;
     2583        else if ( ! stricmp( argv[0].strptr, "CXHSCROLLARROW")) lID =      SV_CXHSCROLLARROW;
     2584        else if ( ! stricmp( argv[0].strptr, "CXHSLIDER")) lID =           SV_CXHSLIDER;
     2585        else if ( ! stricmp( argv[0].strptr, "CXICONTEXTWIDTH")) lID =     SV_CXICONTEXTWIDTH;
     2586        else if ( ! stricmp( argv[0].strptr, "CXICON")) lID =              SV_CXICON;
     2587        else if ( ! stricmp( argv[0].strptr, "CXMINMAXBUTTON")) lID =      SV_CXMINMAXBUTTON;
     2588        else if ( ! stricmp( argv[0].strptr, "CXMOTIONSTART")) lID =       SV_CXMOTIONSTART;
     2589        else if ( ! stricmp( argv[0].strptr, "CXPOINTER")) lID =           SV_CXPOINTER;
     2590        else if ( ! stricmp( argv[0].strptr, "CXSCREEN")) lID =            SV_CXSCREEN;
     2591        else if ( ! stricmp( argv[0].strptr, "CXSIZEBORDER")) lID =        SV_CXSIZEBORDER;
     2592        else if ( ! stricmp( argv[0].strptr, "CXVSCROLL")) lID =           SV_CXVSCROLL;
     2593        else if ( ! stricmp( argv[0].strptr, "CYALIGN")) lID =             SV_CYALIGN;
     2594        else if ( ! stricmp( argv[0].strptr, "CYBORDER")) lID =            SV_CYBORDER;
     2595        else if ( ! stricmp( argv[0].strptr, "CYBYTEALIGN")) lID =         SV_CYBYTEALIGN;
     2596        else if ( ! stricmp( argv[0].strptr, "CYCHORD")) lID =             SV_CYCHORD;
     2597        else if ( ! stricmp( argv[0].strptr, "CYDBLCLK")) lID =            SV_CYDBLCLK;
     2598        else if ( ! stricmp( argv[0].strptr, "CYDLGFRAME")) lID =          SV_CYDLGFRAME;
     2599        else if ( ! stricmp( argv[0].strptr, "CYFULLSCREEN")) lID =        SV_CYFULLSCREEN;
     2600        else if ( ! stricmp( argv[0].strptr, "CYHSCROLL")) lID =           SV_CYHSCROLL;
     2601        else if ( ! stricmp( argv[0].strptr, "CYICON")) lID =              SV_CYICON;
     2602        else if ( ! stricmp( argv[0].strptr, "CYMENU")) lID =              SV_CYMENU;
     2603        else if ( ! stricmp( argv[0].strptr, "CYMINMAXBUTTON")) lID =      SV_CYMINMAXBUTTON;
     2604        else if ( ! stricmp( argv[0].strptr, "CYMOTIONSTART")) lID =       SV_CYMOTIONSTART;
     2605        else if ( ! stricmp( argv[0].strptr, "CYPOINTER")) lID =           SV_CYPOINTER;
     2606        else if ( ! stricmp( argv[0].strptr, "CYSCREEN")) lID =            SV_CYSCREEN;
     2607        else if ( ! stricmp( argv[0].strptr, "CYSIZEBORDER")) lID =        SV_CYSIZEBORDER;
     2608        else if ( ! stricmp( argv[0].strptr, "CYTITLEBAR")) lID =          SV_CYTITLEBAR;
     2609        else if ( ! stricmp( argv[0].strptr, "CYVSCROLLARROW")) lID =      SV_CYVSCROLLARROW;
     2610        else if ( ! stricmp( argv[0].strptr, "CYVSLIDER")) lID =           SV_CYVSLIDER;
     2611        else if ( ! stricmp( argv[0].strptr, "DBLCLKTIME")) lID =          SV_DBLCLKTIME;
     2612        else if ( ! stricmp( argv[0].strptr, "DEBUG")) lID =               SV_DEBUG;
     2613        else if ( ! stricmp( argv[0].strptr, "ENDDRAG")) lID =             SV_ENDDRAG;
     2614        else if ( ! stricmp( argv[0].strptr, "ENDDRAGKB")) lID =           SV_ENDDRAGKB;
     2615        else if ( ! stricmp( argv[0].strptr, "ENDSELECTKB")) lID =         SV_ENDSELECTKB;
     2616        else if ( ! stricmp( argv[0].strptr, "ENDSELECT")) lID =           SV_ENDSELECT;
     2617        else if ( ! stricmp( argv[0].strptr, "ERRORDURATION")) lID =       SV_ERRORDURATION;
     2618        else if ( ! stricmp( argv[0].strptr, "ERRORFREQ")) lID =           SV_ERRORFREQ;
     2619        else if ( ! stricmp( argv[0].strptr, "FIRSTSCROLLRATE")) lID =     SV_FIRSTSCROLLRATE;
     2620        else if ( ! stricmp( argv[0].strptr, "INSERTMODE")) lID =          SV_INSERTMODE;
     2621        else if ( ! stricmp( argv[0].strptr, "KBDALTERED")) lID =          SV_KBDALTERED;
     2622        else if ( ! stricmp( argv[0].strptr, "LOCKSTARTINPUT")) lID =      SV_LOCKSTARTINPUT;
     2623        else if ( ! stricmp( argv[0].strptr, "MENUROLLDOWNDELAY")) lID =   SV_MENUROLLDOWNDELAY;
     2624        else if ( ! stricmp( argv[0].strptr, "MENUROLLUPDELAY")) lID =     SV_MENUROLLUPDELAY;
     2625        else if ( ! stricmp( argv[0].strptr, "MONOICONS")) lID =           SV_MONOICONS;
     2626        else if ( ! stricmp( argv[0].strptr, "MOUSEPRESENT")) lID =        SV_MOUSEPRESENT;
     2627        else if ( ! stricmp( argv[0].strptr, "NOTEDURATION")) lID =        SV_NOTEDURATION;
     2628        else if ( ! stricmp( argv[0].strptr, "NOTEFREQ")) lID =            SV_NOTEFREQ;
     2629        else if ( ! stricmp( argv[0].strptr, "NUMBEREDLISTS")) lID =       SV_NUMBEREDLISTS;
     2630        else if ( ! stricmp( argv[0].strptr, "OPEN")) lID =                SV_OPEN;
     2631        else if ( ! stricmp( argv[0].strptr, "OPENKB")) lID =              SV_OPENKB;
     2632        else if ( ! stricmp( argv[0].strptr, "POINTERLEVEL")) lID =        SV_POINTERLEVEL;
     2633        else if ( ! stricmp( argv[0].strptr, "PRINTSCREEN")) lID =         SV_PRINTSCREEN;
     2634        else if ( ! stricmp( argv[0].strptr, "SCROLLRATE")) lID =          SV_SCROLLRATE;
     2635        else if ( ! stricmp( argv[0].strptr, "SELECTKB")) lID =            SV_SELECTKB;
     2636        else if ( ! stricmp( argv[0].strptr, "SETLIGHTS")) lID =           SV_SETLIGHTS;
     2637        else if ( ! stricmp( argv[0].strptr, "SINGLESELECT")) lID =        SV_SINGLESELECT;
     2638        else if ( ! stricmp( argv[0].strptr, "SWAPBUTTON")) lID =          SV_SWAPBUTTON;
     2639        else if ( ! stricmp( argv[0].strptr, "TASKLISTMOUSEACCESS")) lID = SV_TASKLISTMOUSEACCESS;
     2640        else if ( ! stricmp( argv[0].strptr, "TEXTEDIT")) lID =            SV_TEXTEDIT;
     2641        else if ( ! stricmp( argv[0].strptr, "TEXTEDITKB")) lID =          SV_TEXTEDITKB;
     2642        else if ( ! stricmp( argv[0].strptr, "TRACKRECTLEVEL")) lID =      SV_TRACKRECTLEVEL;
     2643        else if ( ! stricmp( argv[0].strptr, "WARNINGDURATION")) lID =     SV_WARNINGDURATION;
     2644        else if ( ! stricmp( argv[0].strptr, "WARNINGFREQ")) lID =         SV_WARNINGFREQ;
     2645    }
     2646    if ( lID < 0 ) return ( 40 );
     2647
     2648    lValue = WinQuerySysValue( HWND_DESKTOP, lID );
     2649    if ( lValue == 0 ) {
     2650        /* Not elegant but probably true if the function failed.  Anyway,
     2651         * we don't have a HAB so we can't really use WinGetLastError()...
     2652         */
     2653        WriteErrorCode( PMERR_PARAMETER_OUT_OF_RANGE, "WinQuerySysValue");
     2654        SaveResultString( prsResult, PSZ_ZERO, 1 );
     2655        return ( 0 );
     2656    }
     2657
     2658    // Return the value as the REXX return string
     2659    sprintf( szResult, "%d", lValue );
     2660    SaveResultString( prsResult, szResult, strlen(szResult) );
     2661
     2662    return ( 0 );
     2663}
     2664
     2665
     2666
    25282667// -------------------------------------------------------------------------
    25292668// INTERNAL FUNCTIONS
  • rxutilex/trunk/rxutilex.def

    r39 r40  
    11LIBRARY     RXUTILEX INITINSTANCE TERMINSTANCE
    22DATA        MULTIPLE NONSHARED
    3 DESCRIPTION '@#Alex Taylor:0.1.5#@##1## 9 Mar 2017 13:10:35      REINFORCE::::::@@Extended REXX Utility Functions'
     3DESCRIPTION '@#Alex Taylor:0.1.6#@##1## 29 Mar 2018 23:50:30     REINFORCE::::::@@Extended REXX Utility Functions'
    44
    55EXPORTS     Sys2LoadFuncs
     
    3131Sys2ReadLine
    3232Sys2BytesRemaining
     33Sys2QuerySysValue
     34
  • rxutilex/trunk/testlib.cmd

    r36 r40  
    4747    say info
    4848end
     49say
     50
     51say 'Current screen resolution:' Sys2QuerySysValue('CXSCREEN') Sys2QuerySysValue('CYSCREEN')
    4952
    5053call Sys2DropFuncs
Note: See TracChangeset for help on using the changeset viewer.