Figure 39.
Write without help and error recovery.
------------------------------------------------------
with Get_Command_Line;
with SCROLL_TERMINAL, SCROLL_PRINTER, TEXT_IO;
procedure No_Help_Write is
TITLE : string(1..79);
FILENAME : string(1..68);
LENGTH : natural;
FILE : TEXT_IO.File_type;
PAGE : positive;
DOUBLE_SPACED : boolean;
LINES_LEFT_TO_PRINT : natural;
TEXT : string(1..250);
RESPONSE : character;
PAGE_NO : string(1..4);
begin
Get_Command_Line(FILENAME,LENGTH);
TEXT_IO.Open(FILE, TEXT_IO.IN_FILE, FILENAME(1..LENGTH));
TITLE := (others => ' ');
TITLE(1..LENGTH) := FILENAME(1..LENGTH);
SCROLL_TERMINAL.put_line("Enter page TITLE, please.");
SCROLL_TERMINAL.get("", TITLE, TITLE);
SCROLL_TERMINAL.get("Start numbering pages at page ",
"1",PAGE_NO);
PAGE := integer'VALUE(PAGE_NO);
SCROLL_TERMINAL.get("SINGLE or DOUBLE spaced? (S/D) ",
'S', RESPONSE);
case RESPONSE is
when 'D' | 'd' =>
DOUBLE_SPACED := TRUE;
when others =>
DOUBLE_SPACED := FALSE;
end case;
loop
exit when TEXT_IO.End_Of_File(FILE);
SCROLL_PRINTER.new_line(4);
SCROLL_PRINTER.put_line(TITLE);
SCROLL_PRINTER.new_line(3);
LINES_LEFT_TO_PRINT := 50;
loop
exit when TEXT_IO.End_Of_File(FILE);
TEXT_IO.get_line(FILE,TEXT,LENGTH);
SCROLL_PRINTER.put_line(TEXT(1..LENGTH));
LINES_LEFT_TO_PRINT := LINES_LEFT_TO_PRINT-1;
if DOUBLE_SPACED then
SCROLL_PRINTER.new_line;
LINES_LEFT_TO_PRINT := LINES_LEFT_TO_PRINT-1;
end if;
exit when LINES_LEFT_TO_PRINT < 1;
end loop;
SCROLL_PRINTER.new_line(LINES_LEFT_TO_PRINT+3);
SCROLL_PRINTER.Set_Col(30);
SCROLL_PRINTER.put_line(integer'IMAGE(PAGE));
PAGE := PAGE+1;
SCROLL_PRINTER.new_page;
end loop;
TEXT_IO.Close(FILE);
SCROLL_TERMINAL.put_line("Done.");
end No_Help_Write;