|
|
- /* motor.l - Simulation of rocket flight */
- /* Copyright (C) 2000 */
- /* Antoine Lefebvre <antoine.lefebvre@polymtl.ca> */
-
- /* 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., 675 Mass Ave, Cambridge, MA 02139, USA. */
-
- %{
-
- #define YY_DECL int motorscan(char *name, double *diameter, double *length, double *masse_totale, double *masse_poudre, double **thrust, int *ndata)
-
-
- double P[2][200];
- char bidon[32];
- int foo;
- int count;
- int i;
- int j;
-
- int tmp1, tmp2, tmp3;
- double dtmp1, dtmp2;
-
- %}
-
- %x body
-
-
- %%
-
- <*>#+.*\n ; /* elimination of the character #, \t, \n, space, ; */
- ^[ ]+ ;
- <*>^\t+ ;
- <*>\n ;
- <INITIAL>";"+.*\n ;
-
-
-
-
-
- 01.*[ ].* {
- sscanf(yytext, "%s%s%s", bidon, bidon, name);
- /*printf("%s\n", name);*/
- count = 0;
- }
-
- 07.*[ ].* {
- sscanf(yytext, "%s%s%lf", bidon, bidon, &dtmp1);
- diameter[0] = dtmp1*2.54/100;
- /*printf("%f\n", diameter[0]);*/
- }
-
- 08.*[ ].*[ ].* {
- sscanf(yytext, "%s%s%s%lf", bidon, bidon, bidon, &dtmp1);
- length[0] = dtmp1*2.54/100;
- /*printf("%f\n", length[0]);*/
- }
-
- 11.*[ ].*[ ].*[ ].* {
- sscanf(yytext, "%s%s%s%s%lf", bidon, bidon, bidon, bidon, &dtmp1);
- masse_poudre[0] = dtmp1/1000;
- /*printf("%f\n", masse_poudre[0]);*/
- }
-
- 12.*[ ].*[ ].*[ ].* {
- sscanf(yytext, "%s%s%s%s%lf", bidon, bidon, bidon, bidon, &dtmp1);
- masse_totale[0] = dtmp1/1000;
- /*printf("%f\n", masse_totale[0]);*/
- }
-
- 20.*[ ].*[ ].*[ ].* {
- sscanf(yytext, "%s%s%s%lf%lf", bidon, bidon, bidon, &P[0][count], &P[1][count]);
- count++;
- }
-
- 64.* {
- // allocate the memory
- thrust[0] = new double[count];
- thrust[1] = new double[count];
-
- ndata[0] = count;
-
- for (j = 0; j < count; j++)
- {
- thrust[0][j] = P[0][j];
- thrust[1][j] = P[1][j] * 4.448221615; //1lb X 9.80665 X 0.45359237 kg/lb
- }
-
- }
-
-
- [0-9]{2}.*[ ].* { /*garbage all other data*/
- }
-
-
- [A-Z0-9]+[ ]*[0-9]+[ ]*[0-9]+[ ]*[0-9]+[ ]*[0-9]+"."[0-9]+[ ]*[0-9]+"."[0-9]+[ ]*[A-Z0-9]+[ ]* {
- sscanf(yytext, "%s%d%d%d%lf%lf%s", name, &tmp1, &tmp2, &foo, masse_poudre, masse_totale, bidon);
-
- diameter[0] = (double)tmp1/1000;
- length[0] = (double)tmp2/1000;
-
- count = 0;
- BEGIN(body);
- }
-
- <body>[0-9]+"."[0-9]+[ ]*[0-9]+"."[0-9]+[ ]* {
- sscanf(yytext, "%lf%lf", &P[0][count], &P[1][count]);
- count++;
- }
-
- <body>";"+.*\n {
-
- thrust[0] = new double[count];
- thrust[1] = new double[count];
- ndata[0] = count;
- for (i = 0; i < 2; i++)
- for (j = 0; j < count; j++)
- thrust[i][j] = P[i][j];
- BEGIN(INITIAL);
- }
-
-
-
- %%
-
- int yywrap()
- {
-
- return 1;
- }
-
-
-
-
-
-
|