home *** CD-ROM | disk | FTP | other *** search
/ Amiga ISO Collection / AmigaUtilCD2.iso / Programming / Misc / OB3.2D2.DMS / in.adf / Module / Requests.mod < prev    next >
Encoding:
Text File  |  1994-08-05  |  4.2 KB  |  172 lines

  1. (*-------------------------------------------------------------------------*)
  2. (*                                                                         *)
  3. (*  Amiga Oberon Library Module: Requests             Date: 02-Nov-92      *)
  4. (*                                                                         *)
  5. (*   © 1991 by Fridtjof Siebert                                            *)
  6. (*                                                                         *)
  7. (*-------------------------------------------------------------------------*)
  8.  
  9. MODULE Requests;
  10.  
  11. IMPORT sys := SYSTEM,
  12.        str := Strings,
  13.        I*  := Intuition,
  14.        arg := Arguments,
  15.        ol  := OberonLib,
  16.               Exec,
  17.               Dos,
  18.        g   := Graphics;
  19.  
  20.  
  21.  
  22. PROCEDURE RequestWin*(head,msg,pos,neg: ARRAY OF CHAR; win: I.WindowPtr): BOOLEAN; (* $CopyArrays- *)
  23. (* erzeugt Retry/Cancel Request.
  24.  
  25.     Beispiel:
  26.      IF Request("MyProgram:", "What shall I do?",
  27.                 "Retry", "Abort",mywindow) THEN Retry
  28.                                            ELSE Abort END;
  29.  
  30.  
  31.   pos kann "" sein, dann wird das entsprechende Gadget weggelassen.
  32.  
  33. *)
  34.  
  35. VAR
  36.   c: CHAR;
  37.   body,text,ok,cl: I.IntuiText;
  38.   okadr,cladr: I.IntuiTextPtr;
  39.   width,w: INTEGER;
  40.   scrn: I.ScreenPtr;
  41.  
  42. BEGIN
  43.   body.frontPen := 0;
  44.   body.backPen  := 1;
  45.   body.drawMode := g.jam2;
  46.   body.leftEdge := 12;
  47.   body.topEdge  := 8;
  48.   body.iTextFont:= NIL;
  49.   body.nextText := NIL;
  50.   text := body; ok := body;
  51.   body.iText    := sys.ADR(head);
  52.   body.nextText := sys.ADR(text);
  53.   text.iText    := sys.ADR(msg); text.topEdge := 22;
  54.   ok.leftEdge:= 6;
  55.   ok.topEdge := 3; cl := ok;
  56.   ok.iText := sys.ADR(pos);
  57.   cl.iText := sys.ADR(neg);
  58.   okadr := sys.ADR(ok);
  59.   IF pos[0]=0X THEN okadr := NIL END;
  60.   IF I.int.libNode.version<36 THEN
  61.     width := SHORT(str.Length(head));
  62.     w     := SHORT(str.Length(msg ));
  63.     IF w>width THEN width := w END;
  64.     width := width*8+80;
  65.     IF width<320 THEN width := 320 END;
  66.   ELSE
  67.     IF win#NIL THEN scrn := win.wScreen;
  68.                ELSE scrn := I.LockPubScreen(NIL) END;
  69.     IF scrn#NIL THEN
  70.       text.topEdge := scrn.font.ySize+14;
  71.       IF win=NIL THEN I.UnlockPubScreen(NIL,scrn) END;
  72.     END;
  73.   END;
  74.   RETURN I.AutoRequest(win,sys.ADR(body),okadr,sys.ADR(cl),LONGSET{},LONGSET{},width,69);
  75. END RequestWin;
  76.  
  77.  
  78. PROCEDURE Request*(head,msg,pos,neg: ARRAY OF CHAR): BOOLEAN; (* $CopyArrays- *)
  79. BEGIN
  80.   RETURN RequestWin(head,msg,pos,neg,NIL);
  81. END Request;
  82.  
  83.  
  84. (*-------------------------------------------------------------------------*)
  85.  
  86.  
  87. PROCEDURE Assert*(cc: BOOLEAN; msg: ARRAY OF CHAR);  (* $CopyArrays- *)
  88. (* bricht Programm mit der Meldung msg ab, wen cc nicht erfüllt ist.
  89.    Beispiel:
  90.  
  91.     NEW(p); Assert(p#NIL,"Kein Speicher!");
  92. *)
  93.  
  94. VAR
  95.   myname: ARRAY 80 OF CHAR;
  96.  
  97. BEGIN
  98.   IF ~ cc THEN
  99.     IF ol.wbStarted THEN
  100.       arg.GetArg(0,myname);
  101.       IF str.Length(myname)<80 THEN str.AppendChar(myname,":") END;
  102.       IF Request(myname,msg,"","Cancel") THEN END;
  103.     ELSE
  104.       IF Dos.Write(Dos.Output(),"\n",1)=0 THEN END;
  105.       IF Dos.Write(Dos.Output(),msg,str.Length(msg))=0 THEN END;
  106.       IF Dos.Write(Dos.Output(),"\n",1)=0 THEN END;
  107.     END;
  108.     HALT(20);
  109.   END;
  110. END Assert;
  111.  
  112.  
  113. (*-------------------------------------------------------------------------*)
  114.  
  115.  
  116. PROCEDURE Fail*(msg: ARRAY OF CHAR);  (* $CopyArrays- *)
  117. (* bricht Programm mit der Meldung msg ab.
  118.    Beispiel:
  119.  
  120.     NEW(p); Assert(p#NIL,"Kein Speicher!");
  121. *)
  122.  
  123. BEGIN
  124.   Assert(FALSE,msg);
  125. END Fail;
  126.  
  127.  
  128. (*-------------------------------------------------------------------------*)
  129.  
  130.  
  131. PROCEDURE BreakPoint*(msg: ARRAY OF CHAR); (* $CopyArrays- *)
  132.  
  133. BEGIN
  134.   IF ~ Request("Oberon Breakpoint:",msg,"CONTINUE","HALT") THEN HALT(10) END;
  135. END BreakPoint;
  136.  
  137.  
  138. (*-------------------------------------------------------------------------*)
  139.  
  140.  
  141. PROCEDURE OOM;
  142. VAR
  143.   thisCommand : ARRAY 40 OF CHAR;
  144.  
  145. BEGIN
  146.   arg.GetArg(0,thisCommand);
  147.   (* $IF English *)
  148.     IF ~ Request(thisCommand,"Out of memory!",
  149.                              " Retry "," Cancel ") THEN HALT(20) END;
  150.   (* $ELSE *)
  151.     IF ~ Request(thisCommand,"Speichermangel",
  152.                              " Nochmal versuchen "," Abbruch ") THEN HALT(20) END;
  153.   (* $END *)
  154. END OOM;
  155.  
  156.  
  157. (*-------------------------------------------------------------------------*)
  158.  
  159.  
  160. BEGIN
  161.   ol.OutOfMemHandler := OOM;
  162. END Requests.
  163.  
  164.  
  165.  
  166.  
  167.  
  168.  
  169.  
  170.  
  171.  
  172.