Shrimp-freeware simple,but yet powerfull editor for freebasic and more...
-
- Posts: 182
- Joined: Dec 18, 2018 16:37
- Location: Germany, Hessdorf
- Contact:
Shrimp-freeware simple,but yet powerfull editor for freebasic and more...
new simple but yet powerfull editor for freebasic. comes with plugin capabilities, writen in different programming languages... try it is freeware you can get it from here http://shrimpide.com/
-
- Posts: 182
- Joined: Dec 18, 2018 16:37
- Location: Germany, Hessdorf
- Contact:
Re: Shrimp-freeware simple,but yet powerfull editor for freebasic and more...
some bugs was corrected, like find,replace,activepage,etc
enjoy.
enjoy.
-
- Posts: 8586
- Joined: May 28, 2005 3:28
- Contact:
Re: Shrimp-freeware simple,but yet powerfull editor for freebasic and more...
Your Logo reminds me on GamBAS for Linux :-)
Joshy
Joshy
-
- Posts: 182
- Joined: Dec 18, 2018 16:37
- Location: Germany, Hessdorf
- Contact:
Re: Shrimp-freeware simple,but yet powerfull editor for freebasic and more...
...nice...isin't?D.J.Peters wrote:Your Logo reminds me on GamBAS for Linux :-)
Joshy
-
- Posts: 182
- Joined: Dec 18, 2018 16:37
- Location: Germany, Hessdorf
- Contact:
Re: Shrimp-freeware simple,but yet powerfull editor for freebasic and more...
Shrimp was updated. Go to see the changes. http://shrimpide.com
Re: Shrimp-freeware simple,but yet powerfull editor for freebasic and more...
I finally got a chance to look at this. It shows promise. I did notice that the plugins won't compile with FBC 64bit. Also, since the plugins compile every time you launch the IDE, it can be a bit slow to load. Would it be possible to check the plugin code to see if it has changed since the last compile, and only compile as needed?
-
- Posts: 182
- Joined: Dec 18, 2018 16:37
- Location: Germany, Hessdorf
- Contact:
Re: Shrimp-freeware simple,but yet powerfull editor for freebasic and more...
Thank you for your feedback.Imortis wrote:I finally got a chance to look at this. It shows promise. I did notice that the plugins won't compile with FBC 64bit. Also, since the plugins compile every time you launch the IDE, it can be a bit slow to load. Would it be possible to check the plugin code to see if it has changed since the last compile, and only compile as needed?
Okay i will made that modification, it is possible.
Also, please raport any bug you find it and/or any sugesstion to make.
Best Regards
-
- Posts: 182
- Joined: Dec 18, 2018 16:37
- Location: Germany, Hessdorf
- Contact:
Re: Shrimp-freeware simple,but yet powerfull editor for freebasic and more...
okay, i work to change designer... for 64bit version of freebasic, the last one. i get this message when i compiled dll.
i use windows 7 and for shrimp i use Delphi 7 (32bit version,in fact is only one...)
also note i defined a 64bit versio of w_frame(..) definition like w64_frame(...)
and so on to rest of definitions, i use GrtWindowLongPtr instead of GetWindowLong, and so one...for the rest of plane functions...
so finally i manage to compile it, but SINCE THE SHRIMP WAS COMPILED AS 32BIT...
i use windows 7 and for shrimp i use Delphi 7 (32bit version,in fact is only one...)
Code: Select all
FreeBASIC Compiler - Version 1.07.3 (2020-12-31), built for win64 (64bit)
Copyright (C) 2004-2019 The FreeBASIC development team.
standalone
target: win64, x86-64, 64bit
compiling: C:\Users\eodor\Desktop\shrimp_site\shrimp_source\Plugins\designer.fbp -o C:\Users\eodor\Desktop\shrimp_site\shrimp_source\Plugins\designer.c (main module)
C:\Users\eodor\Desktop\shrimp_site\shrimp_source\gui_wrapper\gui\kogaion_gui.bas(1898) warning 13(1): Function result was not explicitly set
C:\Users\eodor\Desktop\shrimp_site\shrimp_source\gui_wrapper\gui\kogaion_gui.bas(1901) warning 13(1): Function result was not explicitly set
C:\Users\eodor\Desktop\shrimp_site\shrimp_source\gui_wrapper\gui\kogaion_gui_standards.bas(999) warning 3(2): Passing different pointer types, at parameter 3 of GETSCROLLRANGE()
C:\Users\eodor\Desktop\shrimp_site\shrimp_source\gui_wrapper\gui\kogaion_gui_standards.bas(999) warning 3(2): Passing different pointer types, at parameter 4 of GETSCROLLRANGE()
C:\Users\eodor\Desktop\shrimp_site\shrimp_source\gui_wrapper\gui\kogaion_gui_standards.bas(1013) warning 3(2): Passing different pointer types, at parameter 3 of GETSCROLLRANGE()
C:\Users\eodor\Desktop\shrimp_site\shrimp_source\gui_wrapper\gui\kogaion_gui_standards.bas(1013) warning 3(2): Passing different pointer types, at parameter 4 of GETSCROLLRANGE()
compiling C: C:\Program Files\FreeBASIC-1.07.3-win64\bin\win64\gcc.exe -m64 -march=x86-64 -S -nostdlib -nostdinc -Wall -Wno-unused-label -Wno-unused-function -Wno-unused-variable -Wno-unused-but-set-variable -Wno-main -Werror-implicit-function-declaration -O0 -fno-strict-aliasing -frounding-math -fno-math-errno -fwrapv -fno-exceptions -fno-unwind-tables -fno-asynchronous-unwind-tables -Wno-format -masm=intel "C:\Users\eodor\Desktop\shrimp_site\shrimp_source\Plugins\designer.c" -o "C:\Users\eodor\Desktop\shrimp_site\shrimp_source\Plugins\designer.asm"
C:\Users\eodor\Desktop\shrimp_site\shrimp_source\Plugins\designer.c: In function '_ZN7QOBJECT12REMOVEOBJECTEPS_':
C:\Users\eodor\Desktop\shrimp_site\shrimp_source\Plugins\designer.c:4952:8: warning: 'I$3' may be used uninitialized in this function [-Wmaybe-uninitialized]
I$3 = I$3 + 1ll;
^
C:\Users\eodor\Desktop\shrimp_site\shrimp_source\Plugins\designer.c: In function '_ZN6QFRAME13REMOVECONTROLEPS_':
C:\Users\eodor\Desktop\shrimp_site\shrimp_source\Plugins\designer.c:6938:8: warning: 'I$3' may be used uninitialized in this function [-Wmaybe-uninitialized]
I$3 = I$3 + 1ll;
^
assembling: C:\Program Files\FreeBASIC-1.07.3-win64\bin\win64\as.exe --64 --strip-local-absolute "C:\Users\eodor\Desktop\shrimp_site\shrimp_source\Plugins\designer.asm" -o "C:\Users\eodor\Desktop\shrimp_site\shrimp_source\Plugins\designer.o"
linking: C:\Program Files\FreeBASIC-1.07.3-win64\bin\win64\ld.exe -m i386pep -o "C:\Users\eodor\Desktop\shrimp_site\shrimp_source\Plugins\designer.dll" -subsystem console --dll --enable-stdcall-fixup -e DllMainCRTStartup "C:\Program Files\FreeBASIC-1.07.3-win64\lib\win64\fbextra.x" --stack 1048576,1048576 --output-def "C:\Users\eodor\Desktop\shrimp_site\shrimp_source\Plugins\designer.def" -s -L "C:\Program Files\FreeBASIC-1.07.3-win64\lib\win64" -L "." "C:\Program Files\FreeBASIC-1.07.3-win64\lib\win64\dllcrt2.o" "C:\Program Files\FreeBASIC-1.07.3-win64\lib\win64\crtbegin.o" "C:\Program Files\FreeBASIC-1.07.3-win64\lib\win64\fbrt0.o" "C:\Users\eodor\Desktop\shrimp_site\shrimp_source\Plugins\designer.o" "-(" -lkernel32 -lgdi32 -lmsimg32 -luser32 -lversion -ladvapi32 -limm32 -lcomctl32 -lfb -lgcc -lmsvcrt -lmingw32 -lmingwex -lmoldname -lgcc_eh "-)" "C:\Program Files\FreeBASIC-1.07.3-win64\lib\win64\crtend.o"
creating import library: C:\Program Files\FreeBASIC-1.07.3-win64\bin\win64\dlltool.exe --def "C:\Users\eodor\Desktop\shrimp_site\shrimp_source\Plugins\designer.def" --dllname "designer.dll" --output-lib "C:\Users\eodor\Desktop\shrimp_site\shrimp_source\Plugins\libdesigner.dll.a"
and so on to rest of definitions, i use GrtWindowLongPtr instead of GetWindowLong, and so one...for the rest of plane functions...
so finally i manage to compile it, but SINCE THE SHRIMP WAS COMPILED AS 32BIT...
Re: Shrimp-freeware simple,but yet powerfull editor for freebasic and more...
couldn't you use freePascal to build the dll to 64-bit ?
Re: Shrimp-freeware simple,but yet powerfull editor for freebasic and more...
nastasa eodor wrote:...so finally i manage to compile it, but SINCE THE SHRIMP WAS COMPILED AS 32BIT...
I had wondered about that. Would it be possible to add a path for both the 32bit and 64bit compiler versions? That way the user can compile with either one, and the IDE can always compile the plugins with 32bit. That would be the simplest for the user. Might be a bit of a pain for the IDE developer though.
-
- Posts: 182
- Joined: Dec 18, 2018 16:37
- Location: Germany, Hessdorf
- Contact:
Re: Shrimp-freeware simple,but yet powerfull editor for freebasic and more...
yes i will add this feature for the user in the next build version. thanks for you advices.Imortis wrote:nastasa eodor wrote:...so finally i manage to compile it, but SINCE THE SHRIMP WAS COMPILED AS 32BIT...
I had wondered about that. Would it be possible to add a path for both the 32bit and 64bit compiler versions? That way the user can compile with either one, and the IDE can always compile the plugins with 32bit. That would be the simplest for the user. Might be a bit of a pain for the IDE developer though.
-
- Posts: 182
- Joined: Dec 18, 2018 16:37
- Location: Germany, Hessdorf
- Contact:
Re: Shrimp-freeware simple,but yet powerfull editor for freebasic and more...
the limitation was solved (in a test program), it will come changed soon. meantime look at:
http://shrimpide.com/images/Animation_1.gif
http://shrimpide.com/images/Animation.gif
http://shrimpide.com/images/Animation_1.gif
http://shrimpide.com/images/Animation.gif
-
- Posts: 182
- Joined: Dec 18, 2018 16:37
- Location: Germany, Hessdorf
- Contact:
Re: Shrimp-freeware simple,but yet powerfull editor for freebasic and more...
shrimp was updated,now can compile and run bot versions,32 and 64bit too. also source code was updated .
-
- Posts: 182
- Joined: Dec 18, 2018 16:37
- Location: Germany, Hessdorf
- Contact:
Re: Shrimp-freeware simple,but yet powerfull editor for freebasic and more...
yes, it is possible. the future consideration of this.srvaldez wrote:couldn't you use freePascal to build the dll to 64-bit ?
-
- Posts: 182
- Joined: Dec 18, 2018 16:37
- Location: Germany, Hessdorf
- Contact:
Re: Shrimp-freeware simple,but yet powerfull editor for freebasic and more...
finally i manage to get a prototipe code who working in both version of freebasic 32 or 64bit. see here:
Code: Select all
#include once "windows.bi"
#define instance GetModuleHandle(0)
type PControl as TControl ptr
common shared as PControl creationData
type TMessage
as hwnd dlg
as uint msg
as wparam wparam
as lparam lparam
as lresult result
as PControl sender,mdiclient
end type
type TControl extends object
protected:
declare abstract sub Dispatch(byref as TMessage)
declare abstract sub Handler(byref as TMessage)
declare abstract sub CreateHandle
as integer fexstyle,fstyle,fx,fy,fcx,fcy,fid,fenabled,fvisible
as string ftext
as hwnd fhandle
as PControl fparent
public:
as string classname,classancestor
declare abstract sub Free
declare property Parent as PControl
declare property Parent (as PControl)
declare property Style as integer
declare property Style (as integer)
declare property ExStyle as integer
declare property ExStyle (as integer)
declare property Handle as hwnd
declare property Handle (as hwnd)
declare abstract operator cast as any ptr
declare constructor
end type
type MDIClient extends TControl
protected:
declare virtual sub CreateHandle
declare virtual sub Dispatch(byref as TMessage)
declare virtual sub Handler(byref as TMessage)
declare static function wndproc(dlg as hwnd,msg as uint,wpoaram as wparam,lparam as lparam) as lresult
public:
declare virtual sub Free
declare static function Register as integer
declare virtual operator cast as any ptr
declare constructor
end type
enum FormStyles
fsNormal,fsStayTop,fsMDIClient,fsMDIChild
end enum
type Form extends TControl
protected:
as FormStyles fformstyle
declare virtual sub CreateHandle
declare virtual sub Dispatch(byref as TMessage)
declare virtual sub Handler(byref as TMessage)
declare static function wndproc(dlg as hwnd,msg as uint,wpoaram as wparam,lparam as lparam) as lresult
public:
as MDIClient ptr MDIClient
declare property FormStyle as FormStyles
declare property FormStyle (as FormStyles)
declare virtual sub Free
declare static function Register as integer
declare virtual operator cast as any ptr
declare constructor
end type
type Button extends TControl
protected:
declare static function wndproc(dlg as hwnd,msg as uint,wpoaram as wparam,lparam as lparam) as lresult
declare virtual sub CreateHandle
declare virtual sub Dispatch(byref as TMessage)
declare virtual sub Handler(byref as TMessage)
public:
declare static function Register as integer
declare virtual sub Free
declare virtual operator cast as any ptr
declare constructor
end type
property TControl.Parent as PControl
return fparent
end property
property TControl.Parent (v as PControl)
dim as PControl saved=fparent
fparent=v
if isWindow(fhandle) then
SetParent(fhandle,iif(fparent,fparent->fhandle,0))
else
createhandle :? "le=",CLASSNAME,getlasterror,fhandle
end if
end property
property TControl.Style as integer
return fstyle
end property
property TControl.Style (v as integer)
fstyle=v
if isWindow(fhandle) then
SetWindowLongPtr(fhandle,gwl_style,v)
SetWindowPos(fhandle,0,0,0,0,0,swp_nozorder or swp_noactivate or swp_nosize or swp_nomove or swp_framechanged)
updateWindow(fhandle)
end if
end property
property TControl.ExStyle as integer
return fexstyle
end property
property TControl.ExStyle (v as integer)
fexstyle=v
if isWindow(fhandle) then
? SetWindowLongPtr(fhandle,gwl_exstyle,v)
SetWindowPos(fhandle,0,0,0,0,0,swp_nozorder or swp_noactivate or swp_nosize or swp_nomove or swp_framechanged)
updateWindow(fhandle)
end if
end property
property TControl.Handle as hwnd
return fhandle
end property
property TControl.Handle (v as hwnd)
end property
constructor TControl
fvisible=1
fenabled=1
end constructor
/' MDIClient '/
function MDIClient.wndproc(dlg as hwnd,msg as uint,wparam as wparam,lparam as lparam) as lresult
dim as PControl sender=iif(creationdata,creationdata,cast(PControl,GetWindowLongPtr(dlg,GetClassLongPtr(dlg,gcl_cbwndextra)-sizeof(integer))))
dim as TMessage m=type(dlg,msg,wparam,lparam,0,sender)
if sender then
sender->fhandle=dlg
sender->Dispatch(m)
sender->Handler(m)
return m.result
else
sender=new MDIClient '''automation
sender->fhandle=dlg
sender->Dispatch(m)
sender->Handler(m)
return m.result
end if
return m.result
end function
function MDIClient.Register as integer
dim as wndclassex wcls
wcls.cbsize=sizeof(wcls)
if GetClassInfoEx(0,"MDIClient",@wcls) then
wcls.hinstance=instance
wcls.lpszclassname=@"MDIClient"
wcls.lpfnwndproc=@wndproc
wcls.cbwndextra+=sizeof(integer) :? wcls.cbwndextra,sizeof(integer)
return RegisterClassEx(@wcls)
end if
end function
sub MDIClient.CreateHandle
creationdata=this
dim as clientcreatestruct ccs
ccs.idfirstchild=&hff00
ccs.hwindowmenu=0
CreateWindowEx(fexstyle,classname,ftext,fstyle,fx,fy,fcx,fcy,iif(fparent,fparent->fhandle,0),cast(hmenu,fid),instance,@ccs)
if isWindow(fhandle) then
SetParent(fhandle,iif(fparent,fparent->fhandle,0))
ShowWindow(fhandle,iif(fvisible,sw_show,sw_hide))
end if
end sub
sub MDIClient.Dispatch(byref m as TMessage)
select case m.msg
case wm_nccreate
setwindowlongptr(m.dlg,getclasslongptr(m.dlg,gcl_cbwndextra)-sizeof(integer),cint(creationdata))
creationdata=0
case wm_create
end select
end sub
sub MDIClient.Handler(byref m as TMessage)
dim as wndclassex wcls
wcls.cbsize=sizeof(wcls)
if GetClassInfoEx(0,"MDIClient",@wcls) then m.result=CallWindowProc(wcls.lpfnwndproc,m.dlg,m.msg,m.wparam,m.lparam)
end sub
sub MDIClient.Free
if isWindow(fhandle) then
destroyWindow(fhandle)
fhandle=0
end if
end sub
operator MDIClient.cast as any ptr
return @this
end operator
constructor MDIClient
fstyle=mdis_allchildstyles or ws_childwindow or ws_hscroll or ws_vscroll
fcx=cw_usedefault
fcy=cw_usedefault
classname="MDIClient"
classancestor="MDIClient"
fid=&hff00
end constructor
/' Form '/
function Form.Register as integer
dim as wndclassex wcls
wcls.cbsize=sizeof(wcls)
wcls.hinstance=instance
wcls.lpszclassname=@"Form"
wcls.lpfnwndproc=@wndproc
wcls.hcursor=LoadCursor(0,idc_arrow)
wcls.hbrbackground=cast(hbrush,16)
wcls.cbwndextra+=sizeof(integer) :? wcls.cbwndextra
return RegisterClassEx(@wcls)
end function
sub Form.CreateHandle
creationdata=this
CreateWindowEx(fexstyle,classname,ftext,fstyle,fx,fy,fcx,fcy,iif(fparent,fparent->fhandle,0),0,instance,0)
if isWindow(fhandle) then
ShowWindow(fhandle,iif(fvisible,sw_show,sw_hide))
end if
end sub
sub Form.Dispatch(byref m as TMessage)
select case m.msg
case wm_nccreate
setwindowlongptr(m.dlg,getclasslongptr(m.dlg,gcl_cbwndextra)-sizeof(integer),cint(creationdata))
creationdata=0
case wm_create
/'for i as integer=0 to controlcount-1
if isWindow(fcontrols[i]->handle)=0 then fcontrols[i]->parent=this
next'/
end select
end sub
sub Form.Handler(byref m as TMessage)
if MDIClient then
m.result=DefFrameProc(m.dlg,iif(mdiclient,mdiclient->handle,0),m.msg,m.wparam,m.lparam)
else
if exstyle and ws_ex_mdichild=ws_ex_mdichild then
m.result=DefMDIChildProc(m.dlg,m.msg,m.wparam,m.lparam)
else
m.result=DefWindowProc(m.dlg,m.msg,m.wparam,m.lparam)
end if
end if
end sub
function Form.wndproc(dlg as hwnd,msg as uint,wparam as wparam,lparam as lparam) as lresult
dim as PControl sender=iif(creationdata,creationdata,cast(PControl,GetWindowLongPtr(dlg,GetClassLongPtr(dlg,gcl_cbwndextra)-sizeof(integer))))
dim as TMessage m=type(dlg,msg,wparam,lparam,0,sender,0)
if sender then
sender->fhandle=dlg
sender->Dispatch(m)
sender->Handler(m)
return m.result
else
sender=new Form '''automation
sender->fhandle=dlg
sender->Dispatch(m)
sender->Handler(m)
return m.result
end if
return m.result
end function
property Form.FormStyle as FormStyles
return fformstyle
end property
property Form.FormStyle (v as FormStyles)
fformstyle=v
end property
sub Form.Free
if isWindow(fhandle) then
destroyWindow(fhandle)
fhandle=0
end if
end sub
operator Form.cast as any ptr
return @this
end operator
constructor Form
fstyle=ws_overlappedwindow
fx=cw_usedefault
fy=cw_usedefault
fcx=cw_usedefault
fcy=cw_usedefault
classname="Form"
end constructor
/' Button '/
function Button.wndproc(dlg as hwnd,msg as uint,wparam as wparam,lparam as lparam) as lresult
dim as PControl sender=iif(creationdata,creationdata,cast(PControl,GetWindowLongPtr(dlg,GetClassLongPtr(dlg,gcl_cbwndextra)-sizeof(integer))))
dim as TMessage m=type(dlg,msg,wparam,lparam,0,sender)
if sender then
sender->fhandle=dlg
sender->Dispatch(m)
sender->Handler(m)
return m.result
else
sender=new Button '''automation
sender->fhandle=dlg
sender->Dispatch(m)
sender->Handler(m)
return m.result
end if
return m.result
end function
function Button.Register as integer
dim as wndclassex wcls
wcls.cbsize=sizeof(wcls)
if GetClassInfoEx(0,"button",@wcls) then
wcls.hinstance=instance
wcls.lpszclassname=@"button"
wcls.lpfnwndproc=@wndproc
wcls.cbwndextra+=sizeof(integer) :? wcls.cbwndextra,sizeof(integer)
return RegisterClassEx(@wcls)
end if
end function
sub Button.CreateHandle
creationdata=this
CreateWindowEx(fexstyle,classname,ftext,fstyle,fx,fy,fcx,fcy,iif(fparent,fparent->fhandle,0),cast(hmenu,fid),instance,0)
if isWindow(fhandle) then
SetParent(fhandle,iif(fparent,fparent->fhandle,0))
ShowWindow(fhandle,iif(fvisible,sw_show,sw_hide))
end if
end sub
sub Button.Dispatch(byref m as TMessage)
select case m.msg
case wm_nccreate
setwindowlongptr(m.dlg,getclasslongptr(m.dlg,gcl_cbwndextra)-sizeof(integer),cint(creationdata))
creationdata=0
case wm_create
end select
end sub
sub Button.Handler(byref m as TMessage)
dim as wndclassex wcls
wcls.cbsize=sizeof(wcls)
if GetClassInfoEx(0,"button",@wcls) then m.result=CallWindowProc(wcls.lpfnwndproc,m.dlg,m.msg,m.wparam,m.lparam)
end sub
sub Button.Free
if isWindow(fhandle) then
destroyWindow(fhandle)
fhandle=0
end if
end sub
operator Button.cast as any ptr
return @this
end operator
constructor Button
fstyle=ws_childwindow
fcx=75
fcy=25
classname="button"
classancestor="button"
end constructor
/' main program '/
MDIClient.register
Form.Register
Button.Register
dim as Form F
F.Parent=0
dim as MDIClient C
F.MDIClient=C
C.parent=F
dim as hmenu Menu=LoadMenu(instance,"mainmenu"),wm=getsubmenu(menu,0):? "wm=",wm
SetMenu(F.Handle,Menu)
DrawMenuBar(F.Handle)
dim as Form ptr Child
Child=new Form
child->style=ws_overlappedwindow
child->exstyle=ws_ex_mdichild
child->parent=F.MDIClient
Child=new Form
child->style=ws_overlappedwindow
child->exstyle=ws_ex_mdichild
child->parent=F.MDIClient
SendMessage(F.mdiclient->handle,wm_mdisetmenu,cint(menu),cint(wm))
SendMessage(F.mdiclient->handle,wm_mdirefreshmenu,0,0)
dim as Button B
B.Parent=F
? F.classname,F.classancestor
? B.classname,B.classancestor
dim as msg m
while GetMessage(@m,0,0,0)>0
TranslateMessage(@m)
DispatchMessage(@m)
wend