Tailbite community effort

For everything that's not in any way related to PureBasic. General chat etc...
Dare
Addict
Addict
Posts: 1965
Joined: Mon May 29, 2006 1:01 am
Location: Outback

Tailbite community effort

Post by Dare »

I would guess there is a huge amount of expectation for (and perhaps pressure on) El_Choni to finish TailBite for 4. As El_Choni is just a regular user like the rest of us, perhaps we as a community can assist with the completion of TailBite for version 4.

I am thinking of a real open-source project.

To do this would need, I think:
  • A website that can be set up as a "forge".
    A way the project team can communicate (perhaps on the above site).
    A project leader, preferably someone who has:
    • Done this sort of thing before.
      The requisite people skills.
      Sufficient technical skills to know what is what.
    A group of people with:
    • Willingness to participate.
      Skills to productively participate.
      Ability to be a team player.
    A game plan with basic and perhaps secondary objectives.
    And it would be useful, El_Choni to act as a mentor (sort of Torvalds of the project).
I believe this is pretty important as currently there is no way to create a PureBasic lib or a static lib from PureBasic code (tranmission to Fred: This is a weak spot that PureBasic itself should perhaps address in a coming release).

Is anyone else willing to participate?

If so, please post here and advise what "resources" you can bring to the project. Eg: Website; set-up website in a forgelike (CVS?) way; programming skills; cyber-coffee-maker-and-pizza-fetcher; OS skills (linux, macos, windows) and etc.
Dare2 cut down to size
Dare
Addict
Addict
Posts: 1965
Joined: Mon May 29, 2006 1:01 am
Location: Outback

Post by Dare »

To kick off:

I am willing to participate.

I have no skills or experience in community efforts of this type.
I have pretty ordinary coding skills.

I can bring willingness to work to the project.
I could do some of the dog work.

I would understand if this was considered more a liability than an asset and will not be offended if a team decided my contribution was more trouble than worth. :)

But with or without me, I would really like to see this happen!


Edit:

If we can do something as significant (to the community) as this, then we will also have set up a process that would allow for other useful community-based and open-source projects.
Dare2 cut down to size
rob6523
User
User
Posts: 59
Joined: Sat Sep 25, 2004 2:02 pm
Location: Netherlands (Ophemert)
Contact:

Post by rob6523 »

Very good initiative!

I'm in.

Not that good in assembly but if I can help I will.

As you can read in the TailByte thread I called upon people and El_Choni to help with TailByte.
It would also be of help if El_Choni could react and state his current problem(s) for this community is great and for sure there will be someone who can help with any specific problem.

Rob.
User avatar
netmaestro
PureBasic Bullfrog
PureBasic Bullfrog
Posts: 8451
Joined: Wed Jul 06, 2005 5:42 am
Location: Fort Nelson, BC, Canada

Post by netmaestro »

Tailbite is a very difficult project and, sad to say, I don't believe my skill level is up to the task. El_Choni is one brilliant coder, and that's a fact. But, I hope others will volunteer.
BERESHEIT
mskuma
Enthusiast
Enthusiast
Posts: 573
Joined: Sat Dec 03, 2005 1:31 am
Location: Australia

Post by mskuma »

I think this is a good idea - but.. isn't it time to have this function built-into the PB IDE/compiler as a bonafide feature & not as an add-on? If it's never gonna happen then there's no choice, but I'd like to see an equal push for getting this in as a real feature. That is, with the blessing and expertise/support of Fred et al since it sounds like a very complicated project.
gnozal
PureBasic Expert
PureBasic Expert
Posts: 4229
Joined: Sat Apr 26, 2003 8:27 am
Location: Strasbourg / France
Contact:

Post by gnozal »

Good idea, but my last ASM experience was on Commodore VC-20 (6502 8 bits chip) ... :oops:
We need some ASM + PB internals gurus.
For free libraries and tools, visit my web site (also home of jaPBe V3 and PureFORM).
DarkDragon
Addict
Addict
Posts: 2344
Joined: Mon Jun 02, 2003 9:16 am
Location: Germany
Contact:

Post by DarkDragon »

gnozal wrote:Good idea, but my last ASM experience was on Commodore VC-20 (6502 8 bits chip) ... :oops:
We need some ASM + PB internals gurus.
Someone like remi_meier :D !
bye,
Daniel
srod
PureBasic Expert
PureBasic Expert
Posts: 10589
Joined: Wed Oct 29, 2003 4:35 pm
Location: Beyond the pale...

Post by srod »

Good idea, but as others have also admitted, my skill and knowledge would simply not be up to the job.

Anyhow, hasn't El-Choni already released the source - at least to earlier versions?

Must admit that I've never really understood why it is that there is not an option for PB to create normal coff object files and indeed link with them through, say, options in the ide? It's probably a case that I don't know enough about object files and such like though! :)
I may look like a mule, but I'm not a complete ass.
User avatar
Flype
Addict
Addict
Posts: 1542
Joined: Tue Jul 22, 2003 5:02 pm
Location: In a long distant galaxy

Post by Flype »

Yes, i agree.

Compiling libs should be an option in the compiler options panel :

- Windows GUI
- Windows Console
- Windows DLL
- PureBasic Resident
- PureBasic UserLibrary

Maybe some of you might be interested to look at this 'PureLibraries Explorer' (quickly made just for fun) :

Code: Select all

;- 
;- PureLibraries Explorer
;- flype, 2006
;- 

EnableExplicit

;-
;-

Macro PeekA(x)
  PeekS(x, -1, #PB_Ascii)
EndMacro
Macro PeekU(x)
  PeekS(x, -1, #PB_Unicode)
EndMacro

;-
;-

Enumeration ; SizeOf
  #LByte = SizeOf(Byte)
  #LWord = SizeOf(Word)
  #LLong = SizeOf(Long)
EndEnumeration
Enumeration ; #ID_
  #ID_PURE = 'PURE' 
  #ID_RES3 = 'RES3'
  #ID_RES4 = 'RES4'
  #ID_LIB3 = 'LIB3'
  #ID_LIB4 = 'LIB4'
  #ID_DAT1 = 'DAT1' 
  #ID_EDLL = 'EDLL'
  #ID_ARCH = $0A3E686372613C21
EndEnumeration

Structure CHUNK 
  StructureUnion 
    Chunk64.q 
    Chunk32.LARGE_INTEGER 
  EndStructureUnion 
  ChunkName.l 
  ChunkData.Byte[0] 
EndStructure 
Structure LIB3FUNC 
  name.s 
  help.s 
  nArg.l 
EndStructure  
Structure LIB3 
  name.s 
  help.s 
  nFuncs.l 
  nSysLibs.l 
  nPureLibs.l 
  SysLibs.s[255] 
  PureLibs.s[255] 
  func.LIB3FUNC[255] 
EndStructure

;-
;-

Procedure.l arch(*addr.CHUNK)
  
  Debug "ARCH"
  
EndProcedure
Procedure.l res3(*addr.CHUNK)
  
  Debug "RES3"
  
EndProcedure
Procedure.l res4(*addr.CHUNK)
  
  Debug "RES4"
  
EndProcedure
Procedure.l lib3(*addr.CHUNK)
  
  Protected i.l, x.LIB3
  
  ;- Header
  
  *addr  = *addr\ChunkData + #LLong
  x\name = PeekA(*addr)
  *addr  + Len(x\name) + #LByte + #LByte
  
  ;- System Libs
  
  x\nSysLibs = PeekB(*addr) : *addr + #LByte
  
  If x\nSysLibs
    For i = 0 To x\nSysLibs - 1
      x\SysLibs[i] = PeekA(*addr) : *addr + Len(x\SysLibs[i]) + #LByte
    Next
  EndIf
  
  *addr + #LByte
  
  ;- Inline Help
  
  x\help = PeekA(*addr) : *addr + Len(x\help) + #LByte
  
  ;- PureBasic Libs
  
  x\nPureLibs = PeekB(*addr) : *addr + #LByte
  
  If x\nPureLibs
    For i = 0 To x\nPureLibs - 1
      x\PureLibs[i] = PeekA(*addr) : *addr + Len(x\PureLibs[i]) + #LByte
    Next
  EndIf
  
  ;- Functions 
  
  i = 0
  While *addr\Chunk32\lowpart <> #ID_PURE And *addr\ChunkName <> #ID_DAT1
    x\func[i]\name = PeekA(*addr) : *addr + #LByte + Len(x\func[i]\name)
    x\func[i]\nArg = PeekB(*addr) : *addr + #LByte : *addr + (x\func[i]\nArg * #LByte) + #LLong
    x\func[i]\help = PeekA(*addr) : *addr + #LByte + Len(x\func[i]\help)
    i + 1
  Wend
  x\nFuncs = i
  
  ;- Populate the TreeGadget
  
  AddGadgetItem(0, -1, x\name, #Null, 0)
  AddGadgetItem(0, -1, "Help File: " + x\help, #Null, 1)
  
  AddGadgetItem(0, -1, "SystemLibs (" + Str(x\nSysLibs) + ")", #Null, 1)
  If x\nSysLibs
    For i = 0 To x\nSysLibs - 1
      AddGadgetItem(0, -1, x\SysLibs[i], #Null, 2)
    Next
  Else
    AddGadgetItem(0, -1, "None", #Null, 2)
  EndIf
  
  AddGadgetItem(0, -1, "PureLibs (" + Str(x\nPureLibs) + ")", #Null, 1)
  If x\nPureLibs
    For i = 0 To x\nPureLibs - 1
      AddGadgetItem(0, -1, x\PureLibs[i], #Null, 2)
    Next
  Else
    AddGadgetItem(0, -1, "None", #Null, 2)
  EndIf
  
  AddGadgetItem(0, -1, "Functions (" + Str(x\nFuncs) + ")", #Null, 1)
  If x\nFuncs
    For i = 0 To x\nFuncs - 1
      If x\func[i]\help
        AddGadgetItem(0, -1, x\func[i]\name + x\func[i]\help, #Null, 2)
      EndIf
    Next
  Else
    AddGadgetItem(0, -1, "None", #Null, 2)
  EndIf
  
  AddGadgetItem(0, -1, "Hidden Functions", #Null, 1)
  For i = 0 To x\nFuncs - 1
    If Not x\func[i]\help
      AddGadgetItem(0, -1, x\func[i]\name, #Null, 2)
    EndIf
  Next
  
  ;-
  
EndProcedure
Procedure.l lib4(*addr.CHUNK)
  
  Debug "LIB4"
  
EndProcedure
Procedure.l edll(*addr.CHUNK)
  
  Debug "EDLL"
  
EndProcedure
Procedure.l pure(*addr.CHUNK)
  
  If *addr\Chunk64 = #ID_ARCH 
    arch(*addr) 
  Else 
    If *addr\Chunk32\lowpart = #ID_PURE 
      If *addr\Chunk32\highpart = #ID_EDLL 
        edll(*addr) 
      Else 
        Select *addr\ChunkName 
          Case #ID_RES3: res3(*addr) 
          Case #ID_RES4: res4(*addr) 
          Case #ID_LIB3: lib3(*addr) 
          Case #ID_LIB4: lib4(*addr) 
        EndSelect 
      EndIf 
    EndIf 
  EndIf 
  
EndProcedure 
Procedure.l open(fileName.s)
  
  Protected id.l, *addr
  
  id = ReadFile(#PB_Any, fileName)
  
  If id
    *addr = AllocateMemory(Lof(id))
    If *addr
      If ReadData(id, *addr, Lof(id))
        pure(*addr)
      EndIf
      FreeMemory(*addr)
    EndIf
    CloseFile(id)
  EndIf
  
EndProcedure
Procedure.l enum(pathName.s)
  
  Protected id.l = ExamineDirectory(#PB_Any, pathName, "*.*")
  
  While NextDirectoryEntry(id)
    Select DirectoryEntryType(id)
      Case #PB_DirectoryEntry_File
        open(pathName + DirectoryEntryName(id))
      Case #PB_DirectoryEntry_Directory
        Select DirectoryEntryName(id)
          Case ".", ".." 
            ; do nothing 
          Default
            enum(pathName + DirectoryEntryName(id) + "\")
        EndSelect
    EndSelect
  Wend
  
EndProcedure

;-
;-

If OpenWindow(0, 0, 0, 640, 480, "PureLibraries Explorer", #PB_Window_ScreenCentered|#PB_Window_SystemMenu)
  
  If CreateGadgetList(WindowID(0))
    TreeGadget(0, 5, 5, 630, 470)
  EndIf
  
  enum(#PB_Compiler_Home + "PureLibraries\")
  
  Repeat
    Select WaitWindowEvent()
      Case #PB_Event_CloseWindow
        Break
    EndSelect
  ForEver
  
EndIf

;-
;-
No programming language is perfect. There is not even a single best language.
There are only languages well suited or perhaps poorly suited for particular purposes. Herbert Mayer
mskuma
Enthusiast
Enthusiast
Posts: 573
Joined: Sat Dec 03, 2005 1:31 am
Location: Australia

Post by mskuma »

Dare, I'd be willing to contribute a web site - either a sub-domain of my personal site, or establish another hosted site if a particular domain name or other service was preferred.
User avatar
Rescator
Addict
Addict
Posts: 1769
Joined: Sat Feb 19, 2005 5:05 pm
Location: Norway

Post by Rescator »

Flype wrote:Compiling libs should be an option in the compiler options panel :

- Windows GUI
- Windows Console
- Windows DLL
- PureBasic Resident
- PureBasic UserLibrary
I'm pretty sure (at least I hope so) that this is in Fred's private "wishlist" of features :)

Hey Fred, a long time a go you asked what I liked about AmigaE.
I sad that mostly it was because if was easy, tight small binaries (just like PB),
but I forgot to mention it was very easy to make AmigaE libs (modules)
There was even a very simple (yet very usefull) build like tool that allowed easy "updating/recompiling" of modules if their source had changed)
User avatar
netmaestro
PureBasic Bullfrog
PureBasic Bullfrog
Posts: 8451
Joined: Wed Jul 06, 2005 5:42 am
Location: Fort Nelson, BC, Canada

Post by netmaestro »

I remember a post a few months back, where someone asked Fred directly if he was planning to make library compilation for PureBasic code a native feature and he said no. I can't find the thread now but it's buried in these forums somewhere.
BERESHEIT
Dare
Addict
Addict
Posts: 1965
Joined: Mon May 29, 2006 1:01 am
Location: Outback

Post by Dare »

Okay,

First, thanks mskuma! That is great and really appreciated!

So we have a website if needed 8) .

We also have a bunch of us who would like to do this or see this happen but nobody yet who can really contribute in a leading role. :?

So we need .. what?

Some sort of versioning system? Would something as simple as a forum, with successive posts showing latest development work? One topic per sub-section?

We need someone to co-ordinate the effort.

We need someone who understands enough about TailBite overall to give guidance (El_Choni, is this you? :))

We need some coff (perhaps elf also?) knowledge. There are sufficient docs re this, and TailBite sources exist (v3.94 and v4.00) so perhaps we can manage here with some learning.

We need coders. With this, provided we get an end result does it matter if it is not cool and awesomely clever, as long as it works?

Also with the "someones" we need, one person can be several someones :) or have a couple of roles. * hopeful *


(BTW, re netmaestro's post above, I also recall Fred advising this was not something planned. :( )


BTW again: How hard is it to capture ASM, and resubmit again, asking for an .obj (.o, .a, whatever) to be created? Would this lead to dependency issues if linked in via import? Surely not (but maybe if linked into an externally produced app).
Dare2 cut down to size
localmotion34
Enthusiast
Enthusiast
Posts: 665
Joined: Fri Sep 12, 2003 10:40 pm
Location: Tallahassee, Florida

Post by localmotion34 »

After spending weeks and weeks learning how to crack in order to learn how to protect my own software, ive gotten pretty good at reversing, debugging, and finding errors.

i can debug, watch, and troubleshoot stuff really well at the ASM and machine level.

i cant quite fully code in ASM, but ill do what i can to get an error-free Tailbite.

it bites not having tailbite.

Code: Select all

!.WHILE status != dwPassedOut
! Invoke AllocateDrink, dwBeerAmount
!MOV Mug, Beer
!Invoke Drink, Mug, dwBeerAmount
!.endw
Dare
Addict
Addict
Posts: 1965
Joined: Mon May 29, 2006 1:01 am
Location: Outback

Post by Dare »

Heya localmotion34,

Excellent.

Okay, at this point I don't have a clue as to how to proceed. I feel a bit like a virgin groom on his wedding night. "Gee honey, I hope you know what to do because I sure don't ... :idea: .. :shock: ... :? ... ummm, maybe I don't hope that after all. Let's just mess around and I'm sure something will come up."

So, who wants to mess around with this and see what comes up? Worst that happens is we end up blushing a little, but also get a little experienced and are a little more clued up about coff, etc, the next time around.

We could take mskuma up on his great offer. We could use a forum as a CSV and have topics per section of code. Not fantastic, but "withdrawing" a section is as simple as copying and "returning" is just a paste, and if two do something to a piece of code then it will quickly be apparent. Also people are hopefully communicating.

Would that work, do you think, as a basis?
Dare2 cut down to size
Post Reply