[BACK]Return to communications_with_user.adb CVS log [TXT][DIR] Up to [local] / OpenXM_contrib / PHC / Ada / System

Annotation of OpenXM_contrib/PHC/Ada/System/communications_with_user.adb, Revision 1.1

1.1     ! maekawa     1: package body Communications_with_User is
        !             2:
        !             3: -- AUXILIARY :
        !             4:
        !             5:   function Is_In ( s : string; ch : character ) return boolean is
        !             6:
        !             7:   -- DESCRIPTION :
        !             8:   --   Returns true if the character occurs in the string, false otherwise.
        !             9:
        !            10:   begin
        !            11:     for i in s'range loop
        !            12:       if s(i) = ch
        !            13:        then return true;
        !            14:       end if;
        !            15:     end loop;
        !            16:     return false;
        !            17:   end Is_In;
        !            18:
        !            19: -- TARGET ROUTINES :
        !            20:
        !            21:   function Read_String return string is
        !            22:
        !            23:     temp : string(1..80);
        !            24:     cnt : natural;
        !            25:
        !            26:   begin
        !            27:     put("Give a string of characters : ");
        !            28:     get_line(temp,cnt);
        !            29:     return temp(1..cnt);
        !            30:   end Read_String;
        !            31:
        !            32:   procedure Ask ( ans : out character ) is
        !            33:
        !            34:     ch : character;
        !            35:
        !            36:   begin
        !            37:     loop
        !            38:       get(ch); skip_line;
        !            39:       exit when Valid_Alternative(ch);
        !            40:       put("Invalid alternative.  Please try again : ");
        !            41:     end loop;
        !            42:     ans := ch;
        !            43:   end Ask;
        !            44:
        !            45:   procedure Ask_Yes_or_No ( ans : out character ) is
        !            46:
        !            47:     function Yes_or_No ( alt : character ) return boolean is
        !            48:     begin
        !            49:       if alt = 'y' or else alt = 'n'
        !            50:        then return true;
        !            51:        else return false;
        !            52:       end if;
        !            53:     end Yes_or_No;
        !            54:     procedure Yes_or_No_Ask is new Ask (Yes_or_No);
        !            55:
        !            56:   begin
        !            57:     Yes_or_No_Ask(ans);
        !            58:   end Ask_Yes_or_No;
        !            59:
        !            60:   procedure Ask_Alternative ( ans : out character; alternatives : in string ) is
        !            61:
        !            62:     function Is_Valid ( alt : character ) return boolean is
        !            63:     begin
        !            64:       return Is_In(alternatives,alt);
        !            65:     end Is_Valid;
        !            66:     procedure Ask_Alt is new Ask ( Is_Valid );
        !            67:
        !            68:   begin
        !            69:     Ask_Alt(ans);
        !            70:   end Ask_Alternative;
        !            71:
        !            72:   procedure Ask_Alternative
        !            73:                 ( ans : in out string; alternatives : string;
        !            74:                   prefix : in character ) is
        !            75:
        !            76:     ok : boolean := false;
        !            77:     tmp : string(1..10);
        !            78:     ind,cnt : natural;
        !            79:
        !            80:   begin
        !            81:     loop
        !            82:       get_line(tmp,cnt);
        !            83:       ans := "  ";
        !            84:       ind := 1;
        !            85:       while (ans(1) = ' ') and (ind <= cnt) loop
        !            86:         ans(1) := tmp(ind);
        !            87:         ind := ind+1;
        !            88:       end loop;
        !            89:       if ans(1) = prefix
        !            90:        then while (ans(2) = ' ') and (ind <= cnt) loop
        !            91:               ans(2) := tmp(ind);
        !            92:               ind := ind+1;
        !            93:             end loop;
        !            94:             if Is_In(alternatives,ans(2))
        !            95:              then ok := true;
        !            96:              else put("Invalid alternative.  Please try again : ");
        !            97:             end if;
        !            98:        else if Is_In(alternatives,ans(1))
        !            99:              then ok := true;
        !           100:              else put("Invalid alternative.  Please try again : ");
        !           101:             end if;
        !           102:       end if;
        !           103:       exit when ok;
        !           104:     end loop;
        !           105:   end Ask_Alternative;
        !           106:
        !           107:   procedure Read_Name_and_Open_File ( file : in out file_type ) is
        !           108:
        !           109:     name : constant string := Read_String;
        !           110:
        !           111:   begin
        !           112:     Open(file,in_file,name);
        !           113:   exception
        !           114:     when NAME_ERROR =>
        !           115:        put_line("The file could not be located, please try again...");
        !           116:        Read_Name_and_Open_File(file);
        !           117:     when USE_ERROR =>
        !           118:        put_line("File is not readable, please try again...");
        !           119:        Read_Name_and_Open_File(file);
        !           120:   end Read_Name_and_Open_File;
        !           121:
        !           122:   procedure Read_Name_and_Create_File ( file : in out file_type ) is
        !           123:
        !           124:     filename : constant string := Read_String;
        !           125:     ans : character;
        !           126:     temp : file_type;
        !           127:
        !           128:     procedure Retry is
        !           129:     begin
        !           130:       Create(file,out_file,filename);
        !           131:     exception
        !           132:       when USE_ERROR =>
        !           133:         put_line("Could not create file, file already in use.");
        !           134:         put_line("Please, try again...");
        !           135:         Read_Name_and_Create_File(file);
        !           136:       when NAME_ERROR =>
        !           137:         put_line("Could not create file, perhaps wrong directory ?");
        !           138:         put_line("Please, try again...");
        !           139:         Read_Name_and_Create_File(file);
        !           140:     end Retry;
        !           141:
        !           142:   begin
        !           143:     Open(temp,in_file,filename);
        !           144:     Close(temp);
        !           145:     put("There exists already a file named "); put_line(filename);
        !           146:     put("Do you want to destroy this file ? (y/n) ");
        !           147:     Ask_Yes_or_No(ans);
        !           148:     if ans = 'y'
        !           149:      then create(file,out_file,filename);
        !           150:      else Read_Name_and_Create_File(file);
        !           151:     end if;
        !           152:   exception
        !           153:     when others => Retry;
        !           154:   end Read_Name_and_Create_File;
        !           155:
        !           156:   procedure Open_Input_File
        !           157:                ( file : in out file_type; filename : in string ) is
        !           158:   begin
        !           159:     Open(file,in_file,filename);
        !           160:   exception
        !           161:     when NAME_ERROR =>
        !           162:        put("The file "); put(filename);
        !           163:        put_line(" could not be located, please try again...");
        !           164:        Read_Name_and_Open_File(file);
        !           165:     when USE_ERROR =>
        !           166:        put("The file "); put(filename);
        !           167:        put_line(" is not readable, please try again...");
        !           168:        Read_Name_and_Open_File(file);
        !           169:   end Open_Input_File;
        !           170:
        !           171:   procedure Create_Output_File
        !           172:                  ( file : in out file_type; filename : in string ) is
        !           173:
        !           174:     ans : character;
        !           175:     temp : file_type;
        !           176:
        !           177:     procedure Retry is
        !           178:     begin
        !           179:       Create(file,out_file,filename);
        !           180:     exception
        !           181:       when USE_ERROR =>
        !           182:         put("Could not create file "); put(filename);
        !           183:         put_line(", file already in use.");
        !           184:         put_line("Please, try again...");
        !           185:         Read_Name_and_Create_File(file);
        !           186:       when NAME_ERROR =>
        !           187:         put("Could not create file "); put(filename);
        !           188:         put_line(", perhaps wrong directory ?");
        !           189:         put_line("Please, try again...");
        !           190:         Read_Name_and_Create_File(file);
        !           191:     end Retry;
        !           192:
        !           193:   begin
        !           194:     if filename = ""
        !           195:      then new_line;
        !           196:           put_line("Reading the name of the output file.");
        !           197:           Read_Name_and_Create_File(file);
        !           198:      else Open(temp,in_file,filename); Close(temp);
        !           199:           new_line;
        !           200:           put("There exists already a file named "); put_line(filename);
        !           201:           put("Do you want to destroy this file ? (y/n) ");
        !           202:           Ask_Yes_or_No(ans);
        !           203:           if ans = 'y'
        !           204:            then create(file,out_file,filename);
        !           205:            else Read_Name_and_Create_File(file);
        !           206:           end if;
        !           207:     end if;
        !           208:   exception
        !           209:     when others => Retry;
        !           210:   end Create_Output_File;
        !           211:
        !           212: end Communications_with_User;

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>