Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/jerdew5/orbworks.com/forum/includes/bbcode.php on line 472

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/jerdew5/orbworks.com/forum/includes/bbcode.php on line 472

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/jerdew5/orbworks.com/forum/includes/bbcode.php on line 472

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/jerdew5/orbworks.com/forum/includes/bbcode.php on line 472

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/jerdew5/orbworks.com/forum/includes/bbcode.php on line 472

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/jerdew5/orbworks.com/forum/includes/bbcode.php on line 472

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/jerdew5/orbworks.com/forum/includes/bbcode.php on line 472

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/jerdew5/orbworks.com/forum/includes/bbcode.php on line 472

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/jerdew5/orbworks.com/forum/includes/bbcode.php on line 472

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/jerdew5/orbworks.com/forum/includes/bbcode.php on line 472

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/jerdew5/orbworks.com/forum/includes/bbcode.php on line 472

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/jerdew5/orbworks.com/forum/includes/bbcode.php on line 472

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/jerdew5/orbworks.com/forum/includes/bbcode.php on line 472

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/jerdew5/orbworks.com/forum/includes/bbcode.php on line 472

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/jerdew5/orbworks.com/forum/includes/bbcode.php on line 472

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/jerdew5/orbworks.com/forum/includes/bbcode.php on line 472

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/jerdew5/orbworks.com/forum/includes/bbcode.php on line 472

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/jerdew5/orbworks.com/forum/includes/bbcode.php on line 472

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/jerdew5/orbworks.com/forum/includes/bbcode.php on line 472

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/jerdew5/orbworks.com/forum/includes/bbcode.php on line 472

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/jerdew5/orbworks.com/forum/includes/bbcode.php on line 472

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/jerdew5/orbworks.com/forum/includes/bbcode.php on line 472

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/jerdew5/orbworks.com/forum/includes/bbcode.php on line 472

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/jerdew5/orbworks.com/forum/includes/bbcode.php on line 472

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/jerdew5/orbworks.com/forum/includes/bbcode.php on line 472

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/jerdew5/orbworks.com/forum/includes/bbcode.php on line 472
[phpBB Debug] PHP Notice: in file /includes/functions.php on line 3368: Cannot modify header information - headers already sent by (output started at /includes/bbcode.php:472)
[phpBB Debug] PHP Notice: in file /includes/functions.php on line 3370: Cannot modify header information - headers already sent by (output started at /includes/bbcode.php:472)
[phpBB Debug] PHP Notice: in file /includes/functions.php on line 3371: Cannot modify header information - headers already sent by (output started at /includes/bbcode.php:472)
[phpBB Debug] PHP Notice: in file /includes/functions.php on line 3372: Cannot modify header information - headers already sent by (output started at /includes/bbcode.php:472)
OrbWorks Community Forum • View topic - Interest for new Ccontrols?

Interest for new Ccontrols?

Discuss PocketC for Palm OS (including Desktop Edition)

Postby stephane on Wed Jan 24, 2001 3:32 am

Hi all,

I've managed to "reverse-engineer" <img src=icon_smile_wink.gif border=0 align=middle> most of Ccontrols last week, and have been working on a few new controls since then, namely a "real" line-edit field, a progress bar (ok, <i>that</i> one's not a big deal <img src=icon_smile_tongue.gif border=0 align=middle>) and a category selector, which is a few days away from being finished.

The line edit is a bit limited (no multi-line, no highlighting, no popup keyboard) but it works. The category selection is almost the same as with the internal Palm apps. They both use the standard (?) Ccontrol commands for set/getcontent, additem, etc.

I don't know how many people actually <i>use</i> the original Ccontrols, and how many would like to see these new controls. If there is any interest, I will actually attempt to document the routines, and post it somewhere (is there a file area on this board?).

Even if there's no interest, I'd like to say that it's been a hell of a way to learn PocketC and the Desktop compiler! <img src=icon_smile.gif border=0 align=middle>

Cheers,



St?ɬ©phane
Stéphane
stephane
 
Posts: 71
Joined: Fri Jan 12, 2001 3:16 am
Location: Canada

Postby Velvis on Thu Jan 25, 2001 1:58 pm

I for one am very interested. I really like Ccontrols and my only complaint is lack of the authors availability. I found a couple of small bugs in the system but never heard from him. I also wish he would release the source code for the Ceditor program so it could be recompiled to ignore the hard/soft button buttons. It has been more than once that I been working for a while and accidently hit one of the soft buttons and Ceditor exited and I lost a ton of work.

Anyways in my opinion its the best GUI designer available for PocketC, and I would love to see further development.

Even if you dont publicly release your enhancements I'd love to try them out.

-Chris
Velvis
 
Posts: 226
Joined: Mon Dec 11, 2000 2:32 am

Postby Vilmos on Thu Jan 25, 2001 2:12 pm

I have actually been doing the same sort of thing. I have a single line edit field done using the CControls framework and have a multi-line one sort of working. Well it works but is way too slow. :) We should compare notes and see what we can come up with.

Vilmos
Vilmos
 
Posts: 174
Joined: Tue Dec 05, 2000 6:13 pm
Location: Canada

Postby stephane on Thu Jan 25, 2001 4:13 pm

Velvis: Unfortunately, (for you, if not for me <img src=icon_smile.gif border=0 align=middle> ) I'm not working on the GUI designer, just on the Ccontrols "core" code. If you still want to try out the new stuff, once I've polished it up a bit (and get my server up and running again..) I'll post it with a link to my web page.

Also, if the bugs you're referring to are within the Ccontrols source (again, not the GUI designer) let me know via email, maybe I can fix them.

Vilmos: I'm compiling a "quick reference" type documentation on what I've designed so far, and I'll email you the line edit code for your enjoyment <img src=icon_smile.gif border=0 align=middle>. I wouldn't mind looking at the code that you've designed as well, including the multi-line.

Cheers,



St?ɬ©phane
Stéphane
stephane
 
Posts: 71
Joined: Fri Jan 12, 2001 3:16 am
Location: Canada

Postby Velvis on Thu Jan 25, 2001 9:26 pm

I realize the problems I am having are with the GUI designer, I just wanted to post my support for ANY continued development of the code. Perhaps this may scare the original developer out of hiding and he can contribute or release the code for the Ceditor.

Either way I am interested in what you are working on.
Velvis
 
Posts: 226
Joined: Mon Dec 11, 2000 2:32 am

Postby Vilmos on Thu Jan 25, 2001 10:09 pm

As far as I know the bugs are out of the single line edit field. I'm posting the three memo files here. They are used like CControls with the specific arguments listed at the end of the first memo. The big problem is you can't use the popup keyboard.

The main procedure is commented out, remove the comments to run the simple demo, leave the comments in to use in other programs the way CControls is. Feel free to use this for whatever you like.
<pre id=code><font face=courier size=2 id=code>

// EditFields.c
include "EditFields2.c"
Egch(pointer p){
}
Edelh(pointer p){
int t1,t2,t3;
string s;
if (p[13]>=p[11]){
t1=p[11];t2=p[13];t3=p[10];}
else{
t1=p[13];t2=p[11];t3=p[12];}

s=strleft(*p[6],t1);
s=s+strright(*p[6],strlen(*p[6])-t2);
*p[6]=s;p[10]=t3;
}

Esetcontent(pointer p,string str){
*p[6]=str;}
string Egetcontent(pointer p){
return *p[6];}
Epend(pointer p){
pointer s;int sx,sy,ex,ey,l,i,c;
int t1, t2,t3,t4;
if ((!p[14]) || (!p[15])) return;
l=strlen(*p[6]);s=malloc(l);settype(s,l,"c");if(s==0){alert("Out of memory!");exit();}
for (i=0; i < l ;++i)
s[i]=substr(*p[6],i,1);
sx=penx();sy=peny();
if ((sx>=p[0]) && (sx<=p[0]+p[2])){
if ((sy>=p[1]) && (sy<=p[1]+12)){
if (p[5]==1){
if (sx>p[0]+textwidth(*p[6])-1) sx=p[0]+textwidth(*p[6])-1;
Esetins(p,sx);
while(pstate()){
ex=penx();ey=peny();
if (ex< p[0])ex=p[0];
if (ex>p[0]+textwidth(*p[6])-1)ex=p[0]+textwidth(*p[6])-1;
ex=ex-p[0];
c=0;i=0;
if(ex>3){
while(c<=ex){
c=c+textwidth(s[i]);++i;}
p[12]=c-1;p[13]=i;}
else{p[12]=p[13]=0;}
if(p[13]>p[11]){
t1=p[10];t2=p[11];t3=p[12];t4=p[13];}
else{t1=p[12];t2=p[13];t3=p[10];t4=p[11];}
textattr(0,1,0);c=0;i=0;
if(t2>0){
for (i=0;i< t2;++i){
text(p[0]+c,p[1],s[i]);
c=c+textwidth(s[i]);}
}
textattr(0,2,0);
if(t4>t2){
for(i=i;i<(t4);++i){
if(i< strlen(*p[6])){
text(p[0]+c,p[1],s[i]);
c=c+textwidth(s[i]);}}}
textattr(0,1,0);
if(i< l){
for(i=i;i< l;++i){
text(p[0]+c,p[1],s[i]);
c=c+textwidth(s[i]);}}

}
}
}
}
free(s);
}
Eevent(pointer p, int e){
if (e==0) return 0;
if (p<=0) return 0;
if (!p[15]) return 0;
if(e==2){ Epend(p);return 0;}
if (e==3){ Ein(p);return 0;}
if ((e==1) && (p[5])){ Egc(p);return 1;}
if (p[5]) Ede(p);
}
// Simple test to show two edit fields. You can edit them, and
// when done press any hardbutton to view the contents before
// the program quits.

/*

main(){
pointer Edit1,Edit2;
int e;
string str;
graph_on();hookhard(1);
// create the edit field like in CControls
// Einit(x,y,w,s,l,default string)
// x,y co-ordinates
// w width in pixels of the field
// s style 0 - plain, 1 - underlined, 2 - boxed
// l line colour 0 - white, 1 - black, 2 - gray.
// default string - the text you want to start in the field
Edit1=Einit(10,25,50,2,2,"Test");
Edit2=Einit(10,45,75,1,1,"");
Edraw(Edit1);Edraw(Edit2);
hookhard(1);
while (1){
e=event(2);
if (e>4) break;
Eevent(Edit1,e);
Eevent(Edit2,e);
sleep(5);
}
str=Egetcontent(Edit1);alert(str);
str=Egetcontent(Edit2);alert(str);
Edestroy(Edit1);Edestroy(Edit2);
}
*/

--------------------------------------------------

/$ EditFields2.c
include "EditField3.c"
Edelh(pointer p);
Egch(pointer p);
Einit(int x, int y, int w, int b, int l, string s){
pointer p,t;
p=malloc(16);
if (!p) return 0;
settype(p,16,'i');
p[0]=x; p[1]=y;
p[2]=w; p[3]=b; // width & box type
p[4]=l; p[5]=0; // col type & active
p[7]=0; // Timer util
p[ 8 ]=0; // Text gadget colour (b/w)
p[9]=1; // Inverse?
p[10]=-1;// insertion point pixels
p[11]=-1;// insertion point chars
p[12]=p[13]=-1;//start x,y / end x,y for highlight
p[14]=p[15]=1;//hide,active
t=malloc(1); settype(t,1,'s');
p[6]=t;
*p[6]=s; // String
return p;
}
Edestroy(pointer p){
free(p[6]);
free(p);
}
Edraw(pointer p){
if(p[13]>-1) return;
if ((!p[14]) || (!p[15]))return;
rect(0,p[0]-1,p[1]-1,p[0]+p[2]+1,p[1]+12+1,0);
if (p[3]==1)
line(p[4],p[0],p[1]+12,p[0]+p[2],p[1]+12);
else if(p[3]==2)
frame(p[4],p[0],p[1],p[0]+p[2],p[1]+12,0);
textattr(0,p[9],0);
text(p[0],p[1],*p[6]);
textattr(0,1,0);
}
Edl(pointer p){
if(p[10]==-1)
line(p[ 8 ],p[0]+textwidth(*p[6]),p[1],p[0]+textwidth(*p[6]),p[1]+10);
else
line(p[ 8 ],p[0]+p[10],p[1],p[0]+p[10],p[1]+10);
}

Esetins(pointer p,int x){
int w,l,c,i;
pointer s;
p[ 8 ]=0; Edl(p);
l=strlen(*p[6]);
s=malloc(l);
settype(s,l,'c');
for (i=0;i< l;i++){
s[i]=substr(*p[6],i,1);
}
x=x-p[0];
if(x<3){p[10]=0;p[11]=0;return;}
c=0;i=0;
while(c<=x){
c=c+textwidth(s[i]);i++;}
p[10]=c-1;free(s);
p[ 8 ]=1;p[11]=i;
}
int Ein(pointer p){
int x,y,switch,w;
if ((!p[14]) || (!p[15])) return 0;
w=textwidth(*p[6]);
switch=0;
x=penx();y=peny();
if ((x>=p[0]) && (x<=p[0]+p[2])){
if ((y>=p[1]) && (y<=p[1]+12)){
if ((p[5]==1) && (p[9]==1) && (x< w+p[0]-2)&& (p[13]==-1)){
Esetins(p,x);
}
else if((p[5]==1) && (p[9]==1) && (x>w+p[0]-2) && (p[13]==-1)){
p[9]=2;p[10]=-1;p[ 8 ]=0;p[11]=-1;
p[12]=-1;p[13]=-1;
}
else { p[9]=1;}
p[5]=1;p[ 8 ]=1;p[7]=ticks();
switch=1;
Edraw(p);Edl(p);
return 1;
}
}
if (!switch){ p[5]=0; p[ 8 ]=0; p[9]=1;p[12]=p[13]=p[10]=-1;
p[11]=-1;
Edl(p); Edraw(p);
return 0;}
}
Ede(pointer p){
int i;
i=ticks();
if (i-p[7]>65){
Edl(p);p[7]=i;
if (p[ 8 ]==0) {p[ 8 ]=1;return;}
if (p[ 8 ]==1) {p[ 8 ]=0;return;}
}
}

Edel(pointer p){
p[ 8 ]=0;
rect(0,p[0],p[1],p[0]+p[2],p[1]+12,0);
p[9]=1;*p[6]="";
Edraw(p);return;
}
Egc(pointer p){
int l;
char c;c=key();
if ((c==8) && (p[9]==2)){
Edel(p);
}
if((c==8) && (p[13]>-1)){
Edelh(p);p[13]=p[12]=-1;
Edraw(p);Edl(p);return;
}
if ((c==8) && (p[9]==1)){
p[ 8 ]=0;Edl(p);
textattr(0,0,0);
if(p[10]==-1){
text(p[0]+textwidth(*p[6])-textwidth(strright(*p[6],1)),p[1],strright(*p[6],1));
*p[6]=substr(*p[6],0,strlen(*p[6])-1);
textattr(0,1,0);
}
else if(p[10]>0){
c=substr(*p[6],p[11]-1,1);
p[10]=p[10]-textwidth(c);
if(p[10]==-1) p[10]=0;
--p[11];l=strlen(*p[6]);
*p[6]=strleft(*p[6],p[11])+strright(*p[6],l-(p[11]+1));
Edraw(p);
}
}
else if (textwidth(*p[6])+textwidth(c)>(p[2]-1)) return;
else if ((int)c>31 && (int)c<127){
if (p[13]>-1){
Edelh(p);p[12]=p[13]=-1;
Edraw(p);
}
if (p[9]==2)
Edel(p);
if(p[10]==-1){
*p[6]=*p[6]+c;
}
else if(p[11]>-1){
*p[6]=strleft(*p[6],p[11])+c+strright(*p[6],strlen(*p[6])-p[11]);
++p[11];p[10]=p[10]+textwidth(c);
}
textattr(0,1,0);
text(p[0],p[1],*p[6]);
}
else return;
p[ 8 ]=3;Edl(p);
}

---------------------------------------------------------------

/$ EditField3.c
Edraw(pointer p);
Edl(pointer p);
Ehide(pointer p){
rect(0,p[0]-1,p[1]-1,p[0]+p[2]+1,p[1]+12+1,0);
p[14]=0;p[5]=0;
}
Eshow(pointer p){
p[14]=1;
Edraw(p);
}
Eactivate(pointer p){
p[15]=1;
}
Edeactivate(pointer p){
p[5]=0;p[ 8 ]=0;p[9]=1;
p[10]=-1;p[11]=-1;
p[12]=p[13]=-1;Edl(p);
Edraw(p);p[15]=0;
}
</font id=code></pre id=code>


Edited by - Vilmos on 01/26/2001 18:13:58
Vilmos
 
Posts: 174
Joined: Tue Dec 05, 2000 6:13 pm
Location: Canada

Postby Vilmos on Thu Jan 25, 2001 10:23 pm

Heh what a pain. A [ 8 ] without the spaces gives you a <img src=icon_smile_8ball.gif border=0 align=middle>. Anyone know how to turn the graphics off? <img src=icon_smile_wink.gif border=0 align=middle>

Vilmos
Vilmos
 
Posts: 174
Joined: Tue Dec 05, 2000 6:13 pm
Location: Canada

Postby stephane on Fri Jan 26, 2001 3:02 am

Now I know why I use the desktop version of PocketC, and not the device's compiler.. I used to be able to write "squashed" code like this, but not anymore. <img src=icon_smile.gif border=0 align=middle>

Anyway, I've started indenting and spacing the code so I can read it through tomorrow, and found some problems:

function Esetins(), this line is missing bits I think:
for (i=0;i s[i]=substr(*p[6],i,1);

And same with function Ein():
if ((p[5]==1) && (p[9]==1) && (x Esetins(p,x);

I'm sure this has to do with the editor used for this Web board <img src=icon_smile_sad.gif border=0 align=middle>

If it's easier, just attach the code to an email, or post/send a link to it.

Btw, the parts I've seen as I've been "decoding" your code look interesting, I see you managed to use highlighting. I didn't want to jump into that myself just yet, afraid of the performance hit during execution. I'll be looking at your work in more detail tomorrow and see if I could add something like that to my routines. I also hope to send you what I've done so far, tomorrow as well.

Oh, and is there a moderator here? Should we be moving this thread to the Ccontrols GUI board? <img src=icon_smile_big.gif border=0 align=middle>

Cheers!

St?ɬ©phane

Edited by - stephane on 01/25/2001 21:09:18
Stéphane
stephane
 
Posts: 71
Joined: Fri Jan 12, 2001 3:16 am
Location: Canada

Postby Vilmos on Fri Jan 26, 2001 4:15 am

Hmm, this web board is a pain. I'll email the files to you and see what I can do about editing that message again tomorrow. I did get the highlighting to work. The field behaves just like a real edit field except for the popup keyboard. I've been getting tempted to write one for PocketC...I've gotten stalled on the multi-line edit field though. I haven't looked at any of this code in months! Thanks for reminding me and I hope you can use some of it.

Please do send your code I'd like to see another approach to it. CControls taught me an awful lot about C and PocketC. :)

Vilmos
Vilmos
 
Posts: 174
Joined: Tue Dec 05, 2000 6:13 pm
Location: Canada

Postby Vilmos on Fri Jan 26, 2001 4:23 am

Heh the code is indented and was formatted for the desktop, but the web board ate it.
*grumble*

Vilmos
Vilmos
 
Posts: 174
Joined: Tue Dec 05, 2000 6:13 pm
Location: Canada

Postby Velvis on Fri Jan 26, 2001 1:17 pm

If you get a chance please email me a copy of your code. christopherrflynn@hotmail.com

Thanks
Chris
Velvis
 
Posts: 226
Joined: Mon Dec 11, 2000 2:32 am

Postby Vilmos on Sat Jan 27, 2001 12:07 am

Wohoo! I've edited the heck out of that message and it now displays properly. To put code in you use the code button and get the tags...but that didn't work entirely. If you have a < and then some letters after it, the html gets uppity and messes up your line. So with lots of extra spaces you can now cut and paste the text into your respective editor. Of course the html removes the cr from the line so to test the code I had to paste into wordpad then copy it out of that into the PocketC desktop to get the proper line breaks, but at least the code is there. <img src=icon_smile_wink.gif border=0 align=middle>

...Finally!

The three memos have been tested and compiled. Hmm, didn't test the program but it did compile. Maybe I better do that too. Heheh.

Vilmos
Vilmos
 
Posts: 174
Joined: Tue Dec 05, 2000 6:13 pm
Location: Canada

Postby Power on Sun Feb 04, 2001 9:03 am

[quote]
I for one am very interested. I really like Ccontrols and my only complaint is lack of the authors availability. I found a couple of small bugs in the system but never heard from him.

hi my name is nelson... i have attempted to contact the author... and he was kind enough to provide me a source code copy of CEditor <img src=icon_smile_big.gif border=0 align=middle> (it's a big dizzy codes bunch of codes <img src=icon_smile_dead.gif border=0 align=middle> )... i'm now working it out since i told him i would add new features to it... which will help a lot of people there who use CControls to develop programs... since he did not provide a full comment on the code but rather on a as-is basis... i'm in the process decoding it by adding comments... hopefully i will post a new version of CEditor in this board in the future... i got the codes just a few days back <img src=icon_smile.gif border=0 align=middle>


Edited by - Power on 02/04/2001 03:28:55
Power
 
Posts: 31
Joined: Sun Feb 04, 2001 8:51 am
Location: Philippines

Postby Power on Sun Feb 04, 2001 9:25 am

i would like to let everyone know that finally after searching the web for people who are interested in CControls & CEditor it is quite a relief knowing others use CControls too...

Since the author have kindly provided me the source code of CEditor in the hope that i could made some contribution... at this momment in time i'm trying to make CEditor readble since in it's original form there ae no comments of any kind...

i will try to decode it (since i just got the codes just a few days back... maybe 5 days ago)to make it readable and hopefully release a new version in the future since it's a very good development tool and should continue to be so...

hopefully everybody will not mind if i will not release the code first since this code is not my property to give anyway...

will try t give some progress in a few weeks time, you support and suggestion is very much appreciated...

hope to see everybody soon
Power
 
Posts: 31
Joined: Sun Feb 04, 2001 8:51 am
Location: Philippines

Postby Velvis on Sun Feb 04, 2001 4:05 pm

Thats great news! I for one really think Ccontrols is great and would like newer features and a bug fixed copy of Ceditor.

Keep us posted!
Velvis
 
Posts: 226
Joined: Mon Dec 11, 2000 2:32 am

Next

Return to PocketC for Palm OS

Who is online

Users browsing this forum: No registered users and 4 guests

cron