www.sas.com > Service and Support > Technical Support
 
Technical Support SAS - The power to know(tm)
  TS Home | Intro to Services | News and Info | Contact TS | Site Map | FAQ | Feedback


/*--------------------------------------------------------------------+
|                                                                     |
|              Copyright 1996 (c), SAS Institute Inc.                 |
|                Unpublished - All Rights Reserved                    |
|                                                                     |
|                     S A S / C  S A M P L E                          |
|                                                                     |
|       Name: ISPFUSER                                                |
|                                                                     |
|   Language: C                                                       |
|                                                                     |
| EntryPoint: MAIN                                                    |
|                                                                     |
| EntryType : OS Entry Linkage                                        |
|                                                                     |
| Files Note: 'prefix' is the installation defined high level         |
|             qualifier for the SAS/C product.                        |
|                                                                     |
|    Purpose: Demonstrate calls from ISPF to a user provided exit.    |
|                                                                     |
| MVS - Compile/Link   : submit prefix.SAMPLE.AUX(ISPFEXTJ)           |
|       Execution      : See SAS Programmers Report:                  |
|                                                                     |
| CMS - Not applicable.                                               |
|                                                                     |
|      Notes:                                                         |
|                                                                     |
|                                                                     |
+--------------------------------------------------------------------*/
#eject

#include "osispf.h"


/*-------------------------------------------------------------------+
|  Structure containing ISPF user exit address and any data to be    |
|  passed to the exit                                                |
+-------------------------------------------------------------------*/
struct { __asm int (*cuserxt)();
         char *data;
       } udata;


/*--------------------------------------------------------------------+
|  The cuserxt function is declared to be an __asm function, even     |
|  though it is written in C.  Since it is compiled with the INDEP    |
|  option, it expects to be called with standard linkage conventions  |
|  from a non-C program.  The __asm keyword also ensures that the     |
|  function pointer is a 4-byte pointer to the actual code, which is  |
|  the format expected by ISPF.                                       |
+--------------------------------------------------------------------*/

extern __asm int cuserxt();


/*-------------------------------------------------------------------+
|  The main routine defines the variable as using a user exit and    |
|  displays an entry panel (showing the variable) until the user     |
|  requests to terminate.                                            |
+-------------------------------------------------------------------*/
void main()
{
 char name(|41|);
 int rc = 0;


   CONTROL("ERRORS ", "CANCEL ", DUMNUM);


   /*----------------------------------------------------------------+
   |  get the address of the user exit routine                       |
   +----------------------------------------------------------------*/
   udata.cuserxt = cuserxt;
   VDEFINE("NAME ", name, "USER ", 40, " ", udata);


   /*----------------------------------------------------------------+
   |  display the variable (via a panel) until user END request      |
   +----------------------------------------------------------------*/
   while (rc != 8)
      rc = DISPLAY("CPANEL5 ", DUMMY, DUMMY);

}

Copyright (c) 2000 SAS Institute Inc. All Rights Reserved.
Terms of Use & Legal Information | Privacy Statement