Article View: comp.sources.atari.st
Article #144v03i003: uustuff -- More uud-ing tools
From: Steven Grimm
Date: Tue, 31 Oct 1989 23:52
Date: Tue, 31 Oct 1989 23:52
355 lines
11549 bytes
11549 bytes
Submitted-by: uunet!gmdzi!focke (Stefan Focke)
Posting-number: Volume 3, Issue 3
Archive-name: uustuff
Hello net-world!
This archive contains some programs witch helps you to uudecode
files you got from the net on your UNIX-machine.
If you like it, send me a mail.
Stefan Focke (focke@gmdzi.UUCP)
#!/bin/sh
# shar: Shell Archiver (v1.22)
#
# Run the following text with /bin/sh to create:
# liesmich.txt
# readme.txt
# uu_cat.c
# uu_rename.c
#
sed 's/^X//' << 'SHAR_EOF' > liesmich.txt &&
X
XBei meinen Bemuehungen ein paar Programme vom Netz auf meinen ST zu holen,
Xstiess ich immer wieder auf Probleme:
X
XDateien, die ich vom "news reader" aus auf Platte geschrieben
Xhatte, waren, da der in der Uebersichtsliste angezeigte Titel nicht mit
Xdem uebereinstimmt, der hinter dem 'begin' der ua?-Datei steht, mit
Xeinem falschen Namen versehen. Das fuehrt dann dazu, dass wenn spaeter
Xauf dem ST "uudecode" ausgefuehrt wird, Programme, die aus meherern
XTeilen bestehen, nicht mehr zusammengesetzt werden koennen. Stattdessen
Xmuessen die Dateien erst umbenannt werden.
X
XDie weiteren Aufgaben der beiliegenden Programme sind, das uudecode
Xbereits auf der Unix-Maschine durchzufuehren und die entstehenden ARC-Files
Xauf Fehler zu ueberpruefen.
X
X
X
XBenutzung der Programme:
X
X- Vorbereitung: Compilieren der beiden C-Quellen
X /* Dies sind meine ersten C-Programme. Kleine Schoenheitsfehler,
X die alten C-Freaks die Haare zu Berge stehen lassen, koennen
X daher durchaus enthalten sein. */
X cc -o uu_rename.exe uu_rename
X cc -o uu_cat.exe uu_cat
X chmod u+x uu_rename
X chmod u+x uu_cat
X
X- Speichern der einzelnen Teile eines vom Netz kommenden Programmes
X unter einem beliebigen Namen. Die Extension sollte jedoch die Form
X "ua?" haben.
X
X- Aufruf von uu_rename
X Es werden alle "ua?"-Dateien bearbeitet. In den Dateien wird der hinter
X "begin" stehende Dateiname gesucht und die Datei dementsprechend
X umbenannt. Falls dieser Name nicht auf "ua?" endet, wird "uaa" als
X Endung verwendet. Vor dem Umbenennen wird noch getestet, ob es die
X Datei in die umbenannt werden soll bereits gibt. Falls dem so ist,
X wird dies angezeigt und das Umbenennen nicht durchgefuehrt.
X
X- Aufruf von uu_cat
X Da das uudecode meines UNIX-Rechners keine Dateien zusammensetzen kann,
X also nicht mit den include-Anweisungen am Ende einer "ua?"-Datei arbeiten
X kann, fuegt dieses Programm die Teile, aus denen die Datei besteht
X zusammen. Es entsteht eine ".enc"-Datei, die die fuer "uudecode"
X notwendigen Teile beinhaltete, sowie ein ".txt"-Datei, die Information,
X die in der ".uaa"-Datei vor "table" steht, beinhaltet.
X Nach dem Zusammensetzen wird uudecode aufgerufen. Anschliessend
X wird auch "arc" mit den Optionen -v und -t ausgefuehrt.
X
X
XViel Erfolg
X
X Stefan Focke (focke@gmdzi.UUCP)
SHAR_EOF
chmod 0600 liesmich.txt || echo "restore of liesmich.txt fails"
sed 's/^X//' << 'SHAR_EOF' > readme.txt &&
X
XI had some Problems trying to get programs from the net.
X
XFiles I saved from the "news reader" often have wrong names, so "uudecode"
Xon my ST was not able to include all the files it needed. I had to
Xrename some files.
X
XThe other things the programs do are to uudecode the files on the UNIX-
Xmachine an to test, if the "ARC"-files are ok.
X
X
XHow to use:
X
X- Compile the C-sources
X /* These are my first C-programs. So it is possible, that
X they are not optimized */
X cc -o uu_rename.exe uu_rename.c
X cc -o uu_cat.exe uu_cat.c
X chmod u+x uu_rename
X chmod u+x uu_cat
X
X- Save the files coming from the net to your UNIX-disk. The name that you
X give to the file has the only restriction, that the extension must
X be of the form ".ua?"
X
X- Execute uu_rename
X This program changes the names of all "ua?"-files to the name, witch
X stands behind "begin" in this file. If a file with the new name exists
X the program prints a message.
X
X- Execute uu_cat
X This program puts a multi-part-file (uaa, uab, ) together to a
X ".enc"-file. The text befor "table" in the "uaa"-file is written
X into a ".txt"-file.
X Then the batch-files executes uudecode and "arc -v" and "arc -t"
X
X
XGood luck
X
X Stefan Focke (focke@gmdzi.UUCP)
SHAR_EOF
chmod 0600 readme.txt || echo "restore of readme.txt fails"
sed 's/^X//' << 'SHAR_EOF' > uu_cat.c &&
X#include <stdio.h>
X
X#define MAXLINE 200
X#define TRUE 0
X#define FALSE 225
X
Xmain()
X{ int len,Flag;
X char line[MAXLINE],line2[MAXLINE];
X
X /* Lesen der Dateinamen aus dem Standard-Input */
X /* Jede Zeile ist ein Dateiname */
X while ( fgets(line,MAXLINE,stdin) != NULL ) {
X line[strlen(line)-1] = '\0';
X BearbeiteDatei(line);
X }
X}
X
X
XBearbeiteDatei(FileName)
Xchar FileName[MAXLINE];
X{
X FILE *fin, *fout;
X char line[MAXLINE],HelpStr[MAXLINE];
X char NeuFile[MAXLINE];
X char FileExt[8];
X int OpenError,FileFlag;
X
X printf("\nOpen file %s",FileName); printf("\n");
X fin = fopen(FileName,"r");
X FileExt[0] = '\0';
X strcat(FileExt,".uaa");
X extract(FileName,0,strlen(FileName)-4,FileName);
X
X HelpStr[0]='\0'; strcat(HelpStr,FileName);
X strcat(HelpStr,".txt");
X fout = fopen(HelpStr,"w");
X
X OpenError = FALSE; FileFlag = FALSE;
X while ( fgets(line,MAXLINE,fin) != NULL ) {
X extract(line,0,5,HelpStr);
X if ( FileFlag = FALSE &&
X (strcmp(HelpStr,"table")==0 || strcmp(HelpStr,"begin")==0) ) {
X FileFlag = TRUE;
X fclose(fout);
X HelpStr[0] = '\0';
X strcat(HelpStr,FileName);
X strcat(HelpStr,".enc");
X fout = fopen(HelpStr,"w");
X }
X
X extract(line,0,3,HelpStr);
X if ( strcmp(HelpStr,"end") == 0 ) {
X fputs("end",fout);
X break;
X }
X
X extract(line,0,7,HelpStr);
X if ( strcmp(HelpStr,"include") == 0 ) {
X /* Oeffnen der neuen Datei, lesen bis hinter den Header */
X fclose(fin);
X extract(line,8,14,HelpStr); HelpStr[strlen(HelpStr)] = '\0';
X printf(" %s", HelpStr);
X if ((fin = fopen(HelpStr,"r")) == NULL ) {
X printf (" not found\n");
X OpenError = TRUE;
X break;
X }
X printf("\n");
X while ( fgets(line,MAXLINE,fin) != NULL ) {
X extract(line,0,5,HelpStr);
X if ( strcmp(HelpStr,"begin") == 0 )
X break;
X }
X fgets(line,MAXLINE,fin);
X }
X
X fputs(line,fout);
X
X } /* end while */
X
X fputs("\n",fout);
X if (OpenError == FALSE)
X fclose(fin);
X fclose(fout);
X}
X
X
X/**************************************************************/
X/*********************** extract ****************************/
X/**************************************************************/
X
X/* Die Funktion schneidet aus der Zeichenkette 'str' ab
X Position 'Start' 'len' Buchstaben heraus. Das Resultat
X wird in 'Result' zurueckgegeben.
X*/
X
Xextract(str,start,len,result)
Xchar str[MAXLINE];
Xchar result[MAXLINE];
Xint start,len;
X
X{ int i;
X char temp[MAXLINE];
X
X for (i=0; i<len && str[start+i]!='\0' && str[start+i]!='\n'; ++i)
X temp[i]=str[i+start];
X temp[i]='\0';
X for (i=0; (result[i]=temp[i]) != '\0'; ++i);
X}
SHAR_EOF
chmod 0600 uu_cat.c || echo "restore of uu_cat.c fails"
sed 's/^X//' << 'SHAR_EOF' > uu_rename.c &&
X#include <stdio.h>
X
X#define MAXLINE 100
X#define TRUE 0
X#define FALSE 225
X
Xmain()
X{ int len,Flag;
X char line[MAXLINE],line2[MAXLINE];
X
X /* Lesen der Dateinamen aus dem Standard-Input */
X /* Jede Zeile ist ein Dateiname */
X while ( fgets(line,MAXLINE,stdin) != NULL ) {
X line[strlen(line)-1] = '\0';
X BearbeiteDatei(line);
X }
X}
X
X
XBearbeiteDatei(filename)
Xchar filename[MAXLINE];
X{
X FILE *fp, *ftest;
X char line[MAXLINE],line2[MAXLINE];
X char NeuFile[MAXLINE];
X char FileExt[8];
X int NeuLaenge;
X
X fp = fopen(filename,"r");
X while ( fgets(line,MAXLINE,fp) != NULL ) {
X extract(line,0,5,line2);
X if (strcmp("begin",line2) == 0) {
X extract(line,6,4,line2);
X if (strcmp("part",line2) == 0)
X extract(line,13,12,NeuFile);
X else
X extract(line,10,12,NeuFile);
X
X printf ("Old name : %12s",filename);
X printf (" new : %12s",NeuFile);
X /* Wenn die zu verwendende Endung nicht .ua? ist, */
X /* muss diese in .uaa umgesetzt werden. */
X NeuLaenge = strlen(NeuFile);
X extract(NeuFile,NeuLaenge-4,3,FileExt);
X if (strcmp(".ua",FileExt) != 0 ) {
X extract(NeuFile,0,NeuLaenge-4,NeuFile);
X strcat(NeuFile,".uaa");
X printf("\n changed : %12s",NeuFile);
X }
X
X if (strcmp(filename,NeuFile) != 0) {
X if ((ftest = fopen(NeuFile,"r")) != NULL) {
X printf (" new file existst\n");
X fclose(ftest);
X break;
X }
X }
X printf ("\n");
X rename (filename,NeuFile);
X break;
X }
X }
X fclose(fp);
X}
X
X
X
X/**************************************************************/
X/*********************** getline ****************************/
X/**************************************************************/
X
Xgetline(fp,s,lim)
Xchar s[];
Xint lim;
XFILE *fp;
X{ int c,i;
X
X for (i=0; i<lim-1 && (c=getc(fp))!=EOF && c!='\n'; ++i)
X s[i]=c;
X if (c=='\n') { s[i]=c; ++i; }
X s[i]='\0';
X return(i);
X}
X
X
X/**************************************************************/
X/*********************** extract ****************************/
X/**************************************************************/
X
X/* Die Funktion schneidet aus der Zeichenkette 'str' ab
X Position 'Start' 'len' Buchstaben heraus. Das Resultat
X wird in 'Result' zurueckgegeben.
X*/
X
Xextract(str,start,len,result)
Xchar str[MAXLINE];
Xchar result[MAXLINE];
Xint start,len;
X
X{ int i;
X char temp[MAXLINE];
X
X/*
X printf("\n");
X printf("extract: %s",str);
X printf(" %d",start); printf(" %d",len);
X printf("\n");
X*/
X for (i=0; i<len && str[start+i]!='\0' && str[start+i]!='\n'; ++i)
X temp[i]=str[i+start];
X temp[i]='\0';
X for (i=0; (result[i]=temp[i]) != '\0'; ++i);
X/* result = ""; strcat(result,temp);
X/* printf("Result %s",result); printf("\n"); */
X}
SHAR_EOF
chmod 0600 uu_rename.c || echo "restore of uu_rename.c fails"
exit 0
Technical Details
Message-ID:
<34657@grapevine.uucp>Path:
arc1-ca.pugleaf.net!wuarchive!gem.mps.ohio-state.edu!apple!sun-barr!newstop!sun!grapevine!koreth@panarthea.ebay.sun.comShow Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!wuarchive!gem.mps.ohio-state.edu!apple!sun-barr!newstop!sun!grapevine!koreth@panarthea.ebay.sun.com From: koreth@panarthea.ebay.sun.com (Steven Grimm) Newsgroups: comp.sources.atari.st Subject: v03i003: uustuff -- More uud-ing tools Keywords: shar, C Message-ID: <34657@grapevine.uucp> Date: 31 Oct 89 23:52:55 GMT Sender: news@grapevine.EBay Reply-To: uunet!gmdzi!focke (Stefan Focke) Lines: 355 Approved: koreth@panarthea.ebay.sun.com