APIs portant sur la notion de spool QUSLSPL donne une liste de spools dans un user space QUSRSPLA renvoi (dans une variable) des informations concernant un spool depuis la V2R20 : QSPOPNSP ouvre un fichier spool (pour lecture ultérieure) QSPGETSP place le contenu d'un spool (ouvert par QSPOPNSP) dans un user space. QSPCRTSP crée un fichier spool (en utilisant la même strcuture que celle renvoyée par QUSRSPLA ==> utile pour dupliquer) QSPPUTSP génére le contenu d'un spool (créé par QSPCRTSP) avec le contenu d'un user space (généré par pgm ou par QSPGETSP) QSPCLOSP ferme un fichier spool ouvert par QSPOPNSP ou crée par QSPCRTSP |
DUPLICATION D'UN SPOOL à l'aide des commandes système la première technique est la plus simple, mais elle est réservée au texte Recherche des informations d'un spool par QUSRSPLA (format SPLA0200) Création d'un fichier physique de travail RCDLEN(lg d'une ligne + 1) CPYSPLF .......... CTLCHAR(*FCFC) ouverture du fichier physique (modification éventuelle du texte) Modification éventuelle des paramètres (FORMAT SPLA0200) OVRPRTF QSYSPRT CTLCHAR(*FCFC) + paramètres du format SPLA0200 CPYF du PF de travail TOFILE(QSYSPRT) Suppression du fichier de travail Les caractères de contrôle sont placés à gauche du texte sur 1 octet et sont : ' ' = espace d'1 ligne, '0' = 2 lignes, '-' = 3 lignes '+' = pas d'espace '1' = saut de page ('x' (x= 1 à 9) = saut cannal x) |
DUPLICATION D'UN SPOOL par API (Flot AFP supporté) création d'un user space recherche des informations d'un spool par QUSRSPLA (format SPLA0200) ouverture de l'original (QSPOPNSP) remplissage du user space (QSPGETSP) fermeture de l'original (QSPCLOSP) modification éventuelle des paramètres création du nouveau spool (QSPCRTSP) écriture du nouveau spool (QSPPUTSP) fermeture du nouveau spool (QSPCLOSP) suppression du user space intermédiaire |
Pour dupliquer le spool sur un système distant il faut transmettre le format SPLA0200 et le contenu du user space à l'aide d'un dialogue APPC. (pgm à pgm via fichiers ICF) Les données ne seront pas transférées dans leur totalité mais par buffer (voir le détail des user space) pgm1 EVOKE(pgm2) ..................!!.............> pgm2 !! QUSRSPLA !! pgm2 !! envoi du format SPLA0200 -----------!!---------------> QSPCRTSP !! création *USRSPC QSPOPNSP !! !! QSPGETSP !! !! !>lecture *USRPSC !! réception<-------! ! envoi ----------------------!!----------------> écriture *USRSPC ! !----------- !! -----! QSPCLOCP !! création =QSPPUTSP fin de la transaction / ............!!.............. / QSPCLOSP |
La version V2R30 apporte en plus une API de transformation de données du flot AFPDS vers un flot ASCII : IBM, HP ou POSTSCRIPT (Depuis la V3R60, cela est intégré dans la gestion des imprimantes ASCII) Elle fonctionne avec un user-space en entrée et un user-space en sortie Il suffit donc 1/ de créer user space 1 et user psace 2 2/ demander le placement du contenu du spool (QSPGETSP) dans user space 1 3/ d'appeller l'API QWPZTAFP (user space 1 en entrée,user space 2 en sortie) 4/ Puis de lire le contenu de user space 2 et d'écrire par programme en utilisant un PRTF avec DEVTYPE(*USERASCII) (le système ne fait que transmettre les données à l'unité) Voir membre TWPTAFP dans QUSRTOOL/TAASYSC |
Détail des APIs: Liste de fichiers spool : + QUSLSPL - CHAR(20) <-USRSPC(10c)-><-biblio(10c)--> - CHAR(8) Format API (SPLF0100, SPLF0200) - CHAR(10) Profil utilisateur . un nom . *CURRENT . *ALL - CHAR(20) <-OUTQ(10c)-><-biblio(10c)-> . un nom . un nom . *ALL . ou *CURLIb ou *LIBL - CHAR(10) FORMTYPE . une valeur . *STD . *ALL - CHAR(10) USRDTA . une valeur . *ALL |
Attributs d'un fichier spool: + QUSRSPLA - CHAR(?) Variable de retour - BIN(4,0) Lg de la variable de retour - CHAR(8) Format API (SPLA0100, SPLA0200) - CHAR(26) <-job(10c)-><-user(10c)--><-n°(6c)-> valeurs spéciales . * = job en cours . *INT (param suivant) - CHAR(16) Identification interne d'un travail Renvoyé par API QUSLJOB (liste jobs) QUSLSPL (liste spools) dans un user space. - CHAR(16) Indentification interne du spool Renvoyé par API QUSLSPL |
Attributs d'un fichier spool: + QUSRSPLA (SUITE) - CHAR(10) Nom du spool ou *INT si le paramètre précédent est renseigné - BIN(4,0) N° du spool (si nom <> *INT) valeurs spéciales . 0 = *ONLY .-1 = *LAST En ce qui concerne le travail il est possible de renseigner: - nom + user - nom + n° - nom + user + n° |
ouverture d'un fichier spool: + QSPOPNSP - BIN(4) ID du spool en retour (à utiliser avec QSPGETSP) - CHAR(26) <-job(10c)-><-user(10c)--><-n°(6c)-> valeurs spéciales * = job en cours *INT (param suivant) - CHAR(16) Identification interne d'un travail Renvoyé par API - CHAR(16) Indentification interne du spool Renvoyé par API - CHAR(10) Nom du spool ou *INT si param. précédent renseigné - BIN(4,0) N° du spool (si nom <> *INT) . 0 = *ONLY, -1 = *LAST - BIN(4,0) nombre de buffer à "lire" via QSPGETSP -1 =: lecture complète 1,8,16,24,32 ou multiple de 32 (8 conseillé) - CHAR(??) code erreur |
Création d'un fichier spool: + QSPCRTSP - BIN(4) ID du spool en retour (à utiliser avec QSPPUTSP) - CHAR(3292) attributs du spool (format SPLA0200) - CHAR(??) code erreur Le propriètaire du spool est indiqué dans la zone USRPRF ,s'il s'agit du profil en cours, le spool appartient au job en cours, sinon le profil en cours doit avoir les droits *SPLCTL et le spool appartiendra au job QPRTJOB (déja utilisé lors de changement de profil, via QWTSETP) cette api utilise le format SPLA0200 (infos renvoyées par QUSRSPLA) pour des raisons de commodité, mais elle n'utilise pas toutes les zones. |
Détail du format SPLA0200 utilisé par DE A type description QSPCRTSP ? 1 4 B(4) nbr d'octets retournés(ici nbr d'octets utilisés) O 5 8 B(4) nbr d'octets disponibles N 9 16 C(8) format = SPLA0200 O 17 32 C(16) identifaction interne du job N 33 48 C(16) " " du spool N 49 58 C(10) nom du job N 59 68 C(10) profil utilisateur (voir particularités) O 69 74 C(6) n° du job N 75 84 C(10) nom du spool O 85 88 B(4) N° du spool N 89 98 C(10) type d'imprimé (*STD,...) O 99 108 C(10) USRDTA O 109 118 C(10) état (*READY,*PENDING,*SAVED,*HELD,...) N 119 128 C(10) disponibilité(*SCHEDULE,*FILEEND,*IMMED) O 129 138 C(10) retenu HOLD(*YES,*NO) O 139 148 C(10) sauvegardé SAVE(*YES,*NO) O 149 152 B(4) nombre de pages O 153 156 B(4) nombre de pages déja écrites N 157 160 B(4) première page (-1=dernière page,0=début, ou un chiffre) O |
Détail du format SPLA0200 utilisé par DE A type description QSPCRTSP ? 161 164 B(4) dernière page (0=tout, ou un chiffre) O 165 168 B(4) dernière page imprimée N 169 172 B(4) redémarrage (-1=*STRPAGE,-2=*ENDPAGE, ou un chiffre) O 173 176 B(4) nombre de copies total N 177 180 B(4) nombre de copies restant O 181 184 B(4) LPI (en dixième, 40 = 4 LPI) O 185 188 B(4) CPI (idem) O 189 190 C(2) priorité de sortie(1 - 9) dans les limites du profil O 191 200 C(10) OUTQ (blanc = dft) O 201 210 C(10) bibliothèque/OUTQ O 211 217 C(7) date d'ouverture du spool N 218 223 C(6) heure d'ouverture N 224 233 C(10) PRTF utilisé à la création O 234 243 C(10) bibliothèque/PRTF O 244 253 C(10) Pgm ayant généré ce spool O 254 263 C(10) bibliothèque/PGM O 264 278 C(15) code accounting O 279 308 C(30) PRTTXT O 309 312 B(4) lg des enregistrements(-1 = *RCDFMT,pour prtf EXTERNES) O |
Détail du format SPLA0200 utilisé par DE A type description QSPCRTSP ? 313 316 B(4) MAXRCD (0 = *NOMAX) O 317 326 C(10) type d'unité(PRINTER,DISKETTE,TAPE) N 327 336 C(10) type d'imprimante (*AFPDS,*IPDS,*SCS,*USERASCII,...) O 337 348 C(12) nom du document (impression office) O 349 412 C(64) dossier " " O 413 420 C(8) procedure ayant générée ce spool (env.36) O 421 430 C(10) FIDELITY O 431 431 C(1) remplacement des caractères non imprimables O 432 432 C(1) caractère de remplacement O 433 436 B(4) hauteur de page O 437 440 B(4) largeur de page O 441 444 B(4) nbr de séparateurs O 445 448 B(4) ligne d'overflow O 449 492 --- différentes infos DBCS O 493 502 C(10) jeu de caractère graphique (partie g.du CHRID) ou *DEVD O 503 512 C(10) page de code (partie D.du CHRID) ou *DEVD O 513 522 C(10) Définition d'imprimé O 523 532 C(10) bibliothèque/formdf O 533 536 B(4) tiroir O |
Détail du format SPLA0200 utilisé par DE A type description QSPCRTSP ? 537 546 C(10) Police (id police ou *DEVD,*CPI) O 547 552 C(6) id du spool en env. 36 N 553 556 B(4) PAGRTT (-1=*AUTO,-2=*DEVD,-3=*COR,0,90,180,270) O 557 560 B(4) JUSTIFY (% de justification à droite=0,50,100) O 561 570 C(10) DUPLEX (*FORMDF,*NO,*YES,*TUMBLE) O 571 580 C(10) FOLD (*YES,*NO) O 581 590 C(10) CTLCHAR (*NONE,*FCFC) O 591 600 C(10) ALIGN (*YES,*NO) O 601 610 C(10) PRTQLTY (*STD,*DRAFT,*NLQ,*FASTDRAFT) O 611 620 C(10) FORMFEED (*DEVD,*CONT,*CUT,*AUTOCUT) O 621 728 C(108) informations diskette N 729 732 B(4) nbr total d'enregistrements O 733 736 B(4) MULTIUP (nbr logique de pages/page physique) O 737 746 C(10) nom du fond recto ou *NONE O 747 756 C(10) bibliothèque/fond de page O 757 764 15,5 Packé : position verticale du fond de page O 765 772 15,5 packé : position horizontale " " " O 773 782 C(10) nom du fond verso ou *NONE O 783 792 C(10) bibliothèque/fond de page O |
Détail du format SPLA0200 utilisé par DE A type description QSPCRTSP ? 793 800 15,5 Packé : position verticale du fond de page recto O 801 808 15,5 packé : position horizontale " " " " O 809 818 C(10) unité de mesure/UOM (*CM,*INCH) O 819 828 C(10) nom de la définition d'imprimé (PAGDFN) O 829 838 C(10) bibliothèque/définition d'imprimé O 839 848 C(10) entreligne (*SINGLE,*DOUBLE,*TRIPLE,*CTLCHAR) O 849 856 15,5 packé : taille de point/police O 857 860 B(4) taille maxi d'un enregistrement(le + long,pour *AFPDS) O 861 864 B(4) taille du buffer ( 512 : recommandé pour SCHEDULE(*IMMED) O 4079 : recommandé pour autres valeurs 865 870 C(6) niveau de version du spool (VxRxMx) O 871 886 C(16) table des polices codées (4 x 4,utilisé sous MVS et VM) O 887 896 C(10) utilisation/canal (*NORMAL ou ' ' = param suivant) O 897 944 C(48) valeurs de canal (12 fois BIN(4)) O 945 952 C(10) graphique pour type d'imprimante(4214,4234,522X,IPDS) O 953 962 C(10) format (*FIXED,*VARIABLE) O 963 964 C(2) réservé N 965 972 15,5 packé : hauteur du papier (en pouce) dans le tiroir 1 O 973 980 15,5 packé : largeur du papier (en pouce) dans le tiroir 1 O |
Détail du format SPLA0200 utilisé par DE A type description QSPCRTSP ? 981 988 15,5 packé : hauteur du papier (en pouce) dans le tiroir 2 O 989 996 15,5 packé : largeur du papier (en pouce) dans le tiroir 2 O 997 1000 B(4) nombre de buffer N 1001 1004 B(4) Largeur maxi (en nombre de caractères) O 1005 1008 B(4) largeur alternée (office uniquement) O 1009 1012 B(4) hauteur alternée (office uniquement) O 1013 1016 B(4) LPI alterné (office uniquement) O 1017 1018 C(2) Indicateur traitement de texte/38 O 1019 1019 C(1) fichier ouvert (Y = oui, doit être N pour duplication) O 1020 1020 C(1) nbr de page est-il estimé ? (Y,N) O 1021 1021 C(1) arret du spool lors d'un dépassement de capacité (Y ou N) O 1022 2022 C(1) "table référence characters" pour impr 1043 (Y ou N) O 1023 1023 C(1) redéfinition de caractères (Y ou N) O 1024 1024 C(1) CPI modifié en cours d'impression (Y ou N) O 1025 1025 C(1) TRANSPARENCY utilisé (Y ou N) O 1026 1026 C(1) DBCS (Y ou N) O 1027 1027 C(1) rotation DBCS (Y ou N) O 1028 1028 C(1) code page étendu modifié en cours d'impression (Y ou N) O 1029 1029 C(1) surimpression en gras ???? (Y ou N) O |
Détail du format SPLA0200 utilisé par DE A type description QSPCRTSP ? 1030 1030 C(1) commandes reconnues uniquement par 3812 (Y ou N) O 1031 1031 C(1) LPI modifié en cours d'impression (Y ou N) O 1032 1032 C(1) erreur graphique (Y ou N) O 1033 1033 C(1) commandes non reconnues par 5219 (Y ou N) O 1034 1034 C(1) commandes non reconnues par 3812 (Y ou N) O 1035 1035 C(1) il y a-t-il des données encadrées (Y ou N) O 1036 1036 C(1) ce spool contient-il des codes à barre O 1037 1037 C(1) couleur ? (Y ou N) O 1038 1038 C(1) tiroir modifié en cours d'impression (Y ou N) O 1039 1039 C(1) CHRID modifié en cours d'impression (Y ou N) O 1040 1040 C(1) LPI modifié en cours d'impression (Y ou N) O 1041 1041 C(1) ce spool contient-il plusieurs polices (Y ou N) O 1042 1042 C(1) caractères gras? (Y ou N) O 1043 1043 C(1) PAGRRT n cours d'impression (Y ou N) O 1044 1044 C(1) ce spool contient-il des soulignements (Y ou N) O 1045 1045 C(1) ce spool contient-il des surlignements (Y ou N) O 1046 1046 C(1) ce spool a-t-il été construit avec SDD (Y ou N) O 1047 1047 C(1) ce spool contient-il un saut de page final (Y ou N) O 1048 1048 C(1) données SCS (non IPDS) (Y ou N) O |
Détail du format SPLA0200 utilisé par DE A type description QSPCRTSP ? 1049 1049 C(1) flot de données généré par l'utilisateur USRDFN ou office O 1050 1050 C(1) ce spool contient-il du graphisme (Y ou N) O 1051 1051 C(1) commandes SCS inconnues ? (Y ou N) O 1052 1052 C(1) ASCII transparency (x'03/lg cde/cde ASCII) Y ou N O 1053 1053 C(1) ce spool contient-ol un flot de données PRPQ/36 (Y ou N) O 1054 1054 C(1) ce spool a-t-il été généré par OFFICE (Y ou N) O 1055 1055 C(1) LPI non supporté (OFFICE uniquement) O 1056 1056 C(1) message CPA3353 "*SCS non suporté par.." envoyé ? O 1057 1057 C(1) commande SCS "set exception" contenue (Y ou N) O 1058 1058 C(1) ce spool contient-il le caractère "retour chariot" ? O 1059 1059 C(1) erreurs de positionnement détectées ?? (Y ou N) O 1060 1060 C(1) ce spool contient-il un caractère incorrecte (Y ou N) O 1061 1061 C(1) info lg codée sur 8 octets contenue dans le spool (AFPDS) O 1062 1062 C(1) ce spools contient-il le caractère X'5A' (AFPDS) O 1063 1063 C(1) réservé N 1064 1068 B(4) nbr de polices équivalentes (IPDS) O 1069 1072 B(4) nbr de bibliothèques de ressources N 1073 2225 C(1153) table des polices équivalentes O 2226 2856 C(631) tables des bibliothèques de ressources N |
Détail du format SPLA0200 utilisé par DE A type description QSPCRTSP ? 2857 2857 C(1) ce spool contient-il des données crées par AFPDS (Y ou N) O 2858 2858 C(1) Le CHRID vient-il du CCSID du job (Y ou N) O 3152 3160 15,5 Packé : position verticale marge recto O 3161 3168 15,5 Packé : position horizontale marge recto O 3169 3176 15,5 Packé : position verticale marge verso O 3177 3184 15,5 Packé : position horizontale marge verso O 3185 3192 15,5 Packé : hauteur de page en unité de mesure O 3193 3200 15,5 Packé : largeur de page " " " " O 3201 3210 C(10) unité de mesure (*ROWCOL, *UOM) O 3211 3211 C(1) ce spool utilise-t-il des ressources AFPDS (via SDD) O 3212 3221 C(10) FNTCHRSET (un nom ou *FONT) O 3222 3231 C(10) bibliothèque/FNTCHRSET O 3232 3241 C(10) nom d'une page de code O 3242 3251 C(10) bibliothèque/page de code O 3252 3261 C(10) CDEFNT (AFPDS uniquement) O 3262 3271 C(10) bibliothèque/CDEFNT O 3272 3281 C(10) police DBCS O 3282 3291 C(10) bibliothèque/ police DBCS O 3292 3292 C(1) ce spool a-t-il été généré par API QSPCRTSP Fin. N |
fermeture d'un spool : + QSPCLOSP - BIN(4) ID du spool renvoyée par QSPCRTSP ou QSPOPNSP - CHAR(??) code erreur "lecture" d'un spool : + QSPGETSP - BIN(4) ID du spool renvoyée par QSPOPNSP - CHAR(20) user space qualifié - CHAR(8) format = SPFR0100:infos sur les données SPFR0200:infos + les données (fmt utilisé par QSPPUTSP) SPFR0300:données buffer par buffer. |
- BIN(4) n° du buffer à lire (-1 = suivant) - CHAR(10) action en cas de lecture par buffer et fin du spool atteinte *WAIT attente (indéfinie) *ERROR erreur ou message - code erreur "écriture" d'un spool : + QSPPUTSP - BIN(4) ID du spool renvoyée par QSPCRTSP - CHAR(20) user space qualifié - code erreur |
Pour ces deux APIs la structure du user space est spécifique SPFR0100 et SPFR0200 SPFR0300 ............................................................................ : --entète(E)--------------------- : --entète(E)------------------------- : : ! offset du premier buffer (B) ! :-!-offset du premier buffer (D) ! : : ! ! :|! taille des données imprimables ! : : ! ! :|! ! : : -------------------------------- :|------------------------------------ : : :| : : !---infos buffer(B)------------! :>--données imprimables(D)----------- : : ! offset infos générales ! : ! ................... ^ ! : : ! offset infos/page ! : ! ................... ! ! : : ! taille infos/page ! : ! ! ! : : ! offset données imprimables ! : ! ! ! : : ! taille données imprimables ! : ! ! ! : : ! infos générales(I) ! : ! taille ! : : !//////////////////////////////! : ! ! ! : : ! infos/page buffer 1 (P) ! : ! v ! : : ! données impr buffer 1 (D) ! : !---------------------------------! : : ! .............. ! : : : !------------------------------! : : :...................................:......................................: |
Pour ces deux APIs la structure du user space est spécifique ENTETE GENERALE (E) DE A type description 1 64 C(64) entète utilisateur 65 68 B(4) taille de l'entète 69 72 C(4) niveau de la structure (0200 = V2) 73 78 C(6) niveau de version du spool (VxRxMx) 79 86 C(8) format (SPFR0100 à 0300) 87 87 C(1) niveau d'informations I = incomplet P = complet mais partiel (manque de place) C = complet 88 88 C(1) reservé 89 92 B(4) taille utilisée 93 96 B(4) offset (déplacement) pour atteindre (B) ou (D) 97 100 B(4) nombre de buffers demandé 101 104 B(4) nombre de buffers renvoyés 105 108 B(4) taille des données imprimables (format SPFR0300) 109 128 C(20) réservé |
Pour ces deux APIs la structure du user space est spécifique INFORMATIONS BUFFER (B) DE A type description 1 4 B(4) lg de cette section 5 8 B(4) N° du buffer 9 12 B(4) offset de la structure (I) 13 16 B(6) taille de la structure (I) 17 20 B(4) offset de la section (P) 21 24 B(4) taille de la section (P) 25 28 B(4) nombre de pages contenues dans la section (P) 29 32 B(4) taille de la structure de définition d'une page 33 36 B(4) offset de la section données à imprimer 37 40 B(4) taille de la section données à imprimer structure de définition d'une page ,section (P) 1 4 B(4) première ligne (texte) sur cette page 5 8 B(4) première ligne (tout type de donnée) sur cette page 9 12 B(4) Offset pour atteindre le texte de cette page ,section (D) structure de la section (D) CHAR(??) le texte de ce buffer ,à utiliser avec (P) |
Pour ces deux APIs la structure du user space est spécifique INFORMATIONS GENERALES SUR LE BUFFER (I) / informations importantes DE A type description 1 4 B(4) nombre de lignes non blanches 5 8 B(4) nombre de lignes non blanches de la première page 9 12 B(4) (gestion/erreurs) 13 16 B(6) ( " " ) 17 20 B(4) taille des données à imprimer 21 30 C(10) état (IPDS) *HOME,*PAGE,*GRAPHICS,*PAGETRANS,*HOMETRANS 31 31 C(1) suite de la dernière page dans le buffer suivant (Y ou N) 32 32 C(1) spool créé par AFPU (Y ou N) 33 33 C(1) ( " " ) 34 34 C(1) ( " " ) 35 35 C(1) ( " " ) 36 36 C(1) ( " " ) 37 37 C(1) spool vide (Y ou N) 38 38 C(1) chargement de police (Y ou N) 39 39 C(1) données IPDS (Y ou N) 40 44 C(5) réservé |
ET ENFIN + QWPZTAFP transformation AFPDS -> ASCII - CHAR(20) user space qualifié en entrée - BIN(4) Lg des données en entrée - CHAR(20) user space qualifié en sortie - BIN(4) lg des données écrites (info en retour) - CHAR(??) table de contrôle - BIN(4) lg de la table de contrôle - BIN(4) code erreur |
structure de la table de contrôle DE A type description 1 4 B(4) type de flot de données en sortie 1 : IBM LASERPRINTER 4019 2 : IBM LASERPRINTER 4029 3 : HP LASERJET II 4 : HP LASERJET III 5 : IBM personnal page printer en mode HP 6 : POSTSCRIPT 7 : Texte seul 5 8 B(4) Marge haute (en 1/300 éme de pouce) 9 12 B(4) Marge gauche (en 1/300 éme de pouce) 13 16 B(4) 1ere page 17 20 B(4) dernière page 21 21 C(1) positionnement absolu de chaque caractère ? (Y ou N) (pour limiter les décalages du fait des polices proportionnelles) 22 22 C(1) utiliser police téléchargées (Y ou N) N = utilisation d'une police résidente |