Merge: doc: fixed some typos and other misc. corrections
[nit.git] / contrib / pep8analysis / tests / privat / 07-stri.pep
1 ; Semaine 7
2 ; Programme qui lit une chaîne de caractère (et l'affiche deux fois)
3 ; Jean Privat (c) 2010
4          LDA     buffer,i    
5          LDX     size,i      
6          CALL    STRI        ; STRI(buffer,size);
7          STRO    buffer,d    
8          CHARO   '\n',i      
9          STRO    buffer,d    ; print(buffer + '\n' + buffer);
10          STOP                ; exit();
11 buffer:  .BLOCK  20          ; Buffer for the string
12 size:    .EQUATE 20          ; Size of the buffer
13 ;
14 ; STRI: lit une ligne dans un tampon et place '\x00' à la fin
15 ; In:  A=Adresse du tampon
16 ;      X=Taille du tampon en octet
17 ; Out: A=Adresse du tampon (inchangé)
18 ;      X=Nombre de caractères lu (ou offset du '\x00')
19 ; Err: Avorte si le tampon n'est pas assez grand pour
20 ;      stocker la ligne et le '\0' final
21 STRI:    STA     striPtr,d   ; sauve A;
22          ADDX    striPtr,d   
23          STX     striPtr2,d  ; striPtr2 = A+X;
24          LDX     striPtr,d   ; X = striPtr;
25 striLoop:CPX     striPtr2,d  ; while(true) {
26          BRGE    striErr     ;   if(X>=striPtr2) throws new Error();
27          CHARI   0,x         ;   *X = getChar();
28          LDA     0,i         
29          LDBYTEA 0,x         
30          CPA     '\n',i      
31          BREQ    striFin     
32          CPA     '\x00',i    
33          BREQ    striFin     ;   if(*X=='\n' || *X=='\x00') break;
34          ADDX    1,i         ;   X++;
35          BR      striLoop    ; } // fin boucle infinie
36 striFin: LDBYTEA 0,i         
37          STBYTEA 0,x         ; *X='\x00';
38          SUBX    striPtr,d   ; X = X-striPtr
39          LDBYTEA striPtr,d   ; restaure A;
40          RET0                ; return;
41 striErr: STRO    striEMsg,d  
42          STOP                
43 striEMsg:.ASCII  "STRI erreur: débordement de capacité\n\x00"
44 striPtr: .BLOCK  2           ; #2d adresse de début du tampon
45 striPtr2:.BLOCK  2           ; #2d adresse de fin de tampon (à ne pas écrire)
46          .END