/**************************************************************************

 Clips.c - Testo sorgente in linguaggio C di pubblico dominio - EAD 4/1989

 Trasferisce in RAM un file ASCII per il trattamento con editor AmigaBASIC

---------------------------------------------------------------------------

             Scritto da Paolo Bozzo - Via Bolzano, 23 - Milano

          Rivisto ed adattato a Lattice C V5.00 da Luigi Callegari

---------------------------------------------------------------------------

Compilazione Lattice V5.0: lc -v -cw -Lvcd Clip

***************************************************************************/

#include <exec/types.h>
#include <ios1.h>
#include <libraries/dosextens.h>
#include <workbench/startup.h>
#include <ctype.h>

#ifndef AZTEC_C
#include <proto/dos.h>
#include <proto/exec.h>
#include <string.h>
#else
#include <functions.h>
#endif

#define  RETURN   '\r'
#define  NEWLINE  '\n'

extern struct UFB _ufbs[];
extern struct WBStartup *WBenchMsg;
struct FileHandle *finestra;

void print(s)	/* stampa una stringa */
char*s;
{
	Write((BPTR)finestra, s, strlen(s));
}

void  main(argc,argv)
int   argc;
char  **argv;
{
register struct WBArg       *argomento;
register struct Lock        *indirizzo_dir;
struct FileHandle           *infile, *outfile;
register LONG               mia_dir=0;
register UBYTE              buffer[512];
register int                lung, i;
UBYTE                       *io, *file;
int                         args_number;

infile = outfile = NULL; /* evita spiacevoli visite */

if ( argc == 0 )  /* se lanciato da WorkBench */
   {
   argomento = WBenchMsg -> sm_ArgList;
   io = (UBYTE *) argomento[0].wa_Name;           /*nome di clips*/
   args_number = WBenchMsg -> sm_NumArgs;            /*numero argomenti WB*/
   finestra = (struct FileHandle *)_ufbs[0].ufbfh; /*finestra di default*/
   if (args_number != 2)
      {
      print( " USO: \n un click sull'icona di ");
		print( io);
      print( "\n SHIFT + due click su quella  del\n");
      print( " file ASCII da trasferire.\n");
      goto fine;
      } 
   file = (UBYTE *)argomento[1].wa_Name;          /*nome file ASCII*/     
   indirizzo_dir = (struct Lock *)argomento[1].wa_Lock;
   mia_dir = CurrentDir((BPTR)indirizzo_dir);       /*cambio directory*/
   }
else /* se lanciato da CLI */
   {
   io = argv[0];                             /*nome di clips*/
   finestra = (struct FileHandle *)Output(); /*finestra CLI */
   if (argc == 2)
      file = argv[1];       /*nome file ASCII*/
   else 
      {
      print( "Sintassi: ");
      print( io);print( " nome_file\n");
      goto fine;
      }
   }

if ( ! ( infile = (struct FileHandle *)Open( (char *) file, MODE_OLDFILE)) )
   {
   print( " errore: file non trovato.\n");
   goto fine;
   }

lung = Read((BPTR)infile, buffer, 512);

for ( i = 0; i < 8; i++ )
	{
	if ( ! ( isascii( buffer[i]) )) /* se i primi byte non sono ASCII */
		{
		print( " Il file selezionato non è ASCII!\n");
		goto fine;
		}
	}

if ( ! (outfile = (struct FileHandle *)Open("ram:BasicClip",MODE_NEWFILE)))
	{
	print( " operazione fallita.\n");
	goto fine;
	}

/* Questa è la parte centrale */

do
   {
	for ( i = 0; i < lung; i++ )
		if ( buffer[i] == NEWLINE)
     		buffer[i] = RETURN;
   Write((BPTR)outfile, buffer,lung);
   }
   while ( (lung=Read((BPTR)infile, buffer,512))!=0);

print( " operazione conclusa!\n");

fine:
if (mia_dir) CurrentDir(mia_dir);
if (infile)  Close((BPTR) infile);
if (outfile) Close((BPTR) outfile);
if (argc==0)
	{
		print( "\n Premere RETURN");
		while (Read((BPTR)finestra,file,1),*file!='\n');
	}
}

#ifndef AZTEC_C
void MemCleanup() {}
#endif

/* ******************************* FINE DEL FILE ************************* */
