home *** CD-ROM | disk | FTP | other *** search
- /***************************************************************************
- * *
- * Filename : IO.c *
- * *
- * Description : Input and output routines for the TeXPrt program. *
- * *
- ***************************************************************************
- * *
- * Modification History *
- * *
- * Date Author Comments *
- * ---------------------------------------------------------------------- *
- * 10.6.93 R.Bödi Created. *
- * 2.11.93 R.Bödi Changed structure TeXDriver, see TeXPrt.h *
- * 22.2.94 R.Bödi Changed due to modifications in TeXPrt.h *
- * 2.3.94 R.Bödi Added tags DVIFile and Misc to structures *
- * RawSettings and ParsedSettings. *
- * 7.3.94 R.Bödi Added tracking of the parsing process of a *
- * driver spec file. *
- * *
- ***************************************************************************
- * *
- * Copyright © 1993-1994 Richard Bödi, All rights reserved. *
- * *
- ***************************************************************************/
-
- /*----------------------------- INCLUDES ----------------------------------*/
-
- #include "TeXPrt.h"
- #include "TexPrt_protos.h"
- #include "TexPrt_globals.h"
-
- /*----------------------------- DEFINES -----------------------------------*/
-
- #define SETASSIGNS TotalAssigns += Assigns; if (Assigns) Line++;
-
- /*------------------------------- CODE ------------------------------------*/
-
-
- /***************************************************************************
- * *
- * Function name : ScanDrivers *
- * *
- * Description : Scans the directory given by DriverDrawer for DVI *
- * printer driver spec files. *
- * *
- ***************************************************************************
- * *
- * Synopsis : ScanDrivers (AvailDrivers) *
- * *
- * Parameters : *
- * (struct AvailDrivers*) AvailDrivers : *
- * Fills the AvailDrivers structure with the names and the *
- * filenames of the drivers found in the DriverDrawer directory. *
- * The strings are limited to NAMELENGTH characters. *
- * *
- * Return value : (short) *
- * >= 0 : Number of Driver spec files found in the Drawer *
- * < 0 : DOS error or no memory. *
- * *
- ***************************************************************************/
-
- short ScanDrivers (struct AvailDrivers *AvailDrivers)
-
- {
- struct FileInfoBlock FInfo;
- BPTR DriverLock, OldLock, File;
- short No = 0;
- char Buffer[BUFFERLENGTH];
- FILE *fp;
-
- if (DriverLock = Lock (DriverDrawer, ACCESS_READ))
- {
- OldLock = CurrentDir (DriverLock);
-
- if (Examine (DriverLock, &FInfo))
- do {
- if (FInfo.fib_DirEntryType < 0)
- {
- if (File = Open (FInfo.fib_FileName, MODE_OLDFILE))
- {
- Read (File, Buffer, strlen (DriverLogo));
- if (!strncmp (Buffer, DriverLogo, strlen (DriverLogo)))
- No++;
- Close (File);
- }
- }
- } while (ExNext (DriverLock, &FInfo));
-
- if (No > 0)
- if (AvailDrivers->DriverFiles = calloc (No, NAMELENGTH * 2))
- {
- AvailDrivers->DriverNames = AvailDrivers->DriverFiles + No * NAMELENGTH;
- No = 0;
-
- if (Examine (DriverLock, &FInfo))
- do {
- if (FInfo.fib_DirEntryType < 0)
- {
- if (File = Open (FInfo.fib_FileName, MODE_OLDFILE))
- {
- Read (File, Buffer, strlen (DriverLogo));
- if (!strncmp (Buffer, DriverLogo, strlen (DriverLogo)))
- {
- strncpy (AvailDrivers->DriverFiles + No * NAMELENGTH, FInfo.fib_FileName, NAMELENGTH);
- if (fp = fopen (FInfo.fib_FileName, "r"))
- {
- strcpy (Buffer, DriverLogo);
- strcat (Buffer, " \n Name ; %31s \n");
- fscanf (fp, Buffer, AvailDrivers->DriverNames + No * NAMELENGTH);
- fclose (fp);
- No++;
- }
- }
- Close (File);
- }
- }
- } while (ExNext (DriverLock, &FInfo));
- }
- else
- No = -1;
-
- CurrentDir (OldLock);
- UnLock (DriverLock);
- }
-
- return (No);
- }
-
-
- /***************************************************************************
- * *
- * Function name : LoadDriverSpec *
- * *
- * Description : Loads the data of a printer driver spec file and stores *
- * in the TeXDriver structure. *
- * *
- ***************************************************************************
- m * *
- * Synopsis : LoadDriverSpec (Structures, DriverNo) *
- * *
- * Parameters : *
- * (struct StructPointers *) Structures: *
- * Contains pointers to various data pools. *
- * (USHORT) DriverNo : *
- * Contains the actual number of the driver as displayed in the *
- * Driver menu. *
- * *
- * Return value : (USHORT) *
- * 0, if printer driver spec file was read successfully. *
- * >0, number of last read line. *
- * 1000, no memory, no file, no lock on drawer. *
- * *
- ***************************************************************************/
-
- USHORT LoadDriverSpec (struct StructPointers *Structures, USHORT DriverNo)
-
- {
- int Assigns = 0, TotalAssigns = 0, OptionCount;
- USHORT Line = 1000;
- char Buffer[BUFFERLENGTH], OptionStrg[NAMELENGTH];
- char *Token;
- BPTR DriverLock, OldLock;
- FILE *fp;
- struct TeXDriver TempDriver;
- struct RawSettings *TempRaw;
- struct DefaultSettings TempDefault;
-
- const NoOfAssigns = 54;
-
- if (TempRaw = calloc (1, sizeof (struct RawSettings)))
- {
- if (DriverLock = Lock (DriverDrawer, ACCESS_READ))
- {
- OldLock = CurrentDir (DriverLock);
-
- if (fp = fopen (Structures->AvailDrivers->DriverFiles + DriverNo * NAMELENGTH, "r"))
- {
- Line = 1;
- strcpy (Buffer, DriverLogo);
- strcat (Buffer, " \n Name ; %31s \n");
- Assigns = fscanf (fp, Buffer, TempDriver.DriverName);
- SETASSIGNS;
-
- strcpy (Buffer, " \n Node ; %256s \n");
- Assigns = fscanf (fp, Buffer, TempDriver.ProgramNode);
- SETASSIGNS;
-
- Assigns = fscanf (fp, "PageSel (DOCUMENT/FROMTO) ; %80s ", Buffer);
- if (!strcmp (Buffer, "DOCUMENT")) TempDefault.PageSel = DOCUMENT;
- if (!strcmp (Buffer, "FROMTO")) TempDefault.PageSel = FROMTO;
- Assigns += fscanf (fp, " ; %63s \n", TempRaw->PageSel);
- SETASSIGNS;
-
- Assigns = fscanf (fp, "Copies ; %80s ", Buffer);
- TempDefault.Copies = (unsigned long) atol (Buffer);
- Assigns += fscanf (fp, " ; %63s \n", TempRaw->Copies);
- SETASSIGNS;
-
- Assigns = fscanf (fp, "PageType (ALL/ODD/EVEN) ; %80s ", Buffer);
- if (!strcmp (Buffer, "ALL")) TempDefault.PageType = ALL;
- if (!strcmp (Buffer, "ODD")) TempDefault.PageType = ODD;
- if (!strcmp (Buffer, "EVEN")) TempDefault.PageType = EVEN;
- Assigns += fscanf (fp, " ; %63s \n", TempRaw->PageType);
- SETASSIGNS;
-
- Assigns = fscanf (fp, "Orientation (PORTRAIT/LANDSCAPE) ; %80s ", Buffer);
- if (!strcmp (Buffer, "PORTRAIT")) TempDefault.Orientation = PORTRAIT;
- if (!strcmp (Buffer, "LANDSCAPE")) TempDefault.Orientation = LANDSCAPE;
- Assigns += fscanf (fp, " ; %63s \n", TempRaw->Orientation);
- SETASSIGNS;
-
- Assigns = fscanf (fp, "HOffset ; %80s ", Buffer);
- TempDefault.HOffset = atol (Buffer);
- Assigns += fscanf (fp, " ; %63s ; %63s ; %63s \n", TempRaw->HOffset, TempRaw->HOffsetUnit, TempRaw->HOffsetTxt);
- SETASSIGNS;
-
- Assigns = fscanf (fp, "VOffset ; %80s ", Buffer);
- TempDefault.VOffset = atol (Buffer);
- Assigns += fscanf (fp, " ; %63s ; %63s ; %63s \n", TempRaw->VOffset, TempRaw->VOffsetUnit, TempRaw->VOffsetTxt);
- SETASSIGNS;
-
- Assigns = fscanf (fp, "AdjHOffset ; %80s ", Buffer);
- TempDefault.AdjHOffset = atol (Buffer);
- SETASSIGNS;
-
- Assigns = fscanf (fp, "AdjVOffset ; %80s ", Buffer);
- TempDefault.AdjVOffset = atol (Buffer);
- SETASSIGNS;
-
- for (OptionCount = 0; OptionCount < OPTIONS; OptionCount++)
- {
- sprintf (OptionStrg, "Option%d (ON/OFF) ; %%80s ", OptionCount + 1);
- Assigns = fscanf (fp, OptionStrg, Buffer);
- if (!strcmp (Buffer, "ON")) TempDefault.Option[OptionCount] = TRUE;
- if (!strcmp (Buffer, "OFF")) TempDefault.Option[OptionCount] = FALSE;
- Assigns += fscanf (fp, " ; %63s ; %63s \n", TempRaw->Option[OptionCount], TempRaw->OptionTxt[OptionCount]);
- SETASSIGNS;
- }
-
- Assigns = fscanf (fp, "Device ; %63s ; %63s", TempDefault.DeviceName, TempRaw->Device);
- SETASSIGNS;
- Assigns = fscanf (fp, "DVIFile ; %63s", TempRaw->DVIFile);
- SETASSIGNS;
- Assigns = fscanf (fp, "Misc ; %63s", TempRaw->Misc);
- SETASSIGNS;
-
- fclose (fp);
- }
-
- CurrentDir (OldLock);
- UnLock (DriverLock);
- }
- }
-
- if (TotalAssigns == NoOfAssigns)
- {
- // copy temporal structures to function parameters
- memcpy (Structures->TeXDriver, &TempDriver, sizeof (struct TeXDriver));
- memcpy (Structures->DefaultSettings, &TempDefault, sizeof (struct DefaultSettings));
- memcpy (Structures->RawSettings, TempRaw, sizeof (struct RawSettings));
-
- Token = stptok (TempRaw->PageSel, Structures->ParsedSettings->From, sizeof (Structures->ParsedSettings->From), ",");
- Token = stptok (++Token, Structures->ParsedSettings->To, sizeof (Structures->ParsedSettings->To), ",");
- stptok (++Token, Structures->ParsedSettings->NoOfPages, sizeof (Structures->ParsedSettings->NoOfPages), ",");
-
- stpcpy (Structures->ParsedSettings->Copies, TempRaw->Copies);
-
- Token = stptok (TempRaw->PageType, Structures->ParsedSettings->AllPages, sizeof (Structures->ParsedSettings->AllPages), ",");
- Token = stptok (++Token, Structures->ParsedSettings->OddPages, sizeof (Structures->ParsedSettings->OddPages), ",");
- stptok (++Token, Structures->ParsedSettings->EvenPages, sizeof (Structures->ParsedSettings->EvenPages), ",");
-
- Token = stptok (TempRaw->Orientation, Structures->ParsedSettings->Portrait, sizeof (Structures->ParsedSettings->Portrait), ",");
- stptok (++Token, Structures->ParsedSettings->LandScape, sizeof (Structures->ParsedSettings->LandScape), ",");
-
- stpcpy (Structures->ParsedSettings->HOffset, TempRaw->HOffset);
- stpcpy (Structures->ParsedSettings->HOffsetUnit, TempRaw->HOffsetUnit);
- stpcpy (Structures->ParsedSettings->HOffsetTxt, TempRaw->HOffsetTxt);
- stpcpy (Structures->ParsedSettings->VOffset, TempRaw->VOffset);
- stpcpy (Structures->ParsedSettings->VOffsetUnit, TempRaw->VOffsetUnit);
- stpcpy (Structures->ParsedSettings->VOffsetTxt, TempRaw->VOffsetTxt);
-
- for (OptionCount = 0; OptionCount < OPTIONS; OptionCount++)
- {
- stpcpy (Structures->ParsedSettings->Option[OptionCount], TempRaw->Option[OptionCount]);
- stpcpy (Structures->ParsedSettings->OptionTxt[OptionCount], TempRaw->OptionTxt[OptionCount]);
- }
-
- stpcpy (Structures->ParsedSettings->Device, TempRaw->Device);
- stpcpy (Structures->ParsedSettings->DVIFile, TempRaw->DVIFile);
- stpcpy (Structures->ParsedSettings->Misc, TempRaw->Misc);
-
- repchrstr (Structures->ParsedSettings->From, '"', ' ');
- repchrstr (Structures->ParsedSettings->To, '"', ' ');
- repchrstr (Structures->ParsedSettings->NoOfPages, '"', ' ');
- repchrstr (Structures->ParsedSettings->Copies, '"', ' ');
- repchrstr (Structures->ParsedSettings->AllPages, '"', ' ');
- repchrstr (Structures->ParsedSettings->OddPages, '"', ' ');
- repchrstr (Structures->ParsedSettings->EvenPages, '"', ' ');
- repchrstr (Structures->ParsedSettings->HOffset, '"', ' ');
- repchrstr (Structures->ParsedSettings->VOffset, '"', ' ');
- repchrstr (Structures->ParsedSettings->HOffsetTxt, '"', ' ');
- repchrstr (Structures->ParsedSettings->VOffsetTxt, '"', ' ');
- repchrstr (Structures->ParsedSettings->Portrait, '"', ' ');
- repchrstr (Structures->ParsedSettings->LandScape, '"', ' ');
- repchrstr (Structures->ParsedSettings->Device, '"', ' ');
- repchrstr (Structures->ParsedSettings->DVIFile, '"', ' ');
- repchrstr (Structures->ParsedSettings->Misc, '"', ' ');
- repchrstr (Structures->DefaultSettings->DeviceName, '"', ' ');
-
- for (OptionCount = 0; OptionCount < OPTIONS; OptionCount++)
- {
- repchrstr (Structures->ParsedSettings->Option[OptionCount], '"', ' ');
- repchrstr (Structures->ParsedSettings->OptionTxt[OptionCount], '"', ' ');
- }
-
- Structures->DriverNumber = DriverNo;
- free (TempRaw);
- return (0);
- }
- else
- {
- // Restore the selected menu item pointer in the Drivers menu
- DoMethod (Structures->MUIPointers->app, MUIM_Application_SetMenuCheck, ID_DRIVER + DriverNo, FALSE);
- DoMethod (Structures->MUIPointers->app, MUIM_Application_SetMenuCheck, ID_DRIVER + Structures->DriverNumber, TRUE);
- return (Line);
- }
- }
-
-
-
- /***************************************************************************
- * *
- * Function name : SaveDriverSpec *
- * *
- * Description : Restores the data of a printer driver spec file. *
- * *
- ***************************************************************************
- * *
- * Synopsis : SaveDriverSpec (DriverNo, Driver, Raw, Default, Pointers) *
- * *
- * Parameters : *
- * (char *) SpecFilename: *
- * The name of the driver spec file. *
- * (struct TeXDriver *) Driver: *
- * The name and the node of the printer driver. *
- * (struct RawSettings *) Raw: *
- * Contains the switches for the command line options. *
- * (struct DefaultSettings *) Default: *
- * Contains AdjHOffset and AdjVOffset tags. *
- * (struct MUIPointers *) Pointers: *
- * A structure consisting of APTRs to MUI elements. *
- * *
- * Return value : (BOOL) *
- * TRUE, if printer driver spec file was written successfully. *
- * FALSE, if not. *
- * *
- ***************************************************************************/
-
- BOOL SaveDriverSpec (char *SpecFilename, struct TeXDriver *Driver, struct RawSettings *Raw,
- struct DefaultSettings *Default, struct MUIPointers *Pointers)
-
- {
- ULONG GetInt;
- int OptionCount;
- BOOL NoError = FALSE;
- BPTR DriverLock, OldLock;
- FILE *fp;
-
- if (DriverLock = Lock (DriverDrawer, ACCESS_READ))
- {
- OldLock = CurrentDir (DriverLock);
-
- if (fp = fopen (SpecFilename, "w"))
- {
- fprintf (fp, "%s\n", DriverLogo);
- fprintf (fp, "Name ; %s\n", Driver->DriverName);
- fprintf (fp, "Node ; %s\n", Driver->ProgramNode);
-
- fprintf (fp, "PageSel (DOCUMENT/FROMTO) ; ");
- GetAttr (MUIA_Radio_Active, Pointers->RAD_FromTo, &GetInt);
- if (GetInt == DOCUMENT) fprintf (fp, "DOCUMENT ");
- else fprintf (fp, "FROMTO ");
- fprintf (fp, "; %s\n", Raw->PageSel);
-
- GetAttr (MUIA_String_Contents, Pointers->STR_Copies, &GetInt);
- fprintf (fp, "Copies ; %s ; %s\n", (char *)GetInt, Raw->Copies);
-
- fprintf (fp, "PageType (ALL/ODD/EVEN) ; ");
- GetAttr (MUIA_Radio_Active, Pointers->RAD_OddEven, &GetInt);
- if (GetInt == ALL) fprintf (fp, "ALL ");
- if (GetInt == ODD) fprintf (fp, "ODD ");
- if (GetInt == EVEN) fprintf (fp, "EVEN ");
- fprintf (fp, "; %s\n", Raw->PageType);
-
- fprintf (fp, "Orientation (PORTRAIT/LANDSCAPE) ; ");
- GetAttr (MUIA_Radio_Active, Pointers->RAD_Orientation, &GetInt);
- if (GetInt == PORTRAIT) fprintf (fp, "PORTRAIT ");
- else fprintf (fp, "LANDSCAPE ");
- fprintf (fp, "; %s\n", Raw->Orientation);
-
- GetAttr (MUIA_String_Contents, Pointers->STR_X, &GetInt);
- fprintf (fp, "HOffset ; %s ; %s ; %s ; %s\n", (char *)GetInt, Raw->HOffset, Raw->HOffsetUnit, Raw->HOffsetTxt);
- GetAttr (MUIA_String_Contents, Pointers->STR_Y, &GetInt);
- fprintf (fp, "VOffset ; %s ; %s ; %s ; %s\n", (char *)GetInt, Raw->VOffset, Raw->VOffsetUnit, Raw->VOffsetTxt);
- fprintf (fp, "AdjHOffset ; %d\n", Default->AdjHOffset);
- fprintf (fp, "AdjVOffset ; %d\n", Default->AdjVOffset);
-
- for (OptionCount = 0; OptionCount < OPTIONS; OptionCount++)
- {
- fprintf (fp, "Option%d (ON/OFF) ; ", OptionCount+1);
- GetAttr (MUIA_Selected, Pointers->CHM_Option[OptionCount], &GetInt);
- if (GetInt == FALSE) fprintf (fp, "OFF ");
- else fprintf (fp, "ON ");
- fprintf (fp, "; %s ; %s\n", Raw->Option[OptionCount], Raw->OptionTxt[OptionCount]);
- }
-
- GetAttr (MUIA_String_Contents, Pointers->STR_OutFile, &GetInt);
- fprintf (fp, "Device ; %s ; %s\n", (char *)GetInt, Raw->Device);
- fprintf (fp, "DVIFile ; %s\n", Raw->DVIFile);
- fprintf (fp, "Misc ; %s\n", Raw->Misc);
-
- fclose (fp);
- }
-
- CurrentDir (OldLock);
- UnLock (DriverLock);
- NoError = TRUE;
- }
-
- return (NoError);
- }
-
-
- /*---------------------------- END OF FILE --------------------------------*/
-