<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://pickwiki.org/index.php?action=history&amp;feed=atom&amp;title=MercyMenu</id>
	<title>MercyMenu - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://pickwiki.org/index.php?action=history&amp;feed=atom&amp;title=MercyMenu"/>
	<link rel="alternate" type="text/html" href="https://pickwiki.org/index.php?title=MercyMenu&amp;action=history"/>
	<updated>2026-04-28T23:16:36Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.0</generator>
	<entry>
		<id>https://pickwiki.org/index.php?title=MercyMenu&amp;diff=2032&amp;oldid=prev</id>
		<title>Conversion script: link fix</title>
		<link rel="alternate" type="text/html" href="https://pickwiki.org/index.php?title=MercyMenu&amp;diff=2032&amp;oldid=prev"/>
		<updated>2015-02-26T23:48:55Z</updated>

		<summary type="html">&lt;p&gt;link fix&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;HomePage&amp;gt;&amp;gt;SourceCode&amp;gt;&amp;gt;ExternalSource&amp;gt;&amp;gt;[[C Programs]]&amp;gt;&amp;gt;&amp;lt;nowiki&amp;gt;MercyMenu&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/* [[MercyMenu]] program, written in &amp;#039;c&amp;#039; language                             */&lt;br /&gt;
/*   Reads in main.menu file for path, security access on VOC, help, etc  */&lt;br /&gt;
/*   Draws box around perimeter of screen, fills with menu options.       */&lt;br /&gt;
/*   Prompts for input, if there is more than one option, or does the one.*/&lt;br /&gt;
/*   Sets screen to raw() mode, resets to endwin().                       */&lt;br /&gt;
/*   IF num of options &amp;lt; [[MAX_LINES]], prints center column.                 */&lt;br /&gt;
/*   If [[MAX_LINES]] &amp;lt; #optns &amp;lt; 2*[[MAX_LINES]], prints 2 columns.               */&lt;br /&gt;
/*   If # optns &amp;gt; 2*[[MAX_LINES]], prints 2 columns single spaced.            */&lt;br /&gt;
/*   Capacity is 31 options. Options, q,r,s are alread used.              */&lt;br /&gt;
/*   Maximum capacity is [[MAX_LINES]] = 9 * 4 = 32 +3 = 35, will need dump &amp;#039;q&amp;#039;*/&lt;br /&gt;
/*   One copy works on all hosts, no variations needed.                   */&lt;br /&gt;
/*                                                                        */&lt;br /&gt;
/*      cc -lHcurses [[MercyMenu]].c -o [[MercyMenu]]      [10.20]                */&lt;br /&gt;
/*      cc -lcur_colr [[MercyMenu]].c -o [[MercyMenu]]     [11.00]                */&lt;br /&gt;
/*                                                                        */&lt;br /&gt;
/* Modifications:                                                         */&lt;br /&gt;
/* 10/21/97 rsi added multicolumn, single space, single option xeq        */&lt;br /&gt;
/* 10/23/97 rsi support for getstr instead of getch                       */&lt;br /&gt;
/* 01/02/98 rsi added Reflection window title reprogramming.              */&lt;br /&gt;
/* 06/07/01 rsi added menu options 025 thru 029.                          */&lt;br /&gt;
/*                                                                        */&lt;br /&gt;
#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
#include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
#include &amp;lt;/usr/include/sys/getaccess.h&amp;gt;&lt;br /&gt;
/*  #define _[[XOPEN_SOURCE_EXTENDED]]  */&lt;br /&gt;
#include &amp;lt;/usr/include/curses.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#define [[MAX_LINE_LEN]] 128&lt;br /&gt;
#define TITLE        &amp;quot;Mercy Health Care System&amp;quot;&lt;br /&gt;
#define [[MENU_FILE]]    &amp;quot;/usr/local/bin/main.menu&amp;quot;&lt;br /&gt;
#define SARS             &amp;quot;sar&amp;quot;&lt;br /&gt;
#define [[MAX_LINES]]    8&lt;br /&gt;
#define YSTART       2&lt;br /&gt;
#define YBOTTOM      21&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
typedef struct&lt;br /&gt;
{&lt;br /&gt;
    char key;                          /* Key character for command types.*/&lt;br /&gt;
    char szDesc[[[MAX_LINE_LEN]] + 1];     /* Description of command.         */&lt;br /&gt;
    char **szScript;                   /* Strings to make a shell script. */&lt;br /&gt;
    char szCommand[[[MAX_LINE_LEN]] + 1];  /* The Command.                    */&lt;br /&gt;
    char sz[[HelpFile]][[[MAX_LINE_LEN]] + 1]; /* Name of Help file for option.   */&lt;br /&gt;
    char szDirectory[[[MAX_LINE_LEN]] + 1] ;&lt;br /&gt;
} menu_ent;&lt;br /&gt;
&lt;br /&gt;
    menu_ent [[MasterMenu]][[[MAX_LINES]]*4] ;&lt;br /&gt;
&lt;br /&gt;
    int n[[NbrLines]] ;                    /* number of lines in the menu.    */&lt;br /&gt;
    int bSupervisor ;                  /* are we supervisor?              */&lt;br /&gt;
    WINDOW *stdscr ;&lt;br /&gt;
&lt;br /&gt;
[[ReadFile]]()&lt;br /&gt;
{&lt;br /&gt;
    /* read the data from our menu file */&lt;br /&gt;
&lt;br /&gt;
    FILE *fp ;&lt;br /&gt;
    int i, iLen, nPos, nMode;&lt;br /&gt;
    char *ptr ;&lt;br /&gt;
    char sz[[FileLine]][([[MAX_LINE_LEN]] * 3) + 4] ;&lt;br /&gt;
    char sz[[TempDir]][[[MAX_LINE_LEN]] + 1] ;&lt;br /&gt;
    char test[222] ;&lt;br /&gt;
&lt;br /&gt;
    iLen = ([[MAX_LINE_LEN]] * 3) + 4 ;&lt;br /&gt;
    nPos = 0 ;&lt;br /&gt;
&lt;br /&gt;
    if ((fp = fopen([[MENU_FILE]],&amp;quot;r&amp;quot;)) == NULL)&lt;br /&gt;
    {&lt;br /&gt;
       printf(&amp;quot;Error Opening the Menu File\n&amp;quot;) ;&lt;br /&gt;
       exit (0) ;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    n[[NbrLines]] = 0 ;&lt;br /&gt;
&lt;br /&gt;
    while(!feof(fp))&lt;br /&gt;
    {&lt;br /&gt;
&lt;br /&gt;
       fgets(sz[[FileLine]], iLen - 1, fp) ;&lt;br /&gt;
&lt;br /&gt;
       ptr = strtok(sz[[FileLine]], &amp;quot;|&amp;quot;) ;&lt;br /&gt;
       strcpy(sz[[TempDir]], ptr) ; /* account directory */&lt;br /&gt;
&lt;br /&gt;
       /* see if we have access */&lt;br /&gt;
       nMode = getaccess(sz[[TempDir]],[[UID_EUID]], [[NGROUPS_EGID_SUPP]], (int *) 0, (void*) 0, (void *) 0) ;&lt;br /&gt;
&lt;br /&gt;
       if ((nMode &amp;gt;= 0) &amp;amp;&amp;amp; (nMode &amp;amp; [[W_OK]]))&lt;br /&gt;
       {&lt;br /&gt;
          /* we have write access to this directory, add to menu */&lt;br /&gt;
          strcpy([[MasterMenu]][nPos].szDirectory, ptr) ; /* Directory */&lt;br /&gt;
&lt;br /&gt;
          ptr = strtok(NULL, &amp;quot;|&amp;quot;) ;&lt;br /&gt;
&lt;br /&gt;
          strcpy([[MasterMenu]][nPos].szCommand, ptr) ; /* command */&lt;br /&gt;
          ptr = strtok(NULL, &amp;quot;|&amp;quot;) ;&lt;br /&gt;
          strcpy([[MasterMenu]][nPos].szDesc, ptr) ;    /* description */&lt;br /&gt;
          ptr = strtok(NULL, &amp;quot;|&amp;quot;) ;&lt;br /&gt;
          strcpy([[MasterMenu]][nPos].sz[[HelpFile]], ptr) ; /* Help */&lt;br /&gt;
&lt;br /&gt;
          nPos++ ;&lt;br /&gt;
       }&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /* n[[NbrLines]] = nPos - 1 ; */&lt;br /&gt;
    n[[NbrLines]] = nPos ;&lt;br /&gt;
&lt;br /&gt;
    fclose(fp) ;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
debug(string)&lt;br /&gt;
char *string ;&lt;br /&gt;
{&lt;br /&gt;
    move(1,25) ;&lt;br /&gt;
    addstr(string) ;&lt;br /&gt;
    refresh() ;&lt;br /&gt;
    getch() ;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
[[DrawTitle]]()&lt;br /&gt;
{&lt;br /&gt;
    move(YSTART,25) ;&lt;br /&gt;
    addstr(TITLE) ;&lt;br /&gt;
    refresh() ;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
[[DrawPrompts]]()&lt;br /&gt;
{&lt;br /&gt;
    int l, i, j, nYpos, flg, flg2, strt, btm ;&lt;br /&gt;
    char szLine[[[MAX_LINE_LEN]] + 1] ;&lt;br /&gt;
&lt;br /&gt;
    nYpos = YSTART + 2 ;&lt;br /&gt;
    flg2= 2;&lt;br /&gt;
    flg = 0;&lt;br /&gt;
    strt = 25;&lt;br /&gt;
    btm = n[[NbrLines]];&lt;br /&gt;
    if (n[[NbrLines]] &amp;gt; [[MAX_LINES]])&lt;br /&gt;
    {&lt;br /&gt;
        flg = 1;&lt;br /&gt;
        strt = 4;&lt;br /&gt;
        btm = [[MAX_LINES]];&lt;br /&gt;
    }&lt;br /&gt;
    if (n[[NbrLines]] &amp;gt; 2*[[MAX_LINES]])&lt;br /&gt;
    {&lt;br /&gt;
        flg2= 1;&lt;br /&gt;
        strt = 4;&lt;br /&gt;
        btm = 2*[[MAX_LINES]];&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    for (i = 0 ; i &amp;lt; btm ; i++)&lt;br /&gt;
    {&lt;br /&gt;
       if ([[MasterMenu]][i].szDesc[0] != &amp;#039;\0&amp;#039;)&lt;br /&gt;
       {&lt;br /&gt;
           sprintf(szLine ,&amp;quot;%3d) %s\0&amp;quot;, i + 1 , [[MasterMenu]][i].szDesc) ;&lt;br /&gt;
           move(nYpos,strt) ;&lt;br /&gt;
           addstr(szLine) ;&lt;br /&gt;
           nYpos += flg2 ;&lt;br /&gt;
       }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (flg)&lt;br /&gt;
    {&lt;br /&gt;
       nYpos = YSTART + 2 ;&lt;br /&gt;
       for (j = 0 ; j &amp;lt; btm ; j++)&lt;br /&gt;
       {&lt;br /&gt;
           i = j + btm ;&lt;br /&gt;
           if ([[MasterMenu]][i].szDesc[0] != &amp;#039;\0&amp;#039;)&lt;br /&gt;
           {&lt;br /&gt;
               sprintf(szLine ,&amp;quot;%3d) %s\0&amp;quot;, i +1 , [[MasterMenu]][i].szDesc) ;&lt;br /&gt;
               move(nYpos,strt+40) ;&lt;br /&gt;
               addstr(szLine) ;&lt;br /&gt;
&lt;br /&gt;
               nYpos += flg2 ;&lt;br /&gt;
           }&lt;br /&gt;
       }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    refresh() ;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int [[BottomPrompt]]()&lt;br /&gt;
{&lt;br /&gt;
    char szPrompt[[[MAX_LINE_LEN]] + 1] ;&lt;br /&gt;
    int iLen, ch ;&lt;br /&gt;
    char chx[4] ;&lt;br /&gt;
&lt;br /&gt;
/*    sprintf(szPrompt, &amp;quot;Enter Choice or (q)uit: \0&amp;quot;) ; */&lt;br /&gt;
    sprintf(szPrompt, &amp;quot;Enter Choice or (q)uit:     Choice or (q)uit   \0&amp;quot;) ;&lt;br /&gt;
    iLen = strlen(szPrompt) ;&lt;br /&gt;
&lt;br /&gt;
    move(YBOTTOM, 2) ;&lt;br /&gt;
/*        clrtoeol() ; */&lt;br /&gt;
    addstr(szPrompt) ;&lt;br /&gt;
&lt;br /&gt;
    refresh() ;&lt;br /&gt;
    getstr(chx) ;&lt;br /&gt;
    if ( chx[0] &amp;lt; &amp;#039;q&amp;#039; ) ch = atoi(chx) -1 ;&lt;br /&gt;
    else ch = chx[0] ;&lt;br /&gt;
&lt;br /&gt;
    return (ch) ;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Doit()&lt;br /&gt;
{&lt;br /&gt;
/*  Only one choice, so just do it, and skip the menu.         */&lt;br /&gt;
    char szCommand[128] ;&lt;br /&gt;
    sprintf(szCommand,&amp;quot;%s\0&amp;quot;, [[MasterMenu]][0].szCommand) ;&lt;br /&gt;
    if (szCommand[0] != NULL)&lt;br /&gt;
    {&lt;br /&gt;
      execl(&amp;quot;/bin/ksh&amp;quot;,&amp;quot;&amp;quot;, szCommand);&lt;br /&gt;
      exit(1) ;&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
      exit(1) ;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
[[StartUp]]()&lt;br /&gt;
{&lt;br /&gt;
   raw() ;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
main()&lt;br /&gt;
{&lt;br /&gt;
    int adj, y, x1, x2 ;&lt;br /&gt;
    int bDone = FALSE ;&lt;br /&gt;
    char chx[4] ;&lt;br /&gt;
    int ch ;&lt;br /&gt;
    int chi ;&lt;br /&gt;
    int lnLabel ;&lt;br /&gt;
    char *ptr ;&lt;br /&gt;
    char szCommand[128] ;&lt;br /&gt;
    char szLabel[128] ;&lt;br /&gt;
    char szHost[8] ;&lt;br /&gt;
    char izt[8] ;&lt;br /&gt;
    char sz[[TermType]][64] ;&lt;br /&gt;
    pid_t pPid ;&lt;br /&gt;
&lt;br /&gt;
    bSupervisor = FALSE ;&lt;br /&gt;
&lt;br /&gt;
    /* check our terminal */&lt;br /&gt;
    ptr = sz[[TermType]] ;&lt;br /&gt;
    ptr = getenv(&amp;quot;TERM&amp;quot;) ;&lt;br /&gt;
    if (!strcmp(ptr,&amp;quot;unknown&amp;quot;))&lt;br /&gt;
    {&lt;br /&gt;
       printf(&amp;quot;setting term type\n&amp;quot;) ;&lt;br /&gt;
       putenv(&amp;quot;TERM=vt100&amp;quot;) ;&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
       printf(&amp;quot;term type set as %s\n&amp;quot;, ptr) ;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /* Read main.menu into memory.         */&lt;br /&gt;
    [[ReadFile]]() ;&lt;br /&gt;
    /* If only one option, then just doit. */&lt;br /&gt;
    if ( n[[NbrLines]] == 1 ) Doit() ;&lt;br /&gt;
&lt;br /&gt;
    /* initialize our screen */&lt;br /&gt;
    stdscr = initscr() ;&lt;br /&gt;
&lt;br /&gt;
    [[StartUp]]() ;&lt;br /&gt;
    /* notimeout(stdscr,0);&lt;br /&gt;
    timeout(30000); */&lt;br /&gt;
&lt;br /&gt;
    /* draw a box */&lt;br /&gt;
    standout() ;&lt;br /&gt;
    box(stdscr,&amp;#039;*&amp;#039;,&amp;#039;-&amp;#039;);&lt;br /&gt;
    standend() ;&lt;br /&gt;
&lt;br /&gt;
    [[DrawTitle]]() ;&lt;br /&gt;
&lt;br /&gt;
    /* put up the menu */&lt;br /&gt;
    [[DrawPrompts]]() ;&lt;br /&gt;
&lt;br /&gt;
    szCommand[0] = &amp;#039;\n&amp;#039; ;&lt;br /&gt;
    szLabel[0] = &amp;#039;\n&amp;#039; ;&lt;br /&gt;
&lt;br /&gt;
    while(!bDone)&lt;br /&gt;
    {&lt;br /&gt;
       ch = [[BottomPrompt]]() ;&lt;br /&gt;
          switch(ch)&lt;br /&gt;
       {&lt;br /&gt;
          case 33:&lt;br /&gt;
          case 32:&lt;br /&gt;
          case 31:&lt;br /&gt;
          case 30:&lt;br /&gt;
          case 29:&lt;br /&gt;
          case 28:&lt;br /&gt;
          case 27:&lt;br /&gt;
          case 26:&lt;br /&gt;
          case 25:&lt;br /&gt;
          case 24:&lt;br /&gt;
          case 23:&lt;br /&gt;
          case 22:&lt;br /&gt;
          case 21:&lt;br /&gt;
          case 20:&lt;br /&gt;
          case 19:&lt;br /&gt;
          case 18:&lt;br /&gt;
          case 17:&lt;br /&gt;
          case 16:&lt;br /&gt;
          case 15:&lt;br /&gt;
          case 14:&lt;br /&gt;
          case 13:&lt;br /&gt;
          case 12:&lt;br /&gt;
          case 11:&lt;br /&gt;
          case 10:&lt;br /&gt;
          case 9:&lt;br /&gt;
          case 8:&lt;br /&gt;
          case 7:&lt;br /&gt;
          case 6:&lt;br /&gt;
          case 5:&lt;br /&gt;
          case 4:&lt;br /&gt;
          case 3:&lt;br /&gt;
          case 2:&lt;br /&gt;
          case 1:&lt;br /&gt;
          case 0:&lt;br /&gt;
             bDone = TRUE ;&lt;br /&gt;
             sprintf(szCommand,&amp;quot;%s\0&amp;quot;, [[MasterMenu]][(int) (ch)].szCommand) ;&lt;br /&gt;
             sprintf(szLabel,&amp;quot;%s\0&amp;quot;, [[MasterMenu]][(int) (ch)].szDesc) ;&lt;br /&gt;
             if (ptr = strstr(szCommand,SARS) != NULL)&lt;br /&gt;
             {&lt;br /&gt;
                 /* special case for sars */&lt;br /&gt;
                 system(&amp;quot;/usr/local/bin/runsars&amp;quot;) ;&lt;br /&gt;
                 exit(1) ;&lt;br /&gt;
             }&lt;br /&gt;
             break ;&lt;br /&gt;
          case &amp;#039;s&amp;#039;:&lt;br /&gt;
             bDone = TRUE ;&lt;br /&gt;
             bSupervisor = TRUE ;&lt;br /&gt;
             break ;&lt;br /&gt;
          case &amp;#039;q&amp;#039;:&lt;br /&gt;
             bDone = TRUE ;&lt;br /&gt;
             break ;&lt;br /&gt;
          default:&lt;br /&gt;
             beep() ;&lt;br /&gt;
             break ;&lt;br /&gt;
       }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (szCommand[0] != NULL &amp;amp;&amp;amp; szCommand[0] != 0x00a)&lt;br /&gt;
    {&lt;br /&gt;
      printf(&amp;quot; this is a label: %s \n&amp;quot;,szLabel);&lt;br /&gt;
      if (strlen(szLabel) &amp;gt; 5)&lt;br /&gt;
      {&lt;br /&gt;
      gethostname(szHost,6);&lt;br /&gt;
      /* Change hostname to upper case. *\&lt;br /&gt;
      szHost[0] = toupper(szHost[0]);&lt;br /&gt;
      szHost[1] = toupper(szHost[1]);&lt;br /&gt;
      szHost[2] = toupper(szHost[2]);&lt;br /&gt;
      szHost[3] = toupper(szHost[3]);&lt;br /&gt;
      szHost[4] = toupper(szHost[4]);&lt;br /&gt;
      /* Send command upstream to Reflections telnet session,   */&lt;br /&gt;
      /*   sets the title bar string to selected value.         */&lt;br /&gt;
            printf(&amp;quot;\^[P2000;;{Sub Main\n&amp;quot;);&lt;br /&gt;
            printf(&amp;quot;   With Application\n&amp;quot;);&lt;br /&gt;
            printf(&amp;quot;           .Caption = \&amp;quot; %s %s\&amp;quot;\n&amp;quot;, szHost, szLabel);&lt;br /&gt;
            printf(&amp;quot;   End With\n&amp;quot;);&lt;br /&gt;
            printf(&amp;quot;End Sub \^[\\\n&amp;quot; ) ;&lt;br /&gt;
      }&lt;br /&gt;
      endwin();        /* Resets raw mode back to origional settings.  */&lt;br /&gt;
      /* execl(&amp;quot;/bin/sh&amp;quot;,&amp;quot;-c&amp;quot;,szCommand) ;  */&lt;br /&gt;
      execl(&amp;quot;/bin/ksh&amp;quot;,&amp;quot;&amp;quot;, szCommand);&lt;br /&gt;
      exit(1) ;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
       endwin();        /* Resets raw mode back to origional settings.  */&lt;br /&gt;
       if (bSupervisor)&lt;br /&gt;
       {&lt;br /&gt;
          /*&lt;br /&gt;
          exit(1) ;&lt;br /&gt;
          */&lt;br /&gt;
       }&lt;br /&gt;
       else&lt;br /&gt;
       {&lt;br /&gt;
          /* kill our process */&lt;br /&gt;
          /*&lt;br /&gt;
          pPid = getppid() ;&lt;br /&gt;
             kill(pPid,4) ;&lt;br /&gt;
          */&lt;br /&gt;
          exit(1) ;&lt;br /&gt;
       }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Conversion script</name></author>
	</entry>
</feed>