| 1 | #include <SIOUX.h>
 | 
|---|
| 2 | #include <stdlib.h>
 | 
|---|
| 3 | #include <stdio.h>
 | 
|---|
| 4 | #include <string.h>
 | 
|---|
| 5 | #include "unixmac.h"
 | 
|---|
| 6 | #include "Files.h"
 | 
|---|
| 7 | #include <LowMem.h>
 | 
|---|
| 8 | #include "sys/time.h"
 | 
|---|
| 9 | #include "console.h"
 | 
|---|
| 10 | 
 | 
|---|
| 11 | int _wakeup = 0;
 | 
|---|
| 12 | int macSleepTicks = 10;
 | 
|---|
| 13 | int macRunTicks = 5;
 | 
|---|
| 14 | static long int macLastTicks = 0;
 | 
|---|
| 15 | 
 | 
|---|
| 16 | /*int utimes(char* fn, void*)
 | 
|---|
| 17 | {
 | 
|---|
| 18 |   FileParam pb;
 | 
|---|
| 19 |   char pfn[256];
 | 
|---|
| 20 |   strncpy(pfn, fn, 255);
 | 
|---|
| 21 |   c2pstr(pfn);
 | 
|---|
| 22 | 
 | 
|---|
| 23 |   pb.ioCompletion = NULL;
 | 
|---|
| 24 |   pb.ioVRefNum = NULL;
 | 
|---|
| 25 |   pb.ioFVersNum = 0;
 | 
|---|
| 26 |   pb.ioFDirIndex = 0;
 | 
|---|
| 27 |   pb.ioNamePtr = (StringPtr) &pfn;
 | 
|---|
| 28 |   
 | 
|---|
| 29 |   PBGetFInfo((ParmBlkPtr)&pb, FALSE);
 | 
|---|
| 30 |   
 | 
|---|
| 31 |   GetDateTime(&(pb.ioFlMdDat)); 
 | 
|---|
| 32 |   
 | 
|---|
| 33 |   PBSetFInfo((ParmBlkPtr)&pb, FALSE);
 | 
|---|
| 34 |   return 0;
 | 
|---|
| 35 | }
 | 
|---|
| 36 | 
 | 
|---|
| 37 | */
 | 
|---|
| 38 | /*
 | 
|---|
| 39 | unsigned int sleep(unsigned int secs)
 | 
|---|
| 40 | {
 | 
|---|
| 41 |   unsigned long int startTime, endTime, sleepTime, time;
 | 
|---|
| 42 |   EventRecord theEvent;
 | 
|---|
| 43 |   GetDateTime(&startTime);
 | 
|---|
| 44 |   endTime = startTime + secs;
 | 
|---|
| 45 |   time = startTime;
 | 
|---|
| 46 |   while ((time < endTime) && !_wakeup) {
 | 
|---|
| 47 |     sleepTime = 60 * (endTime - time);
 | 
|---|
| 48 |     if (WaitNextEvent(everyEvent, &theEvent,sleepTime,0))
 | 
|---|
| 49 |       SIOUXHandleOneEvent(&theEvent);
 | 
|---|
| 50 |     GetDateTime(&time);
 | 
|---|
| 51 |   }
 | 
|---|
| 52 |   return 0;
 | 
|---|
| 53 | }
 | 
|---|
| 54 | */
 | 
|---|
| 55 | 
 | 
|---|
| 56 | void yield()
 | 
|---|
| 57 | {
 | 
|---|
| 58 |     EventRecord theEvent;
 | 
|---|
| 59 |     long int ticks = LMGetTicks();
 | 
|---|
| 60 |     if (ticks - macLastTicks >= macRunTicks) {
 | 
|---|
| 61 |       if (WaitNextEvent(everyEvent, &theEvent,macSleepTicks,0))
 | 
|---|
| 62 |         SIOUXHandleOneEvent(&theEvent);
 | 
|---|
| 63 |       macLastTicks = LMGetTicks();
 | 
|---|
| 64 |     }
 | 
|---|
| 65 | }
 | 
|---|
| 66 | 
 | 
|---|
| 67 | pid_t fork()
 | 
|---|
| 68 | {
 | 
|---|
| 69 |   return 0;
 | 
|---|
| 70 | }
 | 
|---|
| 71 | 
 | 
|---|
| 72 | int link(char*, char*) {return 0;}
 | 
|---|
| 73 | char* sys_errlist[1];
 | 
|---|
| 74 | 
 | 
|---|
| 75 | 
 | 
|---|
| 76 | void InitToolBox()
 | 
|---|
| 77 | {
 | 
|---|
| 78 |   InitGraf(&qd.thePort);                // Toolbox Managers
 | 
|---|
| 79 |   InitFonts();
 | 
|---|
| 80 |   InitWindows();
 | 
|---|
| 81 |   InitMenus();
 | 
|---|
| 82 |   TEInit();
 | 
|---|
| 83 |   InitDialogs(nil);
 | 
|---|
| 84 | }
 | 
|---|
| 85 | 
 | 
|---|
| 86 | #ifdef __mac__
 | 
|---|
| 87 | #define SEP ':'
 | 
|---|
| 88 | #else
 | 
|---|
| 89 | #define SEP '/'
 | 
|---|
| 90 | #endif
 | 
|---|
| 91 | 
 | 
|---|
| 92 | char * basename(char * path)
 | 
|---|
| 93 | {
 | 
|---|
| 94 |   char* p = path;
 | 
|---|
| 95 |   while (*p) p++;
 | 
|---|
| 96 |   while (p>=path && *p != SEP) p--;
 | 
|---|
| 97 |   p++;
 | 
|---|
| 98 |   return p;  
 | 
|---|
| 99 | }
 | 
|---|
| 100 | 
 | 
|---|
| 101 | int kill(int , int ) {return 0;}   
 | 
|---|
| 102 | 
 | 
|---|
| 103 | int gettimeofday(struct timeval *tp, struct timezone */*tzp*/)
 | 
|---|
| 104 | {
 | 
|---|
| 105 |   tp->tv_usec = 0;
 | 
|---|
| 106 |   tp->tv_sec = time(NULL);
 | 
|---|
| 107 |   return 0;
 | 
|---|
| 108 | }
 | 
|---|
| 109 | 
 | 
|---|
| 110 | #define MAX_ARGS 100
 | 
|---|
| 111 | 
 | 
|---|
| 112 | static char                     argStr[65535];
 | 
|---|
| 113 | static char             *argv[MAX_ARGS + 1];
 | 
|---|
| 114 | 
 | 
|---|
| 115 | 
 | 
|---|
| 116 | static int ParseArgs(char *s)
 | 
|---|
| 117 | {
 | 
|---|
| 118 |         int  n = 1, Quote = 0;
 | 
|---|
| 119 |         char *p = s, *p1, c;
 | 
|---|
| 120 |         
 | 
|---|
| 121 |         p1 = (char *) argStr;
 | 
|---|
| 122 |         while ((c = *p++) != 0) {
 | 
|---|
| 123 |                 if (c==' ') continue;
 | 
|---|
| 124 |                 argv[n++] = p1;
 | 
|---|
| 125 |                 if (n > MAX_ARGS)                               /* mm 970404 */
 | 
|---|
| 126 |                         return (n-1);                           /* mm 970404 */
 | 
|---|
| 127 |                 do {
 | 
|---|
| 128 |                         if (c=='\\' && *p++) 
 | 
|---|
| 129 |                                 c = *p++;
 | 
|---|
| 130 |                         else
 | 
|---|
| 131 |                                 if ((c=='"') || (c == '\'')) {
 | 
|---|
| 132 |                                         if (!Quote) {
 | 
|---|
| 133 |                                                 Quote = c;
 | 
|---|
| 134 |                                                 continue;
 | 
|---|
| 135 |                                         }
 | 
|---|
| 136 |                                         if (c == Quote) {
 | 
|---|
| 137 |                                                 Quote = 0;
 | 
|---|
| 138 |                                                 continue;
 | 
|---|
| 139 |                                         }
 | 
|---|
| 140 |                                 }
 | 
|---|
| 141 |                         *p1++ = c;
 | 
|---|
| 142 |                 } while (*p && ((c = *p++) != ' ' || Quote));
 | 
|---|
| 143 |                 *p1++ = 0;
 | 
|---|
| 144 |                 
 | 
|---|
| 145 |         }
 | 
|---|
| 146 |         return n;
 | 
|---|
| 147 |         
 | 
|---|
| 148 | }
 | 
|---|
| 149 | 
 | 
|---|
| 150 | int xccommand(char ***arg)
 | 
|---|
| 151 | {
 | 
|---|
| 152 |   long len;
 | 
|---|
| 153 |   char* argument;
 | 
|---|
| 154 |   int n = ccommand(arg);
 | 
|---|
| 155 |   if (n==1 && (*arg)[1][0] == '@') {
 | 
|---|
| 156 |     FILE* f = fopen((*arg)[1]+1,"r");
 | 
|---|
| 157 |     fseek(f, 0, SEEK_END);
 | 
|---|
| 158 |     len = ftell(f);
 | 
|---|
| 159 |     fseek(f, 0, SEEK_SET);
 | 
|---|
| 160 |     argument = (char*) malloc(len+1);
 | 
|---|
| 161 |     fread(argument, 1, len, f);
 | 
|---|
| 162 |     n = ParseArgs(argument);
 | 
|---|
| 163 |   }
 | 
|---|
| 164 |   return n;
 | 
|---|
| 165 | }
 | 
|---|
| 166 | 
 | 
|---|