Metropoli BBS
VIEWER: mk_tube.c MODE: TEXT (ASCII)
/////////////////////////////////////////////////////////////////////////////
// Tube Bulider.   btf 1995
// Compiles with 3 warnings.  Just ignore 'em  :)
// This code has been chucked together.  Sorry.
/////////////////////////////////////////////////////////////////////////////

#include <math.h>
#include <stdio.h>
#include <stdlib.h>

#define pi      3.14159265

void disk_error( void );

void main()
	{
	double x, y, r, xy2, z, t ,l, sd;
	long zc;
	char col, col2;
	int xp, yp, adr;
	int off;

	FILE    *handlex, *handley;
	char    i;
	
	handlex = fopen( "tube_x.dat", "wb" );
	handley = fopen( "tube_y.dat", "wb" );
	
//radius
	r = 50;
//dist between viewer & screen        
	sd = 400;
	adr = 0;

	printf("Building tube:\n");
	printf("..................................................\r");

	for ( y=-100; y<=99; y++ )
		{
		yp = y;
		if (yp % 4 == 0)
			printf("o");
		for ( x=-160; x<=159; x++ )
			{
			xy2 = fabs(( x * x ) + ( y * y )/0.8);
			xy2 = sqrt( xy2 );
			if (xy2 != 0)
				l = r / xy2;
			z = l * sd;
			if (z < 1000)
				{
				if ((x != 0) && (y != 0))
					{
					t = atan( y / x );
					t = 256 * t / ( 2 * pi );
					if ((x <= 0) && (y <= 0))
						t++;
					if ((x > 0) && (y > 0))
						t++;
					if (x >= 0)
						t = t+128;
					}

				zc = ceil( z / 4 );
				zc = zc % 256;
				col = zc;
				if ( fwrite ( &col, sizeof( char ), 1, handlex ) == -1 )
					disk_error();

				col = t;
				if ((y == 0) && (x < 0))
					col = 1;
				if ( fwrite ( &col, sizeof( char ), 1, handley ) == -1 )
					disk_error();
				}
			else
				{
				col = 0;
				if ( fwrite ( &col, sizeof( char ), 1, handlex ) == -1 )
					disk_error();
				if ( fwrite ( &col, sizeof( char ), 1, handley ) == -1 )
					disk_error();

				}
			adr++;
			}
		}

	printf("\n\r");

	if ( fclose ( handlex ) == -1)
		disk_error();
	if ( fclose ( handley ) == -1)
		disk_error();

	}

void disk_error( void )
{
	printf("Disk error!\n\r");
}
[ RETURN TO DIRECTORY ]