Versione Italiana    English Version
_______________
Cobol
. Html
. Debug
. Note
. Db2 10.1
. Oracle 26ai
. PostgreSql
. Video
. Job S. & M.

 
Javascript
. Calendar
.. overview
.. functions
 
Vue
. overview

AngularJS
. overview

React
. overview

 
. Tips

. Contact us  
 
Future is here
"All your dream projects can become reality"

Perché non guardare i costi ed aumentare l’efficienza
(Il Business Services e Web Service realizzati in Cobol)
 

Volete entrare nel ventunesimo secolo ed abbandonare il client-server, eliminare le decine di app per sistema operativo e versione, togliere uno zero al numero dei collaboratori, aumentare la sicurezza ed il surplus, qui trovate la risposta senza andare in paesi depressi (oppure cedi le armi a Zapier, Make, n8n, Airtable, ..).

Tutti i prodotti realizzati con Cobol e Html sono utilizzabili su qualsiasi elettrodomestico dotato di browser, da decenni funzionano su smartphone, sulla tv, sul frigorifero, senza nessun "driver", senza gli aggiornamenti quotidiani.

La quasi totalità della formazione finge di non conoscere il mondo del lavoro e propone linguaggi ed ambienti a misura di studente, con favole: questo nuovo linguaggio migliora ed ottimizza il vecchio con la perdita di performance del solo 10, 15%, o propone linguaggi obsoleti.

Il Cobol una delle poche genialità linguistiche, il linguaggio con più cavilli e vincoli di qualsivoglia concorrenti (un rapporto da 10 a 1), viene percepito come il più semplice con poche istruzioni.

Perché proporlo, è perfetto per i computer quantici ed il web, tutta la logica è centralizzata e come front-end può utilizzare uno qualsiasi tra, Svelte, Vue, Angular, React, ... dove ognuno deve svolgere al meglio la singola funzionalità, non avere logica di navigazione ne accesso ai dati ma essere completamente pilotati.

Riassumendo, la grafica (front-end) è separata della gestione, le pagine sono separate dai programmi, sono a se stanti, possono essere completamente variate, punto fondamentale da rimarcare, le pagine sono pilotate, tutto è deciso nei programmi. Le pagine sono la proiezione e non vincolano la navigazione. Mediamente nei progetti gestionali l'interfaccia utente (UI, User Interface) non arriva alle due cifre e non deve vincolare a tortuosi artifici di mobilità e gestione dei dati, un frame del filmato.

Avete una interfaccia HTML?
Una piccola utility una tantum vi propone le copy da integrare nel sorgente, due moduli generalizzati, che vedremo più avanti completeranno il dialogo.

Avete una interfaccia a caratteri "3270"?
Per trasformarla in Html, basta un click, più di un quarto di secolo di esperienza, tempi di riposta e manutenzione nell'ordine di una piccola frazione nel confronto con altre soluzioni.

Confronti:
Oggi i linguaggi di moda sono OOP, vecchi di tre decenni pensati per CPU, in arretrato di tre generazioni, nel frattempo siamo passati alle GPU ed utilizziamo le NPU, dove riempiono le lavagne ed hanno delle significative caratteristiche, non riducono:
(1) i tempi di sviluppo
(2) i tempi di calcolo
(3) i tempi di manutenzione
(4) i tempo di ingegneria del software.
La programmazione OOP è perfetta per tematiche semplici, scolastiche, il punto due riassume, ma, Voi avete mai visto un giocoliere o un lanciatore di coltelli che si trova variati i suoi oggetti. Un esempio di OOP: se non hai la versione 17 non parte il Developer (versione -3), ne segue il punto:
(5) si è diventati "versione dipendenti".
(6) Costretti ad utilizzare svariati prodotti di gestione delle cache, razzolare nell'analisi dei log, debug off-line, decine e decine di librerie che nessuno conosce il contenuto, ... eccetera.

Riflessioni,
Sicuramente è bello avere oggetti a fisarmonica con decine di attributi ed usarne solo alcuni, ordinati a piacere ma non è senza controindicazioni. Cosa cambia tra una Copy ed una Classe ... tra una Call ed un Package? Sicuramente cambia alla chiusura della Call ed aspettare il ritorno di un messaggio, il return-code di ogni istruzione e la gestione delle eccezioni, le pagine html gestite dal grafico e la matassa inguardabile ed ingestibile negli altri casi.

 
 
 

Debug essenziale (il cobol controlla il cobol) e Debug Z/Os

<

Il valore aggiunto che vi offriamo senza ulteriore tools o aggravi:
Debug essenziale, realizzato con solo Cobol - "free".

Per le funzioni web http bisogna attivare online il punto di partenza, (cambiando url da .../COBWEB.cgi?1?.. a .../COBWEB.cgi?3?..) da un terminale remoto si può innescare il debug, come nelle immagini sopra riportate. Il dizionario dati, utilizzato per vedere o modificare il contenuto dei dati è realizzato in rexx, analizzando i sorgenti le copy e le include.
In alternativa per ambiente Cics-TS con Html si può utilizzare il debug Ibm, prodotto completo e sofisticato, intercetta le transazioni web in debug, dando la massima operatività ed in qualsiasi momento rilascia il controllo all’utente.

La qualità del prodotto è direttamente proporzionale alla qualità del debug, alla modalità e tempestività d'intervento.

Comandi Attivi:
BOTTOM ⇒ si posizione in coda al listato del programma
CLEAR ⇒ cancella la "variabile + valore" messo in evidenza con MONITOR
FIND/F + "valore" ⇒ ricerca nel programma la scritta
HELP ⇒ riassume i comandi e funzioni attive
MONITOR ⇒ tiene in evidenza il contenuto della "variabile + valore", nel caso di una struttura mostra le enne righe dei singoli campi
MOVE "valore"/variabile1 TO variabile2 ⇒ imposta il contenuto ("valore") della variabile2
TOP ⇒ si posiziona all'inizio del listato del programma

Funzioni Attive:
f1 ⇒ elenca le funzioni attive
f2 ⇒ avanza di uno step
f3 ⇒ chiude il debug
f4 + il cursore sul campo ⇒ visualizza il contenuto
f5 + scritta in "command line" ⇒ ricerca nel listing
f6 + cursore in "prefix line" ⇒ attiva il breakpoint o lo toglie se ripremuto
f7 ⇒ si sposta di una pagina all'indietro
f8 ⇒ si sposta in avanza di una pagina
f9 ⇒ avanza fino allo "stop run" o al prossimo breakpoint
f11 + il cursore sul campo ⇒ visualizza il contenuto del livello 01
f12 ⇒ retrieve dei comandi eseguiti

 

Note e Struttura

All'inizio degli anni 70 J.D. Warnier pubblicava: definito l'input e l'output il programma è automaticamente definito. Negli anno 90 una seconda ondata statunitense definì la "The Mythical Man-Month", metrica con i fattori per linguaggio e metodologie. Il nulla ha preso consistenza, se non hai, se non usi il framework, se non usi un accrocchio per scrivere un html, se non produci un software su librerie fluttuanti sei antiquato (Mhmm, un palazzo senza fondamenta).

Il Cobol
ripensato e riorganizzato come qualsiasi progetto hardware, non pensate alla fantasia di un romanziere o alla ragnatele di un D.B. relazionale, dobbiamo vedere il software come un chip fluido, multistrato e multi aree comunicanti, semplificando come enne scacchiere, dove gli elementi sono solo due, (1) le Routine (oggetti) ed (2) i Programmi. I Programmi hanno una sola struttura principale chiusa, chi assembla riempie ogni singola area con le funzioni di quell'area, per esempio:

  • richiamo routine lettura pagina
  • ricezione dati dalla pagina e riempio area D.B.
  • richiamo routines di calcolo
  • componi stringa variabili per la pagina
  • compone permessi dei singoli campi
  • pagina successiva
  • primo accesso
  • accesso al D.B. per lettura singola
  • ecc. ecc.

Le aree non richieste rimangono vuote, gli interventi di variazione e manutenzione sono di immediata individuazione. Le Routines svolgono una funzione specifica per esempio: la routine "merge parser", della stringa variabili alle pagine.

La filosofia gestionale è nata in ambiente Z/Os, pensata per essere trasportata e scalata fino ad un portatile. Il lato utente necessita del solo browser, per i nostalgici neanderthaliani (o per giusta causa) di una stampante.

Come ambiente di sviluppo, presentiamo la versione Linux, dove si hanno meno vincoli e di maggiore interesse. Si consideri che in tutti i casi l’interfaccia utente non è sviluppata in ambiente Mainframe per motivi di semplicità e facilità dei test.

Due oggetti fondamentali per il dialogo tra la pagina ed i programmi sono:
(A) il parser dei campi variabili con la pagina ed invio pagina al browser (le pagine html sono dei files distinti dai programmi),
(B) la ricezione della pagina al programma (passaggio dalla stringa alle singole variabili) equivalente per tutti gli ambienti.

Due semplici programmi in Cobol Linux (veda il paragrafo Tips) e due funzioni del Cics-TS con Html nel caso di Mainframe.

Json e Xml
Dovete creare files Xml o Json, semplicissimo, con le istruzioni: JSON GENERATE e XML GENERATE trasformano la copy in struttura in un batter di ciglia.

Cobol o "C"
Abbiamo sempre parlato di Cobol ma usando GnuCobol dovremmo parlare di "C" (Gcc) vista la conversione automatica prima della compila, con il vantaggio dato dalla struttura del Cobol i problemi di sicurezza e gestione errata della memoria non possono esistere, sfatando una letteratura negativa di utilizzo del "C".

Cobol e Java
Ovviamente i due linguaggi non sono mutuamente esclusivi, la soluzione dove il Cobol utilizza Java è la condizione ottimale, si sfruttano al meglio la potenzialità di entrambi, versione di Cobol tipo isCobol o Micro Focus danno una ricca documentazione.
Riflessione; ma neanche Oracle riesce a tenere il passo con le versioni di Java, (esempio SqlDeveloper) forse nella vostra immensa saggezza non vi sentite nel cinodromo.

Cosa dobbiamo installare:

  • un Cobol (GnuCobol o ...)
  • un framework (Komodo, Ibm.Openeditor, Opencobolide, VSCodium, V.S.C. Aibber.base, ecc.)
  • per il substrato base (Aibber.base per compile, gestione folder, ecc.) di gestione servono: Regina (rexx), The (Hessling editor con xclip (X11) e wl-clipboard (Wayland)), Perl
  • un web serser http (Apache2 o ...)
  • un database (Db2, Oracle, PostgreSql e ...) ovviamente se il gestionale lo richiede

Post Scriptum:
Un vincolo eccessivo è dato dalla gestione dei files sequenziali senza caratteristiche provenienti da altri ambienti, in certi casi torna utile renderli "line sequential" con l'utility in perl aibbercopy.pl in calce.


Utility (aibbercopy.pl):
#!/usr/bin/perl -w
# ----------------------------------------------------- #
# -  Split file                   (Aibber)            - #
# ----------------------------------------------------- #
# - - - -
# example:
# perl ./aibbercopy.pl 143 ./temp cl040.txt cl040.sql
# parms: length folder file-binary "file-binary + \n"
# - - - -
# $Args = $#ARGV + 1;
  $lrecl  =$ARGV[0];
  $dirmain=$ARGV[1];
  $filein =$ARGV[2];
  $fileout=$ARGV[3];
  my($buf)="";
 # - - Open
     $filename = "$dirmain/$filein";
     open(FILEIN, "<$filename")
               or die goto FINE_MAIN_ERROR;
     open(FILEOUT, ">$dirmain/$fileout")
              or die "can't redirect FILEOUT";
     select(FILEOUT); $| = 1;     # make unbuffered
 #
 #-----Loop (1) Lettura per Split--------------#
 #
     $loop  = 1;
     $linee = 0;
     while ($loop > 0) {
         $bytes = read( FILEIN, $buf, $lrecl);
         if ( $bytes < 1) {
            $loop -= 1;
         } else {
     #---scrive il file di output---------------#
         print FILEOUT "$buf\n";
         $linee += 1;
         }        #--- end else
     };          #--- end while (loop)
 # - - Loop (1) Fine
   # - - Close files
     close(FILEIN);
     close(FILEOUT);
  $word = sprintf "%d", $linee;
  $line_out = "Ok file::$filename Linee=$word";
goto FINE_MAIN;
FINE_MAIN_ERROR:
  $line_out = "Ko file::$filename -- $! -- $0 (Errore +100)";
FINE_MAIN:
# print { $OK ? STDOUT : STDERR } "$line_out\n";
  print STDOUT "$line_out\n";
# undef @riga;
exit 0;
# ---------------------------------------------------------- #
# http://www.tutorialspoint.com/perl/perl_read.htm
# http://perldoc.perl.org/index-overview.html
# ---------------------------------------------------------- #
 
 

Install Db2-10.1 express-c su Client Linux (Ubuntu ram 32G)

Usato in modalità integrato nei programmi Cobol (embedded database),
il setup del database e delle tre user è abbastanza intuitivo, all’inizio il problema della "share memery" mi ha fatto pensare di cestinare questo D.B., ma come sovente succede è una banalità. Il D.B. si riscatta con una messaggistica eccellente, nelle anomalie fatte durante lo sviluppo dai programmi Cobol. Dal Manzoni "L’uom che nacque e visse senza pecca", il Bind dei programmi è un ostacolo gratis, inutili e senza senso durante l’esecuzione dei programmi, con errore -805 e/o -818, costringendo a tortuose manovre per i debugs.
Attenzione: i formati binary non funzionano, da Cobol a Database.

Librerie richieste (da utente root):
apt install binutils ksh zlib1g libstdc++6 libaio1t64 libaio-dev
dpkg --add-architecture i386
apt install libstdc++6:i386 libpam0g:i386
apt update && sudo apt upgrade
ln -s /usr/lib/x86_64-linux-gnu/libpam.so.0 /lib/libpam.so
ln -s /usr/lib/x86_64-linux-gnu/libaio.so.1t64 /usr/lib/x86_64-linux-gnu/libaio.so.1
(se non esistono gli UID da 997,8,9 e 1002,3,4)
groupadd -g 999 db2iadm1
groupadd -g 998 db2fsdm1
groupadd -g 997 dasadm1
useradd -u 1004 -g db2iadm1 -m -d /home/db2inst1 db2inst1
useradd -u 1003 -g db2fsdm1 -m -d /home/db2fenc1 db2fenc1
useradd -u 1002 -g dasadm1 -m -d /home/dasusr1 dasusr1
passwd db2fenc1
passwd dasusr1
passwd dasusr1

./db2prereqcheck

se tutto okay, con utenza di root:
(selezionare solo lingua inglese altrimenti serve il cd)
./db2setup -l /tmp/db2setup.log -t /tmp/db2setup.trc

aggiornare .profile della user di lavoro:

  # set PATH db2 bin if it exists
    if [ -d "/home/db2inst1/sqllib/bin" ] ; then
        PATH="$PATH:/home/db2inst1/sqllib/bin"
    fi
  if [ -d "/opt/ibm/db2/V10.1/bin" ] ; then
      PATH="$PATH:/opt/ibm/db2/V10.1/bin"
  fi

  LD_LIBRARY_PATH=/home/db2inst1/sqllib/lib64
  export LD_LIBRARY_PATH

aggiornare /etc/profile:

  DB2DIR=/opt/ibm/db2/V10.1
  export DB2DIR
  LD_LIBRARY_PATH="/home/db2inst1/sqllib/lib64"
  export LD_LIBRARY_PATH
  DB2INCLUDE=/home/luc/d/cobol/source/include
  export DB2INCLUDE

aggiornare /etc/passwd per le tre user con la bash,
per errore di share memory:

 sudo /opt/ibm/db2/V10.1/instance/db2idrop db2inst1
 sudo /opt/ibm/db2/V10.1/instance/db2icrt -u db2fenc1 db2inst1

accedere e create il vostro dbpreferito:

 su - db2inst1
 db2start
 db2 create database dbpreferito automatic storage yes
 db2 get db cfg for dbpreferito
 db2 update dbm cfg using SVCENAME 50000
 db2set db2comm=tcpip
 db2
  connect to dbpreferito
   GRANT DBADM ON DATABASE TO user your_user
   GRANT ACCESSCTRL, BINDADD, CONNECT, CREATETAB, CREATE_
     EXTERNAL_ROUTINE, CREATE_NOT_FENCED_ROUTINE, DATAACCESS,
     DATAACCESS, EXPLAIN, IMPLICIT_SCHEMA, LOAD, QUIESCE_CONNECT,
     SECADM, SQLADM, WLMADM ON DATABASE TO user your_user
   QUIT

La configurazione base è completata, controlliamo:
 su - db2inst1
 db2level
 db2ls
 db2licm -l
 db2set -all
Command line: clpplus

Suggerimento per il debug:
cmp -b -l (program).bnd (program-debug).bnd ⇒ (Δ2) (Δ1)
  se (Δ1) unica presenza in (program-debug).so lanciare:
perl -i -pe 's{Δ1}{Δ2}g' (program-debug).so

 
 

Install Oracle-free-26ai su Client Linux (Ubuntu ram 32G)

Usato in modalità integrato nei programmi Cobol (embedded database) su un client Ubuntu 26.04 con Wayland, il tutto funzionerà dalla vostra utenza principale (che non è la user Oracle).

non avete un IP statico? ma dinamico, lanciare il comando "ip a" prendere il valore di inet: nella sezione della scheda di rete (per esempio 192.168.1.108). Correggere in: impostazioni di rete, modalità ipv4, con manuale, indirizzo uguale 192.168.1.108 e gateway 192.168.1.1, aggiungere al dns il valore del gateway, con utente di root correggere i valori in "/etc/netplan/" il più recente ...yaml come:

   network:
   version: 2
   ethernets:
      eno1:
      renderer: NetworkManager
      match: {}
#     addresses:
#     - "192.168.1.108/24"
      nameservers:
        addresses:
        - 1.1.1.1
        - 1.0.0.1
      networkmanager:
        uuid: "00000000-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
        name: "netplan-eno1"
        passthrough:
          connection.timestamp: "1111111111"
          ipv4.address1: "192.168.1.108/24,192.168.1.254"
          ipv4.ignore-auto-dns: "true"
          ipv4.ignore-auto-routes: "true"
          ipv4.method: "manual"
          ipv6.method: "disabled"
          ipv6.ip6-privacy: "-1"
          proxy._: ""
       (eccetera ...)

Attenzione: i caratteri (#) contano, sono la chiave di volta, permettono a Oracle-free-26ai di vedere IP statico ed il sistema operativo di funzionare in Dhcp, fare un riavvio (del servizio) e voilà.

A scopo didattico ed evitare confusione, partiamo da una macchina pulita e non compromessa, supponiamo di avere un altra versione:
sudo /etc/init.d/oracle-free-23c delete
sudo dpkg -P oracle-database-free-23c
sudo rm -rf /opt/oracle
sudo rm -rf /opt/ORCLfmap
sudo rm -rf /etc/sysconfig/oracle*
sudo rm -rf /etc/init.d/oracle*
sudo rm -rf /var/lib/dpkg/info/oracle*
sudo rm -rf /tmp/dbca_20*
sudo rm -rf /tmp/hsperfdata_oracle
se con synaptic avete oracle-free-23c si apre un altro scenario, siete compromessi

da rpm a deb
da Oracle Linux 8 (OL8/RHEL8) se preferite OL9 è uguale:
sudo alien -c -d --fixperms oracle-ai-database-free-26ai_23.26.2-2_amd64.rpm
correggere: da root, con il nome da "hostname" inserire in "/etc/hosts" nomehost 192.168.1.108
Librerie e strumenti richiesti:
Librerie di sistema e di rete: glibc, libaio, libaio-devel, libgcc, libstdc++, libstdc++-devel
Librerie di compatibilità: compat-libcap1, compat-libstdc++-33
Strumenti di supporto: bc, ethtool, ksh, make, net-tools, smartmontools, sysstat
Librerie di sblocco e sicurezza: openssl-libs, libnsl

definiamo l'utente "oracle" che vi servirà solo per l'installazione:
sudo groupadd oinstall
sudo groupadd dba
sudo useradd -g oinstall -s /bin/bash -d /home/oracle -m -G dba oracle
sudo passwd oracle
sudo usermod -aG sudo oracle
sudo apt install libaio1t64 libaio-dev
sudo ln -s /usr/lib/x86_64-linux-gnu/libaio.so.1t64 /usr/lib/x86_64-linux-gnu/libaio.so.1
(forse, ereditata dal DB2)
sudo ln -s /usr/lib/x86_64-linux-gnu/libpam.so.0 /lib/libpam.so
mkdir /cfgtoollogs/netca

installare:
sudo dpkg -i ./oracle-ai-database-free-26ai_23.26.2-2_amd64.deb
controllare:
sudo netstat -ntap | grep 1521
(se non esistono altri processi correggere)
/etc/sysconfig/oracle-free-26ai.conf
  listener_port=1521
completare la user ".profile" con:

#
#- oracle -----------------------------------------------------
  if [ -d "/opt/oracle/product/26ai/dbhomeFree" ] ; then
      PATH="/opt/oracle/product/26ai/dbhomeFree:$PATH"
      export PATH
  fi
  if [ -d "/opt/oracle/product/26ai/dbhomeFree/bin" ] ; then
      PATH="/opt/oracle/product/26ai/dbhomeFree/bin:$PATH"
      export PATH
  fi
  if [ -d "$HOME/d/sqlcl_26/bin" ] ; then
      PATH="$PATH:$HOME/d/sqlcl_26/bin"
      export PATH
  fi
  export ORACLE_HOME=/opt/oracle/product/26ai/dbhomeFree
  export ORACLE_BASE=/opt/oracle/product/26ai/dbhomeFree
  LD_LIBRARY_PATH=$ORACLE_HOME/lib;                    export LD_LIBRARY_PATH
  CLASSPATH=$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib; export CLASSPATH
  ORACLE_SID="FREE";                                   export ORACLE_SID
#
#- cobol ------------------------------------------------------
  COB_LIBRARY_PATH="./:./home/luc/d/cobol/loadebg:/home/luc/d/cobol/loadlib"
  export COB_LIBRARY_PATH
  if [ -d "/home/luc/d/cobol/bin" ] ; then
      PATH="$PATH:/home/luc/d/cobol/bin"
      export PATH
  fi
  LLCOBOL="/home/luc/d/cobol";  export LLCOBOL
  export COBPRINTER='cat >>/home/luc/d/cobol/printfile.txt'
#
#- the/rexx ---------------------------------------------------
  REGINA_MACROS=/home/luc/d/cobol/bin;  export REGINA_MACROS
  REGINA_SUFFIXES=".rexx","rexx";       export REGINA_SUFFIXES
#
#- all --------------------------------------------------------
export TMP=$HOME/tmp
export TMPDIR=$HOME/tmp

oracle user: su - oracle
aggiornare la ".profile" con le sezioni #-oracle e #-all viste precedentemente, attenzione siete in XDG_SESSION_TYPE=tty
uscite e tornate alla user principale

controllo dei gruppi della user con:
"cat /etc/passwd |grep /home |grep -v false |cut -d: -f1 |xargs groups |grep oracle"
otteniamo la lista (oinstall dba oper backupdba dgdba kmdba racdba) se tutto sistemato e provato possiamo installare il DB.
configurare il D.B. run: sudo /etc/init.d/oracle-free-26ai configure
abilitare la vostra utenza principale:
sudo usermod -a -G dba vostra_user
controlli finali:
sudo -S /etc/init.d/oracle-free-26ai start/stop/status
sudo -S -i -u oracle lsnrctl start/stop/status
controllare /etc/oratab che sia in ":N" per non appesantire la vostra user
Creiamo un pluggable database ed accediamo, dove *** è la pw:

dalla user oracle create la directory:
 mkdir /home/oracle/oradata/pdb1
tornati nella user principale, ed eseguiamo:
sqlplus / as sysdba
show pdbs;
select * from v$version;
create pluggable database pdb1 admin user SYSDBA identified
 by *** FILE_NAME_CONVERT=('/opt/oracle/oradata/FREE/pdbseed/',
  '/home/oracle/oradata/pdb1');
create pluggable database pdb1 admin user SYSDBA identified
 by Password1 ROLES = (DBA) file_name_convert=('/opt/oracle/oradata/FREE/pdbseed/',
  '/home/oracle/oradata/pdb1');
alter pluggable database PDB1 open;
alter pluggable database PDB1 save state; COMMIT;
alter session set container = PDB1;
create tablespace "USERS" logging datafile '/home/oracle/oradata/pdb1/rca_users'
 size 7m autoextend on next 3m maxsize unlimited extent management local segment
  space management auto;
create user RCA identified by *** default tablespace USERS temporary tablespace TEMP
 profile default account unlock;
grant connect to RCA;
grant resource to RCA;
grant unlimited tablespace to RCA;
alter user RCA identified by "NuovaPassword1"; COMMIT;
-- lista users del pluggable database PDB1
 set pagesize 200
 col USERNAME format a25
 col PDB_NAME format a15
 select u.USERNAME,p.CON_ID,p.PDB_NAME,u.CREATED
 from CDB_USERS u ,dba_pdbs p
 where p.PDB_ID=u.CON_ID and p.CON_ID>2;
quit

Completiamo $ORACLE_HOME/network/admin/tnsnames.ora
PDB1 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = PDB1)
      (UR=A)
  ) )

Completiamo $ORACLE_HOME/network/admin/sqlnet.ora
# NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)
NAMES.DIRECTORY_PATH= (TNSNAMES, HOSTNAME, EZCONNECT)
tcp.validnode_checking = NO

Start/Restart del D.B.
tnsping FREE
tnsping PDB1
tnsping localhost
ulimit -a
Check finale, per esempio usiamo sqlcl:
sql sys/***@//localhost:1521/PDB1 as sysdba

DBeaver per il pluggable database diventa (host: 127.0.0.1 port: 1521 db: PDB1, "Service Name", Username: sys, pw: (pw), role: sysdba, "Location Client": /home/oracle/oradata/pdb1 ).

La connect del cobol diventa:

           EXEC SQL BEGIN DECLARE SECTION END-EXEC.
       01  HV-USERID                 PIC X(10) VARYING.
       01  HV-PSWD                   PIC X(10) VARYING.
       01  HV-DB                     PIC X(10) VARYING.
       01  HV-PDB                    PIC X(10) VARYING.
       01  SQLSTATE                  PIC X(5).
           EXEC SQL END   DECLARE SECTION END-EXEC.
      ....
           MOVE 'RCA'            TO HV-USERID-arr
           MOVE 3                TO HV-USERID-len
           MOVE ***              TO HV-PSWD-arr
           MOVE 8                TO HV-PSWD-len
           MOVE 'FREE'           TO HV-DB-arr
           MOVE 4                TO HV-DB-len
           MOVE 'PDB1'           TO HV-PDB-arr
           MOVE 4                TO HV-PDB-len
           EXEC SQL
                CONNECT :HV-USERID IDENTIFIED BY :HV-PSWD
                USING :HV-PDB
           END-EXEC.

Per configurare la user, Apache, Cobol, Compile, The, Rexx, ecc. vedere Tips.

Questo eseguibile non ha bisogni di spiegazioni:
#!/usr/bin/regina
/* rexx  Oracle
         parametri: funzione pw
??? "sudo -S ..." ??? peccato in ubuntu 26.04 non funziona (rust di m.)
*/
parse arg zfunz zpw .
zfunz = translate(zfunz)
var   = ' START STOP INFO STATUS LIST LISS LISSTATUS LISSTART LISSTOP '
if wordpos(' 'zfunz' ', var)=0 then do
   if strip(zfunz)='' then zfunz='Null'
   say '_o Attenzione Funzione errata ?=' zfunz
   say '_o Funzioni:' var
   exit 8
end
if zfunz = 'START' then do
   if zpw\='' then push zpw
  "sudo -S /etc/init.d/oracle-free-26ai start"
end
if zfunz = 'STOP' then do
   if zpw\='' then push zpw
  "sudo -S /etc/init.d/oracle-free-26ai stop "
end
if zfunz = 'INFO' | zfunz = 'STATUS' then do
   if zpw\='' then push zpw
  "sudo -S /etc/init.d/oracle-free-26ai status"
  "ps -aef|grep oracle|grep FREE|wc"
end
if zfunz = 'LIST' then do
  "ps -aef|grep oracle|grep FREE"
end
if zfunz = 'LISS' | zfunz = 'LISSTATUS' then do
   if zpw\='' then push zpw
  "sudo -S -i -u oracle  lsnrctl status"
end
if zfunz = 'LISSTART' then do
   if zpw\='' then push zpw
  "sudo -S -i -u oracle  lsnrctl start"
end
if zfunz = 'LISSTOP' then do
   if zpw\='' then push zpw
  "sudo -S -i -u oracle  lsnrctl stop"
end
exit 0

 
 

Install PostgreSql su Client Linux (Ubuntu ram 32G)

Usato in modalità integrato nei programmi Cobol (embedded database) in un client Ubuntu 26.04 con Wayland e GnuCobol.

I precompilatori esqlOC, ocesql, gixsql sono da provare in relazione alle proprie esigenze. Il precompilatore esqlOC penso sia per progetti semplici o creati da nuovo, per persone con un alto skill dell'ambiente. Partendo con un software creato per esempio con i due precedenti ambienti proprietari uno si aspetta una interruzione di incompatibilità, con un log del punto di rottura, invece nulla, un errore generale univoco.
Il precompilatore gixsql evoluzione di ocesql, in collaudo.
Il precompilatore ocesql qualcosa risolve ma ha dei gravissimi limiti, vi lascio una serie di ostacoli, premesso che non esistono nel D.B. i campi comp-3:
- non accetta i comp e comp-5 al posto dei comp-3
- vuole una directory per tablespace
- una serie di anomalie inventate senza Log ne riferimenti
- una serie di include risulta in errore
- sql begin/end declare section da togliere dalle include
- le sql dei campi :aaaaaa.ab_cccc diventano :ab_cccc of aaaaaa
- le select * into .., devono diventare a campi singoli
- non esiste un owner di default
- i cursori in working sono da spostare
- autocommit ad on, si accende
- sqlcode -400 su sql non previste
- sqlcode -220 per le call dirette al D.B.
- le optimize (Ibm) sono da eliminare
- non esiste un check da cobol a DB come in DB2
- un equivalente della dclgen esiste?
Per fortuna le ddl sono simili ad Oracle. Se come il mio caso si parte da un software Ibm esiste il problema dei cursori? In Db2 un Cursore può essere aperto ad un livello qualsiasi delle call ed usato in un altro livello, anche se il livello di apertura non esiste più. Dimenticavo un ulteriore modifica sui "range" dei cursori passando da ebcdic ad ascii.

Installazione

sudo useradd -m -s /bin/bash -d /home/postgres postgres
-- sudo passwd postgres
in sudoesr: postgres ALL=(ALL) NOPASSWD: ALL
sudo passwd -d postgres
sudo apt update
sudo apt install postgresql-common -y
sudo /usr/share/postgresql-common/pgdg/apt.postgresql.org.sh
sudo apt install postgresql -y

sudo systemctl status postgresql
psql --version
sudo apt install -y default-jdk build-essential bison flex gettext
 texinfo libgmp-dev autoconf libpq-dev libtool (? libpqxx-dev)
cd Open-COBOL-ESQL-1.4
export CPPFLAGS="-I/usr/include/postgresql"
./configure --host=x86_64-pc-linux-gnu
make
errore bloccante:
   sudo nano /usr/share/libtool/configure.ac
     LT_INIT([dlopen win32-dll])
     -- queste scritte preoccupanti ???
   -- non tocco nulla e da root:
   autoreconf --force --install
./configure --host=x86_64-pc-linux-gnu
make
 -- non tocco nulla ma ???: YACC=bison -y
make check
sudo make install

sudo nano /etc/postgresql/18/main/pg_hba.conf
  #- local   all             all                            peer
  local   all             postgres                        scram-sha-256
  local   all             all                             scram-sha-256
  # IPv4 local connections:
  host    all             all             127.0.0.1/32    scram-sha-256
  # IPv6 local connections:
  host    all             all             ::1/128         scram-sha-256
sudo nano /etc/postgresql/18/main/postgresql.conf
  #listen_addresses = '*'
   listen_addresses = 'localhost'
   port = 5432
   ssl = off
firewall:
   sudo ufw allow 5432/tcp
.profile
  #- PostgreSql--------------------------------------------------
  # export CPPFLAGS="-I/usr/include/postgresql"
  # export COB_LDFLAGS=-Wl,--no-as-needed,--export-dynamic
  # export COB_LDFLAGS=-Wl,--no-as-needed,--export-dynamic,--fPIC
  if [ -d "/usr/lib/postgresql/18/bin/" ] ; then
      PATH="$PATH:/usr/lib/postgresql/18/bin/"
      export PATH
  fi
  LD_LIBRARY_PATH=/usr/local/lib:/usr/lib/postgresql/18/lib
   export LD_LIBRARY_PATH
  LD_RUN_PATH=/usr/local/lib:/usr/lib/postgresql/18/lib
   export LD_RUN_PATH

cd $HOME/d/cobol/data
mkdir scomuni
mkdir scomuni2
mkdir sgavsysq
mkdir sgavsyst
mkdir sgavsysu
cd ..
sudo chown -R postgres:postgres ./data
sudo -u postgres psql
SELECT version();
SELECT
  inet_server_addr(),
  inet_server_port();
SHOW SERVER_ENCODING;
show data_directory;
show all;
ALTER USER postgres WITH PASSWORD '****';

pg_config --libdir
CREATE ROLE RCA WITH CREATEDB SUPERUSER;
ALTER USER RCA WITH PASSWORD '****';
ALTER USER RCA WITH LOGIN;
\du
create database dbpada with owner = rca;
\c dbpada
\q
psql -U rca -h 127.0.0.1 -d dbpada
CREATE SCHEMA RCA;
GRANT ALL PRIVILEGES ON DATABASE dbpada   TO rca;
\set AUTOCOMMIT 'false'
\echo :AUTOCOMMIT
\l
SELECT current_database();
select current_user;
SHOW hba_file;
SELECT oid from pg_database WHERE datname = 'dbpada';
SELECT relname, relfilenode FROM pg_class WHERE relname = 'dbpada';
\db+    // list tablespace
SELECT * FROM pg_tablespace;
select spcname ,pg_tablespace_location(oid) from pg_tablespace;
SELECT *, pg_tablespace_location(oid) FROM pg_tablespace;
\dt
\i /home/luc/d/cobol/db2data/GESYQCR0_pg.sql;
\i /home/luc/d/cobol/db2data/GESYTCR0_pg.sql;
\i /home/luc/d/cobol/db2data/GESYUCR0_pg.sql;
\i /home/luc/d/cobol/db2data/GATAV240_pg.sql;
\i /home/luc/d/cobol/db2data/GATAV241_pg.sql;

\d comuni
select * from pg_tables where schemaname = 'rca';
\dn    // display all schema
\du    // users
\df    // display all function
\dv    // display all view
\q
ps aux  | grep 'postgres *-D'

In Cobol, la connect diventa:
    MOVE 'rca'                    TO HV-USERID
    MOVE ****                     TO HV-PSWD
    MOVE 'dbpada'                 TO HV-PDB
    MOVE 'dbpada@localhost:5432'  TO HV-PDB
    EXEC SQL
        CONNECT       :HV-USERID
        IDENTIFIED BY :HV-PSWD USING :HV-PDB
    END-EXEC.

Questo eseguibile non ha bisogni di spiegazioni:
#!/usr/bin/regina
/* rexx  PostgreSql
         parametri: funzione pw
??? "sudo -S ..." ??? peccato in ubuntu 26.04 non funziona (rust di m.)
*/
parse arg zfunz zpw .
/*
 "regina ~/d/cobol/bin/_db2p.rexx" zfunz
*/
zfunz = translate(zfunz)
var=' start stop status restart reload disable enable con0 conn con1 con2 con3 '
var=translate(var)
if wordpos(' 'zfunz' ', var)=0 then do
   if strip(zfunz)='' then zfunz='Null'
   say '_p Attenzione Funzione errata ?=' zfunz
   say '_p Funzioni:' var
   exit 8
end
if zfunz = 'STATUS' then do
   if zpw\='' then push zpw
  "sudo systemctl status postgresql"
  "ps aux | grep 'postgres *-D'"
end
if zfunz = 'START' then do
   if zpw\='' then push zpw
  "sudo systemctl start postgresql"
  "sudo systemctl enable postgresql"
end
if zfunz = 'STOP' then do
   if zpw\='' then push zpw
  "sudo systemctl disable postgresql"
  "sudo systemctl stop postgresql"
end
if zfunz = 'RESTART' then do
   if zpw\='' then push zpw
  "sudo systemctl restart postgresql"
end
if zfunz = 'RELOAD' then do
   if zpw\='' then push zpw
  "sudo systemctl reload postgresql"
end
if zfunz = 'DISABLE' then do
   if zpw\='' then push zpw
  "sudo systemctl disable postgresql"
end
if zfunz = 'ENABLE' then do
   if zpw\='' then push zpw
  "sudo systemctl enable postgresql"
end
if zfunz = 'CONN' then do
   if zpw\='' then push zpw
  "sudo -u postgres psql"
end
if zfunz = 'CON1' then do
  "sudo -i -u postgres"
end
if zfunz = 'CON2' then do
  "sudo -u postgres psql -U rca -d postgres -h 127.0.0.1 -W"
end
if zfunz = 'CON3' then do
  "sudo -u postgres psql -U rca -d dbpada -h 127.0.0.1 -W"
end
if zfunz = 'CON0' then do
  "psql -U rca -d dbpada -h 127.0.0.1 -W"
end
exit 0

Check

Popolare le poche righe di partenza con Dbeaver, completare le definizione per Apache2, start del DB ed Apache, lanciare:
http://localhost/COBWEB.cgi?1?
ldd $HOME/d/cobol/loadlib/COBWEB.cgi
file $HOME/d/cobol/loadlib/COBWEB.cgi
ldd $HOME/d/cobol/loadlib/GTSYS030.so
file $HOME/d/cobol/loadlib/GTSYS030.so
file /usr/local/lib/libocesql.so.0.1.0

DBeaver: Connect by: Host, URL: jdbc:postgresql://localhost:5432/dbpada, Host: localhost, Port: 5432 Database.dbpada, Username: rca, Password: ****

Commenti di anni precedenti:
Usato in modalità integrato nei programmi (embedded database), spettacolare la semplicità di primo approdo, tutto si svolve con fluidità e semplicità. Parlando di un prodotto che supporta più database il primo ostacolo è dovuta alla normalizzazione delle include sql, le built-in fanno il loro lavoro, peccato per i cursori, la declare deve essere spostata vicino alla open, comporta un supplemento di controlli.

Le operazioni sql risentono dei linguaggi nativi risultano notevolmente più criptiche rispetto all'approccio dei precedenti database.

Un ulteriore difficoltà è la completa incomprensione della messaggistica, le anomalie del precompilatore sono "mitiche" non esistono riferimenti ne al Database ne al sorgente, stessa sorte per il compilatore. Sicuramente il suo utilizzo è orientato verso linguaggi che non sanno gestire le chiavi tradizionali e si appoggiano alle chiavi surrogate, con la tecnica (JUnit): se raddoppi semplifichi!? O meglio non capisco ma ho scritto.

 
 

Esempi di Cobol con Apache2 e Db2/Oracle
( un click sulla descrizione per attivare il Link al Video )

Debug realizzato con il solo Cobol

Db2: alcune pagine, le più vintage (qualche ritocco alla fine dello scorso secolo):

Oracle: personalizzazione dell'aspetto (con più di 15 aree, qualche ritocco alla fine dello scorso secolo):

Debug versione 2008 con interfaccia The-editor (Hessling):

 
 

Job Scheduler & Monitor - Royalty-free

Semplice e completo, per ulteriore semplificazione esponiamo la versione a caratteri per Linux / Unix. Il prodotto consente la gestione automatica dei processi elaborativi. Si possono controllare e governare tutti i processi. Il prodotto è composto da tre sottosistemi, uno per la schedulazione (scheduler), uno per il controllo (controller) dei processi e uno per monitorare (monitor). La realizzazione con il linguaggio PERL ne permette la trasportabilità su tutti i sistemi operativi. Unico limite è la fantasia.

A) Lo schedulatore (Scheduler)
Esegue la sottomissione delle reti nel momento stabilito, con i campi "giorno della settimana" ed "ora". Il giorno della settimana assume i valori da "1" a "7" per indicare i giorni da "lunedì" a "domenica" o il valore "X" per tutti i giorni. Le reti sono innescate se "flag status" è attivo (A=Attivo, S=Sospeso). Tutti i processi con cadenza maggiore della settimana sono regolati dal "flag festivo" che identifica in modo univoco le condizioni di esecuzione nell'arco dell'anno, della settimana, ecc. ..

"flag festivo"

    Il campo permette l'individuazione di un singolo momento nell'arco dell'anno, può assumere i valori F, I, IP, PF, DF, G1 ..7, D1 ..31, M1 ..12 o i relativi valori negati, (teoria degli insiemi) per comodità indicati col il simbolo "!" ad ogni valore, otteniamo !F, !I, !IP, ... I giorni della settimana, i giorni del mese ed i mesi dell'anno possono essere espressi in forma estesa, per esempio un Job che deve essere eseguiti il lunedì il giovedì ed il sabato o in forma contratta con G1.4.6,
    Il campo può essere la somma di enne condizioni, separate dal carattere ",". Per esempio:
    G1.2.3.4.5,M3.6.9.12,D1.7.14.21.28.!PF

    Filtro valori per Jobs e Reti:

  • N=non controllato
  • F=fine mese (o valore negato !F)
  • I=inizio mese (o valore negato !I)
  • IP=inizio mese post festivo (o valore negato !IP)
  • PF=prefestivo (o valore negato !PF), la rete viene eseguita nei giorno settimanali, se il giorno di esecuzione cade in un giorno festivo viene anticipato nel giorno precedente (massimo 7 giorni prima).
    Nel controllo reti ha il solo effetto di inibire l'esecuzione del Job nei giorni festivi.
  • DF=post festivo (o valore negato !DF), la rete viene eseguita nei giorno settimanali, se il giorno di esecuzione cade in un giorno festivo viene posticipato nel giorno successivo (massimo 7 giorni dopo)
    Nel controllo reti ha il solo effetto di inibire l'esecuzione del Job nei giorni festivi.
  • GF=nel giorno festivo (valore negato !GF)
  • G1 ..7=nel giorno della settimana da lunedì a domenica (o valore negato !G)
  • D1 ..31=nel giorno del mese dal primo a fine mese (o valore negato !D)
  • M1 ..12=nel mese dell'anno da gennaio a dicembre (o valore negato !M)
Per completare la visione si ricorda: 1) la tabella della frequenza dei controlli, variabile a 1 secondo a 86400, 2) la tabella dei giorni festivi dell'anno.

B) La Rete (controller)
Il processo sottomette e controlla l'esecuzione dei Job della "Rete". Per meglio comprendere quanto segue bisogna vedere la compilazione di una rete:

Il Successivo=0 per i blocchi (Sequenza=) 4 e 6 crea una piramide rovesciata di uscita, nell'esempio, come si allarga la base in egual modo si può restringerla. Il Job per essere eseguito deve soddisfare le condizioni iniziali (controllo), si conclude quando soddisfa la condizione finale (controllo di uscita), bisogna vedere il Job composto da tre step. Anche qui abbiamo i flag "status" e "festivo" come nella sezione precedente, se lo Status "S=Sospeso" sono cancellati anche tutti i suoi derivati. Il flag "controllo" permette l'esecuzione in funzione dello status finale dei chiamanti e partire se conclusi in "OK" o "KO".
I controlli di inizio e fine sono procedure che leggono o calcolano o analizzano situazioni o controllano lo status di uscita, sono libere di essere ampliate a piacere al di fuori del set base.

C) Lo stato dei processi (monitor)
Con il comando è possibile: a) vedere lo stato delle reti b) vedere lo stato della singola rete c) chiudere l'esecuzione della rete d) congelare l'esecuzione della rete e) scongelare l'esecuzione della rete. Nei casi a,b mettendo il numero di giorni negativi si vedono le esecuzioni nei giorni -1,-2, ... per esempio con "j2mgr" si vedono le esecuzioni delle reti del giorno, con "j2mgr -1" le esecuzioni del giorno precedente ecc. Mettendo il nome della rete, esempio "j2mgr 0 ReteEsempio", mostra il/i dettaglio/i dell'esecuzione della rete nel giorno corrente, ecc. Le reti in esecuzione possono essere congelate con il comando:
    "j2mgr.pl WAIT ReteEsempio"
e riattivate con:
    "j2mgr.pl GO ReteEsempio"
Per terminare il controllo e le successive esecuzione dei Job della rete eseguire il comando
    "j2mgr.pl STOP ReteEsempio"
si ricorda che le lettere maiuscole e minuscole hanno valore diverso, ReteA è diversa da reteA ecc.

Q) qualche esempio

3) Controllo (Lista) reti eseguite sette giorni prima
 j2mgr.pl -7

6) Controllo (Lista) rete eseguita sette giorni prima
 j2mgr.pl -7 ReteEsempio

17) Rete con shell script senza controllo esito
 sendfat6 1 0 A N 0 0 0 E SCRIPT1            . NC j2control.pl /jcl /tmp

18) Rete che attende l'arrivo del file /tmp/bolle
 sendfat4 1 0 A N 0 0 2 U PROGRAM1,a,ebmprod fw:/tmp/bolle OK j2control.pl /jcl /tmp
 sendfat4 2 1 A N 1 0 0 U PROGRAM2,a,ebmprod .             OK j2control.pl /jcl /tmp
 sendfat4 2 2 A N 1 0 0 U PROGRAM4,a,ebmprod .             OK j2control.pl /jcl /tmp

19) Rete che si interrompe se non esiste il file /tmp/bolle
 sendfat4 1 0 A N 0 0 2 U PROGRAM1,a,ebmprod fe:/tmp/bolle OK j2control.pl /jcl /tmp
 sendfat4 2 1 A N 1 0 0 U PROGRAM2,a,ebmprod .             OK j2control.pl /jcl /tmp
 sendfat4 2 2 A N 1 0 0 U PROGRAM4,a,ebmprod .             OK j2control.pl /jcl /tmp

25) Schedulazione come caso 24 e per i mesi pari
 X 20:00 ReteEsempio A Profilo1 G1.2.3.4.5,!M1.12,M2.4.6.8.10 j2control.pl /jcl /tmp
 
 

Tips

 Struttura dell'ambiente - per Apache2 - DB2 - no Cics 
  • bin
    • bin_ora
    • bin_pg
  • bind
  • c (translate)
  • data
  • db2data
  • debug
  • doc
    • setup
      • apache2
        • mods_available
        • site_available
  • job
  • graphix
  • html
  • list
  • loadebg
  • loadlib
  • source
    • copy
    • copymap
    • include
  • var
    • cicx
      • userid

eseguibili per Db2
eseguibili per Oracle
eseguibili per PostgreSql
raccolta file di bind
versione "C" da compila
archivio
create table and index
debug workspace
documentazione
salvataggi ambienti
 
 
 
job per programmi batch
grafica, js, css
pagine web
listati compile
load debug
load no debug
programmi sorgenti
copy
copy per dialogo pagine
sql
aree temporanee web
ambiente per 3.3k programmi, 5k copy, 10k include (sql), 1k pagine, 500 tabelle denormalizzate per web e data warehouse

In gestione, ristrutturazione, adeguamento di un prodotto serve un editor con un rapporto 1 a enne nel confronto dei sorgenti. Lo strumento ideale per manipolare è Regina-Rexx con THE (The Hessling Editor), peccato che quest'ultimo si presenta "nudo", come una tela bianca, dove un neofita non può apprezzare il massimo della duttilità e trasportabilità.

In coda troverete una piccola collezione, il minimo di conoscenze per superare lo shock del primo lancio ed essere produttivi. Qualche raccomandazione per chi non ha mai usato il Vm/Cms di IBM, la potenza di variare il nome e l'estensione (fn ft fm) il cambio LF/CRLF il trailing sono semplici comandi, l'undo è molto limitato, si usa fn o ft per creare punti di check, ecc.

Il comando llhelp riassume e mostra una seria di built-in per personalizzare l'ambiente, per esempio incapsulare il comando enter con llenter, il comando llist per agevolare la visione e lo spostamento tra le directory e l'apertura dei files utilizzando il tasto F1. Potrete personalizzare il parser dei sorgenti ampliando o modificando i files "*.tld", "showkey" per il nome dei tasti, c-b c-b per i blocchi, c-o ed ecc.

Consiglio di vedere la sezione "Default Key Assignments" digitando help in command-line.

Rimodellato l'ambiente ora potrete ristrutturare i vostri Botero, la tendenza di creare queste palle enormi e lardose nell'era degli sciami di droni.

Siete pronti per creare la vostra "collezione" di ristrutturazione, quelle dell'ambiente che poco vi servirà, si presenta:

 
per Linux install in /usr/share/THE:
  sudo apt-get install xclip
  sudo apt-get install wl-cleapbord
  sudo apt-get install the
  sudo apt-get install regina-rexx regina3 regina3-dev
  Copiare la collezione ..7z in extras
  sudo gnome-text-editor /etc/profile
    THE_HOME_DIR="/usr/share/THE"
    THE_HELP_FILE="/usr/share/THE/THE_Help.txt"
    THE_PROFILE_FILE="/usr/share/THE"
    THE_MACRO_PATH="/usr/share/THE"
    export THE_HOME_DIR THE_HELP_FILE THE_PROFILE_FILE THE_MACRO_PATH
    if [ -f /etc/bash.bashrc ]; then
        . /etc/bash.bashrc
    fi
  sudo gnome-text-editor /etc/bash.bashrc
    alias the='the -p /usr/share/THE/profile.the'
    alias thewin='the -p /usr/share/THE/profileWin.the'
    alias xclip='xclip -selection c'

per Windows install in c:\0\THE:
  installare THE e Regina la https://hessling-editor.sourceforge.net/
  Copiare la collezione ..7z in extras
  impostare le variabili di ambiente:
    REGINA_HOME=C:\0\Regina
    REGINA_LANG=en
    REGINA_LANG_DIR=C:\0\Regina
    THE_HELP_FILE=C:\0\THE\THE_Help.txt
    THE_HOME_DIR=C:\0\THE
    THE_MACRO_PATH=C:\0\THE\extras
  creare un link o lanciare da cmd: theb o cmd: thex
    C:\0\THE\the.exe  -p c:\0\THE\extras\profileWin.the

 Nucleo attuale 

Solo i punti cruciali di un semplice programma passato da ambiente Host Ibm con Cics ad ambiente Linux Https, dove spostando qualche commento può funzionare in ambiente Cics a caratteri e Cics html, passato dal DL/I al Vsam al Db2 ad altri D.B., per atterrare in ambiente Linux. La ricezione e l'invio dati alle pagine passano dai due programmi CobRice e CobSend2 in ambiente open-source, comuni per tutti i programmi, le struttura delle stringhe di dati sono ottenute automaticamente e sono comuni sia per l'ambiente Host che open-source. Come tutti i programmi, nasce, lavora e sparisce, per ogni richiesta.

"(avete notato la gamba anteriore sinistra dello sfondo)"
Download editor Tips
Download core Tips

 
  stop/start images (reload to resize)
Copyright © 2024, A s o f t - Italy (va) ® Asoft-va.com utilizza cookie essenziale, si accetta Grazie