<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DZone Snippets: Darktemplar's Code Snippets</title>
    <link>http://snippets.dzone.com/posts</link>
    <pubDate>Fri, 08 Aug 2008 03:20:17 GMT</pubDate>
    <description>DZone Snippets: Darktemplar's Code Snippets</description>
    <item>
      <title>Single linked list unit</title>
      <link>http://snippets.dzone.com/posts/show/3253</link>
      <description>This code is a simple pascal library to handle single-linked-lists&lt;br /&gt;&lt;br /&gt;function llsGetItem(id: cardinal; var start: pointer): pointer;&lt;br /&gt;&lt;br /&gt;   Returns an item of specified ID, it remains in list&lt;br /&gt;&lt;br /&gt;function llsTakeOutItem(id: cardinal; var start: pointer): pointer;&lt;br /&gt;&lt;br /&gt;   Returns an item of specified ID, it is removed from list&lt;br /&gt;&lt;br /&gt;procedure llsInsertItem(item: pointer; var start: pointer);&lt;br /&gt;&lt;br /&gt;   Inserts an item to list(item is a valid header)&lt;br /&gt;&lt;br /&gt;function llsGetItemCount(start: pointer): cardinal;&lt;br /&gt;&lt;br /&gt;   Gets number of items&lt;br /&gt;&lt;br /&gt;function llsNewSLLHeader: PSLLItem;&lt;br /&gt;&lt;br /&gt;   Allocates list item header&lt;br /&gt;&lt;br /&gt;procedure llsKillSLLHeader(hdr: pointer);&lt;br /&gt;&lt;br /&gt;   Deallocated list item header&lt;br /&gt;&lt;code&gt;&lt;br /&gt;unit SLLMan;&lt;br /&gt;interface&lt;br /&gt;type&lt;br /&gt;  PSLLItem = ^TSLLItem;&lt;br /&gt;  TSLLItem = record&lt;br /&gt;    Next: pointer;&lt;br /&gt;    Data: pointer;&lt;br /&gt;   end;&lt;br /&gt;&lt;br /&gt;function llsGetItem(id: cardinal; var start: pointer): pointer;&lt;br /&gt;function llsTakeOutItem(id: cardinal; var start: pointer): pointer;&lt;br /&gt;procedure llsInsertItem(item: pointer; var start: pointer);&lt;br /&gt;function llsGetItemCount(start: pointer): cardinal;&lt;br /&gt;function llsNewSLLHeader: PSLLItem;&lt;br /&gt;procedure llsKillSLLHeader(hdr: pointer);&lt;br /&gt;       // These ids are numbered from 0&lt;br /&gt;implementation&lt;br /&gt;function malloc(size: cardinal): pointer;&lt;br /&gt;begin&lt;br /&gt;  GetMem(result,size);&lt;br /&gt;end;&lt;br /&gt;function llsGetItemCount(start: pointer): cardinal;&lt;br /&gt;var&lt;br /&gt;  cur: PSLLItem;&lt;br /&gt;  tmp: cardinal;&lt;br /&gt;begin&lt;br /&gt;  if start = nil then begin llsGetItemCount := 0; Exit; end;&lt;br /&gt;  tmp := 1;  cur := start;&lt;br /&gt;  while (cur^.Next &lt;&gt; nil) do&lt;br /&gt;  begin&lt;br /&gt;    Inc(tmp);&lt;br /&gt;    cur := cur^.Next;&lt;br /&gt;  end;&lt;br /&gt;  llsGetItemCount := tmp;&lt;br /&gt;end;&lt;br /&gt;procedure llsKillSLLHeader(hdr: pointer);&lt;br /&gt;begin&lt;br /&gt;  if hdr = nil then Exit;&lt;br /&gt;  Free(hdr);&lt;br /&gt;end;&lt;br /&gt;function llsNewSLLHeader: PSLLItem;&lt;br /&gt;var&lt;br /&gt;  tmp: PSLLItem;&lt;br /&gt;begin&lt;br /&gt;  tmp := malloc(sizeof(TSLLItem));&lt;br /&gt;  tmp^.Next := nil;&lt;br /&gt;  tmp^.Data := nil;&lt;br /&gt;  llsNewSLLHeader := tmp;&lt;br /&gt;end;&lt;br /&gt;function llsGetItem(id: cardinal; var start: pointer): pointer;&lt;br /&gt;var&lt;br /&gt;  cur: PSLLItem;&lt;br /&gt;begin&lt;br /&gt;  if start = nil then begin llsGetItem := nil; Exit; end;&lt;br /&gt;  cur := start;&lt;br /&gt;  while (id&lt;&gt;0) do&lt;br /&gt;  begin&lt;br /&gt;    if cur^.Next &lt;&gt; nil then&lt;br /&gt;        begin&lt;br /&gt;          Dec(id);&lt;br /&gt;          cur := cur^.Next;&lt;br /&gt;        end else&lt;br /&gt;        begin&lt;br /&gt;          llsGetItem := nil;&lt;br /&gt;          Exit;&lt;br /&gt;        end;&lt;br /&gt;  end;&lt;br /&gt;  llsGetItem := cur;&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;function llsTakeOutItem(id: cardinal; var start: pointer): pointer;&lt;br /&gt;var&lt;br /&gt;  tmp: PSLLItem;&lt;br /&gt;  last: PSLLItem;&lt;br /&gt;begin&lt;br /&gt;  if start = nil then begin llsTakeOutItem := nil; Exit; end;&lt;br /&gt;  if (id = 0) then&lt;br /&gt;    begin&lt;br /&gt;      tmp := start;&lt;br /&gt;      if tmp^.Next = nil then start := nil else start := tmp^.Next;&lt;br /&gt;      llsTakeOutItem := tmp;&lt;br /&gt;      Exit;&lt;br /&gt;    end;&lt;br /&gt;  tmp := start;&lt;br /&gt;  repeat&lt;br /&gt;    dec(id);&lt;br /&gt;    last := tmp;&lt;br /&gt;    tmp := tmp^.Next;&lt;br /&gt;  until (id = 0);&lt;br /&gt;  last^.Next := tmp^.Next;&lt;br /&gt;  llsTakeOutitem := tmp;&lt;br /&gt;end;&lt;br /&gt;procedure llsInsertItem(item: pointer; var start: pointer);&lt;br /&gt;var&lt;br /&gt;  cur: PSLLItem;&lt;br /&gt;begin&lt;br /&gt; if start = nil then&lt;br /&gt;  begin&lt;br /&gt;    start := item;&lt;br /&gt;    exit;&lt;br /&gt;  end;&lt;br /&gt; cur := start;&lt;br /&gt; while (cur^.Next&lt;&gt;nil) do cur := cur^.Next;&lt;br /&gt; cur^.Next := item;&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;end.&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Sun, 07 Jan 2007 17:58:21 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/3253</guid>
      <author>darktemplar (Piotr)</author>
    </item>
    <item>
      <title>Converting diskette LBA to CHS</title>
      <link>http://snippets.dzone.com/posts/show/3130</link>
      <description>// description of your code here&lt;br /&gt;&lt;br /&gt;Put LBA address in AX and get your results in CL, CH and DH.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;;-----------------------------------------------------------------------------;&lt;br /&gt;;		DISKETTE_LBA_TO_CHS(AX LBA) CL Head, CH Cylinder, DH Sector   ;&lt;br /&gt;;-----------------------------------------------------------------------------;&lt;br /&gt;diskette_lba_to_chs:&lt;br /&gt;	xor dx, dx&lt;br /&gt;	mov bx, 18&lt;br /&gt;        div bx&lt;br /&gt;	push dx				; = Stack(1)			&lt;br /&gt;	mov dx, ax&lt;br /&gt;        shr ax, 2&lt;br /&gt;	mov cl, al&lt;br /&gt;	mov ch, dl&lt;br /&gt;	pop dx				; = Stack(0)&lt;br /&gt;	inc dl&lt;br /&gt;	mov dh, dl&lt;br /&gt;	ret&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Tue, 12 Dec 2006 02:05:46 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/3130</guid>
      <author>darktemplar (Piotr)</author>
    </item>
    <item>
      <title>[ASM]Write String only using BIOS</title>
      <link>http://snippets.dzone.com/posts/show/3129</link>
      <description>First, set starting address of text into DS:SI registers. Procedure writes text until null-character is met.&lt;br /&gt;&lt;code&gt;&lt;br /&gt;;-----------------------------------------------------------------------------;&lt;br /&gt;;		WRITE_STRING(DS:SI Text)                                      ;&lt;br /&gt;;-----------------------------------------------------------------------------;&lt;br /&gt;;	Writes string from DS:SI until character #0 is met		      ;&lt;br /&gt;Write_String:		&lt;br /&gt;	mov ah, 0xE	&lt;br /&gt;	xor bh, bh	&lt;br /&gt;	mov bl, 0x7&lt;br /&gt;.nextchar	&lt;br /&gt;	lodsb		&lt;br /&gt;	or al,al&lt;br /&gt;	jz .return&lt;br /&gt;	int 10h	&lt;br /&gt;	jmp .nextchar&lt;br /&gt;.return		&lt;br /&gt;	ret	&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Tue, 12 Dec 2006 02:02:47 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/3129</guid>
      <author>darktemplar (Piotr)</author>
    </item>
  </channel>
</rss>
