|
|
1.1.1.3 root 1: /*
1.1 root 2: * UAE - The Un*x Amiga Emulator
1.1.1.3 root 3: *
1.1 root 4: * AppWindow interface
1.1.1.3 root 5: *
1.1 root 6: * Copyright 1997 Samuel Devulder.
7: */
8:
9: /****************************************************************************/
10:
11: #include <workbench/startup.h>
12:
13: #include <exec/execbase.h>
14: #include <exec/memory.h>
15:
16: #include <dos/dos.h>
17:
1.1.1.2 root 18: #if defined(POWERUP)
19: #ifndef USE_CLIB
20: #include <powerup/ppcproto/intuition.h>
21: #include <powerup/ppcproto/exec.h>
22: #include <powerup/ppcproto/dos.h>
23: /*#include <workbench/workbench.h> sam: a effacer*/
24: #include <powerup/ppcproto/wb.h>
25: #else
26: #include <clib/intuition_protos.h>
27: #include <clib/exec_protos.h>
28: #include <clib/dos_protos.h>
29: #include <clib/wb_protos.h>
30: #endif
31:
32: #define AddAppWindow(a0, a1, a2, a3, tags...) \
33: ({ULONG _tags[] = { tags }; AddAppWindowA((a0), (a1), (a2), (a3), (struct TagItem *)_tags);})
34:
35: #else
1.1 root 36: #include <proto/intuition.h>
37: #include <proto/exec.h>
38: #include <proto/dos.h>
39: #include <proto/wb.h>
1.1.1.2 root 40: #endif
1.1 root 41:
42: /****************************************************************************/
43:
44: #include "sysconfig.h"
45: #include "sysdeps.h"
46: #include "options.h"
47: #include "uaeexe.h"
48:
49: /****************************************************************************/
50:
51: #define LEN 256
52:
53: struct Library *WorkbenchBase;
54:
55: static struct AppWindow *AppWin;
56: static struct MsgPort *AppPort;
57:
58: int appw_init(struct Window *W);
59: void appw_exit(void);
60: void appw_events(void);
61:
62: /****************************************************************************/
63:
64: int appw_init(struct Window *W)
65: {
66: WorkbenchBase = (void*)OpenLibrary("workbench.library",36L);
67: if(WorkbenchBase) {
1.1.1.3 root 68: AppPort = CreatePort(0,0);
69: if(AppPort) {
70: AppWin = AddAppWindow(0,0,W,AppPort,NULL);
71: if(AppWin) {
1.1.1.4 ! root 72: write_log ("AppWindow started.\n");
1.1.1.3 root 73: return 1;
74: }
75: }
1.1 root 76: }
1.1.1.4 ! root 77: write_log ("Failed to start AppWindow.\n");
1.1 root 78:
79: return 0;
80: }
81:
82: /****************************************************************************/
83:
84: void appw_exit(void)
85: {
86: if(AppPort) {
1.1.1.3 root 87: void *msg;
88: while((msg=GetMsg(AppPort))) ReplyMsg(msg);
89: DeletePort(AppPort);
90: AppPort = NULL;
1.1 root 91: }
92: if(AppWin) {
1.1.1.3 root 93: RemoveAppWindow(AppWin);
94: AppWin = NULL;
1.1 root 95: }
96: if(WorkbenchBase) {
1.1.1.3 root 97: CloseLibrary((void*)WorkbenchBase);
98: WorkbenchBase = NULL;
1.1 root 99: }
100: }
101:
102: /***************************************************************************/
103:
104: static void addcmd(char *cmd, int len, ULONG lock, char *name)
105: {
106: len -= strlen(cmd); if(len<=0) return; while(*cmd) ++cmd;
107:
108: *cmd++ = ' '; if(--len<=0) return;
109:
110: NameFromLock(lock,cmd,len);
111: len -= strlen(cmd);if(len<=0) return;while(*cmd) ++cmd;
112: if(cmd[-1]!=':') {*cmd++='/'; len -= 1;if(len<=0) return;}
113: strncpy(cmd,name,len);
114: while(*cmd) {++cmd; if(--len<=0) *cmd='\0';}
115: }
116:
117: /***************************************************************************/
118:
119: void appw_events(void)
120: {
121: if(AppWin) {
1.1.1.3 root 122: struct AppMessage *msg;
123: struct WBArg *arg;
124: while((msg=(void*)GetMsg(AppPort))) {
125: char cmd[LEN];
126: int i;
127:
128: arg = msg->am_ArgList;
129:
130: strcpy(cmd,"cd ");
131: NameFromLock(arg[0].wa_Lock,&cmd[3],LEN-3);
132: if(!uaeexe(cmd)) {
1.1.1.2 root 133: strcpy(cmd,"run ");strcpy(cmd+4,arg[0].wa_Name);
1.1.1.3 root 134: for(i=1;i<msg->am_NumArgs;++i)
135: addcmd(cmd,LEN-2,arg[i].wa_Lock,arg[i].wa_Name);
136: /* ^ */
137: /* 2 bytes for security */
138: uaeexe(cmd);
139: }
140: ReplyMsg((void*)msg);
141: }
1.1 root 142: }
143: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.