PBOSL PB Libraries ab 4.30 nurnoch Includes

Ankündigungen PureBasic oder die Community betreffend.
DarkDragon
Beiträge: 6267
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

PBOSL PB Libraries ab 4.30 nurnoch Includes

Beitrag von DarkDragon »

Hallo,

Ein großer Teil der PureBasic OpenSource Libraries (Alle Tailbite Bibliotheken) wird ab der nächsten Version nurnoch als Include ausgeliefert, damit man nicht mit jeder Version von PureBasic die ganzen Libraries neu kompillieren muss. Außerdem wird die Lizenz geändert.

Wenn jemand der Bibliotheksautoren (PB3.94 Libraries werden wieder hinzugefügt) das hier liest kann er uns gerne Kontaktieren, falls ihm die Lizenzänderungen nicht gefallen und er seine Bibliothek lieber entfernen möchte oder derartiges.

MfG,
Daniel.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

Ja, ich hab was dagegen ... weniger wegen der Lizenz, vielmehr stoert
mich das Geschmiere. Also bitte entfernen, zumindest bis jemand es
neu und vor allem sauber schreibt. Danke.

Betrifft die CreateGadget Lib.
DarkDragon
Beiträge: 6267
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag von DarkDragon »

edel hat geschrieben:Ja, ich hab was dagegen ... weniger wegen der Lizenz, vielmehr stoert
mich das Geschmiere. Also bitte entfernen, zumindest bis jemand es
neu und vor allem sauber schreibt. Danke.

Betrifft die CreateGadget Lib.
Was meinst du genau mit Geschmiere?
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

wahrscheinlich, dass keiner seinen schlecht strukturierten code sehen soll...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
DarkDragon
Beiträge: 6267
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag von DarkDragon »

Kaeru Gaman hat geschrieben:wahrscheinlich, dass keiner seinen schlecht strukturierten code sehen soll...
Hmm... naja, da geht der doch noch (Hab schlimmere Codes gesehen, z.B. von T**as Instr***nts):

Code: Alles auswählen

;-----------------------------------------------------------------------------
;      (c) 2006 Sebastian S. aka edel & Thomas Schulz aka ts-soft
;
;     This library is free software; you can redistribute it and/or
;     modify it under the terms of the GNU Lesser General Public
;     License as published by the Free Software Foundation; either
;     version 2.1 of the License, Or (at your option) any later version.
;
;     This library is distributed in the hope that it will be useful,
;     but WITHOUT ANY WARRANTY; without even the implied warranty of
;     MERCHANTABILITY Or FITNESS For A PARTICULAR PURPOSE.  See the GNU
;     Lesser General Public License For more details.
;-----------------------------------------------------------------------------

!EXTRN _PB_Object_GetOrAllocateID@8
!EXTRN _PB_Gadget_RegisterGadget@16
!EXTRN _PB_Gadget_RegisterGadget_UNICODE@16
!EXTRN _PB_Gadget_Objects

CompilerIf Defined(PB_GadgetVT, #PB_Structure) = #False
Structure PB_GadgetVT
  GadgetType.l
  SizeOf.l
  GadgetCallback.l
  FreeGadget.l
  GetGadgetState.l
  SetGadgetState.l
  GetGadgetText.l
  SetGadgetText.l
  AddGadgetItem2.l
  AddGadgetItem3.l
  RemoveGadgetItem.l
  ClearGadgetItemList.l
  ResizeGadget.l
  CountGadgetItems.l
  GetGadgetItemState.l
  SetGadgetItemState.l
  GetGadgetItemText.l
  SetGadgetItemText.l
  OpenGadgetList2.l
  GadgetX.l
  GadgetY.l
  GadgetWidth.l
  GadgetHeight.l
  HideGadget.l
  AddGadgetColumn.l
  RemoveGadgetColumn.l
  GetGadgetAttribute.l
  SetGadgetAttribute.l
  GetGadgetItemAttribute2.l
  SetGadgetItemAttribute2.l
  SetGadgetColor.l
  GetGadgetColor.l
  SetGadgetItemColor2.l
  GetGadgetItemColor2.l
  SetGadgetItemData.l
  GetGadgetItemData.l
EndStructure
CompilerEndIf

CompilerIf Defined(PB_Gadget, #PB_Structure) = #False
Structure PB_Gadget
  Gadget.l
  *VT.PB_GadgetVT
  UserData.l
  OldCallback.l
  Daten.l[4]
EndStructure
CompilerEndIf

;GetGadgetParent
;
;                  Rueckgabe : Parent Handle
;
Procedure GetGadgetParent()
  !EXTRN _PB_Object_GetThreadMemory@4
  !EXTRN _PB_Gadget_Globals
  !MOV   Eax,[_PB_Gadget_Globals]
  !push  eax
  !call  _PB_Object_GetThreadMemory@4
  !MOV   Eax,[Eax]
  ProcedureReturn
  CreateGadgetList(0)
EndProcedure

Structure Gadget_Info
  OldCallback.l
  DestroyProc.l
  PBID.l
EndStructure

Procedure RegGadget_Callback(hwnd, msg, wparam, lparam)
  Protected *Gadget_Info.Gadget_Info = GetProp_(hwnd, "GadgetInfo")
  Protected OldProc = *Gadget_Info\OldCallback
  
  If msg = #WM_NCDESTROY
    If *Gadget_Info
      If *Gadget_Info\DestroyProc
        CallFunctionFast(*Gadget_Info\DestroyProc, *Gadget_Info\pbid)
      EndIf
    EndIf
    RemoveProp_(hwnd, "GadgetInfo")
    FreeMemory(*Gadget_Info)
  EndIf
  
  ProcedureReturn CallWindowProc_(OldProc, hwnd, msg, wparam, lparam)
EndProcedure


;RegisterGadget
;                hwnd.l              ; Handle des Controls
;                ID.l                ; PB_ID
;                DestroyProc.l=0     ; Proc zum aufraeumen , kann null sein
;                *vt.PB_GadgetVT = 0 ; Gadget VT , kann null sein
;                unicode             ; 1 = unicode , 0 = ascii
;                Rueckgabe  :  wenn ID = -1 / PB_Any =  PB_ID
;                              sonst Handle des Controls

Global PBOSL_CreateGadget_temphwnd.l
Global PBOSL_CreateGadget_tempid.l

Procedure RegisterGadget(hwnd.l, ID.l, DestroyProc.l , *vttemp.PB_GadgetVT ,unicode)
  Protected *Gadget_Info.Gadget_Info
  Protected OldCallback.l
  Protected *vt.PB_GadgetVT
  
  If ((hwnd = 0) Or (id < #PB_Any))
    ProcedureReturn 0
  EndIf
  
  *vt = AllocateMemory(SizeOf(PB_GadgetVT))
  If *vttemp <> 0
    CopyMemory(*vttemp,*vt,SizeOf(PB_GadgetVT))
  EndIf
  
  PBOSL_CreateGadget_temphwnd = hwnd
  PBOSL_CreateGadget_tempid   = Id
  
  !MOV   esi,dword[v_PBOSL_CreateGadget_tempid]
  !MOV   edi,[v_PBOSL_CreateGadget_temphwnd]
  !PUSH  dword[v_PBOSL_CreateGadget_tempid]
  !PUSH  dword [_PB_Gadget_Objects]   
  !CALL  _PB_Object_GetOrAllocateID@8 
  
  !PUSH  dword[p.p_vt]      ; vt 
  !PUSH  edi                ; hwnd 
  !PUSH  eax                ; *gadget
  !PUSH  esi                ; ID
  
  If Not unicode
    !CALL  _PB_Gadget_RegisterGadget@16
  Else
    !CALL  _PB_Gadget_RegisterGadget_UNICODE@16
  EndIf
  
  !mov   [p.v_hwnd],eax
  
  If DestroyProc
    
    *Gadget_Info = AllocateMemory(SizeOf(Gadget_Info))
    
    If id = #PB_Any
      *Gadget_Info\PBID = hwnd
    Else
      *Gadget_Info\PBID = ID
    EndIf   
    
    *Gadget_Info\DestroyProc = DestroyProc
    *Gadget_Info\OldCallback = SetWindowLong_(GadgetID(*Gadget_Info\PBID), #GWL_WNDPROC, @RegGadget_Callback())
    
    SetProp_(GadgetID(*Gadget_Info\PBID), "GadgetInfo", *Gadget_Info)
    
  EndIf
  
  ProcedureReturn hwnd
EndProcedure



; CreateGadget
;   Id.l        ; Gadget, kann auch #PB_Any sein!
;   ClassName.s ; Windows-Klassenname (muss Windows bekannt sein)
;   Text.s      ; ggf. Text/Ãœberschrift
;   Style.l     ; Stil
;   X.l, Y.l    ; linke, obere Ecke des Gadgets auf dem Fenster
;   DX.l, DY.l  ; Größe des Gadgets
;   Optional:
;     ExStyle.l       ; erweiterter Stil
;     DestroyProc.l   ; Procedure-Adresse, einer Procedure zum Aufräumen
;     *vt.PB_GadgetVT ; Pointer zu einer gefüllten Structurevariable mit GadgetFunktionen!
;
; Rückgabe: hWnd oder ID (bei #PB_Any)

ProcedureDLL CreateGadget(Id.l, ClassName.s, Text.s, Style.l, X.l, Y.l, CX.l, CY.l, ExStyle.l = 0, DestroyProc.l = 0, *vt.PB_GadgetVT = 0)
  Protected hwnd.l
  Protected Parent.l    = GetGadgetParent()
  Protected hInstance.l = GetModuleHandle_(0)
  
  hwnd = CreateWindowEx_(ExStyle, ClassName, Text, Style, X, Y, CX, CY, Parent, 0, hInstance, 0)
  SendMessage_(hWnd, #WM_SETFONT, GetGadgetFont(#PB_Default), 1);
  
  If hwnd = #False : ProcedureReturn #False : EndIf
  
  ProcedureReturn RegisterGadget(hwnd, ID, DestroyProc, *vt,0)
EndProcedure
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Code der für eine Lib geschrieben wurde ist ja auch nicht unbedingt geeignet
als Include.

Der globale Variablenscope der Lib wird zum globalen Variablenscope des
Sources. Meine RFile Lib ist OOP, als Include macht die auch keinen Sinn,
die Methoden sind nicht mehr gekapselt.

Also einfach als Include raushauen wird wohl nicht hinhauen :mrgreen:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
DarkDragon
Beiträge: 6267
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag von DarkDragon »

ts-soft hat geschrieben:Code der für eine Lib geschrieben wurde ist ja auch nicht unbedingt geeignet
als Include.

Der globale Variablenscope der Lib wird zum globalen Variablenscope des
Sources. Meine RFile Lib ist OOP, als Include macht die auch keinen Sinn,
die Methoden sind nicht mehr gekapselt.

Also einfach als Include raushauen wird wohl nicht hinhauen :mrgreen:
;-) Desshalb hab ich die letzte Woche alle Globalen/Shared Variablen mit PBOSL_LibraryName_* ersetzt.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

DarkDragon hat geschrieben:;-) Desshalb hab ich die letzte Woche alle Globalen/Shared Variablen mit PBOSL_LibraryName_* ersetzt.
Das hab ich mir gedacht / gehofft. Aber bei meiner Klasse reicht das auch
nicht. Die Methoden mit lauter ___ schreiben mag ich nicht, und bringts auch
nicht.
Aber es wird wohl das beste sein, bis PB vielleicht mal sowas von Hause
kann. Ich hab mir ja schon vor langer Zeit div. Includes angelegt, statt Libs
draus zu machen.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
DarkDragon
Beiträge: 6267
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag von DarkDragon »

ts-soft hat geschrieben:
DarkDragon hat geschrieben:;-) Desshalb hab ich die letzte Woche alle Globalen/Shared Variablen mit PBOSL_LibraryName_* ersetzt.
Das hab ich mir gedacht / gehofft. Aber bei meiner Klasse reicht das auch
nicht. Die Methoden mit lauter ___ schreiben mag ich nicht, und bringts auch
nicht.
Die Methoden sind auch egal. Ich glaube niemand wird deine RFile... Methoden jemals neu deklarieren wenn er die Includes benutzt.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Wenn Du möchtest kannste meine SQLite3 Include mit aufnehmen:
http://www.purebasic.fr/english/viewtop ... 368#260368

Beispiele sind da im Thread verstreut :wink:

Hab alle Beispiele auch mit 64-Bit getestet, und merkwürdiger Weise
funktioniert das sogar :mrgreen:

Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Antworten