• Die korrekte Variante wäre wohl, sich vom GenSystem den DefaultScreen oder GSYI_screenComp geben zu lassen und von dem dann den Videotreiber…

    pcgeos/TechDocs/Markdown/Objects/osysobj.md at master · bluewaysw/pcgeos
    #FreeGEOS source codes. The offical home of the PC/GEOS operating system technology. For personal computing fans. For all developers and assembly lovers. For…
    github.com

    Keine Ahnung, ob es auch einfacher geht.

    There are two rules in life:
    1. Never give out all of the information.

  • Den Handle für den Videotreiber sollte man dann zusammen mit dieser Funktion nutzen können:

    extern DriverInfoStruct * /*XXX*/
    _pascal GeodeInfoDriver(GeodeHandle gh);


    In der Datei driver.h gibt es übrigens auch noch eine Funktion namens „GeodeGetDefaultDriver“ samt enum „GeodeDefaultDriverType“ - ggf. liefert die Dir auch einfach den aktuellen Treiber…


    typedef enum /* word */ {
    GDDT_FILE_SYSTEM=0,
    GDDT_KEYBOARD=2,
    GDDT_MOUSE=4,
    GDDT_VIDEO=6,
    GDDT_MEMORY_VIDEO=8,
    GDDT_POWER_MANAGEMENT=10,
    GDDT_TASK=12
    } GeodeDefaultDriverType;

    extern GeodeHandle /*XXX*/
    _pascal GeodeGetDefaultDriver(GeodeDefaultDriverType type);

    There are two rules in life:
    1. Never give out all of the information.

  • I think this method was used by John Howard to set the minimum resolution, width to 800, in the Spider card game. It is then possible to play the game in 800x480 and above. I think John's intention was to use 800x600, as the game works at its best in that resolution. The card game will hint you with a message that it is not possible to play in VGA (640x480).

  • Could it be that John doesn’t query the driver at all, but is only using a hint?


    @object GenViewClass SpiderView = {

    HINT_MINIMUM_SIZE = {
    SST_PIXELS | TABLE_WIDTH,
    SST_PIXELS | TABLE_HEIGHT,
    0 };
    }

    There are two rules in life:
    1. Never give out all of the information.

  • No… there’s some more code:

    @method SpiderProcessClass, MSG_GEN_PROCESS_OPEN_APPLICATION
    {
    DisplayScheme displayScheme;
    byte displaySize;
    Boolean initError;
    ColorQuad tableColor;


    /* make sure the screen res is at least 800x600 */
    @call application::MSG_GEN_APPLICATION_GET_DISPLAY_SCHEME(&displayScheme);
    displaySize = (displayScheme.DS_displayType & DT_DISP_SIZE)
    >> DT_DISP_SIZE_OFFSET;
    if (displaySize <= DS_STANDARD) {
    UserStandardDialogOptr(0, 0, 0, 0,
    @TooSmallString,
    ((CDT_NOTIFICATION << CDBF_DIALOG_TYPE_OFFSET) |
    (GIT_NOTIFICATION << CDBF_INTERACTION_TYPE_OFFSET)));
    return;
    }

    There are two rules in life:
    1. Never give out all of the information.

  • I can play the Spider game on my Android phone in 848x480, so it seems that the width is mandatory, but not the height? You are right that the screen is optimal at 800x600 and above. In my phone the bottom is chopped off, but the game is still playable.

  • Das liefert leider keine genaue Werte...

    Code
    DisplaySize       etype           byte
    DS_TINY            enum    DisplaySize            ;tiny screens: CGA, 256x320
    DS_STANDARD        enum    DisplaySize            ;standard screens: EGA,VGA,HGC,MCGA
    DS_LARGE           enum    DisplaySize            ;large screens: 800x600 SVGA
    DS_HUGE            enum    DisplaySize            ;huge screens
  • Schau mal ob du vom GenField oder GenSytem die visBounds lesen kannst. Das sollte dann die richtige Größe sein.

    Ansonsten: in R-BASIC hat das jemand mal etwa so gemacht: App Maximieren und dann die Größe des Primary auslesen. Ich hab auch mal soetwas in der Art gemacht (in R-BASIC), muss ich mal Suchen ,wenn Interesse besteht.

    Wenn dein GenPrimary "fullScreen" ist sollte das prinzipiell auch gehen (MSG_VIS_GET_BOUNDS <- ja, auch wenn das Primary ein GenObject ist unterstützt es alle VIS_ Messages).

    Rainer

    Es gibt 10 Arten von Menschen - die einen wissen was binär ist, die anderen nicht.

  • Alternativ könntest Du noch das Programm auf Fullscreen und „entirely on screen“ stellen und dann das hier aufrufen:

    void WinGetWinScreenBounds(
    WindowHandle win,
    Rectangle * bounds);

    Das machen scheinbar die Bildschirmschoner, um die Bildschirmauflösung zu bestimmen. (Ggf. werden dann noch die „Deko-Elemente“, wie z.B. die Menüleiste oder die Taskbar, abgezogen … aber Du solltest die tatsächlich nutzbare Auflösung bekommen.)

    There are two rules in life:
    1. Never give out all of the information.

  • Hallo zusammen

    Ich glaube, es ist viel einfacher als gedacht... Ich kann einfach mit MSG_VIS_GET_BOUNDS die Anwendung befragen... Ob das so wohl gedacht ist?

    Code
     Rectangle bounds;
     @call application::MSG_VIS_GET_BOUNDS(&bounds);


    Das ist die komplette Test-Funktion:

    Edited once, last by bolle732 (August 1, 2024 at 9:52 AM).

  • bolle732 August 1, 2024 at 12:04 AM

    Changed the title of the thread from “Graifk Auflösung” to “Grafik Auflösung”.
  • Was mich noch wunder nähme ist, welche Werte man unter dem Anfänger-Modus erhält. Wenn es die gleichen sind, dann sind das Werte vom GenScreen, ansonsten vom GenField. Gibt es den Anfänger-Modus eigentlich im FreeGEOS, analog zur 1.0er oder dem GlobalPC.

    Habe hierzu mal ein Test-Progrämmchen anghehängt: videotest.zip