File: misc.ads

package info (click to toggle)
topal 80-1
  • links: PTS
  • area: main
  • in suites: bullseye, buster
  • size: 1,084 kB
  • sloc: ada: 11,196; ansic: 783; sh: 174; makefile: 113
file content (147 lines) | stat: -rw-r--r-- 5,052 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
-- Topal: GPG/GnuPG and Alpine/Pine integration
-- Copyright (C) 2001--2018  Phillip J. Brooke
--
-- This program is free software: you can redistribute it and/or modify
-- it under the terms of the GNU General Public License version 3 as
-- published by the Free Software Foundation.
--
-- This program is distributed in the hope that it will be useful,
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-- GNU General Public License for more details.
--
-- You should have received a copy of the GNU General Public License
-- along with this program.  If not, see <http://www.gnu.org/licenses/>.

with Ada.Sequential_IO;
with Ada.Text_IO;
with Globals;            use Globals;

package Misc is

   -- How to handle errors and debugging.
   Panic          : exception;
   User_Interrupt : exception;

   procedure Error (The_Error : in String);

   -- ErrorNE (error-no-exception) doesn't raise an exception.
   -- You need to do it.
   procedure ErrorNE (The_Error : in String);

   procedure Debug (Message : in String);
   procedure Close_Debug;
   
   -- A flag that allows Open_TTY to inhibit (any further) writing to stderr.
   Inhibit_Stderr : Boolean := False;

   -- Receiving.Split_Two_Parts and others needs to write out files without
   -- an end-of-line being appended (as happens with Text_IO).
   package Character_IO is new Ada.Sequential_IO (Element_Type => Character);

   procedure Character_IO_Put (F : in Character_IO.File_Type;
                               S : in String);

   procedure Character_IO_Put_Line (F : in Character_IO.File_Type;
                                    S : in String);

   -- Strings to integers.

   String_Not_Integer : exception;

   function String_To_Integer (S : String) return Integer;
   function String_To_Integer (S : UBS) return Integer;

   -- Throw away leading blanks from a string.
   function Trim_Leading_Spaces (S : String) return String;
   
   -- Case insensitive comparison of two strings.
   function EqualCI (A, B : UBS) return Boolean;
   function EqualCI (A : String; B : UBS) return Boolean;
   function EqualCI (A : UBS; B : String) return Boolean;
   function EqualCI (A, B : String) return Boolean;

   -- Create our own temporary file names.  A sequence number is also
   --  inserted unless Use_Sequence_Number is set to False.
   function Temp_File_Name (Tail                : String;
                            Use_Sequence_Number : Boolean := True) return String;

   -- An `unbounded' Get_Line.
   function Unbounded_Get_Line (File : in Ada.Text_IO.File_Type)
                                return UBS;

   function Unbounded_Get_Line return UBS;

   -- Eat and fold an entire file.
   -- Set Include_LF to true to add a LF each new line.
   function Read_Fold (File       : in String;
		       Include_LF : in Boolean := False) return UBS;

   -- Open and close the result file.
   procedure Open_Result_File (Resultfile : in String);

   procedure Close_Result_File;

   -- Disclaimer.
   procedure Disclaimer;

   -- Wrapper for reading unbounded strings out of the config record.
   -- If the string is empty, then barf.
   Need_Nonempty_String : exception;
   function Value_Nonempty (V : UBS) return UBS;

   function Value_Nonempty (V : UBS) return String;

   -- Split up a string into multiple tokens, using spaces as the
   -- delimiter, but also honouring quoting and stuffing using `"'.
   function Split_Arguments (A : UBS) return UBS_Array;

   -- Split up a GPG colon-separated line.
   function Split_GPG_Colons (AS : String) return UBS_Array;
   
   -- Construct a UP.
   function UPC (A, B : String) return UP;
   function UPC (A, B : UBS) return UP;
   
   -- Get the basename of a filename.
   function Basename (S : String) return String;

   -- Basename.
   function Command_Basename return String;

   -- Hexadecimal decoder.
   function Hex_Decode (S : in String) return Natural;
   
   -- Have we got base64 or binary?
   function Guess_SMIME_Encoding(Infile : String) return String;

   -- Return a string for --[no-]use-agent depending on config and the
   --  type of operation.
   function UGA_Str (Signing : Boolean) return String;

   -- Write terminal SGR string.
   function Do_SGR (S : String) return String;
   function Do_SGR (U : UBS) return String;

   -- Reset terminal SGR.
   function Reset_SGR return String;

   -- Rewrite menu prompts.
   function Rewrite_Menu_Prompt (S : in String) return String;

   -- We turn SIGINT into an exception so that we can clean up
   --  temporary files.
   -- Handle interrupts, SIGINT, etc.
   pragma Unreserve_All_Interrupts;
   -- because we want to be able to handle ctrl-C.
   protected Signal_Handlers is
      procedure Sigint_Handler;
      function Sigint_Pending return Boolean;
      pragma Interrupt_Handler(Sigint_Handler);
   private
      Sigint_Pending_Flag : Boolean := False;
   end Signal_Handlers;
   -- And a procedure for taking over sigint.
   procedure Set_Sigint_Handler;

end Misc;