home *** CD-ROM | disk | FTP | other *** search
/ GEMini Atari / GEMini_Atari_CD-ROM_Walnut_Creek_December_1993.iso / files / language / perl_419 / atarist.c < prev    next >
Encoding:
C/C++ Source or Header  |  1993-10-23  |  4.9 KB  |  235 lines

  1. /*
  2.  * random stuff for atariST
  3.  */
  4.  
  5. #include "EXTERN.h"
  6. #include "perl.h"
  7. #include <process.h>
  8. #include <stdio.h>
  9.  
  10. long _stksize = 64*1024L;
  11. unsigned long __DEFAULT_BUFSIZ__ = 4 * 1024L;
  12.  
  13. /*
  14.  * The following code is based on the do_exec and do_aexec functions
  15.  * in file doio.c
  16.  */
  17. int
  18. do_aspawn(really,arglast)
  19. STR *really;
  20. int *arglast;
  21. {
  22.     register STR **st = stack->ary_array;
  23.     register int sp = arglast[1];
  24.     register int items = arglast[2] - sp;
  25.     register char **a;
  26.     char **argv;
  27.     char *tmps;
  28.     int status;
  29.  
  30.     if (items) {
  31.     New(1101,argv, items+1, char*);
  32.     a = argv;
  33.     for (st += ++sp; items > 0; items--,st++) {
  34.         if (*st)
  35.         *a++ = str_get(*st);
  36.         else
  37.         *a++ = "";
  38.     }
  39.     *a = Nullch;
  40.     if (really && *(tmps = str_get(really)))
  41.         status = spawnvp(-P_WAIT,tmps,argv); /* -P_WAIT is a hack, see spawnvp.c in the lib */
  42.     else
  43.         status = spawnvp(-P_WAIT,argv[0],argv);
  44.     Safefree(argv);
  45.     }
  46.     return status;
  47. }
  48.  
  49.  
  50. int
  51. do_spawn(cmd)
  52. char *cmd;
  53. {
  54.     return system(cmd);
  55. }
  56.  
  57. int userinit()
  58. {
  59.     install_null();    /* install device /dev/null or NUL: */
  60.     return 0;
  61. }
  62.  
  63. /*
  64.  * we unfortunately cannot use the super efficient fread/write from the lib
  65.  */
  66. size_t fread(void *data, size_t size, size_t count, FILE *fp)
  67. {
  68.     size_t i, j;
  69.     unsigned char *buf = (unsigned char *)data;
  70.     int c;
  71.  
  72.     for(i = 0; i < count; i++)
  73.     {
  74.     for(j = 0; j < size; j++)
  75.     {
  76.         if((c = getc(fp)) == EOF)
  77.            return 0;
  78.         *buf++ = c;
  79.         }
  80.     }
  81.     return i;
  82. }
  83.  
  84. size_t fwrite(const void *data, size_t size, size_t count, FILE *fp)
  85. {
  86.     size_t i, j;
  87.     const unsigned char *buf = (const unsigned char *)data;
  88.  
  89.     for(i = 0; i < count; i++)
  90.     {
  91.     for(j = 0; j < size; j++)
  92.     {
  93.         if(fputc(*buf++, fp) == EOF)
  94.            return 0;
  95.         }
  96.     }
  97.     return i;
  98. }
  99.  
  100. #ifdef HAS_SYSCALL
  101. #define __NO_INLINE__
  102. #include <osbind.h> /* must include this for proper protos */
  103.  
  104. /* these must match osbind.pl */
  105. #define TRAP_1_W        1
  106. #define TRAP_1_WW        2
  107. #define TRAP_1_WL        3
  108. #define TRAP_1_WLW        4
  109. #define TRAP_1_WWW        5
  110. #define TRAP_1_WLL        6
  111. #define TRAP_1_WWLL        7
  112. #define TRAP_1_WLWW        8
  113. #define TRAP_1_WWLLL        9
  114. #define TRAP_13_W        10
  115. #define TRAP_13_WW        11
  116. #define TRAP_13_WL        12
  117. #define TRAP_13_WWW        13
  118. #define TRAP_13_WWL        14
  119. #define TRAP_13_WWLWWW        15
  120. #define TRAP_14_W        16
  121. #define TRAP_14_WW        17
  122. #define TRAP_14_WL        18
  123. #define TRAP_14_WWW        19
  124. #define TRAP_14_WWL        20
  125. #define TRAP_14_WWLL        21
  126. #define TRAP_14_WLLW        22
  127. #define TRAP_14_WLLL        23
  128. #define TRAP_14_WWWL        24
  129. #define TRAP_14_WWWWL        25
  130. #define TRAP_14_WLLWW        26
  131. #define TRAP_14_WWWWWWW        27
  132. #define TRAP_14_WLLWWWWW    28
  133. #define TRAP_14_WLLWWWWLW    29
  134. #define TRAP_14_WLLWWWWWLW    30
  135.  
  136. int syscall(trap, fn, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12 )
  137. unsigned long trap, fn, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12;
  138. {
  139.   /* for now */
  140.   switch(trap)
  141.   {
  142.     case TRAP_1_W:
  143.       return trap_1_w(fn);
  144.       
  145.     case TRAP_1_WW:
  146.       return trap_1_ww(fn, a1);
  147.       
  148.     case TRAP_1_WL:
  149.       return trap_1_wl(fn, a1);
  150.       
  151.     case TRAP_1_WLW:
  152.       return trap_1_wlw(fn, a1, a2);
  153.       
  154.     case TRAP_1_WWW:
  155.       return trap_1_www(fn, a1, a2);
  156.       
  157.     case TRAP_1_WLL:
  158.       return trap_1_wll(fn, a1, a2);
  159.       
  160.     case TRAP_1_WWLL:
  161.       return trap_1_wwll(fn, a1, a2, a3);
  162.       
  163.     case TRAP_1_WLWW:
  164.       return trap_1_wlww(fn, a1, a2, a3);
  165.       
  166.     case TRAP_1_WWLLL:
  167.       return trap_1_wwlll(fn, a1, a2, a3, a4);
  168.       
  169.     case TRAP_13_W:
  170.       return trap_13_w(fn);
  171.       
  172.     case TRAP_13_WW:
  173.       return trap_13_ww(fn, a1);
  174.       
  175.     case TRAP_13_WL:
  176.       return trap_13_wl(fn, a1);
  177.       
  178.     case TRAP_13_WWW:
  179.       return trap_13_www(fn, a1, a2);
  180.       
  181.     case TRAP_13_WWL:
  182.       return trap_13_wwl(fn, a1, a2);
  183.       
  184.     case TRAP_13_WWLWWW:
  185.       return trap_13_wwlwww(fn, a1, a2, a3, a4, a5);
  186.       
  187.     case TRAP_14_W:
  188.       return trap_14_w(fn);
  189.       
  190.     case TRAP_14_WW:
  191.       return trap_14_ww(fn, a1);
  192.       
  193.     case TRAP_14_WL:
  194.       return trap_14_wl(fn, a1);
  195.       
  196.     case TRAP_14_WWW:
  197.       return trap_14_www(fn, a1, a2);
  198.       
  199.     case TRAP_14_WWL:
  200.       return trap_14_wwl(fn, a1, a2);
  201.       
  202.     case TRAP_14_WWLL:
  203.       return trap_14_wwll(fn, a1, a2, a3);
  204.       
  205.     case TRAP_14_WLLW:
  206.       return trap_14_wllw(fn, a1, a2, a3);
  207.       
  208.     case TRAP_14_WLLL:
  209.       return trap_14_wlll(fn, a1, a2, a3);
  210.       
  211.     case TRAP_14_WWWL:
  212.       return trap_14_wwwl(fn, a1, a2, a3);
  213.       
  214.     case TRAP_14_WWWWL:
  215.       return trap_14_wwwwl(fn, a1, a2, a3, a4);
  216.       
  217.     case TRAP_14_WLLWW:
  218.       return trap_14_wllww(fn, a1, a2, a3, a4);
  219.       
  220.     case TRAP_14_WWWWWWW:
  221.       return trap_14_wwwwwww(fn, a1, a2, a3, a4, a5, a6);
  222.       
  223.     case TRAP_14_WLLWWWWW:
  224.       return trap_14_wllwwwww(fn, a1, a2, a3, a4, a5, a6, a7);
  225.       
  226.     case TRAP_14_WLLWWWWLW:
  227.       return trap_14_wllwwwwlw(fn, a1, a2, a3, a4, a5, a6, a7, a8);
  228.       
  229.     case TRAP_14_WLLWWWWWLW:
  230.       return trap_14_wllwwwwwlw(fn, a1, a2, a3, a4, a5, a6, a7, a8, a9);
  231.   }      
  232. }
  233. #endif
  234.  
  235.