/***************************************************************************
 * Program       : PMOD_COM.C
 * Funktion      : Kommando an das printermodul pmod senden
 * Version       : 0.1
 * Sprache       : Aztec C                 Version : 5.0b
 * Compiler      : cc -wn pmod_com
 * Assembler     : -
 * Linker        : ln pmod_com.o -lc
 * Aufruf        : PMOD_COM KOMMANDO
 * Autor         : V. Brauckhoff
 * Referenz      : -
 * Kommentar     : Programm läßt sich nur vom CLI starten
 *--------------------------------------------------------------------------
 * Letzte Änderung : 19.10.91
 *
 * Kickstart : 1.3  Version 34.5          Workbench : Version 34.20
 * 
 * © 1991 by V. Brauckhoff SENECA soft.           All rights reserved
 *--------------------------------------------------------------------------
 * Funktionen    : pmod_comm
 *               : open_libs
 *               : close_libs
 *               : erklaerung
 *               : main
***************************************************************************/

#include <exec/types.h>
#include <exec/memory.h>
#include <rexx/storage.h>
#include <functions.h>
#include "pmod.h"

LONG pmod_comm();
int main();
static BOOL open_libs();
static void close_libs(), erklaerung();

#define KICK_VERSION_1_3 34L

struct IntuitionBase    *IntuitionBase = 0L; /* globale Zeiger auf die Lib-Base */
struct GfxBase          *GfxBase = 0L;

static struct MsgPort *prtport, *mrpp;
static struct RexxMsg *testmsg;

/***************************************************************************
 * Funktion      : pmod_comm
 * Aufruf        : pmod_comm(kommando);
 * Parameter     : kommando >> Befehl der vom Printermodul ausgeführt werden
 *                             soll. 
 * Rückgabewert  : Rückgabewert vom printermodul
 * Kommentar     : Der Rückgabewert ist in 'PMOD.H' definiert
***************************************************************************/
LONG pmod_comm(char *pmod_kommando)
	{
	LONG nResult = PMOD_COM_FAIL;

	mrpp = prtport = testmsg = 0L;

	if(mrpp = CreatePort(0L,0L))
		{
		Forbid();
		if(prtport = FindPort(PMOD_NAME))
			{
			if(testmsg = (struct RexxMsg *)AllocMem(sizeof(struct RexxMsg), MEMF_CLEAR | MEMF_PUBLIC))
				{

				testmsg->rm_Node.mn_ReplyPort 	= mrpp;
				testmsg->rm_Node.mn_Length 		= sizeof(struct RexxMsg);
				testmsg->rm_Node.mn_Node.ln_Name = "rs";
				testmsg->rm_Args[0]					= pmod_kommando;
				PutMsg(prtport, testmsg);

				WaitPort(mrpp);
				testmsg = GetMsg(mrpp);
				nResult = testmsg->rm_Result1;
				FreeMem(testmsg, sizeof(struct RexxMsg));

				}
			else
				{

				FreeMem(testmsg, sizeof(struct RexxMsg));

				}
			}
		Permit();
		DeletePort(mrpp);
		}

	return(nResult);
	}

/***************************************************************************
 * Funktion      : open_libs
 * Aufruf        : open_libs();
 * Parameter     : -
 * Rückgabewert  : TRUE oder FALSE
 * Kommentar     : benötigte liraries öffnen
***************************************************************************/
static BOOL open_libs(void)
	{
	BOOL lRet = TRUE;
	
	if((IntuitionBase = (struct IntuitionBase*) OpenLibrary("intuition.library", KICK_VERSION_1_3)) == 0L)
	   lRet = FALSE;
	   
	if((GfxBase       = (struct GfxBase*) OpenLibrary("graphics.library", KICK_VERSION_1_3)) == 0L)
	   lRet = FALSE;
	   
	return(lRet);   
	}
	
/***************************************************************************
 * Funktion      : close_libs
 * Aufruf        : close_libs()
 * Parameter     : -
 * Rückgabewert  : -
 * Kommentar     : offene libraries schließen
***************************************************************************/
static void close_libs(void)
	{
	if(IntuitionBase)
		CloseLibrary(IntuitionBase);
	if(GfxBase)	
   	CloseLibrary(GfxBase);	
	}	
	
static void erklaerung(void)	
   {
   printf("\n\nAufruf : PMOD_COM KOMMANDO\n");
   printf("KOMMANDO --> Befehl der vom Printermodul ausgeführt werden soll.\n");               
   printf("Beispiel : 'PMOD_COM KILL' sendet Schließbefehl an pMod\n\n");
   }
	
/***************************************************************************
 * Funktion      : main.c
 * Aufruf        : -
 * Parameter     : -
 * Rückgabewert  : -
 * Kommentar     : -
***************************************************************************/
main(int argc, char *argv[])
	{
   LONG  nret;
   
	if(argc == 2)
      {
      if(open_libs())
         {
         nret = pmod_comm(argv[1]);
   
         switch(nret)
            {
            case PMOD_COM_OK   : printf("Befehl %s erfolgreich ausgeführt!\n", argv[1]);
                                 break;
            case PMOD_COM_FAIL : printf("Befehl %s konnte nicht ausgeführt werden!\n", argv[1]);
                                 break;
            case PMOD_COM_WAIT : printf("Befehl %s konnte nicht ausgeführt werden, pMod arbeitet anderweitig!\n", argv[1]);
                                 break;
            otherwise          : printf("unbekannter Rückganbewert !!!\n");
                                 break;
            }
         close_libs();   
         }
      }
      else   
         erklaerung();
      
   exit(0);
   }


