home *** CD-ROM | disk | FTP | other *** search
/ World of A1200 / World_Of_A1200.iso / programs / workbench / stickit2 / source.lha / source / general.c < prev    next >
C/C++ Source or Header  |  1995-01-09  |  6KB  |  274 lines

  1. /************************************************
  2.  **************    general.c   ******************
  3.  ************************************************/
  4.  
  5. #define INTUI_V36_NAMES_ONLY
  6.  
  7. #include <exec/exec.h>
  8. #include <intuition/intuition.h>
  9. #include <workbench/startup.h>
  10.  
  11. #include <clib/exec_protos.h>
  12. #include <clib/intuition_protos.h>
  13. #include <clib/icon_protos.h>
  14. #include <clib/dos_protos.h>
  15. #include <clib/alib_protos.h>
  16. #include <clib/utility_protos.h>
  17.  
  18. #include <stdio.h>
  19. #include <stdlib.h>
  20. #include <string.h>
  21.  
  22. #include "consts.h"
  23. #include "structs.h"
  24. #include "proto.h"
  25.  
  26. extern prj_p prj;
  27.  
  28. extern BOOL fromwb;
  29.  
  30. extern struct IOClipReq *clipio;
  31.  
  32. #ifdef _DCC
  33. __chip UWORD WaitPointer[] = {
  34. #else
  35. UWORD __chip WaitPointer[] = {
  36. #endif
  37.     0x0000, 0x0000,     /* reserved, must be NULL */
  38.  
  39.     0x0400, 0x07C0,
  40.     0x0000, 0x07C0,
  41.     0x0100, 0x0380,
  42.     0x0000, 0x07E0,
  43.     0x07C0, 0x1FF8,
  44.     0x1FF0, 0x3FEC,
  45.     0x3FF8, 0x7FDE,
  46.     0x3FF8, 0x7FBE,
  47.     0x7FFC, 0xFF7F,
  48.     0x7EFC, 0xFFFF,
  49.     0x7FFC, 0xFFFF,
  50.     0x3FF8, 0x7FFE,
  51.     0x3FF8, 0x7FFE,
  52.     0x1FF0, 0x3FFC,
  53.     0x07C0, 0x1FF8,
  54.     0x0000, 0x07E0,
  55.  
  56.     0x0000, 0x0000,     /* reserved, must be NULL */
  57.     };
  58.  
  59. /*
  60. Function : void startup(int argc,char **argv)
  61. Purpose : Sets up the program before start.
  62. */
  63.  
  64. void startup(int argc,char **argv)
  65. {
  66.     char *toolstring;
  67.  
  68.     UBYTE **tooltypes;
  69.  
  70.     int l;
  71.  
  72.     /* Set default preferences values */
  73.  
  74.     prj->prefs.backcolour = DEFAULT_BACKCOLOUR;
  75.     prj->prefs.textcolour = DEFAULT_TEXTCOLOUR;
  76.     prj->prefs.caratcolour = DEFAULT_CARATCOLOUR;
  77.  
  78.     prj->prefs.noteheight = DEFAULT_NOTEHEIGHT;
  79.     prj->prefs.notewidth = DEFAULT_NOTEWIDTH;
  80.  
  81.     prj->prefs.font = NULL;
  82.     prj->prefs.notefont[0] = '\0';
  83.     prj->prefs.textattr.ta_Name = prj->prefs.notefont;
  84.     prj->prefs.textattr.ta_YSize = DEFAULT_FONTSIZE;
  85.     prj->prefs.textattr.ta_Style = NULL;
  86.     prj->prefs.textattr.ta_Flags = NULL;
  87.  
  88.     strncpy(prj->prefs.notefile,DEFAULT_NOTEFILE,STRLEN_FNAME);
  89.  
  90.     prj->prefs.cx_priority = DEFAULT_CXPRIORITY;
  91.     prj->prefs.cx_popup = DEFAULT_CXPOPUP;
  92.     strncpy(prj->prefs.cx_popkey,DEFAULT_CXPOPKEY,STRLEN_CXPOPKEY);
  93.  
  94.     strcpy(prj->prefs.pubscreen,DEFAULT_PUBSCREEN);
  95.  
  96.     prj->prefs.clipunit = DEFAULT_CLIPUNIT;
  97.  
  98.     prj->prefs.delay = DEFAULT_DELAY;
  99.  
  100.     prj->prefs.emptyquit = DEFAULT_EMPTYQUIT;
  101.     prj->prefs.hidewarn = DEFAULT_HIDEWARN;
  102.  
  103.     /* Project not changed */
  104.  
  105.     prj->projectchanged = FALSE;
  106.  
  107.     /* Flag set on quit */
  108.  
  109.     prj->abouttoquit = FALSE;
  110.  
  111.     /* Clear all notes */
  112.  
  113.     for (l = 0; l < NO_NOTES; l++)
  114.         prj->notes[l] = NULL;
  115.  
  116.     prj->curr_note = NULL;
  117.  
  118.     /* Set NULL pointers */
  119.  
  120.     prj->main_msg_port = NULL;
  121.  
  122.     prj->broker = NULL;
  123.     prj->filter = NULL;
  124.     prj->sender = NULL;
  125.     prj->translate = NULL;
  126.  
  127.     prj->broker_msg_port = NULL;
  128.  
  129.     /* Set up the linked list for the commodities gadget */
  130.  
  131.     NewList(&prj->commodlist);
  132.  
  133.     /* Set the cycle gadget to background */
  134.  
  135.     prj->commodcolour = COLOUR_BACKGROUND;
  136.  
  137.     /* Set the double click values */
  138.  
  139.     prj->lastclicked = 0;
  140.     prj->doubleclickseconds = 0;
  141.     prj->doubleclickmicros = 0;
  142.  
  143.     /* Clear blank requester */
  144.  
  145.     InitRequester(&prj->blockreq);
  146.  
  147.     /* Set up the broker message port */
  148.  
  149.     prj->broker_msg_port = CreateMsgPort();
  150.  
  151.     if (!prj->broker_msg_port)
  152.         error("Can't create broker message port",ERR_FATAL,__LINE__,
  153. __FILE__);
  154.  
  155.     /* Set up the main message port */
  156.  
  157.     prj->main_msg_port = CreateMsgPort();
  158.  
  159.     if (!prj->main_msg_port)
  160.         error("Can't create main message port",ERR_FATAL,__LINE__,
  161. __FILE__);
  162.  
  163.     /*** Read the tooltypes ***/
  164.  
  165.     tooltypes = ArgArrayInit(argc,argv);
  166.  
  167.     if (!tooltypes)
  168.         return;
  169.  
  170.     /* Read the tooltypes */
  171.  
  172.     /* The notefile */
  173.  
  174.     toolstring = ArgString(tooltypes,"NOTEFILE",DEFAULT_NOTEFILE);
  175.     strncpy(prj->prefs.notefile,toolstring,STRLEN_FNAME);
  176.  
  177.     /* Note colours (English and American !)*/
  178.  
  179.     prj->prefs.backcolour = (UBYTE)ArgInt(tooltypes,"BACKCOLOR",DEFAULT_BACKCOLOUR);
  180.     prj->prefs.textcolour = (UBYTE)ArgInt(tooltypes,"TEXTCOLOR",DEFAULT_TEXTCOLOUR);
  181.     prj->prefs.caratcolour = (UBYTE)ArgInt(tooltypes,"CARATCOLOR",DEFAULT_CARATCOLOUR);
  182.  
  183.     prj->prefs.backcolour = (UBYTE)ArgInt(tooltypes,"BACKCOLOUR",DEFAULT_BACKCOLOUR);
  184.     prj->prefs.textcolour = (UBYTE)ArgInt(tooltypes,"TEXTCOLOUR",DEFAULT_TEXTCOLOUR);
  185.     prj->prefs.caratcolour = (UBYTE)ArgInt(tooltypes,"CARATCOLOUR",DEFAULT_CARATCOLOUR);
  186.  
  187.     /* Note sizes */
  188.  
  189.     prj->prefs.noteheight = (WORD)ArgInt(tooltypes,"NOTEHEIGHT",DEFAULT_NOTEHEIGHT);
  190.     prj->prefs.notewidth = (WORD)ArgInt(tooltypes,"NOTEWIDTH",DEFAULT_NOTEWIDTH);
  191.  
  192.     /* Note font */
  193.  
  194.     toolstring = ArgString(tooltypes,"NOTEFONT","");
  195.     strncpy(prj->prefs.notefont,toolstring,STRLEN_FONTNAME);
  196.  
  197.     prj->prefs.textattr.ta_YSize = (UWORD)ArgInt(tooltypes,"FONTSIZE",DEFAULT_FONTSIZE);
  198.  
  199.     /* Commodities info */
  200.  
  201.     prj->prefs.cx_priority = (BYTE)ArgInt(tooltypes,"CX_PRIORITY",DEFAULT_CXPRIORITY);
  202.  
  203.     toolstring = ArgString(tooltypes,"CX_POPUP","YES");
  204.     prj->prefs.cx_popup = Stricmp(toolstring,"NO") ? TRUE : FALSE;
  205.  
  206.     toolstring = ArgString(tooltypes,"CX_POPKEY",DEFAULT_CXPOPKEY);
  207.     strncpy(prj->prefs.cx_popkey,toolstring,STRLEN_CXPOPKEY);
  208.  
  209.     /* Public screen */
  210.  
  211.     toolstring = ArgString(tooltypes,"PUBSCREEN",DEFAULT_PUBSCREEN);
  212.     strncpy(prj->prefs.pubscreen,toolstring,STRLEN_PUBSCREEN);
  213.  
  214.     /* Clipboard unit */
  215.  
  216.     prj->prefs.clipunit = (LONG)ArgInt(tooltypes,"CLIPUNIT",DEFAULT_CLIPUNIT);
  217.  
  218.     /* Startup delay */
  219.  
  220.     prj->prefs.delay = (ULONG)ArgInt(tooltypes,"DELAY",DEFAULT_DELAY);
  221.  
  222.     /* Do we quit on startup if no notes read in ? */
  223.  
  224.     toolstring = ArgString(tooltypes,"EMPTYQUIT","NO");
  225.     prj->prefs.emptyquit = Stricmp(toolstring,"NO") ? TRUE : FALSE;
  226.  
  227.     /* Do we warn the user if they hide the commodities window when */
  228.     /* the project has been changed ? */
  229.  
  230.     toolstring = ArgString(tooltypes,"HIDEWARN","YES");
  231.     prj->prefs.hidewarn = Stricmp(toolstring,"NO") ? TRUE : FALSE;
  232.  
  233.     /* Free mem */
  234.  
  235.     if (tooltypes)
  236.         ArgArrayDone();
  237. }
  238.  
  239. /*
  240. Function : void error(const char *msg,error_e err_no,int line,const char *file);
  241. Purpose : Pops up a requester informing user of an error. If err_no >
  242.     ERR_FATAL, the function calls cleanup() and the program will
  243.     exit.
  244. */
  245.  
  246. void error(const char *msg,error_e err_no,int line,const char *file)
  247. {
  248.     struct EasyStruct easyreq_error = {
  249.         sizeof(struct EasyStruct),
  250.         0,
  251.         "StickIt2",
  252.         "FATAL ERROR : %s\nLine %ld in file \"%s\"",
  253.         "Quit"
  254.     };
  255.  
  256.     struct EasyStruct easyreq_warn = {
  257.         sizeof(struct EasyStruct),
  258.         0,
  259.         "StickIt2",
  260.         "WARNING : %s",
  261.         "Continue"
  262.     };
  263.  
  264.     LONG return_val;
  265.  
  266.     if (err_no >= ERR_FATAL) {
  267.         return_val = EasyRequest(NULL,&easyreq_error,NULL,msg,line,
  268. file);
  269.         cleanup();
  270.     }
  271.     else
  272.         return_val = EasyRequest(NULL,&easyreq_warn,NULL,msg);
  273. }
  274.