home *** CD-ROM | disk | FTP | other *** search
/ Programmer 7500 / MAX_PROGRAMMERS.iso / PASCAL / FORUM25C.ZIP / FRMSTF.PAS < prev    next >
Encoding:
Pascal/Delphi Source File  |  1989-02-04  |  5.3 KB  |  207 lines

  1. {=============================================================================}
  2.  
  3. TYPE CharSetType = Set Of Char;
  4.  
  5. Procedure BuildCharSet(VAR CharSet : CharSetType; Choices : String);
  6. VAR Index   : INTEGER;
  7.     NeedSys : BOOLEAN;
  8. Begin
  9.   CharSet := [];
  10.   Index := 1;
  11.   While Index <= Length(Choices) DO
  12.     Begin
  13.       NeedSys:=false;
  14.       If Index < length(choices) THEN
  15.         If choices[Index+1] = '@' then needsys := TRUE;
  16.       If Needsys AND (Not ISsysop) THEN
  17.             NeedSys := FALSE
  18.       Else
  19.         Begin
  20.           CharSet := CharSet + [UpCase(Choices[Index])];
  21.           Inc(Index);
  22.           If needsys THEN Inc(Index);
  23.         End
  24.     End;
  25.    CharSet := CharSet + ['>','?'];
  26. End;
  27.  
  28. {=============================================================================}
  29.  
  30. Function Response(ChoiceList : String) : CHAR;
  31. VAR ChoiceSet : CharSetType;
  32.     UsrKey    : CHAR;
  33. Begin
  34.   InGetStr:=true;
  35.   BuildCharSet(ChoiceSet,ChoiceList);
  36.   LineCount := 1;
  37.   NoChain := TRUE;
  38. {  Ch;   }
  39.   REPEAT
  40.      ClearBreak;
  41.      Nobreak := TRUE;
  42.      UsrKey := GetInputChar;
  43.   If UsrKey = #13 THEN UsrKey := '_';
  44.   UNTIL (UpCase(UsrKey) IN ChoiceSet) OR (HungUpon);
  45.   UsrKey := UpCase(UsrKey);
  46.   If Not HungUpon THEN Writeln(UsrKey);
  47.   Input := UsrKey;
  48.   Response := UsrKey;
  49.   InGetStr := FALSE;
  50. End;
  51.  
  52. {=============================================================================}
  53.  
  54. Procedure Center(CenterString : String; ScreenWidth : BYTE);
  55. Begin
  56.   Tab('',Trunc((Trunc(ScreenWidth/2))-(Length(CenterString)/2)));
  57.   Writeln(CenterString);
  58. End;
  59.  
  60. {=============================================================================}
  61.  
  62. Procedure WaitReturn;
  63. VAR Pause : CHAR;
  64. Begin
  65.   WriteStr('Press [RETURN]:;');
  66.   LastPrompt := 'Press [RETURN]:';
  67.   REPEAT
  68.     Pause := GetInputChar;
  69.   UNTIL (Pause IN [^M]) OR (HungUpon);
  70.  
  71.   Write(^H' '^H^H' '^H^H' '^H^H' '^H^H' '^H' '^H^H' '^H^H' '^H^H' ');
  72.   Write(^H^H' '^H^H' '^H^H' '^H^H' '^H^H' '^H^H' '^H^H' ');
  73.   Writeln;
  74. End;
  75.  
  76. {=============================================================================}
  77.  
  78. Procedure TopOfBox(ScreenWidth : BYTE);
  79. VAR Index : BYTE;
  80. Begin
  81.   IF ASCIIGraphics in URec.Config THEN
  82.     Begin
  83.       Write('┌');
  84.       For Index := 1 to ScreenWidth - 3 DO
  85.         Write('─');
  86.       Writeln('┐');
  87.     End
  88.   ELSE
  89.     Begin
  90.       Write(' ');
  91.       For Index := 2 TO ScreenWidth-2 DO
  92.         Write('-');
  93.       Writeln;
  94.     End;
  95. End;
  96.  
  97. {=============================================================================}
  98.  
  99. Procedure BoxText(StringBox : String78; ScreenWidth : BYTE;
  100.                   AllignMent : AllignTypes);
  101. Begin
  102.  If ASCIIGraphics in URec.Config THEN
  103.    Begin
  104.     Write('│');
  105.     CASE AllignMent Of
  106.      Middle : Begin
  107.                 Tab('',Trunc((ScreenWidth/2)-(Length(StringBox)/2))-2);
  108.                 Write(StringBox);
  109.                 Tab('',ScreenWidth-(Trunc((ScreenWidth/2)-(Length(StringBox)/2))+Length(StringBox))-1);
  110.               End;
  111.      Left   : Begin
  112.                 Write(' ',StringBox);
  113.                 Tab('',ScreenWidth-Length(StringBox)-4);
  114.               End;
  115.      Right  : Begin
  116.                 Tab('',ScreenWidth-Length(StringBox)-4);
  117.                 Write(StringBox,' ');
  118.               End;
  119.      End;
  120.      Writeln('│');
  121.    End
  122.  ELSE
  123.    Begin
  124.      Write('|');
  125.      CASE AllignMent Of
  126.      Middle : Begin
  127.                 Tab('',Trunc((ScreenWidth/2)-(Length(StringBox)/2))-2);
  128.                 Write(StringBox);
  129.                 Tab('',ScreenWidth-(Trunc((ScreenWidth/2)-(Length(StringBox)/2))+Length(StringBox))-1);
  130.               End;
  131.      Left   : Begin
  132.                 Write(' ',StringBox);
  133.                 Tab('',ScreenWidth-Length(StringBox)-4);
  134.               End;
  135.      Right  : Begin
  136.                 Tab('',ScreenWidth-Length(StringBox)-4);
  137.                 Write(StringBox,' ');
  138.               End;
  139.      End;
  140.      Writeln('|');
  141.    End;
  142. End;
  143.  
  144. {=============================================================================}
  145.  
  146. Procedure MiddleBar(ScreenWidth : BYTE);
  147. VAR Index : BYTE;
  148. Begin
  149.   IF ASCIIGraphics in URec.Config THEN
  150.     Begin
  151.      Write('├');
  152.      For Index := 1 to ScreenWidth - 3 DO
  153.      Write('─');
  154.      Writeln('┤');
  155.     End
  156.   ELSE
  157.     Begin
  158.       Write('|');
  159.       For Index := 1 TO ScreenWidth-3 DO
  160.         Write('-');
  161.       Writeln('|');
  162.     End;
  163. End;
  164.  
  165. {=============================================================================}
  166.  
  167. Procedure BottomOfBox(ScreenWidth : BYTE);
  168. VAR Index : BYTE;
  169. Begin
  170.   IF ASCIIGraphics in URec.Config THEN
  171.     Begin
  172.      Write('└');
  173.      For Index := 1 to ScreenWidth - 3 DO
  174.      Write('─');
  175.      Writeln('┘');
  176.      Writeln;
  177.     End
  178.   ELSE
  179.     Begin
  180.       Write(' ');
  181.       For Index := 2 TO ScreenWidth-2 DO
  182.         Write('-');
  183.       Writeln;
  184.     End;
  185. End;
  186.  
  187. {=============================================================================}
  188.  
  189. Procedure BoxString(StringBox : String80; Size : BYTE);
  190. VAR Index : BYTE;
  191. Begin
  192.   TopOfBox(Size);
  193.   BoxText(StringBox,Size,Middle);
  194.   BottomOfBox(Size);
  195. End;
  196.  
  197. {=============================================================================}
  198.  
  199. Function WidthScreen : BYTE;
  200. Begin
  201.   If EightyCols in URec.Config THEN WidthScreen := 80
  202.     ELSE
  203.       WidthScreen := 40;
  204. End;
  205.  
  206. {=============================================================================}
  207.