{"id":2219,"date":"2020-03-01T12:38:00","date_gmt":"2020-03-01T11:38:00","guid":{"rendered":"https:\/\/ceo.oric.org\/?p=2219"},"modified":"2020-03-01T12:38:00","modified_gmt":"2020-03-01T11:38:00","slug":"bogue-print","status":"publish","type":"post","link":"https:\/\/oric.bqtt.net\/index.php\/2020\/03\/01\/bogue-print\/","title":{"rendered":"Bogue PRINT@"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\"><em> par Andr\u00e9 C. <\/em><\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>Etat de la question<\/strong><\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Le manuel de l&#8217;Atmos pr\u00e9sente l&#8217;ajout du param\u00e8tre &#8220;@X,Y;&#8221; \u00e0 la syntaxe de la commande PRINT comme une simple option suppl\u00e9mentaire par rapport au PRINT de l&#8217;Oric-1, permettant d&#8217;afficher aux coordonn\u00e9es X,Y de l&#8217;\u00e9cran. PRINT@X,Y;plist n&#8217;est pas pr\u00e9sent\u00e9 comme une nouvelle commande, mais comme une simple extension de syntaxe.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">D&#8217;autre part, rappelons que si on place un &#8220;;&#8221; \u00e0 la fin d&#8217;une commande PRINT, les coordonn\u00e9es X,Y de la &#8220;case&#8221; qui suit le dernier caract\u00e8re affich\u00e9 sont m\u00e9moris\u00e9es pour l&#8217;impression suivante. Il est alors possible d&#8217;utiliser ces coordonn\u00e9es pour une autre commande d&#8217;affichage. Pour le dire plus simplement, apr\u00e8s le &#8220;;&#8221; final, le curseur reste \u00e0 clignoter au bout du dernier affichage et repr\u00e9sente le prochain point d&#8217;affichage. <\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>Ce que ne dit pas le manuel<\/strong><\/h4>\n\n\n\n<p class=\"wp-block-paragraph\"> Dans certains cas, il peut y avoir un conflit entre les param\u00e8tres &#8220;@X,Y;&#8221; et le &#8220;;&#8221;final. En effet, au niveau du code, lorsqu&#8217;un param\u00e8tre &#8220;@X,Y;&#8221; a d\u00e9j\u00e0 \u00e9t\u00e9 d\u00e9tect\u00e9 au d\u00e9but de l&#8217;analyse de syntaxe, un param\u00e8tre &#8220;;&#8221; en fin de ligne n&#8217;est ni rejet\u00e9, ni trait\u00e9 correctement. <\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>En pratique<\/strong><\/h4>\n\n\n\n<p class=\"wp-block-paragraph\"> Lorsqu&#8217;on utilise une s\u00e9rie de PRINT@X,Y;&#8221;CHAINE&#8221;, pour chacune des commande PRINT@, la chaine mentionn\u00e9e est bien affich\u00e9e aux coordonn\u00e9es X,Y indiqu\u00e9es, pas de probl\u00e8me. Si la longueur de la cha\u00eene est sup\u00e9rieure \u00e0 la place disponible, l&#8217;affichage se poursuit tout naturellement \u00e0 la ligne suivante. <\/p>\n\n\n\n<figure class=\"wp-block-image size-medium\"><img decoding=\"async\" src=\"https:\/\/oric.bqtt.net\/wp-content\/uploads\/2020\/01\/PRINT@-48-300x280.png\" alt=\"\" class=\"wp-image-2220\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"> Si pour une raison quelconque on est amen\u00e9 \u00e0 m\u00e9langer des commandes PRINT@ avec d&#8217;autres commandes d&#8217;affichage, &nbsp;on risque de rencontrer des probl\u00e8mes. Voyons ce qu&#8217;il en est avec un exemple. <\/p>\n\n\n\n<figure class=\"wp-block-image size-medium\"><img decoding=\"async\" src=\"https:\/\/oric.bqtt.net\/wp-content\/uploads\/2020\/01\/PRINT@-50-300x280.png\" alt=\"\" class=\"wp-image-2224\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Soit le petit programme ci-dessus.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La cha\u00eene figurant \u00e0 la ligne Basic 10 comporte 30\ncaract\u00e8res. Le premier caract\u00e8re, un &#8220;2&#8221;, sera affich\u00e9 dans la\n&#8220;case&#8221; de coordonn\u00e9es X=2, Y=10. Le dernier caract\u00e8re, un\n&#8220;1&#8221;, sera affich\u00e9 dans la &#8220;case&#8221; X=31, Y=10. A cause du\n&#8220;;&#8221; final, le curseur restera \u00e0 clignoter sur la case suivante. (Le\nd\u00e9roul\u00e9 du programme est trop rapide pour voir ce curseur clignotant, sauf si\non place une commande GET R$ en fin de ligne).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La ligne Basic 15 affiche &#8220;OK&#8221; au curseur, c&#8217;est \u00e0\ndire au point X=32, Y=10. Ici encore, le curseur restera en attente sur la case\nsuivante &nbsp;\u00e0 cause du &#8220;;&#8221; final.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La ligne Basic 20 devrait commencer l&#8217;affichage de la cha\u00eene\n&#8220;SALUT LES GARS!&#8221; (15 caract\u00e8res) de la &#8220;case&#8221; de\ncoordonn\u00e9es X=16, Y=10 et la terminer \u00e0 la &#8220;case&#8221; &nbsp;X=30, Y=10. Au lieu de \u00e7a, seul &#8220;SALUT\n&#8221; est affich\u00e9 correctement, le reste de la cha\u00eene, soit &#8220;LES\nGARS!&#8221;, est rejet\u00e9 au d\u00e9but de la m\u00eame ligne n\u00b010 de l&#8217;\u00e9cran et, curieusement,\npas \u00e0 la ligne suivante.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Vous me direz que le &#8220;;&#8221; n&#8217;a logiquement rien \u00e0 faire \u00e0 la fin du PRINT&#8221;OK&#8221; et que cela rel\u00e8ve d&#8217;une faute de conception du programme Basic. Peut-\u00eatre. Mais la commande PRINT proprement dite est mal cod\u00e9e&nbsp;: Lors de l&#8217;analyse de syntaxe, la rencontre d&#8217;un param\u00e8tre &#8220;@X,Y;&#8221; devrait entra\u00eener la neutralisation des coordonn\u00e9es X,Y en cours et leur remplacement par celles indiqu\u00e9es par &#8220;@X,Y;&#8221;.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Si on retire le &#8220;;&#8221; apr\u00e8s le PRINT&#8221;OK&#8221; l&#8217;affichage rentre dans l&#8217;ordre et redevient ce qu&#8217;il doit \u00eatre.  <\/p>\n\n\n\n<figure class=\"wp-block-image size-medium\"><img decoding=\"async\" src=\"https:\/\/oric.bqtt.net\/wp-content\/uploads\/2020\/01\/PRINT@-51-300x280.png\" alt=\"\" class=\"wp-image-2226\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Ceci montre bien qu&#8217;il ne faut pas utiliser de &#8220;;&#8221; \u00e0 la fin d&#8217;une commande PRINT@, sauf raison particuli\u00e8re et en toute connaissance des risques.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Il n&#8217;est pas toujours simple de comprendre ce qui se passe. Ainsi, si on garde le &#8220;;&#8221; apr\u00e8s le PRINT&#8221;OK&#8221;, mais que l&#8217;on supprime le &#8220;;&#8221; de la ligne Basic 10, alors la cha\u00eene &#8220;SALUT LES GARS!&#8221; s&#8217;affiche correctement. Le truc, c&#8217;est qu&#8217;entre temps les param\u00e8tres X,Y ont \u00e9t\u00e9 r\u00e9g\u00e9n\u00e9r\u00e9s lors du retour \u00e0 la ligne pour afficher &#8220;OK&#8221;. M\u00eame si le curseur reste \u00e0 clignoter apr\u00e8s le &#8220;K&#8221; de OK, le PRINT@ qui suit op\u00e8re sans probl\u00e8me. <\/p>\n\n\n\n<figure class=\"wp-block-image size-medium\"><img decoding=\"async\" src=\"https:\/\/oric.bqtt.net\/wp-content\/uploads\/2020\/01\/PRINT@-06-300x280.png\" alt=\"\" class=\"wp-image-2227\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Autre petite curiosit\u00e9, lorsqu&#8217;on d\u00e9place progressivement l&#8217;affichage de la cha\u00eene &#8220;SALUT LES GARS!&#8221; vers la droite en augmentant la valeur de X \u00e0 la ligne Basic 20, on observe une rupture pour X=34. Pour X=33, le reliquat &#8220;LES GARS!&#8221; est rejet\u00e9 au d\u00e9but de la m\u00eame ligne de l&#8217;\u00e9cran, alors que pour X=34, il est affich\u00e9 au d\u00e9but de la ligne suivante, comme il se doit !<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Il n&#8217;existe pas de commande LPRINT@, donc pas de probl\u00e8me de ce c\u00f4t\u00e9-l\u00e0. <\/p>\n\n\n\n<figure class=\"wp-block-image size-medium\"><img decoding=\"async\" src=\"https:\/\/oric.bqtt.net\/wp-content\/uploads\/2020\/01\/PRINT@-14-300x280.png\" alt=\"\" class=\"wp-image-2228\"\/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-medium\"><img decoding=\"async\" src=\"https:\/\/oric.bqtt.net\/wp-content\/uploads\/2020\/01\/PRINT@-15-300x280.png\" alt=\"\" class=\"wp-image-2229\"\/><\/figure>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>Oups&nbsp;!<\/strong><\/h4>\n\n\n\n<p class=\"wp-block-paragraph\"> J&#8217;ai fait en dernier ce que j&#8217;aurais d\u00fb faire en premier&nbsp;: V\u00e9rifier si la bogue &#8220;PRINT@;&#8221; \u00e9tait d\u00e9j\u00e0 connue. Et oui&nbsp;: Vous pouvez consulter le CEO-mag n\u00b010, page 9 de mars 1991, qui en donne une autre d\u00e9monstration (article de Roger B.). <\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>Conclusion<\/strong><\/h4>\n\n\n\n<p class=\"wp-block-paragraph\"> Comme vous l&#8217;avez vu, la situation peut devenir complexe quand la syntaxe d&#8217;une commande est mal g\u00e9r\u00e9e. Il est difficile de pr\u00e9voir \u00e0 l&#8217;avance le r\u00e9sultat final. Ceci vaut \u00e9videmment pour toutes les commandes Basic de l&#8217;Oric r\u00e9put\u00e9es pour leurs bogues. A la liste IF THEN ELSE, RND(), POS(), CLOAD, POINT(x,y), &#8216; (apostrophe pour REM), EDIT, DRAW, il faut donc ajouter PRINT@; <\/p>\n\n\n\n<p class=\"has-text-align-right wp-block-paragraph\">Salut et Oricit\u00e9 !<\/p>\n","protected":false},"excerpt":{"rendered":"<p>par Andr\u00e9 C. Etat de la question Le manuel de l&#8217;Atmos pr\u00e9sente l&#8217;ajout du param\u00e8tre &#8220;@X,Y;&#8221; \u00e0 la syntaxe de la commande PRINT comme une simple option suppl\u00e9mentaire par rapport au PRINT de l&#8217;Oric-1, permettant d&#8217;afficher aux coordonn\u00e9es X,Y de l&#8217;\u00e9cran. PRINT@X,Y;plist n&#8217;est pas pr\u00e9sent\u00e9 comme une nouvelle commande, mais comme une simple extension de [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":2224,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[338,347,348,22],"tags":[668],"class_list":["post-2219","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-338","category-atmos","category-basic","category-ceomag","tag-ceomag359"],"_links":{"self":[{"href":"https:\/\/oric.bqtt.net\/index.php\/wp-json\/wp\/v2\/posts\/2219","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/oric.bqtt.net\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/oric.bqtt.net\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/oric.bqtt.net\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/oric.bqtt.net\/index.php\/wp-json\/wp\/v2\/comments?post=2219"}],"version-history":[{"count":0,"href":"https:\/\/oric.bqtt.net\/index.php\/wp-json\/wp\/v2\/posts\/2219\/revisions"}],"wp:attachment":[{"href":"https:\/\/oric.bqtt.net\/index.php\/wp-json\/wp\/v2\/media?parent=2219"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/oric.bqtt.net\/index.php\/wp-json\/wp\/v2\/categories?post=2219"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/oric.bqtt.net\/index.php\/wp-json\/wp\/v2\/tags?post=2219"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}