{"id":4228,"date":"2021-05-19T21:21:51","date_gmt":"2021-05-19T19:21:51","guid":{"rendered":"https:\/\/entropie.org\/3615\/?p=4228"},"modified":"2026-09-08T20:44:39","modified_gmt":"2026-09-08T18:44:39","slug":"js-dos","status":"publish","type":"post","link":"https:\/\/entropie.org\/3615\/index.php\/2021\/05\/19\/js-dos\/","title":{"rendered":"JS-DOS 6.22"},"content":{"rendered":"<p>JS-DOS permet d\u2019ex\u00e9cuter un programme DOS dans un navigateur Web de mani\u00e8re tr\u00e8s simple. => Site officiel : <a href=\"https:\/\/js-dos.com\" target=\"_blank\">https:\/\/js-dos.com<\/a>.<\/p>\n<p>Version : <a href=\"https:\/\/github.com\/caiiiycuk\/js-dos\/releases\/tag\/6.22.60\" target=\"_blank\">https:\/\/github.com\/caiiiycuk\/js-dos\/releases\/tag\/6.22.60<\/a><\/p>\n<p>T\u00e9l\u00e9charger et d\u00e9compresser 6.22.60.zip :<\/p>\n<pre>\r\ncd T\u00e9l\u00e9chargements\r\nwget https:\/\/github.com\/caiiiycuk\/js-dos\/releases\/download\/6.22.60\/6.22.60.zip\r\nunzip 6.22.60.zip -d 6.22.60\r\n<\/pre>\n<p>Probl\u00e8me rencontr\u00e9 : Le titre que je donne \u00e0 mes pages html est \u00e9cras\u00e9 par JS-DOS et indique DOSBox. Pour r\u00e9soudre ce probl\u00e8me, j&rsquo;ai modifi\u00e9 certains fichiers de l&rsquo;archive en rempla\u00e7ant :<\/p>\n<pre>setWindowTitle!==\"undefined\"<\/pre>\n<p>par :<\/p>\n<pre>setWindowTitle==\"undefined\"<\/pre>\n<p>Pour lister les fichiers concern\u00e9s par le probl\u00e8me, on va \u00e9crire un script Bash dans un fichier nomm\u00e9 liste-jsdos.sh (utilisation : .\/liste-jsdos.sh 6.22.60):<\/p>\n<pre>\r\n#!\/bin\/bash\r\n\r\n# ============================================================\r\n# Recherche de fichiers contenant :\r\n#\r\n#     setWindowTitle!==\"undefined\"\r\n#\r\n# Utilisation :\r\n#\r\n#     .\/liste-jsdos.sh \/chemin\/vers\/le\/repertoire\r\n#\r\n# Exemple :\r\n#\r\n#     .\/liste-jsdos.sh \/var\/www\/html\/js-dos\r\n# ============================================================\r\n\r\n\r\n# ------------------------------------------------------------\r\n# V\u00e9rifie qu'un r\u00e9pertoire a \u00e9t\u00e9 fourni en argument\r\n# ------------------------------------------------------------\r\n\r\nif [ -z \"$1\" ]; then\r\n    echo \"Usage : $0 \/chemin\/vers\/le\/repertoire\"\r\n    exit 1\r\nfi\r\n\r\n\r\n# ------------------------------------------------------------\r\n# Stocke le r\u00e9pertoire fourni dans une variable\r\n# ------------------------------------------------------------\r\n\r\nDIR=\"$1\"\r\n\r\n\r\n# ------------------------------------------------------------\r\n# V\u00e9rifie que le r\u00e9pertoire existe\r\n# ------------------------------------------------------------\r\n\r\nif [ ! -d \"$DIR\" ]; then\r\n    echo \"Erreur : le r\u00e9pertoire '$DIR' n'existe pas.\"\r\n    exit 1\r\nfi\r\n\r\n\r\n# ------------------------------------------------------------\r\n# Texte que l'on recherche\r\n# ------------------------------------------------------------\r\n\r\nPATTERN='setWindowTitle!==\"undefined\"'\r\n\r\n\r\n# ------------------------------------------------------------\r\n# Recherche r\u00e9cursive avec grep\r\n#\r\n# -r  : recherche r\u00e9cursivement dans les sous-r\u00e9pertoires\r\n# -l  : affiche uniquement le nom des fichiers contenant\r\n#       le texte recherch\u00e9\r\n# -F  : recherche le texte exactement, sans expression\r\n#       r\u00e9guli\u00e8re\r\n# -I  : ignore les fichiers binaires\r\n#\r\n# \"$DIR\" : r\u00e9pertoire dans lequel commencer la recherche\r\n# ------------------------------------------------------------\r\n\r\ngrep -rIlF \"$PATTERN\" \"$DIR\"\r\n<\/pre>\n<p>R\u00e9sultat obtenu (5 fichiers contiennent l&rsquo;erreur mentionn\u00e9e) :<\/p>\n<pre>\r\n6.22.60\/wdosbox.js\r\n6.22.60\/wdosbox-emterp.js\r\n6.22.60\/dosbox.js\r\n6.22.60\/dosbox-emterp.js\r\n6.22.60\/wdosbox-nosync.js\r\n<\/pre>\n<p>On va \u00e9crire un nouveau fichier Bash qui va corriger l&rsquo;erreur (utilisation : .\/reparer-jsdos.sh 6.22.60) :<\/p>\n<pre>\r\n#!\/bin\/bash\r\n\r\n# ============================================================\r\n# CORRECTION G\u00c9N\u00c9RIQUE DE JS-DOS\r\n# ============================================================\r\n#\r\n# Le script recherche automatiquement dans un r\u00e9pertoire\r\n# tous les fichiers contenant :\r\n#\r\n#     setWindowTitle!==\"undefined\"\r\n#\r\n# et remplace cette cha\u00eene par :\r\n#\r\n#     setWindowTitle==\"undefined\"\r\n#\r\n# Il n'est donc pas n\u00e9cessaire de conna\u00eetre \u00e0 l'avance\r\n# les fichiers probl\u00e9matiques.\r\n#\r\n# Une copie de chaque fichier est cr\u00e9\u00e9e avant modification :\r\n#\r\n#     fichier.js\r\n#     fichier.js.bak\r\n#\r\n# Utilisation :\r\n#\r\n#     .\/reparer-jsdos.sh \/chemin\/vers\/js-dos\r\n#\r\n# Exemple :\r\n#\r\n#     .\/reparer-jsdos.sh 6.22.60\r\n#\r\n# ============================================================\r\n\r\n\r\n# ------------------------------------------------------------\r\n# V\u00e9rification de l'argument\r\n# ------------------------------------------------------------\r\n\r\nif [ -z \"$1\" ]; then\r\n    echo \"Usage : $0 \/chemin\/vers\/js-dos\"\r\n    exit 1\r\nfi\r\n\r\n\r\n# ------------------------------------------------------------\r\n# R\u00e9pertoire \u00e0 analyser\r\n# ------------------------------------------------------------\r\n\r\nDIR=\"$1\"\r\n\r\n\r\n# ------------------------------------------------------------\r\n# V\u00e9rification du r\u00e9pertoire\r\n# ------------------------------------------------------------\r\n\r\nif [ ! -d \"$DIR\" ]; then\r\n    echo \"Erreur : le r\u00e9pertoire '$DIR' n'existe pas.\"\r\n    exit 1\r\nfi\r\n\r\n\r\n# ------------------------------------------------------------\r\n# Texte recherch\u00e9\r\n# ------------------------------------------------------------\r\n\r\nOLD='setWindowTitle!==\"undefined\"'\r\n\r\n\r\n# ------------------------------------------------------------\r\n# Texte de remplacement\r\n# ------------------------------------------------------------\r\n\r\nNEW='setWindowTitle==\"undefined\"'\r\n\r\n\r\n# ------------------------------------------------------------\r\n# Recherche des fichiers probl\u00e9matiques\r\n# ------------------------------------------------------------\r\n#\r\n# grep :\r\n#\r\n#   -r  recherche r\u00e9cursivement\r\n#   -l  affiche uniquement les noms des fichiers\r\n#   -I  ignore les fichiers binaires\r\n#   -F  recherche le texte exactement\r\n#\r\n# \"|| true\" emp\u00eache le script de s'arr\u00eater si grep ne\r\n# trouve aucun fichier.\r\n# ------------------------------------------------------------\r\n\r\nmapfile -t FILES < <(\r\n    grep -rIlF \"$OLD\" \"$DIR\" 2>\/dev\/null || true\r\n)\r\n\r\n\r\n# ------------------------------------------------------------\r\n# V\u00e9rification du r\u00e9sultat de la recherche\r\n# ------------------------------------------------------------\r\n\r\nif [ \"${#FILES[@]}\" -eq 0 ]; then\r\n\r\n    echo \"Aucun fichier contenant :\"\r\n    echo\r\n    echo \"    $OLD\"\r\n    echo\r\n    echo \"n'a \u00e9t\u00e9 trouv\u00e9 dans :\"\r\n    echo\r\n    echo \"    $DIR\"\r\n\r\n    exit 0\r\nfi\r\n\r\n\r\n# ------------------------------------------------------------\r\n# Affichage du nombre de fichiers trouv\u00e9s\r\n# ------------------------------------------------------------\r\n\r\necho \"==========================================\"\r\necho \" Fichiers probl\u00e9matiques trouv\u00e9s\"\r\necho \"==========================================\"\r\necho\r\n\r\necho \"Nombre de fichiers : ${#FILES[@]}\"\r\necho\r\n\r\n\r\n# ------------------------------------------------------------\r\n# Affichage de la liste\r\n# ------------------------------------------------------------\r\n\r\nfor FILE in \"${FILES[@]}\"; do\r\n    echo \"  $FILE\"\r\ndone\r\n\r\n\r\necho\r\necho \"==========================================\"\r\necho \" Correction\"\r\necho \"==========================================\"\r\necho\r\n\r\n\r\n# ------------------------------------------------------------\r\n# Traitement de chaque fichier\r\n# ------------------------------------------------------------\r\n\r\nfor FILE in \"${FILES[@]}\"; do\r\n\r\n    echo \"Traitement : $FILE\"\r\n\r\n\r\n    # --------------------------------------------------------\r\n    # Cr\u00e9ation d'une sauvegarde\r\n    # --------------------------------------------------------\r\n    #\r\n    # Le fichier original est conserv\u00e9 avec l'extension .bak.\r\n    #\r\n    # Exemple :\r\n    #\r\n    #     dosbox.js\r\n    #\r\n    # devient :\r\n    #\r\n    #     dosbox.js\r\n    #     dosbox.js.bak\r\n    #\r\n    # --------------------------------------------------------\r\n\r\n    BACKUP=\"$FILE.bak\"\r\n\r\n\r\n    # --------------------------------------------------------\r\n    # \u00c9vite d'\u00e9craser une sauvegarde existante\r\n    # --------------------------------------------------------\r\n    #\r\n    # Si .bak existe d\u00e9j\u00e0, on ne le remplace pas.\r\n    #\r\n    # Cela \u00e9vite de perdre la version originale si le script\r\n    # est ex\u00e9cut\u00e9 plusieurs fois.\r\n    #\r\n    # --------------------------------------------------------\r\n\r\n    if [ ! -f \"$BACKUP\" ]; then\r\n\r\n        cp -p \"$FILE\" \"$BACKUP\"\r\n\r\n        echo \"  Sauvegarde : $BACKUP\"\r\n\r\n    else\r\n\r\n        echo \"  Sauvegarde d\u00e9j\u00e0 pr\u00e9sente : $BACKUP\"\r\n\r\n    fi\r\n\r\n\r\n    # --------------------------------------------------------\r\n    # Compte le nombre d'occurrences avant modification\r\n    # --------------------------------------------------------\r\n\r\n    COUNT=$(grep -oF \"$OLD\" \"$FILE\" | wc -l)\r\n\r\n\r\n    echo \"  Occurrences trouv\u00e9es : $COUNT\"\r\n\r\n\r\n    # --------------------------------------------------------\r\n    # Effectue le remplacement\r\n    # --------------------------------------------------------\r\n    #\r\n    # sed -i modifie directement le fichier.\r\n    #\r\n    # \"g\" signifie que toutes les occurrences de la cha\u00eene\r\n    # sont remplac\u00e9es.\r\n    #\r\n    # --------------------------------------------------------\r\n\r\n    sed -i \\\r\n        's\/setWindowTitle!==\"undefined\"\/setWindowTitle==\"undefined\"\/g' \\\r\n        \"$FILE\"\r\n\r\n\r\n    # --------------------------------------------------------\r\n    # V\u00e9rification apr\u00e8s modification\r\n    # --------------------------------------------------------\r\n\r\n    if grep -Fq \"$OLD\" \"$FILE\"; then\r\n\r\n        echo \"  ERREUR : certaines occurrences sont encore pr\u00e9sentes.\"\r\n\r\n        # Restauration automatique\r\n        cp -p \"$BACKUP\" \"$FILE\"\r\n\r\n        echo \"  Fichier restaur\u00e9 depuis la sauvegarde.\"\r\n\r\n    else\r\n\r\n        echo \"  OK : $COUNT occurrence(s) corrig\u00e9e(s).\"\r\n\r\n    fi\r\n\r\n\r\n    echo\r\n\r\ndone\r\n\r\n\r\n# ------------------------------------------------------------\r\n# R\u00e9sum\u00e9 final\r\n# ------------------------------------------------------------\r\n\r\necho \"==========================================\"\r\necho \" Termin\u00e9\"\r\necho \"==========================================\"\r\necho\r\n\r\necho \"Fichiers trait\u00e9s : ${#FILES[@]}\"\r\necho\r\necho \"Les fichiers originaux sont conserv\u00e9s avec l'extension .bak.\"\r\n\r\n<\/pre>\n<p>J&rsquo;en ai inform\u00e9 l&rsquo;auteur.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>JS-DOS permet d\u2019ex\u00e9cuter un programme DOS dans un navigateur Web de mani\u00e8re tr\u00e8s simple. => Site officiel : https:\/\/js-dos.com. Version : https:\/\/github.com\/caiiiycuk\/js-dos\/releases\/tag\/6.22.60 T\u00e9l\u00e9charger et d\u00e9compresser 6.22.60.zip : cd T\u00e9l\u00e9chargements wget https:\/\/github.com\/caiiiycuk\/js-dos\/releases\/download\/6.22.60\/6.22.60.zip unzip 6.22.60.zip -d 6.22.60 Probl\u00e8me rencontr\u00e9 : Le titre que je donne \u00e0 mes pages html est \u00e9cras\u00e9 par JS-DOS et indique DOSBox. Pour &hellip; <a href=\"https:\/\/entropie.org\/3615\/index.php\/2021\/05\/19\/js-dos\/\" class=\"more-link\">Continuer la lecture<span class=\"screen-reader-text\"> de &laquo;&nbsp;JS-DOS 6.22&nbsp;&raquo;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[35,5,30],"tags":[],"class_list":["post-4228","post","type-post","status-publish","format-standard","hentry","category-dos","category-tutoriels","category-web"],"_links":{"self":[{"href":"https:\/\/entropie.org\/3615\/index.php\/wp-json\/wp\/v2\/posts\/4228","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/entropie.org\/3615\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/entropie.org\/3615\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/entropie.org\/3615\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/entropie.org\/3615\/index.php\/wp-json\/wp\/v2\/comments?post=4228"}],"version-history":[{"count":42,"href":"https:\/\/entropie.org\/3615\/index.php\/wp-json\/wp\/v2\/posts\/4228\/revisions"}],"predecessor-version":[{"id":7810,"href":"https:\/\/entropie.org\/3615\/index.php\/wp-json\/wp\/v2\/posts\/4228\/revisions\/7810"}],"wp:attachment":[{"href":"https:\/\/entropie.org\/3615\/index.php\/wp-json\/wp\/v2\/media?parent=4228"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/entropie.org\/3615\/index.php\/wp-json\/wp\/v2\/categories?post=4228"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/entropie.org\/3615\/index.php\/wp-json\/wp\/v2\/tags?post=4228"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}