summaryrefslogtreecommitdiff
path: root/source3/utils
diff options
context:
space:
mode:
authorGerald Carter <jerry@samba.org>2002-10-21 15:49:26 +0000
committerGerald Carter <jerry@samba.org>2002-10-21 15:49:26 +0000
commit4a5a88f8c908ebf61cced616b0539ff8c97b30b1 (patch)
treed39127e080b0a5759d4cfe654e4f4657cfdbfb57 /source3/utils
parenta3c4b4cef60e5058bcb3b41f8e32616ac0b2317f (diff)
downloadsamba-4a5a88f8c908ebf61cced616b0539ff8c97b30b1.tar.gz
samba-4a5a88f8c908ebf61cced616b0539ff8c97b30b1.tar.bz2
samba-4a5a88f8c908ebf61cced616b0539ff8c97b30b1.zip
sync with SAMBA_3_0
(This used to be commit 07ac86323f71d6228a222a1680d1c7def0eb7109)
Diffstat (limited to 'source3/utils')
-rw-r--r--source3/utils/make_printerdef.c585
1 files changed, 0 insertions, 585 deletions
diff --git a/source3/utils/make_printerdef.c b/source3/utils/make_printerdef.c
deleted file mode 100644
index 35ecd7f3e9..0000000000
--- a/source3/utils/make_printerdef.c
+++ /dev/null
@@ -1,585 +0,0 @@
- /*
- Unix SMB/CIFS implementation.
- Create printer definition files.
-
- Copyright (C) Jean-Francois.Micouleau@utc.fr, 10/26/97 - 1998
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-*/
-
-#include "includes.h"
-
-/*
-#define DEBUGIT
-*/
-
-char *files_to_copy;
-char *driverfile, *datafile, *helpfile, *languagemonitor, *datatype, *vendorsetup;
-char buffer[50][sizeof(pstring)];
-char sbuffer[50][sizeof(pstring)];
-char sub_dir[50][2][sizeof(pstring)];
-
-static void usage(char *name)
-{
- fprintf(stderr,"%s: printer.def \"Printer Name\"\n", name);
-}
-
-static char *myfgets(char *s, int n, FILE *stream)
-{
- char *LString1;
- char *LString2;
- char *temp;
- pstring String;
- pstring NewString;
- int i;
-
- fgets(s,n,stream);
- while ((LString1 = strchr_m(s,'%')) != NULL) {
- if (!(LString2 = strchr_m(LString1+1,'%'))) break;
- *LString2 = '\0';
- pstrcpy(String,LString1+1);
- i = 0;
- while(*sbuffer[i]!='\0') {
- if (strncmp(sbuffer[i],String,strlen(String))==0)
- {
- pstrcpy(String,sbuffer[i]);
- if ((temp = strchr_m(String,'=')) != NULL) ++temp;
- pstrcpy(String,temp);
- break;
- }
- i++;
- }
- *LString1 = '\0';
- pstrcpy(NewString,s);
- pstrcat(NewString,String);
- pstrcat(NewString,LString2+1);
- pstrcpy(s, NewString);
- }
- return(s);
-}
-
-/*
- This function split a line in two parts
- on both side of the equal sign
- "entry=value"
-*/
-static char *scan(char *chaine,char **entry)
-{
- char *value;
- char *temp;
- int i=0;
-
- *entry=(char *)malloc(sizeof(pstring));
- value=(char *)malloc(sizeof(pstring));
-
- if(*entry == NULL || value == NULL) {
- fprintf(stderr,"scan: malloc fail !\n");
- exit(1);
- }
-
- pstrcpy(*entry,chaine);
- temp=chaine;
- while( temp[i]!='=' && temp[i]!='\0') {
- i++;
- }
- (*entry)[i]='\0';
- if (temp[i]!='\0') {
- i++;
- }
- while( temp[i]==' ' && temp[i]!='\0') {
- i++;
- }
- pstrcpy(value,temp+i);
- return (value);
-}
-
-static void build_subdir(void)
-{
- int i=0;
- int j=0;
- char *entry;
- char *data;
-
- while (*buffer[i]!='\0') {
- data=scan(buffer[i],&entry);
-#ifdef DEBUGIT
- fprintf(stderr,"\tentry=data %s:%s\n",entry,data);
-#endif
- j = strlen(entry);
- while (j) {
- if (entry[j-1] != ' ') break;
- j--;
- }
- entry[j] = '\0';
-
- if (strncmp(data,"11",2)==0) {
- pstrcpy(sub_dir[i][0],entry);
- pstrcpy(sub_dir[i][1],"");
- }
- if (strncmp(data,"23",2)==0) {
- pstrcpy(sub_dir[i][0],entry);
- pstrcpy(sub_dir[i][1],"color\\");
- }
-#ifdef DEBUGIT
- fprintf(stderr,"\tsubdir %s:%s\n",sub_dir[i][0],sub_dir[i][1]);
-#endif
- i++;
- }
-}
-
-/*
- Lockup Strings entry in a file
- Return all the lines between the entry and the next one or the end of file
- An entry is something between braces.
-*/
-static void lookup_strings(FILE *fichier)
-{
- int found=0,pointeur=0,i=0;
- char *temp,*temp2;
-
- temp=(char *)malloc(sizeof(pstring));
- temp2=(char *)malloc(sizeof(pstring));
-
- if(temp == NULL || temp2 == NULL) {
- SAFE_FREE(temp);
- SAFE_FREE(temp2);
- fprintf(stderr,"lookup_strings: malloc fail !\n");
- exit(1);
- }
-
- *sbuffer[0]='\0';
-
- pstrcpy(temp2,"[Strings]");
-
- rewind(fichier);
-#ifdef DEBUGIT
- fprintf(stderr,"\tLooking for Strings\n");
-#endif
-
- while (!feof(fichier) && found==0) {
- *temp='\0';
- fgets(temp,255,fichier);
- if (strncmp(temp,temp2,strlen(temp2))==0) found=1;
- }
-
-
- while (!feof(fichier) && found==1) {
- *temp='\0';
- fgets(temp,255,fichier);
- if (*temp=='[') {
- found=2;
- *sbuffer[pointeur]='\0';
- }
- else {
- pstrcpy(sbuffer[pointeur],temp);
- i=strlen(sbuffer[pointeur])-1;
- while (sbuffer[pointeur][i]=='\r' || sbuffer[pointeur][i]=='\n')
- sbuffer[pointeur][i--]='\0';
- pointeur++;
- }
- }
-
- /* CCMRCF Mod, seg fault or worse if not found */
- if (pointeur == 0) {
- fprintf(stderr,"Printer not found\tNo [Strings] block in inf file\n");
- exit(2);
- }
-
-#ifdef DEBUGIT
- fprintf(stderr,"\t\tFound %d entries\n",pointeur-1);
-#endif
-}
-
-
-/*
- Lockup an entry in a file
- Return all the lines between the entry and the next one or the end of file
- An entry is something between braces.
-*/
-static void lookup_entry(FILE *fichier,char *chaine)
-{
- int found=0,pointeur=0,i=0;
- char *temp,*temp2;
-
- temp=(char *)malloc(sizeof(pstring));
- temp2=(char *)malloc(sizeof(pstring));
-
- if(temp == NULL || temp2 == NULL) {
- SAFE_FREE(temp);
- SAFE_FREE(temp2);
- fprintf(stderr,"lookup_entry: malloc fail !\n");
- exit(1);
- }
-
- *buffer[0]='\0';
-
- pstrcpy(temp2,"[");
- pstrcat(temp2,chaine);
- pstrcat(temp2,"]");
-
- rewind(fichier);
-#ifdef DEBUGIT
- fprintf(stderr,"\tLooking for %s\n",chaine);
-#endif
-
- while (!feof(fichier) && found==0) {
- *temp='\0';
- myfgets(temp,255,fichier);
- if (strncmp(temp,temp2,strlen(temp2))==0) found=1;
- }
-
-
- while (!feof(fichier) && found==1) {
- *temp='\0';
- myfgets(temp,255,fichier);
- if (*temp=='[') {
- found=2;
- *buffer[pointeur]='\0';
- }
- else {
- pstrcpy(buffer[pointeur],temp);
- i=strlen(buffer[pointeur])-1;
- while (buffer[pointeur][i]=='\r' || buffer[pointeur][i]=='\n')
- buffer[pointeur][i--]='\0';
- pointeur++;
- }
- }
-#ifdef DEBUGIT
- fprintf(stderr,"\t\tFound %d entries\n",pointeur-1);
-#endif
-}
-
-static char *find_desc(FILE *fichier,char *text)
-{
- char *chaine;
- char *long_desc;
- char *short_desc;
- char *crap = NULL;
- char *p;
-
- int found=0;
-
- chaine=(char *)malloc(sizeof(pstring));
- long_desc=(char *)malloc(sizeof(pstring));
- short_desc=(char *)malloc(sizeof(pstring));
- if (!chaine || !long_desc || !short_desc) {
- SAFE_FREE(chaine);
- SAFE_FREE(long_desc);
- SAFE_FREE(short_desc);
- fprintf(stderr,"find_desc: Unable to malloc memory\n");
- exit(1);
- }
-
- rewind(fichier);
- while (!feof(fichier) && found==0)
- {
- myfgets(chaine,255,fichier);
-
- long_desc=strtok(chaine,"=");
- crap=strtok(NULL,",\r");
-
- p=long_desc;
- while(*p!='"' && *p!='\0')
- p++;
- if (*p=='"' && *(p+1)!='\0') p++;
- long_desc=p;
-
- if (*p!='\0')
- {
- p++;
- while(*p!='\"')
- p++;
- *p='\0';
- }
- if (!strcmp(text,long_desc))
- found=1;
- }
- SAFE_FREE(chaine);
- if (!found || !crap) return(NULL);
- while(*crap==' ') crap++;
- pstrcpy(short_desc,crap);
- return(short_desc);
-}
-
-static void scan_copyfiles(FILE *fichier, char *chaine)
-{
- char *part;
- char *mpart;
- int i;
- pstring direc;
-#ifdef DEBUGIT
- fprintf(stderr,"In scan_copyfiles Lookup up of %s\n",chaine);
-#endif
- fprintf(stderr,"\nCopy the following files to your printer$ share location:\n");
- part=strtok(chaine,",");
- do {
- /* If the entry start with a @ then it's a file to copy
- else it's an entry refering to files to copy
- the main difference is when it's an entry
- you can have a directory to append before the file name
- */
- if (*part=='@') {
- if (strlen(files_to_copy) != 0)
- pstrcat(files_to_copy,",");
- pstrcat(files_to_copy,&part[1]);
- fprintf(stderr,"%s\n",&part[1]);
- } else {
- lookup_entry(fichier,part);
- i=0;
- pstrcpy(direc,"");
- while (*sub_dir[i][0]!='\0') {
-#ifdef DEBUGIT
- fprintf(stderr,"\tsubdir %s:%s\n",sub_dir[i][0],sub_dir[i][1]);
-#endif
- if (strcmp(sub_dir[i][0],part)==0)
- pstrcpy(direc,sub_dir[i][1]);
- i++;
- }
- i=0;
- while (*buffer[i]!='\0') {
-/*
- * HP inf files have strange entries that this attempts to address
- * Entries in the Copy sections normally have only a single file name
- * on each line. I have seen the following format in various HP inf files:
- *
- * pscript.hlp = pscript.hl_
- * hpdcmon.dll,hpdcmon.dl_
- * MSVCRT.DLL,MSVCRT.DL_,,32
- * ctl3dv2.dll,ctl3dv2.dl_,ctl3dv2.tmp
- *
- * In the first 2 cases you want the first file name - in the last case
- * you only want the last file name (at least that is what a Win95
- * machine sent). In the third case you also want the first file name
- * (detect by the last component being just a number ?).
- * This may still be wrong but at least I get the same list
- * of files as seen on a printer test page.
- */
- part = strchr_m(buffer[i],'=');
- if (part) {
- /*
- * Case (1) eg. pscript.hlp = pscript.hl_ - chop after the first name.
- */
-
- *part = '\0';
-
- /*
- * Now move back to the start and print that.
- */
-
- while (--part > buffer[i]) {
- if ((*part == ' ') || (*part =='\t'))
- *part = '\0';
- else
- break;
- }
- } else {
- part = strchr_m(buffer[i],',');
- if (part) {
- /*
- * Cases (2-4)
- */
-
- if ((mpart = strrchr_m(part+1,','))!=NULL) {
- /*
- * Second ',' - case 3 or 4.
- * Check if the last part is just a number,
- * if so we need the first part.
- */
-
- char *endptr = NULL;
- BOOL isnumber = False;
-
- mpart++;
- (void)strtol(mpart, &endptr, 10);
-
- isnumber = ((endptr > mpart) && isdigit(*mpart));
- if(!isnumber)
- pstrcpy(buffer[i],mpart+1);
- else
- *part = '\0';
- } else {
- *part = '\0';
- }
- while (--part > buffer[i])
- if ((*part == ' ') || (*part =='\t')) *part = '\0';
- else break;
- }
- }
- if (*buffer[i] != ';') {
- if (strlen(files_to_copy) != 0)
- pstrcat(files_to_copy,",");
- pstrcat(files_to_copy,direc);
- pstrcat(files_to_copy,buffer[i]);
- fprintf(stderr,"%s%s\n",direc,buffer[i]);
- }
- i++;
- } /* end while */
- }
- part=strtok(NULL,",");
- if (part) {
- while( *part ==' ' && *part != '\0') {
- part++;
- }
- }
- } while (part!=NULL);
- fprintf(stderr,"\n");
-}
-
-
-static void scan_short_desc(FILE *fichier, char *short_desc)
-{
- int i=0;
- char *temp;
- char *copyfiles=0,*datasection=0;
-
- helpfile=0;
- languagemonitor=0;
- vendorsetup=0;
- datatype="RAW";
- if((temp=(char *)malloc(sizeof(pstring))) == NULL) {
- fprintf(stderr, "scan_short_desc: malloc fail !\n");
- exit(1);
- }
-
- driverfile=short_desc;
- datafile=short_desc;
-
- lookup_entry(fichier,short_desc);
-
- while(*buffer[i]!='\0') {
-#ifdef DEBUGIT
- fprintf(stderr,"\tLookup up of %s\n",buffer[i]);
-#endif
- if (strncasecmp(buffer[i],"CopyFiles",9)==0)
- copyfiles=scan(buffer[i],&temp);
- else if (strncasecmp(buffer[i],"DataSection",11)==0)
- datasection=scan(buffer[i],&temp);
- else if (strncasecmp(buffer[i],"DataFile",8)==0)
- datafile=scan(buffer[i],&temp);
- else if (strncasecmp(buffer[i],"DriverFile",10)==0)
- driverfile=scan(buffer[i],&temp);
- else if (strncasecmp(buffer[i],"HelpFile",8)==0)
- helpfile=scan(buffer[i],&temp);
- else if (strncasecmp(buffer[i],"LanguageMonitor",15)==0)
- languagemonitor=scan(buffer[i],&temp);
- else if (strncasecmp(buffer[i],"DefaultDataType",15)==0)
- datatype=scan(buffer[i],&temp);
- else if (strncasecmp(buffer[i],"VendorSetup",11)==0)
- vendorsetup=scan(buffer[i],&temp);
- i++;
- }
-
- if (datasection) {
- lookup_entry(fichier,datasection);
-
- i = 0;
- while(*buffer[i]!='\0') {
-#ifdef DEBUGIT
- fprintf(stderr,"\tLookup up of %s\n",buffer[i]);
-#endif
- if (strncasecmp(buffer[i],"CopyFiles",9)==0)
- copyfiles=scan(buffer[i],&temp);
- else if (strncasecmp(buffer[i],"DataSection",11)==0)
- datasection=scan(buffer[i],&temp);
- else if (strncasecmp(buffer[i],"DataFile",8)==0)
- datafile=scan(buffer[i],&temp);
- else if (strncasecmp(buffer[i],"DriverFile",10)==0)
- driverfile=scan(buffer[i],&temp);
- else if (strncasecmp(buffer[i],"HelpFile",8)==0)
- helpfile=scan(buffer[i],&temp);
- else if (strncasecmp(buffer[i],"LanguageMonitor",15)==0)
- languagemonitor=scan(buffer[i],&temp);
- else if (strncasecmp(buffer[i],"DefaultDataType",15)==0)
- datatype=scan(buffer[i],&temp);
- else if (strncasecmp(buffer[i],"VendorSetup",11)==0)
- vendorsetup=scan(buffer[i],&temp);
- i++;
- }
- }
-
- if (languagemonitor) {
- temp = strtok(languagemonitor,",");
- if (*temp == '"') ++temp;
- pstrcpy(languagemonitor,temp);
- if ((temp = strchr_m(languagemonitor,'"'))!=NULL) *temp = '\0';
- }
-
- if (i) fprintf(stderr,"End of section found\n");
-
- fprintf(stderr,"CopyFiles: %s\n",
- copyfiles?copyfiles:"(null)");
- fprintf(stderr,"Datasection: %s\n",
- datasection?datasection:"(null)");
- fprintf(stderr,"Datafile: %s\n",
- datafile?datafile:"(null)");
- fprintf(stderr,"Driverfile: %s\n",
- driverfile?driverfile:"(null)");
- fprintf(stderr,"Helpfile: %s\n",
- helpfile?helpfile:"(null)");
- fprintf(stderr,"LanguageMonitor: %s\n",
- languagemonitor?languagemonitor:"(null)");
- fprintf(stderr,"VendorSetup: %s\n",
- vendorsetup?vendorsetup:"(null)");
- if (copyfiles) scan_copyfiles(fichier,copyfiles);
-}
-
-int main(int argc, char *argv[])
-{
- char *short_desc;
- FILE *inf_file;
-
- if (argc!=3)
- {
- usage(argv[0]);
- return(-1);
- }
-
- inf_file=sys_fopen(argv[1],"r");
- if (!inf_file)
- {
- fprintf(stderr,"Description file not found, bye\n");
- return(-1);
- }
-
- lookup_strings(inf_file);
-
- short_desc=find_desc(inf_file,argv[2]);
- if (short_desc==NULL)
- {
- fprintf(stderr,"Printer not found\n");
- return(-1);
- }
- else fprintf(stderr,"Found:%s\n",short_desc);
-
- lookup_entry(inf_file,"DestinationDirs");
- build_subdir();
-
- if((files_to_copy=(char *)malloc(2048*sizeof(char))) == NULL) {
- fprintf(stderr, "%s: malloc fail.\n", argv[0] );
- exit(1);
- }
- *files_to_copy='\0';
- scan_short_desc(inf_file,short_desc);
- fprintf(stdout,"%s:%s:%s:",
- argv[2],driverfile,datafile);
- fprintf(stdout,"%s:",
- helpfile?helpfile:"");
- fprintf(stdout,"%s:",
- languagemonitor?languagemonitor:"");
- fprintf(stdout,"%s:",datatype);
- fprintf(stdout,"%s\n",files_to_copy);
- return 0;
-}
-