home *** CD-ROM | disk | FTP | other *** search
/ No Fragments Archive 4: The Falcon Archive / nf_archive_four_v1.0.iso / ARCHIVE / WORK / MSX / GTK08777.ZIP / GTK.DEV / SOURCES.OFF / COOKIE.S < prev    next >
Text File  |  1995-12-15  |  5KB  |  149 lines

  1. *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*
  2. *≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈*
  3. *                            *
  4. *             Petite gestion de cookies            *
  5. *                            *
  6. *    Ces routines sont du bidouillage, je vous conseille d'en    *
  7. *    utiliser d'autres pour vos propres applications!        *
  8. *                            *
  9. *≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈*
  10. * Version     : 15/12/1995, v0.742                *
  11. * Tab setting : 11                        *
  12. *≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈(C)oderight L. de Soras 1994-95*
  13. *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*
  14.  
  15.  
  16.  
  17.  
  18.  
  19. *≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈*
  20. *    Installation d'un cookie sur la jar            *
  21. *    Si celui-ci est déjà présent, on le signale.        *
  22. *    Si la jar est trop petite, on en crée une autre, avec l'adresse    *
  23. *    fournie comme 3ème paramètre. Attention, cette zone doit déjà    *
  24. *    être réservée! Si elle est utilisée, elle devra être résidente    *
  25. *    à la sortie du programme, sinon elle devra être libérée (enfin    *
  26. *    si vous voulez...). Prévoir assez large!            *
  27. *    Les paramètres sont des *modes d'adressages* (pensez aux #    *
  28. *    devant les nombres).                    *
  29. *    Renvoie (mot long):                    *
  30. *        0 s'il n'y a eu aucun problème,            *
  31. *        -1 si le cookie était déjà là,            *
  32. *        Un nombre positif indiquant la taille maxi de la nouvelle    *
  33. *        jar, en OCTETS, si on a été obligé d'en créer une.    *
  34. *    Marche en -*- SUPERVISEUR -*-                *
  35. *≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈*
  36.  
  37. newcookie:    Macro            ; 3 paramètres : Id, valeur, nouvelle adresse
  38.     movem.l    d1-a6,-(sp)
  39.     move.l    \3,-(sp)
  40.     move.l    \2,-(sp)
  41.     move.l    \1,-(sp)
  42.     bsr    rout_newcookie
  43.     lea    12(sp),sp
  44.     movem.l    (sp)+,d1-a6
  45.     EndM
  46.  
  47.  
  48.  
  49. *≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈*
  50. *    Lecture d'un cookie                    *
  51. *    Les paramètres sont des *modes d'adressages* (pensez aux #    *
  52. *    devant les nombres).                    *
  53. *    Renvoie l'adresse de ce cookie s'il est trouvé, sinon 0.    *
  54. *    Marche en -*- SUPERVISEUR -*-                *
  55. *≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈*
  56.  
  57. readcookie:    Macro        ; 1 paramètre : Id
  58.     movem.l    d1-a6,-(sp)
  59.     move.l    \1,d0
  60.     bsr    rout_readcookie
  61.     movem.l    (sp)+,d1-a6
  62.     EndM
  63.  
  64.  
  65.  
  66.  
  67.  
  68. *≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈*
  69. *    Routines des cookies. Ne pas oublier de déplier cette macro    *
  70. *    à la fin de votre programme si vous utilisez les fonctions     *
  71. *    cookie précédentes!                    *
  72. *≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈*
  73.  
  74. cookie_routines:    Macro
  75.  
  76. ;--- Routine d'ajout d'un cookie ---------------------------------------------
  77. rout_newcookie:
  78.     move.l    $5a0.w,a0        ; a0 = adresse de la Cookie Jar
  79.     move.l    4(sp),d1        ; d1 = Id du nouveau cookie
  80.     move.l    8(sp),d4        ; d4 = valeur du nouveau cookie
  81.     move.l    12(sp),a1        ; a1 = adresse d'une éventuelle nouvelle jar
  82.     moveq    #0,d0        ; d0 = compteur de cookies
  83. .readloop:
  84.     move.l    (a0,d0.w*8),d2    ; d2 = id du cookie qu'on scanne
  85.     move.l    4(a0,d0.w*8),d3    ; d3 = sa valeur
  86.     cmp.l    d2,d1        ; On est déjà dans la jar ?
  87.     beq.s    .present        ; Oui, on s'en va
  88.     addq.l    #1,d0
  89.     tst.l    d2        ; C'est le dernier ?
  90.     bne.s    .readloop        ; Non, on continue à chercher
  91.  
  92.     cmp.l    d0,d3        ; Il y a assez de place ?
  93.     ble.s    .pasdeplace    ; Non, il faut créer une autre Jar
  94.  
  95.     move.l    -8(a0,d0.w*8),(a0,d0.w*8)    ; On translate le dernier cookie
  96.     move.l    -4(a0,d0.w*8),4(a0,d0.w*8)
  97.     move.l    d1,-8(a0,d0.w*8)    ; Et on met le notre à
  98.     move.l    d4,-4(a0,d0.w*8)    ; l'avant-dernière position
  99.  
  100.     moveq    #0,d0        ; Pas d'erreur
  101.     rts
  102.  
  103. .present:
  104.     moveq    #-1,d0        ; déjà présent, retourne -1
  105.     rts
  106.  
  107. .pasdeplace:            ; Pas de place, il faut copier toute la
  108.                 ; jar dans un endroit plus grand, déjà
  109.                 ; réservé, dont on a fourni l'adresse.
  110.                 ; Ne pas oublier de *ne pas* réalouer cet
  111.                 ; endroit en cas d'utilisation. (pas propre!)
  112.     move.l    d0,d5
  113.     subq.l    #1,d5        ; *** Ca bugge si la jar ne contient que le
  114. .copyloop:                ; cookie de fin, mais c'est normalement impossible.
  115.     move.l    (a0)+,(a1)+    ; Copie l'ancienne jar sauf le cookie de fin
  116.     move.l    (a0)+,(a1)+
  117.     dbra    d5,.copyloop
  118.     move.l    d1,(a1)+        ; Copie le nouveau cookie à la suite
  119.     move.l    d4,(a1)+
  120.     clr.l    (a1)+        ; Et fabrique le cookie de fin
  121.     add.l    #8,d0        ; place pour 8 autres cookies
  122.     lsl.l    #3,d0        ; conversion en octets
  123.     move.l    d0,(a1)+        ; Stoque, et retourne la taille de cette nouvelle jar
  124.     rts
  125.  
  126.  
  127.  
  128. ;--- Routine de recherche d'un cookie ----------------------------------------
  129. rout_readcookie:
  130.     move.l    $5a0.w,a0
  131. .loop:    move.l    (a0),d1
  132.     beq.s    .notfound
  133.     cmp.l    d1,d0
  134.     beq.s    .found
  135.     addq.l    #8,a0
  136.     bra.s    .loop
  137.  
  138. .found:
  139.     move.l    a0,d0
  140.     rts
  141.  
  142. .notfound:
  143.     moveq    #0,d0
  144.     rts
  145.  
  146.  
  147.  
  148.     EndM        ; Fin des routines de cookie
  149.