]> 4ch.mooo.com Git - 16.git/blobdiff - src/sega.c
Merge remote-tracking branch 'upstream/master'
[16.git] / src / sega.c
old mode 100644 (file)
new mode 100755 (executable)
index 276b3e8..3a271cd
@@ -1,36 +1,67 @@
-#include <stdio.h>
-#include <dos.h>
-#include <malloc.h>
+#include <stdio.h>\r
+#include <stdlib.h>\r
+#include <malloc.h>\r
+\r
+struct list {
+#ifdef __WATCOMC__\r
+       struct list __based(__self) *next;
+#endif
+#ifdef __BORLANDC__
+       struct list _seg *next;
+#endif\r
+       int         value;\r
+};\r
+\r
+void main(int argc, char *argv[])\r
+{\r
+       int         i;
+#ifdef __WATCOMC__\r
+       __segment   segu;
+       void __based(__self) *pee;\r
+       struct list __based(segu) *head;\r
+       struct list __based(segu) *p;
+#endif
+#ifdef __BORLANDC__
+       void _seg *pee;\r
+       struct list _seg *head;\r
+       struct list _seg *p;
+#endif\r
+\r
+    /* allocate based heap */\r
+    segu = _bheapseg( 65536 );\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 < 4096; 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
+               if(p==head || p->next==0 || p==pee){
+                       printf("Segu = %04X", p); printf( "     Value = %d\n", p->value );
+               }\r
+    }\r
 
-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 );
-         }
-       }
-     }
-     
+       printf("program=%FP\n", *argv[0]);
+       printf("seg=%04X\n", segu);
+\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 );
+}\r