___.+'~~`+.__.+'~~`+.__.+'~~`+.__.+'~~`+.__.+'~~`+.__.+'~~`+.__.+'~~`+.___ Yet Another Fine Production From Wizard/GlenzPointS (c) 1994 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Release Date 04/08/1994 (version 1.0) Second Release 05/08/1994 (version 1.1) Third Release 09/08/1994 (version 1.2) ___.+'~~`+.__.+'~~`+.__.+'~~`+.__.+'~~`+.__.+'~~`+.__.+'~~`+.__.+'~~`+.___ u·S·e·R F·R·i·N·D·L·y M·a·N·u·a·L (mixed version) ___.+'~~`+.__.+'~~`+.__.+'~~`+.__.+'~~`+.__.+'~~`+.__.+'~~`+.__.+'~~`+.___ ---< TaBLe oF CoNTeNTS >--- I......iNTRoDuCTioN II..............WHy III............WHaT IV..............HoW V........BuG RePoRT VI..............WHo VII.........HiSToRy ---< TaBLe oF iLLuSTRaTioNS >--- VIII...........NoNe ___.+'~~`+.__.+'~~`+.__.+'~~`+.__.+'~~`+.__.+'~~`+.__.+'~~`+.__.+'~~`+.___ ---< iNTRoDuCTioN >--- \ / \X/ell, at least, here it is... my dream came true. I've just written my first patcher. Well, it's not such hard job as some may think, but still it wouldn't be possible without assistance of my good friend SAA who gave me a final tip to start coding this piece of art. At first I intended to write this manual in English, but then... is there any chance for this production to reach Inter Net or even to get out of the country? Beat me, I have no idea, but I suppose not... So, a little surprise to all of you whose mother tongue ain't English... it's Croatian version of this manual. Any forigners may contact me at my address and require English written manual. I'll be happy to release it - just ask. ;) (...after few seconds...) |\ | | \|aaaaaah! Sorry, but it seems I'm too lazy to write this manual twice. Everyone who is interested to translating this manual to his/her local language should know that he/she has my full permission of doing that. I'd also like to recieve translated version to include it in any further release of this product. ---< WHy? >--- \ / \X/hy? Honestly - just to see if I'm able to write it. Well, I definitely am and I'm glad for that. I've been thinking what to choose for my first patch and then I had brain-storming. I asked myself what makes me most problems while doing anything with my Amiga and trying to do it as fast as possible? It's definitly dos.library's Delete() function... Gee... I can't even recall how many times I've deleted something I shouldn't and then cried over spoilt milk... So, decision became clear - Delete(). Let's fix it! ---< WhaT? >--- _ | \ l_/eletePatch, or DPatch for short, is program especially designed to be short, powerful and more than anything else - useful. Its function is very clear. You've probably (more than once!) deleted something you didn't want to destroy? There are many useful tools for recovering lost data, but it's painful job and not so easy to do. Sometime you delete something unpurpose and overwrite it with something else. There's no help. Contents is gone forever. Many programs don't even warn you when they're trying to delete something. For instance - when you're working with Imagine's Quick Render option it won't let you know that it's going to delete previous picture. That's OK, because it's just a Quick Render, but if you've selected this option unpurpose the picture is gone anyway. Not good. Not good at all. DOPUS is one of the greatest utilities I've ever used with my Amiga, but sometime I just have to do few disk operations, like deleting or moving files, from DOS. DOPUS would warn me if I've selected deleting some files but DOS wouldn't and again, more than once, I'm to fast to realize that I've just started deleting directory instead of file. I hate when this happens. ___ | |hat would be enough of bad expiriences. Now lets discuss cure for this. I needed small proggy to tako control over Delete() function and to pop up requester EVERY time it's called from ANY program. I don't care WHY, but I just wanna know that something in memory trying to delete something, either in RAM (Ram Disk) or on hard or floppy disk. Got it? ---< HoW? >--- __ |_ l__asy. I used Trash'm One 2 (THX SAA, again!) to create it because I just adore this assembler. It's so comfortable that I feel like being able to write data base using it. Almost. :-> | | choose assembler to keep code short because it'll be resident in memory until depatch code is called. Program uses reqtools.library to make pop up requesters more user friendly. I'm satisfied with results and it's really nice proggy. |\ | | \|ote: this patcher has been written using my A4040 (lucky me, ah? :->) and you'll need OS3.0+ for proper use of it (patcher, not my Amiga!). Credits for incompatibility with previous OSes should be sent to C='s DOS.library developers because it's unpossible to patch some of DOS.library's functions using SetFunction(). I need no more illegal programming. At least no while writing something that uses system... so, I let it go. (Yes, I know, Snoop and similar programs also patch DOS.lib's calls, but in another way and I had no time to go 'around'). Get OS3.0+, get AGA, get livin'! :-> \ / \X/hen DPatch is started (from CLI) it install resident piece of code (less than $140 bytes) in allocated memory. If it's impossible to allocated memory DPatch won't be started and control is immediately returned to DOS without patching anything. No information is given to user because code would be longer and I tried to make it as compact as possible. If patcher is installed it'll wait for DOS' Delete() calls and then take control over it. Requester will pop up offering three different options. First one is "I'll take my risk!". Choosing this one, Delete() is enabled and executed. Second one is "Beat me!" and it's DEPATCH part of this proggy. Clicking on this gadget will restore old Delete() and at the same time it'll call old Delete() as you've selected first option. Last gadget "Noooo! I'm innocent" will disable Delete() and just skip Delete()'s call from any program. First option (delete enabled) is set as default. Pressing Return key or clicking mouse on its gadget will activate it. \ / \/ersion 1.1 has new option added. Well, it's not a gadget option but if you've been using DPatch v1.0 you might remeber that you couldn't know which file is being deleted. Now it's fixed. Requester will show file name, so you'll allways know which file is 'in danger'. \ / \/ersion 1.2 is improved and it's been made more intelligent. How? Well, if you're trying to delete some file with appropriate .info and if you're doing this from some proggy that automatically delete .infos (like DOPUS, or WorkBench's Menu->Icons->Delete!) you won't get DPatch requester twice any more. DPatch is finally able to recognize few operations and it'll automatically enable deleting .info files. This was SAA's idea and I find it superb! But this is not all that v1.2 offers! I usually use DOPUS for anything I do with files, so I decided to make no problems between DPatch<=>DOPUS. There was something really annoying. DPatch would ask you twice if you decided not to delete something (from DOPUS!). This is because DOPUS recheck delete operations and if they're not performed correctly same command will be executed one more time. I hated it! And I fixed it. Some problems appeared with CLI (check Bug Report!), but it works! Enough? No, not enough... I forgot to mention just one more thing related to deleting .info files. If you have some file, and , you might also have ;). You probably won't, but you might. So, whatz up? DPatch will erase them all. :) I like it this way, I did it this way. ;) BTW, in case you had no idea - WB is unable to show 'doubled-info' files. If you have files X, X.info and X.info.info only two files will be used and showed (X and X.info). If you delete X.info, WB will automatically use X.info.info under the name X.info. Weird. Well, it won't confuse DPatch. ;) ---< BuG RePoRT >--- |/ |\nown bugs? Hmmmm... hard to answer. This is a patcher. It uses some dirty tricks to work as I wanted him. Question is - at what price? At the time I'm writting this lines patcher is active. I'm currently in Cygnus Editor and every few lines this text is being saved. Just in case. Every time I choose WRITE option from CED's menus requester pops up. CED is trying to delete old file before writing new one (CED is using some temporary files while doing this). It's nice. Requester pops up and I just press return. My text is perfectly safe. _ |_) l_)ut! I tested it with other programs and find out few other things you should be awere. When patcher is active, trying to delete something via Workbench's Delete command (selected in Icon's menu) will result with double DPatch requester. This is perfectly NORMAL. Why? In this case, Workbench is trying to delete contents of icon you've selected and then icon itself. Got it? When calling DELETE command from CLI while patcher is active and choosing disable option, DELETE command will return just name of file instead of default syntax "NAME deleted". You'll also notice there's no end-of-line character in returned string. This is also OK and DELETE's author(s) should be blamed for this - not me. Finally, I've tested patching patcher... :) I've started Snoop and patch Delete() with DPatch. Results? A little bit weird. If patcher is started BEFORE Snoop everything will be OK, but Snoop is a clever tool. If patcher is started after Snoop and if you're trying to close Snoop you'll get message from Snoop that something (guess what?) has patched Delete(). Cure? Depatch DPatcher and Snoop will exit automatically. These were custom problems and if you have problem with any other program please try to solve it in a similar way or let me know. | \|ust one more thing! This patcher should be started from CLI or something that emulates CLI. Starting it from icon (from WB) will probably crash the system causing alert window to appear. Works fine with SUSPEND option (if you don't won't to reboot at the moment!) but for your own safety finish all your tasks and reboot manually. ___ | |his is a brief update for v1.2. New 'bug' might be found in this version so it's better to let you all familiar with the problem. Problem appears when you change your mind after calling DELETE command in CLI line. If you really change your mind and decide not to delete file that you've just jugded to death second ago, there'll be troubles. Delete won't be executed, don't worry, but you'll be unable to delete specified file until 'remember buffer' keep its name. I used some weird techniques just to fix DOPUS troubles, so I had to compare names of some files. When, inside DOPUS, you're trying to delete something and then you stop it with DPatch, DOPUS will send same delete request and DPatch will apear again (check previous DPatch version if you don't believe me!). This sucks and I decided to get rid of it. I had to compare names and if same name has been called twice just pass to DPatch old values (so, if you decided to delete it - delete it all without further questions). This caused some DELETE problems in CLI because you have to clear this 'remember buffer' manually and there's only one way of doing this - erasing something else before repeating DELETE command with 'remembered' name. ---< WHo? >--- _ |_) l_)ug reports, credits, money, 4 extra Megs of RAM, new 14.4K modem, HPLJ IV, CD ROM, Ferrari, yacht, nice looking girls, blah, blah, blah... could be sent to my address... Goran Paulin (Wizard/GPS) Rade Supica 1 51000 Rijeka Croatia You can also reach me by E-Mail at: TVRi BBS (Rijeka, Croatia) (77:500/102) CroLink (2:381/106) FidoNet (user ID Goran Paulin) Never heard for this? Never mind... you can still write me a letter. | |f you're sending disks asking for some swapping stuff, please include either return stamps (for Croatia only) or one extra disk. You know the rulez, so... ---< HiSToRy >--- -[ v1.0 ]- I did it! It works! What else would you like?!? :) -[ v1.1 ]- I realized there's something wrong. I've been writing some scripts for DOPUS and at the same time I've been using DPatch. When I executed my script, DPatch warn me many, many, many times and I had no idea which files are 'in danger'. So, I decided to add name of the file that should be deleted in requester. When requester pops up, file name will be shown. Great! Perfect! Just as I wanted! ;-> Oh, yes! I've just decided to write Amiga Guide version of this document. -[ v1.2 ]- Question: "Is it worth releasing this version?". Answer should be: "Yes, it is!" and you'd be damn right! :-> Look at the progress of this patcher. In only 5 days it's been modified three times. Yeah! Great, ah? Why? Well, I tried to discuss my problems related to this in Amiga.CL (CL stands for CroLink, don't ask, believe!), but until now I've been talking only to two persons. First is SAA who gives me new ideas and support to release new versions. Second 'chatter' was Dr.J who discovered that this baby doesn't work with his machine (A500/KS1.3). NOT MY FAULT, I repeat IT'S NOT MY FAULT. Designers of earlier versions of dos.library (ver$ < 39.00) missed few things so it's unpossible to patch DOS functions in a legal way without jumping in Supervisor mode, calculating checksum manually and then gettin' back to User state... no, THX, I'll stick to OS3.0 with, hm... clear dos.library (I'm sure things are still a little messy, but less than before 'cause SetFunction() works fine with it now). What's really new is a little bit of intelligence added to DPatch. ;) Sounds nice, ah? Well, important things are described in previous sections of this manual, but for short - now requester won't pop up when something's trying to delete .info file (if has just been deleted!) and .info will be automatically deleted without questions. There were also some problems with DOPUS. Problems usually appeared when user decided not to delete something 'breaking' delete call with DPatch. At this point DOPUS (I have no idea why) would call Delete() once again which means that you'd have to answer same question twice. Damn stupid. I had to fix it and I did. BUT! New problem appeared. :-< If you're using DELETE command (here we go again... ;->) and decide not to delete what you've just ordered, you'll be unable to delete it in next CLI line (for short - you can't have to lines "DELETE XXX" if you forbid first delete!). There's only one cure for this problem - give up OPUS support, what wouldn't be clever, so I let it this way. If you change your mind ("I REALLY wanna delete it!"), you'll have to delete something else just to empty buffer where old name was kept. Got it? A bit painful, but... optimal solution. ___.+'~~`+.__.+'~~`+.__.+'~~`+.__.+'~~`+.__.+'~~`+.__.+'~~`+.__.+'~~`+.___ Oh, I almost forgot - this program is PD. If you decide to send me few bucks or whatever, consider it ShareWare and be happy. I will. ___.+'~~`+.__.+'~~`+.__.+'~~`+.__.+'~~`+.__.+'~~`+.__.+'~~`+.__.+'~~`+.___ . _____ _____ _____ . :( ____):( ___ ):( ___): :( )_( ):( __):(___ ): :(_____):(___):::(_____): :\\X/X/:Glenz:PointS:'94: :/o O \:/\/\__:You:have:: :\ (. /:\ \__/_:::No::::: ::\~ /(c)\____/:Excuse::: F·e·e·l·F·r·e·e·2·J·o·i·n ___.+'~~`+.__.+'~~`+.__.+'~~`+.__.+'~~`+.__.+'~~`+.__.+'~~`+.__.+'~~`+.___