IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
logo

FAQ PureBasicConsultez toutes les FAQ

Nombre d'auteurs : 7, nombre de questions : 68, dernière mise à jour : 3 janvier 2013  Ajouter une question

 

Bienvenue dans la F.A.Q. PureBasic !

Celle-ci va tenter de répondre aux questions les plus fréquemment posées sur le langage PureBasic et tous ses outils de programmation. Si elle n'a pas pour vocation de répondre à toutes les interrogations possibles, elle reste une bonne base de connaissances sur le PureBasic, et ne demande qu'à être enrichie par vos expériences personnelles.

Bien entendu, malgré toute l'attention qui a pu être portée à cette F.A.Q., des erreurs ont toujours pu s'y glisser. Prenez donc toutes les précautions qui s'imposent avant d'essayer un exemple.

Nous vous souhaitons une bonne lecture ! Et n'oubliez pas qu'en cas de problème, vous pourrez toujours poser votre question sur le forum PureBasic !

L'équipe PureBasic de Developpez.

SommaireData (Stockage des données) (2)
précédent sommaire suivant
 

La fonction assembleur Dup permet de dupliquer une valeur. Exemple : 4 Dup (25) duplique 4 fois la valeur 25.
Cette fonction peut être utilisée pour étendre les possibilités avec une DataSection. Et comme le montre l'exemple ci-dessous, il est possible de mixer la syntaxe classique de PureBasic avec la fonction Dup.

Code purebasic : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
 
Macro Data_B : !db 
EndMacro 
 
Macro Data_L : !dd 
EndMacro 
 
DataSection 
label: 
  Data.b 18 
  Data_b 4 Dup (5) 
  Data_l 8 Dup (1,2) 
  Data.l 123, 456 
  Data.q $7FFFFFFFFFFFFFFF 
EndDataSection 
 
Restore label 
 
Read.b b 
Debug b 
 
For i=1 To 4 
   Read.b b 
   Debug b 
Next 
 
For i=1 To 18 
   Read.l l 
   Debug l 
Next 
 
Read.q q 
Debug q

Mis à jour le 13 août 2011

Cette méthode est multi plateforme (pas d'asm) et fonctionne pour tous les types de données.

Code purebasic : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
 
; repeat once 
Macro _R1(_type_, _val_) 
  Data._type_ _val_ 
EndMacro 
 
; repeat 10 times 
Macro _R10(_type_, _val_) 
  _R1(_type_, _val_): _R1(_type_, _val_): _R1(_type_, _val_): _R1(_type_, _val_): _R1(_type_, _val_) 
  _R1(_type_, _val_): _R1(_type_, _val_): _R1(_type_, _val_): _R1(_type_, _val_): _R1(_type_, _val_) 
EndMacro 
 
; repeat 100 times 
Macro _R100(_type_, _val_) 
  _R10(_type_, _val_): _R10(_type_, _val_): _R10(_type_, _val_): _R10(_type_, _val_): _R10(_type_, _val_) 
  _R10(_type_, _val_): _R10(_type_, _val_): _R10(_type_, _val_): _R10(_type_, _val_): _R10(_type_, _val_) 
EndMacro 
 
; repeat _count_ times (0-999) 
Macro Times(_type_, _val_, _count_) 
  CompilerIf (_count_) > 999 
    CompilerError "Repeat count cannot be more than 999" 
  CompilerEndIf 
  
  CompilerIf (_count_) >= 900: _R100(_type_, _val_): CompilerEndIf 
  CompilerIf (_count_) >= 800: _R100(_type_, _val_): CompilerEndIf 
  CompilerIf (_count_) >= 700: _R100(_type_, _val_): CompilerEndIf 
  CompilerIf (_count_) >= 600: _R100(_type_, _val_): CompilerEndIf 
  CompilerIf (_count_) >= 500: _R100(_type_, _val_): CompilerEndIf 
  CompilerIf (_count_) >= 400: _R100(_type_, _val_): CompilerEndIf 
  CompilerIf (_count_) >= 300: _R100(_type_, _val_): CompilerEndIf 
  CompilerIf (_count_) >= 200: _R100(_type_, _val_): CompilerEndIf 
  CompilerIf (_count_) >= 100: _R100(_type_, _val_): CompilerEndIf  
  
  CompilerIf (_count_) % 100 >= 90: _R10(_type_, _val_): CompilerEndIf 
  CompilerIf (_count_) % 100 >= 80: _R10(_type_, _val_): CompilerEndIf 
  CompilerIf (_count_) % 100 >= 70: _R10(_type_, _val_): CompilerEndIf 
  CompilerIf (_count_) % 100 >= 60: _R10(_type_, _val_): CompilerEndIf 
  CompilerIf (_count_) % 100 >= 50: _R10(_type_, _val_): CompilerEndIf 
  CompilerIf (_count_) % 100 >= 40: _R10(_type_, _val_): CompilerEndIf 
  CompilerIf (_count_) % 100 >= 30: _R10(_type_, _val_): CompilerEndIf 
  CompilerIf (_count_) % 100 >= 20: _R10(_type_, _val_): CompilerEndIf 
  CompilerIf (_count_) % 100 >= 10: _R10(_type_, _val_): CompilerEndIf  
  
  CompilerIf (_count_) % 10 >= 9: _R1(_type_, _val_): CompilerEndIf 
  CompilerIf (_count_) % 10 >= 8: _R1(_type_, _val_): CompilerEndIf 
  CompilerIf (_count_) % 10 >= 7: _R1(_type_, _val_): CompilerEndIf 
  CompilerIf (_count_) % 10 >= 6: _R1(_type_, _val_): CompilerEndIf 
  CompilerIf (_count_) % 10 >= 5: _R1(_type_, _val_): CompilerEndIf 
  CompilerIf (_count_) % 10 >= 4: _R1(_type_, _val_): CompilerEndIf 
  CompilerIf (_count_) % 10 >= 3: _R1(_type_, _val_): CompilerEndIf 
  CompilerIf (_count_) % 10 >= 2: _R1(_type_, _val_): CompilerEndIf 
  CompilerIf (_count_) % 10 >= 1: _R1(_type_, _val_): CompilerEndIf  
EndMacro 
 
; ---- example ---- 
 
Restore values 
For i = 1 To 134 
  Read.s x.s 
  Debug Str(i) + ": " + x 
Next i 
 
DataSection 
  values: 
  Times(s, "foo", 23) 
  Times(s, "bar", 111) 
EndDataSection

Mis à jour le 3 janvier 2013

Proposer une nouvelle réponse sur la FAQ

Ce n'est pas l'endroit pour poser des questions, allez plutôt sur le forum de la rubrique pour ça


Réponse à la question

Liens sous la question
précédent sommaire suivant
 

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2024 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.