program numbers;
{programma di stampa numeri in piu' colonne con i numeri in progressivo
dalla prima riga della prima colonna in giu' ripredendo dalla prima riga
della 2.a colonna. e colonne servo per essere attacate sul libro bolle}

CONST
  {$i \PASCAL\TOOLcons}
  relase='Ver. 0.1';
TYPE
  {$i \PASCAL\TOOLtype}
VAR
  {$i \PASCAL\TOOLvar}
  code,base,righe,col,space:integer;
  txt:str80;


{$I \PASCAL\TOOL}
{$I \pascal\setlpt}
procedure add_spaces(max:integer;var dato:str255);
var l,i:integer;
begin
   for i:=1 to max do
      dato:=dato+' '
end;
procedure sizes(max:integer;var dato:str255); {not used}
var l,i:integer;
begin

  l:=length(dato);
  if l<=max then
    for i:=l to max do
      dato:=dato+' '
  else
    dato:=copy(dato,1,max);
end;

procedure stampa(var base,righe,col,space:integer);
var fine,i:integer;
    dato,dato2:str255;

begin

  fine:=(base+(righe*col));

  menu(1,'Stampa in '+sts(col)+' colonne');
  gotoxy(1,2);
  while (fine+righe)>(base+(righe*col)) do begin
    dato:='';
    for i:=1 to col do begin

      dato2:=sts(base-righe+(righe*i));
      add_spaces(space+length(sts(fine))-length(dato2),dato2);
      dato:=dato+dato2;
    end;
    base:=base+1;
    writeln(lst,dato);
    writeln(dato);
  end;
end;
procedure f1proc;
begin
  message('Tasto non definito',1,1);
  cls:=false;
end;

procedure f2proc;
begin
  message('Tasto non definito',1,1);
  cls:=false;
end;
procedure f3proc;
begin
  page(1);
  message('Salto una pagina sulla stampante',1,1);
  cls:=false;
end;
procedure f10proc;
var i:integer;
begin
  message('Azzeramento printer',1,1);
  write(lst,chr(19));
  for i:=1 to 200 do
    write(lst,chr(24),chr(24),chr(24),chr(24),chr(24));
  write(lst,chr(27),'@');{resetta la stampante}
  message('',1,0);
  cls:=false;
end;


BEGIN {program}
  {$i \PASCAL\TOOLinit}

  base:=3120;
  space:=3;
  righe:=31;
  col:=7;
  repeat
    menu(1,'Stampa dei numeri per il libro bolle in n colonne');
    message('Dare 0 per uscire',1,0);
    get_int(10,10,'Numero d`inizio?',base);
    message('',0,0);
    if base<>0 then begin
      get_int(10,12,'Numero di Righe?',righe);
      get_int(10,14,'Numero di Colonne?',col);
      get_int(10,16,'Quanti caratteri bianchi tra due colonne adiacenti?',space);
      set_printer;
      stampa(base,righe,col,space);
      base:=base+(righe*col)+1;
    end;
  until base=0;
  mid('Arrivederci');
end.

