Beispiel #1
0
/* mode 0 new file
 * mode 1 edit file
 */
int wama_file(int mode)
{
	char path[128];
	clean_screen();
	printf("Ruta del archivo: ");
	gets_s(path, 128);
	clean_screen();
	if (path[0] != '/') {
		char dev_path[128] = "/dev/";
		strcat(dev_path, path);
		strcpy(path, dev_path);
	}
	/* creamos el archivo 'path' */
	if ((touch(path, S_IRUSR | S_IWUSR)) < 0 && mode == NEW_FILE_MODE) {
		return -1;
	}
	int line_count = 1;
	char line[128];
	int fd;
	if ((fd = open(path, O_WRONLY)) < 0) {
		return -1;
	}
	if (mode == EDIT_FILE_MODE) {
		char *ch = read_file(path);
		write(fd, ch, strlen(ch));
		line_count = linecounter(ch);
		line_count++;
	}
	printf("\n\n\n %d ", line_count);
	char *data;
	while ( 1 ) {
		setwindow();
		subwindow(line_count);
		gets_s(line, 128);
		switch (checkWamaCommand(line)) {
			case 0:
				write(fd, line, strlen(line));
				write(fd, "\n", 1);
				break;
			case 1:
				close(fd);
				if (goto_wama_command(path, line_count) < 0) {
					return -1;
				}
				data = read_file(path);
				if ((fd = open(path, O_WRONLY)) < 0) {
					return -1;
				}
				write(fd, data, strlen(data));
				line_count--;
				break;
			case 2:
				close(fd);
				return 0;
				break;
		}
		line_count++;
		printf(" %d ", line_count);
	}
}
Beispiel #2
0
void load_scrfile() {


	unsigned char *videomem,*filename,value;
	int ancho,retorno,loop;
	FILE *fichero;
	unsigned char paleta_tmp[64];

	videomem=screen->pixels;
	ancho=screen->w;

	clean_screen();

	print_string(videomem,"Choose the SCR snapshot file to load",-1,32,13,0,ancho);

	filename=select_file(load_path_scr1,FILETYPE_SCR);

	if(filename==NULL) { // Aborted
		clean_screen();
		return;
	}

	ordenador.osd_text[0]=0;
	fichero=fopen(filename,"rb");
	retorno=0;
	if (!fichero) {
		retorno=-1;
	} else {
		for(loop=0;loop<6912;loop++) {
			if (1==fread(&value,1,1,fichero)) {
				*(ordenador.block1 + 0x04000 + loop) = value;
			} else {
				retorno=-1;
				break;
			}
		}
		if (1==fread(paleta_tmp,64,1,fichero)) {
			memcpy(ordenador.ulaplus_palete,paleta_tmp,64);
			ordenador.ulaplus=1;
		} else {
			ordenador.ulaplus=0;
		}
		fclose(fichero);
	}

	free(filename);
	clean_screen();

	switch(retorno) {
	case 0: // all right
		break;
	default:
		print_string(videomem,"Error: Can't load that file",-1,232,10,0,ancho);
		print_string(videomem,"Press any key",-1,248,10,0,ancho);
		wait_key();
	break;
	}
	clean_screen();
}
Beispiel #3
0
void snapshots_menu() {

	unsigned char *fbuffer,fin;
	int ancho=screen->w;

	fbuffer=screen->pixels;

	clean_screen();

	print_string(fbuffer,"SNAPSHOTS",-1,30,15,0,ancho);

	print_string(fbuffer,"1:",14,100,12,0,ancho);
	print_string(fbuffer,"load a Z80/SNA snapshot",62,100,15,0,ancho);

	if(ordenador.mode128k!=3) { // not in +3 mode
		print_string(fbuffer,"2:",14,160,12,0,ancho);
		print_string(fbuffer,"make a Z80 snapshot",62,160,15,0,ancho);
	} else {
		print_string(fbuffer,"Can't make snapshots in +3 mode",14,160,15,0,ancho);
	}

	print_string(fbuffer,"3: \001\017load a SCR snapshot",14,220,12,0,ancho);

	print_string(fbuffer,"4: \001\017save a SCR snapshot",14,280,12,0,ancho);

	print_string(fbuffer,"ESC: \001\017return to emulator",-1,400,12,0,ancho);

	//print_copy(fbuffer,ancho);

	fin=1;
	do {
		switch(wait_key()) {
		case SDLK_ESCAPE: // to exit the help
			fin=0;
		break;
		case SDLK_1:
			fin=0;
			load_z80file();
		break;
		case SDLK_2:
			fin=0;
			if(ordenador.mode128k!=3) // not in +3 mode
				save_z80file();
		break;
		case SDLK_3:
			fin=0;
			load_scrfile();
		break;
		case SDLK_4:
			fin=0;
			create_scrfile();
		break;
		default:
		break;
		}
	} while(fin);
	clean_screen();
}
Beispiel #4
0
void select_mdrfile() {

	unsigned char *videomem,*filename;
	int ancho,retorno,retval;
	// unsigned char char_id[11];

	videomem=screen->pixels;
	ancho=screen->w;

	clean_screen();

	print_string(videomem,"Choose the MICRODRIVE file to load",-1,32,13,0,ancho);

	filename=select_file(path_mdrs,FILETYPE_MDR); // MDR files

	if(filename==NULL) { // Aborted
		clean_screen();
		return;
	}

	ordenador.mdr_file=fopen(filename,"rb"); // read
	if(ordenador.mdr_file==NULL)
		retorno=-1;
	else {
		retorno=0;
		retval=fread(ordenador.mdr_cartridge,137923,1,ordenador.mdr_file); // read the cartridge in memory
		ordenador.mdr_modified=0; // not modified
		fclose(ordenador.mdr_file);
		ordenador.mdr_tapehead=0;
	}

	clean_screen();

	strcpy(ordenador.mdr_current_mdr,filename);

	free(filename);

	switch(retorno) {
	case 0: // all right
		break;
	case -1:
		print_string(videomem,"Error: Can't load that file",-1,232,10,0,ancho);
		print_string(videomem,"Press any key",-1,248,10,0,ancho);
		ordenador.mdr_current_mdr[0]=0;
		wait_key();
		break;
	}

	clean_screen();
}
Beispiel #5
0
void save_z80file() {

	unsigned char *videomem;
	int ancho,retorno;
	unsigned char nombre2[MAX_PATH_LENGTH];
	char *name;

	videomem=screen->pixels;
	ancho=screen->w;

	clean_screen();

	print_string(videomem,"Choose a name for the Z80 snapshot",-1,32,14,0,ancho);
	print_string(videomem,"(up to 30 characters)",-1,52,14,0,ancho);

	print_string(videomem,"Snapshot will be saved in:",-1,132,12,0,ancho);
	print_string(videomem,path_snaps,0,152,12,0,ancho);

	if (strlen(ordenador.current_tap))
		{
		name=strrchr(ordenador.current_tap,'/');
		if (name) name++; else name = ordenador.current_tap;
		}
	else
	 name=NULL;
	 
	retorno=ask_filename(nombre2,84,"z80", path_snaps, name);

	clean_screen();

	if(retorno==2) // abort
		return;

	retorno=save_z80(nombre2,0);
	switch(retorno) {
	case 0:
		break;
	case -1:
		print_string(videomem,"File already exists",-1,80,10,0,ancho);
		wait_key();
		break;
	case -2:
		print_string(videomem,"Can't create file",-1,80,10,0,ancho);
		wait_key();
		break;
	}
	clean_screen();
}
int	exit_program(char *buffer)
{
  if (buffer[0] == 27 && buffer[1] == 0)
    {
      clean_screen();
      my_putstr("Echap pressed.\n");
      return (0);
    }
  else if (buffer[0] == 4)
    {
      clean_screen();
      my_putstr("Ctrl+d EXIT\n");
      return (0);
    }
  return (1);
}
Beispiel #7
0
void		key_handler(unsigned int key, t_entlist *l, int *running)
{
	if (key == K_ENT)
	{
		clean_screen(l);
		*running = 0;
	}
	else
	{
		if (key == K_ESC)
			quit(l);
		else if (key == K_DOWN)
			go_down(l);
		else if (key == K_UP)
			go_up(l);
		else if (key == K_RIGHT)
			go_right(l);
		else if (key == K_LEFT)
			go_left(l);
		else if (key == K_DEL || key == K_BKSPC)
			delete_key(l);
		else
			special_keys(key, l);
	}
}
Beispiel #8
0
void	boucle_move_list(t_list *list, char *term, t_pars *pars, t_list *tmp)
{
  pars->buf = my_malloc(4);
  pars->j = 0;
  pars->pos = pars->size;
  tmp = list;
  message_nb_allum(list, tmp, pars);
  while (my_strcpy(pars->buf, save(pars)))
    {
      tmp = limitation(pars, term, tmp, list);
      message_nb_allum(list, tmp, pars);
      if (pars->buf[0] == 10 && pars->j == 0)
	{
	  pars->i = 0;
	  pars->j = 1;
	  tmp = bot_player(list, tmp, pars);
	  clean_screen(term);
	  disp_allum(list, pars->size, pars->pos);
	  message_nb_allum(list, tmp, pars);
	}
      free(pars->buf);
      pars->buf = my_malloc(4);
    }
  free(pars->buf);
}
Beispiel #9
0
void abort_handler(int signal)
{
	static char crashed = FALSE;

	if (crashed)
	{
		exit(-1);
	}
	crashed = TRUE;

	restore_terminal();

	clean_screen(gtd->ses);

	dump_stack();

	fflush(NULL);

	exit(-1);

	if (gtd->ses->connect_retry > utime())
	{
		gtd->ses->connect_retry = 0;
	}
	else if (HAS_BIT(gtd->ses->telopts, TELOPT_FLAG_SGA) && !HAS_BIT(gtd->ses->telopts, TELOPT_FLAG_ECHO))
	{
		socket_printf(gtd->ses, 1, "%c", 3);
	}
	else
	{
		do_zap(gtd->ses, "");
	}
}
Beispiel #10
0
int			main(int argc, char **argv)
{
  t_list		*list;
  char			*term;
  char			*bp;
  int			tty;
  struct termios	t;
  struct termios	save;

  init_main(&bp, &list);
  tty = get_tty_fd();
  if (argc < 2)
    {
      my_printf("[*] Usage : %s [arg:]\n", argv[0]);
      return (0);
    }
  if (my_params_to_list(&list, argc, argv))
    return (1);
  if (catch_error(&term, bp, &t, &save))
    return (1);
  raw_mode(&t);
  clean_screen(tty);
  my_select(&list, tty);
  default_mode(&save);
  return (0);
}
Beispiel #11
0
void isr(u8int idt_num, u8int errno, u32int eip, u32int sel)
{
	u8int num = 16;
	if(idt_num < num)  num = idt_num;
	clean_screen();
	kprintf("%s: errorno[%x]  sel[0x%x]  eip[0x%x]\n", 
				exception_msg[num], errno, sel, eip);
	while(1);
}
Beispiel #12
0
void tools_menu() {

	unsigned char *fbuffer,fin;
	int ancho=screen->w;

	fbuffer=screen->pixels;

	fin=1;
	do {
		clean_screen();

		print_string(fbuffer,"Tools",-1,20,15,0,ancho);

		print_string(fbuffer,"1:",14,60,12,0,ancho);
		print_string(fbuffer,"show keyboard template",62,60,15,0,ancho);

		print_string(fbuffer,"2:",14,100,12,0,ancho);
		print_string(fbuffer,"insert POKEs",62,100,15,0,ancho);

		print_string(fbuffer,"ESC:",14,250,12,0,ancho);
		print_string(fbuffer,"return emulator",78,250,15,0,ancho);

		//print_copy(fbuffer,ancho);

		switch(wait_key()) {
		case SDLK_ESCAPE: // to exit the help
			fin=0;
		break;
		case SDLK_1:
			fin=0;
			keyboard_menu();
		break;
		case SDLK_2:
			fin=0;
			do_poke();
		break;
		default:
		break;
		}

	} while(fin);

	clean_screen();
}
Beispiel #13
0
void pipe_handler(int signal)
{
	restore_terminal();

	clean_screen(gtd->ses);

	tintin_printf(NULL, "broken_pipe: dumping stack");

	dump_stack();
}
Beispiel #14
0
void kernel(){
	setup_idt();
	clean_screen();
	print_mem_info();
	mm_init();
	init_8259A();
	*(int*)0xf0000000 = 0;	//cause pf interrupt
	//asm volatile("int $0xff");
	while(1);
}
Beispiel #15
0
void load_z80file() {


	unsigned char *videomem,*filename;
	int ancho,retorno;

	videomem=screen->pixels;
	ancho=screen->w;

	clean_screen();

	print_string(videomem,"Choose the Z80 snapshot file to load",-1,32,13,0,ancho);

	filename=select_file(load_path_snaps,FILETYPE_Z80);

	if(filename==NULL) { // Aborted
		clean_screen();
		return;
	}

	retorno=load_z80(filename);
	free(filename);
	clean_screen();

	switch(retorno) {
	case 0: // all right
		break;
	case -1:
		print_string(videomem,"Error: Can't load that file",-1,232,10,0,ancho);
		print_string(videomem,"Press any key",-1,248,10,0,ancho);
		wait_key();
		break;
	case -2:
	case -3:
		print_string(videomem,"Error: unsupported snap file",-1,232,10,0,ancho);
		print_string(videomem,"Press any key",-1,248,10,0,ancho);
		wait_key();
		break;
	}
	clean_screen();
}
Beispiel #16
0
void keyboard_menu() {
	
	FILE *fichero;
	int bucle1,bucle2,retval;
	unsigned char *buffer,*buffer2,valor;

	buffer=screen->pixels;
	
	clean_screen();
	fichero=myfopen("fbzx/keymap.bmp","rb");
	if (fichero==NULL) {
		strcpy(ordenador.osd_text,"Keymap picture not found");
		ordenador.osd_time=100;
		return;
	}
	if (ordenador.zaurus_mini==0) {
		for (bucle1=0;bucle1<344;bucle1++)
			for(bucle2=0;bucle2<640;bucle2++) {
				retval=fscanf(fichero,"%c",&valor);
				paint_one_pixel((unsigned char *)(colors+valor),buffer);
				buffer+=ordenador.bpp;
			}
	} else {
		buffer+=(479*ordenador.bpp);
		for(bucle1=0;bucle1<344;bucle1++) {
			buffer2=buffer;
			for(bucle2=0;bucle2<640;bucle2++) {
				retval=fscanf(fichero,"%c",&valor);
				paint_one_pixel((unsigned char *)(colors+valor),buffer);
				buffer+=(480*ordenador.bpp);
			}
			buffer=buffer2-ordenador.bpp;
		}
	}
	//print_copy(screen->pixels,screen->w);
	wait_key();
	clean_screen();
}
int		send_selection(t_list *list)
{
  t_list	*it;

  clean_screen();
  it = list;
  it = list->prev;
  while (it != list)
    {
      if (it->i == 1)
	{
	  my_putstr(it->data);
	  my_putchar(' ');
	}
      it = it->prev;
    }
  return (1);
}
Beispiel #18
0
void Apep::run(){
    assert("You must initialize engine before run!" && back_buffer != nullptr);
    clean_screen();

    if (!game_setup()) return;

    while (game_update()) {

        while (_kbhit())
            key(_getch());
        
        game_draw();
        flush();

        Sleep(10);
    }

    game_cleanup();
}
Beispiel #19
0
void show_func_menu()
{
	clean_screen(CURRENT_OS_TYPE);
	puts("-----------------| MAIN MENU |-----------------");
	puts("<1>  List All Contacts");
	puts("<2>  Search a Contact By Name");
	puts("<3>  Search a Contact By Phone");
	puts("<4>  Add a New Contact");
	puts("<5>  Update a Contact By Index");
	puts("<6>  Update a Contact By Name");
	puts("<7>  Update a Contact By Phone");
	puts("<8>  Delete a Contact By Index");
	puts("<9>  Delete a Contact By Name");
	puts("<10> Delete a Contact By Phone");
	puts("<11> About Developer");
	puts("<12> List addresses of all nodes");
	puts("<13> Exit");
	puts("-----------------------------------------------");
}
Beispiel #20
0
void quitmsg(char *message)
{
	struct session *ses;

	SET_BIT(gtd->flags, TINTIN_FLAG_TERMINATE);

	while ((ses = gts->next) != NULL)
	{
		cleanup_session(ses);
	}

	if (gtd->chat)
	{
		close(gtd->chat->fd);
	}

	check_all_events(gts, SUB_ARG|SUB_SEC, 0, 0, "PROGRAM TERMINATION");

/*
	if (gtd->history_size)
	{
		char filename[BUFFER_SIZE];

		sprintf(filename, "%s/%s", getenv("HOME"), HISTORY_FILE);

		history_write(gts, filename);
	}
*/
	restore_terminal();

	clean_screen(gts);

	if (message)
	{
		printf("\n%s\n", message);
	}

	printf("\nGoodbye from TinTin++\n\n");

	fflush(NULL);

	exit(0);
}
Beispiel #21
0
int main(void) {
	grid = init_sokoban();

	if(!init_gamepad())
	    exit(-1);

	init_screen();
	grid2screen(grid);
	
	while(do_button_action() != 0) {
		pause();
	}
	
	delete_sokoban(grid);
	close_gamepad();
	fill_screen(0x0000);
	clean_screen();
	
	return 0;
}
Beispiel #22
0
void trap_handler(int signal)
{
	static char crashed = FALSE;

	if (crashed)
	{
		exit(-1);
	}
	crashed = TRUE;

	restore_terminal();

	clean_screen(gtd->ses);

	dump_stack();

	fflush(NULL);

	exit(-1);
}
Beispiel #23
0
struct pa_simple *pulseaudio_begin(void) {
    int error;
    struct pa_simple *s;

    static const pa_sample_spec ss = {
        .format = PA_SAMPLE_FLOAT32LE,
        .rate = RATE,
        .channels = 1
    };
    static const pa_buffer_attr sb = {
        .maxlength = N * 2,
        .fragsize = N * 2
    };
    if(!(s = pa_simple_new(NULL, "paSpec", PA_STREAM_RECORD, NULL, "input stream", &ss, NULL, &sb, &error))) {
        printf("Error: pulseaudio: pa_simple_new() failed: %s\n", pa_strerror(error));
        clean_screen();
        exit(1);
    }
    return s;
}

void pulseaudio_end(struct pa_simple *s) {
    if(s != NULL) {
        pa_simple_free(s);
    }
}

void pulseaudio_read(struct pa_simple *s, float *buf, int sampnum) {
    int error;
    if(pa_simple_read(s, buf, sampnum * sizeof(float), &error) < 0) {
        printf("Error: pa_simple_read() failed: %s\n", pa_strerror(error));
        pulseaudio_end(s);
        exit(1);
    }
}

void prnt(char hah, unsigned int cnt, unsigned int s, unsigned int sh) {
    while(cnt--) {
        printf("\e[%i;%iH%c", sh - cnt, s, hah);
    }
}
bool		print_substr_in_directory(t_prompt *prompt, DIR *dir)
{
  struct dirent	*entry;
  char		flag;

  clean_screen(prompt);
  flag = 0;
  while ((entry = readdir(dir)))
    {
      if ((!prompt->count_char
	   || !strncmp(entry->d_name, prompt->line + prompt->offset,
		       prompt->count_char - prompt->offset)))
	{
	  write(1, entry->d_name, strlen(entry->d_name));
	  write(1, "\n", 1);
	  flag = 1;
	}
    }
  update_local_prompt(prompt);
  return (flag);
}
Beispiel #25
0
int load_menu() {

    bool exit = false;

    clean_screen();

    while(!exit) {


        print_meny();

        printf("What do you want to do?: ");
        char input;
        input = ask_for_char("Choice: ", "AaRrEePpUuLlQq");
        exit = handle_menu_input(input);


    }

    printf("Exiting warehouse...");
    return 0;

}
Beispiel #26
0
int main()
{
    Contact *head=NULL;
    Contact *tail=NULL;

	srand(time(0));
	CURRENT_OS_TYPE = OS_TYPE_WINDOWS;

	puts("-----------------| INITIALIZING CONTACTS |-----------------");
	puts("Please wait while initializing your contacts...");
    initialize_contacts(&head, &tail);
	puts("Done !");
	puts("-----------------------------------------------------------");

	int ch = -1, keep = 1;
	while(keep == 1)
	{
		show_func_menu();
		printf("SELECT : ");
		scanf("%d", &ch);
		switch(ch)
		{
			clean_screen(CURRENT_OS_TYPE);
			case 1:
			{
				clean_screen(CURRENT_OS_TYPE);
				puts("-----------------| LIST ALL CONTACTS |-----------------");
				list_all_contacts(head);
				puts("-------------------------------------------------------");

				break;
			}
			case 2:
			{
				clean_screen(CURRENT_OS_TYPE);
				puts("-----------------| SEARCH CONTACT BY NAME |-----------------");
				char *tmp_fn = (char *)malloc(20);
				char *tmp_ln = (char *)malloc(20);
				printf("Enter First_Name Last_Name: ");
				scanf("%s %s", tmp_fn, tmp_ln);
				Contact *temp = search_contact_by_name(head, tmp_fn, tmp_ln);
				if(temp == NULL)
					puts("No results !");
				else
					printf("%s %s\t\t%s\t\t%s\n", temp->name->first_name, temp->name->last_name, temp->gender == FEMALE ? "Female" : "Male", temp->phone);
				puts("------------------------------------------------------------");

				break;
			}
			case 3:
			{
				clean_screen(CURRENT_OS_TYPE);
				puts("-----------------| SEARCH CONTACT BY PHONE |-----------------");
				char *tmp_phone = (char *)malloc(10);
				printf("Enter Phone: ");
				scanf("%s", tmp_phone);
				Contact *temp = search_contact_by_phone(head, tmp_phone);
				if(temp == NULL)
					puts("No results !");
				else
					printf("%s %s\t\t%s\t\t%s\n", temp->name->first_name, temp->name->last_name, temp->gender == FEMALE ? "Female" : "Male", temp->phone);
				puts("-------------------------------------------------------------");

				break;
			}
			case 4:
			{
				clean_screen(CURRENT_OS_TYPE);
				puts("-----------------| ADD CONTACT |-----------------");
				char *tmp_fn = (char *)malloc(20);
				char *tmp_ln = (char *)malloc(20);
				char *tmp_phone = (char *)malloc(11);
				int tmp_gender;
				printf("Enter First_Name Last_Name: ");
				scanf("%s %s", tmp_fn, tmp_ln);
				printf("Enter Phone: ");
				scanf("%s", tmp_phone);
				printf("Enter Gender(1 for Male, 0 for Female): ");
				scanf("%d", &tmp_gender);
				Name *tmp_name = (struct Name *)malloc(sizeof(struct Name));
				tmp_name->first_name = tmp_fn;
				tmp_name->last_name = tmp_ln;
				add_contact(&head, &tail, tmp_name, tmp_gender, tmp_phone);
				puts("-------------------------------------------------");
				break;
			}
			case 5:
			{
			    clean_screen(CURRENT_OS_TYPE);
				puts("-----------------| UPDATE CONTACT BY INDEX |-----------------");
                int index;
                printf("Enter The Index: ");
                scanf("%d",&index);
                if((index<=0)||(index>CSIZE))
                {
                    printf("Cannot Found This Data\n");
                    break;
                }
                else
                {
                    Contact *current=head;
                    int i;
                    for(i=1;i<=CSIZE;i++)
                    {
                        if(index==1)
                        {
                            break;
                        }
                        else if((i==index)&&(i<CSIZE))
                        {
                            break;
                        }
                        else if((i==index)&&(i==CSIZE))
                        {
                            break;
                        }
                        current=current->next;
                    }
                    puts("------------------------------------------------------------");
				    printf("%s %s\t\t%s\t\t%s\n", current->name->first_name, current->name->last_name, current->gender == FEMALE ? "Female" : "Male", current->phone);
				    puts("------------------------------------------------------------");
                }
                printf("Would you like to update it? (Y/N) ");
                char *tmp_fn = (char *)malloc(20);
				char *tmp_ln = (char *)malloc(20);
				char *tmp_phone = (char *)malloc(10);
				int tmp_gender;
                if(toupper(getche())=='Y')
                {
				    printf("\nEnter First_Name Last_Name: ");
				    scanf("%s %s", tmp_fn, tmp_ln);
				    printf("Enter Phone: ");
				    scanf("%s", tmp_phone);
				    printf("Enter Gender(1 for Male, 0 for Female): ");
				    scanf("%d", &tmp_gender);
				    Name *tmp_name = (struct Name *)malloc(sizeof(struct Name));
				    tmp_name->first_name = tmp_fn;
				    tmp_name->last_name = tmp_ln;
				    update_contact_by_index(&head,index, tmp_name, tmp_gender, tmp_phone);
				    puts("------------------------------------------------------------");
			    }
			    else
			    {
			        printf("\n");
			    }
                break;
			}
			case 6:
			{
				clean_screen(CURRENT_OS_TYPE);
				puts("-----------------| UPDATE CONTACT BY NAME |-----------------");
				char *tmp_o_fn = (char *)malloc(20);
				char *tmp_o_ln = (char *)malloc(20);
				printf("Enter First_Name Last_Name: ");
				scanf("%s %s", tmp_o_fn, tmp_o_ln);
				Name *tmp_o_name = (struct Name *)malloc(sizeof(struct Name));
				tmp_o_name->first_name = tmp_o_fn;
				tmp_o_name->last_name = tmp_o_ln;
				Contact *temp = search_contact_by_name(head, tmp_o_fn, tmp_o_ln);
				if(temp == NULL)
					printf("Cannot locate %s %s.\n",tmp_o_fn, tmp_o_ln);
				else{
 			       puts("------------------------------------------------------------");
				   printf("%s %s\t\t%s\t\t%s\n", temp->name->first_name, temp->name->last_name, temp->gender == FEMALE ? "Female" : "Male", temp->phone);
				   puts("------------------------------------------------------------");
				}
                printf("Would you like to continue the update? (Y/N) ");
				char *tmp_fn = (char *)malloc(20);
				char *tmp_ln = (char *)malloc(20);
				char *tmp_phone = (char *)malloc(10);
				int tmp_gender;
                if(toupper(getche())=='Y')
                {
				    printf("\nEnter First_Name Last_Name: ");
				    scanf("%s %s", tmp_fn, tmp_ln);
				    printf("Enter Phone: ");
				    scanf("%s", tmp_phone);
				    printf("Enter Gender(1 for Male, 0 for Female): ");
				    scanf("%d", &tmp_gender);
				    Name *tmp_name = (struct Name *)malloc(sizeof(struct Name));
				    tmp_name->first_name = tmp_fn;
				    tmp_name->last_name = tmp_ln;
				    update_contact_by_name(&head, tmp_o_name, tmp_name, tmp_gender, tmp_phone);
				    puts("------------------------------------------------------------");
			    }
			    else
			    {
			        printf("\n");
			    }
                break;
			}
			case 7:
			{
			    clean_screen(CURRENT_OS_TYPE);
				puts("-----------------| UPDATE CONTACT BY PHONE |-----------------");
				char *temp_o_phone=(char *)malloc(11);
				printf("Enter The Phone: ");
				scanf("%s", temp_o_phone);
				Contact *temp=search_contact_by_phone(head,temp_o_phone);
                if(temp==NULL)
                {
                    printf("Cannot Found %s",temp_o_phone);
                }
                else
                {
                    puts("------------------------------------------------------------");
				    printf("%s %s\t\t%s\t\t%s\n", temp->name->first_name, temp->name->last_name, temp->gender == FEMALE ? "Female" : "Male", temp->phone);
				    puts("------------------------------------------------------------");
                }
                printf("Would you like to continue the update? (Y/N) ");
				char *tmp_fn = (char *)malloc(20);
				char *tmp_ln = (char *)malloc(20);
				char *tmp_phone = (char *)malloc(10);
				int tmp_gender;
                if(toupper(getche())=='Y')
                {
				    printf("\nEnter First_Name Last_Name: ");
				    scanf("%s %s", tmp_fn, tmp_ln);
				    printf("Enter Phone: ");
				    scanf("%s", tmp_phone);
				    printf("Enter Gender(1 for Male, 0 for Female): ");
				    scanf("%d", &tmp_gender);
				    Name *tmp_name = (struct Name *)malloc(sizeof(struct Name));
				    tmp_name->first_name = tmp_fn;
				    tmp_name->last_name = tmp_ln;
				    update_contact_by_phone(&head, temp_o_phone, tmp_name, tmp_gender, tmp_phone);
				    puts("------------------------------------------------------------");
			    }else
			    {
			        printf("\n");
			    }
			    break;
			}
			case 8:
			{
				clean_screen(CURRENT_OS_TYPE);
				puts("-----------------| DELETE CONTACT BY INDEX |-----------------");
				int index;
				printf("Enter Index[1:%d]: ", CSIZE);
				scanf("%d", &index);
				int success=0;
				success = delete_contact_by_index(&head, &tail, index);
                if(success)
                  printf("Deletion successful\n");
                else
                  printf("No such index %d\n",index);
				puts("-------------------------------------------------------------");
				break;
			}
			case 9:
			{
                clean_screen(CURRENT_OS_TYPE);
				puts("-----------------| DELETE CONTACT BY NAME |-----------------");
				char *tmp_o_fn = (char *)malloc(20);
				char *tmp_o_ln = (char *)malloc(20);
				printf("Enter First_Name Last_Name: ");
				scanf("%s %s", tmp_o_fn, tmp_o_ln);
				Name *tmp_o_name = (struct Name *)malloc(sizeof(struct Name));
				tmp_o_name->first_name = tmp_o_fn;
				tmp_o_name->last_name = tmp_o_ln;
				int success=0;
                success = delete_contact_by_name(&head, &tail, tmp_o_name);
                if(success)
                  printf("Deletion successful\n");
				else
				  printf("%s %s cannot be found!\n", tmp_o_fn, tmp_o_ln);
                puts("------------------------------------------------------------");

				break;
			}
			case 10:
			{
                clean_screen(CURRENT_OS_TYPE);
                puts("-----------------| DELETE CONTACT BY PHONE |-----------------");
                char *tmp_phone=(char *)malloc(11);
                printf("Enter The Phone: ");
                scanf("%s",tmp_phone);
                int success=0;
                success=delete_contact_by_phone(&head,&tail,tmp_phone);
                if(success)
                {
                    printf("Deletion successful\n");
                }
                else
                {
                    printf("%s cannot be found!\n",tmp_phone);
                }
                puts("------------------------------------------------------------");
				break;
			}
			case 11:
			{
				clean_screen(CURRENT_OS_TYPE);
				puts("-----------------| ABOUT DEVELOPER |-----------------");
				about_developer();
				puts("-----------------------------------------------------");

				break;
			}
			case 12:
			{
				clean_screen(CURRENT_OS_TYPE);
				list_all_nodes_address(head, tail);
				break;
			}
			case 13:
			{
				clean_screen(CURRENT_OS_TYPE);
				puts("BYE-BYE !");
				keep = 0;

				break;
			}
			default:
				puts("Bad choice");
		}

		pause(CURRENT_OS_TYPE);
	}

	return 0;
}
Beispiel #27
0
void microdrive_menu() {

	unsigned char *fbuffer,fin;
	int retval,ancho=screen->w;

	fbuffer=screen->pixels;
	
	fin=1;
	do {
			clean_screen();

		print_string(fbuffer,"MICRODRIVE files",-1,20,15,0,ancho);

		print_string(fbuffer,"1:",14,60,12,0,ancho);
		print_string(fbuffer,"select a MDR file",62,60,15,0,ancho);

		print_string(fbuffer,"2:",14,100,12,0,ancho);
		print_string(fbuffer,"create a MDR file",62,100,15,0,ancho);

		print_string(fbuffer,"3:",14,140,12,0,ancho);
		print_string(fbuffer,"write protection",62,140,15,0,ancho);
				
		print_string(fbuffer,"ESC:",14,180,12,0,ancho);
		print_string(fbuffer,"return emulator",78,180,15,0,ancho);

		print_string(fbuffer,"Current MDR file is:",-1,300,12,0,ancho);
		print_string(fbuffer,ordenador.mdr_current_mdr,-1,320,12,0,ancho);

		//print_copy(fbuffer,ancho);
		
		if(!ordenador.mdr_cartridge[137922])
			print_string(fbuffer,"Write enabled",-1,420,14,0,ancho);
		else
			print_string(fbuffer,"Write disabled",-1,420,14,0,ancho);

		switch(wait_key()) {
		case SDLK_ESCAPE: // to exit the help
			fin=0;
		break;

		case SDLK_1:			
			select_mdrfile();
		break;
		case SDLK_2:
			create_mdrfile();
		break;
		case SDLK_3:
			if(ordenador.mdr_cartridge[137922])
				ordenador.mdr_cartridge[137922]=0;
			else
				ordenador.mdr_cartridge[137922]=1;
			ordenador.mdr_file=fopen(ordenador.mdr_current_mdr,"wb"); // create for write
			if(ordenador.mdr_file!=NULL) {				
				retval=fwrite(ordenador.mdr_cartridge,137923,1,ordenador.mdr_file); // save cartridge
				fclose(ordenador.mdr_file);
				ordenador.mdr_file=NULL;
				ordenador.mdr_modified=0;
			}			
		break;
		default:
		break;
		}

	} while(fin);

	clean_screen();
}
Beispiel #28
0
// you may want to have a look into /usr/src/linux/drivers/char/console.c
void parse_character(termstate_t * term, l4_uint8_t c)
{
    int i;

    // these must be handled independetly of state
    switch (c)
    {
    case 0: // ignore
        return;
    case 7: // bell
        // todo: impl. me
        return;
    case 8: // backspace
        if (term->cur_x > 0)
            term->cur_x--;
        return;
    case 9: // tab
        cursor_tab(term);
        return;
    case 10: // newline (lf)
    case 11: // ?
    case 12: // ?
        cursor_nl(term);
        return;
    case 13: // do a cr here, maybe a smart one (+ lf)
        cursor_cr(term);
        return;
    case 27: // ESC
        term->esc_state = ESesc;
        return;
    }

    // now check for the state-dependant characters
    switch (term->esc_state)
    {
    case ESnormal:
        // normal character
        if ((c >= 0x20 && c <= 0x7e) || (c >= 0xa1 && c <= 0xfe))
        {
            if (term->insert_mode == VT100_INSMODE_REPLACE)
            {
                set_char(term, c);
                //vt100_redraw_xy(term, term->cur_x, term->cur_y);
                cursor_next(term);
            }
            else // VT100_INSMODE_INSERT
            {
                insert_char(term, c);
                //vt100_redraw(term);
            }
            return;
        }
//        switch (c)
//        {
//        }
        break;
    case ESesc: // normal ESC found
        term->esc_state = ESnormal;
        switch (c)
        {
        case '[':
            term->esc_state = ESsquare;
            return;
        case 'D':  // lf
            cursor_lf(term);
            //vt100_redraw(term);
            return;
        case 'E':  // cr + lf
            cursor_nl(term);
            //vt100_redraw(term);
            return;
        case 'H':  // set tab at current position
            set_tab( term, term->cur_x );
            return;
        case 'M':
            rev_scroll(term);
            //vt100_redraw(term);
            return;
        case '7':  // save cursor position and attributes
            term->cur_stored_x    = term->cur_x;
            term->cur_stored_y    = term->cur_y;
            term->cur_stored_attr = term->attrib_mode;
            return;
        case '8':  // restore saved cursor position and attributes
            term->cur_x         = term->cur_stored_x;
            term->cur_y         = term->cur_stored_y;
            term->attrib_mode   = term->cur_stored_attr;
            return;
        case '#':
            term->esc_state = EShash;
            return;
        case 'c':  // reset vt to default settings
            init_termstate(term, term->w, term->phys_h, term->virt_h);
            return;
        }
    case ESsquare:
        for(i = 0; i < NUM_PAR; i++)
            term->par[i] = 0;
        term->used_par = 0;
        term->esc_state = ESgetpars;
        term->ques = (c=='?');
        if (term->ques)
            return;
        // fall-through
    case ESgetpars:
        if (c == ';' && term->used_par < NUM_PAR - 1)
        {
            term->used_par++;
            return;
        }
        else if (c >= '0' && c <= '9')
        {
            term->par[term->used_par] *= 10;
            term->par[term->used_par] += c - '0';
            return;
        } else term->esc_state = ESgotpars;
        // fall-through
    case ESgotpars:
        term->esc_state = ESnormal;
        switch (c)
        {
        case 'h':
            if (term->ques)
            {
                // handle question commands ending with h
                for (i = 0; i <= term->used_par; i++)
                {
                    switch( term->par[i] )
                    {
                    case  5: // activate inverse screen
                        if (set_mode(term, 1))
                            //vt100_redraw(term);
                        break;
                    case  6: // origin mode = scroll region
                        term->origin_mode = VT100_ORIGIN_SCROLL;
                        break;
                    case  7: // autowrap mode on
                        term->autowrap   = 1;
                        break;
                    case  8: // autorepeat on
                        term->autorepeat = 1;
                        break;
                    case 25: // activate cursor
                        term->cursor_vis = 1; return;
                    default:
                        break;
                    }
                }
                return;
            }
            else // handle commands without question mark
            {
                for(i = 0; i <= term->used_par; i++)
                {
                    switch( term->par[i] )
                    {
                    case 4: // insert mode on
                        term->insert_mode = VT100_INSMODE_INSERT;
                        break;
                    case 12: // echo on
                        term->echo = 1;
                        break;
                    case 20: // line feed mode
                        term->newline = 1;
                        break;
                    default: break;
                    }
                }
                return;
            }
        case 'l':
            if (term->ques)
            {
                for(i = 0; i <= term->used_par; i++)
                {
                    // handle question commands ending with l
                    switch( term->par[i] )
                    {
                    case  3: // set 80 column mode, clear screen
                        // todo: impl. resize and use it here
                        break;
                    case  5: // deactivate inverse screen
                        if(set_mode(term, 0))
                            //vt100_redraw(term);
                        break;
                    case  6: // origin mode = whole screen
                        term->origin_mode = VT100_ORIGIN_GLOBAL;
                    case  7: // autowrap mode off
                        term->autowrap = 0;
                        break;
                    case  8: // autorepeat off
                        term->autorepeat = 0;
                        break;
                    case 25: // deactivate cursor
                        term->cursor_vis = 0; return;
                    default: break;
                    }
                    return;
                }
            }
            else // handle commands without question mark
            {
                for( i=0; i <= term->used_par; i++ )
                {
                    switch( term->par[i] )
                    {
                    case 4: // insert mode off
                        term->insert_mode = VT100_INSMODE_REPLACE;
                        break;
                    case 12: // echo off
                        term->echo = 0;
                        break;
                    case 20: // carriage return mode
                        term->newline = 0;
                        break;
                    default:
                        break;
                    }
                    return;
                }
            }
        }
        if (term->ques)
        {
            term->ques = 0;
            return;
        }
        switch (c)
        {
        case 'F':  // CR + up
            term->cur_x     = 0;
            // fall through
        case 'A':  // up
            if (! term->par[0])
                term->par[0]++;
            cursor_up(term);
            return;
        case 'E':  // CR + down
            term->cur_x     = 0;
            // fall through
        case 'B':  // down
            if (! term->par[0])
                term->par[0]++;
            cursor_down(term);
            return;
        case 'C':  // right
            // no parameter -> set parameter to default (=1)
            if (! term->par[0])
                term->par[0]++;
            cursor_right(term);
            return;
        case 'D':  // left
            if (! term->par[0])
                term->par[0]++;
            cursor_left(term);
            return;
        case 'G':  // cursor position horizontal absolute
            if ( (term->par[0] > 0) &&
                 (term->par[0] < term->w) )
                term->cur_x = term->par[0];
            return;
        case 'H':  // absolute position (x,y)
        case 'f':  // f is the same as H (correct me, if I'm wrong)
            // well it is the same in the Linux kernel, in theorie the
            // 'f' commands depend on the PUM (Position unit mode),
            // which can be characters (seems to be default) or inch
            if (term->par[0] > 0)  // convert to (0, 0) based coords
                term->par[0]--;
            if (term->par[1] > 0)
                term->par[1]--;
            cursor_move_abs(term, term->par[1], term->par[0]);
            return;
        case 'I':  // insert tabs ('\t', term->par[0] times)
            if (!term->par[0])
                term->par[0]++;
            for (i=0;i<term->par[0];i++)
                cursor_tab(term);
            return;
        case 'J':
            switch(term->par[0])
            {
            case 0:  // kill to end of screen
                clean_to_eos(term);
                //vt100_redraw(term);
                return;
            case 1:  // kill from start of screen
                clean_from_sos(term);
                //vt100_redraw(term);
                return;
            case 2:  // kill whole screen
                clean_screen(term, ' ');
                //vt100_redraw(term);
                return;
            }
        case 'K':  // kill to end of line
            switch(term->par[0])
            {
            case 0: // clean to end of line
                clean_to_eol(term);
                //vt100_redraw(term);
                return;
            case 1: // clean from start of line
                clean_from_sol(term);
                return;
            case 2: // erase whole line
                clean_line(term, term->cur_y);
                return;
            }
        case 'L':  // insert lines
            if (!term->par[0])
                term->par[0] = 1;
            for (i=0; i<term->par[0]; i++)
                insert_line(term);
            //vt100_redraw(term);
            return;
        case 'M':  // erase lines
            if (!term->par[0])
                term->par[0] = 1;
            for (i=0; i<term->par[0]; i++)
                erase_line(term);
            //vt100_redraw(term);
            return;
        case 'c':  // we were asked to identify the terminal type
            identify(term);
            return;
        case 'g':  // erase tab(s)
            switch(term->par[0])
            {
                case 0:  remove_tab( term, term->cur_x );
                         break;
                case 3:  clear_tabs( term );
                         break;
                default: break;
            }
            return;
        case 'm':
            csi_m(term);
            return;
        case 'r':  // set scrolling region
            if (term->par[0] == 0)
                term->par[0]++;
            if (term->par[1] == 0)
                term->par[1] = term->phys_h;
            /* Minimum allowed region is 2 lines */
            if (term->par[0] < term->par[1] &&
                term->par[1] <= term->phys_h)
            {
                term->scroll_top = term->par[0] - 1;
                term->scroll_bottom = term->par[1]; // this line is excluded
                // if in origin mode, make sure that the cursor is placed
                // inside the scrolling region immediately
                if (term->origin_mode == VT100_ORIGIN_SCROLL)
                {
                    term->cur_x = 0;
                    term->cur_y = term->scroll_top;
                }
            }
            return;
        }
    case EShash:
        term->esc_state = ESnormal;
        switch(c)
        {
        case '8':  // fill the screen with 'E'
            clean_screen(term, 'E');
            //vt100_redraw(term);
            break;
        }
        break;
    }
}
Beispiel #29
0
void create_mdrfile() {

	unsigned char *videomem;
	int ancho,retorno,bucle,retval;
	unsigned char nombre2[MAX_PATH_LENGTH];

	videomem=screen->pixels;
	ancho=screen->w;

	clean_screen();

	print_string(videomem,"Choose a name for the MDR file",-1,32,14,0,ancho);
	print_string(videomem,"(up to 30 characters)",-1,52,14,0,ancho);

	print_string(videomem,"MDR file will be saved in:",-1,132,12,0,ancho);
	print_string(videomem,path_mdrs,0,152,12,0,ancho);

	retorno=ask_filename(nombre2,84,"mdr",path_mdrs, NULL);

	clean_screen();

	if(retorno==2) // abort
		return;

	ordenador.mdr_file=fopen(nombre2,"r"); // test if it exists
	if(ordenador.mdr_file==NULL)
		retorno=0;
	else
		retorno=-1;
	
	if(!retorno) {
		ordenador.mdr_file=fopen(nombre2,"wb"); // create for write
		if(ordenador.mdr_file==NULL)
			retorno=-2;
		else {
			for(bucle=0;bucle<137921;bucle++)
				ordenador.mdr_cartridge[bucle]=0xFF; // erase cartridge
			ordenador.mdr_cartridge[137922]=0;
			retval=fwrite(ordenador.mdr_cartridge,137923,1,ordenador.mdr_file); // save cartridge
			fclose(ordenador.mdr_file);
			ordenador.mdr_file=NULL;
			ordenador.mdr_modified=0;
			retorno=0;
		}
	}	
	strcpy(ordenador.mdr_current_mdr,nombre2);	
	switch(retorno) {
	case 0:
	break;
	case -1:
		print_string(videomem,"File already exists",-1,80,10,0,ancho);
		ordenador.mdr_current_mdr[0]=0;
		wait_key();
	break;
	case -2:
		print_string(videomem,"Can't create file",-1,80,10,0,ancho);
		ordenador.mdr_current_mdr[0]=0;
		wait_key();
	break;
	}
	clean_screen();
}
Beispiel #30
0
int line_navigator(char *path, char *doc_page)
{
	int ret = 0;
	char *data = read_file(path);
	int n_lines = linecounter(data);
	int act_line = 0;
	char **lines;
	lines = new char *[n_lines];
	lines[0] = &data[0];
	int data_len = strlen(data);
	if (data_len > 0) {
		for (int i = 1, x = 0; data[x] != '\0'; x++) {
			if (data[x] == '\n') {
				data[x] = '\0';
				if (i < n_lines) {
					lines[i] = &data[x+1];
				}
				i++;
			}
		}
		if (n_lines > 0) {
			ret = 1;
			char char_read[2];
			do {
				clean_screen();
				int start_line = act_line;
				if (start_line > (n_lines-22) && n_lines >= 22) {
					start_line = (n_lines-22);
				}
				if (n_lines < 22) {
					start_line = 0;
				}
				for (int i = start_line; i < (start_line+22) && i < n_lines; i++) {
					printf("%s\n", lines[i]);
				}
				printf("\n\nManual page for %s line %d "
				"(press 'h' for help or 'q' to exit)", doc_page, act_line+1);
				read(0, char_read, 1);
				if (char_read[0] == 'e' && act_line < n_lines) {
					act_line++;
				}
				if (char_read[0] == 'y' && act_line > 0) {
					act_line--;
				}
				if (char_read[0] == 'm') {
					char line[8];
					clean_screen();
					printf("Move to line: ");
					gets_s(line, 8);
					int line_to_move = atoi(line);
					if (line_to_move > 0 && line_to_move < n_lines) {
						act_line = (line_to_move-1);
					}
				}
				if (char_read[0] == 'h') {
					clean_screen();
					printf("\e[9;32HSUMMARY OF LESS COMMANDS\n");
					printf("\e[10;30Hh\t\tDisplay this help\n");
					printf("\e[11;30Hq\t\tExit\n");
					printf("\e[12;40HMOVING\n");
					printf("\e[13;30He\t\tForward one line\n");
					printf("\e[14;30Hy\t\tBackward one line\n");
					printf("\e[15;30Hm\t\tMove to 'n' line\n");
					printf("\e[17;35HPress 'q' when done\e[1;1H");
					while (getchar() != 'q');
				}
			} while(char_read[0] != 'q');
			clean_screen();
		}
	}