Esempio n. 1
0
void Text_File::Close()
{
	//make sure no old data is left
	if (open)
	{
		printlog(2, "Text_File: closing file");
		fclose (fp);
		Clear_List();
	}
}
Esempio n. 2
0
bool Text_File::Read_Line ()
{
	//remove the old words
	Clear_List();

	//the following actions goes false if end of file
	if (!Seek_First())
		return false;
	if (!Line_To_Buffer())
		return false;
	if (!Buffer_To_List())
		return false;

	//ok
	return true;
}
Esempio n. 3
0
void Delete_VM_Files_Window::on_RB_Show_HDD_toggled( bool checked )
{
	static bool old = false;
	
	if( old == checked ) return;
	else old = checked;
	
	Clear_List();
	
	for( int ix = 0; ix < File_List_Items.count(); ix++ )
	{
		if( checked )
		{
			if( File_List_Items[ix].Hard_Drive ) Add_To_Files_List( File_List_Items[ix] );
		}
		else
		{
			Add_To_Files_List( File_List_Items[ix] );
		}
	}
}
Esempio n. 4
0
void Delete_VM_Files_Window::Set_VM( Virtual_Machine *vm )
{
	if( vm == NULL )
	{
		AQError( "void Delete_VM_Files_Window::Set_VM( Virtual_Machine *vm )",
				 "vm == NULL" );
		return;
	}
	
	// Clear List
	Clear_List();
	
	VM_Name = vm->Get_Machine_Name();
	
	File_List_Item tmp;
	
	// VM File
	VM_Path = vm->Get_VM_XML_File_Path();
	
	// Screenshot
	if( Path_Valid(vm->Get_Screenshot_Path()) )
	{
		tmp.Hard_Drive = false;
		tmp.Name = tr( "Screenshot" );
		tmp.Path = vm->Get_Screenshot_Path();
		
		File_List_Items << tmp;
		Add_To_Files_List( tmp );
	}
	
	// FD0
	if( Path_Valid(vm->Get_FD0().Get_File_Name()) )
	{
		tmp.Hard_Drive = false;
		tmp.Name = tr( "Floppy A" );
		tmp.Path = vm->Get_FD0().Get_File_Name();
		
		File_List_Items << tmp;
		Add_To_Files_List( tmp );
	}
	
	// FD1
	if( Path_Valid(vm->Get_FD1().Get_File_Name()) )
	{
		tmp.Hard_Drive = false;
		tmp.Name = tr( "Floppy B" );
		tmp.Path = vm->Get_FD1().Get_File_Name();
		
		File_List_Items << tmp;
		Add_To_Files_List( tmp );
	}
	
	// CD-ROM
	if( Path_Valid(vm->Get_CD_ROM().Get_File_Name()) )
	{
		tmp.Hard_Drive = false;
		tmp.Name = tr( "CD-ROM" );
		tmp.Path = vm->Get_CD_ROM().Get_File_Name();
		
		File_List_Items << tmp;
		Add_To_Files_List( tmp );
	}
	
	// HDA
	if( Path_Valid(vm->Get_HDA().Get_File_Name()) )
	{
		tmp.Hard_Drive = true;
		tmp.Name = tr( "HDA (Primary Master)" );
		tmp.Path = vm->Get_HDA().Get_File_Name();
		
		File_List_Items << tmp;
		Add_To_Files_List( tmp );
	}
	
	// HDB
	if( Path_Valid(vm->Get_HDB().Get_File_Name()) )
	{
		tmp.Hard_Drive = true;
		tmp.Name = tr( "HDB (Primary Slave)" );
		tmp.Path = vm->Get_HDB().Get_File_Name();
		
		File_List_Items << tmp;
		Add_To_Files_List( tmp );
	}
	
	// HDC
	if( Path_Valid(vm->Get_HDC().Get_File_Name()) )
	{
		tmp.Hard_Drive = true;
		tmp.Name = tr( "HDC (Secondary Master)" );
		tmp.Path = vm->Get_HDC().Get_File_Name();
		
		File_List_Items << tmp;
		Add_To_Files_List( tmp );
	}
	
	// HDD
	if( Path_Valid(vm->Get_HDD().Get_File_Name()) )
	{
		tmp.Hard_Drive = true;
		tmp.Name = tr( "HDD (Secondary Slave)" );
		tmp.Path = vm->Get_HDD().Get_File_Name();
		
		File_List_Items << tmp;
		Add_To_Files_List( tmp );
	}
	
	// ROM File
	if( Path_Valid(vm->Get_ROM_File()) )
	{
		tmp.Hard_Drive = false;
		tmp.Name = tr( "ROM File" );
		tmp.Path = vm->Get_ROM_File();
		
		File_List_Items << tmp;
		Add_To_Files_List( tmp );
	}
	
	// MTDBlock File
	if( Path_Valid(vm->Get_MTDBlock_File()) )
	{
		tmp.Hard_Drive = false;
		tmp.Name = tr( "MTDBlock File" );
		tmp.Path = vm->Get_MTDBlock_File();
		
		File_List_Items << tmp;
		Add_To_Files_List( tmp );
	}
	
	// SD Card File
	if( Path_Valid(vm->Get_SecureDigital_File()) )
	{
		tmp.Hard_Drive = false;
		tmp.Name = tr( "SD Card File" );
		tmp.Path = vm->Get_SecureDigital_File();
		
		File_List_Items << tmp;
		Add_To_Files_List( tmp );
	}
	
	// PFlash File
	if( Path_Valid(vm->Get_PFlash_File()) )
	{
		tmp.Hard_Drive = false;
		tmp.Name = tr( "PFlash File" );
		tmp.Path = vm->Get_PFlash_File();
		
		File_List_Items << tmp;
		Add_To_Files_List( tmp );
	}
	
	// bzImage
	if( Path_Valid(vm->Get_bzImage_Path()) )
	{
		tmp.Hard_Drive = false;
		tmp.Name = tr( "Kernel bzImage" );
		tmp.Path = vm->Get_bzImage_Path();
		
		File_List_Items << tmp;
		Add_To_Files_List( tmp );
	}
	
	// Initrd
	if( Path_Valid(vm->Get_Initrd_Path()) )
	{
		tmp.Hard_Drive = false;
		tmp.Name = tr( "Kernel Initrd" );
		tmp.Path = vm->Get_Initrd_Path();
		
		File_List_Items << tmp;
		Add_To_Files_List( tmp );
	}
	
	// Serial Ports
	if( vm->Get_Serial_Ports().count() > 0 )
	{
		QList<VM_Port> tmp_port = vm->Get_Serial_Ports();
		
		for( int ix = 0; ix < tmp_port.count(); ix++ )
		{
			if( tmp_port[ix].Get_Port_Redirection() == VM::PR_file )
			{
				if( Path_Valid(tmp_port[ix].Get_Parametrs_Line()) )
				{
					tmp.Hard_Drive = false;
					tmp.Name = tr( "Serial Port Redirection" );
					tmp.Path = tmp_port[ix].Get_Parametrs_Line();
					
					File_List_Items << tmp;
					Add_To_Files_List( tmp );
				}
			}
		}
	}
	
	// Parallel Ports
	if( vm->Get_Parallel_Ports().count() > 0 )
	{
		QList<VM_Port> tmp_port = vm->Get_Parallel_Ports();
		
		for( int ix = 0; ix < tmp_port.count(); ix++ )
		{
			if( tmp_port[ix].Get_Port_Redirection() == VM::PR_file )
			{
				if( Path_Valid(tmp_port[ix].Get_Parametrs_Line()) )
				{
					tmp.Hard_Drive = false;
					tmp.Name = tr( "Parallel Port Redirection" );
					tmp.Path = tmp_port[ix].Get_Parametrs_Line();
					
					File_List_Items << tmp;
					Add_To_Files_List( tmp );
				}
			}
		}
	}
	
	// Storage Devices
	if( vm->Get_Storage_Devices_List().count() > 0 )
	{
		QList<VM_Nativ_Storage_Device> tmp_dev = vm->Get_Storage_Devices_List();
		
		for( int ix = 0; ix < tmp_dev.count(); ix++ )
		{
			if( Path_Valid(tmp_dev[ix].Get_File_Path()) )
			{
				if( tmp_dev[ix].Get_Media() == VM::DM_Disk ) tmp.Hard_Drive = true;
				else tmp.Hard_Drive = false;
				
				tmp.Name = tr( "Storage Device" );
				tmp.Path = tmp_dev[ix].Get_File_Path();
				
				File_List_Items << tmp;
				Add_To_Files_List( tmp );
			}
		}
	}
}
int AddListEntry(MENU *m, char *line, int pos)
{
	int i,found=0,pfound=0;
	PLISTENTRY entr;
	char *ptr1,*ptr2,*ptr3,*ptr4, *wstr;

	if(!strlen(line))
	{
		return 1;
	}
	//printf("AddListEntry: %s\n",line);
	wstr=strdup(line);

	if(m->num_entrys>=m->max_entrys)
	{
		if((m->list=realloc(m->list,(m->max_entrys+LIST_STEP)*sizeof(PLISTENTRY)))==NULL)
		{
			printf(NOMEM);
			Clear_List(m,0);
			free(wstr);
			return 0;
		}
		for(i=m->num_entrys; i<m->num_entrys+LIST_STEP; i++)
		{
			if((entr=calloc(1,sizeof(LISTENTRY)))==NULL)
				{
				printf(NOMEM);
				Clear_List(m,0);
				free(wstr);
				return -1;
				}
			m->list[i]=entr;
		}
		m->max_entrys+=LIST_STEP;
	}

	entr=m->list[m->num_entrys];
	entr->underline=entr->stay=entr->showalways=0;

	for(i=TYP_MENU; !found && i<=TYP_SHELLRESOFF; i++)
	{
		ptr4=NULL;
		if((ptr1=strstr(wstr,TYPESTR[i]))==wstr)
		{
			ptr1=strchr(wstr,'=');
			ptr1++;
			ptr2=ptr1;
			while(*ptr2 && ((*ptr2=='*') || (*ptr2=='&') || (*ptr2==0302) || (*ptr2==0247) || (*ptr2=='+') || (*ptr2=='-') || (*ptr2=='!') || (*ptr2=='_')))
			{
				switch(*ptr2)
				{
					case '*': entr->underline=1; break;
					case '!': entr->underline=2; break;
					case '+': entr->showalways=1; break;
					case '-': entr->showalways=2; break;
					case '&': entr->stay=1; break;
					case 0302: if (*(ptr2 + 1) != 0247) break; // UTF-8 value of paragraph symbol
						ptr2++;
					case 0247: entr->stay=2; break;
				}
				while(*(++ptr2))
				{
					*(ptr2-1)=*ptr2;
				}
				*(ptr2-1)=0;
				ptr2=ptr1;
			}
			switch (i)
			{
				case TYP_EXECUTE:
				case TYP_MENUDON:
				case TYP_MENUDOFF:
				case TYP_MENUFON:
				case TYP_MENUFOFF:
					if((ptr2=strxchr(ptr1,','))!=NULL)
					{
						if((ptr4=strstr(ptr1,",ICON="))!=NULL)
						{
							*ptr4=0;
						}
						if((ptr4=strxchr(ptr2+1,','))!=NULL)
						{
							*ptr4=0;
							entr->message=strdup(ptr4+1);
						}
					}
				break;

				case TYP_MENU:
					if((ptr2=strstr(ptr1,",ICON="))!=NULL)
					{
						*ptr2=0;
					}
					if((ptr2=strxchr(ptr1,','))!=NULL)
					{
						*ptr2=0;
						entr->message=strdup(ptr2+1);
					}
				break;
			}
			switch (i)
			{
				case TYP_EXECUTE:
				case TYP_MENU:
				case TYP_COMMENT:
					entr->type=i;
					entr->entry=strdup(ptr1);
					entr->headerpos=pos;
					m->num_entrys++;
					found=1;
					break;

				case TYP_DEPENDON:
				case TYP_DEPENDOFF:
				case TYP_MENUDON:
				case TYP_MENUDOFF:
				case TYP_FILCONTON:
				case TYP_FILCONTOFF:
				case TYP_MENUFON:
				case TYP_MENUFOFF:
					if((ptr2=strstr(ptr1,",ICON="))!=NULL)
					{
						*ptr2=0;
					}
					if((ptr2=strxchr(ptr1,','))!=NULL)
					{
						if(i<TYP_EXECUTE)
						{
							ptr3=ptr2;
						}
						else
						{
							ptr2++;
							ptr3=strxchr(ptr2,',');
							ptr4=strxchr(ptr3+1,',');
						}
						if(ptr3!=NULL)
						{
							*ptr3=0;
							ptr3++;
							found=1;
							if(ptr4)
							{
								*ptr4=0;
							}
							if((i==TYP_FILCONTON) || (i==TYP_FILCONTOFF) || (i==TYP_MENUFON) || (i==TYP_MENUFOFF))
							{
								pfound=FileContainText(ptr3);
							}
							else
							{
								pfound=ExistFile(ptr3);
							}
							if((((i==TYP_DEPENDON)||(i==TYP_MENUDON)||(i==TYP_FILCONTON)||(i==TYP_MENUFON)) && pfound) || (((i==TYP_DEPENDOFF)||(i==TYP_MENUDOFF)||(i==TYP_FILCONTOFF)||(i==TYP_MENUFOFF)) && !pfound))
							{
								entr->type=(i<TYP_EXECUTE)?TYP_MENU:((strlen(ptr2))?TYP_EXECUTE:TYP_INACTIVE);
								entr->entry=strdup(ptr1);
								if(ptr4)
								{
									entr->message=strdup(ptr4+1);
								}
								entr->headerpos=pos;
								m->num_entrys++;
							}
							else
							{
								if(entr->showalways)
								{
									entr->type=TYP_INACTIVE;
									entr->entry=strdup(ptr1);
									entr->headerpos=pos;
									m->num_entrys++;
								}
							}
						}
					}
					break;

				case TYP_SHELLRESON:
				case TYP_SHELLRESOFF:
				case TYP_MENUSON:
				case TYP_MENUSOFF:
					if((ptr2=strstr(ptr1,",ICON="))!=NULL)
					{
						*ptr2=0;
					}
					if((ptr2=strxchr(ptr1,','))!=NULL)
					{
						if(i<TYP_EXECUTE)
						{
							ptr3=ptr2;
						}
						else
						{
							ptr2++;
							ptr3=strxchr(ptr2,',');
							ptr4=strxchr(ptr3+1,',');
						}
						if(ptr3!=NULL)
						{
							*ptr3=0;
							ptr3++;
							found=1;
							if(ptr4)
							{
								*ptr4=0;
							}
							pfound=system(ptr3);
							if((((i==TYP_SHELLRESON)||(i==TYP_MENUSON)) && !pfound) || (((i==TYP_SHELLRESOFF)||(i==TYP_MENUSOFF)) && pfound))
							{
								entr->type=(i<TYP_EXECUTE)?TYP_MENU:((strlen(ptr2))?TYP_EXECUTE:TYP_INACTIVE);
								entr->entry=strdup(ptr1);
								if(ptr4)
								{
									entr->message=strdup(ptr4+1);
								}
								entr->headerpos=pos;
								m->num_entrys++;
							}
							else
							{
								if(entr->showalways)
								{
									entr->type=TYP_INACTIVE;
									entr->entry=strdup(ptr1);
									entr->headerpos=pos;
									m->num_entrys++;
								}
							}
						}
					}
					break;
			}
			if(found && (i != TYP_COMMENT) && (i != TYP_INACTIVE))
			{
				m->num_active++;
			}
		}
	}
	free(wstr);
	return !found;
}
int Clear_List(MENU *m, int mode)
{
	int i;
	PLISTENTRY entr;

	if(m->menact)
	{
		free(m->menact);
		m->menact=NULL;
	}
	if(m->menactdep)
	{
		free(m->menactdep);
		m->menactdep=NULL;
	}
	if(m->max_entrys)
	{
		for(i=0; i<m->num_entrys; i++)
		{
			if(m->list[i]->entry) free(m->list[i]->entry);
			if(m->list[i]->message) free(m->list[i]->message);
			free(m->list[i]);
		}
		m->num_entrys=0;
		m->max_entrys=0;
		m->num_active=0;
		m->list=NULL;
	}
	switch(mode)
	{
		case 0: return 0;

		case 1:

			if((m->list=calloc(LIST_STEP,sizeof(PLISTENTRY)))==NULL)
			{
				printf(NOMEM);
				return -1;
			}

			for(i=0; i<LIST_STEP; i++)
			{
				if((entr=calloc(1,sizeof(LISTENTRY)))==NULL)
					{
					printf(NOMEM);
					Clear_List(m,0);
					return -1;
					}
				m->list[i]=entr;
			}
			m->max_entrys=LIST_STEP;
			break;

		case -1:
			if(m->num_headers && m->headertxt)
			{
				for(i=0; i<m->num_headers; i++)
				{
					free(m->headertxt[i]);
				}
				m->num_headers=0;
				m->list=NULL;
			}
			if(m->headertxt)
			{
				free(m->headertxt);
				m->headertxt=NULL;
			}
			break;
	}
	return 0;
}
int Check_Config(void)
{
	int rv=-1, level=0;
	char *pt1,*pt2;
	FSTRUCT fstr;

	if((fstr.fh[0]=fopen(CFG_FILE,"r"))!=NULL)
	{
		fstr.fnum=0;
		while(GetLine(line_buffer, BUFSIZE, &fstr))
		{
			if(IsMenu(line_buffer))
			{
				if(menu.num_headers>=menu.max_header)
				{
					if((menu.headertxt=realloc(menu.headertxt,(menu.max_header+LIST_STEP)*sizeof(char*)))==NULL)
					{
						printf(NOMEM);
						Clear_List(&menu,0);
						return rv;
					}
					memset(&menu.headertxt[menu.max_header],0,LIST_STEP*sizeof(char*));
					if((menu.icon=realloc(menu.icon,(menu.max_header+LIST_STEP)*sizeof(char*)))==NULL)
					{
						printf(NOMEM);
						Clear_List(&menu,0);
						return rv;
					}
					memset(&menu.icon[menu.max_header],0,LIST_STEP*sizeof(char*));
					if((menu.headerlevels=realloc(menu.headerlevels,(menu.max_header+LIST_STEP)*sizeof(int)))==NULL)
					{
						printf(NOMEM);
						Clear_List(&menu,0);
						return rv;
					}
					memset(&menu.headerlevels[menu.max_header],0,LIST_STEP*sizeof(int));
					if((menu.headerwait=realloc(menu.headerwait,(menu.max_header+LIST_STEP)*sizeof(int)))==NULL)
					{
						printf(NOMEM);
						Clear_List(&menu,0);
						return rv;
					}
					memset(&menu.headerwait[menu.max_header],0,LIST_STEP*sizeof(int));
					if((menu.headermed=realloc(menu.headermed,(menu.max_header+LIST_STEP)*sizeof(int)))==NULL)
					{
						printf(NOMEM);
						Clear_List(&menu,0);
						return rv;
					}
					memset(&menu.headermed[menu.max_header],0,LIST_STEP*sizeof(int));
					if((menu.lastheaderentrys=realloc(menu.lastheaderentrys,(menu.max_header+LIST_STEP)*sizeof(int)))==NULL)
					{
						printf(NOMEM);
						Clear_List(&menu,0);
						return rv;
					}
					memset(&menu.lastheaderentrys[menu.max_header],0,LIST_STEP*sizeof(int));
					menu.max_header+=LIST_STEP;
				}
				pt1=strchr(line_buffer,'=');
				if(!pt1)
				{
					pt1=line_buffer;
				}
				else
				{
					++pt1;
				}
				pt2=pt1;
				while(*pt2 && ((*pt2=='*') || (*pt2=='&') || (*pt2==0302) || (*pt2==0247) || (*pt2=='+') || (*pt2=='-') || (*pt2=='!') || (*pt2=='_')))
				{
					if(*pt2=='_')
					{
						menu.headermed[menu.num_headers]=1;
					}
					while(*(++pt2))
					{
						*(pt2-1)=*pt2;
					}
					*(pt2-1)=0;
					pt2=pt1;
				}

				if(menu.icon[menu.num_headers])
				{
					free(menu.icon[menu.num_headers]);
					menu.icon[menu.num_headers]=NULL;
				}
				if((pt2=strstr(pt1,",ICON="))!=NULL)
				{
					*pt2=0;
					menu.icon[menu.num_headers]=strdup(pt2+6);
				}
				if(menu.headertxt[menu.num_headers])
				{
					free(menu.headertxt[menu.num_headers]);
				}
				menu.headerlevels[menu.num_headers]=level++;
				if((pt2=strxchr(pt1,','))!=NULL)
				{
					*pt2=0;
				}
				menu.headertxt[menu.num_headers++]=strdup(pt1);
			}
			else
			{
				if(strstr(line_buffer,TYPESTR[TYP_ENDMENU])==line_buffer)
				{
					--level;
				}
				else
				{
					int neutrinofont = Read_Neutrino_Cfg("font_file=");
					if(neutrinofont!=1 && strstr(line_buffer,"FONT=")==line_buffer)
					{
						strcpy(FONT,strchr(line_buffer,'=')+1);
					}
					if(strstr(line_buffer,"VFD=")==line_buffer)
					{
						strcpy(VFD,strchr(line_buffer,'=')+1);
						if(access(VFD,1)!=-1)
							vfd=1;
					}
					if(strstr(line_buffer,"FONTSIZE=")==line_buffer)
					{
						sscanf(strchr(line_buffer,'=')+1,"%d",&FSIZE_MED);
					}
					if(strstr(line_buffer,"MENUTIMEOUT=")==line_buffer)
					{
						sscanf(strchr(line_buffer,'=')+1,"%d",&mtmo);
					}
					if(strstr(line_buffer,"PAGING=")==line_buffer)
					{
						sscanf(strchr(line_buffer,'=')+1,"%d",&paging);
					}
					if(strstr(line_buffer,"LINESPP=")==line_buffer)
					{
						sscanf(strchr(line_buffer,'=')+1,"%d",&MAX_FUNCS);
					}
					if(strstr(line_buffer,"WIDTH=")==line_buffer)
					{
						sscanf(strchr(line_buffer,'=')+1,"%d",&ixw);
					}
					if(strstr(line_buffer,"HEIGHT=")==line_buffer)
					{
						sscanf(strchr(line_buffer,'=')+1,"%d",&iyw);
					}
					if(strstr(line_buffer,"HIGHT=")==line_buffer)
					{
						sscanf(strchr(line_buffer,'=')+1,"%d",&iyw);
						printf("shellexec::Check_Config: please use HEIGHT instead of HIGHT\n");
					}
					if(strstr(line_buffer,"TIMESERVICE=")==line_buffer)
					{
						strcpy(url,strchr(line_buffer,'=')+1);
						if(strstr(url,"NONE") || strlen(url)<4)
						{
							*url=0;
						}
					}
				}
			}
			//printf("Check_Config: Level: %d -> %s\n",level,line_buffer);
		}
		rv=0;
		fclose(fstr.fh[fstr.fnum]);
	}
	FSIZE_BIG=(FSIZE_MED*5)/4;
	FSIZE_SMALL=(FSIZE_MED*4)/5;
	TABULATOR=2*FSIZE_MED;
	ixw=scale2res(ixw);
	iyw=scale2res(iyw);
	ixw=(ixw>(ex-sx))?(ex-sx):((ixw<scale2res(400))?scale2res(400):ixw);
	iyw=(iyw>(ey-sy))?(ey-sy):((iyw<scale2res(380))?scale2res(380):iyw);
	return rv;
}
int main (int argc, char **argv)
{
	int index=0,cindex=0,mainloop=1,dloop=1,tv, spr, resolution;
	char tstr[BUFSIZE]={0}, *rptr;
	PLISTENTRY pl;

	printf("%s Version %.2f\n", __plugin__, SH_VERSION);
	for(tv=1; tv<argc; tv++)
	{
		if(*argv[tv]=='/')
		{
			strcpy(CFG_FILE,argv[tv]);
		}
	}

	//init framebuffer before 1st scale2res
	fb = open(FB_DEVICE, O_RDWR);
#ifdef MARTII
	if (fb < 0)
		fb = open(FB_DEVICE_FALLBACK, O_RDWR);
#endif
	if(fb == -1)
	{
		perror(__plugin__ " <open framebuffer device>");
		exit(1);
	}
	if(ioctl(fb, FBIOGET_FSCREENINFO, &fix_screeninfo) == -1)
	{
		perror(__plugin__ " <FBIOGET_FSCREENINFO>\n");
		return -1;
	}
	if(ioctl(fb, FBIOGET_VSCREENINFO, &var_screeninfo) == -1)
	{
		perror(__plugin__ " <FBIOGET_VSCREENINFO>\n");
		return -1;
	}
#if defined(HAVE_SPARK_HARDWARE) || defined(HAVE_DUCKBOX_HARDWARE)
	var_screeninfo.xres = DEFAULT_XRES;
	var_screeninfo.yres = DEFAULT_YRES;
#endif
	if(!(lfb = (uint32_t*)mmap(0, fix_screeninfo.smem_len, PROT_WRITE|PROT_READ, MAP_SHARED, fb, 0)))
	{
		perror(__plugin__ " <mapping of Framebuffer>\n");
		return -1;
	}

	// read config
	ixw=scale2res(600), iyw=scale2res(680), xoffs=scale2res(13);
	if((line_buffer=calloc(BUFSIZE+1, sizeof(char)))==NULL)
	{
		printf(NOMEM);
		return -1;
	}

	if((trstr=calloc(BUFSIZE+1, sizeof(char)))==NULL)
	{
		printf(NOMEM);
		return -1;
	}

	spr=Read_Neutrino_Cfg("screen_preset")+1;
	resolution=Read_Neutrino_Cfg("osd_resolution");

	if (resolution == -1)
		sprintf(trstr,"screen_StartX_%s", spres[spr]);
	else
		sprintf(trstr,"screen_StartX_%s_%d", spres[spr], resolution);
	if((sx=Read_Neutrino_Cfg(trstr))<0)
		sx=scale2res(100);

	if (resolution == -1)
		sprintf(trstr,"screen_EndX_%s", spres[spr]);
	else
		sprintf(trstr,"screen_EndX_%s_%d", spres[spr], resolution);
	if((ex=Read_Neutrino_Cfg(trstr))<0)
		ex=scale2res(1180);

	if (resolution == -1)
		sprintf(trstr,"screen_StartY_%s", spres[spr]);
	else
		sprintf(trstr,"screen_StartY_%s_%d", spres[spr], resolution);
	if((sy=Read_Neutrino_Cfg(trstr))<0)
		sy=scale2res(100);

	if (resolution == -1)
		sprintf(trstr,"screen_EndY_%s", spres[spr]);
	else
		sprintf(trstr,"screen_EndY_%s_%d", spres[spr], resolution);
	if((ey=Read_Neutrino_Cfg(trstr))<0)
		ey=scale2res(620);

	for(index=CMCST; index<=CMH; index++)
	{
		sprintf(trstr,"menu_%s_alpha",menucoltxt[index]);
		if((tv=Read_Neutrino_Cfg(trstr))>=0)
			tr[index]=255-(float)tv*2.55;

		sprintf(trstr,"menu_%s_blue",menucoltxt[index]);
		if((tv=Read_Neutrino_Cfg(trstr))>=0)
			bl[index]=(float)tv*2.55;

		sprintf(trstr,"menu_%s_green",menucoltxt[index]);
		if((tv=Read_Neutrino_Cfg(trstr))>=0)
			gn[index]=(float)tv*2.55;

		sprintf(trstr,"menu_%s_red",menucoltxt[index]);
		if((tv=Read_Neutrino_Cfg(trstr))>=0)
			rd[index]=(float)tv*2.55;
	}

	if(Read_Neutrino_Cfg("rounded_corners")>0) {
		radius = scale2res(11);
		radius_small = scale2res(5);
	}
	else
		radius = radius_small = 0;

	mtmo = Read_Neutrino_Cfg("timing.menu");
	if (mtmo < 0)
		mtmo = 0;

	cindex=CMC;
	for(index=COL_MENUCONTENT_PLUS_0; index<=COL_MENUCONTENT_PLUS_3; index++)
	{
		rd[index]=rd[cindex]+25;
		gn[index]=gn[cindex]+25;
		bl[index]=bl[cindex]+25;
		tr[index]=tr[cindex];
		cindex=index;
	}
	sprintf(trstr,"infobar_alpha");
	if((tv=Read_Neutrino_Cfg(trstr))>=0)
		tr[COL_SHADOW_PLUS_0]=255-(float)tv*2.55;

	sprintf(trstr,"infobar_blue");
	if((tv=Read_Neutrino_Cfg(trstr))>=0)
		bl[COL_SHADOW_PLUS_0]=(float)tv*2.55*0.4;

	sprintf(trstr,"infobar_green");
	if((tv=Read_Neutrino_Cfg(trstr))>=0)
		gn[COL_SHADOW_PLUS_0]=(float)tv*2.55*0.4;

	sprintf(trstr,"infobar_red");
	if((tv=Read_Neutrino_Cfg(trstr))>=0)
			rd[COL_SHADOW_PLUS_0]=(float)tv*2.55*0.4;

	for (index = 0; index <= COL_SHADOW_PLUS_0; index++)
		bgra[index] = (tr[index] << 24) | (rd[index] << 16) | (gn[index] << 8) | bl[index];

	InitRC();
	//InitVFD();

	//init fontlibrary
	if((error = FT_Init_FreeType(&library)))
	{
		printf("%s <FT_Init_FreeType failed with Errorcode 0x%.2X>", __plugin__, error);
		munmap(lfb, fix_screeninfo.smem_len);
		return -1;
	}

	if((error = FTC_Manager_New(library, 1, 2, 0, &MyFaceRequester, NULL, &manager)))
	{
		printf("%s <FTC_Manager_New failed with Errorcode 0x%.2X>\n", __plugin__, error);
		FT_Done_FreeType(library);
		munmap(lfb, fix_screeninfo.smem_len);
		return -1;
	}

	if((error = FTC_SBitCache_New(manager, &cache)))
	{
		printf("%s <FTC_SBitCache_New failed with Errorcode 0x%.2X>\n", __plugin__, error);
		FTC_Manager_Done(manager);
		FT_Done_FreeType(library);
		munmap(lfb, fix_screeninfo.smem_len);
		return -1;
	}

	memset(&menu,0,sizeof(MENU));
	if(Check_Config())
	{
		printf("%s <Check_Config> Unable to read Config %s\n", __plugin__, CFG_FILE);
		FTC_Manager_Done(manager);
		FT_Done_FreeType(library);
		munmap(lfb, fix_screeninfo.smem_len);
		Clear_List(&menu,-1);
		free(line_buffer);
		return -1;
	}

	if((error = FTC_Manager_LookupFace(manager, FONT, &face)))
	{
		printf("%s <FTC_Manager_LookupFace failed with Errorcode 0x%.2X, trying default font>\n", __plugin__, error);
		if((error = FTC_Manager_LookupFace(manager, FONT2, &face)))
		{
			printf("%s <FTC_Manager_LookupFace failed with Errorcode 0x%.2X>\n", __plugin__, error);
			FTC_Manager_Done(manager);
			FT_Done_FreeType(library);
			munmap(lfb, fix_screeninfo.smem_len);
			return 2;
		}
		else
			desc.face_id = FONT2;
	}
	else
		desc.face_id = FONT;
	printf("%s <FTC_Manager_LookupFace Font \"%s\" loaded>\n", __plugin__, desc.face_id);

	use_kerning = FT_HAS_KERNING(face);
	desc.flags = FT_LOAD_RENDER | FT_LOAD_FORCE_AUTOHINT;

	//init backbuffer
#if defined(HAVE_SPARK_HARDWARE) || defined(HAVE_DUCKBOX_HARDWARE)
	lbb = lfb + 1920 * 1080;
	fix_screeninfo.line_length = DEFAULT_XRES * sizeof(uint32_t);
	stride = DEFAULT_XRES;
#else
	stride = fix_screeninfo.line_length/sizeof(uint32_t);
	if(stride == 7680 && var_screeninfo.xres == 1280) {
		var_screeninfo.yres = 1080;
	}

	if(!(lbb = malloc(var_screeninfo.xres*var_screeninfo.yres*sizeof(uint32_t))))
	{
		printf("%s <allocating of Backbuffer failed>\n", __plugin__);
		FTC_Manager_Done(manager);
		FT_Done_FreeType(library);
		munmap(lfb, fix_screeninfo.smem_len);
		return -1;
	}
#endif

	//lbb=lfb;
#if defined(HAVE_SPARK_HARDWARE) || defined(HAVE_DUCKBOX_HARDWARE)
	FillRect(0, 0, DEFAULT_XRES, DEFAULT_YRES, 0);
	blit();
#else
	memset(lbb, TRANSP, var_screeninfo.xres*var_screeninfo.yres*sizeof(uint32_t));
	memcpy(lfb, lbb, var_screeninfo.xres*var_screeninfo.yres*sizeof(uint32_t));
	//blit();
#endif

	startx = sx;
	starty = sy;

	/* scale to resolution */
	FSIZE_BIG = scale2res(FSIZE_BIG);
	FSIZE_MED = scale2res(FSIZE_MED);
	FSIZE_SMALL = scale2res(FSIZE_SMALL);

	TABULATOR = scale2res(TABULATOR);

	OFFSET_MED = scale2res(OFFSET_MED);
	OFFSET_SMALL = scale2res(OFFSET_SMALL);
	OFFSET_MIN = scale2res(OFFSET_MIN);

	/* Set up signal handlers. */
	signal(SIGINT, quit_signal);
	signal(SIGTERM, quit_signal);
	signal(SIGQUIT, quit_signal);
	signal(SIGSEGV, quit_signal);

	index=0;
	if(vfd)
	{
		sprintf(tstr,"%s -c", VFD);
		system(tstr);
	}
	ShowInfo(&menu, 1);
	//main loop
	menu.act_entry=0;
	if(Get_Menu(1))
	{
		printf("%s <unable to create menu>\n", __plugin__);
		FTC_Manager_Done(manager);
		FT_Done_FreeType(library);
		munmap(lfb, fix_screeninfo.smem_len);
		return -1;
	}
	cindex=0;

	put_instance(instance=get_instance()+1);

	while(mainloop)
	{
		cindex=Get_Selection(&menu);
		dloop=1;
		switch(cindex)
		{
			case -1:
				mainloop=0;
				break;

			case 0:
				mainloop=Menu_Up(&menu);
				break;

			case 1:
				pl=menu.list[menu.act_entry];
				switch (pl->type)
				{
					case TYP_MENU:
						menu.act_header=pl->headerpos;
						menu.lastheaderentrys[menu.act_header]=menu.act_entry;
						menu.headerwait[menu.act_header]=pl->message!=NULL;
						if(menu.headerwait[menu.act_header])
							{
								strcpy(tstr,pl->entry);
								if((rptr=strxchr(tstr,','))!=NULL)
								{
									*rptr=0;
								}
								ShowMessage(tstr, pl->message, 0);
							}
						Get_Menu(0);
						menu.act_entry=0;
						break;

					case TYP_EXECUTE:
						if((rptr=strxchr(pl->entry,','))!=NULL)
						{
							strcpy(tstr,pl->entry);
							rptr=strxchr(tstr,',');
							*rptr=0;
							rptr=strxchr(pl->entry,',');
							rptr++;
							if(pl->stay)
							{
								if(pl->stay==1)
								{
									if(pl->message)
									{
										if(strlen(pl->message))
										{
											ShowMessage(tstr, pl->message, 0);
										}
									}
									else
									{
										ShowMessage(tstr, "Bitte warten", 0);
									}
								}
								else
								{
#if defined(HAVE_SPARK_HARDWARE) || defined(HAVE_DUCKBOX_HARDWARE)
									FillRect(0, 0, DEFAULT_XRES, DEFAULT_YRES, 0);
									blit();
#else
									memset(lbb, TRANSP, var_screeninfo.xres*var_screeninfo.yres*sizeof(uint32_t));
									memcpy(lfb, lbb, var_screeninfo.xres*var_screeninfo.yres*sizeof(uint32_t));
									//blit();
#endif
								}

								if(*(rptr+strlen(rptr)-1)=='&')
								{
									*(rptr+strlen(rptr)-1)=0;
								}
							}
							else
							{
								if(*(rptr+strlen(rptr)-1)!='&')
								{
									sprintf(tstr,"%s &",rptr);
									rptr=tstr;
								}
							}
							CloseRC();
							system(rptr);
							InitRC();

							mainloop= pl->stay==1;
							if(pl->stay==1)
							{
								Get_Menu(1);
							}
						}
						break;
				}
		}
	}

	//cleanup
	Clear_List(&menu,-1);

	FTC_Manager_Done(manager);
	FT_Done_FreeType(library);
#if 0
	if(strlen(url))
	{
		sprintf(line_buffer,"/sbin/rdate -s %s > /dev/null &",url);
		system(line_buffer);
	}
#endif
	CloseRC();
	//CloseVFD();

	free(line_buffer);
	free(trstr);

	// clear Display
#if defined(HAVE_SPARK_HARDWARE) || defined(HAVE_DUCKBOX_HARDWARE)
	FillRect(0, 0, DEFAULT_XRES, DEFAULT_YRES, 0);
	blit();
#else
	memset(lbb, TRANSP, var_screeninfo.xres*var_screeninfo.yres*sizeof(uint32_t));
	memcpy(lfb, lbb, var_screeninfo.xres*var_screeninfo.yres*sizeof(uint32_t));
	//blit();
#endif
	munmap(lfb, fix_screeninfo.smem_len);

	close(fb);
#if !defined(MARTII) && !defined(HAVE_SPARK_HARDWARE) && !defined(HAVE_DUCKBOX_HARDWARE)
	free(lbb);
#endif

	put_instance(get_instance()-1);

	return 0;
}
int Get_Menu(int showwait)
{
	int rv=-1, loop=1, mlevel=0, clevel=0, pos=0;
	char *pt1,*pt2;
	FSTRUCT fstr;

	if(showwait && menu.headerwait[menu.act_header] && menu.headertxt[menu.act_header])
	{
		ShowMessage(menu.headertxt[menu.act_header],"Bitte warten ...",0);
	}
	Clear_List(&menu,1);
	if((fstr.fh[0]=fopen(CFG_FILE,"r"))!=NULL)
	{
		loop=1;
		menu.num_active=0;
		fstr.fnum=0;
		while((loop==1) && GetLine(line_buffer, BUFSIZE, &fstr))
		{
			if(IsMenu(line_buffer))
			{
				if(pos==menu.act_header)
				{
					clevel=menu.headerlevels[pos];
					loop=0;
				}
				mlevel++;
				pos++;
			}
			else
			{
				pt1=strstr(line_buffer,TYPESTR[TYP_ENDMENU]);
				if(pt1 && (pt1==line_buffer))
				{
					mlevel--;
				}
			}
			//printf("Get_Menu: loop: %d, mlevel: %d, pos: %d -> %s\n",loop,mlevel,pos,line_buffer);
		}
		if(loop)
		{
			return rv;
		}

		--pos;
		--mlevel;
		loop=1;
		while((loop==1) && GetLine(line_buffer, BUFSIZE, &fstr))
		{
			if(IsMenu(line_buffer))
			{
				pos++;
				if(mlevel==clevel)
				{
					AddListEntry(&menu, line_buffer, pos);
					rv=0;
				}
				mlevel++;
			}
			pt1=strstr(line_buffer,TYPESTR[TYP_ENDMENU]);
			if(pt1 && (pt1==line_buffer))
			{
				if(mlevel==clevel)
				{
					if((pt1=strchr(line_buffer,'='))!=NULL)
					{
						pt1++;
						if((pt2=strxchr(pt1,','))!=NULL)
						{
							*(pt2++)=0;
							menu.menactdep=strdup(pt2);
						}
						menu.menact=strdup(pt1);
					}

				}
				mlevel--;
			}
			else
			{
				if(mlevel==clevel)
				{
					AddListEntry(&menu, line_buffer, pos);
					rv=0;
				}
			}
			if(mlevel<clevel)
			{
				loop=0;
			}
		}
	fclose(fstr.fh[fstr.fnum]);
	}

	return rv;
}
Esempio n. 10
0
CTLinkedList<T>::~CTLinkedList()
{
    Clear_List();
}