A long list

Got an idea for enhancing PureBasic? New command(s) you'd like to see?
GPI
PureBasic Expert
PureBasic Expert
Posts: 1394
Joined: Fri Apr 25, 2003 6:41 pm

A long list

Post by GPI »

I read the manual, i a create a little list full of suggestions:



* New Variable-Types!
LongLongs .ll, Double .d, Unsigned .ub, .uw, .ul, .ull

* DefType.w VariableName
Maybe a alias "Var.w VariableName" is usefull

* ReDim Name.Typ()
Same as dim, but don't clear the array

* Protected
I know this command as "Local". Maybe a alias is usefull

* DrawText([x,y,]Text$[,color[,FontId])
* GetDrawingFont() is missing
* GetBackColor() is missing
* GetDrawingMode() is missing
* GetFrontColor() is missing
* LineTo(x,y[,color]) - Draw a line from the last point (Line/LineXY/Plot/Locate)
* BackColor(R,G,B) or Backcolor(RGB)
* FrontColor(R,G,B) or FrontColor(RGB)
* FillArea(x,y,StopColor[,FillColor])
When Stopcolor=-1 the fill command should stop on any color which is diffrent the color under the start-point. (like every Fill-Command in any Paint-Program)
* TextHeight(Text$) is missing
* CDAudioLength([CDId])
* CDAudioName([CDid])
* CDAudioStatus([CDId]) - btw. why not called CDAudioState()?
* CDAudioTrackLength([CDId,]TrackNumber)
* CDAudioTrackSeconds([CDId])
* CDAudioTracks([CDId])
* EjectCDAudio([CDID,]Status)
* PauseCDAudio([CDId])
* PlayCDAudio([CDId,]StartTrack,EndTrack)
* ResumeCDAudio([CDID])
* StopCDAudio([CDiD])
* GetCurrentCDAudio() id missing
* FileSeek([#File,]NewPos)
* Loc([#File])
* Lof([#File])
* ReadByte([#File])
* ReadData([#File,]*Membuffer,Length)
* ReadFloat([#File])
* ReadLong([#File])
* ReadString([#File])
* ReadWord([#File])
* GetCurrentFile() is missing
* WriteByte([#File,]Byte)
* WriteData([#File,]*Membuffer,Length)
* WriteFloat([#File,]Float)
* WriteString([#File,]String)
* WriteStringN([#File,]StringN)
* WriteWord([#File,]Word)
* DirectoryEntryAttributes([#Dir])
* DirectoryEntryName([#Dir])
* DirectoryEntrySize([#Dir])
* DirectoryEntryDate([#Dir]) is missing
* GetFileDate(File$) is missing
* SetFileDate(File$,Date) is missing
* GetFileAttribute(File$) is missing
* SetFileAttribute(File$,Attribute) is missing
(And the Constants: #PB_FileAttribute_Archive/Hidden/ReadOnly/System/Directory)
* GetCurrentDirectory() is missing
* NextDirectoryEntry([#Dir])
* FontId([#Font])
* GetCurrentFont() is missing
* CheckBoxGadget()
I miss a flag (#PB_CheckBox_Set)
* EditorGadget(#Gadget, x, y, width, Height[,text$])
* GetGadgetAttribute()
I miss a #PB_Gadget_Hidden, #PB_Gadget_Active, #PB_Gadget_Disabled
* OptionGadget(#Gadget, x, y, width, height, Text$[,flag])
I miss a flag #PB_OptionGadget_Set)
* ProgressBarGadget(#Gadget, x, y, Breite, Höhe, Minimum, Maximum [,State, Flags])
* CaptureImage(#Image,x,y,w,h) - Grab from StartDrawing()
* ImageDepth([#Image])
* ImageHeight([#Image])
* ImageID([#Image])
* ImageOutput([#Image])
* ImageWidth([#Image])
* GetCurrentImage() is missing
* UseGifImageDecode/Encoder is missing(Gif is free! No patents in japan,europe and USA any more!)
* ExamineJoystick() - Return the count of allwayable Joysticks (and please-support of more than on Joysticks!)
* JoystickAxis(#Joy,Axis) is missing
And the Constants #PB_Joystic_AxisX/AxisY/AxisU/AxisV/AxisR/AxisZ)
* JoystickAvaiableAxis(#Joy) is missing
* JoystickAxisX([#Joy])
* JoystickAxisY([#Joy])
* JoyStickButtons([#Joy])
* JoyStickAvailableButtons(#Joy) is missing
* JoystickMapButtons(#Joy) - Return a long, Bit0=first button, Bit1=second button ...
* LibraryFunctionAddress([#Lib])
* LibraryFunctionName([#lib])
* NextLibtatyFunction([#lib])

Compiler-Commands:
DEG - Set all the cos/sin... to degre
RAD - Set all the cos/sin... to radiant

* PokeB,PokeL,PokeW,PokeS ... Other Basic-Dialekts know this as Poke(byte),LPoke,WPoke,...

* DisableMenuItem([#Menu,]Menuitem,Sate)
* DisplayPopupMenu(#Menu, WindowID [, x, y[,flag]])
Flag: #PB_DisplayPopupmenu_left/centre/right/up/down/mid)
* MenuHeight() - Don't take care, when a window is too small and the menu is two/three-lines
* SetMenuItemState()
Enable Always a Item, when it is disabled before!
* GetParentPathPart(Path$) is missing. "C:\test\test2\File.txt" should return "C:\Test\"
* ProgramParameter([#Index])
* ProgramParameterCount() is missing
* ProgramParameterComplete() - Complete String
* RandomF() is missing (return a float betwen 0 and 1 (without 1!)). Other Dialekt know this as RND()
* RandomSeed() is also known als "Randomize"
* RunProgram()
I miss: #PB_RunProgram_Hide,#PB_RunProgram_Wait
* MouseButton(#Button)
I miss: #PB_MouseButton_Left,#PB_MouseButton_Right,#PB_MouseButton_Centre
* MouseAvailableButtons() is missing
* GetErrorLineNR()
Return 0 for the first line (and IDE start with 1)
* AddPackTagData(*Data,Length) is missing
Add addition Data (unpacked!) in the File. With this command it is possible to store addition Information, like filenames...
* AddPackTagString(String)
A string should be store this way
Structure
Length.l
String.s
Endstructure
* AddPackTagByte/Word/Long...
* GetPackTagData/Byte/Word/Long/String is missing
* ColorRequester([StartColor[,*ColorTable[,flag]]])
Structure ColorTable
rgb.l[16]
EndStructure
#PB_ColorRequester_Extended
* InputRequester()
I miss a cancel-Button
* MessageRequester
I miss the "Return"-Constants #PB_MessageRequester_Yes,#PB_MessageRequester_No,#PB_MessageRequester_Cancel
* CloneSound(#NewSound,#OriginalSound) is missing
Make a "Clone" of a sound, so it is possible to load one sound and can it play more than on time at the same time (for example a long lase-shoot-sound) and with diffrent Pans,etc.
* GetSoundFrequency(#Sound) is missing
* GetSoundPan(#Sound) is missing
* GetSoundVolume(#Sound) is missing
* GetSoundLength(#Sound) is missing (in relationship with the Frequency)
* ChangeAlpaIntensity(r,g,b) and ChangeAlpaIntensity(RGB)
* ChangeGamma(R, G, B, Flags) and ChangeGamma(RGB, Flags)
* ClearScreen(r,g,b) and ClearScreen(RGB)
* ScreenClip(x,y,width,height)
All Spritecommands are cliped in this box of the screen. a ScreenClip(0,0,-1,-1) should set it to the maximum.
(It would be nice, when Sprite3D is also affect by this command)
* VAL() should support $123 and %100101
*DisableWindow(#Window,flag) is missing
*MaximizeWindow(#Window,flag) #true=maximize, #flaze=normal
*MinimizeWindow(#Window,flag) is missing
*IsMaximizeWindow(#window) is missing
*IsMinimizeWindow(#Window) is missing
*ActivateWindow([#Window])
*DetachMenu([#window])
*EventWindowID() - Name is wrong, better would be EventWindow() (for backward compatibility: take both! and in the manual/Calltip(IDE) only EventWindow())
*IsWindowHidden([#window]) is missing
*ISWindowDisable([#window]) is missing
*GetCurrentWindow() is missing
* Space(): Other Dialekt know this as SPC()
* inSTR([Startpos,]String,SearchString) same as StringField)
* Mirror$(String) is missing
* LCase() is also known as Lower()
* UCase() is also knwon as Upper()




Complete Miss of StreamSound() for Oggs (PlaySound load the complete sound in memory, for Background music it would be usefull, when not the comple sound is loaded. I know, that this is possible with the Movie-Lib, but this is original for movies...) Maybe this command should support .OGG,.Mid; maybe a combination with the modul-lib?
InitStreamSound()
LoadStreamSound(#StreamSound,Filename) - of course, don't load (ok, maybe init buffer)!
PlayStreamSound(#StreamSound[,flag])
PauseStreamSound(#StreamSound,flag) ;#true=pause #flase=unpause
SeekStreamSound(#StreamSound); Set Playposition
GetStreamSoundPosition(#StreamSound)
SetStreamSoundSpeed(#Streamsound,Speed); 100=normal 200=Double...
GetStreamSoundSpeed(#StreamSound)
FreeStreamSound(#StreamSound)
StremSoundState(#Streamsound)
#PB_StreamSound_Stop,#pb_StreamSound_Pause
StopStreamSound(#StreamSound) ;-1 stop all sounds




* Thread-Communication-Commands would be nice (to prevent problems like strings)
SendThreadMessage(ThreadId,Message,Param)
ThreadMessage()/WaitThreadMessage()
ThreadMessageFrom()
KarLKoX
Enthusiast
Enthusiast
Posts: 681
Joined: Mon Oct 06, 2003 7:13 pm
Location: France
Contact:

Re: A long list

Post by KarLKoX »

GPI wrote:I read the manual, i a create a little list full of suggestions:

Complete Miss of StreamSound() for Oggs (PlaySound load the complete sound in memory, for Background music it would be usefull, when not the comple sound is loaded. I know, that this is possible with the Movie-Lib, but this is original for movies...) Maybe this command should support .OGG,.Mid; maybe a combination with the modul-lib?
InitStreamSound()
LoadStreamSound(#StreamSound,Filename) - of course, don't load (ok, maybe init buffer)!
PlayStreamSound(#StreamSound[,flag])
PauseStreamSound(#StreamSound,flag) ;#true=pause #flase=unpause
SeekStreamSound(#StreamSound); Set Playposition
GetStreamSoundPosition(#StreamSound)
SetStreamSoundSpeed(#Streamsound,Speed); 100=normal 200=Double...
GetStreamSoundSpeed(#StreamSound)
FreeStreamSound(#StreamSound)
StremSoundState(#Streamsound)
#PB_StreamSound_Stop,#pb_StreamSound_Pause
StopStreamSound(#StreamSound) ;-1 stop all sounds
Try my OggStream library, next release will have mp3 support (through Mad).

PS : it doesn't support for more than one stream at once, a complete rewritte is expected wich will allow that :)
"Qui baise trop bouffe un poil." P. Desproges

http://karlkox.blogspot.com/
freak
PureBasic Team
PureBasic Team
Posts: 5940
Joined: Fri Apr 25, 2003 5:21 pm
Location: Germany

Post by freak »

um, that is a long list 8O

Variable types
the doubles were promised for 4.0 about the others: i don't know.

About the requested "alias" commands:
Where is the sense in having two ways to do the same thing? We have avoided this
kind of thing in the past, and it won't start now.

About all requests for adding an "#id" parameter to the functions
This is planned allready afaik.

About the GetCurrent...() commands
Why need a function to get the current object after you have set it yourself?
You should be aware of what you just did in your code, shouldn't you?
(I just don't see a use for this, do you have an example?)


About the menu item commands and a #Menu parameter
There is only one single list of menu items (on the OS side), so you can't
have one set of numbers for each menu anyway.


About window maximize/minimize commands
This is not possible with linux! (with gtk1.2, there is no way at all, and with
2.0, it only works if the windowmanager supports it, and few of them seem to do so.)

About the window enable/disable commands
Also haven't found a way to make this happen on linux.

About these:
* RunProgram()
I miss: #PB_RunProgram_Hide,#PB_RunProgram_Wait
* MessageRequester
I miss the "Return"-Constants #PB_MessageRequester_Yes,#PB_MessageRequester_No,#PB_MessageRequester_Cancel * MouseButton(#Button)
I miss: #PB_MouseButton_Left,#PB_MouseButton_Right,#PB_MouseButton_Centre
done. (now that was quick, huh? :D)

About everything else
Dunno yet.
quidquid Latine dictum sit altum videtur
freedimension
Enthusiast
Enthusiast
Posts: 613
Joined: Tue May 06, 2003 2:50 pm
Location: Germany
Contact:

Post by freedimension »

freak wrote:About window maximize/minimize commands
This is not possible with linux! (with gtk1.2, there is no way at all, and with
2.0, it only works if the windowmanager supports it, and few of them seem to do so.)

About the window enable/disable commands
Also haven't found a way to make this happen on linux.
Not all here program for Linux or CrossPlatform, keep that in mind. Why not adding these commands for the Windows Programmers, stating that it won't work under Linux???
I don't like this assertion: "huh, it won't do under [your OS here] so better don't do it at all"
There are already one or two commands (SetWindowCallback etc.) that will never be ported to linux so why not add more?
GPI
PureBasic Expert
PureBasic Expert
Posts: 1394
Joined: Fri Apr 25, 2003 6:41 pm

Post by GPI »

freak wrote:About the requested "alias" commands:
Where is the sense in having two ways to do the same thing? We have avoided this
kind of thing in the past, and it won't start now.
Easier for beginners from other languages. For Example: You find InStr() in every other Basic-Language (ok, not in C64-Basic, but in every newer Version)

And the rename of the "EventWindowID()" to "EventWindow()" make tense, because WindowId() is the Os-Handle. And both should be in the Lib, because of compatibility.
About the GetCurrent...() commands
Why need a function to get the current object after you have set it yourself?
You should be aware of what you just did in your code, shouldn't you?
(I just don't see a use for this, do you have an example?)
I write some procedures, which i use in diffrent projekt. When i there must set a current objekt, i will set at it at the end to the old objekt to prevent errors. At the moment it is total impossible. Thats why i write my own File-Handle with Api-Commands to prevent this.
About the menu item commands and a #Menu parameter
There is only one single list of menu items (on the OS side), so you can't
have one set of numbers for each menu anyway.
No, the same Menuitem can be in the Window-Menu, in the PopUp-Menu, and so on. And all the other Menu-Commands need the #Menu.
About window maximize/minimize commands
This is not possible with linux! (with gtk1.2, there is no way at all, and with
2.0, it only works if the windowmanager supports it, and few of them seem to do so.)
Maximize should be no problem: Simple use the Desktop-Resolution and maximize the Window manuell (and store the old position).
About minimize: When this is really not possible in Linux: Why not include Dummy-Commands, so the compiler don't break on crossplattform code.
About the window enable/disable commands
Also haven't found a way to make this happen on linux.
Simulate it: Disable/Enable all Gadgets
freak
PureBasic Team
PureBasic Team
Posts: 5940
Joined: Fri Apr 25, 2003 5:21 pm
Location: Germany

Post by freak »

The discussion about the "alias" commands has been done a lot. I think our position is quite clear on that.


About Linux:
PureBasic is a cross platform language. That is the reason why many people bought it.
If you want to develop on windows only, why not use the EnableWindow_() command?
I don't know Fred's exact opinion here, but i'd like to keep platform specific
functions at a minimum.
Adding "dummy" commands is not good, because what is the use of a calling
a function if you don't really know if it does anything at all?

Timo
quidquid Latine dictum sit altum videtur
Fred
Administrator
Administrator
Posts: 18162
Joined: Fri May 17, 2002 4:39 pm
Location: France
Contact:

Post by Fred »

It's a fact, this list is huge. Fr34k basically answered all of them, and about the compatibility issue, if the command is very useful and mimic a general behaviour, it can be implemented safely (even if no commands are found in other OS, the behaviour probably can be emulated).

Just a note about aliases: v4.0 will have full Macro support so it will be possible to do such Aliases without code penality. As I discussed before on this topic (search the forums for more informations) I will never implement aliases in the official PureBasic package. Having 2 command name which does absolutely the same action is silly and will lead to confusion. I prefer rename the command if it's absolutely necessary. Of course you will be free to do what you want then and write some include files which mimic such or such langage.
PB
PureBasic Expert
PureBasic Expert
Posts: 7581
Joined: Fri Apr 25, 2003 5:24 pm

Re: A long list

Post by PB »

> I read the manual, i a create a little list full of suggestions:
* GetFileDate(File$) is missing
* SetFileDate(File$,Date) is missing
* GetFileAttribute(File$) is missing
* SetFileAttribute(File$,Attribute) is missing

[Rest snipped]

When you saying "missing" you really mean "requested"... you made me think
that all the above commands existed but just weren't listed in the manual! :(

> v4.0 will have full Macro support

Woohoo! :D

Fred, I'd still love v4.0 to be able to NOT compile procedures that are
uncalled... that way I could have a single file full of procedures that act
like a library... and only the called ones get compiled into my exe. I've
written a pre-processor to do this, but if PureBasic did it natively... ;)
User avatar
blueznl
PureBasic Expert
PureBasic Expert
Posts: 6166
Joined: Sat May 17, 2003 11:31 am
Contact:

Post by blueznl »

ah, pb, that's a good suggestion, and makes sense... it may mean dual pass compiling, but who cares... pass one would be to check any references, pass two to actually compile the thing excluding unused segments, or something similar, i'd be happy if it would be optional... hmm... didn't japbe include a cutter or something?
( PB6.00 LTS Win11 x64 Asrock AB350 Pro4 Ryzen 5 3600 32GB GTX1060 6GB)
( The path to enlightenment and the PureBasic Survival Guide right here... )
Dare2
Moderator
Moderator
Posts: 3321
Joined: Sat Dec 27, 2003 3:55 am
Location: Great Southern Land

Post by Dare2 »

That is a nice idea, PB.
@}--`--,-- A rose by any other name ..
RJP Computing
Enthusiast
Enthusiast
Posts: 202
Joined: Sun Apr 27, 2003 4:44 am
Location: Michigan, USA
Contact:

Post by RJP Computing »

@PB,

That is a great idea. That would be great.
-Ryan
RJP Computing

Ubuntu 8.10/WinXP, AMD Athlon 64 3000+, 1000MB RAM, AC 97 Audio, nVidia GeForce 7600GT 512MB
GPI
PureBasic Expert
PureBasic Expert
Posts: 1394
Joined: Fri Apr 25, 2003 6:41 pm

Re: A long list

Post by GPI »

PB wrote:Fred, I'd still love v4.0 to be able to NOT compile procedures that are uncalled...
You have written a pre-processor and doesn't share it?!
(btw.: For jaPBe-Users: Plugin Cutter do the same...)

One Speed-up-Suggestion:
The remove of the unneeded procedures is only needed for "Create executeable". For Compile/Run is this not necassary, because this should be only a fast test.
PB
PureBasic Expert
PureBasic Expert
Posts: 7581
Joined: Fri Apr 25, 2003 5:24 pm

Re: A long list

Post by PB »

> You have written a pre-processor and doesn't share it?!

I did, when it first came out. :) It was part of my PBToolBox app that I made,
and one of its functions was to show the programmer the procedures that
weren't called. Unfortunately this app is no longer supported, and only works
with old versions of PureBasic. I might rewrite a standalone version of the
procedure info code, though.
I compile using 5.31 (x86) on Win 7 Ultimate (64-bit).
"PureBasic won't be object oriented, period" - Fred.
Post Reply