home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / oberon / parms.mod < prev    next >
Text File  |  1991-02-24  |  2KB  |  60 lines

  1. MODULE Parms;   (* ERV, 1989/91 *)
  2.   IMPORT SYS:=SYSTEM;
  3.  
  4. TYPE ParmString * = ARRAY 128 OF CHAR;
  5.      ParmStrPtr = POINTER TO ParmString;
  6.      ParmPtr = POINTER TO ParmRec ;
  7.      ParmRec = RECORD
  8.                 next : ParmPtr;
  9.                 parmp : ParmStrPtr
  10.                END;
  11.  
  12. VAR ParmCnt : INTEGER;
  13.     ParmHead : ParmPtr;
  14.  
  15. PROCEDURE Init;
  16. VAR fn:INTEGER;  i,j:INTEGER;
  17.     cr:RECORD offset, segment : INTEGER END;
  18.     PPC : ParmStrPtr;
  19.     psp:ParmStrPtr;
  20.     p,p0:ParmPtr;
  21. BEGIN  PPC := NIL;  ParmHead := NIL;  ParmCnt := 0;
  22.   fn := 0;
  23.   SYS.CALL(fn, cr.segment);
  24.   cr.offset := 80H ;
  25.   PPC := SYS.VAL(ParmStrPtr, cr);
  26.   i := ORD(PPC[0]);  (* length of parms following*)
  27.   j := 1 ;      (*place to start looking for them*)
  28.   LOOP
  29.     WHILE (i > 0) & (PPC[j] <= " ") DO INC(j); DEC(i) END;
  30.     IF i <= 0 THEN EXIT END;
  31.     INC(ParmCnt);
  32.     NEW(p);
  33.     IF ParmHead = NIL THEN ParmHead := p
  34.     ELSE p0.next := p
  35.     END;
  36.     p0 := p;  p.next := NIL;
  37.     cr.offset := 80H + j ;
  38.     p.parmp := SYS.VAL(ParmStrPtr, cr);
  39.     WHILE (i > 0) & (PPC[j] > " ") DO INC(j); DEC(i) END;
  40.     PPC[j] := 00X (*terminate this string*); INC(j);  DEC(i)
  41.   END
  42. END Init;
  43.  
  44. PROCEDURE ParmCount * (VAR parmcnt:INTEGER);
  45. BEGIN parmcnt := ParmCnt
  46. END ParmCount;
  47.  
  48. PROCEDURE Parm * (n:INTEGER; VAR parm:ParmString);
  49. VAR p:ParmPtr;
  50. BEGIN parm[0] := 0X;
  51.   IF (0 < n) & (n <= ParmCnt) THEN
  52.     p := ParmHead;  DEC(n);
  53.     WHILE n > 0 DO DEC(n); p := p.next END;
  54.     parm := p.parmp^
  55.   END
  56. END Parm;
  57.  
  58. BEGIN Init
  59. END Parms.
  60.