DEFLNG W
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 the columns of a cloister in the CBB format."
PRINT
PRINT " Copyright Jean-Luc Ancey, February 21st, 1997.": PRINT
PRINT " Strike a key when ready."
GOSUB EsperaTecla
RETURN
CabezaTipo:
LineaEscrita$ = "<" + Tipo$ + ">": GOSUB GrabaUnaLinea
RETURN
CierraArchivo:
wByteEscrito = wByteEscrito + 1
LSET e$ = CHR$(26)
PUT #2, wByteEscrito
CLOSE
RETURN
ColaTipo:
LineaEscrita$ = "" + Tipo$ + ">": GOSUB GrabaUnaLinea
RETURN
ColumnaAngulo:
Tipo$ = "cilindros": GOSUB CabezaTipo
x = 0
y = 0
z = Mike
Posicion$ = "so"
TamaX = Hotel: TamaY = Hotel: TamaZ = Bravo
Exclusion$ = "inf,sup"
NumPuntosXY = 5
GOSUB GrabaVolumen
GOSUB ColaTipo
RETURN
Columnas:
z = Mike
Tipo$ = "conos": GOSUB CabezaTipo
FOR GrupoDeCol = 1 TO Lima
IF (GrupoDeCol - 1) <> (Lima - 1) / 2 THEN
y = Hotel + Kilo / 3 + (GrupoDeCol - 1) * Kilo
x = Delta / 2: GOSUB GrabaConoColumna
x = Delta * 3 / 2: GOSUB GrabaConoColumna
END IF
NEXT GrupoDeCol
GOSUB ColaTipo
z = Mike
Tipo$ = "cilindros": GOSUB CabezaTipo
FOR GrupoDeCol = 1 TO Lima
IF (GrupoDeCol - 1) <> (Lima - 1) / 2 THEN
y = Hotel + Kilo / 3 + (GrupoDeCol - 1) * Kilo
x = Delta / 2: GOSUB GrabaCilindroColumna
x = Delta * 3 / 2: GOSUB GrabaCilindroColumna
END IF
NEXT GrupoDeCol
GOSUB ColaTipo
z = Mike + Bravo - Golf
Tipo$ = "esferas": GOSUB CabezaTipo
FOR GrupoDeCol = 1 TO Lima
IF (GrupoDeCol - 1) <> (Lima - 1) / 2 THEN
y = Hotel + Kilo / 3 + (GrupoDeCol - 1) * Kilo
x = Delta / 2: GOSUB GrabaEsferaColumna
x = Delta * 3 / 2: GOSUB GrabaEsferaColumna
END IF
NEXT GrupoDeCol
GOSUB ColaTipo
z = Oscar - Golf - November
Tipo$ = "cubos": GOSUB CabezaTipo
FOR GrupoDeCol = 1 TO Lima
IF (GrupoDeCol - 1) <> (Lima - 1) / 2 THEN
y = Hotel + Kilo / 3 + (GrupoDeCol - 1) * Kilo
x = Delta / 2: GOSUB GrabaCuboColumna
x = Delta * 3 / 2: GOSUB GrabaCuboColumna
END IF
NEXT GrupoDeCol
GOSUB ColaTipo
RETURN
EsperaTecla:
Tecla$ = ""
WHILE Tecla$ = ""
Tecla$ = INKEY$
WEND
RETURN
GrabaCilindroColumna:
Posicion$ = "c"
TamaX = Alfa: TamaY = Alfa: TamaZ = Bravo
Exclusion$ = "inf,sup"
NumPuntosXY = 5
GOSUB GrabaVolumen
RETURN
GrabaConoColumna:
Posicion$ = "c"
TamaX = Delta: TamaY = Delta: TamaZ = Echo
Exclusion$ = "inf"
NumPuntosXY = 5
GOSUB GrabaVolumen
RETURN
GrabaCuboColumna:
Posicion$ = "c"
TamaX = Charlie: TamaY = Charlie: TamaZ = Golf
Exclusion$ = "sup"
GOSUB GrabaVolumen
RETURN
GrabaEsferaColumna:
Posicion$ = "cgrav"
TamaX = Charlie: TamaY = Charlie: TamaZ = Foxtrot * 2
Exclusion$ = "sup"
NumPuntosXY = 5
NumPuntosZ = 5
GOSUB GrabaVolumen
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
GrabaVolumen:
LineaEscrita$ = "Posi "
Valor = x: GOSUB TradValorCadena
LineaEscrita$ = LineaEscrita$ + Cadena$
Valor = y: GOSUB TradValorCadena
LineaEscrita$ = LineaEscrita$ + "," + Cadena$
Valor = z: GOSUB TradValorCadena
LineaEscrita$ = LineaEscrita$ + "," + Cadena$
IF Posicion$ <> "" THEN
LineaEscrita$ = LineaEscrita$ + "," + Posicion$
END IF
LineaEscrita$ = LineaEscrita$ + " 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
IF Tipo$ <> "cubos" THEN
Valor = NumPuntosXY: GOSUB TradValorCadena
LineaEscrita$ = LineaEscrita$ + " Punt " + Cadena$
IF Tipo$ = "esferas" THEN
Valor = NumPuntosZ: GOSUB TradValorCadena
LineaEscrita$ = LineaEscrita$ + "," + Cadena$
END IF
END IF
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
Mike:
Tipo$ = "cubos": GOSUB CabezaTipo
x = 0: y = 0: z = 0
Posicion$ = "so"
TamaX = Hotel: TamaY = Juliet: TamaZ = Mike
Exclusion$ = ""
GOSUB GrabaVolumen
y = India - Hotel
Posicion$ = "no"
TamaY = Juliet - Hotel
Exclusion$ = "n"
GOSUB GrabaVolumen
GOSUB ColaTipo
RETURN
November:
Tipo$ = "cubos": GOSUB CabezaTipo
x = 0: y = 0: z = Oscar - November
Posicion$ = "so"
TamaX = Hotel: TamaY = Juliet: TamaZ = November
Exclusion$ = ""
GOSUB GrabaVolumen
y = India - Hotel
Posicion$ = "no"
TamaY = Juliet - Hotel
Exclusion$ = "n"
GOSUB GrabaVolumen
GOSUB ColaTipo
RETURN
Principal:
CLS
wByteEscrito = 0: wByteLeido = 0
GOSUB Variables
GOSUB Principal2
LineaEscrita$ = "": GOSUB GrabaUnaLinea
LineaEscrita$ = "Rotz -90": GOSUB GrabaUnaLinea
Valor = India: GOSUB TradValorCadena
LineaEscrita$ = "Posi 0," + Cadena$ + ",0": GOSUB GrabaUnaLinea
LineaEscrita$ = "": GOSUB GrabaUnaLinea
GOSUB Principal2
LineaEscrita$ = "": GOSUB GrabaUnaLinea
LineaEscrita$ = "Fin": GOSUB GrabaUnaLinea
LineaEscrita$ = "": GOSUB GrabaUnaLinea
LineaEscrita$ = "": GOSUB GrabaUnaLinea
LineaEscrita$ = "Rotz -180": GOSUB GrabaUnaLinea
Valor = India: GOSUB TradValorCadena
LineaEscrita$ = "Posi " + Cadena$ + "," + Cadena$ + ",0": GOSUB GrabaUnaLinea
LineaEscrita$ = "": GOSUB GrabaUnaLinea
GOSUB Principal2
LineaEscrita$ = "": GOSUB GrabaUnaLinea
LineaEscrita$ = "Fin": GOSUB GrabaUnaLinea
LineaEscrita$ = "": GOSUB GrabaUnaLinea
LineaEscrita$ = "": GOSUB GrabaUnaLinea
LineaEscrita$ = "Rotz 90": GOSUB GrabaUnaLinea
Valor = India: GOSUB TradValorCadena
LineaEscrita$ = "Posi " + Cadena$ + ",0,0": GOSUB GrabaUnaLinea
LineaEscrita$ = "": GOSUB GrabaUnaLinea
GOSUB Principal2
LineaEscrita$ = "": GOSUB GrabaUnaLinea
LineaEscrita$ = "Fin": GOSUB GrabaUnaLinea
LineaEscrita$ = "": GOSUB GrabaUnaLinea
RETURN
Principal2:
GOSUB Mike
GOSUB Columnas
GOSUB ColumnaAngulo
GOSUB November
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:
Lima = 7: 'Tiene que ser impar
Hotel = .6
Kilo = 2
Mike = .9
November = .3
Oscar = 2.5
Bravo = Oscar - Mike - November
Delta = Hotel / 2
Charlie = Delta
Foxtrot = Charlie * 2 / 6
Golf = Charlie / 6
Echo = Delta * 9 / 6
Alfa = Delta * 4 / 6
India = (Lima - 1) * Kilo + 2 * (Kilo / 3) + 2 * Hotel
Juliet = ((Lima - 3) / 2) * Kilo + 2 * (Kilo / 3) + Hotel
RETURN