                    QLib_run v3.35mod
                    =================

 Eureka !  a  y  est...  QLiberator  peut  enfin   profiter
 pleinement du traitement  des erreurs.  Deux petits POKE et
 adieux les vilains bogues !

 La version "3.35mod" de QLib_run  corrige deux bogues de la
 version 3.35 qui empchait la rcupration du code d'erreur
 avec ERNUM (ce dernier tait en fait quivalent  ERLIN !).
 Elle remplacera  avantageusement  toute version  antrieure
 (compatibilit ascendante totale).

 Mais en quoi consiste donc la correction de ces bogues ?

 Il faut tout d'abord savoir que  ERLIN et ERNUM font partie
 intgrante du code de QLib_run  (mme si vous  possdez une
 version du QDOS qui intgre ces instructions, c'est le code
 contenu dans QLib_run qui  sera excut !).  Ceci permet de
 faire  profiter  les versions  AH  et  JM  du  QDOS  de ces
 instructions (du moins pour un programme compil).

 De plus lorsque  QLib_run rencontre  une erreur,  il stocke
 son code  et le  numro  de  ligne    laquelle  elle s'est
 produite dans deux  variables du  pseudo-entte Super Basic
 (pour assurer une parfaite  compatibilit,  QLiberator cre
 ce pseudo-entte  qui contient  l'quivalent  des variables
 Super Basic de l'interprteur).  Ces deux variables doivent
 normalement (et par analogie au Super Basic des versions JS
 et au-del),  se trouver aux offsets $C2 et $C6 par rapport
  la  base du job  (dont  l'adresse  est  contenue  dans le
 registre A6).  $C2(A6) est un mot long contenant le code de
 la  dernire  erreur  et $C6(A6)  est  un mot  contenant le
 numro de ligne.

 Or la version 3.35 de QLib_run  stocke le code d'erreur sur
 un mot long en $C4(A6) et le numro de ligne en $C6(A6) sur
 un mot.  Rsultat:  le mot de poids faible du code d'erreur
 est cras  par le numro  de ligne  (le mot de  poids fort
 contenant toujours $FFFF pour une erreur QDOS) !  Donc, non
 seulement le code d'erreur n'est pas stock au bon endroit,
 mais en plus il est  irrcuprable (mme par  une extension
 "maison") !  D'autre part et pour tout arranger, le "ERNUM"
 de QLib_run allait chercher le code d'erreur en $C6(A6) sur
 un mot, renvoyant en fait le numro de ligne...

 Le  remde  consiste   donc    modifier  les  instructions
 incrimines  pour  les  forcer    crire  et lire  le code
 d'erreur  au bon endroit.  Le petit  programme  Super Basic
 suivant permet de raliser ces modifications:

          100 REMark Charger QLib_run en mmoire:
          110 L=10552:REMark L=10624 pour QLib_run v3.36
          120 AD=ALCHP(L):LBYTES "flp1_QLib_run",AD
          130 :
          140 REMark Placer $C4  l'offset $0D10:
          150 POKE_W AD+3344,196
          160 :
          170 REMark Placer $C2  l'offset $146E:
          180 POKE_W AD+5230,194
          190 :
          200 REMark Sauver la nouvelle version de QLib_run:
          210 SBYTES "flp1_new_QLib_run",AD,L:RECHP AD
          220 :
          230 REMark C'est tout !


                                           T. Godefroy. 1991
