miércoles, 20 de abril de 2011

Comandos TSO vol.1: Comandos del editor

El editor de TSO cuenta con una serie de comandos que nos ayudarán a escribir nuestro código.
En este volumen veremos los comandos básicos con algunos ejemplos.

Supongamos el siguiente trozo de texto en el editor:
000010 Texto A
000011 Texto B
000012 Texto C
000013 Texto D


El bloque de la izquierda (verde) nos indica el número de línea del texto.
El bloque de la derecha (amarillo) contiene el texto de cada línea.

Los comandos se teclearán sobre la columna de los números de línea.


INSERTAR / BORRAR / DUPLICAR LINEAS

Insertar líneas.
El comando para insertar líneas es la letra 'I'.

Si tecleamos una I sobre la columna de la línea 11:
000010 Texto A
I00011 Texto B
000012 Texto C
000013 Texto D


Insertaría 1 línea para poder escribir nuestro texto a continuación de nuestra línea 11.
000010 Texto A
000011 Texto B
'''''' En esta sección amarilla escribiremos nuestro texto
000012 Texto C
000013 Texto D


Al pulsar INTRO quedaría:
000010 Texto A
000011 Texto B
000012 En esta sección amarilla escribiremos nuestro texto
000013 Texto C
000014 Texto D


Si en el texto inicial tecleamos I3 sobre la columna de la línea 11:
000010 Texto A
I30011 Texto B
000012 Texto C
000013 Texto D


Insertaría 3 líneas para poder escribir nuestro texto a continuación de la línea 11.
000010 Texto A
000011 Texto B
''''''
''''''
''''''
000012 Texto C
000013 Texto D



Borrar líneas.
El comando para borrar líneas es la letra 'D'.

Si tecleamos una D sobre la columna de la línea 11:
000010 Texto A
D00011 Texto B
000012 Texto C
000013 Texto D


Borraría la línea 11.
000010 Texto A
000012 Texto C
000013 Texto D


Si tecleamos D2 sobre la columna de la línea 11:
000010 Texto A
D20011 Texto B
000012 Texto C
000013 Texto D


Borraría 2 líneas a partir de la linea 11 incluída.
000010 Texto A
000013 Texto D


Borrar bloques de líneas.
El comando para borrar bloques de líneas es 'DD ... DD'.

Si tecleamos una DD ... DD sobre la columna de las líneas 11 y 12:
000010 Texto A
DD0011 Texto B
DD0012 Texto C
000013 Texto D


Borraría las líneas que haya enter el primer DD y el último (incluídas las líneas sobre las que hayamos escrito el DD).
000010 Texto A
000013 Texto D



Replicar líneas.
El comando para replicar líneas es la 'R'.

Si tecleamos una R sobre la columna de la línea 11:
000010 Texto A
R00011 Texto B
000012 Texto C
000013 Texto D


Replicaría la línea 11.
000010 Texto A
000011 Texto B
000012 Texto B
000013 Texto C
000014 Texto D


Si tecleamos R2 sobre la columna de la línea 11:
000010 Texto A
R20011 Texto B
000012 Texto C
000013 Texto D


Replicaría la línea 11 dos veces.
000010 Texto A
000011 Texto B
000012 Texto B
000013 Texto B
000014 Texto C
000015 Texto D


Replicar bloques de líneas.
El comando para replicar bloques de líneas es 'RR ... RR'.

Si tecleamos una RR ... RR sobre la columna de las líneas 11 y 12:
000010 Texto A
RR0011 Texto B
RR0012 Texto C
000013 Texto D


Replicaría las líneas que hay entre el primer RR y el último (ambas incluídas).
000010 Texto A
000011 Texto B
000012 Texto C
000013 Texto B
000014 Texto C
000015 Texto D



MOVER / COPIAR LINEAS

Para mover y/o copiar líneas entran dos comandos en juego: el que selecciona la línea a copiar / mover y el que nos indica el lugar donde se va a copiar o mover.
Para la primera parte tenemos comandos C->copiar línea y M->mover línea.
Para la segunda parte tenemos comandos A->después de, B->antes de y O->sobre.

Dado el siguiente código en nuestro editor:
000010 Texto A
000011 Texto B
000012 Texto C
000013 Texto D


Copiar líneas
Si queremos copiar la línea de texto "Texto B" entre las líneas de texto "Texto C" y "Texto D" podríamos hacer:
000010 Texto A
C00011 Texto B
000012 Texto C
B00013 Texto D


O bien
000010 Texto A
C00011 Texto B
A00012 Texto C
000013 Texto D


En el primer caso nos indica que vamos a copiar la línea antes de la línea de texto "Texto D". En el segundo caso vamos a copiar la línea después de la línea de texto "Texto C". En ambos casos el resultado sería:
000010 Texto A
000011 Texto B
000012 Texto C
000013 Texto B
000014 Texto D


Mover líneas
Si en vez de copiar la línea, la quisiésemos mover podríamos hacer:
000010 Texto A
M00011 Texto B
000012 Texto C
B00013 Texto D


O bien
000010 Texto A
M00011 Texto B
A00012 Texto C
000013 Texto D


En ambos casos el resultado sería:
000010 Texto A
000011 Texto C
000012 Texto B
000013 Texto D


Si quisiésemos copiar una linea varias veces podríamos hacer:
000010 Texto A
C00011 Texto B
000012 Texto C
B20013 Texto D


O bien
000010 Texto A
C00011 Texto B
A20012 Texto C
000013 Texto D


El resultado sería:
000010 Texto A
000011 Texto B
000012 Texto C
000013 Texto B
000014 Texto B
000015 Texto D



Mover / Copiar bloques de líneas
Para copiar bloques usaremos el comando CC ... CC. Y para mover bloques MM ... MM.
En ambos casos siguen siendo válidos (y necesarios) los comandos A (después de) y B (antes de).

Copiar un bloque.
CC0010 Texto A
CC0011 Texto B
000012 Texto C
B00013 Texto D


Nos daría el siguiente resultado:
000010 Texto A
000011 Texto B
000014 Texto C
000012 Texto A
000013 Texto B
000015 Texto D


Mover un bloque.
MM0010 Texto A
MM0011 Texto B
000012 Texto C
A00013 Texto D


Nos daría el siguiente resultado:
000010 Texto C
000011 Texto D
000012 Texto A
000013 Texto B


Mover / Copiar líneas sobre ...
Hemos dejado para el final el comando O, por tener un comportamiento distinto a los comandos A y B.

Veamos funcionar este comando en un ejemplo.
000010 Texto A
C00011 Texto B1
O00012 Texto C
000013 Texto D


Nos daría el siguiente resultado:
000010 Texto A
000011 Texto B1
000012 Texto C1
000013 Texto D


Del mismo modo si tuviésemos:
000010 Texto A
M00011 Texto B1
O00012 Texto C
000013 Texto D


Nos daría el siguiente resultado:
000010 Texto A
000011 Texto C1
000012 Texto D


NOTA: Como se puede observar, este último comando actúa sobre aquellas posiciones que están informadas a blancos. Sobre las que están informadas no hace nada.
Así la letra C (de la línea de destino) permanece, y le añade un 1 cuyo origen está en la linea inicial.

Al igual que A y B, el comando O admite On, donde n es un número.
Si tuviésemos:
C00010 Texto A1
O30011 Texto B
000012 Texto C
000013 Texto D


Nos daría el siguiente resultado:
00010 Texto A1
000011 Texto B1
000012 Texto C1
000013 Texto D1


También adimite bloques. Por ejemplo si tuviésemos:
M000010 Texto A1
OO0011 Texto B
000012 Texto C
OO0013 Texto D


Nos daría el siguiente resultado:
000010 Texto B1
000011 Texto C1
000012 Texto D1


Esto es aplicable también al comando de copiar ('C') y también a copiar y mover con bloques ('CC...CC' y 'MM...MM').


DESPLAZAR TEXTO SOBRE UNA LINEA

Los comandos para manipular la posición del texto en una línea son '(' y '<' para desplazamiento a la izquierda, ')' y '> para desplazamiento a la derecha.
Pero veamos cada unos de los comandos en detalle con ejemplos:

Dado el siguiente código en nuestro editor:
000010 Texto A
000011 Texto B
000012 Texto C
000013 Texto D


Si tuviésemos la siguiente situación:
000010 Texto A
(00011   Texto B
000012 Texto C
000013 Texto D


Desplazaría el texto de la línea 2 posiciones a la izquierda.
000010 Texto A
000011 Texto B
000012 Texto C
000013 Texto D


Análogo resultado tendremos con el siguiente ejemplo:
000010 Texto A
<00011   Texto B
000012 Texto C
000013 Texto D


Sin embargo estos comandos tienen diferencias. Veamos el siguiente ejemplo:
<00010   Texto A
(00011   Texto B
<00012 Texto C
(00013 Texto D
<00014   Texto  E
(00015   Texto  F


El resultado sería:
000010 Texto A
000011 Texto B
==ERR> Texto C
000013 xto D
000014 Texto  E
000015 Texto F


¿Qué ha sucedido?
El comando ( elimina dos posiciones de texto desde la posición 1.
El comando < elimina dos espacios desde la posición 1.
He ahí que la línea 000012 al intentar desplazar el texto con el comando < nos haya dado un error (las dos primeras posiciones son distintas de espacio).

Otra diferencia entre ambos comandos la vemos en las líneas 000014 y 000015
El comando ( elimina dos posiciones de texto desplazando toda la línea.
El comando < elimina dos espacios desplazando sólo el primer trozo de texto que esté separado por más de dos espacios.

Un compartamiento análogo ocurriría entre > y ). Veámoslo en un ejemplo:

Supongamos que estamos editando un fichero de 13 posiciones.
=COLS> ----+----1---
>00010       Texto A
)00011       Texto B
>00012 Texto C
)00013 Texto D
>00014   Texto  E
>00015   Texto   G
)00016   Texto  F


El resultado sería:
=COLS> ----+----1---
==ERR>       Texto A
000011         Texto
000012   Texto C
000013   Texto D
000014     Texto E
000015     Texto G
000015     Texto  F


Vemos que el comportamiento es el esperado, pero en sentido contrario. En vez de a la izquierda a la derecha.
El único compartamiento que nos puede sorprender es el de la línea 000014. En este caso lo que ha ocurrido con el comando >, al tratar de desplazar el primer trozo de texto que esté separado por más de dos espacios, es que el primer trozo de texto es "Texto" pues el resto de la línea ("E") estaba separado de "Texto" dos espacios. Al desplazar un espacio "Texto", ese primer trozo ha dejado de ser "Texto" para ser "Texto E". Y por tanto al desplazar el segundo espacio ha desplazado "Texto E".

Además cada uno de estos comandos pueden ser seguidos de un número < n ó (n ó >n ó )n donde n es un número.
También es válido para bloques: << ... << n ó (( ... ((n ó >> ... >>n ó )) ... ))n donde n es un número (si no viene especificado por defecto es 2).

Veámoslo en un ejemplo:
=COLS> ----+----1----+----2
))0010      Texto  A
000011      Texto  B
))5012      Texto  C
<<0013      Texto  D
<<3014      Texto  E
000015      Texto  G
000016      Texto  F


Veamos el resultado:
=COLS> ----+----1----+----2
000010           Texto  A
000011           Texto  B
000012           Texto  C
000013   Texto     D
000014   Texto     E
000015      Texto  G
000016      Texto  F

11 comentarios:

Anónimo dijo...

Me gustaría que también contarais algo sobre el tratamiento de columnas
(bnds).

Por lo demás, estupendo este sitio.

Saludos.

Tallian dijo...

Siii, eso saldrá en el vol.2 : )
Gracias!

pepegan dijo...

Hola ... ya se ha publicado el articulo sobre el BNDS
Espero que sea lo que estas buscado

Gracias!!!

Anónimo dijo...

Muy buen sitio para consultas, documentación y explicación sencilla y con ejemplos.
Magnifico.

Tallian dijo...

Muchas gracias!!

Jose Luis dijo...

Excelente!

Anónimo dijo...

Está genial...muy clarito para una principiante como yo..muchisimas gracias!!

Alan Flores dijo...

excelente, me agrado, un repaso bueno

YACK dijo...

Podriais decirme como conseguir el editor TSO.

ceci dijo...

Hola! gracias esto me fue muy util :) saben si hay alguna manera de comentar muchas lineas sin tener que hacerlo una por una?

Analista COBOL dijo...

excelente