00001
00002
00003
00004
00005 #include "cddefines.h"
00006 #include "physconst.h"
00007 #include "rfield.h"
00008 #include "path.h"
00009 #include "iso.h"
00010 #include "iterations.h"
00011 #include "lines.h"
00012 #include "called.h"
00013 #include "elementnames.h"
00014 #include "prt.h"
00015 #include "h2.h"
00016 #include "parse.h"
00017 #include "version.h"
00018
00019 static void prt_constants(void);
00020
00021 void ParsePrint(
00022
00023 char *chCARD_CAPS )
00024 {
00025 bool lgEOL;
00026 int ipISO;
00027 long int i,
00028 j,
00029 nelem,
00030 num1;
00031 double a;
00032 double sum;
00033
00034 DEBUG_ENTRY( "ParsePrint()" );
00035
00036
00037
00038 if( nMatch("AGES",chCARD_CAPS) )
00039 {
00040
00041 prt.lgPrnAges = true;
00042 }
00043
00044 else if( nMatch("ARRA",chCARD_CAPS) )
00045 {
00046
00047 if( nMatch( "ONLY" , chCARD_CAPS ) )
00048 {
00049
00050 if( (nelem = GetElem(chCARD_CAPS))<0 )
00051 {
00052 fprintf(ioQQQ,"An element name must appear on this PRINT ARRAYS ONLY xx command.\n");
00053 puts( "[Stop in ParsePrint" );
00054 cdEXIT(EXIT_FAILURE);
00055 }
00056
00057 prt.lgPrtArry[nelem] = true;
00058 }
00059 else
00060 {
00061
00062 for( nelem=ipHYDROGEN; nelem<LIMELM; ++nelem )
00063 {
00064 prt.lgPrtArry[nelem] = true;
00065 }
00066 }
00067 }
00068
00069 else if( nMatch("CITA",chCARD_CAPS) )
00070 {
00071 fprintf( ioQQQ, "\n\nCloudy is a research project that involves the creative"
00072 " efforts of many people. It should be cited as follows:\n" );
00073 fprintf( ioQQQ, "Calculations were performed with version %s of Cloudy,"
00074 " last described by %s.\n\n",
00075 version.chVersion,
00076 version.chCitationShort);
00077 fprintf( ioQQQ, "The reference is:\n%s\n\n", version.chCitation );
00078 fprintf( ioQQQ, "In Latex this is:\n%s\n\n", version.chCitationLatex );
00079 }
00080
00081 else if( nMatch("COLU",chCARD_CAPS) && nMatch("DENS",chCARD_CAPS) )
00082 {
00083 if( nMatch(" ON ",chCARD_CAPS) )
00084 {
00085
00086 prt.lgPrintColumns = true;
00087 }
00088 else if( nMatch(" OFF",chCARD_CAPS) )
00089 {
00090
00091 prt.lgPrintColumns = false;
00092 }
00093 }
00094
00095
00096
00097
00098
00099 else if( nMatch("DEPA",chCARD_CAPS) )
00100 {
00101 if( nMatch("HE-L",chCARD_CAPS) )
00102 {
00103 ipISO = ipHELIUM;
00104 }
00105 else
00106 {
00107 ipISO = ipHYDROGEN;
00108 }
00109
00110
00111 nelem = GetElem( chCARD_CAPS );
00112
00113 nelem = MAX2(0,nelem);
00114
00115
00116 if( nelem==0 && ipISO==ipHE_LIKE )
00117 nelem = ipHELIUM;
00118
00119 if( nelem < ipISO )
00120 {
00121 fprintf(ioQQQ,"This iso-sequence (%s) and element (%s) are impossible.\n",
00122 elementnames.chElementName[ipISO],
00123 elementnames.chElementName[nelem]);
00124 puts( "[Stop in ParsePrint" );
00125 cdEXIT(EXIT_FAILURE);
00126 }
00127
00128
00129 iso.lgPrtDepartCoef[ipISO][nelem] = true;
00130 }
00131
00132 else if( nMatch("CONS",chCARD_CAPS) )
00133 {
00134
00135 prt_constants();
00136 }
00137
00138 else if( nMatch("ERRO",chCARD_CAPS) )
00139 {
00140
00141 lgPrnErr = true;
00142 }
00143
00144 else if( nMatch("HEAT",chCARD_CAPS) )
00145 {
00146
00147 prt.lgPrintHeating = true;
00148 }
00149
00150 else if( nMatch("PATH",chCARD_CAPS) )
00151 {
00152
00153 fprintf(ioQQQ,"The path ");
00154 if( lgDataPathSet )
00155 {
00156 fprintf(ioQQQ,"is ->**%s**<-\n",chDataPath );
00157 }
00158 else
00159 {
00160 fprintf(ioQQQ,"has not been set.\n;" );
00161 }
00162 }
00163
00164
00165 else if( nMatch("POPU",chCARD_CAPS))
00166 {
00167 if( nMatch("HE-L",chCARD_CAPS) )
00168 {
00169 ipISO = ipHELIUM;
00170 }
00171 else
00172 {
00173 ipISO = ipHYDROGEN;
00174 }
00175
00176
00177 nelem = GetElem( chCARD_CAPS );
00178
00179 nelem = MAX2(0,nelem);
00180
00181
00182 if( nelem==0 && ipISO==ipHE_LIKE )
00183 nelem = ipHELIUM;
00184
00185 if( nelem < ipISO )
00186 {
00187 fprintf(ioQQQ,"This iso-sequence (%s) and element (%s) are impossible.\n",
00188 elementnames.chElementName[ipISO],
00189 elementnames.chElementName[nelem]);
00190 puts( "[Stop in ParsePrint" );
00191 cdEXIT(EXIT_FAILURE);
00192 }
00193
00194
00195 iso.lgPrtLevelPops[ipISO][nelem] = true;
00196
00197
00198 i = 5;
00199 iso.numPrintLevels[ipISO][nelem] = (long)FFmtRead(chCARD_CAPS,&i,INPUT_LINE_LENGTH,&lgEOL);
00200 if( lgEOL )
00201 {
00202
00203
00204
00205
00206
00207 iso.numPrintLevels[ipISO][nelem] = iso.numLevels_max[ipISO][nelem] - 1;
00208 }
00209
00210 if( iso.numPrintLevels[ipISO][nelem] < 3 )
00211 {
00212 fprintf(ioQQQ,"Sorry, I simply must print at least three levels.\n");
00213 iso.numPrintLevels[ipISO][nelem] = 3;
00214 }
00215 ASSERT( iso.numPrintLevels[ipISO][nelem] < iso.numLevels_max[ipISO][nelem] );
00216 }
00217
00218
00219 else if( nMatch("LAST",chCARD_CAPS) )
00220 {
00221 prt.lgPrtLastIt = true;
00222 }
00223
00224
00225 else if( nMatch("LINE",chCARD_CAPS) )
00226 {
00227 if( nMatch(" ALL",chCARD_CAPS) )
00228 {
00229
00230 prt.lgPrnPump = true;
00231 prt.lgPrnColl = true;
00232 prt.lgPrnHeat = true;
00233 }
00234
00235 else if( nMatch("COLL",chCARD_CAPS) )
00236 {
00237
00238 prt.lgPrnColl = true;
00239 }
00240
00241 else if( nMatch("COLU",chCARD_CAPS) )
00242 {
00243
00244 prt.lgPrtLineArray = false;
00245
00246
00247 if( nMatch("NEAR",chCARD_CAPS) )
00248 {
00249 prt.lgPrtLineLog = false;
00250 }
00251 }
00252
00253
00254 else if( nMatch("EMER",chCARD_CAPS) && nMatch("GENT",chCARD_CAPS) )
00255 {
00256 prt.lgPrtLineEmergent = true;
00257 LineSave.lgLineEmergent = true;
00258 }
00259
00260 else if( nMatch("FAIN",chCARD_CAPS) && !(nMatch("OPTI",chCARD_CAPS)&&nMatch("DEPT",chCARD_CAPS)) )
00261 {
00262
00263
00264
00265
00266 i = 5;
00267 a = FFmtRead(chCARD_CAPS,&i,INPUT_LINE_LENGTH,&lgEOL);
00268
00269
00270 if( lgEOL )
00271 {
00272 if( nMatch(" OFF",chCARD_CAPS) )
00273 {
00274 prt.lgFaintOn = false;
00275 }
00276 else
00277 {
00278 fprintf( ioQQQ,
00279 " There faintest line to print must be on this line, sorry.\n" );
00280 puts( "[Stop in ParsePrint" );
00281 cdEXIT(EXIT_FAILURE);
00282 }
00283 }
00284
00285 prt.lgFntSet = true;
00286 if( a <= 0. )
00287 {
00288 prt.TooFaint = (float)pow(10.,a);
00289 }
00290 else
00291 {
00292 prt.TooFaint = (float)a;
00293 }
00294 }
00295
00296 else if( nMatch("FLUX",chCARD_CAPS) && nMatch("EART",chCARD_CAPS))
00297 {
00298
00299 prt.lgPrintFluxEarth = true;
00300 }
00301
00302 else if( nMatch(" H2",chCARD_CAPS) && nMatch("ELEC",chCARD_CAPS) )
00303 {
00304
00305
00306 h2.nElecLevelOutput = -1;
00307 }
00308
00309 else if( nMatch("HEAT",chCARD_CAPS) )
00310 {
00311
00312 prt.lgPrnHeat = true;
00313 }
00314
00315 else if( nMatch("INWA",chCARD_CAPS) )
00316 {
00317
00318 prt.lgPrnInwd = true;
00319 }
00320
00321 else if( nMatch("OPTI",chCARD_CAPS) && nMatch("DEPT",chCARD_CAPS) )
00322 {
00323
00324 if( nMatch(" OFF",chCARD_CAPS) )
00325 {
00326
00327 prt.lgPrtTau = false;
00328 }
00329 else
00330 {
00331 prt.lgPrtTau = true;
00332 }
00333 if( nMatch("FAIN",chCARD_CAPS) )
00334 {
00335
00336 i = 5;
00337 prt.PrtTauFnt = (float)pow(10.,FFmtRead(chCARD_CAPS,&i,INPUT_LINE_LENGTH,&lgEOL));
00338 if( lgEOL )
00339 {
00340 fprintf( ioQQQ, " There must be a number for the FAINT option. They are HEAD and ZONE. Sorry.\n" );
00341 puts( "[Stop in ParsePrint" );
00342 cdEXIT(EXIT_FAILURE);
00343 }
00344 }
00345 }
00346
00347 else if( nMatch("PUMP",chCARD_CAPS) )
00348 {
00349
00350 prt.lgPrnPump = true;
00351 }
00352
00353 else if( nMatch("SORT",chCARD_CAPS) )
00354 {
00355
00356
00357
00358 prt.lgSortLines = true;
00359 if( nMatch("WAVE",chCARD_CAPS) )
00360 {
00361
00362
00363 prt.lgSortLineIntensity = false;
00364 prt.lgSortLineWavelength = true;
00365
00366
00367
00368 if( nMatch("RANG",chCARD_CAPS) )
00369 {
00370 i = 5;
00371 prt.wlSort1 = (float)FFmtRead(chCARD_CAPS,&i,INPUT_LINE_LENGTH,&lgEOL);
00372
00373 if( chCARD_CAPS[i-1] == 'M' )
00374 {
00375
00376 prt.wlSort1 *= 1e4;
00377 }
00378 else if( chCARD_CAPS[i-1] == 'C' )
00379 {
00380
00381 prt.wlSort1 *= 1e8;
00382 }
00383 prt.wlSort2 = (float)FFmtRead(chCARD_CAPS,&i,INPUT_LINE_LENGTH,&lgEOL);
00384
00385 if( chCARD_CAPS[i-1] == 'M' )
00386 {
00387
00388 prt.wlSort2 *= 1e4;
00389 }
00390 else if( chCARD_CAPS[i-1] == 'C' )
00391 {
00392
00393 prt.wlSort2 *= 1e8;
00394 }
00395 if( lgEOL )
00396 {
00397 fprintf( ioQQQ, " There must be two numbers for the RANGE option, the lower and upper wavelength. Sorry.\n" );
00398 puts( "[Stop in ParsePrint" );
00399 cdEXIT(EXIT_FAILURE);
00400 }
00401 if( prt.wlSort1 <0. || prt.wlSort2 <0. ||
00402 prt.wlSort1 >= prt.wlSort2 )
00403 {
00404 fprintf( ioQQQ, " The lower and upper wavelength must be positive and in the correct order. Sorry.\n" );
00405 puts( "[Stop in ParsePrint" );
00406 cdEXIT(EXIT_FAILURE);
00407 }
00408 }
00409 else
00410 {
00411 prt.wlSort1 = -1;
00412 prt.wlSort2 = 1e30f;
00413 }
00414 }
00415 else if( nMatch("INTE",chCARD_CAPS) )
00416 {
00417
00418
00419 prt.lgSortLineIntensity = true;
00420 prt.lgSortLineWavelength = false;
00421 }
00422 else
00423 {
00424 fprintf( ioQQQ, "I can sort by wavelength or intensity - one must be specified.\nSorry.\n" );
00425 puts( "[Stop in ParsePrint" );
00426 cdEXIT(EXIT_FAILURE);
00427 }
00428
00429 }
00430 else if( nMatch(" SUM",chCARD_CAPS) )
00431 {
00432
00433 sum = PrtLineSum( "READ" );
00434
00435 if( false ) fprintf(ioQQQ,"%.2e\n", sum);
00436 }
00437
00438 else if( nMatch("SURF",chCARD_CAPS) && nMatch("BRIG",chCARD_CAPS) )
00439 {
00440
00441 prt.lgSurfaceBrightness = true;
00442
00443 if( nMatch("ARCS",chCARD_CAPS ) )
00444 {
00445
00446 prt.lgSurfaceBrightness_SR = false;
00447 }
00448 else
00449 {
00450
00451 prt.lgSurfaceBrightness_SR = true;
00452 }
00453 }
00454 else
00455 {
00456 fprintf( ioQQQ, "One of the keys should have appeared. \nPlease consult Hazy.\nSorry.\n" );
00457 puts( "[Stop in ParsePrint" );
00458 cdEXIT(EXIT_FAILURE);
00459 }
00460 }
00461
00462
00463 else if( nMatch("MASE",chCARD_CAPS) )
00464 {
00465 prt.lgPrtMaser = true;
00466 }
00467
00468 else if( nMatch("ONLY",chCARD_CAPS) )
00469 {
00470 if( nMatch("ZONE",chCARD_CAPS) )
00471 {
00472 prt.lgOnlyZone = true;
00473 }
00474
00475 else if( nMatch("HEAD",chCARD_CAPS) )
00476 {
00477 prt.lgOnlyHead = true;
00478 }
00479
00480 else
00481 {
00482 fprintf( ioQQQ, " There must be a keyword for the ONLY option. They are HEAD and ZONE. Sorry.\n" );
00483 puts( "[Stop in ParsePrint" );
00484 cdEXIT(EXIT_FAILURE);
00485 }
00486 }
00487
00488 else if( nMatch("STAR",chCARD_CAPS) )
00489 {
00490
00491 called.lgTalk = false;
00492 prt.lgPrtStart = true;
00493 i = 5;
00494 prt.nstart = (long int)FFmtRead(chCARD_CAPS,&i,INPUT_LINE_LENGTH,&lgEOL);
00495 if( lgEOL )
00496 {
00497 fprintf( ioQQQ,
00498 " The zone on which the print is to start MUST be entered on this line. Sorry.\n" );
00499 puts( "[Stop in ParsePrint" );
00500 cdEXIT(EXIT_FAILURE);
00501 }
00502 }
00503
00504
00505 else if( nMatch("CONT",chCARD_CAPS) )
00506 {
00507
00508
00509 if( nMatch("BLOC",chCARD_CAPS) )
00510 {
00511
00512 prt.lgPrtCont = true;
00513 }
00514 else if( nMatch("INDI" , chCARD_CAPS ))
00515 {
00516
00517
00518
00519
00520 prt.lgPrtContIndices = true;
00521
00522
00523
00524 i = 5;
00525
00526
00527 prt.lgPrtContIndices_lo_E = (float)FFmtRead(chCARD_CAPS,&i,INPUT_LINE_LENGTH,&lgEOL);
00528 prt.lgPrtContIndices_hi_E = (float)FFmtRead(chCARD_CAPS,&i,INPUT_LINE_LENGTH,&lgEOL);
00529
00530
00531 if( lgEOL )
00532 prt.lgPrtContIndices_hi_E = (float)rfield.egamry;
00533 }
00534 else
00535 {
00536
00537 prt.lgPrnDiff = true;
00538 }
00539 }
00540
00541 else if( nMatch("COOL",chCARD_CAPS) )
00542 {
00543
00544 i = 5;
00545 prt.nzdump = (long int)FFmtRead(chCARD_CAPS,&i,INPUT_LINE_LENGTH,&lgEOL);
00546
00547
00548 if( lgEOL )
00549 {
00550 prt.nzdump = 0;
00551 }
00552 }
00553
00554 else if( nMatch("QUIE",chCARD_CAPS) || (nMatch(" OFF",chCARD_CAPS) &&
00555 !nMatch("FAIN" ,chCARD_CAPS)) )
00556 {
00557
00558
00559 called.lgTalk = false;
00560 }
00561
00562 else if( nMatch(" ON ",chCARD_CAPS) )
00563 {
00564
00565
00566
00567
00568
00569
00570 if( called.lgTalkIsOK && !called.lgTalkForcedOff )
00571 {
00572 called.lgTalk = true;
00573 }
00574 }
00575
00576 else if( nMatch("SHOR",chCARD_CAPS) )
00577 {
00578
00579 prt.lgPrtShort = true;
00580 if( !prt.lgFntSet )
00581 prt.TooFaint = 0.001f;
00582 }
00583
00584 else if( nMatch("EVER",chCARD_CAPS) )
00585 {
00586
00587 i = 5;
00588 num1 = (long int)FFmtRead(chCARD_CAPS,&i,INPUT_LINE_LENGTH,&lgEOL);
00589 if( lgEOL )
00590 {
00591 fprintf( ioQQQ, " The number of zones to print MUST be entered on this line. Sorry.\n" );
00592 puts( "[Stop in ParsePrint" );
00593 cdEXIT(EXIT_FAILURE);
00594 }
00595
00596 iterations.IterPrnt[0] = MAX2(num1,1);
00597
00598 for( j=1; j < iterations.iter_malloc; j++ )
00599 {
00600 iterations.IterPrnt[j] = (long int)FFmtRead(chCARD_CAPS,&i,INPUT_LINE_LENGTH,&lgEOL);
00601 if( lgEOL )
00602 {
00603 iterations.IterPrnt[j] = iterations.IterPrnt[j-1];
00604 }
00605 }
00606 }
00607
00608
00609 else
00610 {
00611 fprintf( ioQQQ, " There MUST be a keyword on the following line. Sorry.\n" );
00612 fprintf( ioQQQ, " The PRINT FAINT command is now the PRINT LINE FAINT command.\n" );
00613 fprintf( ioQQQ, " %80.80s\n", chCARD_CAPS );
00614 puts( "[Stop in ParsePrint]" );
00615 cdEXIT(EXIT_FAILURE);
00616 }
00617
00618 DEBUG_EXIT( "ParsePrint()" );
00619 return;
00620 }
00621
00622
00623 static void prt_constants(void)
00624 {
00625
00626 DEBUG_ENTRY( "prt_constants()" );
00627
00628 fprintf(ioQQQ,"\n\nPhysical constants used by Cloudy, taken from physconst.h\n");
00629
00630 fprintf(ioQQQ,"E\t%g\n",E);
00631 fprintf(ioQQQ,"EULER\t%g\n",EULER);
00632 fprintf(ioQQQ,"PI\t%g\n",PI);
00633 fprintf(ioQQQ,"PI2\t%g\n",PI2);
00634 fprintf(ioQQQ,"PI4\t%g\n",PI4);
00635 fprintf(ioQQQ,"PI8\t%g\n",PI8);
00636 fprintf(ioQQQ,"SQRT2\t%g\n",SQRT2);
00637 fprintf(ioQQQ,"SQRTPI\t%g\n",SQRTPI);
00638 fprintf(ioQQQ,"SQRTPIBY2\t%g\n",SQRTPIBY2);
00639 fprintf(ioQQQ,"LN_TWO\t%g\n",LN_TWO);
00640 fprintf(ioQQQ,"LN_TEN\t%g\n",LN_TEN);
00641 fprintf(ioQQQ,"LOG10_E\t%g\n",LOG10_E);
00642 fprintf(ioQQQ,"OPTDEP2EXTIN\t%g\n",OPTDEP2EXTIN);
00643 fprintf(ioQQQ,"RADIAN\t%g\n",RADIAN);
00644 fprintf(ioQQQ,"SOLAR_MASS\t%g\n",SOLAR_MASS);
00645 fprintf(ioQQQ,"SOLAR_LUMINOSITY\t%g\n",SOLAR_LUMINOSITY);
00646 fprintf(ioQQQ,"AU\t%g\n",AU);
00647 fprintf(ioQQQ,"ATOMIC_MASS_UNIT\t%g\n",ATOMIC_MASS_UNIT);
00648 fprintf(ioQQQ,"ELECTRON_MASS\t%g\n",ELECTRON_MASS);
00649 fprintf(ioQQQ,"PROTON_MASS\t%g\n",PROTON_MASS);
00650 fprintf(ioQQQ,"BOLTZMANN\t%g\n",BOLTZMANN);
00651 fprintf(ioQQQ,"SPEEDLIGHT\t%g\n",SPEEDLIGHT);
00652 fprintf(ioQQQ,"HPLANCK\t%g\n",HPLANCK);
00653 fprintf(ioQQQ,"ELEM_CHARGE\t%g\n",ELEM_CHARGE);
00654 fprintf(ioQQQ,"RYD_INF\t%g\n",RYD_INF);
00655 fprintf(ioQQQ,"HIONPOT\t%g\n",HIONPOT);
00656 fprintf(ioQQQ,"PARSEC\t%g\n",PARSEC);
00657 fprintf(ioQQQ,"H_BAR \t%g\n",H_BAR );
00658 fprintf(ioQQQ,"ELEM_CHARGE_ESU \t%g\n",ELEM_CHARGE_ESU );
00659 fprintf(ioQQQ,"ELECTRIC_CONST\t%g\n",ELECTRIC_CONST);
00660 fprintf(ioQQQ,"HION_LTE_POP\t%g\n",HION_LTE_POP);
00661 fprintf(ioQQQ,"SAHA\t%g\n",SAHA);
00662 fprintf(ioQQQ,"ERG1CM\t%g\n",ERG1CM);
00663 fprintf(ioQQQ,"T1CM\t%g\n",T1CM);
00664 fprintf(ioQQQ,"WAVNRYD\t%g\n",WAVNRYD);
00665 fprintf(ioQQQ,"RYDLAM\t%g\n",RYDLAM);
00666 fprintf(ioQQQ,"EN1RYD\t%g\n",EN1RYD);
00667 fprintf(ioQQQ,"TE1RYD\t%g\n",TE1RYD);
00668 fprintf(ioQQQ,"EVDEGK\t%g\n",EVDEGK);
00669 fprintf(ioQQQ,"EVRYD\t%g\n",EVRYD);
00670 fprintf(ioQQQ,"EN1EV\t%g\n",EN1EV);
00671 fprintf(ioQQQ,"FR1RYD\t%g\n",FR1RYD);
00672 fprintf(ioQQQ,"HNU3C2\t%g\n",HNU3C2);
00673 fprintf(ioQQQ,"FR1RYDHYD\t%g\n",FR1RYDHYD );
00674 fprintf(ioQQQ,"HBAReV\t%g\n",HBAReV );
00675 fprintf(ioQQQ,"RYDLAMHYD\t%g\n",RYDLAMHYD );
00676 fprintf(ioQQQ,"STEFAN_BOLTZ\t%g\n",STEFAN_BOLTZ);
00677 fprintf(ioQQQ,"FREQ_1EV\t%g\n",FREQ_1EV);
00678 fprintf(ioQQQ,"FINE_STRUCTURE\t%g\n",FINE_STRUCTURE);
00679 fprintf(ioQQQ,"BOHR_RADIUS_CM\t%g\n",BOHR_RADIUS_CM);
00680 fprintf(ioQQQ,"TWO_PHOT_CONST\t%g\n",TWO_PHOT_CONST);
00681 fprintf(ioQQQ,"COLL_CONST\t%g\n",COLL_CONST);
00682 fprintf(ioQQQ,"MILNE_CONST\t%g\n",MILNE_CONST);
00683 fprintf(ioQQQ,"TRANS_PROB_CONST\t%g\n",TRANS_PROB_CONST);
00684 fprintf(ioQQQ,"\n");
00685
00686 fprintf(ioQQQ,"Some other interesting sizes.\n");
00687 fprintf(ioQQQ,"bool\t%lu\n",(unsigned long)sizeof(bool));
00688 fprintf(ioQQQ,"char\t%lu\n",(unsigned long)sizeof(char));
00689 fprintf(ioQQQ,"int\t%lu\n",(unsigned long)sizeof(int));
00690 fprintf(ioQQQ,"long int\t%lu\n",(unsigned long)sizeof(long int));
00691 fprintf(ioQQQ,"unsigned int\t%lu\n",(unsigned long)sizeof(unsigned int));
00692 fprintf(ioQQQ,"float\t%lu\n",(unsigned long)sizeof(float));
00693 fprintf(ioQQQ,"double\t%lu\n",(unsigned long)sizeof(double));
00694 fprintf(ioQQQ,"double*\t%lu\n",(unsigned long)sizeof(double*));
00695 fprintf(ioQQQ,"double**\t%lu\n",(unsigned long)sizeof(double**));
00696 fprintf(ioQQQ,"double***\t%lu\n",(unsigned long)sizeof(double***));
00697 fprintf(ioQQQ,"double****\t%lu\n",(unsigned long)sizeof(double****));
00698 fprintf(ioQQQ,"\n");
00699
00700 fprintf(ioQQQ,"Some constants from float.h.\n");
00701
00702 fprintf(ioQQQ,"DBL_DIG \t%i\n", DBL_DIG);
00703 fprintf(ioQQQ,"DBL_EPSILON \t%g\n",DBL_EPSILON);
00704 fprintf(ioQQQ,"DBL_MANT_DIG\t%i\n",DBL_MANT_DIG);
00705 fprintf(ioQQQ,"DBL_MAX\t%g\n", DBL_MAX);
00706 fprintf(ioQQQ,"DBL_MAX_10_EXP\t%i\n", DBL_MAX_10_EXP);
00707 fprintf(ioQQQ,"DBL_MAX_EXP\t%i\n", DBL_MAX_EXP);
00708 fprintf(ioQQQ,"DBL_MIN\t%g\n", DBL_MIN);
00709
00710 fprintf(ioQQQ,"FLT_DIG\t%i\n", FLT_DIG);
00711 fprintf(ioQQQ,"FLT_EPSILON\t%g\n", FLT_EPSILON);
00712 fprintf(ioQQQ,"FLT_MANT_DIG\t%i\n", FLT_MANT_DIG);
00713 fprintf(ioQQQ,"FLT_MAX\t%g\n", FLT_MAX);
00714 fprintf(ioQQQ,"FLT_MAX_10_EXP\t%i\n", FLT_MAX_10_EXP);
00715 fprintf(ioQQQ,"FLT_MAX_EXP\t%i\n", FLT_MAX_EXP);
00716 fprintf(ioQQQ,"FLT_MIN\t%g\n", FLT_MIN);
00717
00718 fprintf(ioQQQ,"\n\n\n");
00719
00720 DEBUG_EXIT( "prt_constants()" );
00721
00722 return;
00723 }