+#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