home *** CD-ROM | disk | FTP | other *** search
-
- /* Randomcopy.e COPYRIGHT 1992 by Chad Randall (crandall) */
-
-
- MODULE 'dos/dos','dos/dosextens','dos/dosasl'
-
- DEF argstr[500]:STRING
- DEF source[150]:STRING
- DEF dest[150]:STRING
- DEF work[150]:STRING
- DEF work2[150]:STRING
- DEF waittime=NIL
-
- DEF pos,i,quietflag,cloneflag,posflag,error,fail,seconds,micros,random,dd
-
- CONST AOK=69 /* GRIN 8-> */
- CONST NOT_AOK=666 /* Just a joke... or is it? >:"> */
-
- PROC main()
-
- IF KickVersion(37)=NIL
- WriteF('\nGet OS2.x (maybe a nice A1200?)\n')
- RETURN
- ENDIF
-
-
- CurrentTime({seconds},{micros})
-
- random:=RndQ(seconds)
-
- /* An attempt to get a pseudo-randomized number! */
-
- FOR i:=0 TO micros/1000
- dd:=Rnd(i)
- ENDFOR
-
-
- StrCopy(argstr,arg,ALL)
-
- WHILE (pos:=parsenext(pos))
- StrCopy(work2,work,ALL)
- UpperStr(work2)
- IF (StrCmp(work2,'QUIET',ALL))
- quietflag:=TRUE
- ELSE
- IF (StrCmp(work2,'CLONE',ALL))
- cloneflag:=TRUE
- ELSE
- IF (StrCmp(work2,'FROM',ALL))
- IF (pos:=parsenext(pos))
- StrCopy(source,work,ALL)
- posflag:=TRUE
- ELSE
- error:=15
- ENDIF
- ELSE
- IF (StrCmp(work2,'TO',ALL))
- IF (pos:=parsenext(pos))
- StrCopy(dest,work,ALL)
- posflag:=AOK
- ELSE
- error:=15
- ENDIF
- ELSE
- IF (StrCmp(work2,'?',ALL))
- commandline()
- ELSE
- IF (StrCmp(work2,'ABOUT',ALL))
- instructions()
- ELSE
- IF posflag=NIL
- StrCopy(source,work,ALL)
- posflag:=TRUE
- ELSE
- IF posflag=AOK
- error:=15
- posflag:=NOT_AOK
- ELSE
- StrCopy(dest,work,ALL)
- posflag:=AOK
- ENDIF
- ENDIF
- ENDIF
- ENDIF
- ENDIF
- ENDIF
- ENDIF
- ENDIF
- ENDWHILE
-
- IF (error)
- IF quietflag=NIL
- WriteF('randomcopy: too many arguments\n')
- ENDIF
- ELSE
- IF ((posflag=NIL) OR (posflag=TRUE))
- IF quietflag=NIL
- WriteF('randomcopy: required argument missing\n')
- ENDIF
- ELSE
- IF (posflag=AOK)
- docopy()
- ENDIF
- ENDIF
- ENDIF
-
- ENDPROC error
-
- PROC docopy()
- DEF lock=NIL:PTR TO filelock,fileinfo=NIL:PTR TO fileinfoblock
- DEF apath=NIL:PTR TO anchorpath,achain=NIL:PTR TO achain
- DEF err,pathlen,filestart,first,chance=1
-
- filestart:=FilePart(source)
- pathlen:=filestart-source
- IF (pathlen)
- StrCopy(work,source,pathlen)
- ELSE
- StrCopy(work,'',ALL)
- ENDIF
-
- apath:=New(SIZEOF anchorpath)
- /* fileinfo:=New(SIZEOF fileinfoblock) */
-
- err:=NIL;first:=FALSE
- WHILE err=NIL
- IF first=FALSE
- err:=MatchFirst(source,apath)
- first:=TRUE
- ELSE
- err:=MatchNext(apath)
- ENDIF
- IF (err)
- IF (err=ERROR_NO_MORE_ENTRIES)
- IF chance>1
- copyfile()
- ELSE
- printerror(ERROR_NO_MORE_ENTRIES)
- ENDIF
- ELSE
- printerror(err)
- ENDIF
- ELSE
- achain:=apath.last
- IF (achain)
- fileinfo:=achain.info
- IF (fileinfo.direntrytype)<0
- IF (fileinfo)
- IF(Rnd(chance))=NIL
- StrCopy(work2,fileinfo.filename,ALL)
- ENDIF
- chance:=chance+1
- ENDIF
- ENDIF
- ENDIF
- ENDIF
- ENDWHILE
-
- MatchEnd(apath)
-
- ENDPROC
-
- PROC copyfile()
- DEF filesize,workfh=NIL:PTR TO filehandle,
- destfh=NIL:PTR TO filehandle
- DEF b,cont=FALSE,numbytes,buffer,numbytes2
-
- buffer:=New(512)
- StrAdd(work,work2,ALL)
- IF quietflag=NIL
- WriteF('Copying \s TO \s\n',work,dest)
- ENDIF
- IF(filesize:=FileLength(work))>0
- IF (workfh:=Open(work,MODE_OLDFILE))
- IF (destfh:=Open(dest,MODE_NEWFILE))
- WriteF('Opened dest!')
- WHILE cont=FALSE
- numbytes:=Read(workfh,buffer,512)
- WriteF('READ')
- IF numbytes=-1
- printerror(b:=IoErr())
- cont:=TRUE
- ELSE
- IF numbytes=0
- cont:=TRUE
- ELSE
- numbytes2:=Write(destfh,buffer,numbytes)
- WriteF('WRITE')
- IF numbytes<512
- cont:=TRUE
- ENDIF
- ENDIF
- ENDIF
- ENDWHILE
- ELSE
- printerror(b:=IoErr())
- ENDIF
- ELSE
- printerror(b:=IoErr())
- ENDIF
- ELSE
- printerror(b:=IoErr())
- ENDIF
- IF (destfh) THEN Close(destfh)
- IF (workfh) THEN Close(workfh)
-
- ENDPROC
-
- PROC printerror(errn)
- DEF ebuf[140]:STRING,head[100]:STRING,a
-
- StrCopy(head,'Randomcopy failed',ALL)
- IF (a:=Fault(errn,head,ebuf,140))=NIL
- WriteF('Randomcopy error.\n')
- ELSE
- IF quietflag=NIL
- WriteF('\s\n',ebuf)
- ENDIF
- ENDIF
- ENDPROC
-
- PROC commandline()
- IF quietflag=NIL
- WriteF('\nFROM\\A TO\\A QUIET\\S CLONE\\S ABOUT\\S\n')
- ENDIF
- ENDPROC
-
- PROC instructions()
- IF quietflag=NIL
- WriteF('\nRandomcopy version .5 December 22, 1993.\n')
- WriteF('This program is copyright ®1993 by Chad Randall\n')
- WriteF('and may be freely distributed.\n')
- WriteF('\n')
- WriteF(' EMAIL:crandall@garnet.msen.com\n')
- WriteF(' USNAIL:Chad Randall, 229 S.Washington St.,\n')
- WriteF(' Manchester, Michigan 48158-9680, USA.\n')
- WriteF('\n')
-
- ENDIF
- ENDPROC
-
- PROC parsenext(x)
- DEF lpos,lastpos
- FOR lpos:=x TO StrLen(argstr)
- MidStr(work,argstr,lpos,1)
- IF ((StrCmp(work,' ',ALL)) OR (lpos=StrLen(argstr)))
- MidStr(work,argstr,x,lpos-x)
- lastpos:=lpos
- lpos:=2000
- ENDIF
- ENDFOR
- IF (lpos<2000)
- lpos:=0
- ELSE
- lpos:=lastpos+1
- ENDIF
- ENDPROC lpos
-
- PROC version()
- WriteF('\n$VER: randomcopy 0.5 (22.12.93)\n')
- ENDPROC
-