Página 4 de 6
Re: limitar espacio de escritura de caracteres
Publicado: 08 Mar 2019, 05:36
por derdhal77
javu61 escribió: ↑07 Mar 2019, 14:20
Yo os gano, usaba Cobol a finales de los 70 en un Mainframe Univac 1100, en terminales con un editor de textos muy espartano en los que contabas espacios para empezar a escribir, pero mejoraba usando tarjetas perforadas ya que podías establecer las paradas de tabulación. También hice cositas en Fortan y en ALGOL en aquella máquina. Luego pasé a los minis con Basic, variables con una letra o una letra y un número únicamente, había que ser muy ordenado para no perderse con las variables y era demasiado sencillo hacer código espagueti si no eras cuidadoso, y siempre contando el ahorro de cada bit pues la memoria era muy limitada, 64Kb para el sistema operativo, un puesto de trabajo en batch y dos terminales en demanda, con un disco de 5Mb en una máquina que costaba 25.000.000 de pesetas de hace 40 años, lo mejor es que funcionaba muy bien y trabajaba rápido, no como ahora que necesitas un procesador de la leche para escribir un hola mundo y que luego tarde 1 minuto entre que arranca, carga librería y cosas de esas.
Ostras, FORTRAN, yo también lo use cuando estudiaba también use lenguaje ensamblador, PASCAL y QBASIC... que tiempos aquellos, el trabajo de fin de curso de QBASIC fue un arkanoid y el de PASCAL fue el juego de cartas de la escoba
Re: limitar espacio de escritura de caracteres
Publicado: 08 Mar 2019, 22:30
por elfoscuro
derdhal77 escribió: ↑08 Mar 2019, 05:36
javu61 escribió: ↑07 Mar 2019, 14:20
Yo os gano, usaba Cobol a finales de los 70 en un Mainframe Univac 1100, en terminales con un editor de textos muy espartano en los que contabas espacios para empezar a escribir, pero mejoraba usando tarjetas perforadas ya que podías establecer las paradas de tabulación. También hice cositas en Fortan y en ALGOL en aquella máquina. Luego pasé a los minis con Basic, variables con una letra o una letra y un número únicamente, había que ser muy ordenado para no perderse con las variables y era demasiado sencillo hacer código espagueti si no eras cuidadoso, y siempre contando el ahorro de cada bit pues la memoria era muy limitada, 64Kb para el sistema operativo, un puesto de trabajo en batch y dos terminales en demanda, con un disco de 5Mb en una máquina que costaba 25.000.000 de pesetas de hace 40 años, lo mejor es que funcionaba muy bien y trabajaba rápido, no como ahora que necesitas un procesador de la leche para escribir un hola mundo y que luego tarde 1 minuto entre que arranca, carga librería y cosas de esas.
Ostras, FORTRAN, yo también lo use cuando estudiaba también use lenguaje ensamblador, PASCAL y QBASIC... que tiempos aquellos, el trabajo de fin de curso de QBASIC fue un arkanoid y el de PASCAL fue el juego de cartas de la escoba
Javu, es que tú ya está casi jubilado abuelete
Fortran no lo he tocado, la verdad. COBOL y Pascal era lo mio. Pascal siempre me encantó y luego Delphi también. Eso si... los objetos se me atragantaron al principio. Menudo cambio de visión fue aquello.
@Jordi, creo que tienes algún problema con los bucles. Debes estar intentando llegar más allá del final de la cadena de texto (LEN a$).
Un saludo.
Re: Motor de texto en basic.
Publicado: 09 Mar 2019, 17:00
por jordigahan
probablemente sea eso. como aumento el limite ?
Re: Motor de texto en basic.
Publicado: 10 Mar 2019, 03:21
por jordigahan
he encontrado este codigo que tambien parece hacer lo mismo, pero no se cmo hacerlo para que me respete los limites.
10 GOTO 1000
20 REM las rutinas que llames mucho van más rápido si las pones al principio
30 FOR I = 1 TO LEN(A$):PRINT A$(I);:PAUSE 10:NEXT I:PRINT:RETURN
1000 LET A$="ESTE MENSAJE APARECERA LETRA POR LETRA":GOSUB 30
1010 LET A$="ESTE MENSAJE TAMBIEN APARECERA LETRA POR LETRA":GOSUB 30
1020 LET A$="HOLA MAMAAAA":GOSUB 30
Re: Motor de texto en basic.
Publicado: 10 Mar 2019, 10:02
por elfoscuro
jordigahan escribió: ↑09 Mar 2019, 17:00
probablemente sea eso. como aumento el limite ?
No tienes que aumentar el límite, si no calcularlo bien. Supongo que con poner un "-1" en después del valor del TO en uno de los FOR, lo resolverás. Sin ver el código que tienes, no te puedo decir mucho más. Pero el problema es que si tu cadena tiene 10 caracteres, tu rutina piensa que tiene 11.
En cuanto al código que has puesto, si, imprime letra a letra, pero en toda la pantalla, y eso no es lo que quieres.
Un saludo.
Re: Motor de texto en basic.
Publicado: 10 Mar 2019, 21:00
por jordigahan
aqui te dejo el codigo:
Re: Motor de texto en basic.
Publicado: 10 Mar 2019, 22:48
por elfoscuro
Así, a bote pronto, la 1520 está mal. Estás asumiendo que al menos habrá 23 caracteres (si a=0, entonces quedaría FOR c=1 to 23, y si a$<23 entonces dará error).
Revisa esa parte. Ahí ya tienes un buen problema a resolver.
Un saludo.
Re: Motor de texto en basic.
Publicado: 12 Mar 2019, 00:37
por javu61
Este programa hace lo que quieres, no está muy optimizado pero funciona bien, y hace un pequeño efecto para borrar la zona de la pantalla donde se imprime si ocupa mas de lo que cabe en la zona definida para presentar el texto.
► Mostrar Spoiler
10 REM ***********************
20 REM * Impresion de textos *
30 REM ***********************
40 LET l1=3: REM primera linea
50 LET c1=5: REM primera columna
60 LET l2=7: REM ultima linea
70 LET c2=25: REM ultima columna
80 LET p1=0: REM Color del fondo
90 LET p2=1: REM color del reborde
100 LET p3=6: REM Color del texto
110 LET p4=3: REM color del interior
120 LET r$=" ": REM Caracter del border
130 REM esta es la cadena a imprimir
140 LET a$="Hola! soy Tessa, te recibo con gusto en la casa de Atreides, "
150 LET a$=a$+"donde moran los habitantes del circulo de Seldon en Trantor, "
160 LET a$=a$+"luz a luz, agua al agua, y para beber un buen vino."
170 GO SUB 240: REM Preparar pantalla
180 GO SUB 630: REM Impresion
190 REM IF INKEY$="" THEN GO TO 130
200 STOP
210 REM ***********************
220 REM ** imprime un reborde *
230 REM ***********************
240 PAPER p1: CLS : PAPER p2
250 FOR j=c1-1 TO c2+1
260 PRINT AT l1-1,j;r$
270 NEXT j
280 FOR j=l1 TO l2
290 PRINT AT j,c2+1;r$
300 NEXT j
310 FOR j=c2+1 TO c1-1 STEP -1
320 PRINT AT l2+1,j;r$
330 NEXT j
340 FOR j=l2 TO l1 STEP -1
350 PRINT AT j,c1-1;r$
360 NEXT j
370 RETURN
380 REM ***********************
390 REM ** limpiar *
400 REM ***********************
410 LET d=0
420 FOR j=c1+d TO c2-d
430 PRINT AT l1+d,j;r$
440 NEXT j
450 IF c1+d>c2-d THEN RETURN
460 FOR j=l1+1+d TO l2-d
470 PRINT AT j,c2-d;r$
480 NEXT j
490 IF l1+1+d>l2-d THEN RETURN
500 FOR j=c2-1-d TO c1+d STEP -1
510 PRINT AT l2-d,j;r$
520 NEXT j
530 IF c2-1-d<c1+d THEN RETURN
540 FOR j=l2-1-d TO l1+1+d STEP -1
550 PRINT AT j,c1+d;r$
560 NEXT j
570 IF l2-1-d<l1+1+d THEN RETURN
580 LET d=d+1
590 GO TO 420
600 REM ***********************
610 REM ** motor de impresion *
620 REM ***********************
630 PAPER p1: INK p3
640 LET l=l1: LET c=c1
650 LET m=0
660 FOR i=1 TO LEN a$
670 IF m=0 THEN GO SUB 750: LET m1=m
680 PRINT AT l,c;a$(i)
690 LET c=c+1
700 IF (c>c2) OR (i=m) THEN LET c=c1: LET l=l+1: GO SUB 750
710 IF l>l2 THEN LET l=l1: GO SUB 830: GO SUB 410
720 NEXT i
730 RETURN
740 REM ------------- Busco espacio
750 LET m=i+c2-c1+1
760 IF m>LEN a$ THEN LET m=LEN a$: RETURN
770 FOR b=m TO i STEP -1
780 IF a$(b)=" " THEN RETURN
790 LET m=m-1
800 NEXT b
810 RETURN
820 REM ------------- Esperar tecla
830 IF INKEY$="" THEN GO TO 830
840 RETURN
Re: Motor de texto en basic.
Publicado: 13 Mar 2019, 01:59
por jordigahan
gracias por el aporte javu, pero tu codigo es extremadamente largo !!!!
he encontrado estoq ue parece que hace lo mismo, solo faltaria añadir lo de que cambien de linea automaticamente si no cabe la palabra.
Re: Motor de texto en basic.
Publicado: 13 Mar 2019, 13:02
por javu61
Ese trozo comienza e imprimir donde esté el cursor, y cuando llega al final de la línea salta a la siguiente siempre, si llegas la final de la pantalla se produce un scrool y sigue imprimiendo.
La diferencia es que mi código imprime un recuadro donde ubicar el texto, y luego imrpime una cadena que se le pase en a$, en una zona de pantalla definida entre las líneas L1 y L2, y las columnas C1 y C2, imprime el texto letra a letra pero cuando llega a la última columna que le indiques y pasa a la siguiente línea, corta el texto por palabras completas y no parte palabras entre líneas. Cuando llena todas las líneas que le has dicho espera una tecla y luego borra la zona y sigue escribiendo desde el inicio de la zona indicada.
Puedo hacerlo mas sencillo si no imprime el reborde alrededor del texto, puedo simplificar el borrado, pero poco mas si quieres imprimir textos de longitud variable correctamente, te lo voy a simplificar al máximo en cuanto tenga un rato, pero le deberás pasar al menos 5 parámetros: L1, L2, C1, C2, a$ que son respectivamente la primera y última línea en que quieres que se imprima, la primera y última columna de la pantalla donde queires que se imprima, y el texto a imprimir.