User Tools

Site Tools


parser.asm

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
parser.asm [2025/12/08 17:15] – fool-duplexparser.asm [2026/01/05 15:59] (current) – fool-duplex
Line 1: Line 1:
-[[code_source_de_menu.mo5|Retourner à la liste des fichiers]]+[[code_source_de_nrdos.mo5_version_3.5|Retourner à la liste des fichiers]]
  
 <code>* NRDOS.MO5 version 3.5 <code>* NRDOS.MO5 version 3.5
 * PARSER.ASM (Décodage de la ligne de commande) * PARSER.ASM (Décodage de la ligne de commande)
  
-**************************************************************************************************************+************************************************************************************************************
 * INPUT * INPUT
 * Cette routine récupère une ligne de commande de 80 caractères maximum soit en direct, soit depuis un  * Cette routine récupère une ligne de commande de 80 caractères maximum soit en direct, soit depuis un 
Line 10: Line 10:
 * des atomes (séparés par espace ou tabulation). Une ligne de commande se termine toujours par CR.  * des atomes (séparés par espace ou tabulation). Une ligne de commande se termine toujours par CR. 
 * LF est ignoré. * LF est ignoré.
-**************************************************************************************************************+************************************************************************************************************
 INPUT  SET    *        INPUT  SET    *       
        LBSR   GETLN           ; Lit une ligne de 80 caractères max.        LBSR   GETLN           ; Lit une ligne de 80 caractères max.
Line 17: Line 17:
        RTS        RTS
                
-**************************************************************************************************************       +************************************************************************************************************
 * GETLN * GETLN
 * Cette routine lit une ligne de 80 caractères maximum depuis le clavier ou depuis un fichier.   * Cette routine lit une ligne de 80 caractères maximum depuis le clavier ou depuis un fichier.  
 * Depuis un fichier, LF est ignoré. En mode direct, les flèches gauche, droite, haut, bas, ainsi que les * Depuis un fichier, LF est ignoré. En mode direct, les flèches gauche, droite, haut, bas, ainsi que les
 * touches INS, EFF sont gérées. ENTREE (CR) termine la ligne.       * touches INS, EFF sont gérées. ENTREE (CR) termine la ligne.      
-**************************************************************************************************************+************************************************************************************************************
 GETLN  SET    *        GETLN  SET    *       
        LDA    #0        LDA    #0
Line 59: Line 59:
        CMPX   #0        CMPX   #0
        BEQ    GLERAS        BEQ    GLERAS
 +       
        LEAX   -1,X            ; En arrière buffer de copie        LEAX   -1,X            ; En arrière buffer de copie
  
Line 72: Line 73:
        CMPA   #CR             ; Fin de ligne ?        CMPA   #CR             ; Fin de ligne ?
        BEQ    GLSKDS          ; Oui, on saute cette étape        BEQ    GLSKDS          ; Oui, on saute cette étape
 +       
        LDB    CLCOPY,X        ; Sinon on récupère le caractère        LDB    CLCOPY,X        ; Sinon on récupère le caractère
        STB    CMDBUF,Y        STB    CMDBUF,Y
Line 87: Line 89:
 GLLPUP CMPY   #0 GLLPUP CMPY   #0
        BEQ    GLUPOK        BEQ    GLUPOK
 +       
        LBSR   DISPBS          ; Efface un caractère à l'écran        LBSR   DISPBS          ; Efface un caractère à l'écran
        LEAY   -1,Y        LEAY   -1,Y
Line 105: Line 108:
        CMPA   #CR             ; Fin de ligne ?        CMPA   #CR             ; Fin de ligne ?
        BEQ    GLDNOK        BEQ    GLDNOK
 +       
        CMPY   #80             ; Fin de buffer ?        CMPY   #80             ; Fin de buffer ?
        BEQ    GLDNOK        BEQ    GLDNOK
 +       
        LDB    CLCOPY,X        ; Copie de CLOPY vers CMDBUF        LDB    CLCOPY,X        ; Copie de CLOPY vers CMDBUF
        STB    CMDBUF,Y        STB    CMDBUF,Y
Line 154: Line 159:
        CMPA   #CR        CMPA   #CR
        BEQ    GLDISP        BEQ    GLDISP
 +       
        LEAX   1,X        LEAX   1,X
  
Line 180: Line 186:
  
 INSFLG FCB    0              ; Flag de mode insertion INSFLG FCB    0              ; Flag de mode insertion
-CLCOPY RMB                   ; Buffer de copie et précédente ligne de commande +CLCOPY RMB    81,0           ; Buffer de copie et précédente ligne de commande 
-CMDBUF RMB                   ; Buffer de ligne de commande+CMDBUF RMB    81,0           ; Buffer de ligne de commande
  
-**************************************************************************************************************+************************************************************************************************************
 * CNTTOK * CNTTOK
-* +* Parcours le buffer de ligne de commande à la recherche de séparateurs. A chaque séparateur trouvé, la 
-**************************************************************************************************************+* position courante est rangée dans la table des atomes. Une succession de séparateurs compte comme un seul. 
 +************************************************************************************************************
 CNTTOK SET    * CNTTOK SET    *
 +       CLR    TOKNB          ; Nombre d'atome à zéro
 +       LDX    #0             ; Début de chaîne
  
-       (To be continued ...)+CTSKLP LDA    CMDBUF,X       ; On parcours la ligne de commande à la recherche 
 +       CMPA   #SPACE         ; d'espaces ou de tabulations (séparateurs)  
 +       BEQ    CTSPC 
 + 
 +       CMPA   #RIGHT 
 +       BNE    CTNRGT 
 + 
 +CTSPC  CMPX   #81            ; jusqu'à la fin du buffer 
 +       BEQ    CTNRGT 
 + 
 +       LEAX   1,X 
 +       BRA    CTSKLP 
 + 
 +CTNRGT LDA    CMDBUF,X 
 +       CMPA   #CR            ; ou jusqu'à la fin de ligne 
 +       BEQ    CTENDL 
 + 
 +       LDA    TOKNB          ; Numéro courant d'atome 
 +       ASLA                  ; Multiplié par 2 
 +       LDY    #TKOFST        ; On range la position courante dans la ligne   
 +       STX    A,Y            ; de commande dans la table d'atomes 
 +       INC    TOKNB          ; Atome suivant 
 + 
 +CTIGNS LDB    CMDBUF,X       ; On saute les éventuels séparateurs successifs 
 +       LBSR   SPTBCR 
 +       BEQ    CTENDL 
 + 
 +       LEAX   1,X            ; Position suivante 
 +       BRA    CTIGNS 
 + 
 +CTENDL CMPA   #CR            ; Fin de ligne ? 
 +       BNE    CTSKLP         ; Non, on continue 
 + 
 +       RTS 
 + 
 +TOKNB  RMB    1,0            ; Nombre d'atomes 
 +TKOFST SET    *              ; Table des atomes (maximum 16) 
 +TKOFS1 RMB    2,0 
 +TKOFS2 RMB    2,0 
 +TKOFS3 RMB    2,0 
 +TKOFS4 RMB    2,0              
 +TKMOFS RMB    24,0 
 + 
 +************************************************************************************************************ 
 +* SPTBCR 
 +* Teste le caractère pointé comme espace, tabulation ou retour chariot. 
 +************************************************************************************************************ 
 +SPTBCR SET    * 
 +       CMPB   #SPACE         ; Espace ? 
 +       BEQ    SPTEND 
 +       CMPB   #RIGHT         ; Tabulation ? 
 +       BEQ    SPTEND 
 +       CMPB   #CR            ; Retour chariot ? 
 + 
 +SPTEND RTS 
 + 
 +************************************************************************************************************ 
 +* TOUP 
 +* Convertit la ligne de commande en majuscules 
 +************************************************************************************************************ 
 +TOUP   SET    * 
 +       LDX    #0 
 + 
 +TULOOP LDB    CMDBUF,X 
 +       CMPB   #CR            ; Jusqu'à la fin de la ligne 
 +       BEQ    TUEND 
 + 
 +       LBSR   UPCASE 
 +       STB    CMDBUF,X 
 +       LEAX   1,X 
 +       BRA    TULOOP 
 + 
 +TUEND  RTS 
 + 
 +************************************************************************************************************ 
 +* DISPBS 
 +* Efface le dernier caractère à l'écran 
 +************************************************************************************************************ 
 +DISPBS SET    * 
 +       LDB    #LEFT 
 +       LBSR   PCHAR          ; Reviens en arrière 
 +       LDB    #SPACE 
 +       LBSR   PCHAR          ; Efface le caractère 
 +       LDB    #LEFT 
 +       LBSR   PCHAR          ; Reviens en arrière 
 +       RTS
 </code> </code>
 +
 +[[code_source_de_nrdos.mo5_version_3.5|Retourner à la liste des fichiers]]
parser.asm.1765210553.txt.gz · Last modified: by fool-duplex

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki