( Forth prog to produce table for T & P values )
( T in Celcius; P in inches Hg from aneroid barometer )
( K=273+C; standard P=1013.2 mbar; 33.86 x in Hg = mbar )
( factor = 1013.2 / P  x  K / 293 )

DECIMAL
101320 CONSTANT P0   29300 CONSTANT T0
17 VARIABLE mintemp 
25 VARIABLE maxtemp 

29 VARIABLE minP 
31 VARIABLE maxP
0 VARIABLE dK  
( 0 VARIABLE dP ) ( declaration BEFORE using in->mbar to define dP - Works OK !!)

: in->mbar  3386 * ;     ( in--mbar x 100 )
: C->K  100 * 27300 + ;  ( C--K x 100)

2 in->mbar 10 / VARIABLE dP   ( dP !)  ( = 0.2 inches increment)

50 dK !               ( = 0.5 degree increment)

: 3.  <# # # # 46 HOLD #S #> TYPE SPACE ;
: 1.  <# # 46 HOLD #S #> TYPE SPACE ;

: corr ( P in mbarx100, T in Kx100 -- factor x 1000)
   1000  T0   ( P,K,100,T0 .. )
   */         ( P, 100K/293.. )
   P0 ROT     ( 100K/293,P0,P .. )
   */ ;

( : myspaces 0 DO SPACE LOOP ;) ( low level n SPACES doesn't work )
( : SPACES myspaces ;)
: indent  4 SPACES ;

: title CR
   13 SPACES ." Chamber Correction Factors for Temperature and Pressure" CR CR ;

: header
   indent ." P (in.): "
   maxP @ 10 * 1+    ( max P in.x100 )
   minP @ 10 *       ( min P )
   DO I 1. SPACE 2 +LOOP   ( nnn to nn.n )
   CR CR indent ." Temp(C)" ;

: footer indent ." Table printed November 2012" ;

: table  ( max temp, min temp K*100 ... )
  DO CR
   indent I 10 / 2730 - 1. 3 SPACES  ( temp in Cx10 )
   maxP @ in->mbar  minP @ in->mbar
   DO I J corr 3.
    dP @ +LOOP   ( = 0.2 inches increment )
  dK @ +LOOP ;

: show_corrs  title
  27 minP !  29 maxP !  maxtemp @ C->K  mintemp @ C->K
  header  table  CR CR
  29 minP !  31 maxP !  maxtemp @ C->K  mintemp @ C->K
  header  table  CR CR
  31 minP !  33 maxP !  maxtemp @ C->K  mintemp @ C->K
  header  table  CR CR
  footer ;

( : ignore LIT" IGNORE" CLI$ ; )

( : print  ignore 2 VDU show_corrs  3 VDU ; )

EXIT

