]> 4ch.mooo.com Git - 16.git/blobdiff - src/sega.c
== major changes and experimentation and improvements here and there! ww ==
[16.git] / src / sega.c
index 276b3e83fd05baf547181ed54b28cef624229cc0..d4d04d277de3f8a6768a4f9ffdca5af79a0920ac 100644 (file)
@@ -1,36 +1,52 @@
-#include <stdio.h>
-#include <dos.h>
-#include <malloc.h>
-
-typedef struct {
-       a_t __based( __self ) *next;
-       int                         number;
-}a_t;
-
-void PrintLastTwo( a_t far *list );
-
-void
-main(int argc, char *argv[])
-{
-       a_t far *list;
-       PrintLastTwo(list);
-}
-
-     void PrintLastTwo( a_t far *list )
-     {
-       __segment                seg;
-       a_t __based( seg ) *aptr;
-
-       seg  = FP_SEG( list );
-       aptr = FP_OFF( list );
-       for( ; aptr != _NULLOFF; aptr = aptr->next ) {
-         if( aptr->next == _NULLOFF ) {
-           printf( "Last item is %d\n",
-                   aptr->number );
-         } else if( aptr->next->next == _NULLOFF ) {
-           printf( "Second last item is %d\n",
-                   aptr->number );
-         }
-       }
-     }
-     
+#include <stdio.h>\r
+#include <stdlib.h>\r
+#include <malloc.h>\r
+\r
+struct list {\r
+    struct list __based(__self) *next;\r
+    int         value;\r
+};\r
+\r
+void main(int argc, char *argv[])\r
+  {\r
+    int         i;\r
+    __segment   segu;\r
+    struct list __based(segu) *head;\r
+    struct list __based(segu) *p;\r
+\r
+    /* allocate based heap */\r
+    segu = _bheapseg( 1024 );\r
+    if( segu == _NULLSEG ) {\r
+      printf( "Unable to allocate based heap\n" );\r
+      exit( 1 );\r
+    }\r
+\r
+    /* create a linked list in the based heap */\r
+    head = 0;\r
+    for( i = 1; i < 10; i++ ) {\r
+      p = _bmalloc( segu, sizeof( struct list ) );\r
+      if( p == _NULLOFF ) {\r
+        printf( "_bmalloc failed\n" );\r
+        break;\r
+      }\r
+      p->next = head;\r
+      p->value = i;\r
+      head = p;\r
+    }\r
+\r
+    /* traverse the linked list, printing out values */\r
+    for( p = head; p != 0; p = p->next ) {\r
+       printf("Segu = %04X %FP", p, p);\r
+      printf( "        Value = %d\n", p->value );\r
+    }\r
+\r
+    /* free all the elements of the linked list */\r
+    for( ; p = head; ) {\r
+      head = p->next;\r
+      _bfree( segu, p );\r
+    }\r
+    /* free the based heap */\r
+    _bfreeseg( segu );
+       printf("program=%P\n", *argv[0]);
+       printf("seg=%P\n", segu);\r
+}\r