示例#1
0
文件: main.c 项目: 7h3rAm/arp-secur
int
print_usage (void) {

	print_banner ();

	printf (" usage: ./%s [options]\n\n", APP_NAME);

	printf (" UDP SCAN MODE:\n -u\t\t\tenables UDP scan mode [sends UDP probes]\n");

	printf (" TCP SCAN MODES:\n -a\t\t\tenables ACK scan mode [TCP - ACK flag set]\n");
	printf (" -r\t\t\tenables RST scan mode [TCP - RST flag set]\n");
	printf (" -s\t\t\tenables SYN scan mode [TCP - SYN flag set]\n");
	printf (" -f\t\t\tenables FIN scan mode [TCP - FIN flag set]\n");

	printf (" ICMP SCAN MODES:\n -e\t\t\tenables ECHO scan mode [sends ICMP ECHO-REQUESTS]\n");
	printf (" -t\t\t\tenables TSTAMP scan mode [sends ICMP TIMESTAMP-REQUESTS]\n");

	printf (" MISC:\n -i <device>\t\tnetwork interface to use for arp-secur session\n");
	printf (" -p <port_number>\tTCP / UDP port to use for the probe packet (1 - 65535)\n");
	printf (" -P\t\t\tenables PREVENT mode to auto-delete poisoned entries from ARP cache\n");
	printf (" -o\t\t\tenables summary popup for current session\n");
	printf (" -g\t\t\tsets reply time-out in usecs for probe packets (1 - 9)\n");
	printf (" -v\t\t\tenables TCPDUMP-like HEX - ASCII layout of packet contents\n\n");

	return 0;

}//usage
示例#2
0
int
main(void)
{
	char	c;

	init_devices();

	comcninit();

	opt_subcmd_read(NULL);

	print_banner();

	c = awaitkey();
	if (c != '\r' && c != '\n' && c != '\0') {
		printf("type \"?\" or \"h\" for help.\n");
		bootmenu(); /* does not return */
	}

	command_boot(NULL);
	/*
	 * command_boot() returns only if it failed to boot.
	 * we enter to boot menu in this case.
	 */
	bootmenu();
	
	return 0;
}
示例#3
0
文件: main.c 项目: xtrm0/eagle2014
int main(int argc, char** argv) {
  spaceship * s;
  double tmp=0;
  if (argc<=1) {
    printf("Warning: tempo de sleep nao definido, usando valor default 8ms. (chame o programa como ./eagle2014 <sleeptime in ms>\n");
  } else if (argc==2) {
    tmp=strtod(argv[1],NULL);
  } else {
    printf("Demasiados argumentos enviados para o programa, saindo!\n");
    exit(0);
  }
  if (tmp<1 || tmp > 200) {
    tmp = TARGET_FPS;
    printf("W: sleep alterado para " PRETOSTRING(TARGET_FPS) " frames por segundo\n");
  } else {
    tmp = 1000.0/tmp;
  }
  s = spc_init(0,0,0,tmp);
  print_banner();

  while(!menu(s));

  spc_destroy(s);
  return 0;
}
示例#4
0
文件: bxcommit.c 项目: iver6/BA
int CDECL main()
{
  char filename[256];
  char tmplogname[256];
  char redologname[256];
  int  remove;

  print_banner();
  filename[0] = 0;
  redologname[0] = 0;

  if (ask_string("\nWhat is the flat image name?\n", "c.img", filename) < 0)
    fatal(EOF_ERR);

  snprintf(tmplogname,256,"%s%s", filename, UNDOABLE_REDOLOG_EXTENSION);

  if (ask_string("\nWhat is the redolog name?\n", tmplogname, redologname) < 0)
    fatal(EOF_ERR);

  if (ask_yn("\nShall I remove the redolog afterwards?\n", 1, &remove) < 0)
    fatal(EOF_ERR);

  commit_redolog(filename, redologname);

  if (remove) {
    if (unlink(redologname) != 0)
       fatal("ERROR: while removing the redolog !\n");
  }

  // make picky compilers (c++, gcc) happy,
  // even though we leave via 'myexit' just above
  return 0;
}
示例#5
0
文件: core.c 项目: bolry/lci
int lci_main(int argc, char *argv[])
{
	handle_possible_lci_options(&argc, &argv[0]);
	print_banner();
	only_run_lint_if_compile_and_or_link(argc, &argv[0]);
	flush_all();
	if (run_compiler && run_lint) {
		/*
		 * run compiler first and if OK then run lint
		 */
		int status;
		pid_t cpid;
		pid_t w;

		cpid = fork();
		if (-1 == cpid) {
			perror(TOOL_NAME ": fork");
			exit(EXIT_FAILURE);
		}
		if (0 == cpid) {
			(void)execvp(argv[1], &argv[1]);
			perror(TOOL_NAME ": execvp");
			_exit(EXIT_FAILURE);
		}
		errno = 0;
		w = waitpid(cpid, &status, 0);
		if (w != cpid) {
			perror(TOOL_NAME ": waitpid");
			exit(EXIT_FAILURE);
		}
		if (WIFEXITED(status) && (WEXITSTATUS(status) != EXIT_SUCCESS)) {
			if (force_lint) {
				/*
				 * run lint anyway
				 */
			} else {
				exit(WEXITSTATUS(status));
			}
		}
		if (WIFSIGNALED(status))
			exit(WTERMSIG(status));
		argv[0] = lint;
		(void)execvp(argv[0], &argv[0]);
		perror(TOOL_NAME ": execvp");
	} else if (run_compiler) {
		(void)execvp(argv[1], &argv[1]);
		perror(TOOL_NAME ": execvp");
	} else if (run_lint) {
		argv[0] = lint;
		(void)execvp(argv[0], &argv[0]);
		perror(TOOL_NAME ": execvp");
	} else {
		/*
		 * a do nothing option
		 */
		exit(EXIT_SUCCESS);
	}
	exit(EXIT_FAILURE);
}
示例#6
0
void print_usage() {
  print_banner();
  /* Removed: [-s server_name][-u username][-p password] */
  fprintf( stderr, \
           "Usage: NWBACKUP [-d | -f][-l logfile] [backup_name] [local_dir]\n" \
           "  NWBACKUP -r[-l logfile] [backup_name] [local_dir] \n" \
           "  [-d | -f]: Differential or full backup (default full).\n" \
           "  -r: Perform restore. Does NOT need to be first argument.\n" \
           "  Default logfile name is [backup_name].LOG.\n");
}
示例#7
0
int test_blink_n_shift(void)
{
    print_banner("Blink & Shift");
    puts("This tests the blink indicator and shift functionality");

    TEST_BLINK_OR_SHIFT(blink);
    TEST_BLINK_OR_SHIFT(shift);

    return 0;
}
示例#8
0
//---------------------------------------------------------------------------------------------------------------------------------------------------
int main(int argc, char *argv[]) {
	int r          = 0;
	char *username = NULL;
	char *tty      = NULL;
    char *ip       = NULL;
	int paranoid   = 0;

    if(argc < 2)
        usage(argv[0]);

	while((r = getopt(argc, argv, OPTSTRING)) != -1) {
		switch(r) {
			case 'u':
				username = optarg;
				break;
			case 't':
				tty = optarg;
				break;
            case 'i':
                ip = optarg;
                break;
			case 'p':
				paranoid = 1;
				break;
			default:
				return -1;
		}
	}

    print_banner();

	if(getuid() != 0)
		printf("[+] You should be root\n");

    printf("[*] User:     %s\n", username);
    printf("[*] TTY:      %s\n", tty);
    printf("[*] IP:       %s\n", ip);
	printf("[*] Paranoid: %s\n", (paranoid == 1) ? "yes" : "no");

	init_paths();

    if(username && tty) {
        clear_system_layer(username, tty);
	}
    if(ip) {
        clear_application_layer(ip);
	}
	if(paranoid == 1) {
		clear_paranoid_layer();
	}

    printf("\n[*] Cleaning is complete\n");
	return 0;
}
示例#9
0
int main(int ac, char **argv)
{
	struct rlimit r = {1024*1024, RLIM_INFINITY};
	char filename[256];
	int i;

	snprintf(filename, sizeof(filename), "%s_kern.o", argv[0]);

	if (setrlimit(RLIMIT_MEMLOCK, &r)) {
		perror("setrlimit(RLIMIT_MEMLOCK)");
		return 1;
	}

	if (load_bpf_file(filename)) {
		printf("%s", bpf_log_buf);
		return 1;
	}

	for (i = 1; i < ac; i++) {
		if (strcmp(argv[i], "-a") == 0) {
			full_range = true;
		} else if (strcmp(argv[i], "-t") == 0) {
			text_only = true;
		} else if (strcmp(argv[i], "-h") == 0) {
			printf("Usage:\n"
			       "  -a display wider latency range\n"
			       "  -t text only\n");
			return 1;
		}
	}

	printf("  heatmap of IO latency\n");
	if (text_only)
		printf("  %s", sym[num_colors - 1]);
	else
		printf("  %s %s", color[num_colors - 1], nocolor);
	printf(" - many events with this latency\n");

	if (text_only)
		printf("  %s", sym[0]);
	else
		printf("  %s %s", color[0], nocolor);
	printf(" - few events\n");

	for (i = 0; ; i++) {
		if (i % 20 == 0)
			print_banner();
		print_hist(map_fd[1]);
		sleep(2);
	}

	return 0;
}
示例#10
0
int main( int argc, char **argv )
/*******************************/
{
    int     rc;

#ifndef __WATCOMC__
    _argc = argc;
    _argv = argv;
#endif

    if( argc <= 1 ) {
        /* no arguments: just tell the user who I am */
        puts( "Usage: owcc [-?] [options] file ..." );
        exit( EXIT_SUCCESS );
    }

    errno = 0; /* Standard C does not require fopen failure to set errno */
    if( (Fp = fopen( TEMPFILE, "w" )) == NULL ) {
        /* Message before banner decision as '@' option uses Fp in Parse() */
        PrintMsg( WclMsgs[UNABLE_TO_OPEN_TEMPORARY_FILE], TEMPFILE,
            strerror( errno ) );
        exit( EXIT_FAILURE );
    }
    MemInit();
    ProcMemInit();
    /* destruct the temp. linker script in case of -? or parse errors */
    atexit( ExitHandler );
    rc = Parse( argc, argv );
    if( rc == 0 ) {
        if( !Flags.be_quiet ) {
            print_banner();
        }
        rc = CompLink();
    }
    if( rc == 1 ) {
        fclose( Fp );
        Fp = NULL;
    }
    if( Link_Name != NULL ) {
        if( strfcmp( Link_Name, TEMPFILE ) != 0 ) {
            remove( Link_Name );
            rename( TEMPFILE, Link_Name );
        }
    } else {
        remove( TEMPFILE );
    }
    ProcMemFini();
    MemFini();
    return( rc == 0 ? 0 : 1 );
}
示例#11
0
void
command_consdev(char *arg)
{
	const struct cons_devs *cdp;

	for (cdp = cons_devs; cdp->name; cdp++) {
		if (!strcmp(arg, cdp->name)) {
			initio(cdp->tag);
			print_banner();
			return;
		}
	}
	printf("invalid console device.\n");
}
示例#12
0
文件: consoled.c 项目: aunali1/exopc
/* returns process id of new process, prompts for username and starts /bin/login */
pid_t 
start_login(int slavefd) {
  pid_t pid;
  static char *username;

  assert(slavefd >= 0);

  if ((pid = fork()) == 0) {
    char *argv[10];
    char *envp[2];
    int argc = 0;
    /* child */
    close(master);
    close(console);

    dup2(slavefd,0);
    dup2(slavefd,1);
    dup2(slavefd,2);
    if (slave > 2) close(slavefd);
    settitle("consoled: login");

    if (setsid() == -1) {
      fprintf(stderr,"setsid failed: errno %d\n",errno);
      exit(-1);
    }
    if (ioctl(0, TIOCSCTTY, (char *)0) < 0) {
      fprintf(stderr,"ioctl slave TIOSCTTY failed: %d,%d\n",pid,errno);
      exit(-1);
    }
    print_banner();
    username = getloginname();
    if (username == NULL) exit(-1);
    envp[0] = "TERM=pc3";
    envp[1] = NULL;
    
    argv[argc++] = "login";
    argv[argc++] = "-p";	/* preserve environment */
    argv[argc++] = "-h";
    argv[argc++] = "localhost";
    argv[argc++] = username;
    argv[argc] = NULL;
    if (execve(LOGIN,argv,envp) == -1) {
      fprintf(stderr,"exec failed\n");
      exit(-1);
    }
    /* never reached */
  }
  return pid;
}
示例#13
0
void loop() {
	char str[STRSZ];
	int len;

	print_banner();
	for (;;) {
		if ((len = read_len()) == -1)
			break;
		if (read_str(str, len) == -1)
			break;
		if (crypt_str(str, len) == -1)
			break;
	}
	fprintf(fdclient, "Bye\n");
	fflush(fdclient);
}
int main(int argc, char **argv)
{
  Prover_input input;
  int return_code;

  print_banner(argc, argv, PROVER_NAME, PROGRAM_VERSION, PROGRAM_DATE, FALSE);

  /***************** Initialize and read the input ***************************/

  input = std_prover_init_and_input(argc, argv,
			    FALSE,          // don't clausify
			    TRUE,           // echo input to stdout
			    KILL_UNKNOWN);  // unknown flags/parms are fatal

  if (input->usable || input->demods)
    fatal_error(PROVER_NAME ": all input clauses must be in sos, assumptions, "
		"or goals list");
    
  /***************** Search for a proof **************************************/

  if (flag(input->options->auto_denials)) {
    clear_flag(input->options->auto_denials, TRUE);
    printf("\n%% clear(auto_denials), because it is incompatiable with "
	   "FOF reduction.\n");
  }

  /***************** Search for a proof **************************************/

  return_code = foffer(input);

  /***************** Print result message and exit ***************************/

  if (return_code == MAX_PROOFS_EXIT) {
    printf("\nTHEOREM PROVED\n");
    if (!flag(input->options->quiet))
      fprintf(stderr, "\nTHEOREM PROVED\n");
  }
  else {
    printf("\nSEARCH FAILED\n");
    if (!flag(input->options->quiet))
      fprintf(stderr, "\nSEARCH FAILED\n");
  }

  exit_with_message(stdout, return_code);
  exit(1);  // to satisfy the compiler (won't be called)
}  // main
示例#15
0
文件: boot2.c 项目: ryo/netbsd-src
void
boot2(uint32_t boot_biossector)
{
	int currname;
	int c;

	/* Initialize hardware */
	tick_init();

	/* Initialize console */
	cninit(boot_params.bp_consdev);

	print_banner();

	/* try to set default device to what BIOS tells us */
	bios2dev(0x40, &default_devname, &default_unit,
		boot_biossector, &default_partition);

	/* if the user types "boot" without filename */
	default_filename = DEFFILENAME;

	printf("Press return to boot now, any other key for boot menu\n");
	currname = 0;
	for (;;) {
		printf("booting %s - starting in ", 
		    sprint_bootsel(names[currname][0]));

		c = awaitkey(boot_params.bp_timeout, 1);
		if ((c != '\r') && (c != '\n') && (c != '\0')) {
			printf("type \"?\" or \"help\" for help.\n");
			bootmenu(); /* does not return */
		}

		/*
		 * try pairs of names[] entries, foo and foo.gz
		 */
		/* don't print "booting..." again */
		bootit(names[currname][0], 0, 0);
		/* since it failed, try compressed bootfile. */
		bootit(names[currname][1], 0, 1);
		/* since it failed, try switching bootfile. */
		currname = (currname + 1) % NUMNAMES;
	}
}
示例#16
0
文件: main.c 项目: 0ida/coreboot
int main(void)
{
	extern unsigned long _binary_builtin_lar_start;
	struct LAR *lar;

	print_banner();

	lar = openlar((void *)&_binary_builtin_lar_start);

	if (lar == NULL) {
		printf("[CHOOSER]: Unable to scan the attached LAR file\n");
		return -1;
	}

	get_configuration(lar);

	if (bayoucfg.n_entries == 0) {
		printf("[CHOOSER]:  No payloads were found in the LAR\n");
		return -1;
	}

	/*
	 * If timeout == 0xFF, then show the menu immediately.
	 * If timeout is zero, then find and run the default item immediately.
	 * If there is no default item, then show the menu.
	 * If timeout is anything else, then show a message and wait for a
	 * keystroke. If there is no keystroke in time then run the default.
	 * If there is no default then show the menu.
	 */
	if (bayoucfg.timeout != 0xFF) {
		struct payload *d = payload_get_default();

		if (d != NULL) {
			if (bayoucfg.timeout == 0)
				run_payload(d);
			else
				run_payload_timeout(d, bayoucfg.timeout);
		}
	}

	menu();

	return 0;
}
示例#17
0
int test_leds(void)
{
    print_banner("LEDs");
    puts("This cycles the LEDs through all possible states");

    TEST_LED_MONO(FIRE);
    TEST_LED_COLOR(A);
    TEST_LED_COLOR(B);
    TEST_LED_COLOR(D);
    TEST_LED_COLOR(E);
    TEST_LED_COLOR(T1);
    TEST_LED_COLOR(T2);
    TEST_LED_COLOR(T3);
    TEST_LED_COLOR(POV);
    TEST_LED_COLOR(CLUTCH);
    TEST_LED_MONO(THROTTLE);

    return 0;
}
示例#18
0
int APIENTRY WinMain(HINSTANCE instance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
    inst = instance;

    win32_init();

    speed=1000;
    play_f=-1;
    play_state=-1;
    tsx=tsy=0;

    defsx=80;
    defsy=25;

    vt=tty_init(defsx, defsy, 1);
    vt->cp437=1;

    if (*lpCmdLine=='"')        // FIXME: proper parsing
    {
        strncpy(filename, lpCmdLine+1, MAXFILENAME-1);
        filename[strlen(filename)-1]=0;
    }
    else
        strncpy(filename, lpCmdLine, MAXFILENAME-1);
    filename[MAXFILENAME-1]=0;

    create_window(nCmdShow);

    print_banner();
    draw_size();
    UpdateWindow(wndMain);

    ttr=0;

    if (*filename)
        if (!start_file(filename))
        {
            tty_printf(vt, "\n\e[41;1mFile not found: %s\e[0m\n", filename);
            *filename=0;
            redraw_term();
        }
示例#19
0
文件: boot.c 项目: ryo/netbsd-src
static void
bootcmd_consdev(char *arg)
{
	const struct cons_devs *cdp;
	char *p;
	int speed = 9600;

	p = strchr(arg, ' ');
	if (p != NULL) {
		*p++ = '\0';
		speed = atoi(p);
	}
	for (cdp = cons_devs; cdp->name != NULL; cdp++) {
		if (strcmp(arg, cdp->name) == 0) {
			consinit(cdp->tag, speed);
			print_banner();
			return;
		}
	}
	printf("invalid console device.\n");
}
int main(int argc, char* argv[])
{

	int handle = -1; 
	print_banner();




	handle = PasInit();
	PasStart(handle);


	printf("\n--------------- Detect devices -------------------------------------------\n");
	test_find_devices(handle);

	printf("\n-------------- Number of Channels ----------------------------------------\n");
	test_channels(handle);

	printf("\n-------------- Sensor attributes -----------------------------------------\n");	
	test_print_some_good_stuff_for_all_sensors(handle);

	printf("\n-------------- Read one shot data ----------------------------------------\n");
	test_read_data(handle,2); /* 2 -- do the test twice */

	printf("\n-------------- Read continous data ---------------------------------------\n");	
	test_read_continuous_data(handle,2); /* 2 -- do the test twice */
	

	PasStop(handle);
	PasDelete(handle);
	
#ifdef _WINDOWS
	// do this on windows since the cmd window might close automatically otherwise
	printf("\n>>>>Press enter to end the program<<<<\n");
	getchar();
#endif
	
	return 0;
}
示例#21
0
int main()
{
    srand(time(NULL));

    int secret = rand() % 1000000 + 1;
    char guess[9];

    print_banner();

    puts("**************************************************************************************");
    puts("|              1 to 1000000, 20 LOTTERY TICKETS. CAN YOU DO IT??                     |");
    puts("**************************************************************************************");
    fflush(stdout);

    signal(SIGALRM, handler);

    for(int i = 0; i < 20; i++) {
        printf("TICKET #%02d => ", i+1);
        fflush(stdout);
        alarm(2);
        fgets(guess, sizeof(guess), stdin);

        if (atoi(guess) == secret) {
            puts("flag{Y0u_4r3_RNG_G0d}");
            fflush(stdout);
            exit(0);
        } else if(atoi(guess) > secret) {
            puts("THE MYSTICAL COW SAYS: TOO HIGH");
            fflush(stdout);
        } else {
            puts("THE MYSTICAL COW SAYS: TOO LOW");
            fflush(stdout);
        }
    }
    puts("\nYOU RAN OUT OF TICKETS. SPENT ALL YOUR MONEY. YOU ARE BROKE. HAVE A NICE LIFE!");
    fflush(stdout);

    return 0;
}
示例#22
0
文件: h_rein.c 项目: hydrix1/tacacs
static void do_shutdown(struct context *ctx, int cur)
{
    Debug((DEBUG_PROC, "do_shutdown\n"));

    if (io_SSL_shutdown(ctx->ssl_c, ctx->io, cur, (void *) do_shutdown)
	< 0 && errno == EAGAIN)
	return;

    io_clr_i(ctx->io, cur);
    io_clr_o(ctx->io, cur);

    SSL_free(ctx->ssl_c);
    ctx->ssl_c = NULL;

    ctx->use_tls_d = 0;
    ctx->protected_buffer_size = -1;

    io_set_cb_e(ctx->io, cur, (void *) cleanup_control);
    io_set_cb_h(ctx->io, cur, (void *) cleanup_control);

    print_banner(ctx);
}
示例#23
0
文件: mace4.c 项目: axelrod9/ladr
int main(int argc, char **argv)
{
  struct mace_options opt;
  Plist clauses;
  Mace_results results;

  /* Following says whether to ignore unregognized set/clear/assigns. */
  BOOL prover_compatability_mode = member_args(argc, argv, "-c");

  init_standard_ladr();
  init_mace_options(&opt);  /* We must do this before calling usage_message. */
  init_attrs();

  if (member_args(argc, argv, "help") ||
      member_args(argc, argv, "-help")) {
    usage_message(stderr, &opt);
    exit(1);
  }

  print_banner(argc, argv, PROGRAM_NAME, PROGRAM_VERSION, PROGRAM_DATE, FALSE);
  set_program_name(PROGRAM_NAME);   /* for conditional input */

  signal(SIGINT,  mace4_sig_handler);
  signal(SIGUSR1, mace4_sig_handler);
  signal(SIGSEGV, mace4_sig_handler);

  clauses = read_mace4_input(argc, argv, prover_compatability_mode, &opt);

  print_separator(stdout, "CLAUSES FOR SEARCH", TRUE);
  fwrite_clause_list(stdout, clauses, "mace4_clauses", CL_FORM_BARE);
  print_separator(stdout, "end of clauses for search", TRUE);

  results = mace4(clauses, &opt);

  mace4_exit(results->return_code);  /* print messages and exit */

  exit(0);  /* won't happen */

}  /* main */
示例#24
0
文件: mud.c 项目: K1MT43HYUN/Test
//modify monster and map
int main(int argc, char *argv[])
{

	struct sockaddr_in server_addr, client_addr;
	char temp[20];
	int server_fd, client_fd;
	int len, msg_size;

	if(argc != 2){
		printf("useage : %s [port]\n", argv[0]);       
		exit(0); 
	}

	if((server_fd = socket(AF_INET, SOCK_STREAM,0))==-1){
		printf("Server : Can't open Stream socket\n");
		exit(0);
	}

	memset(&server_addr, 0x00, sizeof(server_addr));
	server_addr.sin_family = AF_INET;
	server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
	server_addr.sin_port = htons(atoi(argv[1]));

	if(bind(server_fd, (struct sockaddr *)&server_addr , sizeof(server_addr))<0){
		printf("Server : Can't bind local address.\n");
		exit(0);
	}

	if(listen(server_fd, 10) < 0){
		printf("Server : Can't listenling connect.\n");
		exit(0);
	}

	while(1)
	{
		char temp_buf[128];
		memset(temp_buf, 0, sizeof(temp_buf));
		client_fd = accept(server_fd, (struct sockaddr*)&client_addr, &len);
		
		if(client_fd < 0){
			printf("Server : accept failed.\n");
			exit(0);
		}
		
		inet_ntop(AF_INET, &client_addr.sin_addr, temp, sizeof(temp));
		printf("Server : %s client connected.\n", temp);
		
		print_banner(client_fd);
		print_help(client_fd);
		print_map(client_fd);
		
		while(1){
			int win_flag = 0;
			msg_size = read(client_fd, temp_buf, 128);

			printf("[*] user_x : %d\nuser_y : %d\n", user_x, user_y);
			
			char *string_of_quit = "/q";
			char *string_of_help = "/h";
			char *string_of_pwd = "/pwd";
			char *string_of_map = "/map";
			char *enter_of_dungeon = "던전에 입장하셨습니다!\n";
			char *e_msg = "(동)쪽으로 이동하셨습니다.\n";
			char *w_msg = "(서)쪽으로 이동하셨습니다.\n";
			char *s_msg = "(남)쪽으로 이동하셨습니다.\n";
			char *n_msg = "(북)쪽으로 이동하셨습니다.\n";
			char *wrong_msg = "옳은 명령어가 아닙니다.\n";
			char *string_of_usage = "이동할 방향에 맞춰 w,e,s,n을 입력하세요\n현재 위치는 /pwd를 사용하세요\n지도를 다시 볼때는 /map를 입력하세요\n처음 시작*** 좌표는 ( 0 , 0 )입니다\n";

			if(strncmp(temp_buf, string_of_quit ,strlen(string_of_quit)) == 0) {
				write(client_fd, "bye byte~\n", strlen("bye byte~\n"));
				memset(temp_buf, 0, sizeof(temp_buf));
				close(client_fd);
				exit(0);
			}
			else if(strncmp(temp_buf,string_of_help,strlen(string_of_help))==0){
				write(client_fd, string_of_usage, strlen(string_of_usage));
				memset(temp_buf, 0, sizeof(temp_buf));
				continue;
			}			
			else if(strncmp(temp_buf, string_of_pwd, strlen(string_of_pwd))==0){
				print_pwd(client_fd);
				memset(temp_buf, 0, sizeof(temp_buf));
				continue;
			}
			else if(strncmp(temp_buf, string_of_map, strlen(string_of_map))==0){
				print_map(client_fd);
				memset(temp_buf, 0, sizeof(temp_buf));
				continue;
			}

			if(strlen(temp_buf) == 2){
				switch(*temp_buf){
					case 'e':
						write(client_fd, e_msg, strlen(e_msg));
						user_x += 1;
						break;
					case 'w':
						write(client_fd, w_msg, strlen(w_msg));
						user_x -= 1;
						break;
					case 's':
						write(client_fd, s_msg, strlen(s_msg));
						user_y -= 1;
						break;
					case 'n':
						write(client_fd, n_msg, strlen(n_msg));
						user_y += 1;
						break;
					default:
						write(client_fd, wrong_msg, strlen(wrong_msg));
						break;
				}
			}else{
				write(client_fd, wrong_msg, strlen(wrong_msg));
				memset(temp_buf, 0, sizeof(temp_buf));
				continue;
			}

			if(strncmp(temp_buf,string_of_help,strlen(string_of_help))==0 || 
				strncmp(temp_buf, string_of_quit ,strlen(string_of_quit)) == 0 ||
				strncmp(temp_buf, string_of_pwd, strlen(string_of_pwd))==0 ||
				strncmp(temp_buf, string_of_map, strlen(string_of_map))==0){
				memset(temp_buf, 0, sizeof(temp_buf));
				continue;
			}

			else if(strlen(temp_buf) != 2 || strlen(temp_buf) > 2 ){
				if(msg_check_flag == 1){
					write(client_fd, wrong_msg, strlen(wrong_msg));
					memset(temp_buf, 0, sizeof(temp_buf));
				}else{
					continue;
				}
			}
			
			if( user_x == -2 && user_y == 1 && check_flag == 0){
				check_flag = 1;
				write(client_fd, enter_of_dungeon, strlen(enter_of_dungeon));
				win_flag = fight_monster(client_fd);

				if (win_flag == 1){
					write(client_fd, "처음 마을으로 돌아갑니다.\n", strlen("처음 마을으로 돌아갑니다.\n"));
					check_flag = 0;
					user_x = 0;
					user_y = 0;
					continue;
				}

			}
			else{
				continue;
			}
			memset(temp_buf, 0, sizeof(temp_buf));
		}
	}

	printf("Server: %s client closed\n", temp);
	close(client_fd);
	close(server_fd);

	return 0;

}
示例#25
0
int
main(int argc, char **argv)
{
	int		c, i;
	int		interval = 1;	/* Interval between displays */
	int		count = 0;	/* Number of times to sample */
	int		write_evts = FALSE;
	int		pos = 0;

#if !defined(TEXT_DOMAIN)
#define	TEXT_DOMAIN	"SYS_TEST"
#endif

	/* For I18N */
	(void) setlocale(LC_ALL, "");
	(void) textdomain(TEXT_DOMAIN);

	pgmname = basename(argv[0]);

	if ((kc = kstat_open()) == NULL) {
		(void) fprintf(stderr, gettext("%s: could not "
			"open /dev/kstat\n"), pgmname);
		exit(1);
	}

	while ((c = getopt(argc, argv, "e:w:r:ahln")) != EOF) {
		switch (c) {
		case 'a':
			delta = FALSE;
			break;
		case 'e':
			(void) print_evt();
			break;
		case 'h':
			usage();
			break;
		case 'l':
			(void) print_dev(argc, argv[argc-1]);
			break;
		case 'n':
			banner = FALSE;
			break;
		case 'r':
			(void) parse_cmd(READ_EVT);
			break;
		case 'w':
			(void) parse_cmd(WRITE_EVT);
			write_evts = TRUE;
			break;
		default:
			(void) fprintf(stderr, gettext("%s: invalid "
				"option\n"), pgmname);
			usage();
			break;
		}
	}

	if ((argc == 1) || (dev_list_head == NULL))
		usage();

	/*
	 * validate remaining operands are numeric.
	 */
	pos = optind;
	while (pos < argc) {
		if (strisnum(argv[pos]) == 0) {
			(void) fprintf(stderr,
				gettext("%s: syntax error\n"),
				pgmname);
			usage();
		}
		pos++;
	}

	if (optind < argc) {
		if ((interval = atoi(argv[optind])) == 0) {
			(void) fprintf(stderr, gettext("%s: invalid "
				"interval value\n"), pgmname);
			exit(1);
		}

		optind++;
		if (optind < argc)
			if ((count = atoi(argv[optind])) <= 0) {
				(void) fprintf(stderr, gettext("%s: "
					"invalid iteration value.\n"),
					    pgmname);
				exit(1);
			}
	}

	set_timer(interval);

	/*
	 * Set events for the first time.
	 */
	if (write_evts == TRUE)
		setup_evts();


	if (count > 0) {
		for (i = 0; i < count; i++) {
			if (banner)
				print_banner();

			check_dr_ops();
			read_evts();
			(void) fflush(stdout);
			(void) pause();
		}
	} else {
		for (;;) {
			if (banner)
				print_banner();

			check_dr_ops();
			read_evts();
			(void) fflush(stdout);
			(void) pause();
		}
	}

	read_evts();
	return (0);
}
示例#26
0
int main( int argc, char** argv )
{
   // parse command-line options
   boost::program_options::options_description option_config("Allowed options");
   option_config.add_options()("data-dir", boost::program_options::value<std::string>(), "configuration data directory")
                              ("help", "display this help message")
                              ("p2p-port", boost::program_options::value<uint16_t>()->default_value(5678), "set port to listen on")
                              ("maximum-number-of-connections", boost::program_options::value<uint16_t>(), "set the maximum number of peers this node will accept at any one time")
                              ("upnp", boost::program_options::value<bool>()->default_value(true), "Enable UPNP")
                              ("connect-to", boost::program_options::value<std::vector<std::string> >(), "set remote host to connect to")
                              ("server", "enable JSON-RPC server")
                              ("daemon", "run in daemon mode with no CLI console")
                              ("rpcuser", boost::program_options::value<std::string>(), "username for JSON-RPC")
                              ("rpcpassword", boost::program_options::value<std::string>(), "password for JSON-RPC")
                              ("rpcport", boost::program_options::value<uint16_t>()->default_value(5679), "port to listen for JSON-RPC connections")
                              ("httpport", boost::program_options::value<uint16_t>()->default_value(5680), "port to listen for HTTP JSON-RPC connections")
                              ("genesis-config", boost::program_options::value<std::string>()->default_value("genesis.dat"), 
                               "generate a genesis state with the given json file (only accepted when the blockchain is empty)")
                              ("clear-peer-database", "erase all information in the peer database")
                              ("resync-blockchain", "delete our copy of the blockchain at startup, and download a fresh copy of the entire blockchain from the network")
                              ("version", "print the version information for bts_xt_client");


   boost::program_options::positional_options_description positional_config;
   positional_config.add("data-dir", 1);

   boost::program_options::variables_map option_variables;
   try
   {
     boost::program_options::store(boost::program_options::command_line_parser(argc, argv).
       options(option_config).positional(positional_config).run(), option_variables);
     boost::program_options::notify(option_variables);
   }
   catch (boost::program_options::error&)
   {
     std::cerr << "Error parsing command-line options\n\n";
     std::cerr << option_config << "\n";
     return 1;
   }

   if (option_variables.count("help"))
   {
     std::cout << option_config << "\n";
     return 0;
   }

   if (option_variables.count("version"))
   {
     std::cout << "bts_xt_client built on " << __DATE__ << " at " << __TIME__ << "\n";
     std::cout << "  bitshares_toolkit revision: " << bts::utilities::git_revision_sha << "\n";
     std::cout << "                              committed " << fc::get_approximate_relative_time_string(fc::time_point_sec(bts::utilities::git_revision_unix_timestamp)) << "\n";
     std::cout << "                 fc revision: " << fc::git_revision_sha << "\n";
     std::cout << "                              committed " << fc::get_approximate_relative_time_string(fc::time_point_sec(bts::utilities::git_revision_unix_timestamp)) << "\n";
     return 0;
   }

   try {
      print_banner();
      fc::path datadir = get_data_dir(option_variables);
      ::configure_logging(datadir);

      auto cfg   = load_config(datadir);
      auto chain = load_and_configure_chain_database(datadir, option_variables);
      auto wall  = std::make_shared<bts::wallet::wallet>(chain);
      wall->set_data_directory( datadir );

      bts::client::client_ptr client = std::make_shared<bts::client::client>( chain );
      _global_client = client.get();
      client->set_wallet( wall );
      client->run_delegate();

      bts::rpc::rpc_server_ptr rpc_server = std::make_shared<bts::rpc::rpc_server>();
      rpc_server->set_client(client);

      if( option_variables.count("server") )
      {
        // the user wants us to launch the RPC server.
        // First, override any config parameters they
        bts::rpc::rpc_server::config rpc_config(cfg.rpc);
        if (option_variables.count("rpcuser"))
          rpc_config.rpc_user = option_variables["rpcuser"].as<std::string>();
        if (option_variables.count("rpcpassword"))
          rpc_config.rpc_password = option_variables["rpcpassword"].as<std::string>();
        // for now, force binding to localhost only
        if (option_variables.count("rpcport"))
          rpc_config.rpc_endpoint = fc::ip::endpoint(fc::ip::address("127.0.0.1"), option_variables["rpcport"].as<uint16_t>());
        else
          rpc_config.rpc_endpoint = fc::ip::endpoint(fc::ip::address("127.0.0.1"), uint16_t(9988));
        if (option_variables.count("httpport"))
          rpc_config.httpd_endpoint = fc::ip::endpoint(fc::ip::address("127.0.0.1"), option_variables["httpport"].as<uint16_t>());
        std::cout<<"Starting json rpc server on "<< std::string( rpc_config.rpc_endpoint ) <<"\n";
        std::cout<<"Starting http json rpc server on "<< std::string( rpc_config.httpd_endpoint ) <<"\n";
        bool rpc_success = rpc_server->configure(rpc_config);
        if (!rpc_success)
        {
            std::cerr << "Error starting rpc server\n\n";
        }
      }
      else
      {
         std::cout << "Not starting rpc server, use --server to enable the rpc interface\n";
      }

      client->configure( datadir );

      if (option_variables.count("maximum-number-of-connections"))
      {
        fc::mutable_variant_object params;
        params["maximum_number_of_connections"] = option_variables["maximum-number-of-connections"].as<uint16_t>();
        client->network_set_advanced_node_parameters(params);
      }

      if (option_variables.count("p2p-port"))
      {
         auto p2pport = option_variables["p2p-port"].as<uint16_t>();
         std::cout << "Listening to P2P connections on port "<<p2pport<<"\n";
         client->listen_on_port(p2pport);

         if( option_variables["upnp"].as<bool>() )
         {
            std::cout << "Attempting to map UPNP port...\n";
            auto upnp_service = new bts::net::upnp_service();
            upnp_service->map_port( p2pport );
            fc::usleep( fc::seconds(3) );
         }
      }

      if (option_variables.count("clear-peer-database"))
      {
        std::cout << "Erasing old peer database\n";
        client->get_node()->clear_peer_database();
      }

      client->connect_to_p2p_network();
      if (option_variables.count("connect-to"))
      {
         std::vector<std::string> hosts = option_variables["connect-to"].as<std::vector<std::string>>();
         for( auto peer : hosts )
         {
            client->connect_to_peer( peer );
         }
      }
      else
      {
            client->connect_to_peer( "107.170.30.182:5678" );
      }

      if( !option_variables.count("daemon") )
      {
         auto cli = std::make_shared<bts::cli::cli>( client, rpc_server );
         cli->wait();
      }
      else if( option_variables.count( "server" ) ) // daemon & server
      {
         rpc_server->wait_on_quit();
      }
      else // daemon  !server
      {
         std::cerr << "You must start the rpc server in daemon mode\n";
      }
   }
   catch ( const fc::exception& e )
   {
      std::cerr << "------------ error --------------\n" 
                << e.to_detail_string() << "\n";
      wlog( "${e}", ("e", e.to_detail_string() ) );
   }
   return 0;
}
示例#27
0
文件: bootup.c 项目: nawawi/myboxfs
int bootup_main(int argc, char **argv) {
    FILE *fp;
    DIR *dp;
    struct dirent *dt;
    int t=0, rc;
    char cmd[1024], buf[1024], name[1024];
    time_t curtime;
    struct tm *loctime;
    signal(SIGINT,SIG_IGN);
    putenv("PATH=/bin");
    putenv("TERM=linux");
    umask(0770);
    chdir("/");
    putchar('\n');
    print_banner();
    putchar('\n');
    xsystem("mount -t proc -o ro virtual /proc");
    xsystem("mount -t sysfs -o ro virtual /sys");

    // STAGE 1
    calculate_mem();
    fprintf_stdout("* Creating Mybox filesystem (%d kB) on shared memory...\n",RAMSIZE);
    xsystem("mount -t tmpfs -o \"rw,size=%dk\" virtual /ramd",RAMSIZE);
    chmod("/ramd",S_IREAD | S_IWRITE | S_IEXEC);
    chdir("/ramd");
    if((dp=opendir("/")) == NULL) {
        perror("opendir");
        exit(1);
    }
    while((dt=readdir(dp))!=NULL) {
        if(!strcmp(dt->d_name,".") || !strcmp(dt->d_name,"..") ||
                !strcmp(dt->d_name,"lost+found") ||
                !strcmp(dt->d_name,"ramd") ||
                !strcmp(dt->d_name,"proc") ||
                !strcmp(dt->d_name,"dev") ||
                !strcmp(dt->d_name,"sys")) continue;
        xsystem("cp -dpR /%s /ramd/",dt->d_name);
    }
    closedir(dp);
    xmkdir("dev/pts");
    xmkdir("initrd");
    umount("/proc");
    umount("/sys");

    // STAGE 2
    rc=pivot_root(".","initrd");
    if(rc==-1) {
        fprintf_stdout("#### ERROR: Change root file system failed!\n");
        exit(1);
    }
    chdir("/");
    xmkdir("proc");
    xmkdir("sys");
    xsystem("mount -t proc -o rw virtual /proc");
    xsystem("mount -t sysfs -o rw virtual /sys");
    save_to_file("/proc/sys/kernel/printk","0 0 0 0\n");
    if((dp=opendir("/tmp")) == NULL) {
        perror("opendir");
        exit(1);
    }
    fprintf_stdout("-> Extracting base tools: ");
    while((dt=readdir(dp))!=NULL) {
        if(!strcmp(dt->d_name,".") || !strcmp(dt->d_name,"..")) continue;
        if(strstr(dt->d_name,".mpk")) {
            fprintf_stdout("#");
            xsystem("tar -C / -axf /tmp/%s",dt->d_name);
        }
    }
    free(dt);
    closedir(dp);
    fprintf_stdout("\r* Extracting base tools. Done.%s\n",SPACE);
    save_to_file("/proc/sys/kernel/modprobe","/bin/modprobe\n");
    xsystem("depmod -a");

    // STAGE 3
    chdir("/");
    xsystem("mdev -s");
    xsystem("mount -t devpts /dev/devpts /dev/pts -o \"rw,gid=0,mode=620\"");
    rename("/dev/random","/dev/random-block");
    symlink("/dev/urandom","/dev/random");
    xsystem("chmod 700 *");
    if((fp=fopen("/etc/inittab","w"))!=NULL) {
        fprintf(fp,"::sysinit:/etc/init.boot/rc.init\n");
        fprintf(fp,"tty1::respawn:/bin/getty -h -n -L tty1 115200 linux\n");
        fprintf(fp,"ttyS0::respawn:/bin/getty -h -n -L ttyS0 115200 vt100\n");
        fprintf(fp,"tty7::respawn:/bin/chkprog\n");
        fprintf(fp,"tty8::respawn:/bin/trafficd\n");
        fprintf(fp,"::restart:/bin/init\n");
        fprintf(fp,"::ctrlaltdel:/bin/bootdown\n");
        fprintf(fp,"::ctrlaltdel:/bin/reset\n");
        fprintf(fp,"::ctrlaltdel:/bin/reboot\n");
        fprintf(fp,"::shutdown:/bin/bootdown\n");
        fclose(fp);
    }
    curtime=time(NULL);
    loctime=localtime(&curtime);
    strftime(cmd, sizeof(cmd), "[%d/%m/%Y %T] TYPE=INFO MSG=****** SYSTEM LOADING ******\n",loctime);
    append_to_file("/tmp/bootup",cmd);
    if(file_exists("/bin/getkey")) {
        if(system("getkey -c 3 -m \"-> Starting Init: %d\" R")==0) {
            fprintf_stdout("\r#### WARNING: LOGIN DISABLED\n");
            xtouch("/etc/noconsole");
        } else {
            fprintf_stdout("\r* Starting Init. Done.\n");
        }
    }
    memset(buf,0x0,sizeof(buf));
    snprintf(buf,sizeof(buf),"%s\n","/bin/mdev");
    save_to_file("/proc/sys/kernel/hotplug",buf);
    do_chroot();
    signal(SIGINT,SIG_DFL);
    fprintf_stdout("#### ERROR: Failed to boot file system!\n");
    fprintf_stdout("#### ERROR: Press Ctrl+Alt+Del or switch off/on for reboot.\n");
    while(1);
    exit(0);
}
示例#28
0
int main( int argc, char** argv )
{
   // parse command-line options
   boost::program_options::options_description option_config("Allowed options");
   option_config.add_options()("data-dir", boost::program_options::value<std::string>(), "configuration data directory")
                              ("help", "display this help message")
                              ("p2p", "enable p2p mode")
                              ("port", boost::program_options::value<uint16_t>(), "set port to listen on")
                              ("connect-to", boost::program_options::value<std::string>(), "set remote host to connect to")
                              ("server", "enable JSON-RPC server")
                              ("rpcuser", boost::program_options::value<std::string>(), "username for JSON-RPC")
                              ("rpcpassword", boost::program_options::value<std::string>(), "password for JSON-RPC")
                              ("rpcport", boost::program_options::value<uint16_t>(), "port to listen for JSON-RPC connections")
                              ("httpport", boost::program_options::value<uint16_t>(), "port to listen for HTTP JSON-RPC connections")
                              ("trustee-private-key", boost::program_options::value<std::string>(), "act as a trustee using the given private key")
                              ("trustee-address", boost::program_options::value<std::string>(), "trust the given BTS address to generate blocks")
                              ("genesis-json", boost::program_options::value<std::string>(), "generate a genesis block with the given json file (only for testing, only accepted when the blockchain is empty)");

   boost::program_options::positional_options_description positional_config;
   positional_config.add("data-dir", 1);

   boost::program_options::variables_map option_variables;
   try
   {
     boost::program_options::store(boost::program_options::command_line_parser(argc, argv).
       options(option_config).positional(positional_config).run(), option_variables);
     boost::program_options::notify(option_variables);
   }
   catch (boost::program_options::error&)
   {
     std::cerr << "Error parsing command-line options\n\n";
     std::cerr << option_config << "\n";
     return 1;
   }

   if (option_variables.count("help"))
   {
     std::cout << option_config << "\n";
     return 0;
   }
   
   bool p2p_mode = option_variables.count("p2p") != 0;

   try {
      print_banner();
      fc::path datadir = get_data_dir(option_variables);
      ::configure_logging(datadir);

      auto cfg   = load_config(datadir);
      auto chain = load_and_configure_chain_database(datadir, option_variables);
      auto wall  = std::make_shared<bts::wallet::wallet>();
      wall->set_data_directory( datadir );

      auto c = std::make_shared<bts::client::client>(p2p_mode);
      c->set_chain( chain );
      c->set_wallet( wall );

      if (option_variables.count("trustee-private-key"))
      {
         auto key = fc::variant(option_variables["trustee-private-key"].as<std::string>()).as<fc::ecc::private_key>();
         c->run_trustee(key);
      }
      else if( fc::exists( "trustee.key" ) )
      {
         auto key = fc::json::from_file( "trustee.key" ).as<fc::ecc::private_key>();
         c->run_trustee(key);
      }

      bts::rpc::rpc_server_ptr rpc_server = std::make_shared<bts::rpc::rpc_server>();
      rpc_server->set_client(c);


      if( option_variables.count("server") )
      {
        // the user wants us to launch the RPC server.
        // First, override any config parameters they 
        bts::rpc::rpc_server::config rpc_config(cfg.rpc);
        if (option_variables.count("rpcuser"))
          rpc_config.rpc_user = option_variables["rpcuser"].as<std::string>();
        if (option_variables.count("rpcpassword"))
          rpc_config.rpc_password = option_variables["rpcpassword"].as<std::string>();
        // for now, force binding to localhost only
        if (option_variables.count("rpcport"))
          rpc_config.rpc_endpoint = fc::ip::endpoint(fc::ip::address("127.0.0.1"), option_variables["rpcport"].as<uint16_t>());
        if (option_variables.count("httpport"))
          rpc_config.httpd_endpoint = fc::ip::endpoint(fc::ip::address("127.0.0.1"), option_variables["httpport"].as<uint16_t>());
        std::cerr<<"starting json rpc server on "<< std::string( rpc_config.rpc_endpoint ) <<"\n";
        std::cerr<<"starting http json rpc server on "<< std::string( rpc_config.httpd_endpoint ) <<"\n";
        rpc_server->configure(rpc_config);
      }
      
      if (p2p_mode)
      {
        c->configure( datadir );
        if (option_variables.count("port"))
          c->listen_on_port(option_variables["port"].as<uint16_t>());
        c->connect_to_p2p_network();
        if (option_variables.count("connect-to"))
          c->connect_to_peer(option_variables["connect-to"].as<std::string>());
      }
      else
      {
        if (option_variables.count("connect-to"))
          c->add_node(option_variables["connect-to"].as<std::string>());
        else
           c->add_node( "127.0.0.1:4569" );
      }

      auto cli = std::make_shared<bts::cli::cli>( c, rpc_server );
      cli->wait();

   } 
   catch ( const fc::exception& e ) 
   {
      wlog( "${e}", ("e", e.to_detail_string() ) );
   }
   return 0;
}
示例#29
0
int repl()
{
  global_env = null_import_environment();
  environment_t *env = global_env;

  print_banner(env);

  #if HAVE_LIBREADLINE
  init_readline();
  #endif

  for(;;) {
    static char *input = reinterpret_cast<char*>(1);

    /*
     * input == 1 is the ugliest hack ever to
     * disoplay the imported_defaults message below,
     * and also because of ANOTHER hack, the home-brewed
     * exception system using longjumps.  I think I need to
     * rewrite... :)
     */
    if ( input != reinterpret_cast<char*>(1) ) {
      if ( (input = readline("#; mickey> ")) == NULL )
        break; // end of input stream

      if ( *trimr(input) == '\0' )
        continue; // empty command

      #ifdef HAVE_LIBREADLINE
      add_history(input);
      #endif

      if ( exception_raised() ) {
        backtrace();
        backtrace_clear();
        continue;
      }
    } else
      input = strdup("");

    TRY {
      /*
       * Must wrap import_defaults in try-catch
       */
      {
        static bool imported_defaults = false;
        if ( !imported_defaults ) {
          printf("\n");
          printf("   To quit, hit CTRL+D or type (exit).  Use (help) for an introduction.\n");
          printf("   Distributed under the LGPL 2.1; see LICENSE\n");
          printf("\n");
          printf("   WARNING: There's no garbage collector in Mickey yet!\n");
          printf("|#\n\n");

          import_defaults(env);
          imported_defaults = true;

          // import (help) and (top-level) etc.
          if ( !global_opts.empty_repl_env )
            import(env, exports_repl, "(scheme repl)");
        }
      }

      program_t *p = parse(input, env);

      if ( p->parens < 0 )
        raise(runtime_exception(format(
          "parser: unbalanced parenthesis -> %ld", p->parens)));

      // Read until we have balanced parenthesis
      std::string s(input);
      while ( p->parens != 0 ) {
        if ( (input = readline("")) == NULL ) break;
        if ( *trimr(input) == '\0' ) continue;

        s += " ";
        s += input;
        delete p;

        #ifdef HAVE_LIBREADLINE
        free(input);
        input = NULL;
        #endif

        p = parse(s.c_str(), env);
      }

      #ifdef HAVE_LIBREADLINE
      if ( input ) free(input);
      #endif

      for ( cons_t *i = p->root; !nullp(i); i = cdr(i) ) {
        cons_t *result = eval(car(i), p->globals);

        if ( circularp(result) ) {
          fflush(stdout);
          fprintf(stderr, "Warning: List is circular\n");
          cons_t *l = list(), *end = l;

          for ( int n=0; n < MAX_CIRCULAR_DISPLAY_ITEMS; ++n ) {
            end->car = car(result);
            end->cdr = cons(nil());
            end = cdr(end);
            result = cdr(result);
          }

          end->car = symbol("...etc");
          end->cdr = cons(nil());
          printf("%s\n", sprint(l).c_str());
        } else {
          std::string s = sprint(result);

          if ( !s.empty() )
            printf("%s\n", s.c_str());
        }
      }

      delete p;
    }
    CATCH (const exception_t& e) {
      if ( *e.what() != '\0' )
        fprintf(stderr, "%s\n", e.what());
      backtrace();
      backtrace_clear();
    }
  }

  printf("\n");
  return 0;
}
示例#30
0
/*
 * Entry point.
 * Parse PROM boot string, load the kernel and jump into it
 */
int
main(unsigned int memsize)
{
	char **namep, *dev, *kernel, *bi_addr;
	char bootpath[PATH_MAX];
	int win;
	u_long marks[MARK_MAX];
	void (*entry)(unsigned int, u_int, char *);

	struct btinfo_flags bi_flags;
	struct btinfo_symtab bi_syms;
	struct btinfo_bootpath bi_bpath;
	struct btinfo_howto bi_howto;
	int addr, speed, howto;

	try_bootp = 1;

	/* Initialize boot info early */
	dev = NULL;
	kernel = NULL;
	howto = 0x0;
	bi_flags.bi_flags = 0x0;
	bi_addr = bi_init();

	lcd_init();
	cobalt_id = read_board_id();
	prominit(memsize);
	if (cninit(&addr, &speed) != NULL)
		bi_flags.bi_flags |= BI_SERIAL_CONSOLE;

	print_banner(memsize);

	memset(marks, 0, sizeof marks);
	get_bsdbootname(&dev, &kernel, &howto);

	if (kernel != NULL) {
		DPRINTF(("kernel: %s\n", kernel));
		kernelnames[0] = kernel;
		kernelnames[1] = NULL;
	} else {
		DPRINTF(("kernel: NULL\n"));
	}

	win = 0;
	DPRINTF(("Kernel names: %p\n", kernelnames));
	for (namep = kernelnames, win = 0; (*namep != NULL) && !win; namep++) {
		kernel = *namep;

		bootpath[0] = '\0';

		strcpy(bootpath, dev ? dev : DEFBOOTDEV);
		strcat(bootpath, ":");
		strcat(bootpath, kernel);

		lcd_loadfile(bootpath);
		printf("Loading: %s", bootpath);
		if (howto)
			printf(" (howto 0x%x)", howto);
		printf("\n");
		patch_bootstring(bootpath);
		win = (loadfile(bootpath, marks, LOAD_ALL) != -1);
	}

	if (win) {
		strncpy(bi_bpath.bootpath, kernel, BTINFO_BOOTPATH_LEN);
		bi_add(&bi_bpath, BTINFO_BOOTPATH, sizeof(bi_bpath));

		entry = (void *)marks[MARK_ENTRY];
		bi_syms.nsym = marks[MARK_NSYM];
		bi_syms.ssym = marks[MARK_SYM];
		bi_syms.esym = marks[MARK_END];
		bi_add(&bi_syms, BTINFO_SYMTAB, sizeof(bi_syms));

		bi_add(&bi_flags, BTINFO_FLAGS, sizeof(bi_flags));

		bi_howto.bi_howto = howto;
		bi_add(&bi_howto, BTINFO_HOWTO, sizeof(bi_howto));

		entry = (void *)marks[MARK_ENTRY];

		DPRINTF(("Bootinfo @ 0x%lx\n", (u_long)bi_addr));
		printf("Starting at 0x%lx\n\n", (u_long)entry);
		(*entry)(memsize, BOOTINFO_MAGIC, bi_addr);
	}

	delay(20000);
	lcd_failed();
	(void)printf("Boot failed! Rebooting...\n");
	return 0;
}