home *** CD-ROM | disk | FTP | other *** search
/ Team Palmtops 7 / Palmtops_numero07.iso / Ti / Magazine / Tests / DOORSOSD.ZIP / HUFFLIB.ASM < prev    next >
Encoding:
Assembly Source File  |  1999-12-23  |  3.3 KB  |  199 lines

  1.     include "doorsos.h"
  2.     xdef    _library
  3.     xdef    _ti92plus
  4.     xdef    _ti89
  5.     xdef    hufflib@0000
  6.     xdef    hufflib@0001
  7.     xdef    hufflib@0002
  8.     xdef    hufflib@0003
  9.     xdef    hufflib@0004
  10.  
  11. ;*****************************************************
  12. ;Originally written by Jimmy Mardell for Fargo
  13. ;Ported by Xavier VASSOR to Doors OS
  14.  
  15.  
  16. hufflib@0000:
  17. extract:
  18.  movem.l d0-d7/a0-a6,-(sp)
  19.  sf     d5
  20.  bsr Extract2
  21.  movem.l (sp)+,d0-d7/a0-a6
  22.  rts
  23.  
  24. ;*****************************************************
  25.  
  26. hufflib@0001:
  27. extract_string:
  28.  movem.l d0-d7/a0-a6,-(sp)
  29.  st     d5
  30.  bsr Extract2
  31.  movem.l (sp)+,d0-d7/a0-a6
  32.  rts
  33.  
  34. ;*****************************************************
  35.  
  36. hufflib@0002:
  37. write_string:
  38.  movem.l d0-d7/a0-a6,-(sp)
  39.  move.w  #4,-(sp)
  40. WriteString:
  41.  subq     #4,sp
  42.  move.w  d1,-(sp)
  43.  move.w  d0,-(sp)
  44.  move.l  a0,-(sp)
  45.  move.l  #80,-(sp)
  46.  jsr doorsos::HeapAlloc
  47.  addq     #4,sp
  48.  move.l  (sp)+,a0
  49.  tst.w     d0
  50.  beq RestoreRegs
  51.  move.w  d0,tmpstrH
  52.  doorsos::DEREF d0,a1
  53.  move.l  a1,4(sp)
  54.  st     d5
  55.  bsr Extract2
  56.  jsr doorsos::DrawStrXY
  57.  move.w  tmpstrH(PC),-(sp)
  58.  jsr doorsos::HeapFree
  59.  addq     #2,sp
  60. RestoreRegs:
  61.  lea     10(sp),sp
  62.  movem.l (sp)+,d0-d7/a0-a6
  63.  rts
  64.  
  65. ;*****************************************************
  66.  
  67. hufflib@0003:
  68. write_string_inv:
  69.  movem.l d0-d7/a0-a6,-(sp)
  70.  clr.w     -(sp)
  71.  bra WriteString
  72.  
  73. ;*****************************************************
  74.  
  75. hufflib@0004:
  76. check_mem:
  77.  movem.l d1-d7/a0-a6,-(sp)
  78.  move.l  #1140,-(sp)
  79.  jsr doorsos::HeapAlloc
  80.  addq     #4,sp
  81.  tst.w     d0
  82.  beq OutOfMem
  83.  move.w  d0,-(sp)
  84.  jsr doorsos::HeapFree
  85.  addq     #2,sp
  86.  moveq     #1,d0
  87. OutOfMem:
  88.  movem.l (sp)+,d1-d7/a0-a6
  89.  rts
  90.  
  91. Extract2:
  92.  movem.l a0-a1,-(sp)
  93.  move.l  #1024,-(sp)
  94.  jsr doorsos::HeapAlloc
  95.  addq     #4,sp
  96.  movem.l (sp)+,a0-a1
  97.  tst.w     d0
  98.  beq Done
  99.  move.w  d0,tableH
  100.  doorsos::DEREF d0,a6
  101.  move.l  a0,a2
  102.  move.w  (a2)+,d2
  103.  cmp.w     #1,d2
  104.  bne     MultiFiles
  105.  clr.w     d3
  106. MultiFiles:
  107.  move.w  (a2)+,d0
  108.  move.l  a2,a3
  109.  mulu     #6,d2
  110.  add.w     d2,a3
  111.  mulu     #6,d3
  112.  add.w     d3,a2
  113.  move.w  d0,d6
  114.  subq     #1,d6
  115.  move.l  a3,a4
  116.  add.w     d0,a4
  117.  clr.l     d0
  118.  clr.l     d1
  119. UncrunchTree:
  120.  btst.b  d1,(a4)
  121.  beq NoBranch
  122.  move.w  d0,-(sp)
  123.  addq     #2,d0
  124. NextTreeBit:
  125.  addq     #1,d1
  126.  bclr     #3,d1
  127.  beq UncrunchTree
  128.  addq     #1,a4
  129.  bra UncrunchTree
  130. NoBranch:
  131.  clr.b     0(a6,d0)
  132.  move.b  (a3)+,1(a6,d0)
  133.  addq     #2,d0
  134.  tst.w     d6
  135.  beq TreeBuilt
  136.  move.w  (sp)+,d2
  137.  move.w  d0,0(a6,d2)
  138.  bset.b  #7,0(a6,d2)
  139.  dbra     d6,NextTreeBit
  140. TreeBuilt:
  141.  move.w  (a2)+,d0
  142.  add.w     d0,a0
  143.  move.w  (a2)+,d3
  144.  move.w  (a2),d7
  145.  subq     #1,d7
  146. UncrunchData:
  147.  clr.l     d1
  148. CheckTree:
  149.  move.w  0(a6,d1),d2
  150.  bclr     #15,d2
  151.  beq EndOfBranch
  152.  btst.b  d3,(a0)
  153.  bne RightBranch
  154.  addq     #2,d1
  155.  bra NextDataBit
  156. RightBranch:
  157.  move.w  d2,d1
  158. NextDataBit:
  159.  addq     #1,d3
  160.  bclr     #3,d3
  161.  beq CheckTree
  162.  addq     #1,a0
  163.  bra CheckTree
  164. EndOfBranch:
  165.  tst.b     d5
  166.  bne ExtractString
  167.  move.b  d2,(a1)+
  168. Repeat:
  169.  dbra     d7,UncrunchData
  170.  bra Done
  171. ExtractString:
  172.  tst.w     d4
  173.  beq WriteData
  174.  tst.b     d2
  175.  bne Repeat
  176.  subq     #1,d4
  177.  bra Repeat
  178. WriteData:
  179.  move.b  d2,(a1)+
  180.  tst.b     d2
  181.  bne Repeat
  182. Done:
  183.  move.w  tableH(PC),-(sp)
  184.  jsr doorsos::HeapFree
  185.  addq     #2,sp
  186.  move.w  (a2),d0
  187.  rts
  188.  
  189. ;*****************************************************
  190.  
  191. tableH       dc.w 0
  192. tmpstrH    dc.w 0
  193.  
  194. ;*****************************************************
  195.  
  196. ;*****************************************************
  197.  
  198.     end
  199.