Pause-Café Volubis

pause-café

rendez-vous technique
Pause-Café est une réunion technique
destinée aux informaticiens sur plateforme IBM i.
Elle a lieu 3 à 4 fois par an : en Bretagne et sur internet.

Pause-café # 3

Septembre 1994
 VERSION 2 EDITION 3.0                      ############################### 
                                       !->  #  fichier format action      # 
 ° DDS graphiques                      !    # ---------:...........------ # 
                                       !    #          :  Caract. :       # 
   - Barre de menu     (fmt MNUBAR) ---!    #      !-> :  Héxa    :       # 
                                            #      !   :..........:       # 
   - Menus déroulants  (fmt PULLDOWN) ----- # -----!                      # 
                                            #                             # 
                                            ############################### 
                R BARRE                     MNUBAR
                  CHOIX          2Y 0B  1  2MNUBARCHC(1 MD01 '>Fichier')
                                            MNUBARCHC(2 MD02 'Forma>t')
                                            MNUBARCHC(3 MD03 '>Action')


  Le format BARRE est une barre de menu (mot-clé MNUBAR)


 MD01,MD02 et MD03 sont des menus déroulants (mot-clé PULLDOWN)
  associés à ce format.


  Si le curseur est positionné devant "Format" le format MD02 sera affiché
   (sans action de la part du pgm), ... etc ...

                R MD01                      PULLDOWN
                  MD1CHX         2Y 0B  1  2SNGCHCFLD
                                            CHOICE(1 '>Ouvrir')
                                            CHOICE(2 '>Fermer')
                                            CHOICE(3 '>Quitter' *SPACEB)
     *   la ligne "Quitter" sera précédée d'une ligne blanche


                R MD02                      PULLDOWN
                  MD2CHX         2Y 0B  1  2SNGCHCFLD
                                            CHOICE(1 '>Caractère')
                                            CHOICE(2 '>Hexa')
                R MD03                      PULLDOWN
                  MD3CHX         2Y 0B  1  2SNGCHCFLD
                                            CHOICE(1 '>Add')
                                            CHOICE(2 '>Delete')


                R FMT                       MNUBARDSP(BARRE &mnu &opt)
                  MNU            2Y 0H
                  OPT            2S 0H


 Votre programme utilise FMT et recoit dans MNU le n° du menu déroulant
                                       dans OPT le n° de l'option du menu.


   RUMBA/400 affiche:
                     + les barres de menu
                     + les menus déroulants etc ...
                     + TOUTES LES FENETRES (mot-clé WINDOW)


                     avec un "look micro" (type OS/2)


 si vous renseignez le paramètre ENHDSP à *YES (ce qui est la valeur/dft)
  sur les commandes CRTDSPF et CHGDSPF.


 Si vous indiquez *NO, le résultat sera semblable à l'affichage sur un écran
  passif.


 Le début d'un REWAMPING temps réel ?






 (IBM annonce les ascenceurs et les boutons poussoirs pour la V3R10 ?!?)





                    


 RUMBA peut être une aide au client serveur.


 En effet il est possible d'établir un lien DDE entre une application
  WINDOWS et une session RUMBA.


 Cela est particulièrement interessant pour les applications capables
  d'engager un lien DDE à l'aide de "MACROS" comme EXCEL, WORD, etc ...


 C'est aussi réalisable avec Visual Basic qui sait gérer les liens DDE.


 Il s'agit d'un dialogue de type client/serveur entre votre application
  WINDOWS (le client) et RUMBA/400 (le serveur).


 Les liens DDE sont basés sur la notion de message.Quelques exemples :


  FSET("chaine", ligne, col)  = entrée automatique de caractères à l'écran
  KEY(touche-5250)            = envoi de touches 5250 (Entrée,Fx,ROLLUP,...)
  FSEARCH("chaine", li, col)  = recherche d'une chaine de car. sur l'écran
  COPYBLOCK(l1, c1, l2, c2)   = extraction d'informations à partir de RUMBA
                                 vers l'application WINDOWS.

                    


  Cela permet, par exemple, à partir d'un classeur EXCEL de :


       1/ démarrer automatiquement RUMBA.


       2/ ouvrir une session AS/400.


       3/ appeller le pgm qui va afficher les données à copier.


       4/ copier ces données dans EXCEL, afin de ré-actualiser un
           graphique par exemple.


       5/ fermer la session RUMBA.


 Et TOUT CELA SANS ACTION CLAVIER de la part de l'utilisateur, voir même
  automatiquement à l'ouverture du classeur.


ENFIN, RUMBA propose des services indentiques par l'intermédiaire de EHLLAPI
       Emulation High Level Language A P I. 
 qui est en fait un ensemble de DLL WINDOWS utilisabes principalement en C


 (l'utilisation de DLL est beaucoup plus rapide que les liens DDE)


  O D B C.  


 WINDOWS nous à déja montré qu'il était un outil fédérateur:


  sous DOS, quand vous installez une nouvelle imprimante, elle doit être
   reconnue (ou émuler une imprimante reconnue) par votre traitement de
   texte favori.


  Sous WINDOWS, ce problème ne se pose plus.


  En effet, vous installez un gestionnaire sous WINDOWS (un "driver")


  (qui doit etre conforme à la manière dont WINDOWS prévoit de dialoguer
    avec lui, il y a donc une norme)


 Et vos applications vont demander à WINDOWS d'imprimer.


 Nous avons donc ajouté une couche logiciel qui assure la plus parfaite
  transparance.(les docs américaines disent SEAMLESS = sans coutures)



                    


 MICROSOFT est en train d'étendre ce concepts aux connexions entre systèmes.


 il s'agit de WOSA = WINDOWS OPEN SERVICES ARCHITECTURE.
  qui offre une interface entre des applications WINDOWS et des services
   rendus par des systèmes dans un environnement hétérogène et distribué.


  .................   .................   .................
  : Application   :   : Application   :   : Application   :
  :  WINDOWS      :   :  WINDOWS      :   :  WINDOWS      :
  :...............:   :...............:   :...............:
         !                   !                    !
         !-------------------!--------------------!
                             !                                APIs WOSA
                     |                  |
                     |  DLL "clientes"  |                     APIs WOSA
                                !
            !-------------------!-------------------!
     ................   ................... ...............
     : SERVEUR      :   :                 : : autres      :
     :   B de D.    :   : Messagerie      : :  services.. :
     :..............:   :.................: :.............:


 Comme tous les composants WOSA, ODBC se compose d'APIs installées sur la
  plateforme cliente (installées sous forme de DLL sur votre micro)
 et d'un ensemble de pgm SPI (Service Provider Interface) qui s'installent
 dans notre cas sur l'AS/400.


 Une fois votre driver ODBC installé (en deux parties, donc), toute
  application WINDOWS conforme à la norme ODBC peut accéder à des sources
  de données ODBC.


  Applications clientes:
                        ACCES, EXCEL (via MS-QUERY), Visual BASIC,
                         POWER BUILDER, ...
  sources de données   sur micro
                        Bases ACCES, fichier DBF, PARADOX, FOXPRO, ...
                       distantes
                        DB2, SQL/400, DB2/2, HP, DEC, ORACLE, PROGRESS


 La première chose que demande une application cliente au driver c'est
  son niveau de conformité (il en existe TROIS)


   "Qu'est-tu capable de faire ?" (SHOWCASE répond : "niveau 2")


 Puis le dialogue s'engage sur la base de la grammaire SQL.


 vous pouvez donc :


                   1/ demander la liste des tables
                               la structure des tables


                   2/ faire de l'extraction (requêtes)


                   3/ faire des mises à jour, des suppressions, ...


                   4/ Créer des tables, des indexs, ...


                   5/ et, avec le driver ODBC pour AS/400,


                   travailler sous contrôle de validation (COMMIT/ROLLBACK)


 Ce driver est aujourd'hui proposé par la société SHOWCASE.


  il devrait être incorporé dans CLIENT/ACCES (PCS V3R10), probablement
   avec un peu moins de possibilités que SHOWCASE (à suivre...)




 Une autre facon de faire du client serveur est d'établir un dialogue
  entre un programme à vous sur micro et un programme à vous sur l'AS




 Cela est possible sur la base du dialogue APPC (égal à égal)


 en utilisant des APIs fournies avec PCS (sous la forme de DLL)
  et qui vous permettent d'utiliser le routeur (qui doit être actif)


 Tous les languages WINDOWS sachant utiliser des DLLs, peuvent
  mettre en place en tel dialogue






 Nous allons regarder un exemple écrit en Visual Basic (partie micro)
                                    et
                                       en RPG, plus fichier ICF
                                                       (partie AS/400)



                    


  SPLAF4 est un petit outils Client/serveur permettant de visualiser
   la liste des spools en attente sur l'AS/400 auquel vous êtes
   connecté (via PCS), dans une fenêtre WINDOWS.


  Pratique, pour les utilisateurs du driver AFPDS
   afin d'avoir des infos sur les spools générés (est-il déja imprimé ?)
   sans avoir besoin d'ouvrir une session WSF ou RUMBA.


 ASPECT Général de la fenêtre (de haut en bas)


        + un menu déroulant "Actions"


             contenant deux options : Sortie (= F3 ; = Bouton sortie)
                                    : Refresh(= F5 ; = Bouton Refresh)


        + un objet texte (label) = constante, c'est le titre.


        + un objet grille (GRID) = tableau à deux dimensions géré par VB


        + deux "PUSH BUTTON" : SORTIE et REFRESH

                    


  -|                        Spools AS/400                           |v|^ 
  #  Actions                                                           #  
  #                                                                    # 
  #                Liste des spools en attentes                        # 
  #                                                                    # 
  # .................................................................. # 
  # :  Nom      :  Pages    :    Usrdta     :   Etat     :  Outq     : # 
  # :-----------:-----------:---------------:------------:-----------: # 
  # : xxxxxxxxx :    zzz    :    aaaaaaaa   :  *WRITING  :  PRT01    : # 
  # : xxxxxxxxx :    zzz    :               :  *HELD     :  PRTxx    : # 
  # :           :           :               :            :           : # 
  # :           :           :               :            :           : # 
  # :           :           :               :            :           : # 
  # :           :           :               :            :           : # 
  # :           :           :               :            :           : # 
  # :...........:...........:...............:............:...........: # 
  #                                                                    # 
  #   |           |                          |               |         # 
  #   | Exit   F3 |                          | Refresh   F5  |         # 
  #                                                                    # 
  ###################################################################### 


  fonctions évenementielles  
 # 
   la philosophie VISUAL BASIC étant de définir des objets WINDOWS dans 
    une fenètre, de les nommer et de définir leurs propriétés.
 # 
   puis d'associer à ces objets un évenement possible (suivant le type). 
 # 
   VISUAL BASIC propose alors un sous prog. portant le nom OBJET_EVENEMENT 
    à remplir par le programmeur. C'est le cas des sous prog. qui suivent: 


      xxxx_click = click souris sur un objet (bouton,...)
      xxxx_LOAD  = chargement d'une fenètre (la première est chargée à
                                              l'appel du programme)
      xxxx_change= zone de saisie modifiée


    a noter xxxx.text = texte d'une constante ou d'une boite de saisie




   Toutes les fonction EHN---- ont étées copiées à partir de RTRSAMP.GBL
    et représentent des appels aux API PCS/400 contenues dans la DLL
    WINDOWS "EHNAPPC.DLL" (depuis la V2R20, exemples dans I:\QIWSTOOL)


 Evenements gérés par le pgm :


 Chargement du programme (de la feuille)


            = FORM_LOAD (initialisation du dialogue)
                               !
                               !-> EVOKE du pgm SPLAF4CL
                                                   !
                                                   !  ADDLIBLE AF4TOOL
                                                   !   puis appel
                                                   v
                dialogue APPC  <-------SPLICF<--SPLAF4 qui utilise SPLICF
                                   !
                                   !
                                RMTLOCNAME(*REQUESTER)
 click sur Bouton Refresh
            = REFRESH_CLICK


 Click sur bouton Exit
            = EXIT_CLICK

                    


 Option Refresh du menu
            = REFRESHM_CLICK execute REFRESH_CLICK


 Option Exit du menu
            = EXITM_CLICK execute EXIT_CLICK


 L'objet grille se manipule de la facon suivante:


   pour acceder à une cellule
                                   Grille.ROW=x
                                   Grille.COL=y


   puis pour la renseigner
                                   Grille.text= 'valeur'




   Pour fixer le nombre de lignes
                                   Grille.ROWS=x


   Le nombre de colonnes à été figé à 5, lors de la conception.

                    


  SPLAF4.FRM  (pgm Visual Basic V3.0) 
  __________


Dim datatosend As String * 5
Dim FIN As String
Dim nblignes As Integer
Dim largecol As String
Dim f3use As String
 ________________________________________
 Sub Form_Load () 'FONCTION CHARGEE A L'APPEL DU PGM
chargegrille
End Sub
 __________________________________________
 Sub chargegrille ()
   Screen.MousePointer = 11
    msg.Caption = "chargement en cours ....."
    initgrille
    Show
    splaf4.Refresh
   ' par defaut "liste vide"
    grille.Row = 1

    grille.Col = 0
    grille.Text = "(Liste vide)"


    Do
        nblignes = nblignes + 1
        uneligne
        datatosend = "SUITE"
    Loop Until FIN = "O"
    grille.Row = 1
    grille.Col = 0
    msg.Caption = " "
   Screen.MousePointer = 0
End Sub
 ________________________________________
 Sub refresh_click () 'BOUTON REFRESH
chargegrille
End Sub
 ________________________________________
 Sub refreshm_Click () 'OPTION DU MENU OU F5
refresh_click
End Sub
____________________________________________

 Sub initgrille ()
' Declare les variables locales.
    Dim col2
    ' Efface le contenu de la grille.
     grille.Rows = 2
     nblignes = 0
     datatosend = "DEBUT"
    ' Reinitialise l'image dans la cellule 0, 0
    grille.Row = 0
    grille.Col = 0
   ' Place les en-tetes de col dans la 1ere ligne.
    grille.Text = "Nom"
    grille.Col = 1
    grille.Text = "Pages"
    grille.Col = 2
    grille.Text = "Usrdta"
    grille.Col = 3
    grille.Text = "Etat"
    grille.Col = 4
    grille.Text = "Outq"
    'Centre le texte dans la 1ere col.
    For col2 = 0 To 4

    grille.FixedAlignment(col2) = 2
    If largecol <> "O" Then
        grille.ColWidth(col2) = grille.ColWidth(col2) * 2
    End IfSPLAF4.FRM - 3


    Next col2
    ' ne pas retailler les colonnes
    largecol = "O"
    ' msg liste en cours ...
    grille.Row = 1
    grille.Col = 0
    grille.Text = "En cours..."
    grille.Col = 1
    grille.Text = ""
    grille.Col = 2
    grille.Text = ""
    grille.Col = 3
    grille.Text = ""
    grille.Col = 4
    grille.Text = ""
End Sub
__________________________________________

 Sub uneligne () 'RECUPERE UN SPOOL (DIALOGUE APPC)
' If there is no conversation active, it will be allocated at this time.
 Dim Header As String * 4           ' String to receive formatted header
Dim record As String * 46          ' String to receive record from the AS/400
       ' String to hold data to be sent
     If ConvId = 0 Then             ' If conversation is not active
        rc% = Allocate()           ' Allocate a conversation
    End If
     Call AsciiToEbcdic(datatosend)               ' Convert data to EBCDICSPLAF4


    If Send(datatosend) = 0 Then                 ' Send data to the AS/400
        If RecvW(4, Header) = 0 Then             ' Receive 4 byte header
            If RecvW(46, record) = 0 Then        ' Receive 46 byte record
                Call EbcdicToAscii(record)       ' Convert record to ASCII
                FIN = Left$(record, 1)
                If FIN <> "O" Then
                    If nblignes > 1 Then
                        grille.Rows = (nblignes + 1)
                    End If
                    grille.Row = nblignes
                    grille.Col = 0
                    grille.Text = Mid$(record, 2, 10) ' nom

                    grille.Col = 1
                    grille.Text = Mid$(record, 12, 5) ' pages
                    grille.Col = 2
                    grille.Text = Mid$(record, 17, 10) ' usrdta
                    grille.Col = 3
                    grille.Text = Mid$(record, 27, 10) ' etat
                    grille.Col = 4
                    grille.Text = Mid$(record, 37, 10) ' outq
                 End If
                rc% = RecvW(0, GetSend$)     ' Do one more receive to get change
                                             ' direction indicator (WhatReceived
            End If
        End If
    End If


End Sub
 ________________________________________
Sub exit_click () 'BOUTON EXIT
deallocate
f3use = "O"
End
End Sub

 ________________________________________
 Sub exitm_Click () 'OPTION DU MENU OU F3
exit_click
End Sub
 ________________________________________
 ' SORTIE DU PGM DEMANDEE
 Sub Form_QueryUnload (cancel As Integer, UnloadMode As Integer)
 If f3use <> "O" Then
    MsgBox "Conversations en cours, Utilisez Exit.", 16, "Attention"
    cancel = 1
 End If
End Sub




' FONCTION COPIÉES   PARTIR DES OUTILS PCS (QIWSTOOL)
 ______________________________________________________
Function Allocate () As Integer
' This function allocates a conversation with AS/400 program
' splaf4CL in library AF4tool
' The conversation has the following characteristics:
'     Mapped conversation
'     271 byte router buffer (minimum required)

'     Sync Level - none
'     No pip data
' If successful, the conversation ID is returned
     PipData$ = Chr$(0)  ' This routine sends no pip data
' systeme par defaut
    getdefsys
    rc% = EHNAPPC_Allocate(hWnd, 271, EHNAPPC_MAPPED, EHNAPPC_SYNCLEVELNONE, sys
me, "SPLAF4CL.AF4TOOL", 0, PipData$, ConvId)
    If rc% <> 0 Then
       FIN = "O"
       MsgBox ("Allocate impossible /code retour : " + Str$(rc%))
    End If
    Allocate = rc%
 End Function
 ___________________________________________
Sub deallocate ()
' This subroutine deallocates the active conversation
' specified in the ConvID global variableSPLAF4.FRM - 2


    rc% = EHNAPPC_Deallocate(hWnd, ConvId, EHNAPPC_DEALLOCATESYNCLEVEL)
 End Sub
 Sub EbcdicToAscii (StrName As String)

' This routine converts a String from EBCDIC to ASCII
 Dim tlen As Integer
     Target$ = Space$(Len(StrName))       ' Initialize target string
    tlen = Len(Target$)                  ' Set target string length
    rc% = EHNDT_EBCDICToASCII(hWnd, StrName, Target$, Len(StrName), tlen)
    StrName = Left$(Target$, tlen)       ' Move target to original string
 End Sub
 _________________________________________
Sub getdefsys ()
' This routine gets the default system into variable DefSys$
     sysname = Space$(10)
    rc% = EHNAPPC_GetDefaultSystem(hWnd, sysname)
 End Sub
 __________________________________________
Sub AsciiToEbcdic (StrName As String)
' This routine converts a String from ASCII to EBCDIC
 Dim tlen As Integer
     Target$ = Space$(Len(StrName))       ' Initialize target string
    tlen = Len(Target$)                  ' Set target string length
    rc% = EHNDT_ASCIIToEBCDIC(hWnd, StrName, Target$, Len(StrName), tlen)
    StrName = Left$(Target$, tlen)       ' Move target to original string
 End Sub

 _______________________________________
Function RecvW (Rlen As Integer, buff As String) As Integer
' This function Receives data from the Router for the length specified
' and returns it in the string specified.
     IntBuff$ = Space$(Rlen)    ' Set up an intermediate buffer to receive data
    rc% = EHNAPPC_ReceiveAndWait(hWnd, ConvId, EHNAPPC_BUFFER, Rlen, IntBuff$, W
tRec%, Rts%, ActLen%)
    If rc% <> 0 Then
        FIN = "O"
        MsgBox ("Reception en erreur / code retour : " + Str$(rc%))
    Else
        buff = Left$(IntBuff$, ActLen%)   ' Move received data to output string
        Rlen = ActLen%                    ' Return actual length
    End If
    RecvW = rc%                           ' Return return code
 End Function
 _______________________________________
 Function Send (Sdata As String) As Integer
' This function sends the specified data to the AS/400
' It does not wait for a reply
' The data sent will be preceeded by the proper GDS header (llID)
 Dim GDSHdr As String * 4     ' GDS Header

Dim FData As String          ' Formatted Data (header + data)
     Call flip(Len(Sdata) + 4, Dlen$)             ' Get length into proper forma
    GDSHdr = Dlen$ + Chr$(&H12) + Chr$(&HFF)     ' Format of GDS header is llID
ere ID=x'12FF'
    FData = GDSHdr + Sdata                       ' Put together formatted data
    rc% = EHNAPPC_SendData(hWnd, ConvId, Len(FData), FData, rqs%)
    If rc% <> 0 Then
        FIN = "O"
        MsgBox ("Envoi en erreur / code retour : " + Str$(rc%))
    End If
    Send = rc%                                   ' Return return code
 End Function




  PGM CL appellé par SPLAF4.EXE sur le micro: 


             PGM
              MONMSG CPF0000


             ADDLIBLE AF4TOOL
             CALL SPLAF4
             ENDPGM

   RPG utilisant le fichier ICF 
      *
      * Ce pgm dialogue avec un pgm sur micro via fichier ICF
      *
      * il recoit le code "DEBUT" OU "SUITE"
      *    --> renvoi la LISTE DES SPOOLS
     H
     FSPLICF  CF  E                    WORKSTN
     F                                              KNUM        1
     F                                              KINFDS FEEDBK
     F                                              KINFSR EXCPTH
     IFEEDBK      DS
     I                                       38  45 FMTNM
     I                                      401 404 MAJMIN
     I                                      401 402 MAJCOD
     I                                      403 404 MINCOD
     IPAGA        DS
     I                                        1   50PAGDEC
      * QUSLSPL ******************************************************
     ILIST        DS
     I                                       51  66 JOBID
     I                                       67  82 SPLFID

      * QUSRSPLA *****************************************************
     IRCVVAR      DS
     I                                    B   1   40BYTRTN
     I                                    B   5   80BYTVAL
     I                                       67  76 NOM
     I                                       91 100 USRDTA
     I                                      101 110 ETAT
     I                                    B 141 1440PAGEB
     I                                      183 192 OUTQ
      ****************************************************************
      * ENTETE USER SPACE
     IRTVINF      DS
     I                                    B   1   40OFFS
     I                                    B   5   80TAILLE
     I                                    B   9  120NBSPL
     I                                    B  13  160LGPOST
      * DECLARATION DE VARIABLES BINAIRES
     IBINDS       DS
     I                                    B   1   40DEBUT
     I                                    B   5   80LG
     I                                    B   9  120LGRCV
     I I            192                   B  13  160LGVAR

     I I            0                     B  17  200RCVSPN
      * QUALIF/ USER SPACE ET CMDE
     IQUALDS      DS
     I I            'SPLAF4'                  1  10 SPCNAM
     I I            'QTEMP'                  11  20 SPCLIB
     I                                        1  20 USRSPC
      * CODE ERREUR API
     IERRDS       DS
     I                                    B   1   40LGDS
     I                                    B   5   80LGERR
     I                                        9  15 MSGID
     I                                       16  16 RESERV
     C* DEBUT DU PGM                                                  *
     C           'SPLDEV'  ACQ  SPLICF
     c* création du *USRSPC et lecture du fichier ICF
     C                     EXSR CRTUS
     C                     READ CODEF                    88
     C           *IN82     DOWEQ*OFF
     C           *IN66     ANDEQ*OFF
      * premier appel ou REFRESH
     C           CODE      CASEQ'DEBUT'   INIT
     C                     ENDCS

     C                     EXSR LECTUR
     C                     WRITEENVOIF
      *
     C                     READ CODEF                    88
     C                     ENDDO
     C* Demande de fin de travail par le micro (66 =erreur, 82 = DETACH)
     C           'SPLDEV'  REL  SPLICF
     C                     CLOSE*ALL
     C           ARRET     TAG
     C                     EXSR DLTUS
     C                     MOVE *ON       *INLR
     C                     RETRN
      *
      *
     C* Sous programme de gestion des erreurs/ fichier ICF            *
     C           EXCPTH    BEGSR
     C           MAJCOD    IFGT '00'
     C                     GOTO ARRET
     C                     ENDIF
     C                     ENDSR
      *
     C           CRTUS     BEGSR

     C                     MOVEL'LISTSPL 'EXT    10
     C                     Z-ADD1024      TAILLE
     C                     MOVE ' '       INT    10
     C                     MOVEL'*USE'    AUT    10
     C                     MOVEL' '       TXT    50
      * dlt du user space si présent dans QTEMP
     C                     EXSR DLTUS
      * CREATION USER SPACE PAR API QUSCRTUS
     C                     CALL 'QUSCRTUS'
     C                     PARM           USRSPC
     C                     PARM           EXT
     C                     PARM           TAILLE
     C                     PARM           INT
     C                     PARM           AUT
     C                     PARM           TXT
     C                     ENDSR
     C           INIT      BEGSR
      * REMPLISSAGE DU USER SPACE VIA API
     C                     CALL 'QUSLSPL'              99
     C                     PARM           USRSPC
     C                     PARM 'SPLF0100'FMT     8
     C                     PARM '*CURRENT'PROFIL 10

     C                     PARM '*ALL'    POUTQ  20
     C                     PARM '*ALL'    PFORM  10
     C                     PARM '*ALL'    PUSRD  10
     C           *IN99     IFEQ *ON
     C                     Z-ADD0         NBSPL
     C                     ELSE
      * EXTRACTION DES INFOS D'ENTETE (donne le nombre de spools)
     C                     Z-ADD125       DEBUT
     C                     Z-ADD16        LG
     C                     CALL 'QUSRTVUS'
     C                     PARM           USRSPC
     C                     PARM           DEBUT
     C                     PARM           LG
     C                     PARM           RTVINF
     C                     ENDIF
     C           NBSPL     IFGT 0
     C                     Z-ADDLGPOST    LG
     C           OFFS      ADD  1         DEBUT            1ER POSITION
     C                     ENDIF
     C                     Z-ADD0         NBLU    50
     C                     ENDSR
      *

      * LECTURE D'UN SPOOL
     C           LECTUR    BEGSR
     C                     ADD  1         NBLU
     C           NBLU      IFGT NBSPL
     C                     MOVE 'O'       FIN
     C                     ELSE
     C                     MOVE 'N'       FIN
      * EXTRACTION D'UN POSTE PAR API QUSRTVUS (-> DONNE LE NOM )
     C                     CALL 'QUSRTVUS'
     C                     PARM           USRSPC
     C                     PARM           DEBUT
     C                     PARM           LG
     C                     PARM           LIST
     C                     CALL 'QUSRSPLA'             98            détails
     C                     PARM           RCVVAR
     C                     PARM           LGVAR
     C                     PARM 'SPLA0100'FMT
     C                     PARM '*INT'    RCVJOB 26
     C                     PARM           JOBID
     C                     PARM           SPLFID
     C                     PARM '*INT'    RCVSPL 10
     C                     PARM           RCVSPN

      *
     C           *IN98     IFEQ *OFF
     C                     Z-ADDPAGEB     PAGDEC
     C                     ELSE
     C                     MOVEL' *ERR'   NOM
     C                     MOVE *BLANK    PAGA
     C                     MOVE *BLANK    USRDTA
     C                     MOVE *BLANK    ETAT
     C                     MOVE *BLANK    OUTQ
     C                     ENDIF
      *
     C                     ADD  LG        DEBUT
     C                     ENDIF
     C                     ENDSR
      *
     C           DLTUS     BEGSR
      * DLT DU USER SPACE (Y COMPRIS EN CAS DE PLANTUS) API QUSDLTUS
     C                     Z-ADD16        LGDS
     C                     CALL 'QUSDLTUS'             99
     C                     PARM           USRSPC
     C                     PARM           ERRDS
     C                     ENDSR


 Source du fichier ICF (+ passer la commande, après la création)
        ADDICFDEVE FILE(SPLICF) PGMDEV(SPLAF4) RMTLOCNAME(*REQUESTER)
                                                                          
     A                                      INDARA
      * 66 = erreur
     A                                      RCVFAIL(66)
      * format lu par le pgm RPG (reception d'informations)
     A          R CODEF
      * 82 = demande d'arret de la conversation de la part du micro
      * (sinon CODE contient "DEBUT" OU "SUITE"
     A                                      RCVDETACH(82)
     A            CODE           5A
     A
      * format écrit par le pgm RPG (envoi d'informations)
     A          R ENVOIF
     A            FIN            1A
     A            NOM           10A
     A            PAGA           5A
     A            USRDTA        10A
     A            ETAT          10A
     A            OUTQ          10A


début