home *** CD-ROM | disk | FTP | other *** search
- /*
- Replacement for
- LOADWB
- ENDCLI >nil:
-
- use Lettuce-C V5.04
-
- don't link with "c.o", it's not neccessary!
-
- don't use GO, there seems to be a serious bug in the
- lettuce package which causes a CXERR25 on LC2.
-
- Freeware, © 1989 by
- Oliver Wagner
- Landsberge 5
- 4322 Sprockhövel
- West Germany
-
- All Rights Reserved!
-
- Dieses Programm darf nicht von juristischen Personen genutzt
- werden, die auf der "Schwarzen Liste" der PD-Anbieter stehen.
-
- */
-
- #include <proto/exec.h>
- #include <proto/dos.h>
-
- /*
-
- this structure is the msg send to the newly
- created "workbench.task" process to start
- up. LockList is not used in this context.
-
- Please, don't use in any other code -
- this is undocumented!!!!
-
- All this information has been gathered by analyzing
- the original CBM "LoadWB" (by the way: LoadWB is a C-programm
- which has got all the necessary startup stuff to be run
- from - Workbench :-) and the ARP "EndCLI" using the demonstration
- version of "ReSource", an interactive disassembler.
-
- */
-
- struct wbgo {
- struct Message wbm;
- struct Locklist *locks;
- long debug;
- };
-
-
- /* proto */
-
- void main(void);
-
- void main()
- {
- /* open DOS */
- struct Library *DOSBase=OldOpenLibrary("dos.library");
-
- /* find the Workbench in ROM */
- struct Resident *wbres=FindResident("workbench.task");
-
- /* my process */
- struct Process *pr=(struct Process*)FindTask(0);
-
- /* my CLI */
- struct CommandLineInterface *mycli=(struct CommandLineInterface*)(BADDR(pr->pr_CLI));
-
- /* CLI-Output (must be closed for EndCLI */
- BPTR cfh=mycli->cli_CurrentInput;
- BPTR sfh=mycli->cli_StandardInput;
- struct FileHandle *mfh=(struct FileHandle*)BADDR(sfh);
-
- /* start workbench task */
- struct Port *newproc=CreateProc("workbench.task",0,((long)wbres+0x2a)>>2,5000);
-
- /* my very own process msg-port */
- struct Port *myport=&pr->pr_MsgPort;
-
- /* startup message */
- struct wbgo wbmsg;
-
- /* initialize startup message */
- wbmsg.wbm.mn_ReplyPort=myport;
-
- /* not used, for additional information only */
- wbmsg.locks=0;
- wbmsg.debug=0;
-
- /* send Msg and wait for reply */
- PutMsg(newproc,&wbmsg);
- WaitPort(myport);
- GetMsg(myport);
-
-
- /* EndCLI */
-
- /* close Input() and Output(), Batch-file */
- mfh->fh_Pos=mfh->fh_End;
- mfh->fh_End=0;
- if(sfh!=cfh) {
- mycli->cli_CurrentInput=sfh;
- Close(cfh);
- }
-
- /* cancel CLI */
- mycli->cli_Background=-1;
- Exit(0);
- }
-
-