home *** CD-ROM | disk | FTP | other *** search
/ Amiga MA Magazine 1998 #6 / amigamamagazinepolishissue1998.iso / coders / biblioteki / c_library / easylibs / source / helloworldlib.c < prev    next >
C/C++ Source or Header  |  1977-12-31  |  2KB  |  101 lines

  1. /*
  2.   This is a rather simple library, supporting only one function call.
  3.   It uses LibHeader.c.
  4. */
  5.  
  6. #ifndef EXEC_TYPES_H
  7. #include <exec/types.h>
  8. #endif
  9. #ifndef DOS_DOS_H
  10. #include <dos/dos.h>
  11. #endif
  12.  
  13.  
  14.  
  15.  
  16. /*****************************************************************************
  17.   Compiler specific stuff (Handling register arguments)
  18. *****************************************************************************/
  19. #if defined(_DCC)
  20. #define REG(x) __ ## x
  21. #define SAVEDS __geta4
  22. #define ASM
  23. #else
  24. #if defined(__SASC)
  25. #define REG(x) register __ ## x
  26. #define SAVEDS __saveds
  27. #define ASM __asm
  28. #else
  29. #error "Don't know how to handle register arguments for your compiler."
  30. #endif
  31. #endif
  32.  
  33.  
  34.  
  35.  
  36.  
  37. /*
  38.   Some stuff for automatic generation of the FD file.
  39.  
  40. FDPrototype ##base _HelloWorldBase
  41. FDPrototype * Very simple library
  42. FDPrototype ##bias 30
  43. FDPrototype ##public
  44. */
  45.  
  46.  
  47.  
  48.  
  49.  
  50. /*
  51.   Our libraries one and only function. :-)
  52.  
  53.   Don't forget to add autodocs here if this is a real library!
  54. */
  55. /*
  56.   This comment defines the functions entry in the FD file.
  57.   Note that doing it this way forces you to put the functions
  58.   in the right order!
  59.  
  60. FDPrototype HelloWorld(StringNum)(d0)
  61. */
  62. /*
  63.   This comment defines the functions entry in the proto file.
  64. Prototype STRPTR HelloWorld(LONG);
  65. */
  66. SAVEDS ASM STRPTR HelloWorld(REG(d0) StringNum,
  67.                  REG(a6) HelloWorldBase)
  68.                              /*
  69.                    Be sure that your library function expects
  70.                    at least one argument. (The library base
  71.                    pointer is a good choice, even if you don't 
  72.                    need it.) Dice's linker will claim missing
  73.                    symbols otherwise.
  74.                  */
  75.  
  76. { STATIC STRPTR strings [] = 
  77.     {
  78.       "Hello, world!\n",
  79.       "Hello, local world!\n",
  80.       "Hello, small world!\n",
  81.       "Hello, easy world!\n"
  82.     };
  83.  
  84.   /*
  85.     Note that we would need to initialize this variable even if the first
  86.     value would be 0! The startup code of LibHeader.c doesn't clear the
  87.     BSS segment.
  88.   */
  89.   STATIC LONG LastNum = -1;
  90.  
  91.   if (StringNum < 0  ||  StringNum >= (sizeof(strings) / sizeof(STRPTR)))
  92.     { StringNum = ++LastNum;
  93.       if (StringNum == (sizeof(strings) / sizeof(STRPTR)))
  94.     { StringNum = 0;
  95.     }
  96.     }
  97.  
  98.   LastNum = StringNum;
  99.   return(strings[StringNum]);
  100. }
  101.