summaryrefslogtreecommitdiffstats
path: root/byterun/macintosh.c
diff options
context:
space:
mode:
Diffstat (limited to 'byterun/macintosh.c')
-rw-r--r--byterun/macintosh.c319
1 files changed, 0 insertions, 319 deletions
diff --git a/byterun/macintosh.c b/byterun/macintosh.c
deleted file mode 100644
index a49ef37e5..000000000
--- a/byterun/macintosh.c
+++ /dev/null
@@ -1,319 +0,0 @@
-/***********************************************************************/
-/* */
-/* Objective Caml */
-/* */
-/* Damien Doligez, projet Para, INRIA Rocquencourt */
-/* */
-/* Copyright 1996 Institut National de Recherche en Informatique et */
-/* en Automatique. All rights reserved. This file is distributed */
-/* under the terms of the GNU Library General Public License, with */
-/* the special exception on linking described in file ../LICENSE. */
-/* */
-/***********************************************************************/
-
-/* $Id$ */
-
-/* MacOS-specific stuff */
-
-#include <stdio.h>
-#include <stdlib.h>
-
-#include <AppleEvents.h>
-#include <CursorCtl.h>
-#include <Errors.h>
-#include <Files.h>
-#include <IntEnv.h>
-#include <MacTypes.h>
-#include <QuickDraw.h>
-#include <TextUtils.h>
-
-#include "misc.h"
-#include "rotatecursor.h"
-
-/* Unix emulation stuff */
-
-static short prevdir = 0;
-
-int chdir (char *dir)
-{
- WDPBRec pb;
- int result;
- short curdir;
-
- pb.ioCompletion = NULL;
- pb.ioNamePtr = c2pstr (dir);
- pb.ioVRefNum = 0;
- pb.ioWDProcID = 'Caml';
- pb.ioWDDirID = 0;
- result = PBOpenWDSync (&pb);
- p2cstr ((unsigned char *) dir);
- if (result != noErr) return -1;
- curdir = pb.ioVRefNum;
- result = SetVol (NULL, curdir);
- if (result != noErr) return -1;
- if (prevdir != 0){
- pb.ioVRefNum = prevdir;
- PBCloseWDSync (&pb);
- }
- prevdir = curdir;
- return 0;
-}
-
-Handle macos_getfullpathname (short vrefnum, long dirid)
-{
- Handle result = NewHandle (0);
- CInfoPBRec mypb;
- Str255 dirname;
- OSErr err;
-
- if (result == NULL) goto failed;
-
- mypb.dirInfo.ioNamePtr = dirname;
- mypb.dirInfo.ioVRefNum = vrefnum;
- mypb.dirInfo.ioDrParID = dirid;
- mypb.dirInfo.ioFDirIndex = -1;
-
- do{
- mypb.dirInfo.ioDrDirID = mypb.dirInfo.ioDrParID;
- err = PBGetCatInfo (&mypb, false);
- if (err) goto failed;
- Munger (result, 0, NULL, 0, ":", 1);
- Munger (result, 0, NULL, 0, dirname+1, dirname[0]);
- /* XXX out of memory ?! */
- }while (mypb.dirInfo.ioDrDirID != fsRtDirID);
- return result;
-
- failed:
- if (result != NULL) DisposeHandle (result);
- return NULL;
-}
-
-char *getcwd (char *buf, size_t size)
-{
- size_t len;
-
- Handle path = macos_getfullpathname (0, 0);
- if (path == NULL) return NULL;
-
- len = GetHandleSize (path);
-
- if (len+1 >= size){
- DisposeHandle (path);
- return NULL;
- }
- if (buf == NULL){
- buf = malloc (len+1);
- if (buf == NULL) return NULL;
- }
- memcpy (buf, *path, len);
- buf [len] = '\000';
- DisposeHandle (path);
- return buf;
-}
-
-pascal Boolean system_idleproc (const EventRecord *event, long *sleepTime,
- RgnHandle *mouseRgn)
-{
- static RgnHandle myregion = NULL;
- EventRecord evt;
-
- if (myregion == NULL){
- myregion = NewRgn ();
- SetRectRgn (myregion, -32000, -32000, 32000, 32000);
- }
-
- /* XXX standalone appli: process event */
- *mouseRgn = myregion;
- *sleepTime = 3;
- if (EventAvail (keyDownMask, &evt)
- && (evt.modifiers & cmdKey)
- && ((evt.message & charCodeMask) == '.')){
- return true;
- }else{
- return false;
- }
-}
-
-void quote (char *buf, long buflen)
-{
- long i, j;
-
- j = 2;
- for (i = 0; buf[i] != '\0'; i++){
- if (buf[i] == '\'') j += 3;
- ++ j;
- }
- if (j >= buflen) return;
-
- buf[j--] = '\0';
- buf[j--] = '\'';
- while (i > 0){
- -- i;
- buf[j--] = buf[i];
- if (buf[i] == '\''){
- buf[j--] = '\'';
- buf[j--] = '\266';
- buf[j--] = '\'';
- }
- }
- buf[j] = '\''; Assert (j == 0);
-}
-
-int system (char const *cmd)
-{
- char *fmt = "directory %s; %s";
- char *cmdline;
- char *buf;
- #define buf_size 66000
-
- static AEIdleUPP myIdleProcUPP = NULL;
- AEAddressDesc serveraddr;
- AppleEvent myevent, reply;
- OSType toolserver_sig = 'MPSX';
- DescType ret_type;
- OSErr err = noErr;
- long event_status = 0, ret_size;
- int result;
-
- /* once only */
- if (myIdleProcUPP == NULL) myIdleProcUPP = NewAEIdleProc (system_idleproc);
-
- SetCursor (*GetCursor (watchCursor));
-
- buf = malloc (buf_size);
- if (buf == NULL) goto failed_malloc_buf;
-
- /* Create the command line */
- getcwd (buf, buf_size);
- quote (buf, buf_size);
- cmdline = malloc (strlen (fmt) + strlen (cmd) + strlen (buf) + 1);
- if (cmdline == NULL) goto failed_malloc_cmdline;
- sprintf (cmdline, fmt, buf, cmd);
-
- /* Send the event and get the reply */
- err = AECreateDesc (typeApplSignature, &toolserver_sig,
- sizeof (toolserver_sig), &serveraddr);
- if (err != noErr) goto failed_AECreateDesc;
- err = AECreateAppleEvent ('misc', 'dosc', &serveraddr, kAutoGenerateReturnID,
- kAnyTransactionID, &myevent);
- if (err != noErr) goto failed_AECreateAppleEvent;
- err = AEPutParamPtr (&myevent, '----', 'TEXT', cmdline, strlen (cmdline));
- if (err != noErr) goto failed_AEPutParamPtr;
- err = AESend (&myevent, &reply, kAEWaitReply + kAENeverInteract,
- kAENormalPriority, kNoTimeOut, myIdleProcUPP, NULL);
- if (err != noErr) goto failed_AESend;
- err = AEGetParamPtr (&reply, 'errn', typeLongInteger, &ret_type,
- &event_status, sizeof (event_status), &ret_size);
- if (err != noErr || event_status != noErr) goto failed_script;
- err = AEGetParamPtr (&reply, 'stat', typeLongInteger, &ret_type,
- &event_status, sizeof (event_status), &ret_size);
- if (err != noErr || event_status != noErr) goto failed_script;
-
- /* forward stdout and stderr */
- err = AEGetParamPtr (&reply, 'diag', typeChar, &ret_type,
- buf, buf_size, &ret_size);
- if (err == noErr) write (2, buf, ret_size);
- err = AEGetParamPtr (&reply, '----', typeChar, &ret_type,
- buf, buf_size, &ret_size);
- if (err == noErr) write (1, buf, ret_size);
-
- AEDisposeDesc (&reply);
- AEDisposeDesc (&myevent);
- AEDisposeDesc (&serveraddr);
- free (cmdline);
- free (buf);
- RotateCursor (32);
- return 0;
-
- failed_script:
- AEDisposeDesc (&reply);
- failed_AESend:
- failed_AEPutParamPtr:
- AEDisposeDesc (&myevent);
- failed_AECreateAppleEvent:
- AEDisposeDesc (&serveraddr);
- failed_AECreateDesc:
- free (cmdline);
- failed_malloc_cmdline:
- free (buf);
- failed_malloc_buf:
- if (err != noErr) result = err;
- else if (event_status != 0) result = event_status;
- else result = 1;
- if (result == 0 || result == -1) result = 1;
- RotateCursor (32);
- return result;
-}
-
-/* We don't need search_exe_in_path on MacOS 9 because there
- are no #! scripts */
-
-char *search_exe_in_path (char * name)
-{
- return name;
-}
-
-
-/* O'Caml's use use of dynamic linking is Unix-specific, these are functions
- from dynlink.c without the dynamic linking stuff.
-*/
-
-#include "misc.h"
-#include "mlvalues.h"
-#include "prims.h"
-
-struct ext_table caml_shared_libs_path;
-struct ext_table caml_prim_table;
-
-static c_primitive lookup_primitive(char * name)
-{
- int i;
- void * res;
-
- for (i = 0; caml_names_of_builtin_cprim[i] != NULL; i++) {
- if (strcmp(name, caml_names_of_builtin_cprim[i]) == 0)
- return caml_builtin_cprim[i];
- }
- return NULL;
-}
-
-void caml_build_primitive_table(char * lib_path,
- char * libs,
- char * req_prims)
-{
- char * p;
-
- caml_ext_table_init(&caml_prim_table, 0x180);
- for (p = req_prims; *p != 0; p += strlen(p) + 1) {
- c_primitive prim = lookup_primitive(p);
- if (prim == NULL)
- caml_fatal_error_arg("Fatal error: unknown C primitive `%s'\n", p);
- caml_ext_table_add(&caml_prim_table, (void *) prim);
- }
-}
-
-value caml_dynlink_open_lib (value filename)
-{
- return Val_unit;
-}
-
-value caml_dynlink_close_lib(value handle)
-{
- return Val_unit;
-}
-
-value caml_dynlink_lookup_symbol(value handle, value symbolname)
-{
- return Val_unit;
-}
-
-value caml_dynlink_add_primitive(value handle)
-{
- caml_invalid_argument("dynlink_add_primitive");
- return Val_unit; /* not reached */
-}
-
-value caml_dynlink_get_current_libs(value unit)
-{
- return Atom (0);
-}