void Smart_ggiFlush(void) { struct timeval tv_current; gettimeofday(&tv_current,NULL); if(Smart_ggiFlush_maxusec==0) { char *ptr=configvariable(&ARACHNEcfg,"GGI_MaxFrameRate",NULL); if(ptr) Smart_ggiFlush_maxusec=atoi(ptr); if(!ptr || Smart_ggiFlush_maxusec<=0 || Smart_ggiFlush_maxusec>100) Smart_ggiFlush_maxusec=10; Smart_ggiFlush_maxusec=1000000/ Smart_ggiFlush_maxusec; } if(tv_current.tv_sec!=tv_lastflush.tv_sec || tv_current.tv_usec-tv_lastflush.tv_usec>Smart_ggiFlush_maxusec) { ggiFlush(ggiVis); tv_lastflush.tv_sec=tv_current.tv_sec; tv_lastflush.tv_usec=tv_current.tv_usec; Forced_ggiFlush_request=0; } else Forced_ggiFlush_request=1; }
//initialize mouse int ImouseIni( int xmin, int ymin, int xmax, int ymax, int xstart, int ystart) { #ifdef GGI xg_mouserange_xmin=xmin; xg_mouserange_xmax=xmax; xg_mouserange_ymin=ymin; xg_mouserange_ymax=ymax; return 1; #else mouse_init("/dev/mouse",vga_getmousetype(),10); { int mscale=60; char *ptr=configvariable(&ARACHNEcfg,"SVGAlib_MouseScale",NULL); if(ptr) mscale=atoi(ptr); mouse_setscale(mscale); } mouse_setxrange(xmin,xmax); mouse_setyrange(ymin,ymax); mouse_setposition(xstart,ystart); return 1; #endif }
int ftpsession(struct Url *url,struct HTTPrecord *cache,char *uploadfile) { longword host; char str[256]; char buffer[BUFLEN+2]; tcp_Socket datasocket; word dataport=0; int rv=0,len; char *ptr,*datahostptr,datahost[80]; char isdir=0,retry=0;//,ascii=0; long total=0; //!!glennmcc: Nov 11, 2007 -- for 'dblp code' below int dblp=0; //!!glennmcc: end //!!glennmcc: Nov 13, 2007 -- for EZNOS2 fix below int eznos2=0; //!!glennmcc: end int log; if(!tcpip)return 0; free_socket(); if((!url->file[0] || url->file[strlen(url->file)-1]=='/') && !uploadfile) isdir=1; sprintf(str,msg_askdns,url->host); outs(str); GlobalLogoStyle=0; //SDL set resolve animation host=resolve_fn( url->host, (sockfunct_t) TcpIdleFunc ); //SDL // host=resolve( url->host ); if(!host) { DNSerr(url->host); return 0; } // if(!uploadfile) //!glennmcc: Oct 20, 2012 - commented-out to make upload log more verbose log=a_open("FTP.LOG",O_BINARY|O_WRONLY|O_CREAT|O_TRUNC,S_IREAD|S_IWRITE); GlobalLogoStyle=2; //SDL set connect animation if (!tcp_open( socket, locport(), host, url->port, NULL )) { sprintf(str,msg_errcon,url->host); outs(str); return 0; } sprintf(str,msg_con,url->host,url->port); outs(str); write(log,str,strlen(str)); write(log,"\r\n",2); sock_wait_established(socket, sock_delay, (sockfunct_t) TcpIdleFunc, &status); //SDL GlobalLogoStyle=1; //SDL set data animation sock_mode( socket, TCP_MODE_ASCII ); outs(MSG_LOGIN); do { sock_wait_input( socket, sock_delay, (sockfunct_t) TcpIdleFunc, &status ); //SDL sock_gets( socket, (unsigned char *)buffer, sizeof( buffer )); outs(buffer); write(log,buffer,strlen(buffer)); write(log,"\r\n",2); // printf("FTP daemon said>"); // puts(buffer); if ( *buffer != '2' && buffer[0]!=' ') goto quit; } while(buffer[3]=='-' || buffer[0]==' '); //continued message! if(!url->user[0]) ptr="anonymous"; else ptr=url->user; sprintf( str, "USER %s", ptr); write(log,str,strlen(str)); write(log,"\r\n",2); sock_puts(socket,(unsigned char *)str); sock_wait_input( socket, sock_delay, (sockfunct_t) TcpIdleFunc, &status ); //SDL sock_gets( socket, (unsigned char *)buffer, sizeof( buffer )); outs(buffer); write(log,buffer,strlen(buffer)); write(log,"\r\n",2); // printf("FTP daemon said>"); // puts(buffer); //!!glennmcc: May 11, 2005 //removed due to the fact that not all sites use '3' //see additional info below with respect to anonymous password // if ( *buffer != '3' ) goto quit; //!!glennmcc: end //open cache filename: //!glennmcc: Oct 20, 2012 - commented-out to make upload log more verbose // if(uploadfile) // strcpy(cache->locname,"FTP.LOG"); // else //!glennmcc end: Oct 20, 2012 { //!!glennmcc: Oct 22, 2008 -- strchr() was preventing the use of 'CachePath .\cache\' // ptr=strchr(cache->locname,'.'); ptr=strrchr(cache->locname,'.'); //!!glennmcc: end if(ptr) { strcpy(&ptr[1],"FTP"); strcpy(cache->rawname,cache->locname); } } cache->handle=a_open(cache->locname,O_BINARY|O_WRONLY|O_CREAT|O_TRUNC,S_IREAD|S_IWRITE); if(cache->handle<0) goto quit; strcpy(cache->mime,"text/plain"); if(url->password[0]) ptr=url->password; else { if(url->user[0] && !strcmp(url->host,AUTHENTICATION->host) && !strcmp(AUTHENTICATION->realm,"$ftp")) ptr=AUTHENTICATION->password; else { ptr=configvariable(&ARACHNEcfg,"FakeFTPeMail",NULL); if(!ptr || !strchr(ptr,'@')) { ptr=configvariable(&ARACHNEcfg,"eMail",NULL); if(!ptr) ptr="@"; } } } //!!glennmcc: May 11, 2005 //some sites do not require a password after 'anonymous' //therefer, this entire block is now within this 'if()' so that //the password (email address), will only be sent if asked for //!!glennmcc: Nov 13, 2007 -- EZNOS2 says "Enter PASS command" if (strstr(buffer,"sword") || strstr(buffer,"Enter PASS command")) //if (strstr(buffer,"sword"))//original line { sprintf( str, "PASS %s", ptr); sock_puts(socket,(unsigned char *)str); write(log,str,strlen(str)); write(log,"\r\n",2); }//!!glennmcc: inserted Mar 02, 2008 //Some servers need the following 'do/while' section, //therefore, only the section above for sending the password needs to be //'blocked' when no password was requested. do { sock_wait_input( socket, sock_delay, (sockfunct_t) TcpIdleFunc, &status ); //SDL sock_gets( socket, (unsigned char *)buffer, sizeof( buffer )); outs(buffer); write(log,buffer,strlen(buffer)); write(log,"\r\n",2); // printf("FTP daemon said>"); // puts(buffer); if (strstr(buffer,"Enter PASS command")) eznos2=1; if (*buffer != '2' && buffer[0]!=' ' && !eznos2) { write(cache->handle,buffer,strlen(buffer)); rv=1; goto quit; } else if ((buffer[3]=='-' || buffer[0]==' ') && (isdir || uploadfile)) { strcat(buffer,"\r\n"); rv=1; write(cache->handle,buffer,strlen(buffer)); } } while(buffer[3]=='-' || buffer[0]==' ' || buffer[0]=='3'); //continued message! //}//!!glennmcc: end May 11, 2005 -- removed on Mar 02, 2008 //ask server where we have to connect: sock_puts(socket,(unsigned char *)"PASV"); sock_wait_input( socket, sock_delay, (sockfunct_t) TcpIdleFunc, &status ); //SDL sock_gets( socket, (unsigned char *)buffer, sizeof( buffer )); outs(buffer); write(log,buffer,strlen(buffer)); write(log,"\r\n",2); // printf("FTP daemon said>"); // puts(buffer); //2xx Entering passive mode (a,b,c,d,x,y) if ( *buffer != '2' ) goto quit; datahostptr=strchr(buffer,'('); //!!glennmcc: Nov 13, 2007 -- EZNOS2 doesn't enclose the info in () //therefore, if '(' is not found... look for the last 'space'. if(!datahostptr) {datahostptr=strrchr(buffer,' '); eznos2=1;} //if that still fails... 'quit' //!!glennmcc: end if(!datahostptr) goto quit;//original line ptr=++datahostptr; { int carka=0; char *portptr=NULL; while(*ptr) { if(*ptr==',') { carka++; if(carka<4) *ptr='.'; else if(carka==4) { *ptr='\0'; portptr=ptr+1; } else if (carka==5) { *ptr='\0'; dataport=256*(word)atoi(portptr); // ,x,y -> 256*x+y portptr=ptr+1; //!!glennmcc: Nov 13, 2007 -- part of above fix for EZNO2 info not in () if(eznos2) dataport+=atoi(portptr); // ,x,y -> 256*x+y //!!glennmcc: end } } else if(*ptr==')' && portptr) { //!!glennmcc: Nov 11, 2007 -- some servers have double ')' // at the end of the port address info... // this 'dblp code' will prevent that from adding the final set twice //eg: (99,167,219,186,234,255)) instead of.... (99,167,219,186,234,255) //without this fix ... 255 gets added a 2nd time and //we end-up-with... port 60414 instead of the correct port of 60159 *ptr='\0'; if(!dblp)//!!glennmcc: Nov 11, 2007 dataport+=atoi(portptr); // ,x,y -> 256*x+y dblp=1;//!!glennmcc: Nov 11, 2007 } ptr++; } } if(!dataport) goto quit; //!!glennmcc: Aug 31, 2009 //EZNOS2 sends the IP of the machine on a router as datahost //therefore we need to go back to the original host if(eznos2) { makestr(datahost,url->host,79); outs(datahost); Piip(); } else //!!glennmcc:end makestr(datahost,datahostptr,79);//original line retry: if(isdir) { if(url->file[0]) { //!!glennmcc: Oct 15, 2007 -- fix problems with CWD on FTP servers //which interpret the leading '/' as an attempted CD to 'root' if(url->file[0]=='/') sprintf( str, "CWD %s", url->file+1); else //!!glennmcc: end Oct 15, 2007 sprintf( str, "CWD %s", url->file); sock_puts(socket,(unsigned char *)str); do { sock_wait_input( socket, sock_delay, (sockfunct_t) TcpIdleFunc, &status ); //SDL sock_gets( socket, (unsigned char *)buffer, sizeof( buffer )); outs(buffer); //!!glennmcc: Apr 08, 2005 -- commented-out this block // to fix the problem of 'broken dir listing' when the // 'FTP welcome message' contains linefeeds // such as at ftp://ftp.cdrom.com/.2/simtelnet/ /* if ( *buffer != '2' && buffer[0]!=' ') { write(cache->handle,buffer,strlen(buffer)); rv=1; goto quit; } else if (buffer[3]=='-' || buffer[0]==' ') */ //!!glennmcc: end { strcat(buffer,"\r\n"); rv=1; write(cache->handle,buffer,strlen(buffer)); } } //!!glennmcc: Apr 08, 2005 -- added a test for !=' ' which is also // needed for the same fix at ftp://ftp.cdrom.com/.2/simtelnet/ while(buffer[3]=='-' || buffer[3]!=' ' || buffer[0]==' '); //continued message! // while(buffer[3]=='-' || buffer[0]==' '); //continued message! //!!glennmcc: end } strcpy(cache->mime,"ftp/list"); sprintf( str, "LIST"); } else { char *fnameptr; char mimestr[80]="ftp/binary"; fnameptr=strrchr(url->file,'/'); if(!fnameptr) { fnameptr=strrchr(url->file,'\\'); if(!fnameptr) fnameptr=url->file; else fnameptr++; } else fnameptr++; sprintf( str, "TYPE I"); if(fnameptr) { char ext[5]; strcpy(mimestr,"file/"); strncat(mimestr,fnameptr,70); mimestr[79]='\0'; get_extension(mimestr,ext); if(!strncmpi(ext,"TXT",3) || !strncmpi(ext,"HTM",3)) { //!!glennmcc: begin June 09, 2002 //optionally upload TXT and HTM in binary mode ptr=configvariable(&ARACHNEcfg,"UseBinaryFTP",NULL); if(!ptr || toupper(*ptr)=='N') //!!glennmcc: end sprintf( str, "TYPE A"); // ascii=1; } } strcpy(cache->mime,mimestr); sock_puts(socket,(unsigned char *)str); write(log,str,strlen(str)); write(log,"\r\n",2); sock_wait_input( socket, sock_delay, (sockfunct_t) TcpIdleFunc, &status ); //SDL sock_gets( socket, (unsigned char *)buffer, sizeof( buffer )); outs(buffer); write(log,buffer,strlen(buffer)); write(log,"\r\n",2); // printf("FTP daemon said>"); // puts(buffer); if ( *buffer != '2' || uploadfile) { strcat(buffer,"\n"); write(cache->handle,buffer,strlen(buffer)); } if ( *buffer != '2' ) { rv=1; goto quit; } if(!uploadfile) //!!glennmcc: Oct 17, 2007 -- fix problems with FTP servers //which interpret the leading '/' as an attempted CD to 'root' if(url->file[0]=='/') sprintf( str, "RETR %s", url->file+1); else sprintf( str, "RETR %s", url->file); //original single line above this comment //!!glennmcc: end else sprintf( str, "STOR %s", url->file); } sock_puts(socket,(unsigned char *)str); write(log,str,strlen(str)); write(log,"\r\n",2); //!!glennmcc: Oct 19, 2008 -- back to original fix //!!glennmcc: Nov 15, 2007 -- always 'close' the connection when done //with both dir listings and file downloads //Apr 10, 2007 fix did it only for dir listings if(isdir || strstr(str,"RETR")) //if(isdir) sock_puts(socket,(unsigned char *)"QUIT");//!!glennmcc: Apr 10, 2007 //!!glennmcc: end if(!retry) { //get file using datahost & dataport GlobalLogoStyle=0; //SDL set resolve animation host=resolve_fn( datahost, (sockfunct_t) TcpIdleFunc ); //SDL // host=resolve( datahost ); if(!host) goto quit; GlobalLogoStyle=2; //SDL set connect animation if (!tcp_open( &datasocket, locport(), host, dataport, NULL )) { sprintf(str,msg_errcon,datahost); outs(str); goto quit; } sprintf(str,msg_con,datahost,dataport); outs(str); write(log,str,strlen(str)); write(log,"\r\n",2); //wait for datasocket to open: sock_wait_established(&datasocket, sock_delay, (sockfunct_t) TcpIdleFunc, &status); //SDL //!!glennmcc: Sep 27, 2008 -- increase D/L speed on cable & DSL //many thanks to 'mik' for pointing me in the right direction. :) { #ifdef DEBUG char sp[80]; sprintf(sp,"Available stack = %u bytes",_SP); outs(sp); Piip(); Piip(); #endif if(_SP>(1024*SETBUFSIZE)) { char setbuf[1024*SETBUFSIZE]; sock_setbuf(&datasocket, (unsigned char *)setbuf, 1024*SETBUFSIZE); } } //!!glennmcc: end GlobalLogoStyle=1; //SDL set data animation } //wait for "110 openning connection" (or "550 ....error....") sock_wait_input( socket, sock_delay, (sockfunct_t) TcpIdleFunc, &status ); //SDL sock_gets( socket, (unsigned char *)buffer, sizeof( buffer )); outs(buffer); write(log,buffer,strlen(buffer)); write(log,"\r\n",2); // printf("FTP daemon said>"); // puts(buffer); if ( *buffer != '1' || uploadfile) { strcat(buffer,"\n"); write(cache->handle,buffer,strlen(buffer)); } if ( *buffer != '1' ) { if(!strncmp(buffer,"550",3) && !retry) { retry=1; isdir=1-isdir; if(isdir) strcat(url->file,"/"); else { int i=strlen(url->file); if(i>0 && url->file[i-1]=='/') url->file[i-1]='\0'; } goto retry; } strcpy(cache->mime,"text/plain"); rv=1; goto dataquit; } if(!uploadfile) //-------------------------------------- download --------------- { while ( 1 ) { xChLogoTICK(1); if(GUITICK()) if(GLOBAL.gotolocation || GLOBAL.abort) goto dataquit; if (sock_dataready( &datasocket )) { len = sock_fastread( &datasocket, (unsigned char*)buffer, BUFLEN ); write(cache->handle,buffer,len); total+=len; sprintf(str,MSG_BYTESR,MSG_DOWNLD,total); outs(str); } else sock_tick( &datasocket, &status ); //shift TCP/IP } } else //-------------------------------------- upload ------------------ { int f,lenread,done; long length; char pom[256]; /* if(ascii) f=a_sopen(uploadfile,O_RDONLY|O_TEXT, SH_DENYNO, S_IREAD); else*/ f=a_sopen(uploadfile,O_RDONLY|O_BINARY, SH_DENYNO, S_IREAD); if(f<0) goto dataquit; lenread=done=0; length=0l; { long filel=a_filelength(f); while(1) { sprintf(pom,MSG_UPLOAD,length,filel); outs(pom); //!!glennmcc:Oct 23, 2008 -- 'reversed the logic' // to keep from overflowing at 21megs if(filel>100) percentbar((int)(length/(filel/100))); // percentbar((int)(100*length/filel)); lenread=a_read(f,buffer,BUFLEN); length+=lenread; if(lenread<=0) done=1; //wait until we can write to socket: while(sock_tbleft(&datasocket)<lenread) //SDL // while( datasocket.datalen > 1024) { sock_tick(&datasocket,&status); xChLogoTICK(1); // animation of logo if(GUITICK()) goto dataquit; } if(done) { sock_close( &datasocket ); a_close(f); goto dataclose; } sock_fastwrite(&datasocket,(unsigned char *)buffer,lenread); sock_tick(&datasocket,&status); }//loop } } dataquit: //!!glennmcc: Nov 15, 2007 -- removed sock_abort because it was // sometimes preventing the connection from being closed, // therefore preventing access to several files within a short time // due to too many connections open from the same IP // sock_abort( &datasocket );//original line //!!glennmcc: end dataclose: outs(MSG_CLOSE); sock_puts(socket,(unsigned char *)"QUIT");//!!glennmcc: Dec 04, 2006 sock_wait_closed( &datasocket, sock_delay, (sockfunct_t) TcpIdleFunc, &status ); //SDL if(uploadfile) { sock_wait_input( socket, sock_delay, (sockfunct_t) TcpIdleFunc, &status ); //SDL sock_gets( socket, (unsigned char *)buffer, sizeof( buffer )); outs(buffer); } quit: sock_puts(socket,(unsigned char *)"QUIT"); sock_close( socket ); closing[socknum]=1; sock_keepalive[socknum][0]='\0'; // sock_wait_closed( socket, sock_delay, NULL, &status ); //we will better wait because we are about to deallocate datasocket sock_err: switch (status) { case 1 : /* foreign host closed */ write(log,MSG_CLOSE,strlen(MSG_CLOSE)); write(log,"\r\n",2); close(log); break; case -1: /* timeout */ sprintf(str,MSG_TCPERR, sockerr(socket)); outs(str); write(log,str,strlen(str)); write(log,"\r\n",2); close(log); break; } if(total) { cache->knowsize=1; cache->size=total; rv=1; } if(cache->handle>=0) { a_close(cache->handle); rv=1; } return rv; }
void MemInfo(char forced) { #ifndef TEXTONLY char str[30]; unsigned long ldsp; int y=endvtoolbar(); int color; long value; if(forced && meminfovisible) { if(arachne.framescount) { p->activeframe=0; redrawHTML(REDRAW_NO_MESSAGE,REDRAW_CREATE_VIRTUAL); } else redrawHTML(REDRAW_WITH_MESSAGE,REDRAW_VIRTUAL); meminfovisible=0; return; } if((x_maxx()<640 || arachne.GUIstyle || fullscreen || customerscreen || fixedfont) /*fixedfont=printing hack*/ && !forced) return; if(arachne.GUIstyle) meminfovisible=1; mouseoff(); y+=2; Box3D(x_maxx()-150,y,x_maxx()-1,x_maxy()-17); y+=1; htmlfont(0,NORMAL); if(forced && lastinfo && endvtoolbar()>=x_maxy()-14*(fonty(0,NORMAL)-1)) goto moreinfo; #ifndef POSIX //DOS memory value=farcoreleft();//>>10; //!!glennmcc Oct 09, 2004 don't round off to KB sprintf(str,"%4lu",value); if(value<50000l || memory_model==0) { color=2; strcat(str,"[!!!]"); } else if(memory_model==2) { color=3; strcat(str,"[+]"); } else { color=0; strcat(str,"[?]"); } MemInfoLine("Dos mem",str,color,&y);//!!glennmcc Oct 09, 2004 don't round off to KB //XMS used sprintf(str,"%5lu",mem_all_xmem()); MemInfoLine("Used XMS (KB)",str,0,&y); #endif//posix //XSWAP free ldsp=ie_free()>>10; sprintf(str,"%4ld",ldsp); if(ldsp<500) { color=2; strcat(str,"[!!!]"); } else color=0; MemInfoLine("Free xSwap (KB)",str,color,&y); //XSWAP used sprintf(str,"%4ld",ie_used()>>10); MemInfoLine("Used xSwap (KB)",str,0,&y); #ifndef POSIX //disk space //!!glennmcc: Nov 25, 2005 -- check space on the cache drive //and the current drive .... display both when not the same drive //when cache is on local drive, display only one #ifndef NOKEY { ldsp=lastdiskspace(configvariable(&ARACHNEcfg,"CachePath",NULL))>>20; //local & cache /**/ if(ldsp==(localdiskspace()>>20)) sprintf(str,"%4lu",ldsp); else sprintf(str,"%4lu %4lu",localdiskspace()>>20,ldsp); /**/ //temp & cache /* if(ldsp==(lastdiskspace(getenv("TEMP"))>>20)) sprintf(str,"cache_%4lu",ldsp); else sprintf(str,"temp_%4lu cache_%4lu",lastdiskspace(getenv("TEMP"))>>20,ldsp); */ }
int protocol_arachne(struct HTTPrecord *cacheitem,struct Url *url,int *returnvalue) { char *value; #ifndef NOTCPIP #ifndef CLEMTEST if(!strncmpi(url->file,"ftp-",4)) { char back=1; if(!strncmpi(&(url->file[4]),"send",4)) back=0; strcpy(url->user,configvariable(&ARACHNEcfg,"FTPusername",NULL)); strcpy(url->password,configvariable(&ARACHNEcfg,"FTPpassword",NULL)); strcpy(url->host,configvariable(&ARACHNEcfg,"FTPserver",NULL)); strcpy(url->file,configvariable(&ARACHNEcfg,"FTPpath",NULL)); url->port=21; if(tcpip) ftpsession(url,cacheitem,LASTlocname); if(!GLOBAL.gotolocation) { if(back) goback(); else strcpy(GLOBAL.location,p->htmlframe[p->activeframe].cacheitem.URL); arachne.target=p->activeframe; } GLOBAL.reload=0; GLOBAL.postdata=0; return GOTO_IVEGOTNEWURL; } #endif #endif #ifndef POSIX if(!strcmpi(url->file,"restart")) { char buf[IE_MAXLEN]; char *ptr=getenv("ASETUP"); if(ptr && !strcmp(ptr,"inst")) //special case - "Finish Setup" button return GOTO_USEREND; arachne.target=0; //!!! strcpy(buf,"@arachne"); if(tcpip) strcat(buf," -o\n"); else strcat(buf,"\n"); unlink("lock"); *returnvalue=willexecute(buf); return GOTO_END; } else #endif ///!!!! ///POSIX restart: TerminateArachne + exec.. (argv[0],argv[0],NULL) ! #ifndef NOTCPIP if(!strcmpi(url->file,"dialpage")) { value=configvariable(&ARACHNEcfg,"DialPage",NULL); //!!glennmcc: Begin Feb 06, 2005 -- default to ppp_init.htm //if 'DialPage' is missing from arachne.cfg if(!value) value="file:ppp_init.htm"; //also use ppp_init.htm if DialPage does not begin with file:ppp //indicating that it has been changed from one of the 4 included dialpages //which are... ppp_init.htm, pppenhan.htm, pppframe.htm or ppp_fast.htm //value=strlwr(value); if(!strstr(value,"file:ppp")) value="file:ppp_init.htm"; //!!glennmcc: end if(value) { strcpy(GLOBAL.location,value); AnalyseURL(GLOBAL.location,url,IGNORE_PARENT_FRAME); } } else #ifndef CLEMTEST if(!strcmpi(url->file,"dialer")) { *returnvalue=willexecute(ArachneDIAL()); return GOTO_END; } else if(!strcmpi(url->file,"hangup")) { char buf[IE_MAXLEN]; arachne.target=0; //!!! outs(MSG_HANGUP); if(reg && tcpip) PPPtimelog(); process_form(0,IE_NULL); //updateovat Arachne.Cfg sprintf(buf,"%s\nif exist PPP.LOG del PPP.LOG\n",configvariable(&ARACHNEcfg,"Hangup",NULL)); value=configvariable(&ARACHNEcfg,"ExitOnHangup",NULL); if(!(value && toupper(*value)=='Y')) strcat(buf,"@arachne -c\n"); else exitmsg(); *returnvalue=willexecute(buf); return GOTO_END; } else #endif #endif //NOTCPIP if(!strncmpi(url->file,"exit",4)) { if(url->file[4]=='=' || url->file[4]=='?') *returnvalue=atoi(&(url->file[5])); return GOTO_USEREND; } return 0; }
int protocol_nohttp(struct HTTPrecord *cacheitem,struct Url *url, unsigned *cacheitem_status, XSWAP *cacheitem_writeadr) { char *value; #ifndef CLEMTEST #ifdef OVRL #ifndef XTVERSION //---------------------------------------------------------------- finger: if(!strcmpi(url->protocol,"finger")) //------------------------------------------------------------------------ { //finger to cache *cacheitem_writeadr=Write2Cache(url,cacheitem,1,1); strcpy(cacheitem->mime,"finger/out"); if(xfinger(url,cacheitem,url->user)) { if(GLOBAL.abort) return GOTO_ABORT; UpdateInCache(*cacheitem_writeadr,cacheitem); *cacheitem_status=REMOTE; } else { GLOBAL.reload=0; return GOTO_ABORT; } } else if(!strcmpi(url->protocol,"news") || !strcmpi(url->protocol,"nntp") ) { //finger to cache *cacheitem_writeadr=Write2Cache(url,cacheitem,1,1); if(!url->host[0]) { value=configvariable(&ARACHNEcfg,"NNTPserver",NULL); if(value) { makestr(url->host,value,STRINGSIZE-1); } } if(!url->file[0] || url->file[0]=='/' && !url->file[1]) strcpy(url->file,"LIST"); strcpy(cacheitem->mime,"news/list"); if(xfinger(url,cacheitem,url->file)) { if(GLOBAL.abort) return GOTO_ABORT; UpdateInCache(*cacheitem_writeadr,cacheitem); *cacheitem_status=REMOTE; } else { GLOBAL.reload=0; return GOTO_ABORT; } } //---------------------------------------------------------------- gopher: else if(!strcmpi(url->protocol,"gopher")) //------------------------------------------------------------------------ { char *selector; char dummy[IE_MAXLEN+1]; int plugin=externalprotocol(url->protocol,dummy); if(plugin) return GOTO_EXTERNAL; //finger to cache *cacheitem_writeadr=Write2Cache(url,cacheitem,1,1); selector=&(url->file[1]); if(!url->file[1]) { strcpy(cacheitem->mime,"gopher/1"); } else if(url->file[2]=='/') { sprintf(cacheitem->mime,"gopher/%c",url->file[1]); if(url->file[1]=='7' && !strchr(url->file,'?')) //search return GOTO_TRYPLUGIN; selector=&(url->file[3]); } if(xfinger(url,cacheitem,selector)) { if(GLOBAL.abort) return GOTO_ABORT; UpdateInCache(*cacheitem_writeadr,cacheitem); *cacheitem_status=REMOTE; } else { GLOBAL.reload=0; return GOTO_ABORT; } } else #endif //XTVERSION #endif //statical version //------------------------------------------------------------------- ftp: if(!strcmpi(url->protocol,"ftp")) //------------------------------------------------------------------------ { char *ptr; char dummy[IE_MAXLEN+1]; int plugin=externalprotocol(url->protocol,dummy); if(plugin) return GOTO_EXTERNAL; if(url->user[0] && !url->password[0] && (strcmp(url->host,AUTHENTICATION->host) || strcmp(url->user,AUTHENTICATION->user) || strcmp(AUTHENTICATION->realm,"$ftp"))) { sprintf(cacheitem->locname,"%s%sftplogin.ah",sharepath,GUIPATH); strcpy(AUTHENTICATION->host,url->host); return GOTO_LOCAL_HTML; } ptr=configvariable(&ARACHNEcfg,"UseFTPproxy",NULL); if(ptr && toupper(*ptr)!='N') { char *no4all=configvariable(&ARACHNEcfg,"NoFTPproxy4all",NULL); ptr=configvariable(&ARACHNEcfg,"NoFTPproxy",NULL); if((!ptr || !strstr(strlwr(ptr),strlwr(url->host) )) && (!no4all || !strstr(strlwr(url->host), strlwr(no4all)) ) ) return GOTO_PROXY; } //ftp to cache *cacheitem_writeadr=Write2Cache(url,cacheitem,1,1); if(ftpsession(url,cacheitem,NULL)) { if(GLOBAL.abort) return GOTO_ABORT; UpdateInCache(*cacheitem_writeadr,cacheitem); *cacheitem_status=REMOTE; } else { GLOBAL.reload=0; return GOTO_ABORT; } } //------------------------------------------------------------------ pop3: else if(!strcmpi(url->protocol,"pop3")) //------------------------------------------------------------------------ { char dele=1,log=0; if(!url->host[0]) { value=configvariable(&ARACHNEcfg,"POP3server",NULL); if(value) makestr(url->host,value,STRINGSIZE-1); } if(!url->user[0]) { value=configvariable(&ARACHNEcfg,"POP3username",NULL); if(value) makestr(url->user,value,STRINGSIZE-1); } //Draw title and URL (without password): MakeTitle(MSG_MAILDL); url2str(url,GLOBAL.location); SetInputAtom(&URLprompt,GLOBAL.location); DrawTitle(0); add2history(GLOBAL.location); //Get password and other settings: if(!url->password[0]) { value=configvariable(&ARACHNEcfg,"POP3password",NULL); if(value) makestr(url->password,value,PASSWORDSIZE-1); } value=configvariable(&ARACHNEcfg,"KeepOnServer",NULL); if(value && toupper(*value)=='Y') dele=0; value=configvariable(&ARACHNEcfg,"POP3log",NULL); if(value && toupper(*value)=='Y') log=1; //POP3 download is performed here: if(!xpopdump(url,dele,log)) { sprintf(p->htmlframe[0].cacheitem.locname,"%s%serr_pop3.ah",sharepath,GUIPATH); return GOTO_ERROR; } else if(arachne.scriptline==0) { value=configvariable(&ARACHNEcfg,"AfterPOP3",NULL); if(!value) strcpy(GLOBAL.location,"file://inbox.dgi"); else strcpy(GLOBAL.location,value); GLOBAL.reload=RELOAD_CURRENT_LOCATION; return GOTO_IVEGOTNEWURL; } else return GOTO_READSCRIPT; } //------------------------------------------------------------------ smtp: else if(!strcmpi(url->protocol,"smtp")) //------------------------------------------------------------------------ { char helo=1,log=0; if(!url->host[0]) { value=configvariable(&ARACHNEcfg,"SMTPserver",NULL); if(value) makestr(url->host,value,STRINGSIZE-1); } //!!glennmcc: Feb 13, 2006 -- 'SendHelo' is more logical ;-) value=configvariable(&ARACHNEcfg,"SendHELO",NULL); if(!value || toupper(*value)!='N') helo=1; else helo=0; // value=configvariable(&ARACHNEcfg,"NoHELO",NULL); // if(value && toupper(*value)=='Y') helo=0; //!!glennmcc: end value=configvariable(&ARACHNEcfg,"SMTPlog",NULL); if(value && toupper(*value)=='Y') log=1; //!!glennmcc: begin Nov 09, 2003 --- for Authenticated SMTP //!!glennmcc: Feb 17, 2006 -- moved down below /* value=configvariable(&ARACHNEcfg,"UseAuthSMTP",NULL); if(!value || toupper(*value)!='N') helo=2; */ //!!glennmcc: end //!!glennmcc: begin Apr 30, 2004 --- for Authenticated SMTP value=configvariable(&ARACHNEcfg,"AuthSMTPusername",NULL); //!!glennmcc: Sept 17, 2004 // changed so that "email" will always get used for "mail from" // if(value) makestr(url->user,value,STRINGSIZE-1); if(value) makestr(url->authuser,value,STRINGSIZE-1); //!!glennmcc: end value=configvariable(&ARACHNEcfg,"AuthSMTPpassword",NULL); //!!glennmcc: Feb 17, 2006 -- switch to new variable 'authpassword' if(value) makestr(url->authpassword,value,PASSWORDSIZE-1); //if(value) makestr(url->password,value,STRINGSIZE-1); //!!glennmcc: end //!!glennmcc: Feb 17, 2006 -- switch to new variable 'authpassword' if(strlen(url->authuser)>0 && strlen(url->authpassword)>0 && strstr(configvariable(&ARACHNEcfg,"UseAuthSMTP",NULL),"Yes") ) helo=2; else helo=1; //!!glennmcc: end if(!url->user[0]) { value=configvariable(&ARACHNEcfg,"eMail",NULL); makestr(url->user,value,STRINGSIZE-1); } if(!url->file[0] || !url->file[1] ) //stmp: or smtp:/ { value=configvariable(&ARACHNEcfg,"MailPath",NULL); if(value) { sprintf(url->file,"/%s*.TBS",value); } } //Draw title and URL: MakeTitle(MSG_MAILUP); url2str(url,GLOBAL.location); SetInputAtom(&URLprompt,GLOBAL.location); DrawTitle(0); add2history(GLOBAL.location); //SMTP upload is performed here: if(!xsendmail(url,helo,log)) { sprintf(p->htmlframe[0].cacheitem.locname,"%s%serr_smtp.ah",sharepath,GUIPATH); return GOTO_ERROR; } else if(arachne.scriptline==0) { if(strchr(url->file,'*') || GLOBAL.mailaction & MAIL_OUTBOXNOW) { value=configvariable(&ARACHNEcfg,"AfterSMTP",NULL); if(!value) strcpy(GLOBAL.location,"file://outbox.dgi"); else strcpy(GLOBAL.location,value); GLOBAL.reload=RELOAD_CURRENT_LOCATION; } else { //!!glennmcc: Feb 27, 2005 // since 'smtp:' is not being saved into history, 2 goback()s when we hit // 'send mail now' on any of the mail compose screens ends-up taking us // back one step too far. // Therefore, we only goback once when it's not being sent 'on the spot' if(!strstr(GLOBAL.location,"smtp:")) goback(); //return to mailto: page... //#ifdef NOKEY // goback(); //#endif //!!glennmcc: end goback(); //return to page with <A HREF=mailto:...> tag... GLOBAL.postdata=0; // RAY: This is done automaticaly now for inbox and outbox, // see guivent.c // if(!strcmp(GLOBAL.location,"file://outbox.dgi")) // GLOBAL.reload=RELOAD_CURRENT_LOCATION; // else //Ray: end GLOBAL.reload=NO_RELOAD; } return GOTO_IVEGOTNEWURL; } else return GOTO_READSCRIPT; } else #endif //CLEMTEST //--------------------------------------------------------------- error? return UNKNOWN_PROTOCOL; #ifndef CLEMTEST return CONTINUE_TO_RENDER; #endif //CLEMTEST }
//analyza PPP logu -> ziskani IP adresy //!!JdS: 2003/12/7 { // Rewritten so that 'ppplogtime' can also be initialized when // using BOOTP via a dial-up connection. See also ArachneTCPIP(). //!!JdS: 2003/12/7 } int PPPlog(void) { int f,i,j; char *p; struct ftime ft; struct time d_time; struct date d_date; f=sopen("PPP.LOG",O_RDONLY|O_TEXT,SH_COMPAT, S_IREAD); if (f>=0) { if (ipmode==MODE_PPP) { long l=a_filelength(f); int plen; char buf[LOGLEN]; if (l>LOGLEN) l=LOGLEN; lseek(f,-l,SEEK_END); i=read(f,buf,(int)l); buf[i]='\0'; //puts(buf); j=0; p=configvariable(&ARACHNEcfg,"IP_Grab",NULL); if (!p) p="IP address set to"; plen=strlen(p); while(j<i) { if (!strncmp(&buf[j],p,plen)) { char tecka=0; p=strchr(&buf[j],'\n'); if (p) *p='\0'; outs(&buf[j]); i=0; j+=plen; while(buf[j]==' ')j++; while(i<19 && (buf[j+i]>='0' && buf[j+i]<='9' || buf[j+i]=='.' && tecka<3)) { myIPstr[i]=buf[j+i]; if (myIPstr[i]=='.') tecka++; i++; } myIPstr[i]='\0'; my_ip_addr = resolve(myIPstr); break; } j++; } } //determine time online: if (my_ip_addr || ipmode==MODE_BOOTP) { getftime(f, &ft); d_date.da_year=ft.ft_year+1980; /* current year */ d_date.da_day=ft.ft_day; /* day of the month */ d_date.da_mon=ft.ft_month; /* month (1 = Jan) */ d_time.ti_min=ft.ft_min; /* minutes */ d_time.ti_hour=ft.ft_hour; /* hours */ d_time.ti_hund=0; /* hundredths of seconds */ d_time.ti_sec=ft.ft_tsec*2; /* seconds */ //ppplogtime is by default zero... ppplogtime = dostounix(&d_date, &d_time); } close(f); return(my_ip_addr || ipmode==MODE_BOOTP); } //puts(MSG_NOIP); return(0); }
char *ArachneDIAL(void) { char *value; char str[80]; char terminal[80]="\0",hangup[80]="\0",useterm=0,dospppd=0; char *pausemsg=ctrlbreak; char buf[5*IE_MAXLEN]; char altnameserver[IE_MAXLEN]; char *altdns="\0"; //!!glennmcc: Mar 06, 2006 -- allow use of %DNS1 with miniterm/epppd char nameserver[IE_MAXLEN]; char *dns="\0"; //!!glennmcc: end process_form(0,IE_NULL); //updateovat Arachne.Cfg if(tcpip) { value=configvariable(&ARACHNEcfg,"Hangup",NULL); if(value) { makestr(hangup,value,128); strcat(hangup,"\n"); } } value=configvariable(&ARACHNEcfg,"UseTerminal",NULL); if(value && toupper(*value)=='Y') { value=configvariable(&ARACHNEcfg,"TerminalWindow",NULL); useterm=1; } else value=configvariable(&ARACHNEcfg,"Dialer",NULL); if(value && strcmpi(value,"NUL")) { makestr(terminal,value,128); strcat(terminal,"\n"); } else useterm=0; #ifndef NOETHERPPP value=configvariable(&ARACHNEcfg,"Connection",NULL); if(!value) return (""); /* if(!strncmpi(value,"@PPP.EXE",8)) { int f,l; //vytvorit CONFIG.PPP f=a_open(configvariable(&ARACHNEcfg,"PPPconfig",NULL),O_RDONLY|O_TEXT,0); if(f!=-1) { l=a_read(f,buf,BUF/2); buf[l]='\0'; a_close(f); sprintf(&buf[BUF/2+1],buf, configvariable(&ARACHNEcfg,"PPPusername",NULL), configvariable(&ARACHNEcfg,"PPPpassword",NULL)); f=a_open("config.ppp",O_TEXT|O_WRONLY|O_CREAT|O_TRUNC,S_IREAD|S_IWRITE); write(f,&buf[BUF/2+1],strlen(&buf[BUF/2+1])); a_close(f); } }//end if ETHERPPP else */ //!!glennmcc: begin Dec 24, 2000 // changed "PPPD.EXE to "PPP" so that *any* .EXE, .COM or .BAT // with "PPP" in the name will still result in a new PPPDRC.CFG file // examples... epppd.exe ppp.exe myppp.exe lsppp.exe loadppp.bat ppp_drv.com // if(strstr(strupr(value),"PPPD.EXE")) //!!glennmcc: July 6, 2002 always write pppdrc.cfg // if(strstr(strupr(value),"PPP")) //!!glennmcc: end //!!glennmcc: Jan 16, 2008 -- write data into both pppdrc.cfg & lsppp.cfg { int f=a_open("pppdrc.cfg",O_TEXT|O_WRONLY|O_CREAT|O_TRUNC,S_IREAD|S_IWRITE); int f2=a_open("lsppp.cfg",O_TEXT|O_WRONLY|O_CREAT|O_TRUNC,S_IREAD|S_IWRITE); if(f!=-1 && f2!=-1) { char *base,*default_base[4]={"0x3f8","0x2f8","0x3e8","0x2e8"}; char *irq,*default_irq[4]={"4","3","4","3"}; int port=0; value=configvariable(&ARACHNEcfg,"Port",NULL); if(value) port=atoi(value)-1; if(port>=0 && port<4) { irq=default_irq[port]; base=default_base[port]; } else { irq=configvariable(&ARACHNEcfg,"Irq",NULL); base=configvariable(&ARACHNEcfg,"Base",NULL); } dns=configvariable(&ARACHNEcfg,"NameServer",NULL); if(*dns=='%') { char *ptr=strchr(&dns[1],'%'); if(ptr) *ptr='\0'; dns=getenv(&dns[1]); } if(strlen(dns)>6) sprintf(nameserver,"namsrv %s\n",dns); else strcpy(nameserver,"\0"); altdns=configvariable(&ARACHNEcfg,"AltNameServer",NULL); if(*altdns=='%') { char *ptr=strchr(&altdns[1],'%'); if(ptr) *ptr='\0'; altdns=getenv(&altdns[1]); } if(strlen(altdns)>6) sprintf(altnameserver,"namsrv %s\n",altdns); else strcpy(altnameserver,"\0"); //write pppdrc.cfg sprintf(buf,"\ %s\n\ irq %s\n\ base %s\n\ modem\n\ crtscts\n\ asyncmap 0\n\ %s\ %s\ user \"%s\"\n\ passwd \"%s\"\n", configvariable(&ARACHNEcfg,"Speed",NULL), irq,base, nameserver, altnameserver, configvariable(&ARACHNEcfg,"PPPusername",NULL), configvariable(&ARACHNEcfg,"PPPpassword",NULL)); write(f,buf,strlen(buf)); a_close(f); //write lsppp.cfg sprintf(buf,"\ /M:%s\n\ /d:%s\n\ /B:%s\n\ /i:%s\n\ /b:%s\n\ /U:%s\n\ /P:%s\n\ /V:60\n", configvariable(&ARACHNEcfg,"InitString",NULL), configvariable(&ARACHNEcfg,"PhoneNumber",NULL), configvariable(&ARACHNEcfg,"Speed",NULL), irq,base, configvariable(&ARACHNEcfg,"PPPusername",NULL), configvariable(&ARACHNEcfg,"PPPpassword",NULL)); //!!glennmcc: Feb 14, 2008 -- also write DNSs into lsppp.cfg if(strlen(dns)>6) { strcat(buf,"/N:"); strcat(buf,dns); } if(strlen(altdns)>6) { strcat(buf,","); strcat(buf,altdns); } if(strlen(dns)>6) strcat(buf,"\n"); //!!glennmcc: end, Feb 14, 2008 write(f2,buf,strlen(buf)); a_close(f2); } dospppd=1; pausemsg=MSG_ESC; }
{ strcat(buf,","); strcat(buf,altdns); } if(strlen(dns)>6) strcat(buf,"\n"); //!!glennmcc: end, Feb 14, 2008 write(f2,buf,strlen(buf)); a_close(f2); } dospppd=1; pausemsg=MSG_ESC; } #endif value=configvariable(&ARACHNEcfg,"Connection",NULL); sprintf(buf,"%s%s@if errorlevel 1 goto skip\n%s\n:skip\n",hangup,terminal,value); #ifndef NOETHERPPP if(dospppd) { strcat(buf,"@if exist IP-UP.BAT call IP-UP.BAT\n@echo PPPD status: "); value=configvariable(&ARACHNEcfg,"IP_Grab",NULL); strcat(buf,value); strcat(buf," %MYIP%>>PPP.LOG\n"); unlink("IP-UP.BAT"); unlink("PPP.LOG"); } #endif value=configvariable(&ARACHNEcfg,"DialPage",NULL);
//Draw time void clock_and_timer(char *wait) //kresleni casu a screensaver { #ifndef POSIX struct time t; #endif char cas2[32]; timestr(cas2); if (strcmp(lasttime,cas2) == 0 ) return; #ifndef CLEMTEST #ifndef AGB if((ScreenSaver>0l||lasttime[0]=='*') && SecondsSleeping>(long)ScreenSaver*60l) { /* if(1) { mouseoff(); // strcpy(buf,"system\\scrnsvrs\\stin.exe"); // closebat(buf,RESTART_REDRAW); // GLOBAL.willexecute=willexecute(buf); // GLOBAL.gotolocation=1; execl("system\\scrnsvrs\\stin.exe","system\\scrnsvrs\\stin.exe",NULL); graphicsinit(arachne.graphics); // XLOPIF SVGA GRAPHICS } else */ { int j; int fullscr[4]={0,0,0,0}; int x,y,px,py,done=0; fullscr[2]=x_maxx(); fullscr[3]=x_maxy(); { #define MAX_CERFS 20 #define MAX_TRACK 100 int xx[MAX_CERFS],yy[MAX_CERFS],xs[MAX_CERFS],ys[MAX_CERFS],col[MAX_CERFS]; int x2[MAX_CERFS],y2[MAX_CERFS],xs2[MAX_CERFS],ys2[MAX_CERFS]; int tracklen[MAX_CERFS]; int trackcnt[MAX_CERFS]; int trackbuf[MAX_CERFS]; int xtr[MAX_CERFS][MAX_TRACK],ytr[MAX_CERFS][MAX_TRACK]; int xt2[MAX_CERFS][MAX_TRACK],yt2[MAX_CERFS][MAX_TRACK]; int pom; int cerfs=MAX_CERFS/2; char barva0[6]={1,3,9,11,7,8}; char barva1[6]={1,2,3,6,10,14}; char *barva; char *value; #ifdef HICOLOR int dc=1,p=0; #endif //----------------------------screensaver mouseoff(); x_cleardev(); #ifdef LINUX #define RND(X) (random()*X) srandom(time(NULL)); #else #define RND(X) random(X) randomize(); #endif value=configvariable(&ARACHNEcfg,"ScreenSaverColors",NULL); if(value && *value=='1') barva=barva1; else barva=barva0; value=configvariable(&ARACHNEcfg,"ScreenSaverMess",NULL); if(value) { cerfs=atoi(value); if(cerfs<1) cerfs=1; if(cerfs>MAX_CERFS) cerfs=MAX_CERFS; } value=configvariable(&ARACHNEcfg,"ScreenSaverStyle",NULL); j=0; while(j<cerfs) //deklarace car { xx[j]=100+RND(fullscr[2]-200); yy[j]=100+RND(fullscr[3]-200); if(*value=='C') x2[j]=10+RND(fullscr[3]/3); else { x2[j]=120+RND(fullscr[2]-240); y2[j]=120+RND(fullscr[3]-240); } if(*value=='R') {xs[j]=RND(2);if(xs[j]==0)xs[j]=-1;} else {xs[j]=RND(3);if(xs[j]==2)xs[j]=-1;} ys[j]=RND(2);if(ys[j]==0)ys[j]=-1; xs2[j]=RND(2);if(xs2[j]==0)xs2[j]=-1; if(*value=='R') {ys2[j]=RND(2);if(ys2[j]==0)ys2[j]=-1;} else {ys2[j]=RND(3);if(ys2[j]==2)ys2[j]=-1;} col[j]=barva[RND(6)]; pom=RND(MAX_TRACK-10)+10; tracklen[j]=pom; trackcnt[j]=1; //odsud se bude cist trackbuf[j]=0; //sem se bude zapisovat while(pom>=0) { xtr[j][pom]=0; ytr[j][pom]=0; xt2[j][pom]=0; yt2[j][pom]=0; pom--; } j+=1; }//loop j=0; ImouseRead( &x, &y ); ImouseWait(); px=x;py=y; while(!done) //animace { if(wait!=NULL) { #ifdef POSIX time_t t=time(NULL); struct tm *gt=gmtime(&t); sprintf(cas2,"%2d:%02d:%02d", gt->tm_hour, gt->tm_min, gt->tm_sec ); #else gettime(&t); sprintf(cas2,"%2d:%02d:%02d", t.ti_hour, t.ti_min, t.ti_sec ); #endif if(strstr(wait,cas2)!=NULL)break; }//endif #ifndef LINUX if(g_PrtScr) { g_PrtScr = 0; PrintScreen2BMP(0); goto out; } #endif //mazani stopy x_setcolor(0); #ifndef LINUX if(*value=='C') x_circle(xtr[j][trackcnt[j]],ytr[j][trackcnt[j]],xt2[j][trackcnt[j]]); else #endif if(*value=='R') x_rect(xtr[j][trackcnt[j]],ytr[j][trackcnt[j]],xt2[j][trackcnt[j]],yt2[j][trackcnt[j]]); else x_line(xtr[j][trackcnt[j]],ytr[j][trackcnt[j]],xt2[j][trackcnt[j]],yt2[j][trackcnt[j]]); if(++trackcnt[j]>tracklen[j])trackcnt[j]=0; xtr[j][trackbuf[j]]=xx[j]; ytr[j][trackbuf[j]]=yy[j]; xt2[j][trackbuf[j]]=x2[j]; yt2[j][trackbuf[j]]=y2[j]; if(++trackbuf[j]>tracklen[j])trackbuf[j]=0; //kresleni nove cary x_setcolor(col[j]); #ifndef LINUX if(*value=='C') x_circle(xx[j],yy[j],x2[j]); else #endif if(*value=='R') x_rect(xx[j],yy[j],x2[j],y2[j]); else x_line(xx[j],yy[j],x2[j],y2[j]); xx[j]+=xs[j]; yy[j]+=ys[j]; x2[j]+=xs2[j]; y2[j]+=ys2[j]; if(xx[j]>=fullscr[2]||xx[j]<=0)xs[j]=-xs[j]; if(yy[j]>=fullscr[3]||yy[j]<=0)ys[j]=-ys[j]; if(x2[j]>=fullscr[2]||x2[j]<=0)xs2[j]=-xs2[j]; if(y2[j]>=fullscr[3]||y2[j]<=0)ys2[j]=-ys2[j]; j++; if(j==cerfs) j=0; if(*value=='C' || j%10==0) { //!!RAY: Sep 30, 2006 -- CTRL key will now deactivate the screensaver if((bioskey(1) || bioskey(2) &4) || ImouseRead( &x, &y ) || x!=px || y!=py) // if(bioskey(1) || ImouseRead( &x, &y ) || x!=px || y!=py) done=1; } px=x;py=y; #ifdef HICOLOR if(xg_256 == MM_Hic) { if(p>20*cerfs) { dc=-dc; p=0; } p++; if(p%cerfs==0) { int c=1; while(c<16) { if(c%2) dc=-dc; Iipal[c*3]+=dc; if(Iipal[c*3]>63) Iipal[c*3]=63; if(Iipal[c*3]<0) Iipal[c*3]=0; Iipal[c*3+1]+=dc; if(Iipal[c*3+1]>63) Iipal[c*3+1]=63; if(Iipal[c*3+1]<0) Iipal[c*3+1]=0; Iipal[c*3+2]+=dc; if(Iipal[c*3+2]>63) Iipal[c*3+2]=63; if(Iipal[c*3+2]<0) Iipal[c*3+2]=0; c++; }//loop } x_palett( 16, Iipal); } #endif }//loop if(bioskey(1))bioskey(0); ImouseWait(); out: #ifdef HICOLOR if(xg_256 == MM_Hic) initpalette(); #endif x_cleardev(); RedrawALL(); DrawTitle(1); if(lasttime[1]=='*') redraw=4; else redraw=3; } } SecondsSleeping=0l; }//endif screensaver #endif// AGB #endif// CLEMTEST #ifndef GGI //it doesn't make sense to show time in X11 app.. if(!fullscreen) { x_setfill(0,7); //sediva if(mousey>x_maxy()-30 && mousex>x_maxx()-230) mouseoff(); #ifdef CUSTOMER x_bar(x_maxx()-56,x_maxy()-13,x_maxx()-2,x_maxy()-2); x_setcolor(0); //cerna htmlfont(1,0); x_text_ib( x_maxx()-56,x_maxy()-15,(unsigned char *)cas2); #elif AGB x_bar(x_maxx()-56,x_maxy()-13,x_maxx()-2,x_maxy()-2); x_setcolor(0); //cerna htmlfont(1,0); x_text_ib( x_maxx()-56,x_maxy()-15,(unsigned char *)cas2); #else x_bar(x_maxx()-206,x_maxy()-13,x_maxx()-156,x_maxy()-2); x_setcolor(0); //cerna //!!glennmcc: Aug 22, 2005 //prevent fontshift >0 from causing the clock to go 'off the right' htmlfont(0-user_interface.fontshift,0); // htmlfont(1,0); x_text_ib( x_maxx()-206,x_maxy()-15,(unsigned char *)cas2); #endif if(mousey>x_maxy()-30 && mousex>x_maxx()-230) mouseon(); } #endif if(lasttime[0]) //not if time redraw was forced! { SecondsSleeping++; if(GLOBAL.timeout) GLOBAL.secondsleft--; if(ppplogtime && tcpip) draw_time_online(); } strcpy(lasttime,cas2); }//end sub