home *** CD-ROM | disk | FTP | other *** search
/ ftp.cs.arizona.edu / ftp.cs.arizona.edu.tar / ftp.cs.arizona.edu / icon / historic / v92.tgz / v92.tar / v92 / src / h / grttin.h < prev    next >
C/C++ Source or Header  |  1996-03-22  |  10KB  |  327 lines

  1. /*
  2.  * Group of include files for input to rtt.
  3.  *   rtt reads these files for preprocessor directives and typedefs, but
  4.  *   does not output any code from them.
  5.  */
  6. #include "::h:define.h"
  7. #if VMS
  8. /* don't need path.h */
  9. #else                    /* VMS */
  10. #include "::h:path.h"
  11. #endif                    /* VMS */
  12. #include "::h:config.h"
  13. #ifndef NoTypeDefs
  14. #include "::h:typedefs.h"
  15. #endif                    /* NoTypeDefs */
  16. #include "::h:version.h"
  17.  
  18. /*
  19.  * Macros that must be expanded by rtt.
  20.  */
  21.  
  22. /*
  23.  * Declaration for library routine.
  24.  */
  25. #begdef LibDcl(nm,n,pn)
  26.    #passthru OpBlock(nm,n,pn,0)
  27.  
  28.    int O##nm(nargs,cargp)
  29.    int nargs;
  30.    register dptr cargp;
  31. #enddef
  32.  
  33. /*
  34.  * Error exit from non top-level routines. Set tentative values for
  35.  *   error number and error value; these errors will but put in
  36.  *   effect if the run-time error routine is called.
  37.  */
  38. #begdef ReturnErrVal(err_num, offending_val, ret_val)
  39.    do {
  40.    t_errornumber = err_num;
  41.    t_errorvalue = offending_val;
  42.    t_have_val = 1;
  43.    return ret_val;
  44.    } while (0)
  45. #enddef
  46.  
  47. #begdef ReturnErrNum(err_num, ret_val)
  48.    do {
  49.    t_errornumber = err_num;
  50.    t_errorvalue = nulldesc;
  51.    t_have_val = 0;
  52.    return ret_val;
  53.    } while (0)
  54. #enddef
  55.  
  56. /*
  57.  * Code expansions for exits from C code for top-level routines.
  58.  */
  59. #define Fail        return A_Resume
  60. #define Return        return A_Continue
  61.  
  62. /*
  63.  * RunErr encapsulates a call to the function err_msg, followed
  64.  *  by Fail.  The idea is to avoid the problem of calling
  65.  *  runerr directly and forgetting that it may actually return.
  66.  */
  67.  
  68. #define RunErr(n,dp) do {\
  69.    err_msg((int)n,dp);\
  70.    Fail;\
  71.    } while (0)
  72.  
  73. /*
  74.  * Protection macro.
  75.  */
  76. #define Protect(notnull,orelse) do {if ((notnull)==NULL) orelse;} while(0)
  77.  
  78. /* Get RTT past some OS2-32 types */
  79. #if OS2_32
  80. typedef int HFILE, ULONG;
  81. #endif                    /* OS2_32 */
  82.  
  83. #ifdef EventMon
  84. /*
  85.  * perform what amounts to "function inlining" of EVVal
  86.  */
  87. #begdef EVVal(value,event)
  88.    do {
  89.    if (!is:null(curpstate->eventmask) &&
  90.        Testb((word)ToAscii(event), curpstate->eventmask)
  91.        ) {
  92.       MakeInt(value, &(curpstate->parent->eventval));
  93.       actparent(event);
  94.       }
  95.    } while (0)
  96. #enddef                    /* EVVal */
  97. #begdef EVValD(dp,event)
  98.    do {
  99.    if (!is:null(curpstate->eventmask) &&
  100.        Testb((word)ToAscii(event), curpstate->eventmask)
  101.        ) {
  102.       curpstate->parent->eventval = *(dp);
  103.       actparent(event);
  104.       }
  105.    } while (0)
  106. #enddef                    /* EVValD */
  107. #begdef EVValX(bp,event)
  108.    do {
  109.    struct progstate *parent = curpstate->parent;
  110.    if (!is:null(curpstate->eventmask) &&
  111.        Testb((word)ToAscii(event), curpstate->eventmask)
  112.        ) {
  113.       parent->eventval.dword = D_Coexpr;
  114.       BlkLoc(parent->eventval) = (union block *)(bp);
  115.       actparent(event);
  116.       }
  117.    } while (0)
  118. #enddef                    /* EVValX */
  119. #if UNIX
  120. #begdef EVTick()
  121. /*
  122.  * EVTick() - record a Tick event reflecting a clock advance.
  123.  *
  124.  *  The interpreter main loop has detected a change in the profile counters.
  125.  *  This means that the system clock has ticked.  Record an event and update
  126.  *  the records.
  127.  */
  128.    do {
  129.    word sum, nticks;
  130.  
  131.    oldtick = ticker.l[0] + ticker.l[1];
  132.    sum = ticker.s[0] + ticker.s[1] + ticker.s[2] + ticker.s[3];
  133.    nticks = sum - oldsum;
  134.    EVVal(nticks, E_Tick);
  135.    oldsum = sum;
  136.    } while (0)
  137. #enddef                    /* EVTick */
  138. #else                    /* UNIX */
  139. #define EVTick()
  140. #endif                    /* UNIX */
  141. #define InterpEVVal(arg1,arg2)  { ExInterp; EVVal(arg1,arg2); EntInterp; }
  142. #define InterpEVValD(arg1,arg2) { ExInterp; EVValD(arg1,arg2); EntInterp; }
  143. #define InterpEVValX(arg1,arg2) { ExInterp; EVValX(arg1,arg2); EntInterp; }
  144. #define InterpEVTick()          { ExInterp; EVTick(); EntInterp; }
  145.  
  146. /*
  147.  * Macro with construction of event descriptor.
  148.  */
  149.  
  150. #begdef Desc_EVValD(bp, code, type)
  151.    do {
  152.    eventdesc.dword = type;
  153.    eventdesc.vword.bptr = (union block *)(bp);
  154.    EVValD(&eventdesc, code);
  155.    } while (0)
  156. #enddef                    /* Desc_EVValD */
  157.  
  158. #else                    /* EventMon */
  159. #define EVVal(arg1,arg2)
  160. #define EVValD(arg1,arg2)
  161. #define EVValX(arg1,arg2)
  162. #define EVTick()
  163. #define InterpEVVal(arg1,arg2)
  164. #define InterpEVValD(arg1,arg2)
  165. #define InterpEVValX(arg1,arg2)
  166. #define InterpEVTick()
  167. #define Desc_EVValD(bp, code, type)
  168. #define MMAlc(n,t)
  169. #define MMStr(n)
  170. #endif                    /* EventMon */
  171.  
  172.  
  173. #ifdef Graphics
  174. typedef int wbp, wsp, wcp, wdp, wclrp, wfp;
  175. typedef int wbinding, wstate, wcontext, wfont;
  176. typedef int siptr, stringint;
  177. typedef int XRectangle, XPoint, XSegment, XArc, SysColor, LinearColor;
  178. typedef int LONG, SHORT;
  179.  
  180. #ifdef MacGraph
  181. typedef int Str255, Point, StandardFileReply, SFTypeList, Ptr, PixMap;
  182. typedef int Boolean, Rect, PolyHandle, EventRecord, wsp, MouseInfoType;
  183. typedef int Handle, MenuHandle, OSErr, WindowPtr, GWorldFlags, PaletteHandle;
  184. typedef int BitMap, RgnHandle, QDErr, GWorldPtr, GrafPtr, GDHandle, PixMapHandle;
  185. typedef int OSType, FInfo, IOParam, DialogPtr, ControlHandle, StringHandle, Size;
  186. #endif                    /* MacGraph */
  187.  
  188. #ifdef XWindows
  189. typedef int XGCValues, XColor, XFontStruct, XWindowAttributes;
  190. typedef int XEvent, XExposeEvent, XKeyEvent, XButtonEvent, XConfigureEvent;
  191. typedef int XSizeHints, XWMHints, XClassHint, XTextProperty;
  192. typedef int Colormap, XVisualInfo;
  193. typedef int *Display, Cursor, GC, Window, Pixmap, Visual, KeySym;
  194. typedef int WidgetClass, XImage, XpmAttributes;
  195. #endif                    /* XWindows */
  196.  
  197. #ifdef MSWindows
  198. typedef int clock_t, jmp_buf;
  199. typedef int int_PASCAL, LRESULT_CALLBACK, LOGBRUSH, MSG, BYTE, WORD, DWORD;
  200. typedef int HINSTANCE, LPSTR, HBITMAP, WNDCLASS, PAINTSTRUCT, POINT, RECT;
  201. typedef int HWND, HDC, UINT, WPARAM, LPARAM, HANDLE, HPEN, HBRUSH, SIZE;
  202. typedef int COLORREF, HFONT, LOGFONT, TEXTMETRIC, FONTENUMPROC, FARPROC;
  203. typedef int LOGPALETTE, HPALETTE, PALETTEENTRY, HCURSOR, BITMAP, HDIB, va_list;
  204. typedef int LOGPEN, LOGBRUSH;
  205. #endif                    /* MSWindows */
  206.  
  207. #ifdef PresentationManager
  208. /* OS/2 PM specifics */
  209. typedef int HAB, HPS, QMSG, HMQ, HWND, USHORT, MRESULT, ULONG, MPARAM;
  210. typedef int PFNWP, HMODULE, SHORT, BOOL, TID, RECTL, ERRORID;
  211. typedef int MRESULT_N_EXPENTRY, SIZEL, HDC, POINTL, HMTX, HBITMAP;
  212. typedef int VOID_APIENTRY, UCHAR, HEV;
  213. typedef int LONG, BITMAPINFOHEADER2, PBITMAPINFO2, PSZ, RGB2, BITMAPINFO2;
  214. typedef int FONTMETRICS, PRECTL, PCHARBUNDLE, PLINEBUNDLE, PIMAGEBUNDLE;
  215. typedef int AREABUNDLE, PAREABUNDLE, PPOINTL, POLYGON, CHARBUNDLE, LINEBUNDLE;
  216. typedef int lclIdentifier, BYTE, PBYTE, PRGB2, FATTRS, PFATTRS, PULONG;
  217. typedef int PBITMAPINFOHEADER2, BITMAPFILEHEADER2, BITMAPARRAYFILEHEADER2;
  218. typedef int colorEntry, ARCPARAMS, threadargs, HPOINTER, CURSORINFO;
  219. typedef int PCURSORINFO, DEVOPENSTRUCT, PDEVOPENDATA, SIZEF, HRGN, PSWP;
  220. typedef int va_list, BITMAPINFOHEADER, BITMAPFILEHEADER, BITMAPARRAYFILEHEADER;
  221. typedef int PBITMAPINFOHEADER, MinBitmapHeader, RGB;
  222. #endif                    /* PresentationManager */
  223.  
  224. /*
  225.  * Convenience macros to make up for RTL's long-windedness.
  226.  */
  227. #begdef CnvShortInt(desc, s, max)
  228.     {
  229.     struct descrip tmp;
  230.     if (!cnv:integer(desc,tmp)) runerr(101,desc);
  231.     if ((tmp.dword != D_Integer) || (IntVal(tmp) > max))
  232.        MakeInt(max, &tmp);
  233.     s = (short) IntVal(tmp);
  234.     }
  235. #enddef                    /* CnvShortInt */
  236.  
  237. #define CnvCShort(d,s) CnvShortInt(d,s,32767)
  238. #define CnvCUShort(d,s) CnvShortInt(d,s,65535)
  239.  
  240. #define CnvCInteger(d,i) \
  241.   if (!cnv:C_integer(d,i)) runerr(101,d);
  242.  
  243. #define DefCInteger(d,default,i) \
  244.   if (!def:C_integer(d,default,i)) runerr(101,d);
  245.  
  246. #define CnvString(din,dout) \
  247.   if (!cnv:string(din,dout)) runerr(103,din);
  248.  
  249. #define CnvTmpString(din,dout) \
  250.   if (!cnv:tmp_string(din,dout)) runerr(103,din);
  251.  
  252. /*
  253.  * conventions supporting optional initial window arguments:
  254.  *
  255.  * All routines declare argv[argc] as their parameters
  256.  * Macro OptWindow checks argv[0] and assigns _w_ and warg if it is a window
  257.  * warg serves as a base index and is added everywhere argv is indexed
  258.  * n is used to denote the actual number of "objects" in the call
  259.  * Macro ReturnWindow returns either the initial window argument, or &window
  260.  */
  261. #begdef OptWindow(w)
  262.    if (argc>warg && is:file(argv[warg])) {
  263.       if ((BlkLoc(argv[warg])->file.status & Fs_Window) == 0)
  264.      runerr(140,argv[warg]);
  265.       if ((BlkLoc(argv[warg])->file.status & (Fs_Read|Fs_Write)) == 0)
  266.      runerr(142,argv[warg]);
  267.       (w) = (wbp)BlkLoc(argv[warg])->file.fd;
  268.       if (ISCLOSED(w))
  269.      runerr(142,argv[warg]);
  270.       warg++;
  271.       }
  272.    else {
  273.       if (!(is:file(kywd_xwin[XKey_Window]) &&
  274.         (BlkLoc(kywd_xwin[XKey_Window])->file.status & Fs_Window)))
  275.     runerr(140,kywd_xwin[XKey_Window]);
  276.       if (!(BlkLoc(kywd_xwin[XKey_Window])->file.status & (Fs_Read|Fs_Write)))
  277.      runerr(142,kywd_xwin[XKey_Window]);
  278.       (w) = (wbp)BlkLoc(kywd_xwin[XKey_Window])->file.fd;
  279.       if (ISCLOSED(w))
  280.      runerr(142,kywd_xwin[XKey_Window]);
  281.       }
  282. #enddef                    /* OptWindow */
  283.  
  284. #begdef ReturnWindow
  285.       if (!warg) return kywd_xwin[XKey_Window];
  286.       else return argv[0]
  287. #enddef                    /* ReturnWindow */
  288.  
  289. #begdef CheckArgMultiple(mult)
  290. {
  291.   if ((argc-warg) % (mult)) runerr(146);
  292.   n = (argc-warg)/mult;
  293.   if (!n) runerr(146);
  294. }
  295. #enddef                    /* CheckArgMultiple */
  296.  
  297. /*
  298.  * calloc to make sure uninit'd entries are zeroed.
  299.  */
  300. #begdef GRFX_ALLOC(var,type)
  301.    do {
  302.       var = (struct type *)calloc(1, sizeof(struct type));
  303.       if (var == NULL) ReturnErrNum(305, NULL);
  304.       var->refcount = 1;
  305.    } while(0)
  306. #enddef                    /* GRFX_ALLOC */
  307.  
  308. #begdef GRFX_LINK(var, chain)
  309.    do {
  310.       var->next = chain;
  311.       var->previous = NULL;
  312.       if (chain) chain->previous = var;
  313.       chain = var;
  314.    } while(0)
  315. #enddef                    /* GRFX_LINK */
  316.  
  317. #begdef GRFX_UNLINK(var, chain)
  318.    do {
  319.       if (var->previous) var->previous->next = var->next;
  320.       else chain = var->next;
  321.       if (var->next) var->next->previous = var->previous;
  322.       free(var);
  323.    } while(0)
  324. #enddef                    /* GRFX_UNLINK */
  325.  
  326. #endif                    /* Graphics */
  327.