UNIT Req;

INTERFACE

CONST
  Numpairs     = 9;
  DSize        = 130;
  FChars       = 30;
  Wildlength   = 30;
  GLNODEFAULTB = 1;
  SHOWINFO     = 1;
  EXTSELECT    = 2;
  CACHING      = 4;
  GETFONTS     = 8;
  INFOGADGET   = 16;
  HIDEWILDS    = 32;
  ABSOLUTEXY   = 64;
  CACHEPURGE   = 128;
  NOHALFECACHE = 256;
  NOSORT       = 512;
  NODRAG       = 1024;
  SAVING       = 2048;
  LOADING      = 4096;
  DIRONLY      = 8192;

TYPE
  STR80 = STRING[800];

  p_DateStamp = ^DateStamp;
  DateStamp =
  RECORD
    ds_Days      : LONG;
    ds_Minute    : LONG;
    ds_Tick      : LONG;
  END;

  TRStructure =
  RECORD
    Text         : STR;
    Controls     : PTR;
    Window       : PTR;
    MiddleText   : STR;
    PositivText  : STR;
    NegativText  : STR;
    Title        : STR;
    KeyMask      : WORD;
    textcolor    : WORD;
    detailcolor  : WORD;
    blockcolor   : WORD;
    versionnumber: WORD;
    rfu1         : LONG;
    rfu2         : LONG;
  END;

  GetLongStruct =
  RECORD
    titlebar     : STR;
    defaultval   : LONG;
    minlimit     : LONG;
    maxlimit     : LONG;
    result       : LONG;
    window       : PTR;
    versionnumber: WORD
    flags        : LONG;
    rfu2         : LONG;
  END;

  p_ESStructure = ^ESStructure;
  ESStructure =
  RECORD
    ESStructure  : p_ESStructure;
    NameLength   : WORD;
    Pad          : WORD;
    Node         : PTR;
    thefilename  : STRING[31];
  END;

  p_FileRequesterStr = ^FileRequesterStr;
  FileRequesterStr =
  RECORD
    VersionNumber    : WORD;
    Title            : STR;
    DirName          : STR;
    FileName         : STR;
    PathName         : STR;
    Window           : PTR;
    MaxExtSelect     : WORD;
    numlines         : WORD;
    numcolumns       : WORD;
    devcolumns       : WORD;
    Flags            : LONG;
    dirnamescolor    : WORD;
    filenamescolor   : WORD;
    devicenamescolor : WORD;
    fontnamescolor   : WORD;
    fontsizecolor    : WORD;
    detailcolor      : WORD;
    blockcolor       : WORD;
    gagdettextcolor  : WORD;
    textmessagecolor : WORD;
    stringnamecolor  : WORD;
    stringgagdetcolor: WORD;
    boxbordercolor   : WORD;
    gadgetboxcolor   : WORD;
    RFU_Stuff        : STRING[36];
    DateStamp        : DateStamp;
    WindowLeftEdge   : WORD;
    WindowTopEdge    : WORD;
    FontYSize        : WORD;
    FontStyle        : WORD;
    ExtendedSelect   : p_ESStructure;
    Hide             : STRING[32];
    Show             : STRING[32];
    FileBufferPos    : WORD;
    FileDispPos      : WORD;
    DirBufferPos     : WORD;
    DirDispPos       : WORD;
    HideBufferPos    : WORD;
    HideDispPos      : WORD;
    ShowBufferPos    : WORD;
    ShowDispPos      : WORD;
    Memory           : PTR;       {PRIVAT-AREA STARTS HERE}
    Memory2          : PTR;
    Lock             : PTR;
    PrivatDirBuffer  : STRING[132];
    FileInfoBlock    : PTR;
    NumEntries       : WORD;
    NumHiddenEntries : WORD;
    filestartnumber  : WORD;
    devicestartnumber: WORD;
  END;

VAR ReqBase: PTR;

LIBRARY ReqBase:

-30 : PROCEDURE Centre(a0: PTR; d0,d1: WORD);
-84 : FUNCTION  FileRequest(a0: PTR): LONG;
-90 : FUNCTION  ColorRequester(d0: LONG): LONG;
-102: PROCEDURE MakeButton(a0: PTR; a1,a2: PTR; d0,d1,d2: LONG);
-114: PROCEDURE Purgefiles(a0: PTR);
-126: PROCEDURE MakeGadget(a0: PTR; a1,a2: STR; d0,d1: LONG);
-132: PROCEDURE MakeString(a0: PTR; a1,a2: STR; d0,d1,d2,d3: LONG);
-138: PROCEDURE MakeProp(a0: PTR; d0,d1,d2: LONG);
-144: PROCEDURE LinkGadget(a0: PTR; a1: STR; a3: PTR; d0,d1: LONG);
-150: PROCEDURE LinkStringGadget(a0: PTR; a3: PTR; d0,d1,d2,d3,d4: LONG);
-156: PROCEDURE LinkPropGadget(a0: PTR; a3: PTR; d0,d1,d2,d3,d4: LONG);
-162: FUNCTION  GetString(a0,a1: STR; a2: PTR; d0,d1: LONG): BOOLEAN;
-174: FUNCTION  TextRequest(a0: PTR): LONG;
-180: FUNCTION  GetLong(a0: PTR): BOOLEAN;

END;

PROCEDURE SimpleRequest(a0: STR80; a1: STRING);
FUNCTION  DoubleRequest(a0: STR80; a1: STRING): BOOLEAN;
PROCEDURE MyRequest(VAR VNaim: STRING; tin: STRING);;
PROCEDURE VaileRequest(VAR VNaim: STRING; tin: STRING);;
PROCEDURE GetNumber(title: STR; min,max: BYTE; VAR Result1: BYTE);
PROCEDURE CloseDown;

IMPLEMENTATION

PROCEDURE SimpleRequest;

VAR textRPtr: ^TRStructure;
    Ans     : BYTE;
    negText : STRING[7];

BEGIN
   negText:='Resume';
   NEW(textRPtr);
   textRPTR^:=TRStructure(^a0,NIL,NIL,NIL,NIL,^negText,^a1,15,1,0,0,0,0,0);
   Ans:=TextRequest(textRPtr);
   DISPOSE(textRPtr);
END;

FUNCTION DoubleRequest;

VAR textRPtr         : ^TRStructure;
    Ans              : BYTE;
    negText, posText : STRING[7];

BEGIN
   negText:='Oh no!';
   posText:='Sure!';
   NEW(textRPtr);
   textRPTR^:=TRStructure(^a0,NIL,NIL,NIL,^posText,^negText,^a1,15,1,0,0,0,0,0);
   Ans:=TextRequest(textRPtr);
   DISPOSE(textRPtr);
   IF Ans=1 THEN DoubleRequest:=TRUE
            ELSE DoubleRequest:=FALSE;
END;

PROCEDURE MyRequest;

VAR DirFi  : STRING[DSize];
    PahtN  : STRING[DSize+FChars+2];
    Sze    : STRING[10];
    ReqPtr : ^FileRequesterStr;

BEGIN
  NEW(ReqPtr);
  DirFi:='FONTS:';
  ReqPtr^:=FileRequesterStr(
     0, ^tin, ^DirFi, ^VNaim, ^PahtN, NIL, 0, 15, 25, 10, GETFONTS+LOADING,
     3, 1, 3, 3, 1, 2, 1, 1, 1, 1, 1, 1, 1, CHR(0), datestamp(0,0,0),
     0, 0, 0, 0, NIL, "", "", 0, 0, 0, 0, 0, 0, 0, 0, NIL, NIL, NIL, "",
     NIL, 0, 0, 0, 0);
  IF FileRequest(ReqPtr)<>0 THEN
  BEGIN
    Sze:=RealStr(ReqPtr^.FontYSize,0);
    DELETE(Sze,1,1);
    DELETE(PahtN,LENGTH(PahtN)-4,5);
    Vnaim:=PahtN+"/"+Sze;
  END;
  DISPOSE(ReqPtr);
END;

PROCEDURE VaileRequest;

VAR DirFi  : STRING[DSize];
    PahtN  : STRING[DSize+FChars+2];
    Sze    : STRING[10];
    ReqPtr : ^FileRequesterStr;

BEGIN
  NEW(ReqPtr);
  DirFi:='RAM:';
  ReqPtr^:=FileRequesterStr(
     0, ^tin, ^DirFi, ^VNaim, ^PahtN, NIL, 0, 15, 25, 10, LOADING,
     3, 1, 3, 3, 1, 2, 1, 1, 1, 1, 1, 1, 1, CHR(0), datestamp(0,0,0),
     0, 0, 0, 0, NIL, "", "", 0, 0, 0, 0, 0, 0, 0, 0, NIL, NIL, NIL, "",
     NIL, 0, 0, 0, 0);
  IF FileRequest(ReqPtr)<>0 THEN VNaim:=PahtN
                            ELSE VNaim:='';
  DISPOSE(ReqPtr);
END;

PROCEDURE GetNumber;

VAR Zahl: ^GetLongStruct;

BEGIN
  NEW(Zahl);
  Zahl^:=GetLongStruct(title,Result1,min,max,0,NIL,0,0,0);
  IF GetLong(Zahl) THEN Result1:=Zahl^.Result;
  DISPOSE(Zahl);
END;

PROCEDURE CloseDown;

BEGIN
  CloseLib(ReqBase);
END;

BEGIN
  OpenLib(ReqBase,'req.library',0);
  ADDEXITSERVER(CloseDown);
  IF ReqBase=NIL THEN
  BEGIN
    IF FromWB THEN
    BEGIN
      ASSIGN(INPUT, 'CON:50/100/540/60/Sorry :');
      RESET(INPUT);
      OUTPUT:=INPUT;
      WRITELN("Unable to open req.library!!!!");
      DELAY(100);
    END
    ELSE
      WRITELN("Unable to open req.library!!!!");
    HALT(10);
  END
END.
