                           C B L U T I L


      Questa routine puo' essere chiamata da un programma Cobol o Assembler
ed ha lo scopo di fornire alcuni servizi di elaborazione di stringa,
che normalmente non sono disponibili in questi linguaggi.


  Uso in cobol:

    CALL 'CBLUTIL' USING COMANDO LEN1 STRINGA1 [LEN2 STRINGA2 [POSIZ]]

  Alcuni comandi richiedono solo tre parametri (ossia richiedono solo le
  variabili COMANDO, LEN1 e STRINGA1), altri cinque o sei.
  Il significato dei parametri e' il seguente:

    COMANDO : azione da intraprendere (puo' essere abbreviato fino a
              tre caratteri)
    LEN1    : lunghezza della STRINGA1 seguente; per alcuni comandi
              in questa variabile viene anche restituito un  valore
              richiesto ( o un eventuale codice di errore); e' espressa
              come fullword binaria
    STRINGA2: stringa di caratteri da elaborare
    LEN2    : lunghezza della STRINGA2 seguente, espressa come fullword
    STRINGA2: stringa di caratteri da elaborare
    POSIZ   : posizione, richiesta dai comandi POS, OVERLAY, SUBSTR,
              DELSTR, INSERT e WINDEX; e' una fullword binaria.

          COMANDO    PIC     X(8).
          LEN1       PIC    S9(7)   COMP.
          STRINGA1   PIC     X(nnn).
          LEN2       PIC    S9(7)   COMP.
          STRINGA2   PIC     X(nnn).
          POSIZIONE  PIC    S9(7)   COMP.

  A seconda del tipo di comando, le variabili STRINGA1 o STRINGA2 possono
  essere in input e / o in output.
  La lunghezza massima delle stringhe e' 256 caratteri.

  Comandi disponibili:
  con una stringa sola: (tre parametri)

      ADDR    : restituisce in LEN1 l'indirizzo della var. STRINGA1
      CENTRE/CENTER: centra la scritta in mezzo alla stringa
      REVERSE : capovolge la stringa
      RIGHT   : allinea a destra la scritta togliendo i blank
      LEFT    : allinea a sinistra la scritta togliendo i blank
      UPPER   : traduce in maiuscolo la stringa
      LOWER   : traduce in minuscolo la stringa
      LENGTH  : da in LEN1 la lunghezza della stringa, ossia l'ultimo
                carattere dopo il quale sono tutti blank
      E2A     : converte da EBCDIC ad ASCII
      A2E     : converte da ASCII  ad EBCDIC
      WORDS   : da in LEN1 il numero di parole (delimitate da blank)
                di cui e' composta la stringa

  Qui la variabile STRINGA1 e' sia in input che in output (a parte i
  comandi ADDR, LENGTH e WORD, in cui l'output e' soltanto LEN1)


  Con due stringhe: (cinque parametri)

      OR      : viene fatto l'OR  logico bit per bit tra le due
                stringhe e il risultato e' in STRINGA1;
                in LEN1 viene restituita la lunghezza risultante,
                pari alla piu' piccola delle due lunghezze
      AND     : viene fatto l'AND logico bit per bit tra le due
                stringhe e il risultato e' in STRINGA1;
                in LEN1 viene restituita la lunghezza risultante
      XOR     : viene fatto l'XOR logico bit per bit tra le due
                stringhe e il risultato e' in STRINGA1;
                in LEN1 viene restituita la lunghezza risultante
      SQUEEZE : toglie da STRINGA1 tutti i caratteri presenti in
                STRINGA2 (con spostamento a sinistra)
      C2X     : converte la STRINGA1 in esadecimale mettendo il
                risultato in STRINGA2
      X2C     : converte la STRINGA1 da esadecimale in carattere
                mettendo il risultato in STRINGA2


  Con due stringhe e sei parametri:

      POS     : cerca la prima occorrenza di STRINGA1 in STRINGA2
                a partire da 'POSIZ' (che normalmente e' 1) e
                restituisce la posizione in POSIZ (0 se non trovata)
      SUBSTR  : estrae da STRINGA2 la sottostringa a partire da 'POSIZ'
                lunga 'LEN1' e la mette in STRINGA1
      DELSTR  : cancella da STRINGA2 la sottostringa a partire da
                'POSIZ' lunga 'LEN1'
      INSERT  : inserisce in STRINGA2 la sottostringa STRINGA1 a
                partire da 'POSIZ' spostando a destra di LEN1 posti
                i rimanenti caratteri (perdendo quelli piu' a destra)
      OVERLAY : sovrappone in STRINGA2 la sottostringa STRINGA1 a
                partire da 'POSIZ' rimpiazzando i 'LEN1' caratteri
                preesistenti
      WINDEX  : restituisce in STRINGA1 la n-esima parola in STRINGA2,
                con n specificato in 'POSIZ'; in LEN1 c'e' la lunghezza
                della stringa restituita






