Précédent   Forum du club des développeurs et IT Pro > Systèmes > Autres systèmes > AS/400
AS/400 Le Forum d'entraide sur IBM AS/400 - iSeries. RPG.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 24/10/2012, 16h37   #1
over_score
Invité régulier
 
Inscription : décembre 2005
Messages : 9
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 9
Points : 7
Points : 7
Par défaut Problème d'impression très bizarre (pour le moment)

Bonjour,

J'ai fait une commande qui permet d'envoyer dans une OUTQ un fichier binaire provenant de l'IFS tel quel sans la moindre modification.

Le problème est que cela fonctionne seulement "presque" comme je le souhaiterais

Je vous présente ici mon développement et en dessous mon problème.

Ci-dessous les sources :
Le *CMD PRTRAW
Code :
1
2
3
4
5
6
7
8
             CMD        PROMPT('Impr RAW d''un fichier IFS')
             
             PARM       KWD(IFSFILE) TYPE(*CHAR) LEN(256) MIN(1) EXPR(*YES) PROMPT('FICHIER IFS')
             PARM       KWD(OUTQ)    TYPE(QUAL1) MIN(1) PROMPT('Nom de l''OUTQ')
             PARM       KWD(TYPE)    TYPE(*CHAR) LEN(4) RSTD(*YES) DFT(*PDF) SPCVAL((*PDF)) PROMPT('Type de fichier')

 QUAL1:      QUAL       TYPE(*NAME) LEN(10) MIN(1)
             QUAL       TYPE(*NAME) LEN(10) DFT(*LIBL) SPCVAL((*LIBL) (*CURLIB)) PROMPT('Bibliothèque')
Le CLLE PRTRAWC
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
pgm parm(&ifsfile &outq &type)                                                                   
/****************************************************************/
/* ATTENTION : BLANCS INTERDITS DANS LE NOM DE FICHIER &ifsfile */
/****************************************************************/
    dcl        var(&ifsfile) type(*char) len(256)   /* Nom complet avec chemin du fichier brut */
    dcl        var(&outq)    type(*char) len(20)    /* Nom de l'outq destinataire nom+bib      */
    dcl        var(&type)    type(*char) len(4)     /* Type de fichier : *PDF, ...             */
    dcl        var(&cmd)     type(*char) len(1000)  /* Commande QSH                            */
    dcl        var(&pcl)     type(*char) len(22)    /* Nom du fichier temporaire PCL           */
    dcl        var(&numtrav) type(*char) len(6)     /* Numéro du travail                       */
    dcl        var(&noutq)   type(*char) len(10)    /* Nom de l'outq destinataire              */
    dcl        var(&boutq)   type(*char) len(10)    /* Bibliothèque de l'outq destinataire     */

    rtvjoba    nbr(&numtrav)
    chgvar     var(&pcl) value('/tmp/avirer_' *cat &numtrav *cat '.pcl')

    if         cond(&type *eq '*PDF') then(do)
      /* Variable d'environnement nécessaire pour le pgm ghostscript */
      addenvvar envvar(GS_LIB) replace(*yes) +
                value('/QOpenSys/usr/local/bin:+
                       /QOpenSys/usr/local/share/ghostscript/8.54/lib:+
                       /QOpenSys/usr/local/share/ghostscript/8.54/Resource/fonts')
      /* Conversion du PDF en PCL */
      chgvar     var(&cmd) +
                 value('/QOpenSys/usr/local/bin/gs -q -dQUIET -dBATCH -dNOPAUSE ' *cat +
                       '-dNORANGEPAGESIZE -sPAPERSIZE=a4 -sDEVICE=ljet4 -sOutputFile="' *cat +
                       &pcl *tcat '" -f ' *cat &ifsfile *bcat '> /dev/null 2>&1')

      strqsh     cmd(&cmd)
    enddo

    /* Impression en raw du fichier PCL */
    chgvar     var(&noutq) value(%sst(&outq 1  10))
    chgvar     var(&boutq) value(%sst(&outq 11 10))
    ovrprtf    file(qsysprt) tofile(qsys/qsysprt) outq(&boutq/&noutq) +
               rplunprt(*no) devtype(*userascii) spool(*yes) ovrscope(*job)
    /* ovrscope(*job) car prtraw£ qui est un pgm C n'est pas dans le même actgrp */
    call       pgm(util/prtraw£) parm(&pcl)
    dltovr     file(qsysprt) lvl(*job)

    /* Suppression du fichier PCL temporaire */
    del        objlnk(&pcl)
fin:endpgm
Le C PRTRAW£
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
/*****************************************************/
/* Ce programme doit être compilé avec les options : */
/* SYSIFCOPT(*IFSIO) et TGTCCSID(*HEX)               */
/*****************************************************************************************************/
/* argv[1] est le nom complet du fichier IFS par ex /home/bafolrg/test.pcl                           */
/* voir : http://newsgroups.derkeiler.com/Archive/Comp/comp.sys.ibm.as400.misc/2006-07/msg00274.html */
/*****************************************************************************************************/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <recio.h>
#define LONG_ENREG_PRTF 132

int main(int argc, char *argv[])
 {
  FILE *FichierEntree;
  _RFILE *prtf;
  char buffer[LONG_ENREG_PRTF+1];      
  char ModeEcritureFichierPRTF[50];   
  int len;

  FichierEntree = fopen(argv[1], "rb, o_ccsid=65535");
  if(FichierEntree == NULL) return(1);

  sprintf(ModeEcritureFichierPRTF, "wr, lrecl=%d", LONG_ENREG_PRTF);
  prtf = _Ropen("QSYSPRT", ModeEcritureFichierPRTF);

  memset(buffer, 0x00, sizeof(buffer));
  len = fread(buffer, sizeof(char), LONG_ENREG_PRTF, FichierEntree);
  while(len>0)
   {
    _Rwrite(prtf, buffer, LONG_ENREG_PRTF);
    memset(buffer, 0x00, sizeof(buffer));
    len = fread(buffer, sizeof(char), LONG_ENREG_PRTF, FichierEntree);
   }

  _Rclose(prtf);
  fclose(FichierEntree);
  return 0;
 }
Les commandes pour la compilation de tout cela
Code :
1
2
3
crtbndc   pgm(util/prtraw£) srcfile(util/qsrcspool) output(*print) sysifcopt(*ifsio) tgtccsid(*hex)
crtbndcl  pgm(util/prtrawc) srcfile(util/qsrcspool) dftactgrp(*no) actgrp(*caller)
crtcmd    cmd(util/prtraw)  srcfile(util/qsrcspool) pgm(util/prtrawc)
Maintenant le problème.
Avec la commande suivante seule, le fichier PDF ne s'imprime pas et il ne se passe strictement rien sur l'imprimante :
Code :
PRTRAW IFSFILE('/home/outq/FRKO_WAG_2/KS735831.pdf') OUTQ(BAFOINFO)
En revanche les commandes suivantes impriment le PDF correctement :
Code :
1
2
CALL PGM(util/bizarre)
PRTRAW IFSFILE('/home/outq/FRKO_WAG_2/KS735831.pdf') OUTQ(BAFOINFO)
Le programme bizarre fait la chose suivante :
Code :
1
2
3
pgm
  crtbndrpg pgm(qtemp/bizarre£) srcfile(util/qsrcspool) dftactgrp(*no) actgrp(SPOOL) output(*none) replace(*yes)
fin:endpgm
et le contenu de bizarre£ est on ne peu plus simple :Et pour chaque impression de PDF que je veux faire, si je ne lance pas la compilation de ce programme bizarre£ qui n'est jamais utilisé, cela ne fonctionne pas
Je n'arrive pas à faire le moindre lien entre l'impression correcte et la compilation du programme bizarre£
Est-ce une histoire de groupe d'activation ? D'ovrprtf incorrect ?
Qui a une idée ?
Ou bien suis-je condamné à compiler avant chaque impression ?

A oui encore une info : je suis en V5R3
over_score est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 08h58.


 
 
 
 
Partenaires

Hébergement Web