home *** CD-ROM | disk | FTP | other *** search
/ Carousel / CAROUSEL.cdr / mactosh / lang / skel_azt.sha / main.c < prev    next >
C/C++ Source or Header  |  1986-07-08  |  4KB  |  179 lines

  1. /*
  2.  *    main.c -- application skeleton main program
  3.  */
  4.  
  5. #include <quickdraw.h>
  6. #include <control.h>
  7. #include <desk.h>
  8. #include <dialog.h>
  9. #include <event.h>
  10. #include <font.h>
  11. #include <memory.h>
  12. #include <menu.h>
  13. #include <resource.h>
  14. #include <scrap.h>
  15. #include <textedit.h>
  16. #include <window.h>
  17.  
  18. #include "qdv.h"
  19. #include "def.h"
  20. #include "glob.h"
  21. #define thePort (QD->QDthePort)
  22. #define    GRAFRH    576
  23. #define    GRAFRV    720
  24. #define SCREENRECT QD->screenBits.bounds
  25. #define CurStackBase (*(long *)0x908)
  26.  
  27. Handle        graficon = 0;
  28. QDVar        qdvar = 0;
  29.  
  30. main()
  31. {
  32.     short        dig;
  33.     int            done = FALSE;
  34.     EventRecord    ev;
  35.     int            i;
  36.     CursHandle    ibeam;
  37.     int            *mainadd;
  38.     Handle        mamsg;                /* for "main address" message */
  39.     Point        mouse;                /* to check for TE (ibeam cursor) */
  40.     char        zdum[3];                /* insure last variable has full
  41.                                      * 32 bits.
  42.                                      */
  43.     
  44.     /* setgrowzone(&mygrowzone); for memory size problems */
  45.     *((long *)0) = -1L;    /* force NULL de-reference to give an
  46.                  * ID=02 error when it happens, not later.
  47.                  */
  48.     SetApplLimit(CurStackBase - 8192 /* stack size */ );
  49. /*    MaxApplZone();    */
  50.     
  51.     /* force memory manager to allocate enough master pointers
  52.      * now, so the heap isn't fragmented later.
  53.      */
  54.      
  55.     MoreMasters();
  56. /*    MoreMasters();
  57.     MoreMasters();    */
  58.     
  59.     QD = (QDVar *)&qdvar;
  60.     InitGraf(&thePort);
  61.     InitFonts();
  62.     InitWindows();
  63.     InitMenus();
  64.     TEInit();
  65.     InitDialogs(0 /* no restart procedure */ );
  66.     InitCursor();
  67.     SetEventMask(everyEvent - keyUpMask);
  68.     GetWMgrPort(&screenport);
  69.     SetPort(screenport);
  70.     
  71.     /* use machine dependent screen size to set up drag and grow
  72.      * rectangles, leaving 4 (drag) and 7 (grow) pixels on the sides.
  73.      */ 
  74.     
  75.     SetRect(&wdragr, 4, 24, (short)(SCREENRECT.right-4),
  76.         (short)(SCREENRECT.bottom-4));
  77.     SetRect(&wgrowr, 7, 27, (short)(SCREENRECT.right-7),
  78.         (short)(SCREENRECT.bottom-7));
  79.     sfdtl.v = SCREENRECT.bottom / 2 - 92;
  80.     sfdtl.h = SCREENRECT.right / 2 - 174;
  81.     
  82.     for (i = 1;  i <= NMENUS + 1;  i++)    /* get the menus for app */
  83.         mh[i] = GetMenu(i);
  84.     AddResMenu(mh[1], 'DRVR');    /* get Apple menu desk accessories */
  85.     for (i = 1;  i <= NMENUS;  i++)    /* terminate menus */
  86.         InsertMenu (mh[i], 0);
  87.     DrawMenuBar();
  88.     
  89.     graficon = GetResource('ICN#', 129);
  90.     gibits.baseAddr = (QDPtr)NewPtr(128L);
  91.     HLock(graficon);
  92.     BlockMove(*graficon, gibits.baseAddr, 128L);
  93.     HUnlock(graficon);
  94.     ReleaseResource(graficon);
  95.     gibits.rowBytes = 4;
  96.     SetRect(&gibits.bounds, 0, 0, 32, 32);
  97.     wp[0] = GetNewWindow(260, &wr[0], -1L /* frontmost */ );
  98.     SetPort(wp[0]);
  99.     SetRect(&grafr, 0, 0, GRAFRH, GRAFRV);
  100.     BlockMove(&wp[0]->portRect, &r, (long)sizeof(Rect));
  101.     r.bottom -= 15;
  102.     r.right -= 15;
  103.     vscroll[0] = GetNewControl(128, wp[0]);
  104.     hscroll[0] = GetNewControl(128, wp[0]);
  105.     checkscroll(0);
  106.     drawscroll(0);
  107.     redraw(0);
  108.     filemenu(1);
  109.     
  110.     /* initialization done, handle events */
  111.     
  112.     FlushEvents(everyEvent, 0);    /* ignore what is queued up */
  113.     mainadd = &main;
  114.  
  115.     /* use a resource for all strings so the messages can be
  116.      * translated to other languages
  117.      */
  118.  
  119.     mamsg = GetString(2);
  120.     i = (int)**mamsg;
  121.     while (mainadd) {
  122.         dig = ((long)mainadd) & 0xF;
  123.         if (dig > 9)
  124.             dig += 'A' - '9' - 1;
  125.         *(*mamsg + i--) = (char)(dig + '0');
  126. /*        mainadd >>= 4;    what should work */
  127.         mainadd >>= 2;    /* what does work */
  128.     };
  129.     HLock(mamsg);
  130.     TESetText(*mamsg + 1L, (long)**mamsg, hTE);
  131.     HUnlock(mamsg);
  132.     DisposHandle(mamsg);
  133.     TEUpdate(&tedestr, hTE);
  134.     ibeam = GetCursor(iBeamCursor);
  135.     TEFromScrap();
  136.     scrap = InfoScrap()->scrapCount;
  137.     do {
  138.         SystemTask();    /* handle desk accessories */
  139.         if (scrap != InfoScrap()->scrapCount) {
  140.             TEFromScrap();
  141.             scrap = InfoScrap()->scrapCount;
  142.         };
  143.         if (hTE) {
  144.             TEIdle(hTE);
  145.             if (FrontWindow() == wp[1]) {
  146.                 if (wantTEadj && TickCount() - lastTEadj > 60)
  147.                     teadjdest();
  148.                 GetMouse(&mouse);
  149.                 if (PtInRect(pass(mouse), &(*hTE)->viewRect))
  150.                     SetCursor (*ibeam);
  151.                 else
  152.                     SetCursor(&QD->arrow);
  153.             };
  154.         };
  155.         if (GetNextEvent(everyEvent, &ev))
  156.             switch (ev.what) {
  157.                 extern void    select(), update();
  158.  
  159.                 case mouseDown:
  160.                     done = click(&ev);
  161.                     break;
  162.                 case keyDown:
  163.                 case autoKey:
  164.                     done = key(&ev);
  165.                     break;
  166.                 case updateEvt
  167. :
  168.                     update(&ev);
  169.                     break;
  170.                 case activateEvt:
  171.                     select(&ev);
  172.                     break;
  173.             };
  174.     } while (!done);
  175.     if (paint)
  176.         FSClose(paint);
  177.     /*    run-time does ExitToShell()    */
  178. } /* end of main */
  179.