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$ = "": 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