summaryrefslogtreecommitdiff
path: root/2005/i/robert/src/es/test_es.cc
blob: 42f681d65d0b7926bcfe06bc010b56c6056533a6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
// test_es.cc
// robert - programme du robot 2005 {{{
//
// Copyright (C) 2005 Nicolas Haller
//
// Robot APB Team/Efrei 2005.
//        Web: http://assos.efrei.fr/robot/
//      Email: robot AT efrei DOT fr
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
// 
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
//
// }}}

/// Affiche un memo de suntaxe.

#include "timer/timer.hh"
#include "config/config.hh"
#include "es/es.hh"

#include <iostream>

    void
syntax (void)
{
    std::cout << "test_es - test la classe es.\n"
	"Syntaxe : test_es <...>\n"
	" s <cmd> <args...>  envois une commande\n"
	" w <ms>             attend pendant un nombre de millisecondes\n"
	" ?                  affiche cet �cran d'aide\n"
	<< std::endl;
}

    int
main (int argc, char **argv)
{
    try
    {
	int i;
	if (argc < 2)
	{
	    syntax ();
	    return 1;
	}
	Config config(argc, argv);
	Es es(config);
	i = 1;
	while (i < argc)
	{
	    switch (argv[i][0])
	    {
		case 's':
		    {
			switch(argv[++i][0])
			{
			    case 'z':
				es.init();
				break;
			    case 'P':
				std::cout << "L'ascenceur est en position ";
				if(es.getAscCurPos())
				    std::cout << "HAUTE" << std::endl;
				else
				    std::cout << "BASSE" << std::endl;
				break;
			    case 'S':
				std::cout << "L'ascenceur est " << (es.getAscState() ? "HORS" : "EN") << " service" << std::endl;
				break;
			    case 'I':
				std::cout << "L'ascenceur est " << (es.ascIsIdle() ? "INACTIF" : "ACTIF") << std::endl;
				break;
			    case 'm': // Monter l'ascenceur
				es.monterAsc();
				break;
			    case 'd': // Descendre asc
				es.descendreAsc();
				break;
			    case 'v':
				es.ventouses();
				break;
			    case 'C':
				std::cout << "Le prochain obstacle est " << (es.obsTropPres() ? "TROP PRES." : "LOIN.") << std::endl;
				break;
			}
			break;
		    }
		case 'w':
		    {
			int stop, t;
			if (i + 1 >= argc)
			    throw std::runtime_error ("syntax error");
			stop = atoi (argv[++i]) + Timer::getProgramTime ();
			t = Timer::getProgramTime ();
			while (t < stop)
			{
			    es.wait (stop - t);
			    t = Timer::getProgramTime ();
			}
			break;
		    }
		case '?':
		    syntax ();
		    return 0;
		default:
		    throw std::runtime_error ("syntax error");
	    }
	    i++;
	}
    }
    catch (const std::exception &e)
    {
	std::cerr << e.what () << std::endl;
	syntax ();
	return 1;
    }
    return 0;
}