1 ------------------------------------------------------------------------------ 2 ------------------------------------------------------------------------------ 3 -- This file is part of 'Finite Field Arithmetic', aka 'FFA'. -- 4 -- -- 5 -- (C) 2019 Stanislav Datskovskiy ( www.loper-os.org ) -- 6 -- http://wot.deedbot.org/17215D118B7239507FAFED98B98228A001ABFFC7.html -- 7 -- -- 8 -- You do not have, nor can you ever acquire the right to use, copy or -- 9 -- distribute this software ; Should you use this software for any purpose, -- 10 -- or copy and distribute it to anyone or in any manner, you are breaking -- 11 -- the laws of whatever soi-disant jurisdiction, and you promise to -- 12 -- continue doing so for the indefinite future. In any case, please -- 13 -- always : read and understand any software ; verify any PGP signatures -- 14 -- that you use - for any purpose. -- 15 -- -- 16 -- See also http://trilema.com/2015/a-new-software-licensing-paradigm . -- 17 ------------------------------------------------------------------------------ 18 ------------------------------------------------------------------------------ 19 20 package body OS is 21 22 -- Receive a character from the TTY, and True if success (False if EOF) 23 function Read_Char(C : out Character) return Boolean is 24 i : int; 25 Result : Boolean := False; 26 begin 27 i := GetChar; 28 if i /= EOF then 29 C := Character'Val(i); 30 Result := True; 31 end if; 32 return Result; 33 end Read_Char; 34 35 36 -- Send a character to the TTY. 37 procedure Write_Char(C : in Character) is 38 R : int; 39 pragma Unreferenced(R); 40 begin 41 R := PutChar(int(Character'Pos(C))); 42 end Write_Char; 43 44 45 -- Send a Newline to the TTY. 46 procedure Write_Newline is 47 begin 48 Write_Char(Character'Val(16#A#)); 49 end Write_Newline; 50 51 52 -- Send a String to the TTY. 53 procedure Write_String(S : in String) is 54 begin 55 for i in S'Range loop 56 Write_Char(S(i)); 57 end loop; 58 end Write_String; 59 60 61 -- Exit with an error condition report. 62 procedure Eggog(M : String) is 63 begin 64 for i in 1 .. M'Length loop 65 To_Stderr(M(I)); 66 end loop; 67 68 -- Emit LF 69 To_Stderr(Character'Val(16#A#)); 70 71 -- Exit 72 Quit(Sad_Code); 73 end Eggog; 74 75 -- Warn operator re: potentially-dangerous condition. 76 procedure Achtung(M : String) is 77 begin 78 for i in 1 .. M'Length loop 79 To_Stderr(M(I)); 80 end loop; 81 82 -- Emit LF 83 To_Stderr(Character'Val(16#A#)); 84 end Achtung; 85 86 end OS;