amiga-news ENGLISH VERSION
.
Links| Forum| Kommentare| News melden
.
Chat| Umfragen| Newsticker| Archiv
.

amiga-news.de Forum > Programmierung > Wo sind die Pens hin? [ - Suche - Neue Beiträge - Registrieren - Login - ]

-1- [ - Beitrag schreiben - ]

10.08.2014, 12:15 Uhr

softwarefailure
Posts: 37
Nutzer
Folgendes minimales Testprogramm auf einem nackten AmigaOS 3.1 System. Keine Patches, kein Bullshit, nur eine nackte OS 3.1 Installation:
C code:
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>

#include <intuition/intuition.h>
#include <intuition/screens.h>

#include <proto/dos.h>
#include <proto/intuition.h>

int main(int argc, char *argv[])
{
	struct Screen *scr;
	short sapens[1] = {~0};
	
	scr = OpenScreenTags(NULL,
		SA_ShowTitle, 0,
		SA_Depth, 8,
		SA_DisplayID, 0x29804,  // = 640x512, 8bit, native
		SA_Pens, sapens,
		SA_Quiet, 1,
		SA_Type, CUSTOMSCREEN,
		SA_SharePens, 1,
		TAG_DONE);

	Delay(50);
	
	printf("Total: %d Free: %d\n", (int) scr->ViewPort.ColorMap->Count, (int) scr->ViewPort.ColorMap->PalExtra->pe_NFree);
		
	CloseScreen(scr);	
	
	return 0;
}



Zu meiner großen Überraschung ist die Ausgabe folgendes:

code:
Total: 256 Free: 57


Wo sind da bitte die ganzen freien Pens hin? Auf dem gerade geöffneten Screen befindet sich nichts. Meinetwegen kann Intuition da vier Farben reservieren, aber den Rest möchte ich bitte zur freien Verfügung haben, um über ObtainBestPen() Pens entsprechend zu reservieren. Trotzdem sind hier nur noch 57 Pens frei. Ich habe es auch spaßeshalber mal unter OS3.9 probiert und auch da: 57 freie Pens.

Was läuft da falsch? Wie öffne ich einen planaren Screen, der möglichst viele freie Pens zum Reservieren hat? 57 freie Pens für einen 8bit Screen ist wohl ein schlechter Scherz des OS...

[ - Antworten - Zitieren - Direktlink - ]

10.08.2014, 19:30 Uhr

Thore
Posts: 2266
Nutzer
Gruselig.
Erstmal machst Du mal die 1 in den Klammern weg bei short[1].
Dann deklariere eine Intuition-Base.
Dann öffne die Intuition.Library bevor Du den Screen öffnest.
Dann schließe die Intuition-Library.
Dann gewöhne Dir jetzt schon an, Fehler auszuschließen mit Sicherheitsabfragen.

Ungefähr so:
C code:
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>

#include <intuition/intuition.h>
#include <intuition/screens.h>

#include <proto/dos.h>
#include <proto/intuition.h>

struct IntuitionBase *IntuitionBase = NULL;

int main(int argc, char *argv[])
{
	struct Screen *scr;
	short sapens[] = {~0};

    IntuitionBase = (struct IntuitionBase *)OpenLibrary("intuition.library",0L);
    if(IntuitionBase)
    {

	  scr = OpenScreenTags(NULL,
  		  SA_ShowTitle, 0,
  		  SA_Depth, 8,
  		  SA_DisplayID, 0x29804,  // = 640x512, 8bit, native
  		  SA_Pens, sapens,
  		  SA_Quiet, 1,
  		  SA_Type, CUSTOMSCREEN,
  		  SA_SharePens, 1,
  		  TAG_DONE);

      if(scr)
      {

  	  	Delay(50);

  	  	printf("Total: %d Free: %d\n", (int) scr->ViewPort.ColorMap->Count, (int) scr->ViewPort.ColorMap->PalExtra->pe_NFree);

	    CloseScreen(scr);
      }
      else printf("Konnte Screen nicht öffnen!\n");

      CloseLibrary(IntuitionBase);
    }
    else printf("Konnte Intuition-Lib nicht öffnen!\n");

	return 0;
}



Achja: Sollte er beim CloseLibrary meckern, einfach auf (struct Library *) casten, dann nimmt ers.

Wieviele Pens werden dann angezeigt?

[ Dieser Beitrag wurde von Thore am 10.08.2014 um 19:31 Uhr geändert. ]

[ Dieser Beitrag wurde von Thore am 10.08.2014 um 19:35 Uhr geändert. ]

[ - Antworten - Zitieren - Direktlink - ]

10.08.2014, 19:43 Uhr

thomas
Posts: 7649
Nutzer
@softwarefailure:

Was du vergessen hast auszugeben ist pe_SharableColors, da steht nämlich drin, wieviele Pens du wirklich hast.

Deine DisplayID ist 640x256 HAM, da hat die Palette halt nur 64 Farben. Passend zum Kommentar wäre 0x29024 korrekt.


--
Email: thomas-rapp@web.de
Home: thomas-rapp.homepage.t-online.de/

[ Dieser Beitrag wurde von thomas am 10.08.2014 um 20:03 Uhr geändert. ]

[ - Antworten - Zitieren - Direktlink - ]

10.08.2014, 19:44 Uhr

thomas
Posts: 7649
Nutzer
Zitat:
Original von Thore:
Gruselig.
Erstmal machst Du mal die 1 in den Klammern weg bei short[1].
Dann deklariere eine Intuition-Base.
Dann öffne die Intuition.Library bevor Du den Screen öffnest.
Dann schließe die Intuition-Library.


So ein Schwachsinn.

--
Email: thomas-rapp@web.de
Home: thomas-rapp.homepage.t-online.de/

[ - Antworten - Zitieren - Direktlink - ]

11.08.2014, 12:03 Uhr

softwarefailure
Posts: 37
Nutzer
@thomas:
Super, danke. Genau daran lag's.

[ - Antworten - Zitieren - Direktlink - ]

11.08.2014, 19:18 Uhr

Holger
Posts: 8037
Nutzer
Zitat:
Original von Thore:
Dann deklariere eine Intuition-Base.
Dann öffne die Intuition.Library bevor Du den Screen öffnest.
Dann schließe die Intuition-Library.

Ich hab noch nie verstanden, warum Amiga-Programmierer darauf bestehen, selbst trivialst-Beispielprogramme mit diesem ganzen manuellen Library-Management vollzukleistern, statt einfach -lauto zu verwenden. Was ist dadurch gewonnen?

--
Good coders do not comment. What was hard to write should be hard to read too.

[ Dieser Beitrag wurde von Holger am 11.08.2014 um 19:19 Uhr geändert. ]

[ - Antworten - Zitieren - Direktlink - ]

12.08.2014, 08:12 Uhr

Thore
Posts: 2266
Nutzer
@Holger
Kompatibilität mit anderen Compilern wäre zum Beispiel ein Vorteil. Weiß ja nicht, welchen Compiler er verwendet. Hat er den StormC 3, dann muss er die Libs manuell öffnen.

@Thomas
Schwachsinn ist es, das als Schwachsinn zu bezeichnen. Es ist Compiler-Abhängig, ob man die Lib öffnen muss, und der Thread-Ersteller hat keinen Hinweis auf einen Compiler geliefert. Bei gcc gehts, aber gerade bei vielen anderen 68k Compilern geht es eben nicht. Da Herr Thomas aber lieber "Schwachsinn" postet statt ein informatives "Bei gcc unter Verwendung von -lauto kann man das manuelle Öffnen der Standard Libs weglassen". Aber seis drum, es ist eben Deine Art.



[ Dieser Beitrag wurde von Thore am 12.08.2014 um 08:27 Uhr geändert. ]

[ - Antworten - Zitieren - Direktlink - ]

12.08.2014, 09:29 Uhr

thomas
Posts: 7649
Nutzer
@Thore:

Es geht bei allen 68k-Compilern und vor allem es geht auch mit PPC-Compilern auf OS4 und MorphOS und x86-Compilern auf AROS. Wer seine Programme portierbar machen möchte, überlässt das Öffnen der Libraries soweit möglich dem Compiler. Gerade im Hinblick auf OS4, wo das Öffnen der Library nicht ausreichend ist.

Schwachsinn ist dein Beitrag vor allem deshalb, weil er null und nichts zum Thema beiträgt, sondern eher nur verwirrt. Du hast noch nichtmal probiert, das Problem des Threaderstellers zu lösen. Stattdessen kommst du mit Off-Topic-Hinweisen, die wirklich nicht helfen.




--
Email: thomas-rapp@web.de
Home: thomas-rapp.homepage.t-online.de/

[ - Antworten - Zitieren - Direktlink - ]

12.08.2014, 10:34 Uhr

Thore
Posts: 2266
Nutzer
Obs mit StormC v3 funktioniert bezweifel ich einfach mal.

Es geht mir auch nicht um deine Inhalte, sondern um Deine Ausdrucksweise. Würde mir wünschen wenn Du sachlich ein Gegenkommentar bringen könntest, anstatt gleich auf Kindergartenniveau zu antworten.
Andere hier könnens doch auch.

[ - Antworten - Zitieren - Direktlink - ]

12.08.2014, 11:30 Uhr

softwarefailure
Posts: 37
Nutzer
@Thore:
Um ehrlich zu sein kommt "Schwachsinn" dem schon ziemlich nahe, was mir beim Lesen deines "Beitrags" durch den Kopf ging ;) Wenn ich etwas nicht brauche, dann sind das belehrende Kommentare von Anfängern, die einem gestandenen Amiga-Programmierer erstmal ein "Gruselig!" an den Kopf knallen und dann Gaga-Vorschläge unterbreiten... nichts für ungut... ach so, du hast übrigens vergessen die dos.library zu öffnen, für Delay() ... wie "gruselig"!!! ;-)

[ - Antworten - Zitieren - Direktlink - ]

12.08.2014, 11:53 Uhr

Thore
Posts: 2266
Nutzer
"Gruselig" finde ich den Programmierstil, nicht dich als Mensch, und es ist mir egal was ihr davon haltet. Ich hab Programmieren gelernt, wo die Compiler nicht alles im Vornherein geöffnet haben, und damals hat man noch Abfragen gemacht, ob etwas geklappt hat.

Aber bei gewissen Stilen wie die Leute hier miteinander umgehen, wundert mich es fast nicht mehr, wieso nur noch so wenige hier drin sind.

[ - Antworten - Zitieren - Direktlink - ]

12.08.2014, 17:51 Uhr

jolo
Posts: 107
Nutzer
Dass hier ein Begriff gebraucht wird ("Schwachsinn"), den man heute selbst in der Psychiatrie, dort wo er nämlich herstammt, nicht mehr verwendet, solltet auch ihr so klug sein, diesen nicht mehr zu verwenden.

Eine unüberlegte/fehlerhafte/unsinnige Handlung/Aussage mit Schwachsinn gleichzusetzen, entbehrt jeder Grundlage (um es gelinde auszudrücken).

Zudem, den Vorschlag 0x29024 als Monitor-ID herzunehmen, ist falsch (bezugnehmend auf die 640x512 Auflösung), da dies einer Auflösung von 1280x512 entsprechen würde.

Zitat:
die einem gestandenen Amiga-Programmierer

Hätte ein "gestandener Amiga Programmierer" sich die Frage nicht selber beantworten können?
--
Stupid mistakes are always made by others -
we only make unavoidable errors

[ - Antworten - Zitieren - Direktlink - ]

12.08.2014, 20:46 Uhr

Holger
Posts: 8037
Nutzer
Ein schönes praxisnahes Beispiel dafür, warum man keine „magischen Konstanten“, sondern die Bezeichner aus den #includes verwenden sollte. Ja, vor zwanzig Jahren konnten wir wahrscheinlich alle noch die Werte für die ModeID im Schlaf aufsagen. Aber schon damals gab es keinen wirklichen Grund, dies beim Leser des Programmcodes auch vorauszusetzen…
--
Good coders do not comment. What was hard to write should be hard to read too.

[ - Antworten - Zitieren - Direktlink - ]

12.08.2014, 22:20 Uhr

thomas
Posts: 7649
Nutzer
Zitat:
Original von Holger:
Good coders do not comment. What was hard to write should be hard to read too.


:D
--
Email: thomas-rapp@web.de
Home: thomas-rapp.homepage.t-online.de/

[ - Antworten - Zitieren - Direktlink - ]

13.08.2014, 17:10 Uhr

cgutjahr
Posts: 2617
[Administrator]
Zitat:
Original von Thore:
Aber bei gewissen Stilen wie die Leute hier miteinander umgehen, wundert mich es fast nicht mehr, wieso nur noch so wenige hier drin sind.

Mit Verlaub: du warst derjenige, der den Programmierstil eines anderen als "gruselig" bezeichnet hat - sich dann im Gegenzug zu beschweren, wenn jemand deinen Ansatz als "schwachsinnig" bezeichnet, schon ein bisschen verquer.


[ - Antworten - Zitieren - Direktlink - ]

14.08.2014, 01:22 Uhr

Tomas
Posts: 30
Nutzer
StormC 3.0 öffnet die Libraries natürlich auch automatisch.
Auf MorphOS bekomme ich Total: 256 Free: 245 ;-)

[ - Antworten - Zitieren - Direktlink - ]


-1- [ - Beitrag schreiben - ]


amiga-news.de Forum > Programmierung > Wo sind die Pens hin? [ - Suche - Neue Beiträge - Registrieren - Login - ]


.
Impressum | Datenschutzerklärung | Netiquette | Werbung | Kontakt
Copyright © 1997-2019 by amiga-news.de - alle Rechte vorbehalten.
.