rommel@lan.informatik.tu-muenchen.dbp.de (Kai-Uwe Rommel) (09/13/90)
A port of RCS 4.2 (revision control system, source code control system) to MS-DOS appeared with sources a few days ago in the comp.binaries.ibm.pc newsgroup. It can be recompiled for OS/2 using the patches below. To recompile, MS C 6.00 is required, 5.10 does not work (lib functions). To use it, you need GNU diff. The following changes were made: - Restrictions of file name length were removed, it should now work with HPFS names. Be shure to use the .DEF files because of the flag. - The author of the DOS port changed the interpretation of path names to recognize \ instead of / as separator *only*. I have tried to make it recognize *both* separators. I hope that I found all places. - On output, RCS converts path names now to lowercase and / separators. I think that's better because it is (originally) a Unix program. - Under Unix it is semantically correct to delete an open file but not under DOS and OS/2. This is used by RCS and was not corrected by the DOS port. DOS does not refuse deletetion of open files (DOS = dumb operating system) while OS/2 of course does so. Some changes were needed to correct this. - The USER environment variable is also recognized (besides USR). - A bug in the spawning routine caused redirected stdio files to remain open after the spawn and thus made them unremovable. Note: RCSMERGE does not (yet) work. In addition to GNU diff, it also requires diff3, sh and ed. I have all of them for OS/2 (sh should appear in comp. binaries.os2 real soon) but the ed clone seems to have problems handling output from GNU diff3. The shell script merge.sh was adapted to OS/2 and is included as merge.cmd in the following shar. I decided to post the diffs here because they are intended to OS/2 programmers and the original sources were not posted to comp.sources.?? so posting in comp.sources.bugs does not make much sense. Kai Uwe Rommel rommel@lan.informatik.tu-muenchen.dbp.de #!/bin/sh # This is a shell archive (shar 3.32) # made 09/10/1990 01:02 UTC by unknown@OS/2 # Source directory E:\ # # existing files will NOT be overwritten # # This shar contains: # length mode name # ------ ---------- ------------------------------------------ # 1773 -rw-rw-rw- readme # 22335 -rw-rw-rw- patches.os2 # 253 -rw-rw-rw- ci.cs # 244 -rw-rw-rw- co.cs # 143 -rw-rw-rw- ident.cs # 214 -rw-rw-rw- rcs.cs # 190 -rw-rw-rw- rcsclean.cs # 186 -rw-rw-rw- rcsdiff.cs # 211 -rw-rw-rw- rcsmerge.cs # 200 -rw-rw-rw- rlog.cs # 76 -rw-rw-rw- ci.def # 76 -rw-rw-rw- co.def # 79 -rw-rw-rw- ident.def # 77 -rw-rw-rw- rcs.def # 82 -rw-rw-rw- rcsclean.def # 81 -rw-rw-rw- rcsdiff.def # 82 -rw-rw-rw- rcsmerge.def # 78 -rw-rw-rw- rlog.def # 751 -rw-rw-rw- merge.cmd # if touch 2>&1 | fgrep 'amc' > /dev/null then TOUCH=touch else TOUCH=true fi # ============= readme ============== if test X"$1" != X"-c" -a -f 'readme'; then echo "File already exists: skipping 'readme'" else echo "x - extracting readme (Text)" sed 's/^X//' << 'SHAR_EOF' > readme && XA port of RCS 4.2 (revision control system, source code control system) Xto MS-DOS appeared with sources a few days ago in the comp.binaries.ibm.pc Xnewsgroup. It can be recompiled for OS/2 using the patches below. X XTo recompile, MS C 6.00 is required, 5.10 does not work (lib functions). XTo use it, you need GNU diff. X XThe following changes were made: X- Restrictions of file name length were removed, it should now work X with HPFS names. Be shure to use the .DEF files because of the flag. X- The author of the DOS port changed the interpretation of path names X to recognize \ instead of / as separator *only*. I have tried to make X it recognize *both* separators. I hope that I found all places. X- On output, RCS converts path names now to lowercase and / separators. X I think that's better because it is (originally) a Unix program. X- Under Unix it is semantically correct to delete an open file but not X under DOS and OS/2. This is used by RCS and was not corrected by the X DOS port. DOS does not refuse deletetion of open files (DOS = dumb X operating system) while OS/2 of course does so. Some changes were X needed to correct this. X- The USER environment variable is also recognized (besides USR). X- A bug in the spawning routine caused redirected stdio files to X remain open after the spawn and thus made them unremovable. X XNote: XRCSMERGE does not (yet) work. In addition to GNU diff, it also requires Xdiff3, sh and ed. I have all of them for OS/2 (sh should appear in comp. Xbinaries.os2 real soon) but the ed clone seems to have problems handling Xoutput from GNU diff3. The shell script merge.sh was adapted to OS/2 Xand is included as merge.cmd in the following shar. X X XKai Uwe Rommel Xrommel@lan.informatik.tu-muenchen.dbp.de SHAR_EOF $TOUCH -am 0909180190 readme && chmod 0666 readme || echo "restore of readme failed" set `wc -c readme`;Wc_c=$1 if test "$Wc_c" != "1739"; then echo original size 1739, current size $Wc_c fi fi # ============= patches.os2 ============== if test X"$1" != X"-c" -a -f 'patches.os2'; then echo "File already exists: skipping 'patches.os2'" else echo "x - extracting patches.os2 (Text)" sed 's/^X//' << 'SHAR_EOF' > patches.os2 && Xdiff -cbBwr rcsdos/src/ci.c rcsos2/src/ci.c X*** rcsdos/src/ci.c Fri Sep 07 14:54:02 1990 X--- rcsos2/src/ci.c Sun Sep 09 13:15:32 1990 X*************** X*** 647,652 **** X--- 647,653 ---- X /* rewrite rest of RCS file */ X fastcopy(finptr,frewrite); X ffclose(frewrite); frewrite=NULL; X+ ffclose(finptr); finptr=NULL; X } X ignoreints(); X #ifdef MSDOS Xdiff -cbBwr rcsdos/src/co.c rcsos2/src/co.c X*** rcsdos/src/co.c Fri Sep 07 14:54:02 1990 X--- rcsos2/src/co.c Sun Sep 09 14:18:08 1990 X*************** X*** 144,150 **** X #endif X #ifdef MSDOS X static char co[] = CO; X! static char merge[] = "\genurcs\src\merge.bat"; X #else X static char co[] = CO; X static char merge[] = MERGE; X--- 144,150 ---- X #endif X #ifdef MSDOS X static char co[] = CO; X! static char merge[] = MERGE; X #else X static char co[] = CO; X static char merge[] = MERGE; X*************** X*** 436,441 **** X--- 436,442 ---- X /* rewrite the rest of the RCSfile */ X fastcopy(finptr,frewrite); X ffclose(frewrite); frewrite=NULL; X+ ffclose(finptr); finptr=NULL; X ignoreints(); X #ifdef MSDOS X if (Rename(newRCSfilename,RCSfilename) != 0 ) { Xdiff -cbBwr rcsdos/src/partime.c rcsos2/src/partime.c X*** rcsdos/src/partime.c Fri Sep 07 14:54:04 1990 X--- rcsos2/src/partime.c Sat Sep 08 23:11:58 1990 X*************** X*** 479,485 **** X { register char *cp, *mp; X register int c; X struct tmwent *lastptr; X! struct integ { int word; }; /* For getting at array ptr */ X int i; X X lastptr = 0; X--- 479,485 ---- X { register char *cp, *mp; X register int c; X struct tmwent *lastptr; X! struct integ { long word; }; /* For getting at array ptr */ X int i; X X lastptr = 0; Xdiff -cbBwr rcsdos/src/rcs.c rcsos2/src/rcs.c X*** rcsdos/src/rcs.c Fri Sep 07 14:54:04 1990 X--- rcsos2/src/rcs.c Sun Sep 09 13:14:04 1990 X*************** X*** 641,646 **** X--- 641,647 ---- X } X } X ffclose(frewrite); frewrite = NULL; X+ ffclose(finptr); finptr=NULL; X if ( ! nerror ) { /* move temporary file to RCS file if no error */ X ignoreints(); /* ignore interrupts */ X #ifdef MSDOS Xdiff -cbBwr rcsdos/src/rcsbase.h rcsos2/src/rcsbase.h X*** rcsdos/src/rcsbase.h Fri Sep 07 14:54:04 1990 X--- rcsos2/src/rcsbase.h Sun Sep 09 16:27:32 1990 X*************** X*** 191,205 **** X #define revlength 30 /* max. length of revision numbers */ X #define datelength 20 /* length of a date in RCS format */ X #define joinlength 20 /* number of joined revisions permitted */ X- #ifdef MSDOS /* Added by $Author: lfk $ */ X- # ifdef MKS X- # define RCSDIR "rcs/" /* subdirectory for RCS files */ X- # else X- # define RCSDIR "RCS\\" /* subdirectory for RCS files */ X- # endif /* MKS */ X- #else X #define RCSDIR "RCS/" /* subdirectory for RCS files */ X- #endif /* MSDOS */ X #ifdef MSDOS /* Added by $Author: lfk $ */ X #define RCSSUF '\0' /* suffix for RCS files */ X #define RCSSEP '\0' /* separator for RCSSUF */ X--- 191,197 ---- X*************** X*** 215,222 **** X # define NCPPN 1024 /* number of characters per pathname */ X #else X #ifdef MSDOS /* Added by $Author: lfk $ */ X! # define NCPFN 13 /* number of characters per filename */ X! # define NCPPN 66 /* number of characters per pathname */ X #else X # define NCPFN 14 /* number of characters per filename */ X # define NCPPN 6*NCPFN /* number of characters per pathname */ X--- 207,214 ---- X # define NCPPN 1024 /* number of characters per pathname */ X #else X #ifdef MSDOS /* Added by $Author: lfk $ */ X! # define NCPFN 256 /* number of characters per filename */ X! # define NCPPN 256 /* number of characters per pathname */ X #else X # define NCPFN 14 /* number of characters per filename */ X # define NCPPN 6*NCPFN /* number of characters per pathname */ Xdiff -cbBwr rcsdos/src/rcsclean.c rcsos2/src/rcsclean.c X*** rcsdos/src/rcsclean.c Fri Sep 07 14:54:04 1990 X--- rcsos2/src/rcsclean.c Sun Sep 09 12:38:44 1990 X*************** X*** 72,77 **** X--- 72,79 ---- X * X */ X #include "rcsbase.h" X+ #include <sys/types.h> X+ #include <sys/stat.h> X #define ERRCODE 2 /*error code for exit status */ X static char rcsbaseid[] = RCSBASE; X X*************** X*** 241,246 **** X--- 243,250 ---- X /* identical files; can remove working file */ X result=0; X diagnose("files identical; %s removed",workfilename); X+ fclose(file2); X+ chmod(workfilename, S_IREAD | S_IWRITE); X if (unlink(workfilename)!=0) { X error("Can't unlink %s",workfilename); X } Xdiff -cbBwr rcsdos/src/rcsedit.c rcsos2/src/rcsedit.c X*** rcsdos/src/rcsedit.c Fri Sep 07 14:54:04 1990 X--- rcsos2/src/rcsedit.c Sun Sep 09 16:20:28 1990 X*************** X*** 493,504 **** X VOID putc(VDELIM,out); VOID putc(' ',out); X if (marker==Id) X #ifdef MSDOS X- # ifdef MKS X VOID fputs(bindex(RCSfilename,'/'),out); X # else X- VOID fputs(bindex(RCSfilename,'\\'),out); X- # endif X- #else X VOID fputs(bindex(RCSfilename,'/'),out); X #endif /* MSDOS */ X else VOID fputs(getfullRCSname(),out); X--- 493,500 ---- X*************** X*** 515,529 **** X break; X case Log: X VOID fprintf(out, "%c\t%s %c\n%sRevision %s ", X- #ifdef MSDOS X- # ifdef MKS X- VDELIM, bindex(RCSfilename,'/'), KDELIM, Comment, delta->num); X- # else X- VDELIM, bindex(RCSfilename,'\\'), KDELIM, Comment, delta->num); X- # endif X- #else X VDELIM, bindex(RCSfilename,'/'), KDELIM, Comment, delta->num); X! #endif /* MSDOS */ X VOID PRINTDATE(out,date);VOID fputs(" ",out);VOID PRINTTIME(out,date); X VOID fprintf(out, " %s\n%s",delta->author,Comment); X /* do not include state here because it may change and is not updated*/ X--- 511,518 ---- X break; X case Log: X VOID fprintf(out, "%c\t%s %c\n%sRevision %s ", X VDELIM, bindex(RCSfilename,'/'), KDELIM, Comment, delta->num); X! /* VDELIM, bindex(RCSfilename,'\\'), KDELIM, Comment, delta->num); */ X VOID PRINTDATE(out,date);VOID fputs(" ",out);VOID PRINTTIME(out,date); X VOID fprintf(out, " %s\n%s",delta->author,Comment); X /* do not include state here because it may change and is not updated*/ X*************** X*** 532,546 **** X /* Comment is the comment leader */ X break; X case RCSfile: X! #ifdef MSDOS X! # ifdef MKS X! VOID fprintf(out,"%c %s %c",VDELIM,bindex(RCSfilename,'/'),KDELIM); X! # else X! VOID fprintf(out,"%c %s %c",VDELIM,bindex(RCSfilename,'\\'),KDELIM); X! # endif X! #else X VOID fprintf(out,"%c %s %c",VDELIM,bindex(RCSfilename,'/'),KDELIM); X- #endif /* MSDOS */ X break; X case Revision: X VOID fprintf(out,"%c %s %c",VDELIM,delta->num,KDELIM); X--- 521,528 ---- X /* Comment is the comment leader */ X break; X case RCSfile: X! /* VOID fprintf(out,"%c %s %c",VDELIM,bindex(RCSfilename,'\\'),KDELIM); */ X VOID fprintf(out,"%c %s %c",VDELIM,bindex(RCSfilename,'/'),KDELIM); X break; X case Revision: X VOID fprintf(out,"%c %s %c",VDELIM,delta->num,KDELIM); X*************** X*** 555,560 **** X VOID putc(KDELIM,out); X break; X } X- } X- X X--- 537,540 ---- Xdiff -cbBwr rcsdos/src/rcsfnms.c rcsos2/src/rcsfnms.c X*** rcsdos/src/rcsfnms.c Fri Sep 07 14:54:04 1990 X--- rcsos2/src/rcsfnms.c Sun Sep 09 16:27:02 1990 X*************** X*** 142,147 **** X--- 142,148 ---- X #include <sys/types.h> X #include <sys/stat.h> X #ifdef MSDOS X+ #include <stdlib.h> X #include <direct.h> X #else X #include <sys/dir.h> X*************** X*** 360,376 **** X if ((tp=tfnames[freefilename])==nil) X tp=tfnames[freefilename] = talloc(NCPPN); X #ifdef MSDOS X! # ifdef MKS X! if (fullpath!=nil && (lastslash=rindex(fullpath,'/'))!=0) { X! # else X! if (fullpath!=nil && (lastslash=rindex(fullpath,'\\'))!=0) { X! # endif X #else X if (fullpath!=nil && (lastslash=rindex(fullpath,'/'))!=0) { X- #endif /* MSDOS */ X /* copy path */ X while (fullpath<=lastslash) *tp++ = *fullpath++; X } X while (*tp++ = *filename++); X return (mktemp(tfnames[freefilename++])); X } X--- 361,378 ---- X if ((tp=tfnames[freefilename])==nil) X tp=tfnames[freefilename] = talloc(NCPPN); X #ifdef MSDOS X! if (fullpath!=nil) X! if ( (lastslash=rindex(fullpath,'/'))!=0 || X! (lastslash=rindex(fullpath,'\\'))!=0) { X! /* copy path */ X! while (fullpath<=lastslash) *tp++ = *fullpath++; X! } X #else X if (fullpath!=nil && (lastslash=rindex(fullpath,'/'))!=0) { X /* copy path */ X while (fullpath<=lastslash) *tp++ = *fullpath++; X } X+ #endif /* MSDOS */ X while (*tp++ = *filename++); X return (mktemp(tfnames[freefilename++])); X } X*************** X*** 423,428 **** X--- 425,442 ---- X } X X X+ #ifdef MSDOS X+ void _unixpath(char *pathbuf) X+ { X+ int i; X+ X+ strlwr(pathbuf); X+ X+ for ( i = 0; i <= strlen(pathbuf); i++) X+ if(pathbuf[i] == '\\') X+ pathbuf[i] = '/'; X+ } X+ #endif X X char * findpairfile(argc, argv, fname) X int argc; char * argv[], *fname; X*************** X*** 437,448 **** X X for (next = argv, count = argc; count>0; next++,count--) { X #ifdef MSDOS X! # ifdef MKS X! if ((*next != nil) && strcmp(bindex(*next,'/'),fname)==0) { X # else X- if ((*next != nil) && strcmp(bindex(*next,'\\'),fname)==0) { X- # endif X- #else X if ((*next != nil) && strcmp(bindex(*next,'/'),fname)==0) { X #endif /* MSDOS */ X /* bindex finds the beginning of the file name stem */ X--- 451,460 ---- X X for (next = argv, count = argc; count>0; next++,count--) { X #ifdef MSDOS X! if ((*next != nil) && X! (strcmp(bindex(*next,'/'),fname)==0 || X! strcmp(bindex(*next,'\\'),fname)==0)) { X #else X if ((*next != nil) && strcmp(bindex(*next,'/'),fname)==0) { X #endif /* MSDOS */ X /* bindex finds the beginning of the file name stem */ X*************** X*** 484,489 **** X--- 496,502 ---- X char * lastsep, * purefname, * pureRCSname; X int opened, returncode; X #ifdef MSDOS X+ char *help; X struct stat dirstat; X #endif /* MSDOS */ X char * RCS1; X*************** X*** 500,519 **** X X /* first check suffix to see whether it is an RCS file or not */ X #ifdef MSDOS X- # ifdef MKS X purefname=bindex(*argv, '/'); /* skip path */ X! # else X! purefname=bindex(*argv, '\\'); /* skip path */ X! # endif X #else X purefname=bindex(*argv, '/'); /* skip path */ X #endif /* MSDOS */ X #ifdef MSDOS X! # ifdef MKS X! if( ( pureRCSname = strstr( *argv, "rcs/" ) ) != NULL){ X! #else X! if( ( pureRCSname = strstr( *argv, "RCS\\" ) ) != NULL){ X! #endif X /* RCS file name given*/ X RCS1 = (*argv); X /* derive workfilename*/ X--- 513,528 ---- X X /* first check suffix to see whether it is an RCS file or not */ X #ifdef MSDOS X purefname=bindex(*argv, '/'); /* skip path */ X! if ( (help=bindex(*argv, '\\')) > purefname ) X! purefname = help; X #else X purefname=bindex(*argv, '/'); /* skip path */ X #endif /* MSDOS */ X #ifdef MSDOS X! if ( (pureRCSname = strstr(*argv, "rcs/")) != NULL || X! (pureRCSname = strstr(*argv, "rcs\\")) != NULL || X! (pureRCSname = strstr(*argv, "RCS\\")) != NULL ) { X /* RCS file name given*/ X RCS1 = (*argv); X /* derive workfilename*/ X*************** X*** 533,560 **** X /* working file given; now try to find RCS file */ X workfilename=*argv; X /* derive RCS file name*/ X- # ifdef MKS X strcpy( tempfilename, "rcs/" ); X- # else X- strcpy( tempfilename, "RCS\\" ); X- # endif X strcat( tempfilename, purefname ); X RCS1=findpairfile(argc-1,argv+1,tempfilename); X! # ifdef MKS X! pureRCSname = strstr( RCS1, "rcs/" ); X! # else X pureRCSname = strstr( RCS1, "RCS\\" ); X- # endif X if (strlen(pureRCSname)>NCPFN+4) { X error("working file name %s too long",workfilename); X return 0; X } X } X! # ifdef MKS X! if( strchr( workfilename, '/' ) != NULL ){ X! # else X! if( strchr( workfilename, '\\' ) != NULL ){ X! # endif X error("Sorry, file name %s confuse RCS", workfilename ); X return 0; X } X--- 542,560 ---- X /* working file given; now try to find RCS file */ X workfilename=*argv; X /* derive RCS file name*/ X strcpy( tempfilename, "rcs/" ); X strcat( tempfilename, purefname ); X RCS1=findpairfile(argc-1,argv+1,tempfilename); X! if ( (pureRCSname = strstr(RCS1, "rcs/")) == NULL ) X! if ( (pureRCSname = strstr(RCS1, "rcs\\")) == NULL ) X pureRCSname = strstr(RCS1, "RCS\\"); X if (strlen(pureRCSname)>NCPFN+4) { X error("working file name %s too long",workfilename); X return 0; X } X } X! if( strchr( workfilename, '/' ) != NULL || X! strchr( workfilename, '\\' ) != NULL ){ X error("Sorry, file name %s confuse RCS", workfilename ); X return 0; X } X*************** X*** 700,705 **** X--- 700,709 ---- X /* file names was given in the argument list */ X warn("Option -p is set; ignoring output file %s",workfilename); X X+ #ifdef MSDOS X+ _unixpath(RCSfilename); X+ _unixpath(workfilename); X+ #endif X return returncode; X } X X*************** X*** 709,715 **** X * Calls getwd(), but only once. X * removes leading "../" and "./". X */ X! { static char pathbuf[NCPPN]; X static char namebuf[NCPPN]; X static int pathlength; X X--- 713,727 ---- X * Calls getwd(), but only once. X * removes leading "../" and "./". X */ X! { X! #ifdef MSDOS X! static char pathbuf[NCPPN]; X! X! _fullpath(pathbuf, RCSfilename, sizeof(pathbuf)); X! _unixpath(pathbuf); X! return pathbuf; X! #else X! static char pathbuf[NCPPN]; X static char namebuf[NCPPN]; X static int pathlength; X X*************** X*** 716,732 **** X register char * realname, * lastpathchar; X register int dotdotcounter, realpathlength; X X- #ifdef MSDOS X- /* Treat a full path name containing the drive name */ X- /* Added by $Author: lfk $ */ X- # ifdef MKS X- if (RCSfilename[1] == ':' && RCSfilename[2] == '/') { X- # else X- if (RCSfilename[1] == ':' && RCSfilename[2] == '\\') { X- # endif X- #else X if (*RCSfilename=='/') { X- #endif /* MSDOS */ X return(RCSfilename); X } else { X if (pathlength==0) { /*call curdir for the first time*/ X--- 728,734 ---- X*************** X*** 733,781 **** X if (getwd(pathbuf)==NULL) X faterror("Can't build current directory path"); X pathlength=strlen(pathbuf); X- #ifdef MSDOS X- /* Generally, a MSDOS path name seems to be like "A:\" */ X- /* Added by $Author: lfk $ */ X- # ifdef MKS X- if (!((pathlength==3) && (pathbuf[2]=='/'))) { X- pathbuf[pathlength++]='/'; X- # else X- if (!((pathlength==3) && (pathbuf[2]=='\\'))) { X- pathbuf[pathlength++]='\\'; X- # endif X- /* Check needed because some getwd implementations */ X- /* generate "/" for the root. */ X- } X- #else X if (!((pathlength==1) && (pathbuf[0]=='/'))) { X pathbuf[pathlength++]='/'; X /* Check needed because some getwd implementations */ X /* generate "/" for the root. */ X } X- #endif /* MSDOS */ X } X /*the following must be redone since RCSfilename may change*/ X /* find how many ../ to remvove from RCSfilename */ X dotdotcounter =0; X realname = RCSfilename; X- #ifdef MSDOS /* Chaged '/' to '\\' : By $Author: lfk $ */ X- while( realname[0]=='.' && X- # ifdef MKS X- (realname[1]=='/'||(realname[1]=='.'&&realname[2]=='/'))){ X- if (realname[1]=='/') { X- # else X- (realname[1]=='\\'||(realname[1]=='.'&&realname[2]=='\\'))){ X- if (realname[1]=='\\') { X- # endif X- /* drop leading ./ */ X- realname += 2; X- } else { X- /* drop leading ../ and remember */ X- dotdotcounter++; X- realname += 3; X- } X- } X- #else X while( realname[0]=='.' && X (realname[1]=='/'||(realname[1]=='.'&&realname[2]=='/'))){ X if (realname[1]=='/') { X--- 735,750 ---- X*************** X*** 787,807 **** X realname += 3; X } X } X- #endif /* MSDOS */ X /* now remove dotdotcounter trailing directories from pathbuf*/ X lastpathchar=pathbuf + pathlength-1; X while (dotdotcounter>0 && lastpathchar>pathbuf) { X /* move pointer backwards over trailing directory */ X lastpathchar--; X- #ifdef MSDOS X- # ifdef MKS X if (*lastpathchar=='/') { X- # else X- if (*lastpathchar=='\\') { X- # endif X- #else X- if (*lastpathchar=='/') { X- #endif /* MSDOS */ X dotdotcounter--; X } X } X--- 756,767 ---- X*************** X*** 816,821 **** X--- 776,782 ---- X return(namebuf); X } X } X+ #endif X } X X /* In MSDOS and (perhaps) OS/2, any directries are writable. */ X*************** X*** 954,966 **** X { X int a,i; X (void)getcwd(name, NCPPN); X- #ifdef MKS X strlwr(name); X a = strlen(name); X for ( i = 0; i <= a; i++) X if(name[i] == '\\') X name[i] = '/'; X- #endif X return name; X } X #endif /* MSODS */ X--- 915,925 ---- Xdiff -cbBwr rcsdos/src/rcsmerge.c rcsos2/src/rcsmerge.c X*** rcsdos/src/rcsmerge.c Fri Sep 07 14:54:06 1990 X--- rcsos2/src/rcsmerge.c Sun Sep 09 14:12:18 1990 X*************** X*** 270,276 **** X X if ( X tostdout X! #if defined(MSDOS) && defined(MKS) X ? run((char*)nil,(char*)nil,"sh",merge,"-p",workfilename,temp1file,temp2file,workfilename,rev2,(char*)nil) X : run((char*)nil,(char*)nil,"sh",merge, workfilename,temp1file,temp2file,workfilename,rev2,(char*)nil)) { X #else X--- 270,276 ---- X X if ( X tostdout X! #ifdef MSDOS X ? run((char*)nil,(char*)nil,"sh",merge,"-p",workfilename,temp1file,temp2file,workfilename,rev2,(char*)nil) X : run((char*)nil,(char*)nil,"sh",merge, workfilename,temp1file,temp2file,workfilename,rev2,(char*)nil)) { X #else Xdiff -cbBwr rcsdos/src/rcsutil.c rcsos2/src/rcsutil.c X*** rcsdos/src/rcsutil.c Fri Sep 07 14:54:06 1990 X--- rcsos2/src/rcsutil.c Sun Sep 09 14:35:36 1990 X*************** X*** 167,181 **** X * If the uid is root, tries to get the true login with getlogin(). X */ X { X! char *name = "ROOT_DOS"; X char *tmpname; X #ifdef MSDOS X # ifndef MKS X! if ((tmpname = getenv("USR")) != NULL); X # else X! if ((tmpname = getenv("LOGNAME")) != NULL); X # endif X name = tmpname; X return name; X #else X int uid; X--- 167,183 ---- X * If the uid is root, tries to get the true login with getlogin(). X */ X { X! char *name = "Unknown"; X char *tmpname; X #ifdef MSDOS X # ifndef MKS X! if ((tmpname = getenv("USR")) != NULL) X # else X! if ((tmpname = getenv("LOGNAME")) != NULL) X # endif X name = tmpname; X+ else if ((tmpname = getenv("USER")) != NULL) X+ name = tmpname; X return name; X #else X int uid; X*************** X*** 516,528 **** X register char **inoutargs; X { X #ifdef MSDOS X! int result; X X if (fflush(stdout) == EOF || fflush(stderr) == EOF) X return -1; X tryopen(fileno(stdin), inoutargs[0], 0); X tryopen(fileno(stdout), inoutargs[1], -1); X result = spawnvp( 0, inoutargs[2], &inoutargs[2] ); X return result; X #else X int pid; X--- 518,536 ---- X register char **inoutargs; X { X #ifdef MSDOS X! int result, si, so; X X if (fflush(stdout) == EOF || fflush(stderr) == EOF) X return -1; X+ si = dup(0); X+ so = dup(1); X tryopen(fileno(stdin), inoutargs[0], 0); X tryopen(fileno(stdout), inoutargs[1], -1); X result = spawnvp( 0, inoutargs[2], &inoutargs[2] ); X+ dup2(si, 0); X+ dup2(so, 1); X+ close(si); X+ close(so); X return result; X #else X int pid; SHAR_EOF $TOUCH -am 0909165090 patches.os2 && chmod 0666 patches.os2 || echo "restore of patches.os2 failed" set `wc -c patches.os2`;Wc_c=$1 if test "$Wc_c" != "21666"; then echo original size 21666, current size $Wc_c fi fi # ============= ci.cs ============== if test X"$1" != X"-c" -a -f 'ci.cs'; then echo "File already exists: skipping 'ci.cs'" else echo "x - extracting ci.cs (Text)" sed 's/^X//' << 'SHAR_EOF' > ci.cs && X(-W1 -DUSG -DSTRICT_LOCKING=1 -DGNUDIFF X-DCO=\"co.exe\" -DDIFF=\"diff.exe\" Xci.c rcslex.c rcssyn.c rcsgen.c rcsedit.c Xrcskeys.c rcsrev.c rcsutil.c rcsfnms.c partime.c Xmaketime.c rcskeep.c rcsfcmp.c X) Xsetargv.obj Xci.exe Xci.def X-AS -LB -S0x2000 SHAR_EOF $TOUCH -am 0908231590 ci.cs && chmod 0666 ci.cs || echo "restore of ci.cs failed" set `wc -c ci.cs`;Wc_c=$1 if test "$Wc_c" != "243"; then echo original size 243, current size $Wc_c fi fi # ============= co.cs ============== if test X"$1" != X"-c" -a -f 'co.cs'; then echo "File already exists: skipping 'co.cs'" else echo "x - extracting co.cs (Text)" sed 's/^X//' << 'SHAR_EOF' > co.cs && X(-W1 -DUSG -DSTRICT_LOCKING=1 X-DCO=\"co.exe\" -DDIFF=\"diff.exe\" -DMERGE=\"merge.cmd\" Xco.c rcslex.c rcssyn.c rcsgen.c rcsedit.c rcskeys.c Xrcsrev.c rcsutil.c rcsfnms.c partime.c maketime.c X) Xsetargv.obj Xco.exe Xco.def X-AS -LB -S0x2000 SHAR_EOF $TOUCH -am 0909141790 co.cs && chmod 0666 co.cs || echo "restore of co.cs failed" set `wc -c co.cs`;Wc_c=$1 if test "$Wc_c" != "235"; then echo original size 235, current size $Wc_c fi fi # ============= ident.cs ============== if test X"$1" != X"-c" -a -f 'ident.cs'; then echo "File already exists: skipping 'ident.cs'" else echo "x - extracting ident.cs (Text)" sed 's/^X//' << 'SHAR_EOF' > ident.cs && X(-W1 -DUSG -DSTRICT_LOCKING=1 X-DCO=\"co.exe\" -DDIFF=\"diff.exe\" Xident.c rcskeys.c X) Xsetargv.obj Xrcsid.exe Xident.def X-AS -LB -S0x2000 SHAR_EOF $TOUCH -am 0909134190 ident.cs && chmod 0666 ident.cs || echo "restore of ident.cs failed" set `wc -c ident.cs`;Wc_c=$1 if test "$Wc_c" != "135"; then echo original size 135, current size $Wc_c fi fi # ============= rcs.cs ============== if test X"$1" != X"-c" -a -f 'rcs.cs'; then echo "File already exists: skipping 'rcs.cs'" else echo "x - extracting rcs.cs (Text)" sed 's/^X//' << 'SHAR_EOF' > rcs.cs && X(-W1 -DUSG -DSTRICT_LOCKING=1 -DGNUDIFF X-DCO=\"co.exe\" -DDIFF=\"diff.exe\" Xrcs.c rcslex.c rcssyn.c rcsrev.c rcsutil.c Xrcsgen.c rcsedit.c rcskeys.c rcsfnms.c X) Xsetargv.obj Xrcs.exe Xrcs.def X-AS -LB -S0x2000 SHAR_EOF $TOUCH -am 0908232090 rcs.cs && chmod 0666 rcs.cs || echo "restore of rcs.cs failed" set `wc -c rcs.cs`;Wc_c=$1 if test "$Wc_c" != "205"; then echo original size 205, current size $Wc_c fi fi # ============= rcsclean.cs ============== if test X"$1" != X"-c" -a -f 'rcsclean.cs'; then echo "File already exists: skipping 'rcsclean.cs'" else echo "x - extracting rcsclean.cs (Text)" sed 's/^X//' << 'SHAR_EOF' > rcsclean.cs && X(-W1 -DUSG -DSTRICT_LOCKING=1 X-DCO=\"co.exe\" -DDIFF=\"diff.exe\" Xrcsclean.c rcsfnms.c rcssyn.c rcslex.c Xrcsrev.c rcsutil.c X) Xsetargv.obj Xrcsclean.exe Xrcsclean.def X-AS -LB -S0x2000 SHAR_EOF $TOUCH -am 0908233090 rcsclean.cs && chmod 0666 rcsclean.cs || echo "restore of rcsclean.cs failed" set `wc -c rcsclean.cs`;Wc_c=$1 if test "$Wc_c" != "181"; then echo original size 181, current size $Wc_c fi fi # ============= rcsdiff.cs ============== if test X"$1" != X"-c" -a -f 'rcsdiff.cs'; then echo "File already exists: skipping 'rcsdiff.cs'" else echo "x - extracting rcsdiff.cs (Text)" sed 's/^X//' << 'SHAR_EOF' > rcsdiff.cs && X(-W1 -DUSG -DSTRICT_LOCKING=1 X-DCO=\"co.exe\" -DDIFF=\"diff.exe\" Xrcsdiff.c rcsutil.c rcsfnms.c rcsrev.c rcssyn.c rcslex.c X) Xsetargv.obj Xrcsdiff.exe Xrcsdiff.def X-AS -LB -S0x2000 SHAR_EOF $TOUCH -am 0908231190 rcsdiff.cs && chmod 0666 rcsdiff.cs || echo "restore of rcsdiff.cs failed" set `wc -c rcsdiff.cs`;Wc_c=$1 if test "$Wc_c" != "178"; then echo original size 178, current size $Wc_c fi fi # ============= rcsmerge.cs ============== if test X"$1" != X"-c" -a -f 'rcsmerge.cs'; then echo "File already exists: skipping 'rcsmerge.cs'" else echo "x - extracting rcsmerge.cs (Text)" sed 's/^X//' << 'SHAR_EOF' > rcsmerge.cs && X(-W1 -DUSG -DSTRICT_LOCKING=1 X-DCO=\"co.exe\" -DDIFF=\"diff.exe\" -DMERGE=\"merge.cmd\" Xrcsmerge.c rcsutil.c rcsfnms.c rcsrev.c rcssyn.c rcslex.c X) Xsetargv.obj Xrcsmerge.exe Xrcsmerge.def X-AS -LB -S0x2000 SHAR_EOF $TOUCH -am 0909154790 rcsmerge.cs && chmod 0666 rcsmerge.cs || echo "restore of rcsmerge.cs failed" set `wc -c rcsmerge.cs`;Wc_c=$1 if test "$Wc_c" != "203"; then echo original size 203, current size $Wc_c fi fi # ============= rlog.cs ============== if test X"$1" != X"-c" -a -f 'rlog.cs'; then echo "File already exists: skipping 'rlog.cs'" else echo "x - extracting rlog.cs (Text)" sed 's/^X//' << 'SHAR_EOF' > rlog.cs && X(-W1 -DUSG -DSTRICT_LOCKING=1 X-DCO=\"co.exe\" -DDIFF=\"diff.exe\" Xrlog.c rcslex.c rcssyn.c rcsrev.c rcsutil.c partime.c maketime.c rcsfnms.c X) Xsetargv.obj Xrcslog.exe Xrlog.def X-AC -LB -S0x2000 SHAR_EOF $TOUCH -am 0909141790 rlog.cs && chmod 0666 rlog.cs || echo "restore of rlog.cs failed" set `wc -c rlog.cs`;Wc_c=$1 if test "$Wc_c" != "192"; then echo original size 192, current size $Wc_c fi fi # ============= ci.def ============== if test X"$1" != X"-c" -a -f 'ci.def'; then echo "File already exists: skipping 'ci.def'" else echo "x - extracting ci.def (Text)" sed 's/^X//' << 'SHAR_EOF' > ci.def && XNAME CI WINDOWCOMPAT NEWFILES XDESCRIPTION 'RCS 4.2 - for MS-DOS and OS/2' SHAR_EOF $TOUCH -am 0909130790 ci.def && chmod 0666 ci.def || echo "restore of ci.def failed" set `wc -c ci.def`;Wc_c=$1 if test "$Wc_c" != "74"; then echo original size 74, current size $Wc_c fi fi # ============= co.def ============== if test X"$1" != X"-c" -a -f 'co.def'; then echo "File already exists: skipping 'co.def'" else echo "x - extracting co.def (Text)" sed 's/^X//' << 'SHAR_EOF' > co.def && XNAME CO WINDOWCOMPAT NEWFILES XDESCRIPTION 'RCS 4.2 - for MS-DOS and OS/2' SHAR_EOF $TOUCH -am 0909130790 co.def && chmod 0666 co.def || echo "restore of co.def failed" set `wc -c co.def`;Wc_c=$1 if test "$Wc_c" != "74"; then echo original size 74, current size $Wc_c fi fi # ============= ident.def ============== if test X"$1" != X"-c" -a -f 'ident.def'; then echo "File already exists: skipping 'ident.def'" else echo "x - extracting ident.def (Text)" sed 's/^X//' << 'SHAR_EOF' > ident.def && XNAME IDENT WINDOWCOMPAT NEWFILES XDESCRIPTION 'RCS 4.2 - for MS-DOS and OS/2' SHAR_EOF $TOUCH -am 0909130790 ident.def && chmod 0666 ident.def || echo "restore of ident.def failed" set `wc -c ident.def`;Wc_c=$1 if test "$Wc_c" != "77"; then echo original size 77, current size $Wc_c fi fi # ============= rcs.def ============== if test X"$1" != X"-c" -a -f 'rcs.def'; then echo "File already exists: skipping 'rcs.def'" else echo "x - extracting rcs.def (Text)" sed 's/^X//' << 'SHAR_EOF' > rcs.def && XNAME RCS WINDOWCOMPAT NEWFILES XDESCRIPTION 'RCS 4.2 - for MS-DOS and OS/2' SHAR_EOF $TOUCH -am 0909130790 rcs.def && chmod 0666 rcs.def || echo "restore of rcs.def failed" set `wc -c rcs.def`;Wc_c=$1 if test "$Wc_c" != "75"; then echo original size 75, current size $Wc_c fi fi # ============= rcsclean.def ============== if test X"$1" != X"-c" -a -f 'rcsclean.def'; then echo "File already exists: skipping 'rcsclean.def'" else echo "x - extracting rcsclean.def (Text)" sed 's/^X//' << 'SHAR_EOF' > rcsclean.def && XNAME RCSCLEAN WINDOWCOMPAT NEWFILES XDESCRIPTION 'RCS 4.2 - for MS-DOS and OS/2' SHAR_EOF $TOUCH -am 0909130790 rcsclean.def && chmod 0666 rcsclean.def || echo "restore of rcsclean.def failed" set `wc -c rcsclean.def`;Wc_c=$1 if test "$Wc_c" != "80"; then echo original size 80, current size $Wc_c fi fi # ============= rcsdiff.def ============== if test X"$1" != X"-c" -a -f 'rcsdiff.def'; then echo "File already exists: skipping 'rcsdiff.def'" else echo "x - extracting rcsdiff.def (Text)" sed 's/^X//' << 'SHAR_EOF' > rcsdiff.def && XNAME RCSDIFF WINDOWCOMPAT NEWFILES XDESCRIPTION 'RCS 4.2 - for MS-DOS and OS/2' SHAR_EOF $TOUCH -am 0909130790 rcsdiff.def && chmod 0666 rcsdiff.def || echo "restore of rcsdiff.def failed" set `wc -c rcsdiff.def`;Wc_c=$1 if test "$Wc_c" != "79"; then echo original size 79, current size $Wc_c fi fi # ============= rcsmerge.def ============== if test X"$1" != X"-c" -a -f 'rcsmerge.def'; then echo "File already exists: skipping 'rcsmerge.def'" else echo "x - extracting rcsmerge.def (Text)" sed 's/^X//' << 'SHAR_EOF' > rcsmerge.def && XNAME RCSMERGE WINDOWCOMPAT NEWFILES XDESCRIPTION 'RCS 4.2 - for MS-DOS and OS/2' SHAR_EOF $TOUCH -am 0909130790 rcsmerge.def && chmod 0666 rcsmerge.def || echo "restore of rcsmerge.def failed" set `wc -c rcsmerge.def`;Wc_c=$1 if test "$Wc_c" != "80"; then echo original size 80, current size $Wc_c fi fi # ============= rlog.def ============== if test X"$1" != X"-c" -a -f 'rlog.def'; then echo "File already exists: skipping 'rlog.def'" else echo "x - extracting rlog.def (Text)" sed 's/^X//' << 'SHAR_EOF' > rlog.def && XNAME RLOG WINDOWCOMPAT NEWFILES XDESCRIPTION 'RCS 4.2 - for MS-DOS and OS/2' SHAR_EOF $TOUCH -am 0909130890 rlog.def && chmod 0666 rlog.def || echo "restore of rlog.def failed" set `wc -c rlog.def`;Wc_c=$1 if test "$Wc_c" != "76"; then echo original size 76, current size $Wc_c fi fi # ============= merge.cmd ============== if test X"$1" != X"-c" -a -f 'merge.cmd'; then echo "File already exists: skipping 'merge.cmd'" else echo "x - extracting merge.cmd (Text)" sed 's/^X//' << 'SHAR_EOF' > merge.cmd && Xextproc sh X X# $Id: merge.sh,v 5.2 90/07/15 11:32:01 ROOT_DOS Release $ X XDIFF=diff XDIFF3=diff3 Xp=w Xcase $1 in X-p) X p='1,$p' X shift Xesac X Xcase $# in X0|1|2) X echo >&2 "" X echo >&2 "Usage: merge [-p] file1 file2 file3" X exit 1 Xesac X Xcase $p in Xw) X if test ! -w $1 X then X echo >&2 "$1 not writeable" X exit 1 X fi Xesac X Xtrap 's=$?; rm -f d3a$$ d3b$$; exit $s' 0 Xtrap exit 1 2 3 13 15 Xumask 077 X X$DIFF $1 $3 >d3a$$ Xcase $? in X0|1) ;; X*) exit Xesac X X$DIFF $2 $3 >d3b$$ Xcase $? in X0|1) ;; X*) exit Xesac X X{ X $DIFF3 -E d3a$$ d3b$$ $1 $2 $3 $4 $5 X case $? in X 0) ;; X 1) echo >&2 merge: warning: 1 overlap during merge.;; X *) echo >&2 merge: warning: $? overlaps during merge. X esac X echo $p X} | ed - $1 SHAR_EOF $TOUCH -am 0909141190 merge.cmd && chmod 0666 merge.cmd || echo "restore of merge.cmd failed" set `wc -c merge.cmd`;Wc_c=$1 if test "$Wc_c" != "697"; then echo original size 697, current size $Wc_c fi fi exit 0 -- /* Kai Uwe Rommel * Munich * rommel@lan.informatik.tu-muenchen.dbp.de */