Escape key OpenCobolIde

di il
24 risposte

Escape key OpenCobolIde

Salve,
come ho evidenziato alcuni giorni fa sto riesumando vecchi programmi in cobol.
Non riesco ad intercettare tutti i tasti funzione della tastiera tipo pagina su pagina giù tasto Esc ecc. ecc.
dopo una accept cmdkey from escape key, mi ritrovo solo i valori che vanno da 00 a 12 e cioè Ent F1 F2 fino a F12.
Avete qualche suggerimento per risolvere tale inconveniente?
Ringrazio anticipatamente per quello che potete fare.

24 Risposte

  • Re: Escape key OpenCobolIde

    Ciao

    Non conosco personalmente OpenCobol ma ho lavorato per parecchi anni col linguaggio Cobol.
    Ho dato un'occhiata alla documentazione OpenCobol e secondo me dovrebbe funzionare in questo modo:
    • Fai la ACCEPT di un campo e metti la clausola ON EXCEPTION che sta ad indicare dove salvare il valore del tasto funzione premuto
    • Dopo la ACCEPT verifichi il valore del tasto funzione paragonandolo a quello del tasto funzione premuto
    Ora il problema è capire qual è il valore del tasto funzione premuto.
    Nella documentazione OpenCobol mi pare di capire che questi valori siano riportati in qualche modo nel file screenio.cpy (così è scritto nel manuale ufficale, pagina 26 nella sezione 6.3.13)

    Pertanto, all'interno di quel file, dovresti trovare delle variabili di livello 78 in cui viene dato un nome a tali valori (però non ti so dire quali nomi, bisogna guardare quel file).

    Detto questo (che è forse quello che ti serve), ti giro un esempio di codice che dovrebbe fare una accept e visualizzare il valore associato al tasto funzione premuto.
    (occhio che l'ho scritto al volo, potrebbe mancare qualcosa, al limite lo sistemi)

    
    
           identification division.
           program-id. test-fkey.
    
           environment division.
           data division.
           working-storage section.
    
           77 fkey              pic 9(04).
           77 w-char          pic x(01).
    
            procedure division.
    
            perform until 1 = 2
               initialize fkey w-char
               accept w-char at 0101 update prompt tab echo
                       on exception 
                            fkey continue
                end-accept
          *---- se fkey ha un valore, allora hai premuto un tasto funzione
                if fkey > zero
                   display fkey at 0201
                else
                   display "    " at 0201
                end-if
          *---- se si digita "f", allora usciamo dal ciclo
                if w-char = "f"
                   exit perform
                end-if
            end-perform     
            .
            stop run.
    
    
  • Re: Escape key OpenCobolIde

    Salve PiGi78,
    ti ringrazio della risposta però ho un problema di sintax error sulla accept.
    se cortesemente di indirizzi dove posso trovare il manuale ufficiale te ne sarei grato.
    Ho scaricato Programmer's Guide prima edizione, non ho trovato nulla sull'argomento.
    comunque ti ringrazio.
  • Re: Escape key OpenCobolIde

    Ho guardato il manuale ufficiale di OpenCobol (chiamato GnuCobol):



    Da pagina 19 spiegano tutte le opzioni dell'ACCEPT, con tanto di funzioni "ON EXCEPTION" (per intercettare i tasti particolari, come invio, tasti funzioni, escape, ...) e "NOT ON EXCEPTION" per gli altri casi.
  • Re: Escape key OpenCobolIde

    PiGi78,
    ti ringrazio per avermi evidenziato il link al manuale cobol.
    Nei riferimenti che riguardano l'istruzione ACCEPT ON EXCEPTION, viene evidenziato solo IMPERATIVE STATEMENT e non
    un mnemonic-name, non ho trovato uno straccio di esempio.
    Dietro tuo consiglio ho caricato SCREENIO.CPY ed ho indirizzato tale tabella nello special-names così come di seguito,
    CRT STATUS IS cmdkey2 (che è il livello 01 della copy). Dopo questo tentativo ho intercettato solo TAB e BACK_TAB
    gli altri tasti assolutamente no.
    A questo punto a meno di aver preso un abbaglio ho il ragionevole dubbio che sia Windows visto che il cobol è vecchio.
    Proseguirò nella conversione dei programmi in seguito affronterò nuovamente il problema.
    Ti rinnovo i ringraziamenti per il supporto che mi hai dato.

    p.s. come si chiude un post?
  • Re: Escape key OpenCobolIde

    Ciao

    Posso garantirti che il problema non è Windows e nemmeno il fatto che il Cobol sia vecchio.
    In azienda lo usiamo ancora e funziona benissimo!

    Il problema, semmai, è capire come portare il Cobol X nella versione OpenCobol.

    Posso chiederti qual è la versione di partenza di Cobol che stai usando?
  • Re: Escape key OpenCobolIde

    Ho cercato anche io la screenio.cpy ed ho trovato questo:



    Non vedo da nessuna parte la variabile di cui parli (cmdkey2).
    O sbaglio io, oppure stai referenziando qualcosa di sbagliato.
  • Re: Escape key OpenCobolIde

    Ciao PiGi78,
    faccio un pochino di ordine per non inviarti informazioni errate.
    Quindi, evidenzio alcuni dati per chiarire la situazione anche se può sembrare un pistolotto.
    I programmi che sto adattando sono stati tutti sviluppati dal sottoscritto ma sicuramente prima degli anni 90.
    Poi nei primi anni 90 dovevo convertire questi programmi dal cobol 0? in microfocus.
    Visto che tale compilatore non era in mio possesso a casa, dovevo effettuare questi adattamenti in orario di ufficio.
    Non ho accettato di fare questa cosa pertanto il tutto è andato nel dimenticatoio ed il lavoro è stato affidato
    in parte ad altre persone che a dir poco avevano una immensa capacità di incasinare tutto quello che toccavano.
    Lavoro mai terminato e quando ho ripreso tutto in mano (dopo oltre 30 anni) non funzionava nulla di tutto
    quello che avevano aggiornato.
    Ecco che a questo punto sono stato incaricato di riesumare il morto mezzo cobol0? e mazzo microfocus. Tutto qui.
    Oggi mi trovo a lavorare con opencobolide versione 4.7.6 in casa e vista la mia inattività da lungo periodo chiedo aiuto.

    A questo punto ho caricato SREENIO.CPY e dopo alcuni tentativi ho capito che i livelli 78 sono solo delle costanti e non
    possono essere inglobati sotto il livello 01 come se fossero dei livelli 88.
    Detto ciò ti confesso che non ho capito come utilizzare screenio.
    Dopodiché ho definito in special names CRT STATUS IS CMDKEY2 e posto come livello 01 ai livelli 88 dove ho
    intercettato oltre a Enter, F1 fino a F12 anche Tab e Back-Tab. Gli altri tasti non se ne parla visto che quando vengono
    pigiati mi ritorna il suono del della tastiera.
    Chiaramente sto continuando a convertire utilizzando solo i tasti che ho a disposizione.
    Ti saluto e ti ringrazio sempre per tutto quello che mi puoi indicare.
  • Re: Escape key OpenCobolIde

    Salve,
    ho terminato la conversione dei programmi utilizzando OpenCobolIde.
    funziona tutto ma l'interfaccia è un vero schifo visto che non sono ancora riuscito a trovare il modo ti utilizzare
    tutti i tasti funzione. Purtroppo senza la gestione del Pgsu Pggiù e le quattro frecce a mio modesto avviso
    è una gestione da manicomio cioè non è intuitiva.
    Pertanto, se non riuscirò a trovare una soluzione, credo che non consegnerò il lavoro fatto anche se il richiedente è un amico.
    Quindi, faccio ancora un appello a chi mi può aiutare per risolvere il problema.
    Se alla fine dovrò rinunciare, il lavoro eseguito lo prenderò come un allenamento per mantenermi attivo.
    Comunque grazie per quello che mi è stato precedentemente suggerito.
  • Re: Escape key OpenCobolIde

    Riciao

    Purtroppo ho un problema col virtualizzatore e non riesco a darti risposte immediate.
    Una di queste sere provo a risolvere il problema e, se ci riesco, mi faccio una VM su cui fare i test così ti dico (però non garantisco nulla).

    Giusto per non fare prove inutili: l'ambiente di produzione sarà Windows o Linux? Almeno lo provo sulla stessa macchina
  • Re: Escape key OpenCobolIde

    Leggi il manuale di OpenCOBOL 1.1 [06FEB2009 Version] Programmer’s Guide

    alla pagina 4-5 la Figure 4-8 - Screen ACCEPT Key Codes ove sono presentati i codici tastiera che restituiscono i tasti di movimento cursore (freccia e pagina) tasti funzione, Esc, ecc. i quali dipendono dal tipo di terminale usato (PC, Macintosh, VT100, ecc.) ed in base al driver video configurato con la versione di OpenCOBOL.
    Inoltre da tenere presente che OpenCOBOL su Windows, usando Cygwin e NCurses ha delle limitazioni nella combinazioni di tasti (Ctrl, Alt) e nel tastierino numerico.

    Per avere spunti di impiego puoi vedere questi link:
    https://stackoverflow.com/questions/28527058/trouble-with-accept-esc-code-from-escape-key
    http://opencobol.add1tocobol.com/gnucobol
  • Re: Escape key OpenCobolIde

    Ciao PiGi78,

    Windows 10
  • Re: Escape key OpenCobolIde

    Will55,
    vado a vedere ciò che mi hai suggerito.
  • Re: Escape key OpenCobolIde

    Ciao

    Il problema è proprio Windows (nel manuale c'è scritto che le frecce e PG- e PG+ non vanno su Windows.
    Con questo codice puoi usare però i tasti funzione e, per spostarti fra i campi, puoi usare tab e shift-tab

    Vedi te cosa vuoi fare...
    
          ********/**********************************************************
          * Author: PiGi78
          * Date: 19/02/2022
          * Purpose: Fkey test
          * Tectonics: cobc
          ******************************************************************
           IDENTIFICATION DIVISION.
          *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
           PROGRAM-ID. TestFkey.
           ENVIRONMENT DIVISION.
          *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
           CONFIGURATION SECTION.
           SPECIAL-NAMES.
                CRT STATUS FKEY.
          *-----------------------
           INPUT-OUTPUT SECTION.
          *-----------------------
           DATA DIVISION.
          *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
           FILE SECTION.
          *-----------------------
           WORKING-STORAGE SECTION.
           77   FKEY                  PIC 9(04).
                88 ENTER-PUSHED       VALUE 0000.
                
                88 F1-PUSHED          VALUE 1001.
                88 F2-PUSHED          VALUE 1002.
                88 F3-PUSHED          VALUE 1003.
                88 F4-PUSHED          VALUE 1004.
                88 F5-PUSHED          VALUE 1005.
                88 F6-PUSHED          VALUE 1006.
                88 F7-PUSHED          VALUE 1007.
                88 F8-PUSHED          VALUE 1008.
                88 F9-PUSHED          VALUE 1009.
                88 F10-PUSHED         VALUE 1010.
                88 F11-PUSHED         VALUE 1011.
                88 F12-PUSHED         VALUE 1012.
                
                88 SF1-PUSHED         VALUE 1013.
                88 SF2-PUSHED         VALUE 1014.
                88 SF3-PUSHED         VALUE 1015.
                88 SF4-PUSHED         VALUE 1016.
                88 SF5-PUSHED         VALUE 1017.
                88 SF6-PUSHED         VALUE 1018.
                88 SF7-PUSHED         VALUE 1019.
                88 SF8-PUSHED         VALUE 1020.
                88 SF9-PUSHED         VALUE 1021.
                88 SF10-PUSHED        VALUE 1022.
                88 SF11-PUSHED        VALUE 1023.
                88 SF12-PUSHED        VALUE 1024.
                
                88 CTRL-F1-PUSHED     VALUE 1025.
                88 CTRL-F2-PUSHED     VALUE 1026.
                88 CTRL-F3-PUSHED     VALUE 1027.
                88 CTRL-F4-PUSHED     VALUE 1028.
                88 CTRL-F5-PUSHED     VALUE 1029.
                88 CTRL-F6-PUSHED     VALUE 1030.
                88 CTRL-F7-PUSHED     VALUE 1031.
                88 CTRL-F8-PUSHED     VALUE 1032.
                88 CTRL-F9-PUSHED     VALUE 1033.
                88 CTRL-F10-PUSHED    VALUE 1034.
                88 CTRL-F11-PUSHED    VALUE 1035.
                88 CTRL-F12-PUSHED    VALUE 1036.
                
                88 TAB-PUSHED         VALUE 2007.
                88 STAB-PUSHED        VALUE 2008.
                
           
           77   TXT-FIELD             PIC X(10).
          *-----------------------
           PROCEDURE DIVISION.
          *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
           MAIN-PROCEDURE.
          **
          * The main procedure of the program
          **
                SET ENVIRONMENT "COB_SCREEN_ESC" TO "9999"
                SET ENVIRONMENT "COB_SCREEN_EXCEPTIONS" TO "9999"
                PERFORM UNTIL TXT-FIELD = "fine"
                   DISPLAY "Premi un tasto funzione o scrivi fine" 
                       AT 0101 
                   END-DISPLAY
                   INITIALIZE FKEY
                   ACCEPT TXT-FIELD AT 0201 WITH UNDERLINE UPDATE
                                                 REVERSE-VIDEO
                       ON EXCEPTION CONTINUE
                   END-ACCEPT
                   DISPLAY FKEY AT 0301
                END-PERFORM
                STOP RUN.
          ** add other procedures here
           END PROGRAM TestFkey.
    
    
    
    
  • Re: Escape key OpenCobolIde

    Ciao PiGi78,
    il tuo programma funziona alla grande.
    Ora dovrò valutare come rendere l'utilizzo dei tasti semplice e non cervellotico.
    Ho realizzato momentaneamente un help con tasto F1, poi in seguito farò in modo che sia l'utilizzatore ad aggiornare
    l'help e rendere il tutto più vicino all'utilizzatore stesso.
    Quindi, con i tasto F1 metterò a disposizione informazioni rapide come utilizzare i tasti funzione oltre
    alle specifiche già in essere per l'utilizzo del software.
    Se ben ricordi avevo il sentore che Windows non ne voleva sapere dei tasti incriminati.
    Comunque, ti rinnovo i ringraziamenti, sono di Roma e se un domani dopo la cessazione delle restrizioni covid
    passerai da queste parti mi farebbe piacere offrirti una cena.
    ancora grazie per l'aiuto ricevuto.

    Fernando alias mxoldpgm
Devi accedere o registrarti per scrivere nel forum
24 risposte