Page 1 of 3
Tailbite community effort
Posted: Thu Aug 17, 2006 5:02 am
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.
Posted: Thu Aug 17, 2006 5:05 am
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.
Posted: Thu Aug 17, 2006 8:03 am
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.
Posted: Thu Aug 17, 2006 8:08 am
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.
Posted: Thu Aug 17, 2006 9:26 am
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.
Posted: Thu Aug 17, 2006 11:25 am
by gnozal
Good idea, but my last ASM experience was on Commodore VC-20 (6502 8 bits chip) ...
We need some ASM + PB internals gurus.
Posted: Thu Aug 17, 2006 12:39 pm
by DarkDragon
gnozal wrote:Good idea, but my last ASM experience was on Commodore VC-20 (6502 8 bits chip) ...
We need some ASM + PB internals gurus.
Someone like remi_meier

!
Posted: Thu Aug 17, 2006 2:03 pm
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!

Posted: Thu Aug 17, 2006 2:51 pm
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
;-
;-
Posted: Fri Aug 18, 2006 10:35 pm
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.
Posted: Fri Aug 18, 2006 10:44 pm
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)
Posted: Fri Aug 18, 2006 10:59 pm
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.
Posted: Sat Aug 19, 2006 1:00 am
by Dare
Okay,
First, thanks mskuma! That is great and really appreciated!
So we have a website if needed

.
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).
Posted: Sat Aug 19, 2006 6:14 am
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.
Posted: Tue Aug 22, 2006 2:05 pm
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 ...

..

...

... 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?