tests: add some runtime error in nitin.input
[nit.git] / contrib / pep8analysis / tests / privat / 09-produit.pep
1 ; Programme qui manipule des produits
2 ; Jean Privat (c) 2010
3 ;
4 ; Programme principal
5          CALL    main1       
6          CALL    main2       
7          CALL    main3       
8          STOP                
9 ;
10 ; ****** main1: Initialise et affiche un produit global
11 main1:   LDA     1,i         
12          LDX     prCode,i    
13          STA     produitA,x  ; produitA->code = 1;
14          LDA     1495,i      
15          LDX     prPrix,i    
16          STA     produitA,x  ; produitA->prix = 1495;
17          LDA     nomA,i      
18          LDX     prNom,i     
19          STA     produitA,x  ; produitA->nom = nomA;
20          LDA     produitA,i  
21          CALL    prprod      ; prprod(produitA);
22          RET0                ; return;
23 produitA:.BLOCK  6           ; #prCode #prPrix #prNom
24 nomA:    .ASCII  "Un clavier\x00"
25 ;
26 ; ****** main2: Initialise et affiche un produit local (dans la pile)
27 main2:   SUBSP   6,i         ; #prNom #prPrix #prCode
28          LDA     2,i         
29          LDX     prCode,i    
30          STA     produitB,sx ; produitB->code = 2;
31          LDA     1395,i      
32          LDX     prPrix,i    
33          STA     produitB,sx ; produitB->prix = 1395;
34          LDA     nomB,i      
35          LDX     prNom,i     
36          STA     produitB,sx ; produitB->nom = nomB;
37          MOVSPA              
38          ADDA    produitB,i  
39          CALL    prprod      ; prprod(produitB);
40          RET6                ; #prNom #prPrix #prCode
41 produitB:.EQUATE 0           ; #prCode #prPrix #prNom
42 nomB:    .ASCII  "Une souris\x00"
43 ;
44 ; ****** main3: Initialise et affiche un produit dans le tas
45 main3:   SUBSP   2,i         ; #produitC
46          LDA     6,i         
47          CALL    new         ; produitC = malloc(6) #prCode #prPrix #prNom
48          STX     produitC,s  
49          LDA     3,i         
50          STA     prCode,x    ; produitC->code = 3;
51          LDA     1995,i      
52          STA     prPrix,x    ; procduitC->prix = 1995;
53          LDA     nomC,i      
54          STA     prNom,x     ; produitC->nom = nomC;
55          LDA     produitC,s  
56          CALL    prprod      ; prprod(produitC);
57          RET2                ; #produitC
58 produitC:.EQUATE 0           ; #2h
59 nomC:    .ASCII  "Clé usb\x00"
60 ; ****** Structure produit
61 prCode:  .EQUATE 0           ; #2d code du produit
62 prPrix:  .EQUATE 2           ; #2d prix du produit en cents
63 prNom:   .EQUATE 4           ; #2h nom du produit (pointeur vers chaîne)
64 ;
65 ; ****** prprod: Affiche un produit
66 ; IN A=adresse du produit (#2h)
67 prprodA: .EQUATE 0           ; #2h paramètre A
68 prprodX: .EQUATE 2           ; #2h sauve X
69 prprdstr:.EQUATE 4           ; #2h adresse du nom du produit (pour STRO)
70 prprod:  SUBSP   6,i         ; #prprdstr #prprodX #prprodA
71          STA     prprodA,s   ; range A
72          STX     prprodX,s   ; sauve X
73          LDX     prCode,i    
74          DECO    prprodA,sxf ; print(prprodA->prCode)
75          CHARO   ':',i       ; print(":")
76          LDX     prNom,i     
77          LDA     prprodA,sxf 
78          STA     prprdstr,s  
79          STRO    prprdstr,sf ; print(prprodA->prNom)
80          CHARO   ' ',i       ; print(" ")
81          LDX     prPrix,i    
82          DECO    prprodA,sxf ; print(prprodA->prPrix)
83          CHARO   '\n',i      ; print("\n")
84          LDA     prprodA,s   ; restaure A
85          LDX     prprodX,s   ; restaure X
86          RET6                ; #prprdstr #prprodX #prprodA
87 ;
88 ;
89 ;******* operator new
90 ;        Precondition: A contains number of bytes
91 ;        Postcondition: X contains pointer to bytes
92 new:     LDX     hpPtr,d     ;returned pointer
93          ADDA    hpPtr,d     ;allocate from heap
94          STA     hpPtr,d     ;update hpPtr
95          RET0                
96 hpPtr:   .ADDRSS heap        ;address of next free byte
97 heap:    .BLOCK  1           ;first byte in the heap
98          .END