PureBasic 3.94 Beta 5 for Windows released

Developed or developing a new product in PureBasic? Tell the world about it.
freak
PureBasic Team
PureBasic Team
Posts: 5941
Joined: Fri Apr 25, 2003 5:21 pm
Location: Germany

PureBasic 3.94 Beta 5 for Windows released

Post by freak »

Hello everybody,

Well, the plan was to have the final release out allready, but the translation of
the help for the new IDE delays things a bit.
So here is another beta release, to test the latest changes and fixed while the translations are taking place.
It also includes the english helpfile, with the IDE documentation inside.

Get it on http://www.purebasic.com/

This will be a short beta period... expect the final release soon ;)

Oh, and by the way, we are still searching for some good color schemes to
include in the default set, so bring them on... ;)

The PureBasic Team
quidquid Latine dictum sit altum videtur
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 »

Does the PB beta include the latest version of the IDE or do we get that somewhere else?
BERESHEIT
freak
PureBasic Team
PureBasic Team
Posts: 5941
Joined: Fri Apr 25, 2003 5:21 pm
Location: Germany

Post by freak »

Its all in the package.
quidquid Latine dictum sit altum videtur
dracflamloc
Addict
Addict
Posts: 1648
Joined: Mon Sep 20, 2004 3:52 pm
Contact:

Post by dracflamloc »

Maybe it's just me but it seems that once the autocomplete pops up after 3 letters you cant narrow down the list anymore by continuing typing.
User avatar
Joakim Christiansen
Addict
Addict
Posts: 2452
Joined: Wed Dec 22, 2004 4:12 pm
Location: Norway
Contact:

Post by Joakim Christiansen »

dracflamloc wrote:Maybe it's just me but it seems that once the autocomplete pops up after 3 letters you cant narrow down the list anymore by continuing typing.
Indeed :(

Write "OpenConsole" and close the list.
Press backspace and the list is now narrowed down.
Weird. :?
I like logic, hence I dislike humans but love computers.
thefool
Always Here
Always Here
Posts: 5875
Joined: Sat Aug 30, 2003 5:58 pm
Location: Denmark

Post by thefool »

openconsole doesnt even pop up autocomplete here :S
Truth_Seeker
Enthusiast
Enthusiast
Posts: 145
Joined: Tue Mar 01, 2005 8:41 pm
Location: Near a Computer

Post by Truth_Seeker »

Oh, and by the way, we are still searching for some good color schemes to
include in the default set, so bring them on...
Whats wrong with the ones that JaPBe uses? Plus the one I posted in the last beta post of this forum. The one I posted is based on the Blitz theme that JaPBe had and I changed the text colors and the font.
Thanks
Truth Seeker
User avatar
GeoTrail
Addict
Addict
Posts: 2794
Joined: Fri Feb 13, 2004 12:45 am
Location: Bergen, Norway
Contact:

Post by GeoTrail »

Thanks for the update freak :)
I Stepped On A Cornflake!!! Now I'm A Cereal Killer!
User avatar
GeoTrail
Addict
Addict
Posts: 2794
Joined: Fri Feb 13, 2004 12:45 am
Location: Bergen, Norway
Contact:

Post by GeoTrail »

I get this error when I run the beta 5:
[COMPILER] Error: Constant already declared with a different value: #PROCESS_ALL_ACCESS
I Stepped On A Cornflake!!! Now I'm A Cereal Killer!
Killswitch
Enthusiast
Enthusiast
Posts: 731
Joined: Wed Apr 21, 2004 7:12 pm

Post by Killswitch »

So do I, and whenever I try to compile anything I get another error that says 'Compiler isn't loaded yet...please try again' - I've waited far longer than it took for every other PB version to load. Perhaps the error is caused by a library?
~I see one problem with your reasoning: the fact is thats not a chicken~
User avatar
GeoTrail
Addict
Addict
Posts: 2794
Joined: Fri Feb 13, 2004 12:45 am
Location: Bergen, Norway
Contact:

Post by GeoTrail »

I think it's the ProcessIt Library that causes it.
I Stepped On A Cornflake!!! Now I'm A Cereal Killer!
Killswitch
Enthusiast
Enthusiast
Posts: 731
Joined: Wed Apr 21, 2004 7:12 pm

Post by Killswitch »

Its the ProcessIt librarys residents file that causes the problem - I just spent all that time trying to isolate the problem and I got beatn to it! :twisted: :P
~I see one problem with your reasoning: the fact is thats not a chicken~
akee
Enthusiast
Enthusiast
Posts: 498
Joined: Wed Aug 18, 2004 9:52 am
Location: Penang, Malaysia

Find and Replace

Post by akee »

The Find and Replace Window. When you click the Find button, the window closes. Technically it should find the next string and then when you click Replace then only it will replace the string right?
akee
Enthusiast
Enthusiast
Posts: 498
Joined: Wed Aug 18, 2004 9:52 am
Location: Penang, Malaysia

Post by akee »

I like this program by Einander. It compiles ok on PB3.93 but not for 3.94. Something about an Invalid Name.

Code: Select all

; PB MIDI Keyboard - by Einander  
; Edited april  19 - 2005 : changes for PB 3.93 
; Added: change MIDI instruments 
; Thanks Danilo for the MIDIout routines 

Enumeration 
#Container  
#MouseOver  
#Sustain 
#Sound 
#Close 
EndEnumeration 

Global _hWnd,_hMIDIout, _KBD, _Keep$, _Detach,_MX,_MY,_MK,_KeyTest 
Global _xKbd, _yKbd, w_KBD, _WhiteKeyWidth, _WhiteKeyHeight, _Wid2, _Wid3, _Wid4, _Wid5, _OctaveWidth, H2 
Global _Chromatic$ 
#DarkGray = $6E6E6E 

Dim KNote.b(6) 
KNote(0)=0:KNote(1)=2:KNote(2)=4 : KNote(3)=5 
KNote(4)=7:KNote(5)=9:KNote(6)=11 

; Choose here your sharp / flat preferences  - 2 chars for each Note 
_Chromatic$ = "C C#D EbE F F#G AbA BbB C " ; mixed # b 
; _Chromatic$="C DbD EbE F GbG AbA BbB C "   ;all flats 
; _Chromatic$="C C#D D#E F F#G G#A A#B C "   ;all sharps 

Procedure Get(SRC, x, y, WI, HE) ; Get source image - returns image handle 
    IMGdc = CreateCompatibleDC_(SRC) 
    hIMG = CreateImage(0, WI, HE) 
    SelectObject_(IMGdc, hIMG) 
    BitBlt_(IMGdc, 0, 0, WI, HE, SRC, x, y, #SRCCOPY) 
    ProcedureReturn IMGdc 
EndProcedure 

Procedure Put(SRC, x, y, DEST, MODE) ; Draws image from SRC TO DEST (DEST = GetDC_(SrcID)) 
    BitBlt_(DEST, x, y, w_KBD, _WhiteKeyHeight, SRC, 0, 0, MODE) 
EndProcedure 

Procedure.s MIDI_NT(Note) ; naming one Note 
    ProcedureReturn Mid(_Chromatic$, (Note % 12) * 2 + 1, 2) 
EndProcedure 

Procedure.s MIDI_2_Notes(Note$) ; naming multiple Notes 
    For i = 0 To Len(Note$) - 1 
        Note = PeekB(@Note$ + i) 
        Nt$ + Trim(Mid(_Chromatic$, (Note % 12) * 2 + 1, 2)) + Str(Note / 12) + " " 
    Next i 
    ProcedureReturn Nt$ 
EndProcedure 

Procedure MIDI_KBD() ; returns selected MIDINote 
    mx = WindowMouseX() : my = WindowMouseY() 
    r.RECT\right=w_KBD-1:r\bottom=_WhiteKeyHeight 
    If PtInRect_(r,mx,my) 
        Octave = (_MX / _WhiteKeyWidth) / 7 * 12 ; octave 
        Note=Octave+KNote((_MX / _WhiteKeyWidth) % 7 )  ;White Key 
        Side= (_MX / _Wid2)%14  ;position on the left ot right half of each white Key 
        If _MY>H2 Or Side=0 Or Side=5 Or Side=6 Or Side=13 : ProcedureReturn Note  ; white Key 
        ElseIf Side=1 Or Side=3 Or Side=7 Or Side=9 Or Side=11 : ProcedureReturn Note + 1   ;left black Key 
        Else 
            ProcedureReturn Note - 1       ;right black Key 
        EndIf 
    EndIf 
    ProcedureReturn -1 
EndProcedure 

Procedure DrawKBD(Note, KeySelected) ; draw MIDI Keys 
    If KeySelected = #Black : KeyColor = #White : Else : KeyColor = KeySelected : EndIf 
    Octave = Note / 12 
    NT = Note % 12 
    x = Octave * _OctaveWidth 
    If NT = 1 Or NT = 3 Or NT = 6 Or NT = 8 Or NT = 10 
        If NT > 5 : A = 1 : EndIf 
        x + (NT + A) * _Wid2 + 1 
        Box (x + _Wid3, 1, _Wid2, H2 - 3, KeySelected) 
    Else 
        Select NT 
            Case 0 :                            Box(x + 1, 0, _Wid5, H2, KeyColor) 
            Case 2 : x + _WhiteKeyWidth :         Box(x + _Wid3, 0, _Wid4, H2, KeyColor) 
            Case 4 : x + _WhiteKeyWidth * 2 :   Box(x + _Wid3, 0, _Wid5, H2, KeyColor) 
            Case 5 : x + _WhiteKeyWidth * 3 :   Box(x + 1, 0, _Wid5, H2, KeyColor) 
            Case 7 : x + _WhiteKeyWidth * 4 :   Box(x + _Wid3, 0, _Wid4, H2, KeyColor) 
            Case 9 : x + _WhiteKeyWidth * 5 :   Box(x + _Wid3, 0, _Wid4, H2, KeyColor) 
            Case 11 : x + _WhiteKeyWidth * 6 : Box(x + _Wid3, 0, _Wid5, H2, KeyColor) 
        EndSelect 
        Box (x + 1, 0 + H2, _WhiteKeyWidth - 1, H2, KeyColor) 
    EndIf 
    If Note = 127 : Box(x + _Wid3, 0, _Wid5, H2, KeyColor) : EndIf 
EndProcedure 

Procedure SetSound(Channel, sound) ; Sound from 0 to 127 
   midiOutShortMsg_(_hMIDIout, $C0 |  Channel | sound<< 8 ) 
EndProcedure 

Procedure PlayNote(Channel, Note, Loudness) ; Loudness 0 = no sound 
    midiOutShortMsg_(_hMIDIout,$90 | Channel | Note << 8 | Loudness << 16 ) 
EndProcedure 

Procedure AllOff() ; All Notes off - silence 
   For i=0 To 15 
        midiOutShortMsg_(_hMIDIout, $B0 | i | $7B00 )  
    Next 
EndProcedure 

Procedure.s SortString(A$) 
    Le = Len(A$) - 1 
    Dim Sort.b(Le) 
    For i = 0 To Le 
        Sort(i) = PeekB(@A$ + i) 
    Next 
    SortArray.b(Sort(), 0) 
    For i = 0 To Le 
        PokeB(@A$ + i, Sort(i)) 
    Next 
    ProcedureReturn A$ 
EndProcedure 

Procedure KeepNote(Note, Sustain) 
    If Note > - 1 
        A$ = Chr(Note) 
        If FindString(_Keep$, A$, 1) = 0 
            _Keep$ = _Keep$ + A$ 
        EndIf 
    EndIf 
    If Len(_Keep$) > Sustain 
        For i = 1 To Len(_Keep$) - Sustain 
            PlayNote(1, Asc(Mid(_Keep$, i, 1)), 0) 
        Next i 
        _Keep$ = Right(_Keep$, Sustain) 
    EndIf 
    If Len(_Keep$) 
        StatusBarText(0, 1, "Sustained: " + MIDI_2_Notes(SortString(_Keep$)) + "   < Ctrl > Or right MouseButton To stop sustain.") 
    Else 
        StatusBarText(0, 1, "Sustained: None") 
    EndIf 
EndProcedure 

Procedure Callback(0, msg, wParam, lParam) 
    Result = #PB_ProcessPureBasicEvents 
    Select msg 
       Case #WM_MOUSEMOVE 
            GetCursorPos_(p.POINT) 
            ScreenToClient_(_hWnd, p) 
            _MX=p\x : _MY=p\y 
        Case #WM_LBUTTONDOWN 
            If _MK = 2 : _MK = 3 : Else : _MK = 1 : EndIf 
        Case #WM_LBUTTONUP 
            If _MK = 3 : _MK = 2 : Else : _MK = 0 : EndIf 
        Case #WM_RBUTTONDOWN 
            If _MK = 1 : _MK = 3 : Else : _MK = 2 : EndIf 
        Case #WM_RBUTTONUP 
            If _MK = 3 : _MK = 1 : Else : _MK = 0 : EndIf 
        Case #WM_KEYDOWN 
           _KeyTest=EventwParam() 
        Case #WM_PAINT 
            Box(0, 0, w_KBD + 1, _WhiteKeyHeight + 2, #DarkGray) ; background & space between Keys 
            Put(_KBD, 0, 0, GetDC_(WindowID()), #SRCCOPY) ; redraw _KBD 
        Case #PB_EventCloseWindow : End 
  EndSelect 
    ProcedureReturn Result 
EndProcedure 
; _______________________________________- 

_X = GetSystemMetrics_(#SM_CXSCREEN) 
_xKbd = 25 : _yKbd = 120 ; Key width it's up to screen width 
_WhiteKeyWidth = (_X - 200) / 77 : _WhiteKeyWidth + (_WhiteKeyWidth & 1) ; white Key width always even 
_WhiteKeyHeight = 70 ; white Key height 
w_KBD = _WhiteKeyWidth * 75 ; Keyboard width 
H2 = _WhiteKeyHeight / 2 ; half Key height, to find black or white Keys 
_Wid2 = _WhiteKeyWidth / 2 ; half  Key width, for black Keys 
_Wid3 = _WhiteKeyWidth / 3 ; black Keys position 
_Wid4 = _WhiteKeyWidth - _Wid3 * 2 + 1 ; ditto 
_Wid5 = _WhiteKeyWidth - _Wid3 ; ditto 
_OctaveWidth = _WhiteKeyWidth * 7 ; 7 Keys = one octave width 
Sustain = 1 

_hWnd = OpenWindow(0, _xKbd, _yKbd, w_KBD, _WhiteKeyHeight + 42, #PB_Window_SystemMenu, "    PB MIDI Keyboard 0.01") 

Dim Sound.s(127) 
Restore Sounds 
For i=0 To 127 
    Read Sound(i) 
Next 

CreateGadgetList(_hWnd) 
ContainerGadget(#Container, 4, WindowHeight() - 40, WindowWidth()-200, 20 ) 
CheckBoxGadget(#MouseOver, 60, 0, 200, 18, "Mouse Over") 
ButtonGadget (#Close,300,2,80,18,"Close") 
SpinGadget (#Sound,400,2,140,18,0,127) 
SetGadgetState(#MouseOver, 0) 
SpinGadget(#Sustain, 2, 0, 30, 18, 0, 12) 
SetGadgetState(#Sustain, Sustain) 
SetGadgetText(#Sustain, Str(Sustain)) 
SetGadgetText(#Sound,"Sound "+Str(sound+1)+" "+Sound(0)+" ") 
CloseGadgetList() 

WinDC = GetDC_(_hWnd) 
SetWindowPos_(_hWnd, #HWND_TOPMOST, 0, 0, 0, 0, #SWP_NOMOVE | #SWP_NOSIZE) ; always on top 
CreateStatusBar(0, _hWnd) ; selected Note info 
AddStatusBarField(WindowWidth()/3) 
AddStatusBarField(WindowWidth()/2) 
StartDrawing(WindowOutput()) 
    Box(0, 0, w_KBD + 1, _WhiteKeyHeight + 2, #DarkGray) ; background & space between Keys 
    MouseOver = 0      
    Loudness = 120 ; choose from 0 To 127  : Loudness 0 = no sound 
    For i = 0 To 127 ; draw full MIDIKeyboard 
        DrawKBD(i, #Black) 
    Next i 
    
    _KBD = Get(WinDC, 0, 0, w_KBD, _WhiteKeyHeight) ; get MIDIKeyboard image 
    If midiOutOpen_(@_hMIDIout, 0, 0, 0, 0) = #MMSYSERR_NOERROR 
        SetWindowCallback(@Callback()) 
        LastNote=-2 
        Repeat 
            Ev = WaitWindowEvent() 
            Note = MIDI_KBD() 
               If Ev = #PB_Event_Gadget 
                Select EventGadgetID() 
                 Case #Sustain 
                    Sustain = GetGadgetState(#Sustain) 
                    SetGadgetText(#Sustain, Str(Sustain)) 
                    KeepNote(-1, Sustain) 
                    WindowEvent() ; avoid endless event-loops 
                Case #Sound 
                    sound=GetGadgetState(#Sound) 
                    SetGadgetText(#Sound,"Sound "+Str(sound+1)+" "+Sound(sound)+" ") 
                    SetSound(1, sound) ; many sound cards have  sounds only from 0 to 108 
                    Case #MouseOver 
                    MouseOver = Abs(MouseOver - 1) ; switch 1/0 
                    SetGadgetState(#MouseOver, MouseOver) 
                Case #Close : Break 
                EndSelect 
            EndIf 
            If _MK=2 Or GetAsyncKeyState_(#VK_LCONTROL) = -$7FFF 
                AllOff() : _Keep$ = "" : StatusBarText(0, 1, "") 
                KeepNote(-1, 0) 
            ElseIf GetAsyncKeyState_(#VK_MENU) = -$7FFF ;  ALT  Key 
                MouseOver = Abs(MouseOver - 1) ; switch 1 / 0 
                SetGadgetState(#MouseOver, MouseOver) 
            EndIf 
            If Note < 0 ; no selected Key 
                StatusBarText(0, 0, "") 
            Else 
                If _MK=1 
                    If Note<>LastNote 
                        PlayNote(1, Note, 0) 
                        PlayNote(1, Note, Loudness) 
                        KeepNote(Note, Sustain) 
                    EndIf 
                    LastNote=Note 
                Else 
                    LastNote=-2    
                EndIf 
                If Note + 1 <> _Detach ; +1 because NT= 0 is a legal MIDInote 
                    StatusBarText(0, 0, MIDI_NT(Note) + Str(Note / 12) + " : MIDI Note " + Str(Note)) 
                    If _Detach 
                        DrawKBD(_Detach - 1, #Black) 
                        If GetGadgetState(#Sustain) = 0 : PlayNote(1, _Detach - 1, 0) : EndIf 
                    EndIf 
                    If MouseOver = 1 
                        PlayNote(1, Note, Loudness) : KeepNote(Note, Sustain) 
                    EndIf 
                    DrawKBD(Note, #Red) 
                EndIf 
                _Detach = Note + 1 
            EndIf 
        Until Ev = #PB_Event_CloseWindow 
        midiOutClose_(_hMIDIout) 
    Else 
        MessageRequester("ERROR", "No MIDI device found", 0) 
    EndIf 
    CloseWindow(0) 
    End 
    DataSection 
    Sounds: 
    Data.s "Piano 1", "Piano 2","Piano 3","Honky-tonk","E.Piano 1","E.Piano 2","Harpsichord","Clavinet" 
    Data.s "Celesta","Glockenspiel", "Music Box","Vibraphone","Marimba","Xylophone","Tubular bell","Dulcimer" 
    Data.s "Organ 1","Organ 2","Organ 3","Church org. 1","Reed Organ","French Accordion","Harmonica","Bandoneon" 
    Data.s "Nylon-str Gt","Steel-str Gt","Jazz Gt","Clean Gt","Muted Gt","Overdrive Gt","Distortion Gt","Gt. Harmonics" 
    Data.s "Acoustic Bass","Fingered Basss","Picked Bass","Fretless Bass","Slap Bass 1","Slap Bass 2","Synth Bass 1","Synth Bass 2" 
    Data.s "Violin","Viola","Cello","Contrabass","Tremolo Strings","Pizzicato","Harp","Timpani" 
    Data.s "Strings","Slow Strings","Syn Strings 1","Syn Strings 2"," Choir Aahs","Voice Oohs","SynVox","Orchestra Hit" 
    Data.s "Trumpet","Trombone","Tuba","Muted Trumpet","French Horn","Brass 1","Synth Brass 1","Synth Brass 2" 
    Data.s "Soprano Sax","Alto Sax","Tenor Sax","Baritone Sax","Oboe","English Horn","Basson","Clarinet" 
    Data.s "Piccolo","Flute","Recorder","Pan Flute","Bottle Blow","Shakuhachi","Whistle","Ocarina" 
    Data.s "Square Wave","Saw Wave","Syn. Calliope","Chiffer Lead","Charang","Solo Vox","5th Saw Wave","Bass&Lead" 
    Data.s "Fantasia","Warm Pad","PolySynth","Space Voice","Bowed Glass","Metal Pad","Halo Pad","Sweep Pad" 
    Data.s "Ice Rain","sound Track","Crystal","Atmosphere","Brightness","Goblin","Echo Drops","Star Theme" 
    Data.s "Sitar","Banjo","Shamisen","Koto","Kalimba","Bag Pipe","Fiddle","Shanai" 
    Data.s "Tinkle bell","Agogo","Steel Drums","Woodblock","Taiko","Melo Tom 1","Synth Drum","Reverse Cymb" 
    Data.s "Gt. FretNoise","Breath Noise","Seashore","Bird","Telephone 1","Helicopter","Applause","Gun Shot" 
    EndDataSection 
User avatar
Rings
Moderator
Moderator
Posts: 1435
Joined: Sat Apr 26, 2003 1:11 am

Post by Rings »

akee wrote:I like this program by Einander. It compiles ok on PB3.93 but not for 3.94. Something about an Invalid Name.
you cannot define a number as Parameter in a Procedure:

Procedure Callback(o, msg, wParam, lParam)

Replace the NULL (0) wit a variable-name
GeoTrail wrote: I think it's the ProcessIt Library that causes it.
better use a OpenSource Process Lib where you can edit
all Codes yourself if such error's occurs ;)
SPAMINATOR NR.1
Post Reply