home *** CD-ROM | disk | FTP | other *** search
/ GEMini Atari / GEMini_Atari_CD-ROM_Walnut_Creek_December_1993.iso / files / program / m2posx02 / spawn.mpp < prev    next >
Encoding:
Text File  |  1993-10-23  |  2.3 KB  |  105 lines

  1. MODULE Spawn;
  2.  
  3. (* Test und Anwendungsbeispiel fuer Modul 'proc'
  4.  *
  5.  * Das Programm 'SHOWCMD.TTP' muss sich in einem Verzeichnis befinden,
  6.  * das in der Environmentvariablen PATH steht.
  7.  *
  8.  * hk, 05-Dez-92
  9.  *)
  10.  
  11. VAL_INTRINSIC
  12. CAST_IMPORT
  13.  
  14. FROM SYSTEM IMPORT
  15. (* PROC *) ADR;
  16.  
  17. FROM types IMPORT
  18. (* CONST*) NULL,
  19. (* TYPE *) WORDSET, SIGNEDWORD, UNSIGNEDWORD;
  20.  
  21. FROM pSTRING IMPORT
  22. (* TYPE *) StrPtr, StrArray;
  23.  
  24. FROM err IMPORT
  25. (* VAR  *) errno;
  26.  
  27. FROM proc IMPORT
  28. (* TYPE *) WaitVal, SpawnMode,
  29. (* PROC *) getpid, getppid, spawnvp, WEXITSTATUS, WIFSIGNALED, WTERMSIG;
  30.  
  31. FROM lib IMPORT
  32. (* PROC *) strerror;
  33.  
  34. FROM InOut IMPORT
  35. (* PROC *) Read, Write, WriteInt, WriteCard, WriteString, WriteLn;
  36.  
  37. (*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
  38.  
  39. TYPE
  40.   String = ARRAY [0..10] OF CHAR;
  41.  
  42. VAR
  43.   ret    : INTEGER;
  44.   pid    : INTEGER;
  45.   ch     : CHAR;
  46.   state  : WaitVal;
  47.   errstr : ARRAY [0..40] OF CHAR;
  48.  
  49.   prg    : String;
  50.   arg1   : String;
  51.   arg2   : String;
  52.   arg3   : String;
  53.   arg4   : String;
  54.   arg5   : String;
  55.   argv   : ARRAY [0..6] OF StrPtr;
  56.  
  57.  
  58. BEGIN
  59.  WriteString("PARENT(pid = "); WriteInt(INT(getpid()), 0);
  60.  WriteString(")"); WriteLn;
  61.  
  62.  prg  := "showcmd";
  63.  arg1 := "eins";
  64.  arg2 := "ZWEI";
  65.  arg3 := "drei";
  66.  arg4 := "VIER";
  67.  arg5 := "fünf";
  68.  
  69.  argv[0] := CAST(StrPtr,ADR(prg));
  70.  argv[1] := CAST(StrPtr,ADR(arg1));
  71.  argv[2] := CAST(StrPtr,ADR(arg2));
  72.  argv[3] := CAST(StrPtr,ADR(arg3));
  73.  argv[4] := CAST(StrPtr,ADR(arg4));
  74.  argv[5] := CAST(StrPtr,ADR(arg5));
  75.  argv[6] := NULL;
  76.  
  77.  errno := 0;
  78.  ret   := spawnvp(pWAIT, prg, CAST(StrArray,ADR(argv)));
  79.  
  80.  WriteLn;
  81.  WriteString("PARENT(pid = "); WriteInt(INT(getpid()), 0);
  82.  IF errno < 0 THEN
  83.    WriteString("): error: ");
  84.    strerror(errno, errstr);
  85.    WriteString(errstr);
  86.    WriteLn;
  87.  ELSE
  88.    WriteString("): child-returncode = "); WriteInt(ret, 0); WriteLn;
  89.  
  90.    state := CAST(WaitVal,VAL(UNSIGNEDWORD,ret));
  91.    IF WIFSIGNALED(state) THEN
  92.      WriteString("Terminated by Signal: "); WriteCard(WTERMSIG(state), 0);
  93.    ELSE
  94.      (* "WIFSTOPPED()" braucht nicht abgefragt zu werden, da "wait()"
  95.       * keine gestopten Unterprozesse beruecksichtigt.
  96.       *)
  97.      WriteString("Child exit status: "); WriteInt(WEXITSTATUS(state), 0);
  98.    END;
  99.  END;
  100.  WriteLn;
  101.  Read(ch);
  102. END Spawn.
  103.  
  104.  
  105.