home *** CD-ROM | disk | FTP | other *** search
/ World of A1200 / World_Of_A1200.iso / programs / monitors / rsys / source.lha / src / RSysMain.c < prev    next >
C/C++ Source or Header  |  1995-01-09  |  7KB  |  261 lines

  1. /*
  2. ***************************************************************************
  3. *
  4. * Datei:
  5. *    RSysMain.c
  6. *
  7. * Inhalt:
  8. *
  9. * Bemerkungen:
  10. *    Startup-Routinen von RSys; ruft das Hauptprogramm auf.
  11. *
  12. * Erstellungsdatum:
  13. *    07-Jul-93    Rolf Böhme
  14. *
  15. * Änderungen:
  16. *    07-Jul-93    Rolf Böhme    Erstellung
  17. *
  18. ***************************************************************************
  19. */
  20.  
  21. #include "RSysfunc.h"
  22.  
  23. extern long _savsp,
  24.       _stkbase;
  25.  
  26. extern int errno;
  27. extern int Enable_Abort;
  28.  
  29. extern int _argc,
  30.       _arg_len;
  31. extern char **_argv,
  32.      *_arg_lin;
  33. extern struct WBStartup *WBenchMsg;
  34.  
  35. extern struct _dev *_devtab;
  36. extern short _numdev;
  37.  
  38. extern char hotkey[HOTKEYS][30];
  39.  
  40. extern UBYTE autocon[];
  41.  
  42. void  _cli_parse(struct Process *pp, long alen, char *aptr);
  43.  
  44. extern struct Library *IconBase;
  45.  
  46. int bpc = 0, bgc = 0;
  47. long bpp = 0x00000000L;
  48. int winddetail = 0,windblock = 1,menudetail = 0;
  49. char *RSysName = NULL;
  50.  
  51. extern char _dir[], _file[];
  52.  
  53. void
  54. _wb_parse(void)
  55. {
  56.    return;
  57. };
  58.  
  59. static long
  60. ahtoi(char *String)
  61. {
  62.     long Value = 0;
  63.     char c;
  64.  
  65.     while(c = *String)
  66.     {
  67.         Value <<= 4;
  68.  
  69.         if(c >= '0' && c <= '9')
  70.             Value |= (c & 15);
  71.         else
  72.             Value |= (c & 15) + 9;
  73.  
  74.         ++String;
  75.     }
  76.  
  77.     return(Value);
  78. }
  79.  
  80. void
  81. _icon_parse(char *progname)
  82. {
  83.    register char *cp;
  84.    register struct DiskObject *dop;
  85.  
  86.    if (IconBase = OpenLibrary((UBYTE *) "icon.library", 0L))
  87.    {
  88.       if (dop = GetDiskObject((UBYTE *) progname))
  89.       {
  90.          if (cp = (char *)FindToolType((UBYTE **) dop->do_ToolTypes,(UBYTE *) "CX_HOTKEY"))
  91.             strcpy(&hotkey[0][0], cp);
  92.  
  93.          if (cp = (char *)FindToolType((UBYTE **) dop->do_ToolTypes,(UBYTE *) "CX_CRYPT"))
  94.             strcpy(&hotkey[1][0], cp);
  95.  
  96.          if (cp = (char *)FindToolType((UBYTE **) dop->do_ToolTypes,(UBYTE *) "CX_FINDFILE"))
  97.             strcpy(&hotkey[2][0], cp);
  98.  
  99.          if (cp = (char *)FindToolType((UBYTE **) dop->do_ToolTypes,(UBYTE *) "CX_FORMAT"))
  100.             strcpy(&hotkey[3][0], cp);
  101.  
  102.          if (cp = (char *)FindToolType((UBYTE **) dop->do_ToolTypes,(UBYTE *) "CX_HUNKLIST"))
  103.             strcpy(&hotkey[4][0], cp);
  104.  
  105.          if (cp = (char *)FindToolType((UBYTE **) dop->do_ToolTypes,(UBYTE *) "CX_CRC"))
  106.             strcpy(&hotkey[5][0], cp);
  107.  
  108.          if (cp = (char *)FindToolType((UBYTE **) dop->do_ToolTypes,(UBYTE *) "CX_SAVEWINDOW"))
  109.             strcpy(&hotkey[6][0], cp);
  110.  
  111.          if (cp = (char *)FindToolType((UBYTE **) dop->do_ToolTypes,(UBYTE *) "NOFASTMODE"))
  112.             Flags.fastmode = 0;
  113.  
  114.          if (cp = (char *)FindToolType((UBYTE **) dop->do_ToolTypes,(UBYTE *) "NOSORT"))
  115.             Flags.sortmode = 0;
  116.  
  117.          if (cp = (char *)FindToolType((UBYTE **) dop->do_ToolTypes,(UBYTE *) "WORKINGBAR"))
  118.             Flags.workingbar = 1;
  119.  
  120.          if (cp = (char *)FindToolType((UBYTE **) dop->do_ToolTypes,(UBYTE *) "AUTOFRONT"))
  121.             Flags.autofront = 1;
  122.  
  123.          if (cp = (char *)FindToolType((UBYTE **) dop->do_ToolTypes,(UBYTE *) "MOUSEWINDOW"))
  124.             Flags.mousewindow = 1;
  125.  
  126.          if (cp = (char *)FindToolType((UBYTE **) dop->do_ToolTypes,(UBYTE *) "TOPAZFONT"))
  127.             Flags.sysfont = 1;
  128.  
  129.          if (cp = (char *)FindToolType((UBYTE **) dop->do_ToolTypes,(UBYTE *) "NOSAVEASKING"))
  130.             Flags.saveasking = 0;
  131.  
  132.          if (cp = (char *)FindToolType((UBYTE **) dop->do_ToolTypes,(UBYTE *) "NOAPPICON"))
  133.             Flags.appicon = 0;
  134.  
  135.          if (cp = (char *)FindToolType((UBYTE **) dop->do_ToolTypes,(UBYTE *) "OUTWINDOW"))
  136.             strcpy((char *)autocon,cp);
  137.          else
  138.             strcpy((char *)autocon,"CON:/40//150/Sys - Window/auto/close");
  139.  
  140.          if (cp = (char *)FindToolType((UBYTE **) dop->do_ToolTypes,(UBYTE *) "BACKPATTERNCOL"))
  141.             bpc = atoi(cp);
  142.  
  143.          if (cp = (char *)FindToolType((UBYTE **) dop->do_ToolTypes,(UBYTE *) "BACKGROUNDCOL"))
  144.             bgc = atoi(cp);
  145.  
  146.          if (cp = (char *)FindToolType((UBYTE **) dop->do_ToolTypes,(UBYTE *) "BACKPATTERN"))
  147.             bpp = ahtoi(cp);
  148.  
  149.          if (cp = (char *)FindToolType((UBYTE **) dop->do_ToolTypes,(UBYTE *) "DETAILPEN"))
  150.             winddetail = atoi(cp);
  151.  
  152.          if (cp = (char *)FindToolType((UBYTE **) dop->do_ToolTypes,(UBYTE *) "BLOCKPEN"))
  153.             windblock = atoi(cp);
  154.  
  155.          if (cp = (char *)FindToolType((UBYTE **) dop->do_ToolTypes,(UBYTE *) "MENUPEN"))
  156.             menudetail = atoi(cp);
  157.  
  158.          FreeDiskObject(dop);
  159.       }
  160.  
  161.       CloseLibrary(IconBase);
  162.       IconBase = NULL;
  163.    }
  164.  
  165.    return;
  166. }
  167.  
  168. void
  169. _main(long alen, char *aptr)
  170. {
  171.    register struct Process *pp;
  172.  
  173.    SysBase = *(struct ExecBase **) 4;
  174.  
  175.    if (SysBase->LibNode.lib_Version < 37)
  176.    {
  177.       if (alen)
  178.          PutStr((UBYTE *)"WB 2.0 Only!");
  179.  
  180.       exit(0);
  181.    }
  182.  
  183.    if (_devtab = AllocMem(_numdev * (long)sizeof(struct _dev),
  184.                           MEMF_CLEAR))
  185.    {
  186.       LastID = SYSTEMINFO;
  187.  
  188.       _devtab[0].mode = O_RDONLY;
  189.       _devtab[1].mode = _devtab[2].mode = O_WRONLY;
  190.  
  191.       _stkbase = _savsp - *((long *)_savsp + 1) + 8;
  192.       *(long *)_stkbase = 0x4d414e58L;
  193.  
  194.       pp = (struct Process *) FindTask(0L);
  195.  
  196.       strcpy(hotkey[0], "lshift rshift y");
  197.       strcpy(hotkey[1], "lshift rshift k");
  198.       strcpy(hotkey[2], "lshift rshift s");
  199.       strcpy(hotkey[3], "lshift rshift f");
  200.       strcpy(hotkey[4], "lshift rshift h");
  201.       strcpy(hotkey[5], "lshift rshift c");
  202.       strcpy(hotkey[6], "lshift rshift w");
  203.  
  204.       if (pp->pr_CLI)
  205.       {
  206.          _cli_parse(pp, alen, aptr);
  207.  
  208.          RSysName = AllocVec(MAXFULLNAME, MEMF_CLEAR);
  209.          if (RSysName)
  210.          {
  211.             NameFromLock(GetProgramDir(), (UBYTE *) RSysName, MAXFULLNAME);
  212.             strcpy(_dir,RSysName);
  213.             strcpy(_file,(char *)FilePart((UBYTE *) _argv[0]));
  214.  
  215.             AddPart((UBYTE *) RSysName, FilePart((UBYTE *) _argv[0]), MAXFULLNAME);
  216.          }
  217.  
  218.          Enable_Abort = 1;
  219.  
  220.          _devtab[0].mode |= O_STDIO;    /* shouldn't close if CLI */
  221.          _devtab[1].mode |= O_STDIO;
  222.       }
  223.       else
  224.       {
  225.          WaitPort(&pp->pr_MsgPort);
  226.  
  227.          WBenchMsg = (struct WBStartup *) GetMsg(&pp->pr_MsgPort);
  228.  
  229.          if (WBenchMsg->sm_ArgList)
  230.          {
  231.             NameFromLock(WBenchMsg->sm_ArgList->wa_Lock,
  232.                          (UBYTE *) _dir, MAXFULLNAME);
  233.             strcpy(_file,
  234.                    (char *)FilePart((UBYTE *)WBenchMsg->sm_ArgList->wa_Name));
  235.  
  236.             RSysName = AllocVec(strlen(WBenchMsg->sm_ArgList->wa_Name) + 1, MEMF_CLEAR);
  237.             if (RSysName)
  238.                strcpy(RSysName, WBenchMsg->sm_ArgList->wa_Name);
  239.  
  240.             CurrentDir(WBenchMsg->sm_ArgList->wa_Lock);
  241.          }
  242.          _argv = (char **)WBenchMsg;
  243.       }
  244.  
  245.       if (RSysName)
  246.          _icon_parse(RSysName);
  247.  
  248.       _devtab[0].fd = Input();
  249.       _devtab[1].fd = Output();
  250.  
  251.       if (pp->pr_ConsoleTask)
  252.          _devtab[2].fd = Open((UBYTE *) "*", (long)MODE_OLDFILE);
  253.  
  254.       main(_argc, _argv);
  255.    }
  256.    else
  257.       Alert(AG_NoMemory);
  258.  
  259.    return;
  260. }
  261.