<< Lokalisierung
>> Pragmas

Wie erhält man einen Zeiger auf das Fenster einer Konsole?

Die folgende Funktion liefert den Window-Zeiger eines CON-Fensters. Sie kann unter allen Versionen des Amiga-OS ausgeführt werden.

  struct Window *getConWindowPtr(BPTR fh)
  {
    struct Window *w;
    struct FileHandle *cfh;
    struct StandardPacket *sp;
    struct InfoData *id;
    struct MsgPort *mp;

    w = NULL;

    if ((cfh = BADDR(fh))->fh_Type != NULL) {
      if (sp = AllocMem(sizeof (struct StandardPacket),
                       MEMF_PUBLIC | MEMF_CLEAR)) {
        if (id = AllocMem(sizeof (struct InfoData),
                         MEMF_PUBLIC | MEMF_CLEAR)) {
          if (mp = CreatePort(NULL, 0)) {
            sp->sp_Msg.mn_Node.ln_Name = (char *) &sp->sp_Pkt;
            sp->sp_Pkt.dp_Link         = &sp->sp_Msg;
            sp->sp_Pkt.dp_Port         = mp;
            sp->sp_Pkt.dp_Type         = ACTION_DISK_INFO;
            sp->sp_Pkt.dp_Arg1         = MKBADDR(id);

            PutMsg(cfh->fh_Type, &sp->sp_Msg);
            (void) WaitPort(mp);
            (void) GetMsg(mp);

            if (sp->sp_Pkt.dp_Res1)
              w = (struct Window *) id->id_VolumeNode;

            DeletePort(mp);
          }
          FreeMem(id, sizeof (struct InfoData));
        }
        FreeMem(sp, sizeof (struct StandardPacket));
      }
    }

    return w;
  }

Anmerkungen:

Weitere Informationen finden Sie auf den Seiten 273, 276, 435, 463, 485 und 629 im "Amiga Guru Book" (siehe Abschnitt Was ist die beste Dokumentation für Programmierer?).

Ralph Babel, rbabel@babylon.pfm-mainz.de



<< Lokalisierung >> Pragmas