2 Copyright © 2006-2012, The AROS Development Team. All rights reserved.
8 #include <aros/debug.h>
10 #include <proto/exec.h>
11 #include <proto/icon.h>
12 #include <proto/intuition.h>
13 #include <proto/graphics.h>
21 #define MAX_LOCK_LEN 100 /* Max. length of a lock string */
22 #define MAX_STR_LEN 200 /* Max. string length for misc stuff */
24 #define MAX(x,y) ((x) > (y) ? (x) : (y))
25 #define MIN(x,y) ((x) < (y) ? (x) : (y))
28 #define LVO_CreateDir ( -20 * (WORD)LIB_VECTSIZE)
29 #define LVO_CurrentDir ( -21 * (WORD)LIB_VECTSIZE)
30 #define LVO_DeleteFile ( -12 * (WORD)LIB_VECTSIZE)
31 #define LVO_DeleteVar ( -152 * (WORD)LIB_VECTSIZE)
32 #define LVO_Execute ( -37 * (WORD)LIB_VECTSIZE)
33 #define LVO_FindVar ( -153 * (WORD)LIB_VECTSIZE)
34 #define LVO_GetVar ( -151 * (WORD)LIB_VECTSIZE)
35 #define LVO_LoadSeg ( -25 * (WORD)LIB_VECTSIZE)
36 #define LVO_Lock ( -14 * (WORD)LIB_VECTSIZE)
37 #define LVO_MakeLink ( -74 * (WORD)LIB_VECTSIZE)
38 #define LVO_NewLoadSeg ( -128 * (WORD)LIB_VECTSIZE)
39 #define LVO_Open ( -5 * (WORD)LIB_VECTSIZE)
40 #define LVO_Rename ( -13 * (WORD)LIB_VECTSIZE)
41 #define LVO_RunCommand ( -84 * (WORD)LIB_VECTSIZE)
42 #define LVO_SetVar ( -150 * (WORD)LIB_VECTSIZE)
43 #define LVO_SystemTagList ( -101 * (WORD)LIB_VECTSIZE)
46 #define LVO_FindPort ( -65 * (WORD)LIB_VECTSIZE)
47 #define LVO_FindResident ( -16 * (WORD)LIB_VECTSIZE)
48 #define LVO_FindSemaphore ( -99 * (WORD)LIB_VECTSIZE)
49 #define LVO_FindTask ( -49 * (WORD)LIB_VECTSIZE)
50 #define LVO_OpenDevice ( -74 * (WORD)LIB_VECTSIZE)
51 #define LVO_OpenLibrary ( -92 * (WORD)LIB_VECTSIZE)
52 #define LVO_OpenResource ( -83 * (WORD)LIB_VECTSIZE)
55 #define LVO_LockPubScreen ( -85 * (WORD)LIB_VECTSIZE)
58 #define LVO_OpenFont ( -12 * (WORD)LIB_VECTSIZE)
61 #define LVO_FindToolType ( -16 * (WORD)LIB_VECTSIZE)
62 #define LVO_MatchToolValue ( -17 * (WORD)LIB_VECTSIZE)
64 struct Library
*libbases
[LIB_last
];
76 } patches
[PATCH_last
] =
78 // must be in same order as in enum in patches.h
79 {NULL
, NULL
, LIB_Dos
, 0, LVO_CreateDir
, FALSE
},
80 {NULL
, NULL
, LIB_Dos
, 0, LVO_CurrentDir
, FALSE
},
81 {NULL
, NULL
, LIB_Dos
, 0, LVO_DeleteFile
, FALSE
},
82 {NULL
, NULL
, LIB_Dos
, 0, LVO_DeleteVar
, FALSE
},
83 {NULL
, NULL
, LIB_Dos
, 0, LVO_Execute
, FALSE
},
84 {NULL
, NULL
, LIB_Dos
, 0, LVO_FindVar
, FALSE
},
85 {NULL
, NULL
, LIB_Dos
, 0, LVO_GetVar
, FALSE
},
86 {NULL
, NULL
, LIB_Dos
, 0, LVO_LoadSeg
, FALSE
},
87 {NULL
, NULL
, LIB_Dos
, 0, LVO_Lock
, FALSE
},
88 {NULL
, NULL
, LIB_Dos
, 0, LVO_MakeLink
, FALSE
},
89 {NULL
, NULL
, LIB_Dos
, 0, LVO_NewLoadSeg
, FALSE
},
90 {NULL
, NULL
, LIB_Dos
, 0, LVO_Open
, FALSE
},
91 {NULL
, NULL
, LIB_Dos
, 0, LVO_Rename
, FALSE
},
92 {NULL
, NULL
, LIB_Dos
, 0, LVO_RunCommand
, FALSE
},
93 {NULL
, NULL
, LIB_Dos
, 0, LVO_SetVar
, FALSE
},
94 {NULL
, NULL
, LIB_Dos
, 0, LVO_SystemTagList
, FALSE
},
95 {NULL
, NULL
, LIB_Exec
, 0, LVO_FindPort
, FALSE
},
96 {NULL
, NULL
, LIB_Exec
, 0, LVO_FindResident
, FALSE
},
97 {NULL
, NULL
, LIB_Exec
, 0, LVO_FindSemaphore
, FALSE
},
98 {NULL
, NULL
, LIB_Exec
, 0, LVO_FindTask
, FALSE
},
99 {NULL
, NULL
, LIB_Exec
, 0, LVO_OpenDevice
, FALSE
},
100 {NULL
, NULL
, LIB_Exec
, 0, LVO_OpenLibrary
, FALSE
},
101 {NULL
, NULL
, LIB_Exec
, 0, LVO_OpenResource
, FALSE
},
102 {NULL
, NULL
, LIB_Intuition
, 0, LVO_LockPubScreen
, FALSE
},
103 {NULL
, NULL
, LIB_Graphics
, 0, LVO_OpenFont
, FALSE
},
104 {NULL
, NULL
, LIB_Icon
, 0, LVO_FindToolType
, FALSE
},
105 {NULL
, NULL
, LIB_Icon
, 0, LVO_MatchToolValue
, FALSE
},
108 //static char *MyNameFromLock(BPTR lock, char *filename, char *buf, int maxlen);
109 //static void GetVolName(BPTR lock, char *buf, int maxlen);
111 // ----------------------------------------------------------------------------------
113 AROS_LH1(BPTR
, New_CreateDir
,
114 AROS_LHA(CONST_STRPTR
, name
, D1
),
115 struct DosLibrary
*, DOSBase
, 20, Dos
)
119 // result is exclusive lock or NULL
120 BPTR result
= AROS_CALL1(BPTR
, patches
[PATCH_CreateDir
].oldfunc
,
121 AROS_LDA(CONST_STRPTR
, name
, D1
),
122 struct DosLibrary
*, DOSBase
);
124 if (patches
[PATCH_CreateDir
].enabled
)
126 main_output("CreateDir", name
, 0, (IPTR
)result
, TRUE
);
134 // ----------------------------------------------------------------------------------
136 AROS_LH1(BPTR
, New_CurrentDir
,
137 AROS_LHA(BPTR
, lock
, D1
),
138 struct DosLibrary
*, DOSBase
, 21, Dos
)
141 //char lockbuf[MAX_LOCK_LEN+1];
142 char *lockpath
= "?";
144 // returns lock to old directory, 0 means boot filesystem
145 BPTR result
= AROS_CALL1(BPTR
, patches
[PATCH_CurrentDir
].oldfunc
,
146 AROS_LDA(BPTR
, lock
, D1
),
147 struct DosLibrary
*, DOSBase
);
149 if (patches
[PATCH_CurrentDir
].enabled
)
152 struct FileInfoBlock
*fib
= NULL
;
155 fib
= AllocDosObject(DOS_FIB
, NULL
);
158 if (Examine(lock
, fib
))
160 lockpath
= fib
->fib_FileName
;
164 main_output("CurrentDir", lockpath
, 0, TRUE
, TRUE
);
166 if (fib
) FreeDosObject(DOS_FIB
, fib
);
175 // ----------------------------------------------------------------------------------
177 AROS_LH1(BOOL
, New_DeleteFile
,
178 AROS_LHA(CONST_STRPTR
, name
, D1
),
179 struct DosLibrary
*, DOSBase
, 12, Dos
)
183 // true means deleting was OK
184 BOOL result
= AROS_CALL1(BOOL
, patches
[PATCH_DeleteFile
].oldfunc
,
185 AROS_LDA(CONST_STRPTR
, name
, D1
),
186 struct DosLibrary
*, DOSBase
);
188 if (patches
[PATCH_DeleteFile
].enabled
)
190 main_output("Delete", name
, 0, result
, TRUE
);
198 // ----------------------------------------------------------------------------------
200 AROS_LH2(LONG
, New_DeleteVar
,
201 AROS_LHA(CONST_STRPTR
, name
, D1
),
202 AROS_LHA(ULONG
, flags
, D2
),
203 struct DosLibrary
*, DOSBase
, 152, Dos
)
207 // true means variable was deleted
208 LONG result
= AROS_CALL2(LONG
, patches
[PATCH_DeleteVar
].oldfunc
,
209 AROS_LDA(CONST_STRPTR
, name
, D1
),
210 AROS_LDA(ULONG
, flags
, D2
),
211 struct DosLibrary
*, DOSBase
);
213 if (patches
[PATCH_DeleteVar
].enabled
)
216 if (flags
& GVF_GLOBAL_ONLY
) opt
= MSG(MSG_GLOBAL
);
217 else if ((flags
& 7) == LV_VAR
) opt
= MSG(MSG_LOCAL
);
218 else if ((flags
& 7) == LV_ALIAS
) opt
= MSG(MSG_ALIAS
);
219 else opt
= MSG(MSG_UNKNOWN
);
221 main_output("DeleteVar", name
, opt
, result
, TRUE
);
229 // ----------------------------------------------------------------------------------
231 AROS_LH3(LONG
, New_Execute
,
232 AROS_LHA(CONST_STRPTR
, string
, D1
),
233 AROS_LHA(BPTR
, input
, D2
),
234 AROS_LHA(BPTR
, output
, D3
),
235 struct DosLibrary
*, DOSBase
, 37, Dos
)
239 // true means command could be started
240 LONG result
= AROS_CALL3(LONG
, patches
[PATCH_Execute
].oldfunc
,
241 AROS_LDA(CONST_STRPTR
, string
, D1
),
242 AROS_LDA(BPTR
, input
, D2
),
243 AROS_LDA(BPTR
, output
, D3
),
244 struct DosLibrary
*, DOSBase
);
246 if (patches
[PATCH_Execute
].enabled
)
248 main_output("Execute", string
,0 , result
, TRUE
);
256 // ----------------------------------------------------------------------------------
258 AROS_LH2(struct LocalVar
*, New_FindVar
,
259 AROS_LHA(CONST_STRPTR
, name
, D1
),
260 AROS_LHA(ULONG
, type
, D2
),
261 struct DosLibrary
*, DOSBase
, 153, Dos
)
265 // NULL means variable not found
266 struct LocalVar
*result
= AROS_CALL2(struct LocalVar
*, patches
[PATCH_FindVar
].oldfunc
,
267 AROS_LDA(CONST_STRPTR
, name
, D1
),
268 AROS_LDA(ULONG
, type
, D2
),
269 struct DosLibrary
*, DOSBase
);
271 if (patches
[PATCH_FindVar
].enabled
)
274 if ((type
& 7) == LV_VAR
) opt
= MSG(MSG_LOCAL
);
275 else if ((type
& 7) == LV_ALIAS
) opt
= MSG(MSG_ALIAS
);
276 else opt
= MSG(MSG_UNKNOWN
);
278 main_output("FindVar", name
, opt
, (IPTR
)result
, TRUE
);
286 // ----------------------------------------------------------------------------------
288 AROS_LH4(LONG
, New_GetVar
,
289 AROS_LHA(CONST_STRPTR
, name
, D1
),
290 AROS_LHA(STRPTR
, buffer
, D2
),
291 AROS_LHA(LONG
, size
, D3
),
292 AROS_LHA(LONG
, flags
, D4
),
293 struct DosLibrary
*, DOSBase
, 151, Dos
)
297 // -1 means variable not defined
298 LONG result
= AROS_CALL4(LONG
, patches
[PATCH_GetVar
].oldfunc
,
299 AROS_LDA(CONST_STRPTR
, name
, D1
),
300 AROS_LDA(STRPTR
, buffer
, D2
),
301 AROS_LDA(LONG
, size
, D3
),
302 AROS_LDA(LONG
, flags
, D4
),
303 struct DosLibrary
*, DOSBase
);
305 if (patches
[PATCH_GetVar
].enabled
)
308 if (flags
& GVF_GLOBAL_ONLY
) opt
= MSG(MSG_GLOBAL
);
309 else if ((flags
& 7) == LV_ALIAS
) opt
= MSG(MSG_ALIAS
);
310 else if (flags
& GVF_LOCAL_ONLY
) opt
= MSG(MSG_LOCAL
);
311 else opt
= MSG(MSG_ANY
);
313 main_output("GetVar", name
, opt
, result
!= -1, TRUE
);
321 // ----------------------------------------------------------------------------------
323 AROS_LH1(BPTR
, New_LoadSeg
,
324 AROS_LHA(CONST_STRPTR
, name
, D1
),
325 struct DosLibrary
*, DOSBase
, 25, Dos
)
329 // 0 means load failed
330 BPTR result
= AROS_CALL1(BPTR
, patches
[PATCH_LoadSeg
].oldfunc
,
331 AROS_LDA(CONST_STRPTR
, name
, D1
),
332 struct DosLibrary
*, DOSBase
);
334 if (patches
[PATCH_LoadSeg
].enabled
)
336 main_output("LoadSeg", name
, 0, (IPTR
)result
, TRUE
);
344 // ----------------------------------------------------------------------------------
346 AROS_LH2(BPTR
, New_Lock
,
347 AROS_LHA(CONST_STRPTR
, name
, D1
),
348 AROS_LHA(LONG
, accessMode
, D2
),
349 struct DosLibrary
*, DOSBase
, 14, Dos
)
354 BPTR result
= AROS_CALL2(BPTR
, patches
[PATCH_Lock
].oldfunc
,
355 AROS_LDA(CONST_STRPTR
, name
, D1
),
356 AROS_LDA(LONG
, accessMode
, D2
),
357 struct DosLibrary
*, DOSBase
);
359 if (patches
[PATCH_Lock
].enabled
)
362 if (accessMode
== ACCESS_READ
) opt
= MSG(MSG_READ
);
363 else if (accessMode
== ACCESS_WRITE
) opt
= MSG(MSG_WRITE
);
364 else opt
= MSG(MSG_READ_ASK
);
366 CONST_STRPTR curname
= name
;
371 else if ( ! setup
.showPaths
&& *curname
== '\0')
376 main_output("Lock", curname
, opt
, (IPTR
)result
, TRUE
);
384 // ----------------------------------------------------------------------------------
386 AROS_LH3(LONG
, New_MakeLink
,
387 AROS_LHA(CONST_STRPTR
, name
, D1
),
388 AROS_LHA(APTR
, dest
, D2
),
389 AROS_LHA(LONG
, soft
, D3
),
390 struct DosLibrary
*, DOSBase
, 74, Dos
)
395 LONG result
= AROS_CALL3(LONG
, patches
[PATCH_MakeLink
].oldfunc
,
396 AROS_LDA(CONST_STRPTR
, name
, D1
),
397 AROS_LDA(APTR
, dest
, D2
),
398 AROS_LDA(LONG
, soft
, D3
),
399 struct DosLibrary
*, DOSBase
);
401 if (patches
[PATCH_MakeLink
].enabled
)
403 //struct Process *myproc = (struct Process *)SysBase->ThisTask;
406 if (soft
) opt
= "Softlink";
407 else opt
= "Hardlink";
409 //FIXME: MyNameFromLock crashes
412 int len
= strlen(name
);
413 char namestr
[MAX_STR_LEN
+ 1];
414 if (len
>= MAX_STR_LEN
) {
415 strncpy(namestr
, name
, MAX_STR_LEN
);
416 namestr
[MAX_STR_LEN
] = 0;
418 if (setup
.showPaths
) {
419 strcpy(namestr
, MyNameFromLock(myproc
->pr_CurrentDir
,
420 name
, namestr
, MAX_STR_LEN
-2));
421 len
= strlen(namestr
);
423 strcpy(namestr
, name
);
425 strcat(namestr
, " --> ");
427 strncat(namestr
, (char *)dest
, MAX_STR_LEN
- len
- 1);
428 namestr
[MAX_STR_LEN
] = 0;
430 strcat(namestr
, MyNameFromLock((BPTR
)dest
, NULL
, namestr
+len
+1,
435 main_output("MakeLink", name
/*namestr */, opt
, result
, TRUE
);
443 // ----------------------------------------------------------------------------------
445 AROS_LH2(BPTR
, New_NewLoadSeg
,
446 AROS_LHA(CONST_STRPTR
, file
, D1
),
447 AROS_LHA(struct TagItem
*, tags
, D2
),
448 struct DosLibrary
*, DOSBase
, 128, Dos
)
452 // 0 means load failed
453 BPTR result
= AROS_CALL2(BPTR
, patches
[PATCH_NewLoadSeg
].oldfunc
,
454 AROS_LDA(CONST_STRPTR
, file
, D1
),
455 AROS_LDA(struct TagItem
*, tags
, D2
),
456 struct DosLibrary
*, DOSBase
);
458 if (patches
[PATCH_NewLoadSeg
].enabled
)
460 main_output("NewLoadSeg", file
, 0, (IPTR
)result
, TRUE
);
468 // ----------------------------------------------------------------------------------
470 AROS_LH2(BPTR
, New_Open
,
471 AROS_LHA(CONST_STRPTR
, name
, D1
),
472 AROS_LHA(LONG
, accessMode
, D2
),
473 struct DosLibrary
*, DOSBase
, 5, Dos
)
478 BPTR result
= AROS_CALL2(BPTR
, patches
[PATCH_Open
].oldfunc
,
479 AROS_LDA (CONST_STRPTR
, name
, D1
),
480 AROS_LDA (LONG
, accessMode
, D2
),
481 struct DosLibrary
*, DOSBase
);
483 if (patches
[PATCH_Open
].enabled
)
485 CONST_STRPTR opt
= NULL
;
487 if (accessMode
== MODE_OLDFILE
) opt
= MSG(MSG_READ
);
488 else if (accessMode
== MODE_NEWFILE
) opt
= MSG(MSG_WRITE
);
489 else if (accessMode
== MODE_READWRITE
) opt
= MSG(MSG_MODIFY
);
491 opt
= MSG(MSG_UNKNOWN
);
493 main_output("Open", name
, opt
? opt
: (STRPTR
)optstr
, (IPTR
)result
, TRUE
);
501 // ----------------------------------------------------------------------------------
503 AROS_LH2(LONG
, New_Rename
,
504 AROS_LHA(CONST_STRPTR
, oldName
, D1
),
505 AROS_LHA(CONST_STRPTR
, newName
, D2
),
506 struct DosLibrary
*, DOSBase
, 13, Dos
)
511 LONG result
= AROS_CALL2(LONG
, patches
[PATCH_Rename
].oldfunc
,
512 AROS_LDA(CONST_STRPTR
, oldName
, D1
),
513 AROS_LDA(CONST_STRPTR
, newName
, D2
),
514 struct DosLibrary
*, DOSBase
);
516 if (patches
[PATCH_Rename
].enabled
)
518 main_output("Rename", oldName
, 0, result
, FALSE
);
519 main_output("to -->", newName
, 0, result
, TRUE
);
527 // ----------------------------------------------------------------------------------
529 AROS_LH4(LONG
, New_RunCommand
,
530 AROS_LHA(BPTR
, segList
, D1
),
531 AROS_LHA(ULONG
, stacksize
, D2
),
532 AROS_LHA(CONST_STRPTR
, argptr
, D3
),
533 AROS_LHA(ULONG
, argsize
, D4
),
534 struct DosLibrary
*, DOSBase
, 84, Dos
)
539 LONG result
= AROS_CALL4(LONG
, patches
[PATCH_RunCommand
].oldfunc
,
540 AROS_LDA(BPTR
, segList
, D1
),
541 AROS_LDA(ULONG
, stacksize
, D2
),
542 AROS_LDA(CONST_STRPTR
, argptr
, D3
),
543 AROS_LDA(ULONG
, argsize
, D4
),
544 struct DosLibrary
*, DOSBase
);
546 if (patches
[PATCH_RunCommand
].enabled
)
548 char argstr
[MAX_STR_LEN
+ 1];
550 for (pos
= 0; pos
< MAX_STR_LEN
&& argptr
[pos
] != 0 ; pos
++)
552 if (argptr
[pos
] == '\n')
555 argstr
[pos
] = argptr
[pos
];
559 main_output("RunCommand", argstr
, 0, result
!= -1, TRUE
);
567 // ----------------------------------------------------------------------------------
569 AROS_LH4(BOOL
, New_SetVar
,
570 AROS_LHA(CONST_STRPTR
, name
, D1
),
571 AROS_LHA(CONST_STRPTR
, buffer
, D2
),
572 AROS_LHA(LONG
, size
, D3
),
573 AROS_LHA(LONG
, flags
, D4
),
574 struct DosLibrary
*, DOSBase
, 150, Dos
)
578 BOOL result
= AROS_CALL4(BOOL
, patches
[PATCH_SetVar
].oldfunc
,
579 AROS_LDA(CONST_STRPTR
, name
, D1
),
580 AROS_LDA(CONST_STRPTR
, buffer
, D2
),
581 AROS_LDA(LONG
, size
, D3
),
582 AROS_LDA(LONG
, flags
, D4
),
583 struct DosLibrary
*, DOSBase
);
585 if (patches
[PATCH_SetVar
].enabled
)
588 char varstr
[MAX_STR_LEN
+ 1];
591 if (flags
& GVF_GLOBAL_ONLY
) opt
= MSG(MSG_GLOBAL
);
592 else if ((flags
& 7) == LV_VAR
) opt
= MSG(MSG_LOCAL
);
593 else if ((flags
& 7) == LV_ALIAS
) opt
= MSG(MSG_ALIAS
);
594 else opt
= MSG(MSG_UNKNOWN
);
597 * Now create a string that looks like "Variable=Value"
599 * We go to some pains to ensure we don't overwrite our
603 if (vlen
> (MAX_STR_LEN
-1)) {
604 strncpy(varstr
, name
, MAX_STR_LEN
);
605 varstr
[MAX_STR_LEN
] = 0;
607 strcpy(varstr
, name
);
611 vlen
= MIN(vlen
, size
);
613 strncat(varstr
, buffer
, vlen
);
614 varstr
[MAX_STR_LEN
] = 0;
616 main_output("SetVar", varstr
, opt
, result
, TRUE
);
624 // ----------------------------------------------------------------------------------
626 AROS_LH2(LONG
, New_SystemTagList
,
627 AROS_LHA(CONST_STRPTR
, command
, D1
),
628 AROS_LHA(struct TagItem
*, tags
, D2
),
629 struct DosLibrary
*, DOSBase
, 101, Dos
)
634 LONG result
= AROS_CALL2(LONG
, patches
[PATCH_SystemTagList
].oldfunc
,
635 AROS_LDA(CONST_STRPTR
, command
, D1
),
636 AROS_LDA(struct TagItem
*, tags
, D2
),
637 struct DosLibrary
*, DOSBase
);
639 if (patches
[PATCH_SystemTagList
].enabled
)
642 sprintf(optstr
, "%d", (int)result
);
643 main_output("SystemTagList", command
, optstr
, result
!= -1, TRUE
);
651 // ----------------------------------------------------------------------------------
653 AROS_LH1(struct MsgPort
*, New_FindPort
,
654 AROS_LHA(STRPTR
, name
, A1
),
655 struct ExecBase
*, SysBase
, 65, Exec
)
660 struct MsgPort
*result
= AROS_CALL1(struct MsgPort
*, patches
[PATCH_FindPort
].oldfunc
,
661 AROS_LDA(STRPTR
, name
, A1
),
662 struct ExecBase
*, SysBase
);
664 if (patches
[PATCH_FindPort
].enabled
)
666 main_output("FindPort", name
, 0, (IPTR
)result
, TRUE
);
674 // ----------------------------------------------------------------------------------
676 AROS_LH1(struct Resident
*, New_FindResident
,
677 AROS_LHA(const UBYTE
*, name
, A1
),
678 struct ExecBase
*, SysBase
, 16, Exec
)
683 struct Resident
*result
= AROS_CALL1(struct Resident
*, patches
[PATCH_FindResident
].oldfunc
,
684 AROS_LDA(const UBYTE
*, name
, A1
),
685 struct ExecBase
*, SysBase
);
687 if (patches
[PATCH_FindResident
].enabled
)
689 main_output("FindResident", name
, 0, (IPTR
)result
, TRUE
);
697 // ----------------------------------------------------------------------------------
699 AROS_LH1(struct SignalSemaphore
*, New_FindSemaphore
,
700 AROS_LHA(STRPTR
, name
, A1
),
701 struct ExecBase
*, SysBase
, 99, Exec
)
706 struct SignalSemaphore
*result
= AROS_CALL1(struct SignalSemaphore
*, patches
[PATCH_FindSemaphore
].oldfunc
,
707 AROS_LDA(STRPTR
, name
, A1
),
708 struct ExecBase
*, SysBase
);
710 if (patches
[PATCH_FindSemaphore
].enabled
)
712 main_output("FindSemaphore", name
, 0, (IPTR
)result
, TRUE
);
720 // ----------------------------------------------------------------------------------
722 AROS_LH1(struct Task
*, New_FindTask
,
723 AROS_LHA(STRPTR
, name
, A1
),
724 struct ExecBase
*, SysBase
, 49, Exec
)
729 struct Task
*result
= AROS_CALL1(struct Task
*, patches
[PATCH_FindTask
].oldfunc
,
730 AROS_LDA(STRPTR
, name
, A1
),
731 struct ExecBase
*, SysBase
);
733 if ((name
!= NULL
) && patches
[PATCH_FindTask
].enabled
)
735 main_output("FindTask", name
, 0, (IPTR
)result
, TRUE
);
743 // ----------------------------------------------------------------------------------
745 AROS_LH4(LONG
, New_OpenDevice
,
746 AROS_LHA(CONST_STRPTR
, devName
, A0
),
747 AROS_LHA(IPTR
, unitNumber
, D0
),
748 AROS_LHA(struct IORequest
*, iORequest
, A1
),
749 AROS_LHA(ULONG
, flags
, D1
),
750 struct ExecBase
*, SysBase
, 74, Exec
)
755 LONG result
= AROS_CALL4(LONG
, patches
[PATCH_OpenDevice
].oldfunc
,
756 AROS_LDA(CONST_STRPTR
, devName
, A0
),
757 AROS_LDA(IPTR
, unitNumber
, D0
),
758 AROS_LDA(struct IORequest
*, iORequest
, A1
),
759 AROS_LDA(ULONG
, flags
, D1
),
760 struct ExecBase
*, SysBase
);
762 if (patches
[PATCH_OpenDevice
].enabled
)
765 // FIXME: unitNumber can be a pointer
766 sprintf(unitstr
, "Unit %d", (int)unitNumber
);
767 main_output("OpenDevice", devName
, unitstr
, !result
, TRUE
);
775 // ----------------------------------------------------------------------------------
777 AROS_LH2(struct Library
*, New_OpenLibrary
,
778 AROS_LHA(CONST_STRPTR
, libName
, A1
),
779 AROS_LHA(ULONG
, version
, D0
),
780 struct ExecBase
*, SysBase
, 92, Exec
)
785 struct Library
*result
= AROS_CALL2(struct Library
*, patches
[PATCH_OpenLibrary
].oldfunc
,
786 AROS_LDA(CONST_STRPTR
, libName
, A1
),
787 AROS_LDA(ULONG
, version
, D0
),
788 struct ExecBase
*, SysBase
);
790 if (patches
[PATCH_OpenLibrary
].enabled
)
793 sprintf(verstr
, MSG(MSG_VERSION
), version
);
794 main_output("OpenLibrary", libName
, verstr
, (IPTR
)result
, TRUE
);
802 // ----------------------------------------------------------------------------------
804 AROS_LH1(APTR
, New_OpenResource
,
805 AROS_LHA(CONST_STRPTR
, resName
, A1
),
806 struct ExecBase
*, SysBase
, 83, Exec
)
811 APTR result
= AROS_CALL1(APTR
, patches
[PATCH_OpenResource
].oldfunc
,
812 AROS_LDA(CONST_STRPTR
, resName
, A1
),
813 struct ExecBase
*, SysBase
);
815 if (patches
[PATCH_OpenResource
].enabled
)
817 main_output("OpenLibrary", resName
, 0, (IPTR
)result
, TRUE
);
825 // ----------------------------------------------------------------------------------
827 AROS_LH1(struct Screen
*, New_LockPubScreen
,
828 AROS_LHA(CONST_STRPTR
, name
, A0
),
829 struct IntuitionBase
*, IntuitionBase
, 85, Intuition
)
834 struct Screen
*result
= AROS_CALL1(struct Screen
*, patches
[PATCH_LockPubScreen
].oldfunc
,
835 AROS_LDA(CONST_STRPTR
, name
, A0
),
836 struct IntuitionBase
*, IntuitionBase
);
838 if (patches
[PATCH_LockPubScreen
].enabled
)
840 main_output("LockPubScreen", name
, 0, (IPTR
)result
, TRUE
);
848 // ----------------------------------------------------------------------------------
850 AROS_LH1(struct TextFont
*, New_OpenFont
,
851 AROS_LHA(struct TextAttr
*, textAttr
, A0
),
852 struct GfxBase
*, GfxBase
, 12, Graphics
)
857 struct TextFont
*result
= AROS_CALL1(struct TextFont
*, patches
[PATCH_OpenFont
].oldfunc
,
858 AROS_LDA(struct TextAttr
*, textAttr
, A0
),
859 struct GfxBase
*, GfxBase
);
861 if (patches
[PATCH_OpenFont
].enabled
)
867 sprintf(sizestr
, MSG(MSG_SIZE
), textAttr
->ta_YSize
);
868 name
= textAttr
->ta_Name
;
873 main_output("OpenFont", name
, sizestr
, (IPTR
)result
, TRUE
);
881 // ----------------------------------------------------------------------------------
883 AROS_LH2(UBYTE
*, New_FindToolType
,
884 AROS_LHA(CONST STRPTR
*, toolTypeArray
, A0
),
885 AROS_LHA(CONST STRPTR
, typeName
, A1
),
886 struct Library
*, IconBase
, 16, Icon
)
891 UBYTE
*result
= AROS_CALL2(UBYTE
*, patches
[PATCH_FindToolType
].oldfunc
,
892 AROS_LDA(CONST STRPTR
*, toolTypeArray
, A0
),
893 AROS_LDA(CONST STRPTR
, typeName
, A1
),
894 struct Library
*, IconBase
);
896 if (patches
[PATCH_FindToolType
].enabled
)
898 main_output("FindToolType", typeName
, 0, (IPTR
)result
, TRUE
);
906 // ----------------------------------------------------------------------------------
908 AROS_LH2(BOOL
, New_MatchToolValue
,
909 AROS_LHA(UBYTE
*, typeString
, A0
),
910 AROS_LHA(UBYTE
*, value
, A1
),
911 struct Library
*, IconBase
, 17, Icon
)
915 BOOL result
= AROS_CALL2(BOOL
, patches
[PATCH_MatchToolValue
].oldfunc
,
916 AROS_LDA(UBYTE
*, typeString
, A0
),
917 AROS_LDA(UBYTE
*, value
, A1
),
918 struct Library
*, IconBase
);
920 if (patches
[PATCH_MatchToolValue
].enabled
)
922 main_output("MatchToolValue", typeString
, value
, result
, TRUE
);
930 // ----------------------------------------------------------------------------------
932 void patches_init(void)
934 libbases
[LIB_Exec
] = (struct Library
*)SysBase
;
935 libbases
[LIB_Dos
] = (struct Library
*)DOSBase
;
936 libbases
[LIB_Icon
] = IconBase
;
937 libbases
[LIB_Intuition
] = (struct Library
*)IntuitionBase
;
938 libbases
[LIB_Graphics
] = (struct Library
*)GfxBase
;
940 patches
[PATCH_CreateDir
].newfunc
= (FP
)AROS_SLIB_ENTRY(New_CreateDir
, Dos
, 20);
941 patches
[PATCH_CurrentDir
].newfunc
= (FP
)AROS_SLIB_ENTRY(New_CurrentDir
, Dos
, 21);
942 patches
[PATCH_DeleteFile
].newfunc
= (FP
)AROS_SLIB_ENTRY(New_DeleteFile
, Dos
, 12);
943 patches
[PATCH_DeleteVar
].newfunc
= (FP
)AROS_SLIB_ENTRY(New_DeleteVar
, Dos
, 152);
944 patches
[PATCH_Execute
].newfunc
= (FP
)AROS_SLIB_ENTRY(New_Execute
, Dos
, 37);
945 patches
[PATCH_FindVar
].newfunc
= (FP
)AROS_SLIB_ENTRY(New_FindVar
, Dos
, 153);
946 patches
[PATCH_GetVar
].newfunc
= (FP
)AROS_SLIB_ENTRY(New_GetVar
, Dos
, 151);
947 patches
[PATCH_LoadSeg
].newfunc
= (FP
)AROS_SLIB_ENTRY(New_LoadSeg
, Dos
, 25);
948 patches
[PATCH_Lock
].newfunc
= (FP
)AROS_SLIB_ENTRY(New_Lock
, Dos
, 14);
949 patches
[PATCH_MakeLink
].newfunc
= (FP
)AROS_SLIB_ENTRY(New_MakeLink
, Dos
, 74);
950 patches
[PATCH_NewLoadSeg
].newfunc
= (FP
)AROS_SLIB_ENTRY(New_NewLoadSeg
, Dos
, 128);
951 patches
[PATCH_Open
].newfunc
= (FP
)AROS_SLIB_ENTRY(New_Open
, Dos
, 5);
952 patches
[PATCH_Rename
].newfunc
= (FP
)AROS_SLIB_ENTRY(New_Rename
, Dos
, 13);
953 patches
[PATCH_RunCommand
].newfunc
= (FP
)AROS_SLIB_ENTRY(New_RunCommand
, Dos
, 84);
954 patches
[PATCH_SetVar
].newfunc
= (FP
)AROS_SLIB_ENTRY(New_SetVar
, Dos
, 150);
955 patches
[PATCH_SystemTagList
].newfunc
= (FP
)AROS_SLIB_ENTRY(New_SystemTagList
, Dos
, 101);
956 patches
[PATCH_FindPort
].newfunc
= (FP
)AROS_SLIB_ENTRY(New_FindPort
, Exec
, 65);
957 patches
[PATCH_FindResident
].newfunc
= (FP
)AROS_SLIB_ENTRY(New_FindResident
, Exec
, 16);
958 patches
[PATCH_FindSemaphore
].newfunc
= (FP
)AROS_SLIB_ENTRY(New_FindSemaphore
, Exec
, 99);
959 patches
[PATCH_FindTask
].newfunc
= (FP
)AROS_SLIB_ENTRY(New_FindTask
, Exec
, 49);
960 patches
[PATCH_OpenDevice
].newfunc
= (FP
)AROS_SLIB_ENTRY(New_OpenDevice
, Exec
, 74);
961 patches
[PATCH_OpenLibrary
].newfunc
= (FP
)AROS_SLIB_ENTRY(New_OpenLibrary
, Exec
, 92);
962 patches
[PATCH_OpenResource
].newfunc
= (FP
)AROS_SLIB_ENTRY(New_OpenResource
, Exec
, 83);
963 patches
[PATCH_LockPubScreen
].newfunc
= (FP
)AROS_SLIB_ENTRY(New_LockPubScreen
, Intuition
, 85);
964 patches
[PATCH_OpenFont
].newfunc
= (FP
)AROS_SLIB_ENTRY(New_OpenFont
, Graphics
, 12);
965 patches
[PATCH_FindToolType
].newfunc
= (FP
)AROS_SLIB_ENTRY(New_FindToolType
, Icon
, 16);
966 patches
[PATCH_MatchToolValue
].newfunc
= (FP
)AROS_SLIB_ENTRY(New_MatchToolValue
, Icon
, 17);
971 for (i
=0; i
<PATCH_last
; i
++)
973 if (patches
[i
].newfunc
);
976 patches
[i
].oldfunc
= SetFunction(libbases
[patches
[i
].libidx
], patches
[i
].lvo
, patches
[i
].newfunc
);
982 // ----------------------------------------------------------------------------------
984 void patches_set(void)
986 patches
[PATCH_CreateDir
].enabled
= setup
.enableMakeDir
;
987 patches
[PATCH_CurrentDir
].enabled
= setup
.enableChangeDir
;
988 patches
[PATCH_DeleteFile
].enabled
= setup
.enableDelete
;
989 patches
[PATCH_DeleteVar
].enabled
= setup
.enableSetVar
;
990 patches
[PATCH_Execute
].enabled
= setup
.enableExecute
;
991 patches
[PATCH_FindVar
].enabled
= setup
.enableGetVar
;
992 patches
[PATCH_GetVar
].enabled
= setup
.enableGetVar
;
993 patches
[PATCH_LoadSeg
].enabled
= setup
.enableLoadSeg
;
994 patches
[PATCH_Lock
].enabled
= setup
.enableLock
;
995 patches
[PATCH_MakeLink
].enabled
= setup
.enableMakeLink
;
996 patches
[PATCH_NewLoadSeg
].enabled
= setup
.enableLoadSeg
;
997 patches
[PATCH_Open
].enabled
= setup
.enableOpen
;
998 patches
[PATCH_Rename
].enabled
= setup
.enableRename
;
999 patches
[PATCH_RunCommand
].enabled
= setup
.enableRunCommand
;
1000 patches
[PATCH_SetVar
].enabled
= setup
.enableSetVar
;
1001 patches
[PATCH_SystemTagList
].enabled
= setup
.enableSystem
;
1002 patches
[PATCH_FindPort
].enabled
= setup
.enableFindPort
;
1003 patches
[PATCH_FindResident
].enabled
= setup
.enableFindResident
;
1004 patches
[PATCH_FindSemaphore
].enabled
= setup
.enableFindSemaphore
;
1005 patches
[PATCH_FindTask
].enabled
= setup
.enableFindTask
;
1006 patches
[PATCH_OpenDevice
].enabled
= setup
.enableOpenDevice
;
1007 patches
[PATCH_OpenLibrary
].enabled
= setup
.enableOpenLibrary
;
1008 patches
[PATCH_OpenResource
].enabled
= setup
.enableOpenResource
;
1009 patches
[PATCH_LockPubScreen
].enabled
= setup
.enableLockScreen
;
1010 patches
[PATCH_OpenFont
].enabled
= setup
.enableOpenFont
;
1011 patches
[PATCH_FindToolType
].enabled
= setup
.enableReadToolTypes
;
1012 patches
[PATCH_MatchToolValue
].enabled
= setup
.enableReadToolTypes
;
1016 // ----------------------------------------------------------------------------------
1018 void patches_reset(void)
1022 for (i
=0; i
<PATCH_last
; i
++)
1024 patches
[i
].enabled
= FALSE
;
1027 for (i
=0; i
<PATCH_last
; i
++)
1029 if (patches
[i
].oldfunc
)
1032 SetFunction(libbases
[patches
[i
].libidx
], patches
[i
].lvo
, patches
[i
].oldfunc
);
1034 patches
[i
].oldfunc
= NULL
;