DEFLNG W
	Pi = 4 * ATN(1): Phi = (1 + SQR(5)) / 2
	GOSUB Bienvenida
	GOSUB ArchivoEscrito
	GOSUB Principal
	GOSUB CierraArchivo
	END

ArchivoEscrito:
	CLS
	OKGrabacion$ = "no"
	WHILE OKGrabacion$ <> "s¡"
		INPUT "Complete DOS name of the file to store "; ArchivoEscrito$
		OPEN "R", #2, ArchivoEscrito$, 1
		FIELD #2, 1 AS e$
		IF LOF(2) <> 0 THEN
			BEEP: PRINT : PRINT "A file with that name already exists. Erase (E), try again ?"
			GOSUB EsperaTecla
			IF Tecla$ = "e" OR Tecla$ = "E" THEN
				CLOSE #2
				KILL ArchivoEscrito$
				OPEN "R", #2, ArchivoEscrito$, 1
				FIELD #2, 1 AS e$
				OKGrabacion$ = "s¡"
			ELSE
				CLOSE #2
			END IF
		ELSE
			OKGrabacion$ = "s¡"
		END IF
	WEND
	RETURN

Bienvenida:
	CLS : COLOR 7, 0
	PRINT "   This program builds some sort of a Mormon temple in the CBB format."
	PRINT
	PRINT "   Copyright Jean-Luc Ancey, February 18th, 1997.": PRINT
	PRINT "   Strike a key when ready."
	GOSUB EsperaTecla
	RETURN

CierraArchivo:
	wByteEscrito = wByteEscrito + 1
	LSET e$ = CHR$(26)
	PUT #2, wByteEscrito
	CLOSE
	RETURN

ColumnasEsquinas:
	Nombre$ = "ColuEsq": GOSUB GrabaNombre
	Tono = 200: Saturacion = .3: Brillo = .8: GOSUB GrabaColor
	LineaEscrita$ = "": GOSUB GrabaUnaLinea
      
	x = TamaCuerpoXY / 2: y = TamaCuerpoXY / 2: z = 0: Posicion$ = "c"
	TamaX = DiamColumAngulos: TamaY = DiamColumAngulos: TamaZ = AltoCuerpo
	Exclusion$ = "sup,so"
	GOSUB GrabaUnaColumna
      
	x = 0 - TamaCuerpoXY / 2: y = TamaCuerpoXY / 2: z = 0: Posicion$ = "c"
	TamaX = DiamColumAngulos: TamaY = DiamColumAngulos: TamaZ = AltoCuerpo
	Exclusion$ = "sup,se"
	GOSUB GrabaUnaColumna
      
	x = 0 - TamaCuerpoXY / 2: y = 0 - TamaCuerpoXY / 2: z = 0: Posicion$ = "c"
	TamaX = DiamColumAngulos: TamaY = DiamColumAngulos: TamaZ = AltoCuerpo
	Exclusion$ = "sup,ne"
	GOSUB GrabaUnaColumna
      
	x = TamaCuerpoXY / 2: y = 0 - TamaCuerpoXY / 2: z = 0: Posicion$ = "c"
	TamaX = DiamColumAngulos: TamaY = DiamColumAngulos: TamaZ = AltoCuerpo
	Exclusion$ = "sup,no"
	GOSUB GrabaUnaColumna
       
	LineaEscrita$ = "": GOSUB GrabaUnaLinea
	GOSUB TechoCharlie
	RETURN

ColumnasLados:
	Nombre$ = "ColuLados": GOSUB GrabaNombre
	Tono = 60: Saturacion = .8: Brillo = .8: GOSUB GrabaColor
	LineaEscrita$ = "": GOSUB GrabaUnaLinea
   
	FOR Columna = 2 TO ColumnasPorLado - 1
		x = 0 - TamaCuerpoXY / 2 + (TamaCuerpoXY / (ColumnasPorLado - 1)) * (Columna - 1)
		y = 0 - TamaCuerpoXY / 2
		z = AltoEscalones: Posicion$ = "c"
		TamaX = DiamConosLados: TamaY = DiamConosLados: TamaZ = AltoCuerpo - AltoEscalones
		Exclusion$ = "inf,n"
		GOSUB GrabaUnaColumna
	NEXT Columna
  
	FOR Columna = 2 TO ColumnasPorLado - 1
		x = TamaCuerpoXY / 2
		y = 0 - TamaCuerpoXY / 2 + (TamaCuerpoXY / (ColumnasPorLado - 1)) * (Columna - 1)
		z = AltoEscalones: Posicion$ = "c"
		TamaX = DiamConosLados: TamaY = DiamConosLados: TamaZ = AltoCuerpo - AltoEscalones
		Exclusion$ = "inf,o"
		GOSUB GrabaUnaColumna
	NEXT Columna
    
	FOR Columna = 2 TO ColumnasPorLado - 1
		x = 0 - TamaCuerpoXY / 2 + (TamaCuerpoXY / (ColumnasPorLado - 1)) * (Columna - 1)
		y = TamaCuerpoXY / 2
		z = AltoEscalones: Posicion$ = "c"
		TamaX = DiamConosLados: TamaY = DiamConosLados: TamaZ = AltoCuerpo - AltoEscalones
		Exclusion$ = "inf,s"
		GOSUB GrabaUnaColumna
	NEXT Columna
  
	FOR Columna = 2 TO ColumnasPorLado - 1
		x = 0 - TamaCuerpoXY / 2
		y = 0 - TamaCuerpoXY / 2 + (TamaCuerpoXY / (ColumnasPorLado - 1)) * (Columna - 1)
		z = AltoEscalones: Posicion$ = "c"
		TamaX = DiamConosLados: TamaY = DiamConosLados: TamaZ = AltoCuerpo - AltoEscalones
		Exclusion$ = "inf,e"
		GOSUB GrabaUnaColumna
	NEXT Columna
      
	LineaEscrita$ = "": GOSUB GrabaUnaLinea
	RETURN

Cuerpo:
	Nombre$ = "Cuerpo": GOSUB GrabaNombre
	Tono = 180: Saturacion = .8: Brillo = .5: GOSUB GrabaColor
	LineaEscrita$ = "": GOSUB GrabaUnaLinea
	x = 0: y = 0: z = 0: Posicion$ = "c"
	TamaX = TamaCuerpoXY: TamaY = TamaCuerpoXY: TamaZ = AltoCuerpo
	Exclusion$ = ""
	GOSUB GrabaUnCubo
	LineaEscrita$ = "": GOSUB GrabaUnaLinea
	RETURN

Escalones:
	Nombre$ = "Escalones": GOSUB GrabaNombre
	Tono = 120: Saturacion = .6: Brillo = .5: GOSUB GrabaColor
	LineaEscrita$ = "": GOSUB GrabaUnaLinea
      
	x = 0: y = 0 - TamaCuerpoXY / 2: z = 0: Posicion$ = "n"
	TamaX = AnchoEscalones: TamaY = ProfundoEscalones: TamaZ = AltoEscalones
	Exclusion$ = "n"
	GOSUB GrabaUnCubo
      
	x = TamaCuerpoXY / 2: y = 0: z = 0: Posicion$ = "o"
	TamaX = ProfundoEscalones: TamaY = AnchoEscalones: TamaZ = AltoEscalones
	Exclusion$ = "o"
	GOSUB GrabaUnCubo
      
	x = 0: y = TamaCuerpoXY / 2: z = 0: Posicion$ = "s"
	TamaX = AnchoEscalones: TamaY = ProfundoEscalones: TamaZ = AltoEscalones
	Exclusion$ = "s"
	GOSUB GrabaUnCubo
      
	x = 0 - TamaCuerpoXY / 2: y = 0: z = 0: Posicion$ = "e"
	TamaX = ProfundoEscalones: TamaY = AnchoEscalones: TamaZ = AltoEscalones
	Exclusion$ = "e"
	GOSUB GrabaUnCubo
       
	LineaEscrita$ = "": GOSUB GrabaUnaLinea
	RETURN

EsperaTecla:
	Tecla$ = ""
	WHILE Tecla$ = ""
		Tecla$ = INKEY$
	WEND
	RETURN

GrabaColor:
	LineaEscrita$ = "": GOSUB GrabaUnaLinea
	Valor = Tono: GOSUB TradValorCadena
	LineaEscrita$ = Cadena$ + ","
	Valor = Saturacion: GOSUB TradValorCadena
	LineaEscrita$ = LineaEscrita$ + Cadena$ + ","
	Valor = Brillo: GOSUB TradValorCadena
	LineaEscrita$ = LineaEscrita$ + Cadena$
	GOSUB GrabaUnaLinea
	LineaEscrita$ = "": GOSUB GrabaUnaLinea
	RETURN

GrabaNombre:
	LineaEscrita$ = "": GOSUB GrabaUnaLinea
	LineaEscrita$ = Nombre$: GOSUB GrabaUnaLinea
	LineaEscrita$ = "": GOSUB GrabaUnaLinea
	RETURN

GrabaUnaColumna:
	LineaEscrita$ = "Posi "
	Valor = x: GOSUB TradValorCadena
	LineaEscrita$ = LineaEscrita$ + Cadena$ + ","
	Valor = y: GOSUB TradValorCadena
	LineaEscrita$ = LineaEscrita$ + Cadena$ + ","
	Valor = z: GOSUB TradValorCadena
	LineaEscrita$ = LineaEscrita$ + Cadena$ + "," + Posicion$ + " Tama "
	Valor = TamaX: GOSUB TradValorCadena
	LineaEscrita$ = LineaEscrita$ + Cadena$ + ","
	Valor = TamaY: GOSUB TradValorCadena
	LineaEscrita$ = LineaEscrita$ + Cadena$ + ","
	Valor = TamaZ: GOSUB TradValorCadena
	LineaEscrita$ = LineaEscrita$ + Cadena$
	IF Exclusion$ <> "" THEN
		LineaEscrita$ = LineaEscrita$ + " Excl " + Exclusion$
	END IF
	Exclusion$ = ""
	LineaEscrita$ = LineaEscrita$ + " Punt 12"
	GOSUB GrabaUnaLinea
	RETURN

GrabaUnaLinea:
	PRINT LineaEscrita$
	LineaEscrita$ = LineaEscrita$ + CHR$(13) + CHR$(10)
	FOR a = 1 TO LEN(LineaEscrita$)
		wByteEscrito = wByteEscrito + 1
		LSET e$ = MID$(LineaEscrita$, a, 1)
		PUT #2, wByteEscrito
	NEXT a
	LineaEscrita$ = ""
	RETURN

GrabaUnaEsferaTecho:
	LineaEscrita$ = "Posi "
	Valor = x: GOSUB TradValorCadena
	LineaEscrita$ = LineaEscrita$ + Cadena$ + ","
	Valor = y: GOSUB TradValorCadena
	LineaEscrita$ = LineaEscrita$ + Cadena$ + ","
	Valor = z: GOSUB TradValorCadena
	LineaEscrita$ = LineaEscrita$ + Cadena$ + "," + Posicion$ + " Tama "
	Valor = TamaX: GOSUB TradValorCadena
	LineaEscrita$ = LineaEscrita$ + Cadena$ + ","
	Valor = TamaY: GOSUB TradValorCadena
	LineaEscrita$ = LineaEscrita$ + Cadena$ + ","
	Valor = TamaZ: GOSUB TradValorCadena
	LineaEscrita$ = LineaEscrita$ + Cadena$
	IF Exclusion$ <> "" THEN
		LineaEscrita$ = LineaEscrita$ + " Excl " + Exclusion$
	END IF
	LineaEscrita$ = LineaEscrita$ + " Punt 18,11"
	Exclusion$ = ""
	GOSUB GrabaUnaLinea
	RETURN

GrabaUnConoTecho:
	LineaEscrita$ = "Posi "
	Valor = x: GOSUB TradValorCadena
	LineaEscrita$ = LineaEscrita$ + Cadena$ + ","
	Valor = y: GOSUB TradValorCadena
	LineaEscrita$ = LineaEscrita$ + Cadena$ + ","
	Valor = z: GOSUB TradValorCadena
	LineaEscrita$ = LineaEscrita$ + Cadena$ + "," + Posicion$ + " Tama "
	Valor = TamaX: GOSUB TradValorCadena
	LineaEscrita$ = LineaEscrita$ + Cadena$ + ","
	Valor = TamaY: GOSUB TradValorCadena
	LineaEscrita$ = LineaEscrita$ + Cadena$ + ","
	Valor = TamaZ: GOSUB TradValorCadena
	LineaEscrita$ = LineaEscrita$ + Cadena$
	IF Exclusion$ <> "" THEN
		LineaEscrita$ = LineaEscrita$ + " Excl " + Exclusion$
	END IF
	LineaEscrita$ = LineaEscrita$ + " Punt 18"
	Exclusion$ = ""
	GOSUB GrabaUnaLinea
	RETURN

GrabaUnCubo:
	LineaEscrita$ = "Posi "
	Valor = x: GOSUB TradValorCadena
	LineaEscrita$ = LineaEscrita$ + Cadena$ + ","
	Valor = y: GOSUB TradValorCadena
	LineaEscrita$ = LineaEscrita$ + Cadena$ + ","
	Valor = z: GOSUB TradValorCadena
	LineaEscrita$ = LineaEscrita$ + Cadena$ + "," + Posicion$ + " Tama "
	Valor = TamaX: GOSUB TradValorCadena
	LineaEscrita$ = LineaEscrita$ + Cadena$ + ","
	Valor = TamaY: GOSUB TradValorCadena
	LineaEscrita$ = LineaEscrita$ + Cadena$ + ","
	Valor = TamaZ: GOSUB TradValorCadena
	LineaEscrita$ = LineaEscrita$ + Cadena$
	IF Exclusion$ <> "" THEN
		LineaEscrita$ = LineaEscrita$ + " Excl " + Exclusion$
	END IF
	Exclusion$ = ""
	GOSUB GrabaUnaLinea
	RETURN

LeeUnaLinea:
	LineaLeida$ = ""
	FinDeLinea$ = "no"
	WHILE FinDeLinea$ = "no" AND wByteLeido < LOF(1)
		wByteLeido = wByteLeido + 1
		GET #1, wByteLeido
		IF l$ <> CHR$(13) THEN
			IF l$ <> CHR$(10) THEN LineaLeida$ = LineaLeida$ + l$
		ELSE
			FinDeLinea$ = "s¡"
		END IF
	WEND
	RETURN

Principal:
	GOSUB Variables
	GOSUB Cuerpo
	GOSUB Escalones
	GOSUB ColumnasEsquinas
	GOSUB ColumnasLados
	GOSUB Techo
	RETURN

Techo:
	Nombre$ = "Techo": GOSUB GrabaNombre
	Tono = 12: Saturacion = .33: Brillo = .4: GOSUB GrabaColor
	GOSUB TechoAlfa
	GOSUB TechoBravo
	RETURN

TechoAlfa:
	LineaEscrita$ = "": GOSUB GrabaUnaLinea
	x = 0: y = 0: z = AltoCuerpo: Posicion$ = "cgrav"
	TamaX = Alfa / SIN(Pi / 4): TamaY = TamaX: TamaZ = TamaX
	Exclusion$ = "inf"
	GOSUB GrabaUnaEsferaTecho
	LineaEscrita$ = "": GOSUB GrabaUnaLinea
	RETURN

TechoBravo:
	LineaEscrita$ = "": GOSUB GrabaUnaLinea
	x = Alfa / 2 + Bravo / 2: y = Alfa / 2 + Bravo / 2: z = AltoCuerpo: Posicion$ = "c"
	TamaX = Bravo / SIN(Pi / 4): TamaY = Bravo / SIN(Pi / 4): TamaZ = AltoBravo
	Exclusion$ = "inf"
	GOSUB GrabaUnConoTecho
	x = 0 - Alfa / 2 - Bravo / 2: y = Alfa / 2 + Bravo / 2: z = AltoCuerpo: Posicion$ = "c"
	Exclusion$ = "inf"
	GOSUB GrabaUnConoTecho
	x = 0 - Alfa / 2 - Bravo / 2: y = 0 - Alfa / 2 - Bravo / 2: z = AltoCuerpo: Posicion$ = "c"
	Exclusion$ = "inf"
	GOSUB GrabaUnConoTecho
	x = Alfa / 2 + Bravo / 2: y = 0 - Alfa / 2 - Bravo / 2: z = AltoCuerpo: Posicion$ = "c"
	Exclusion$ = "inf"
	GOSUB GrabaUnConoTecho
	LineaEscrita$ = "": GOSUB GrabaUnaLinea
	RETURN

TechoCharlie:
	LineaEscrita$ = "": GOSUB GrabaUnaLinea
	x = TamaCuerpoXY / 2: y = TamaCuerpoXY / 2: z = AltoCuerpo: Posicion$ = "c"
	TamaX = Charlie: TamaY = Charlie: TamaZ = AltoCharlie
	Exclusion$ = "inf"
	GOSUB GrabaUnConoTecho
	x = 0 - TamaCuerpoXY / 2: y = TamaCuerpoXY / 2: z = AltoCuerpo: Posicion$ = "c"
	GOSUB GrabaUnConoTecho
	x = 0 - TamaCuerpoXY / 2: y = 0 - TamaCuerpoXY / 2: z = AltoCuerpo: Posicion$ = "c"
	GOSUB GrabaUnConoTecho
	x = TamaCuerpoXY / 2: y = 0 - TamaCuerpoXY / 2: z = AltoCuerpo: Posicion$ = "c"
	GOSUB GrabaUnConoTecho
	LineaEscrita$ = "": GOSUB GrabaUnaLinea
	RETURN

TradValorCadena:
	Cadena$ = STR$(Valor)
	IF LEFT$(Cadena$, 1) = " " THEN
		Cadena$ = MID$(Cadena$, 2, LEN(Cadena$) - 1)
	END IF
	IF LEFT$(Cadena$, 2) = "-." THEN
		Cadena$ = "-0" + RIGHT$(Cadena$, LEN(Cadena$) - 1)
	END IF
	IF LEFT$(Cadena$, 1) = "." THEN
		Cadena$ = "0" + Cadena$
	END IF
	RETURN

Variables:
	TamaCuerpoXY = 6
	AltoCuerpo = TamaCuerpoXY / Phi
	ProfundoEscalones = TamaCuerpoXY / 8
	AltoEscalones = AltoCuerpo / 24
	DiamColumAngulos = 2 / 3
	DiamConosLados = DiamColumAngulos / Phi
	ColumnasPorLado = 8
	AnchoEscalones = TamaCuerpoXY * ((ColumnasPorLado - 2) / (ColumnasPorLado - 1))
	Alfa = (TamaCuerpoXY / Phi) * SIN(Pi / 4)
	Charlie = DiamColumAngulos
	Bravo = TamaCuerpoXY / 2 - Alfa / 2 - Charlie / 2
	AltoCharlie = AltoCuerpo
	AltoBravo = Alfa / 2
	RETURN


    Source: geocities.com/siliconvalley/way/4179

               ( geocities.com/siliconvalley/way)                   ( geocities.com/siliconvalley)