home *** CD-ROM | disk | FTP | other *** search
/ Power GUI Programming with VisualAge C++ / powergui.iso / trialva / ibmcppw / include / smlib.h < prev    next >
Encoding:
C/C++ Source or Header  |  1996-02-12  |  18.4 KB  |  454 lines

  1. /*
  2.  *   COMPONENT_NAME: somc
  3.  *
  4.  *   ORIGINS: 27
  5.  *
  6.  *
  7.  *   10H9767, 10H9769  (C) COPYRIGHT International Business Machines Corp. 1992,1994
  8.  *   All Rights Reserved
  9.  *   Licensed Materials - Property of IBM
  10.  *   US Government Users Restricted Rights - Use, duplication or
  11.  *   disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
  12.         Last change:  KAS  26 Oct 94    6:01 pm
  13.  */
  14. /*
  15.  *    %Z% %I% %W% %G% %U% [%H% %T%]
  16.  */
  17.  
  18. /*
  19.  */
  20.  
  21. /*
  22.  *         File:    smlib.h.
  23.  *     Contents:    General macros used by the SOM Compiler and the
  24.  *                  emitters.
  25.  *
  26.  *                  [12/06/93] Partial Entry structures #1089
  27.  *                  [01/14/94] Changes for SC LITE #1184
  28.  *                  [04/01/94] Added Mac form for "#include <private" #2752
  29.  */
  30.  
  31. #ifndef smlib_h
  32. #define smlib_h
  33. #include <somc_msg.h>
  34. #ifndef _WIN32
  35. #include <somport.h>
  36. #endif
  37. #include <setjmp.h> /* #1960 */
  38.  
  39. #ifdef SOMWATCH
  40. #ifdef __MAC__ /* #2752 */
  41.   #include <private:somwatch.h>
  42. #else
  43.   #include <private/somwatch.h>
  44. #endif /* __MAC__ */
  45. #define basemalloc  somwatchMalloc
  46. #define basefree    somwatchFree
  47. #define baserealloc somwatchRealloc /* #1112 */
  48. #define basecalloc  somwatchCalloc /* #1112 */
  49. #else
  50. #define basemalloc  malloc
  51. #define basefree    free
  52. #define baserealloc realloc /* #1112 */
  53. #define basecalloc  calloc /* #1112 */
  54. #endif
  55.  
  56.  
  57. #define SOMTOVERRIDE_TYPE(ep) (ep->type == SOMTOverrideMethodE || ep->u.m.omethod)
  58. #define SOMTVALIDENTRY(e,m) ((somtgetatt(e, "class") ? TRUE : FALSE) == m)
  59. #define SMUNKNOWNTYPE(e)    fprintf(stderr, "\"%s\": %d " \
  60.                                       "[%d]. \"%s\"\n", __FILE__, __LINE__,\
  61.                                        e->type, e->name)
  62. #define somtfindBaseType(ep) (somtfindBaseEp(ep)->type)
  63. /*
  64.  * Error handling macros.  We keep a track of our various errors & warnings
  65.  * in a global structure so that emitters can also post errors.
  66.  * They can do this in one of two ways - calling the somtwarn, somterror,
  67.  * somtfatal, somtinternal functions, or using these macros.
  68.  */
  69. #define SMANYERRORS()       (somtg_f.ERROR || somtg_f.FATAL || somtg_f.INTERNAL)
  70. #define SMANYFATAL()        (somtg_f.FATAL || somtg_f.INTERNAL)
  71. #define SMWARNCOUNT()       (somtg_f.WARN)
  72. #define SMERRORCOUNT()      (somtg_f.ERROR + somtg_f.FATAL + somtg_f.INTERNAL)
  73. #define SMPOSTERROR(type)   (somtg_f.type++)
  74. #define SOMTSTAR            (somtaddstar ? "*" : "")
  75. #define SOMTQUAL(cls)       (cls->sname && cls->sname[1])
  76. #define ATTMAP(n)           ((!somtg_f.idl && n && (*n == 'c')) ? somtattMap(n) : n)
  77. #define MSGSET STK
  78. #ifdef __RESTRICT_MEMORY__
  79. #define MAX_MSGSIZE 256
  80. #else
  81. #define MAX_MSGSIZE 500
  82. #endif
  83.  
  84. /*
  85.  * setjmp/longjmp exit details #1960
  86.  */
  87.  
  88. typedef struct {
  89.     jmp_buf jmpbuf;
  90.     bool called;
  91.     int  status;
  92. } SOMTExitBuf;
  93.  
  94. #define SOMTSETEXIT(buf)    if (!buf.called) setjmp(buf.jmpbuf) /* #1960 */
  95.  
  96. #define SOMT_IDL_SEQUENCE_LEN_1  13             /* IDL_SEQUENCE */
  97. #define SOMT_IDL_SEQUENCE_LEN_2  22             /* seq<%10d> */
  98. #define SOMT_IDL_SEQUENCE_LEN (SOMT_IDL_SEQUENCE_LEN_1+SOMT_IDL_SEQUENCE_LEN_2)
  99. #define SOMT_REMOVE_IDL_SEQUENCE(s)   ((*s == '/') ? \
  100.                                          s+SOMT_IDL_SEQUENCE_LEN_2 : s)
  101.  
  102. /*
  103.  * DBCS enabling macros
  104.  */
  105. #ifdef _DBCS
  106.   #define DBCSBLANK        0x8140
  107.   #define DBCSTOINT(buf)   ((((int)*(buf))<<8)+((int)*((buf)+1)))
  108.   #define DBCSCOPY(buf,c)  if(isDBCS(c))\
  109.     {*(buf)++=(char)((c)>>8);*(buf)++=(char)((c)&0xFF);}\
  110.     else *(buf)++=(char)(c)
  111.   #define DBCSSCAN(buf)    somtdbcsScan((char **)&(buf))
  112.   #define DBCSINCR(buf)    ((buf) += isDBCS(*(buf))? 2: 1)
  113.   #define DBCSCHAR(buf)    (isDBCS(*(buf)) ? DBCSTOINT(buf) : (int)(*(buf)))
  114.   #define DBCS_output      dbcsOutput
  115.   #define dbcsOutput(c,fp) ((isDBCS(c) && (putc((char)(c>>8), fp) == EOF)) \
  116.                                            ? EOF \
  117.                                            : putc((char) (c&0x00FF), fp))
  118.   #define DBCS_strchr      somtdbcsStrchr
  119.   #define DBCS_strrchr     somtdbcsStrrchr
  120.   #define DBCS_strstr      somtdbcsStrstr
  121.   #define DBCS_preincr     somtdbcsPreincr
  122.   #define DBCS_postincr    somtdbcsPostincr
  123.   #define isDBCS           somtisDbcs
  124.   #define DBCS_isspace(c)  ((c >= 0) && (c < 256) && isspace(c))
  125. #else
  126.   #define DBCSCOPY(buf,c)  (*(buf)++=(char)(c))
  127.   #define DBCSSCAN(buf)    ((int)(*(buf)++))
  128.   #define DBCSINCR(buf)    (++(buf))
  129.   #define DBCSCHAR(buf)    ((int)(*(buf)))
  130.   #define DBCS_output      putc
  131.   #define DBCS_strchr      strchr
  132.   #define DBCS_strrchr     strrchr
  133.   #define DBCS_strstr      strstr
  134.   #define DBCS_preincr     ++
  135.   #define DBCS_postincr(x) ((x)++)
  136.   #define isDBCS(s)        (FALSE)
  137.   #define DBCS_isspace(c)  (isspace(c))
  138. #endif /* _DBCS */
  139.  
  140. /*
  141.  * ISO LATIN 8859.1 Characater Set
  142.  */
  143. #define SOMTISALNUM(c)        (isalnum(c) || c == '_' || IS_ISO_LATIN_8859_1(c))
  144. #define ISO_LATIN_8859_1_START  192
  145. #define ISO_LATIN_8859_1_FINISH 255
  146. #define IS_ISO_LATIN_8859_1(c)  (c >= ISO_LATIN_8859_1_START && \
  147.                                  c <= ISO_LATIN_8859_1_FINISH && \
  148.                                  c != 215 && c != 247)
  149.  
  150. /*
  151.  * Enum for parent traversal.
  152.  */
  153. typedef enum _SMTraverse {SMTraverseAll, SMTraverseOnce, SMTraverseMany}
  154.         SMTraverse;
  155.  
  156. /*
  157.  * Command line flags and error structure.
  158.  */
  159. typedef struct {
  160.     unsigned verbose:1;
  161.     unsigned quiet:1;
  162.     unsigned warn:1;
  163.     unsigned extra:1;
  164.     unsigned comments:1;
  165.     AttList *atts;
  166.     unsigned lex:1;
  167.     unsigned yacc:1;
  168.     unsigned release:1;
  169.     unsigned stab:1;
  170.     unsigned qualify:1;
  171.     unsigned idl:1;
  172. #ifdef __RESTRICT_MEMORY__
  173. #define MAX_NO_EMITTERS 4
  174. #else
  175. #define MAX_NO_EMITTERS 32
  176. #endif
  177.     char *emitters[MAX_NO_EMITTERS];
  178.     char *progname;
  179.     int ERROR;
  180.     int WARN;
  181.     int FATAL;
  182.     int INTERNAL;
  183.     unsigned append:1;          /* Append to files, like -memitappend */
  184.     unsigned level2:1;          /* level 2 extensions */
  185.     unsigned noint:1;           /* no "int" warning */
  186.     size_t commentsize;         /* size of comment buffer */
  187.     unsigned useshort:1;        /* use short names */
  188.     AttList *pragmas;           /* list of pragmas */
  189.     Mlist *glbemits;            /* list of types to globally emit */
  190.     unsigned fullyqualified:1;  /* TRUE if names have been fullyqualified */
  191.     unsigned tcdone:1;          /* TRUE if typecodes have been created */
  192.     unsigned relchk:1;          /* TRUE if you want release order checking */
  193.     unsigned binary:1;          /* TRUE if somtopenEmitFile should fopen in binary mode #8694 */
  194. } Flags;
  195.  
  196. /*
  197.  * Global variables - that are really macros
  198.  */
  199.  
  200. #define somtcommentsize      somtg_f.commentsize
  201. #define somtpragmaList       somtg_f.pragmas
  202. #define somtglbemits         somtg_f.glbemits
  203. #define somtfullyqualified   somtg_f.fullyqualified
  204. #define somttcdone           somtg_f.tcdone
  205. #define somtrelchk           somtg_f.relchk
  206.  
  207. #define ARG_STRING          ((*argc)--, *(*argv)++)
  208. #define MAX_ARG_LIST_LENGTH 2048
  209. #define SOMTSABUF           (4*(FILENAME_MAX+2)+1) /* ::id::id::id::id */
  210. #define SOMT_MSG_SIZE       MAX_ARG_LIST_LENGTH + SOMTSABUF
  211.  
  212. typedef struct {
  213.     char *name;
  214.     char *desc;
  215.     short len;
  216. } BaseType;
  217.  
  218. /*
  219.  * Emitter function prototype:
  220.  */
  221. typedef FILE* (*EmitFn)(char*,Entry*,Stab*);
  222.  
  223. /*
  224.  * External function prototypes from smlib.c, smload.c, smtypes.c, smdesc.c,
  225.  * smmsg.c
  226.  */
  227. #ifdef _WIN32
  228. SOMEXTERN int somttraverseParents(FILE *fp, Entry * cls, Entry *arg, int (*fn)(FILE*,Entry*,Entry*), SMTraverse flg);
  229. #endif
  230. SOMEXTERN AttList *somtattalloc(MemBuf *membuf, char *name, char *value);
  231. SOMEXTERN AttList *somtgetap(AttList *ap, char *att);
  232. SOMEXTERN EmitFn somtload(char *fileName, char *functionName, void **modHandle);
  233. SOMEXTERN Entry *somtfindBaseEp(Entry *ep);
  234. SOMEXTERN Entry *somtgetType(char *name, SOMTTypes type);
  235. SOMEXTERN FILE *somtokfopen(char *path, char *mode);
  236. #if defined(_WIN32)
  237. SOMEXTERN int somtokfprintf(FILE *, const char *, ...);
  238. SOMEXTERN int somtokfputs(const char *, FILE *);
  239. SOMEXTERN int somtokfputc(const char, FILE *);
  240. SOMEXTERN char *somtokfgets(char *, int, FILE *);
  241. SOMEXTERN void somtokrewind(FILE *);
  242. SOMEXTERN int somtokrename(const char*, const char *);
  243. #endif
  244. SOMEXTERN FILE *somtopenEmitFile(char *file, char *ext);
  245. SOMEXTERN bool somtisDbcs(int c);
  246. SOMEXTERN bool somtremoveExt(char *name, char *ext, char *buf);
  247. SOMEXTERN char *somtaddExt(char *name, char *ext, char *buf);
  248. SOMEXTERN char *somtarrayToPtr(Entry *ep, char *stars, char *buf);
  249. SOMEXTERN char *somtattNormalise(char *name, char *buf);
  250. SOMEXTERN char *somtbasename(char *path);
  251. SOMEXTERN char *somtctos(Const *con, char *buf);
  252. SOMEXTERN char *somtdbcsPostincr(char **p);
  253. SOMEXTERN char *somtdbcsPreincr(char **p);
  254. SOMEXTERN char *somtdbcsStrchr(char *s, int c);
  255. SOMEXTERN char *somtdbcsStrrchr(char *s, int c);
  256. SOMEXTERN char *somtdbcsStrstr(char *s1, char *s2);
  257. SOMEXTERN char *somteptotype(Entry *ep, char *ptrs, char *buf);
  258. SOMEXTERN char *somtgetDesc(Stab *stab, Entry *cls, Entry *method, char *desc, bool addQuotes, bool use, bool versflg);
  259. SOMEXTERN char *somtgetVersion(char *sccsid, char *version);
  260. SOMEXTERN char *somtgetgatt(char *s);
  261. SOMEXTERN char *somtnextword(const char *s, char *buf);
  262. SOMEXTERN char *somtnormaliseDesc(char *desc, char *normal);
  263. SOMEXTERN char *somtsatos(char **sa, char *sep, char *buf);
  264. SOMEXTERN char *somtsearchFile(char *file, char *path, char *envvar);
  265. SOMEXTERN char *somtskipws(const char *s);
  266. SOMEXTERN char *somtstringFmt(char *fmt, ...);
  267. SOMEXTERN char *somttype(SOMTTypes type);
  268. SOMEXTERN char *somtuniqFmt(MemBuf *membuf, char *fmt, ...);
  269. SOMEXTERN int somtargFlag(int *argc, char ***argv);
  270. SOMEXTERN int somtattjoin(register AttList *ap1, AttList *ap2);
  271. SOMEXTERN int somtdbcsLastChar(char *buf);
  272. SOMEXTERN int somtdbcsScan(char **buf);
  273. SOMEXTERN int somtdiskFull(FILE *fp);
  274. SOMEXTERN int somtfclose(FILE *fp);
  275. SOMEXTERN int somtfexists(char *file);
  276. SOMEXTERN int somtisparent(Entry *cls, Entry *parent);
  277. SOMEXTERN int somtmget(int setnum, int msgnum, char *msgbuf);
  278. SOMEXTERN int somtmopen(char *filename);
  279. SOMEXTERN int somtmprintf(int setnum, int msgnum, ...);
  280. SOMEXTERN int somtokremove(char *file);
  281. SOMEXTERN int somtunload(void *modHandle);
  282. SOMEXTERN int somtwriteaccess(char *file);
  283. SOMEXTERN void *somtsmalloc(size_t nbytes, bool clear);
  284. SOMEXTERN void somtaddGAtt(MemBuf **membuf, AttList **ap, char *buf);
  285. SOMEXTERN void somtcalcFileName(char *def, char *over, char *ext);
  286. SOMEXTERN void somtcleanFilesFatal(int status);
  287. SOMEXTERN void somtemitTypes(FILE *fp, Mlist *mp, Stab *stab);
  288. SOMEXTERN void somterror(char *file, long lineno, char *fmt, ...);
  289. SOMEXTERN void somtfatal(char *file, long lineno, char *fmt, ...);
  290. SOMEXTERN void somtinternal(char *file, long lineno, char *fmt, ...);
  291. SOMEXTERN void somtmclose(void);
  292. SOMEXTERN void somtmsg(char *file, long lineno, char *fmt, ...);
  293. SOMEXTERN void somtreadDescFile(Stab *stab, char *file);
  294. SOMEXTERN void somtsetDefaultDesc(Stab *stab);
  295. SOMEXTERN void somtsetEmitSignals(void(*cleanup) (int), void (*internal) (int));
  296. SOMEXTERN void somtsetTypeDefn(Entry *type, Entry *ep, char *ptrs, Entry *ret, bool array);
  297. SOMEXTERN void somtsetext(int csc);
  298. SOMEXTERN void somtshowVersion(char *s, char *progname, char *sccsid);
  299. SOMEXTERN void somtsmfree(void *first, ...);
  300. SOMEXTERN void somtunsetEmitSignals(void);
  301. SOMEXTERN void somtwarn(char *file, long lineno, char *fmt, ...);
  302. SOMEXTERN char *somtuppercase(char *s, char *buf);
  303. SOMEXTERN char *somtlowercase(char *s, char *buf);
  304. SOMEXTERN char *somtdbcsuppercase(char *s, char *buf);
  305. SOMEXTERN char *somtdbcslowercase(char *s, char *buf);
  306. SOMEXTERN void somtresetEmitSignals(void);
  307. SOMEXTERN size_t somtsizeofEntry(SOMTTypes type);
  308. SOMEXTERN char *somtepname(Entry *ep, char *buf, bool suppressImpctxCheck);
  309. SOMEXTERN char *somtgenSeqName(long n, Entry *base, char *buf, bool fullname);
  310. SOMEXTERN void somtmrifatal(char *file, long lineno, int msgnum,...);
  311. SOMEXTERN void somtmriinternal(char *file, long lineno, int msgnum,...);
  312. SOMEXTERN void somtmrierror(char *file, long lineno, int msgnum,...);
  313. SOMEXTERN void somtmrimsg(char *file, long lineno, int msgnum,...);
  314. SOMEXTERN void somtmriwarn(char *file, long lineno, int msgnum,...);
  315. SOMEXTERN void somtsetInternalMessages(char *too_long, char *cant_continue, char *segv, char *bus);
  316. SOMEXTERN bool somtisvoid(Entry *type, char *defn);
  317. SOMEXTERN bool somtreturnsStruct(Entry *ep);
  318. SOMEXTERN bool somtreturnsPtr(Entry *ep);
  319. SOMEXTERN char *somtsimpleName(Entry *ep);
  320. SOMEXTERN void somtqualifyNames(Stab * stab, bool fully);
  321. SOMEXTERN Entry *somtfindBaseEpNonPtr(Entry *ep);
  322. SOMEXTERN bool somtprocessTraps(void);
  323. SOMEXTERN Mlist *somtallocMlist(Entry * ep); /* #206 */
  324. SOMEXTERN Mlist *somtmlistend(Mlist * mp, char *name); /* #206 */
  325. SOMEXTERN bool somtisMutRef(Entry *ep, Mlist *seen, bool isself, long level); /* #206 */
  326. SOMEXTERN Mlist * somtfreeMlist(Mlist *mp); /* #206 */
  327. SOMEXTERN Mlist * somtdupMlist(Mlist *mp, Entry *ep); /* #206 */
  328. SOMEXTERN void somtfreeWorld(); /* #1112 */
  329. SOMEXTERN void somtinitMalloc(bool dynamic); /* #1112 */
  330. SOMEXTERN void somtInitialiseEmitlib(void); /* #1180 */
  331. SOMEXTERN void somtInitialiseSmmeta(void); /* #1180 */
  332. SOMEXTERN void somtInitialiseCreatetc(void); /* #1180 */
  333. SOMEXTERN void somtInitialiseSmtypes(void); /* #1180 */
  334. SOMEXTERN void somtInitialiseSomc(void); /* #1180 */
  335. SOMEXTERN void somtInitialiseSmsmall(void);
  336. SOMEXTERN char *somtattMap(char *name);
  337. SOMEXTERN void somtexit(SOMTExitBuf *ebuf, int status); /* #1960 */
  338.  
  339. /*
  340.  * In emitlib.c
  341.  */
  342. SOMEXTERN void somtdymain(char *file, Entry *cls, EmitFn emitfn, char *emitter, int first, char *version, Stab *stab);
  343. SOMEXTERN void somtaddHeader(char *file, FILE *fp, char *ext);
  344.  
  345. /*
  346.  * Global variables
  347.  */
  348. #if (!defined(_WIN32) || defined(_WIN32_SOMC))
  349. SOMEXTERN global Flags somtg_f;        /* Command line flags structure */
  350.  
  351. SOMEXTERN global MemBuf *somtg_membuf; /* Memory buffer for string allocation */
  352.  
  353. SOMEXTERN global Mlist *somtglbdefs;   /* Global defs */
  354.  
  355. SOMEXTERN global SMEXT somtext;        /* Different idl/oidl extensions */
  356.  
  357. SOMEXTERN global Stab *somtstab;       /* Pointer to symbol table */
  358.  
  359. SOMEXTERN global bool somtaddstar;     /* Cached copy of global modifier */
  360.  
  361. SOMEXTERN global bool somtrmstar;      /* Cached copy of global modifier */
  362.  
  363. SOMEXTERN global char *somtg_buf;      /* Comment/pass thru buffer */
  364.  
  365. SOMEXTERN global char *somtg_sccsid;
  366.  
  367. SOMEXTERN global char somtfilePath[];  /* input file full path */
  368.  
  369. SOMEXTERN global char somtfileStem[];  /* infput file stem */
  370.  
  371. SOMEXTERN global char somtoutPath[];   /* output file */
  372.  
  373. SOMEXTERN global char *(*somtgetAtt) (AttList *, char *, char **);
  374.  
  375. SOMEXTERN global Entry *somtmodule;    /* Pinter to last module encountered */
  376.  
  377. SOMEXTERN global Mlist *somtclassList; /* List of classes that sc emits */
  378.  
  379. SOMEXTERN global long somtsaved;       /* Bytes saved due to various
  380.                                         * optimisations steps #1089 */
  381.  
  382. SOMEXTERN global void *(*somtmalloc)(size_t nbytes); /* #1112 */
  383. SOMEXTERN global void (*somtfree)(void *bp);         /* #1112 */
  384. SOMEXTERN global void *(*somtcalloc)(size_t nmemb, size_t size);  /* #1112 */
  385. SOMEXTERN global void *(*somtrealloc)(void *bp, size_t nbytes); /* #1112 */
  386.  
  387. SOMEXTERN global void (*somtcleanup_f) (int); /* cleanup signal function to call */
  388. SOMEXTERN global void (*somtinternal_f) (int);/* internal signal function to call */
  389. SOMEXTERN global int somtopenEmitFileCalled; /* #1125, #1180 */
  390.  
  391. SOMEXTERN global SOMTExitBuf somtipcbuf;  /* #1960 - global buffer for the setmp/longjmp */
  392.  
  393. SOMEXTERN global SOMTExitBuf somtscbuf;   /* #1960 - global buffer for the setmp/longjmp */
  394.  
  395. SOMEXTERN global void *somtemitReturns; /* Emitter returns */ /* #1960 */
  396.  
  397. SOMEXTERN global void (*somtrealExit)(int status); /* #1960 real exit to call */
  398.  
  399. #else /* _WIN32 IS DEFINED */
  400.  
  401. SOMEXTERN global WIN32_DLLIMPORT Flags somtg_f;        /* Command line flags structure */
  402.  
  403. SOMEXTERN global WIN32_DLLIMPORT MemBuf *somtg_membuf; /* Memory buffer for string allocation */
  404.  
  405. SOMEXTERN global WIN32_DLLIMPORT Mlist *somtglbdefs;   /* Global defs */
  406.  
  407. SOMEXTERN global WIN32_DLLIMPORT SMEXT somtext;        /* Different idl/oidl extensions */
  408.  
  409. SOMEXTERN global WIN32_DLLIMPORT Stab *somtstab;       /* Pointer to symbol table */
  410.  
  411. SOMEXTERN global WIN32_DLLIMPORT bool somtaddstar;     /* Cached copy of global WIN32_DLLIMPORT modifier */
  412.  
  413. SOMEXTERN global WIN32_DLLIMPORT bool somtrmstar;      /* Cached copy of global WIN32_DLLIMPORT modifier */
  414.  
  415. SOMEXTERN global WIN32_DLLIMPORT char *somtg_buf;      /* Comment/pass thru buffer */
  416.  
  417. SOMEXTERN global WIN32_DLLIMPORT char *somtg_sccsid;
  418.  
  419. SOMEXTERN global WIN32_DLLIMPORT char somtfilePath[];  /* input file full path */
  420.  
  421. SOMEXTERN global WIN32_DLLIMPORT char somtfileStem[];  /* infput file stem */
  422.  
  423. SOMEXTERN global WIN32_DLLIMPORT char somtoutPath[];   /* output file */
  424.  
  425. SOMEXTERN global WIN32_DLLIMPORT char *(*somtgetAtt) (AttList *, char *, char **);
  426.  
  427. SOMEXTERN global WIN32_DLLIMPORT Entry *somtmodule;    /* Pinter to last module encountered */
  428.  
  429. SOMEXTERN global WIN32_DLLIMPORT Mlist *somtclassList; /* List of classes that sc emits */
  430.  
  431. SOMEXTERN global WIN32_DLLIMPORT long somtsaved;       /* Bytes saved due to various
  432.                                         * optimisations steps #1089 */
  433.  
  434. SOMEXTERN global WIN32_DLLIMPORT void *(*somtmalloc)(size_t nbytes); /* #1112 */
  435. SOMEXTERN global WIN32_DLLIMPORT void (*somtfree)(void *bp);         /* #1112 */
  436. SOMEXTERN global WIN32_DLLIMPORT void *(*somtcalloc)(size_t nmemb, size_t size);  /* #1112 */
  437. SOMEXTERN global WIN32_DLLIMPORT void *(*somtrealloc)(void *bp, size_t nbytes); /* #1112 */
  438.  
  439. SOMEXTERN global WIN32_DLLIMPORT void (*somtcleanup_f) (int); /* cleanup signal function to call */
  440. SOMEXTERN global WIN32_DLLIMPORT void (*somtinternal_f) (int);/* internal signal function to call */
  441. SOMEXTERN global WIN32_DLLIMPORT int somtopenEmitFileCalled; /* #1125, #1180 */
  442.  
  443. SOMEXTERN global WIN32_DLLIMPORT SOMTExitBuf somtipcbuf;  /* #1960 - global WIN32_DLLIMPORT buffer for the setmp/longjmp */
  444.  
  445. SOMEXTERN global WIN32_DLLIMPORT SOMTExitBuf somtscbuf;   /* #1960 - global WIN32_DLLIMPORT buffer for the setmp/longjmp */
  446.  
  447. SOMEXTERN global WIN32_DLLIMPORT void *somtemitReturns; /* Emitter returns */ /* #1960 */
  448.  
  449. SOMEXTERN global WIN32_DLLIMPORT void (*somtrealExit)(int status); /* #1960 real exit to call */
  450.  
  451. #endif /* _WIN32 DLLIMPORT sections */
  452.  
  453. #endif
  454.