home *** CD-ROM | disk | FTP | other *** search
- overlay PrOcEdUrE genfiles; {major overlay}
- var showit,itsotay:boolean;
-
- Type GFileRec=Record
- GFileDescr:string[75];
- Sentby:string[28];
- Path:string[50];
- ArcName:sstr;
- FName:lstr;
- FileSize:real;
- SentDa,SentTi:sstr;
- Downloaded:integer;
- SpecialFile,NewFile:boolean;
- end;
-
- GFileArea=Record
- Name:Lstr;
- GFileDir:string[49];
- In_Conf:Byte;
- Sponsor:mstr;
- Level:integer;
- UpAble:Boolean;
- end;
-
- var GFile:File of GFileRec;
- GF:GFileRec;
- GFileA:File of GFileArea;
- GFA:GFileArea;
- Curarea:integer;
-
- FuNcTiOn NumGFiles:integer;
- begin
- numgfiles:=filesize(GFile)
- end;
-
- FuNcTiOn NumAreas:integer;
- begin
- numareas:=filesize (GFileA)
- end;
-
- PrOcEdUrE SeekGFile (n:integer);
- begin
- seek (GFile,n-1)
- end;
-
- PrOcEdUrE SeekGFileA (n:integer);
- begin
- seek (GFileA,n-1)
- end;
-
- PrOcEdUrE AssignGF (N:Integer);
- begin
- close (GFile);
- assign (GFile,uploaddir+'GFILE'+strr(n));
- end;
-
- FuNcTiOn MakeArea:boolean;
- var num,n:integer;
- GFATmp:GFileArea;
- begin
- makearea:=false;
- writestr ('Create area '+strr(numareas+1)+'? *');
- writeln;
-
- if yes then begin
- writestr ('Area name: *');
- if length(input)=0 then exit;
- GFATmp.Name:=input;
- writestr ('Access level: *');
- if length(input)=0 then exit;
- GFATmp.Level:=valu(input);
- writestr ('Sponsor [CR/'+unam+']:');
- if length(input)=0 then input:=unam;
- GFATmp.Sponsor:=input;
- {* writestr ('Conference In [0/None]:');
- if length(input)=0 then input:='0';
- GFATmp.In_Conf:=valu(input); *}
- GFATmp.UpAble:=True;
- writestr('Able to Upload to area [CR/Yes]: *');
- if length(input)=0 then input:='Y';
- if upcase(input[1])<>'Y' then GFATmp.UpAble:=False;
- writestr('Upload Directory [CR/'+uploaddir+']: *');
- if length(input)=0 then input:=uploaddir;
- GFATmp.GFileDir:=input;
- SeekGFileA (numareas+1);
- write (GFileA,GFATmp);
- GFA:=GFATmp;
- Curarea:=NumAreas+1;
- AssignGF(CurArea);
- rewrite (GFile);
- writeln ('Area created');
- makearea:=true;
- {* writelog ('Created GFile area '+GFATmp.Name+' ['+strr(num)+']'); *}
- end
-
- end;
-
- PrOcEdUrE OpenGFile;
- var n:integer;
- begin
- n:=ioresult;
- assign (GFileA,uploaddir+'GFileDir');
- reset (GFileA);
- if ioresult<>0 then begin
- close (GFileA);
- n:=ioresult;
- rewrite (GFileA);
- itsotay:=makearea;
- end else itsotay:=true;
- end;
-
- FuNcTiOn GetFName (path:lstr; name:mstr):lstr;
- var l:lstr;
- begin
- l:=path;
- if length(l)<>0 then
- if not (upcase(l[length(l)]) in [':','\'])
- then l:=l+'\';
- l:=l+name;
- getfname:=l;
- end;
-
- FuNcTiOn GetAPath:lstr;
- var q,r:integer;
- f:file;
- b:boolean;
- p:lstr;
- begin
- getapath:=GFA.GFileDir;
- repeat
- writestr ('Upload path [CR/'+GFA.GFileDir+']:');
- if hungupon then exit;
- if length(input)=0 then input:=GFA.GFileDir;
- p:=input;
- if input[length(p)]<>'\' then p:=p+'\';
- b:=true;
- assign (f,p+'CON');
- reset (f);
- q:=ioresult;
- close (f);
- r:=ioresult;
- if q<>0 then begin
- writestr ('Make that path? *');
- b:=yes;
- if b then begin
- mkdir (copy(p,1,length(p)-1));
- q:=ioresult;
- b:=q=0;
- if b then writestr ('Directory created..')
- else writestr ('Unable to create directory..')
- end
- end
- until b;
- getapath:=p;
- end;
-
- PrOcEdUrE fastlistfile (n:integer);
- var q:sstr;
- begin
- seekGFile (n);
- read (GFile,GF);
- writeln;
- tab (strr(n)+'.',4);
- if break then exit;
- if gf.newfile then write ('New ') else if gf.specialfile then write ('Sys ')
- else
- if (GF.ArcName='') then
- if exist(GetFName(GF.Path,GF.FName)) then
- tab (streal(GF.FileSize),7) else write ('OffLine')
- else write ('Arc''ed ');
- if break then exit;
- tab (' '+GF.GFileDescr,40);
- if break then exit;
- end;
-
- FuNcTiOn NoFiles:boolean;
- begin
- if NumGFiles=0 then begin
- nofiles:=true;
- writeln (^M'*> No G-Files <*')
- end else nofiles:=false
- end;
-
- PrOcEdUrE FastListGFiles;
- var cnt,max,r1,r2,r3:integer;
- begin
- if nofiles then exit;
- writehdr ('File List'^M);
- max:=NumGFiles;
- thereare (max,'G-File','G-Files');
- parserange (max,r1,r2);
- if r1=0 then exit;
- tab ('No.',4);
- tab ('Bytes',7);
- writeln ('Description');
- r3:=0;
- for cnt:=r1 to r2 do begin
- r3:=r3+2;
- FASTlistfile (cnt);
- if break then exit
- end;
- writeln;
- end;
-
- FuNcTiOn GetGFileNum (t:mstr):integer;
- var n,s:integer;
- x1,x2,x3,i:integer;
- y1,y2,y3:real;
-
-
- FuNcTiOn SearchforFile (f:sstr):integer;
- var cnt:integer;
- begin
- for cnt:=1 to numgfiles do begin
- seekGFile (cnt);
- read (GFile,GF);
- if match(GF.FName,f) then begin
- searchforfile:=cnt;
- exit
- end
- end;
- searchforfile:=0
- end;
-
-
- begin
- getgfilenum:=0;
- if match (t,'download') then begin
- x1:=urec.gfup;
- x2:=urec.gfdown;
- if x1<1 then x1:=1;
- if x2<1 then x2:=1;
- y1:=int(x1);
- y2:=int(x2);
- y1:=y1;
- y2:=y2;
- y3:=y1/y2;
- Y3:=Y3*100;
- x3:=trunc(y3);
-
- if gfudratio > 0 then
- if (x3<gfudratio) and not issysop and (ulvl<nopcr) then
- begin
- dontstop:=true;
- nobreak:=true;
- if exist (textfiledir+'GUDRatio') then printfile (textfiledir+'GUDatio') else begin
- writeln (^T' *> Upload/Download Ratio <*');
- writeln (' You''ve uploaded ',urec.gfup,' files');
- writeln (' And have downloaded ',urec.gfdown,' files.');
- writeln (' You have a ',x3,'% ratio now.');
- writeln (' Minimum Ratio is ',GFUDRATIO,'%.');
- Writeln (^M' Your Upload/Download ratio is too low,Post a message or two!');
- end;
- exit;
- end;
- end;
- if length(input)>1 then input:=copy(input,2,255) else
- repeat
- writestr ('File # to '+t+' [?/List]:');
- if hungupon or (length(input)=0) then exit;
- if input='?' then begin
- fastlistgfiles;
- input:=''
- end
- until input<>'';
- val (input,n,s);
- if s<>0 then begin
- n:=searchforfile(input);
- if n=0 then begin
- writeln ('No such file..');
- exit
- end
- end;
- if (n<1) or (n>numgfiles) then writeln ('Invalid number..')
- else getgfilenum:=n
- end;
-
- PrOcEdUrE AddFile (GF:GFileRec);
- begin
- SeekGFile (NumGFiles+1);
- write (GFile,GF)
- end;
-
- FuNcTiOn Getfsize(Filename:anystr):real;
- var df:file of byte;
- begin
- GF.FileSize:=-1;
- assign (df,Filename);
- reset (df);
- if ioresult<>0 then exit;
- GetFSize:=longfilesize(df);
- close(df)
- end;
-
- const beenaborted:boolean=false;
-
- FuNcTiOn Aborted:boolean;
- begin
- if beenaborted then begin
- aborted:=true;
- exit
- end;
- aborted:=xpressed or hungupon;
- if xpressed then begin
- beenaborted:=true;
- writeln (^B'New-scan aborted..')
- end
- end;
-
- PrOcEdUrE NewScan;
- var cnt:integer;
- first:integer;
- newest:boolean;
- label notlater;
- begin
- newest:=false;
- beenaborted:=false;
- first:=0;
- for cnt:=filesize(GFile) downto 1 do begin
- SeekGFile (cnt);
- read (GFile,GF);
- if later (GF.SentDa,GF.SentTi,lastonda,lastonti)
- then first:=cnt
- else goto notlater
- end;
- notlater:
- if first<>0 then begin
- writeln;
- writeln (^M^T'File Area: ['^S,GFA.name+']');
- for cnt:=first to filesize(GFile) do begin
- if aborted then exit;
- fastlistfile (cnt);
- end
- end
- end;
-
- Function IsConference:Boolean;
- begin
- isconference:=false;
- { if GFA.In_Conf<>0 then isconference:=true; }
- end;
-
- Function IsInConf:Boolean;
- begin
- Isinconf:=true;
- (** isinconf:=false;
- if urec.level>=sysoplevel then isinconf:=true else
- if isconference { and Conf_Acc[curconf]} then isinconf:=true;**)
- end;
-
- Procedure SetArea (n:integer);
- var otay:boolean;
- begin
- curarea:=n;
- otay:=false;
- if (n>numareas) or (n<1) then begin
- writeln (^B'Invalid area..');
- if issysop then if makearea then setarea (curarea)
- else setarea (1)
- else setarea (1);
- exit
- end;
- seekGFileA (n);
- read (GFileA,GFA);
-
- otay:=(urec.GFLvl>=GFA.Level); { or isinconf;}
-
- if not otay then
- if curarea=1 then error ('Access level too low..','','')
- else begin
- reqlevel (GFA.level);
- setarea (1);
- exit
- end;
-
- AssignGF(n);
- close (GFile);
- reset (GFile);
- if ioresult<>0 then rewrite (GFile);
- if not showit then begin
- writeln (^B^M^M'G-File Area: '^S,'[',curarea,']:[',GFA.name,']');
- if issysop then writeln (^B'%: Sponsor Commands');
- writeln;
- end;
- end;
-
- PrOcEdUrE newscanall;
- var cnt:integer;
- otay:boolean;
- begin
- {* urec.LastGFileArea:=curarea; *}
- writehdr ('Newscanning, press [X] to abort.');
- if aborted then exit;
- for cnt:=1 to filesize(GFileA) do begin
- seekGFileA (cnt);
- read (GFileA,GFA);
- otay:=false;
-
- if urec.GFLvl>=GFA.Level then otay:=true else otay:=false;
- if otay then begin
- if aborted then exit;
- showit:=true;
- setarea (cnt);
- showit:=false;
- if aborted then exit;
- newscan;
- end;
- if aborted then exit
- end;
- {* setarea(urec.LastGFileArea); *}
- end;
-
- PrOcEdUrE ListAreas;
- var cnt,old:integer;
- GFATmp:GFileArea;
-
- begin
- writehdr ('Area List');
- old:=curarea;
- seekGfileA (1);
- writeln(^M'[Number] [Level] [Name]');
- for cnt:=1 to NumAreas do begin
- read (GFileA,GFATmp);
- if {* IsInConf or *} (urec.level>=GFATmp.Level) then begin
- write ('[',cnt:2,'] [');
- {* if GFATmp.In_Conf<>0 then write('Cnf ',Strr(GFATmp.In_Conf)) else *}
- write(GFATmp.Level:5);
- write('] ');
- tab ('['+GFATmp.Name,26);
- writeln (']');
- if break then begin
- setarea(old);
- exit;
- end;
- end;
- end;
- writeln;
- setarea(old);
- end;
-
- FuNcTiOn GetAreaNum:integer;
- var areastr:sstr;
- areanum:integer;
- begin
- getareanum:=0;
- if length(input)>1 then areastr:=copy(input,2,255) else
- repeat
- listareas;
- writestr (^M'Enter New Area [?/List]:');
- if input='!' then listareas else areastr:=input
- until (input<>'?') or hungupon;
- if length(areastr)=0 then exit;
- areanum:=valu(areastr);
- if (areanum>0) and (areanum<=NumAreas) then getareanum:=areanum
- else begin
- writestr ('No such area..');
- if issysop then if makearea then getareanum:=numareas
- end;
- {* urec.LastGFileArea:=areanum; *}
- end;
-
- PrOcEdUrE GetArea;
- var areanum:integer;
- begin
- areanum:=getareanum;
- if areanum<>0 then SetArea (areanum);
- end;
-
-
-
-
-
- PrOcEdUrE MakeGFile(FileName:anystr);
- var t:text;
- b,yo,ymodem,crcmode:boolean;
- z:integer;
- begin
- if hungupon then exit;
- yo:=false;
- write ('*> Upload using Xmodem [No=Ascii]? :');
- getstr; yo:=yes;
- if not yo then begin
- assign (t,Filename);
- rewrite (t);
- writeln (^M'Enter text-file [Echo''d] [/S]:[Save] [/A]:[Abort]'^M);
- repeat
- lastprompt:='Continue...'^M;
- wordwrap:=true;
- getstr;
- b:=match(input,'/S') or match(input,'/A');
- if not b then writeln (t,input);
- if hungupon then input:='/A';
- until b;
- textclose (t);
- if match(input,'/A') then erase(t);
- {* writelog ('Created GFile disk file '+Filename); *}
- end else begin
- write ('Use CRC-Mode? ');
- getstr;crcmode:=yes;
- if hungupon then exit;
- writeln(^M'*> Make sure file is NOT Arc''ed <*');
- write ('*> Continue with X-Modem Transfer? ');
- getstr;
- if hungupon then exit;
- if not yes then exit;
- ymodem:=false;
- z:=protocolxfer(false,crcmode,ymodem,filename);
- if z<>0 then yo:=false;
- if yo then writeln (^B'File Received.');
- {* IF YO THEN Writelog ('Created GFile disk file '+Filename); *}
- if not yo then begin
- assign (t,filename);erase(t);
- end;
- end;
- end;
-
-
-
-
- overlay procedure yourgfstatus(a:integer; heh:boolean);
- var x1,x2,x3:integer;
- y1,y2,y3:real;
-
- begin
- if (not heh) or (not ansi) or (not urec.windows) then begin
- writeln (^B^M'Access level: '^S,urec.Gflvl,
- ^M'Uploads: '^S,urec.gfup,
- ^M'Downloads: '^S,urec.gfdown);
- exit;
- end;
- windowit (31,7,4,2);
- movexy (8,3);
- writeln ('G-File Transfer Section');
- movexy (6,5);
- writeln ('Current G-file Level: '^S,urec.Gflvl);
- movexy (19,6);
- writeln ('Uploads: '^S,urec.gfup);
- movexy (17,7);
- writeln ('Downloads: '^S,urec.gfdown);
- windowit (28,6,33,6);
- movexy (43,7);
- writeln ('# of Calls: '^S,urec.numon);
- movexy (43,8);
- writeln ('# of Posts: '^S,urec.nbu);
- movexy (36,9);
- writeln ('Current P/C Ratio: '^S,a,'%');
- movexy (36,10);
- writeln ('Minimum P/C Ratio: '^S,gfratio,'%');
- windowit (32,4,37,2);
- movexy (39,3);
- x1:=urec.gfup;
- x2:=urec.gfdown;
- if x1<1 then x1:=1;
- if x2<1 then x2:=1;
- y1:=int(x1);
- y2:=int(x2);
- y1:=y1;
- y2:=y2;
- y3:=y1/y2;
- Y3:=Y3*100;
- x3:=trunc(y3);
- writeln ('Current U/L D/L Ratio: '^S,x3,'%');
- movexy (39,4);
- writeln ('Minimum U/L D/L Ratio: '^S,gfudratio,'%');
- movexy (1,13);
- end;
-
- overlay PrOcEdUrE ShowGFile (n:integer);
- var f:file;
- yo:boolean;
- y:integer;
- fn:lstr;
- begin
- seekGFile (n);
- read (GFile,GF);
- if ulvl<0 then
- reqlevel (0);
- if ulvl<0 then exit;
- writeln;
- if GF.ArcName<>'' then begin
- writeln;
- write('*> File in Archive.. Please Hold..');
- if exist(GF.FName) then begin
- writeln;
- writeln (' Cannot View File.. Leave Sysop a comment.. <*');
- exit;
- end;
- dos_shell(unarc+' '+GetFName(GF.Path,GF.ArcName)+' '+GF.FName+' >temp.txt');
- if not exist(GF.FName) then begin
- writeln;
- writeln ('Error. Inform Sysop <*');
- exit;
- end;
- writeln('Extracted <*');
- end;
- if (GF.ArcName='') and not exist(GetFName(GF.Path,GF.Fname)) then begin
- writeln('*> File Offline <*');
- writeln;
- exit;
- end;
- writestr ('*> Download using X-Modem [No=Ascii]: *');
- if hungupon then exit;
- if yes then yo:=true;
- if not yo then begin
- writestr('*> Press [X] to Abort / [CR] to Continue: *');
- if upcase(input[1])='X' then exit;
- writeln (^M'*> Title: '^S,GF.GFileDescr,
- ^M'*> Date: '^S,GF.SentDa,
- ^M'*> Time: '^S,GF.SentTi,^M);
- if GF.ArcName='' then printfile (GetFname(GF.Path,GF.Fname)) else
- printfile (GF.FName);
- urec.GfDown:=urec.GfDown+1;
- end
- else begin
- if GF.ArcName='' then fn:=(GetFname(GF.Path,GF.Fname)) else
- fn:=GF.FName;
- writeln ('*> Begin X-Modem-CRC DownLoad <*');
- y:=protocolxfer(true,true,false,fn);
- if y<1 then urec.gfdown:=urec.gfdown+1 else writeln ('*> Aborted <*');
- end;
- if GF.ArcName<>'' then begin
- assign(f,GF.FName);
- erase(f);
- end;
- writeln(asciidownload);
- end;
-
- overlay PrOcEdUrE UploadGFile;
- var FN:anystr;
- begin
- writeln;
- repeat
- writestr('Enter Upload Filename: *');
- if length(input)=0 then exit;
- if hungupon then exit;
- until validfname(input);
- GF.FName:=input;
- FN:=GetFName(GFA.GFileDir,GF.FName);
- if not exist(FN) then begin
- writestr ('Description: *');
- GF.GFileDescr:=input;
- makeGFile(FN);
- end else writeln('File exists!');
- writeln;
- if not exist(FN) then begin
- writeln('*> Upload aborted <*');
- exit;
- end else writeln('*> Upload Completed <*');
- GF.SentTi:=timestr;
- GF.SentDa:=datestr;
- GF.SentBy:=Unam;
- GF.Path:=gfa.gfiledir;
- GF.Downloaded:=0;
- GF.SpecialFile:=False;
- GF.NewFile:=True;
- GF.ArcName:='';
- Urec.GFUp:=Urec.GfUp+1;
- seekGFile (numgfiles+1);
- write (GFile,GF);
- writeln;
- {* writelog ('Uploaded GFile: '+GF.GFileDescr) *}
- end;
-
- PrOcEdUrE SysopCommands;
- var q:integer;
- PrOcEdUrE getstr (prompt:mstr; var ss; len:integer);
- var a:anystr absolute ss;
- begin
- writeln (^B^M' Current ',prompt,' is: '^S,a);
- buflen:=len;
- writestr ('Enter new '+prompt+':');
- if length(input)>0 then a:=input;
- end;
-
- PrOcEdUrE getint (prompt:mstr; var i:integer);
- var q:sstr;
- n:integer;
- begin
- str (i,q);
- getstr (prompt,q,5);
- n:=valu (q);
- if n<>0 then i:=n
- end;
-
- PrOcEdUrE getboo (t:lstr; var b:boolean);
- var s:sstr;
- begin
- s:=yesno (b);
- getstr (t,s,1);
- b:=upcase(s[1])='Y'
- end;
-
- procedure RemoveFile (n:integer);
- var cnt:integer;
- begin
- for cnt:=n to numgfiles-1 do begin
- seekGFile (cnt+1);
- read (GFile,GF);
- seekGFile (cnt);
- write (GFile,GF)
- end;
- seekGFile (numgfiles);
- truncate (GFile)
- end;
-
-
- PrOcEdUrE AddGFile;
- var FN:Anystr;
- begin
- writestr ('Filename: *');
- if length(input)=0 then exit;
- GF.FName:=input;
- Writestr ('Path [CR/'+GFA.GFileDir+']: *');
- if length(input)=0 then Input:=GFA.GFileDir;
- GF.Path:=input;
- WriteStr ('Archive Filename [CR/None]: *');
- if length(input)=0 then GF.ArcName:='' else begin
- GF.ArcName:=input;
- writestr('Make sure file is in the Arc.. Is it? *');
- if not yes then GF.ArcName:='';
- end;
- if GF.ArcName='' then begin
- FN:=GetFName(GF.Path,GF.FName);
- if not exist(FN) then begin
- writestr ('File not found! Enter file now? *');
- if yes then makegfile(FN)
- end;
- if not exist(FN) then exit;
- end;
- writestr ('Description:');
- if length(input)=0 then exit;
- if GF.ArcName='' then GF.FileSize:=GetFSize(FN) else GF.FileSize:=0;
- GF.GFileDescr:=input;
- GF.SentTi:=timestr;
- GF.SentDa:=datestr;
- GF.SentBy:=Unam;
- GF.Downloaded:=0;
- GF.SpecialFile:=False;
- GF.NewFile:=False;
- seekGFile (numgfiles+1);
- write (GFile,GF);
- writeln;
- {* writelog ('Added/Created GFile: '+GF.GFileDescr) *}
- end;
-
- overlay PrOcEdUrE EditGFile;
- var n:integer;
- fn:anystr;
- begin
- n:=getgfilenum('edit');
- if n=0 then exit;
- seekGFile (n);
- read (GFile,GF);
- getstr ('filename',GF.FName,12);
- getstr ('path',GF.Path,50);
- getstr ('arc filename',GF.ArcName,50);
- if GF.ArcName='' then begin
- FN:=GetFName(GF.Path,GF.FName);
- if not exist (FN) then begin
- write (^B^M,FN,' not found!');
- writestr (^M'Create new file '+FN+'? *');
- if yes then makegfile(FN);
- if not exist(FN) then exit;
- end else GF.FileSize:=GetFSize(FN);
- end else GF.FileSize:=0;
- getstr ('description',GF.GFileDescr,75);
- getstr ('uploader',GF.SentBy,28);
- getstr ('update time',GF.SentTi,8);
- getstr ('update date',GF.SentDa,8);
- getboo ('special file',GF.SpecialFile);
- getboo ('new file',GF.NewFile);
- seekGFile (n);
- write (GFile,GF);
- {* writelog ('Changed GFile '+GF.GFileDescr); *}
- end;
-
- overlay PrOcEdUrE KillGArea;
- var GFATmp:GFileArea;
- cnt,n:integer;
- oldname,newname:sstr;
- begin
- GFATmp:=GFA;
- writestr ('Delete A'+strr(curarea)+' ['+GFATmp.Name+']: *');
- if not yes then exit;
- close (GFile);
- oldname:=uploaddir+'GFile'+strr(curarea);
- assign (GFile,oldname);
- erase (GFile);
- for cnt:=curarea to NumAreas-1 do begin
- newname:=oldname;
- oldname:=uploaddir+'GFile'+strr(cnt+1);
- assign (GFile,oldname);
- rename (GFile,newname);
- n:=ioresult;
- SeekGFileA (cnt+1);
- read (GFileA,GFATmp);
- seekGFileA (cnt);
- write (GFileA,GFATmp);
- end;
- seekGFileA (numareas);
- truncate (GFileA);
- setarea (1)
- end;
-
- overlay PrOcEdUrE ModGArea;
- var GFATmp:GFileArea;
- begin
- GFATmp:=GFA;
- getstr ('area name',GFATmp.Name,80);
- getint ('access level',GFATmp.Level);
- getstr ('sponsor',GFATmp.Sponsor,30);
- {* getstr ('conference #',GFATmp.In_Conf,1); *}
- getboo ('"Able to upload here"',GFATmp.UpAble);
- getstr ('upload dir',GFATmp.GFileDir,50);
- seekGFileA (curarea);
- write (GFileA,GFATmp);
- GFA:=GFATmp;
- end;
-
- overlay PrOcEdUrE DeleteGFile;
- var cnt,n:integer;
- f:file;
- begin
- n:=getgfilenum('delete');
- if n=0 then exit;
- SeekGFile (n);
- read (GFile,GF);
- writestr ('Delete '+GF.GFileDescr+'? *');
- if not yes then exit;
- writestr ('Erase disk file '+GF.FName+'? *');
- if yes then begin
- if GF.ArcName<>'' then begin
- writeln('File is in archive. You cannot delete it from here.');
- exit;
- end;
- assign (f,GetFname(GF.Path,GF.FName));
- erase (f);
- if ioresult<>0 then writestr ('Couldn''t erase file..')
- end;
- for cnt:=n+1 to numgfiles do begin
- seekGFile (cnt);
- read (GFile,GF);
- seekGFile (cnt-1);
- write (GFile,GF)
- end;
- seekGFile (numgfiles);
- truncate (GFile);
- writestr (^M'Deleted.');
- {* writelog ('Deleted GFile '+GF.GFileDescr) *}
- end;
-
- overlay PrOcEdUrE UpdateGFile;
- var n:integer;
- begin
- n:=GetGFileNum('update');
- if n=0 then exit;
- seekGFile (n);
- read (GFile,GF);
- GF.SentTi:=timestr;
- GF.SentDa:=datestr;
- if GF.ArcName='' then GF.FileSize:=getFSize(getFName(GF.Path,GF.FName));
- seekGFile (n);
- write (GFile,GF);
- {* writelog ('Updated time/date for GFile '+GF.GFileDescr) *}
- end;
-
- overlay PrOcEdUrE SortGArea;
- var temp,mark,cnt,method:integer;
- v1,v2:string[80];
- GFTmp:GFileRec;
- begin
- writehdr ('Sort G-Files');
- writeln;
- writeln ('[0]: Quit');
- writeln ('[1]: Description');
- writeln ('[2]: Filename');
- writeln;
- writestr ('Enter method: *');
- method:=valu(input[1]);
- if method=0 then exit;
- mark:=numgfiles-1;
- repeat
- if mark<>0 then begin
- temp:=mark;
- mark:=0;
- for cnt:=1 to temp do begin
- seekGFile (cnt);
- read (GFile,GF);
- read (GFile,GFTmp);
- if method=1 then begin
- v1:=upstring(GF.GFileDescr);
- v2:=upstring(GFTmp.GFileDescr);
- end else begin
- v1:=upstring(GF.FName);
- v2:=upstring(GFTmp.FName);
- end;
- if v1>v2 then begin
- mark:=cnt;
- seekGFile (cnt);
- write (GFile,GFTmp);
- write (GFile,GF)
- end
- end
- end
- until mark=0
- end;
-
- PrOcEdUrE ReorderGAreas;
- var cura,newa:integer;
- GFATmp:GFileArea;
- f1,f2:file;
- fn1,fn2:sstr;
- label exit;
- begin
- writehdr ('Reorder G-File Areas');
- writeln (^M'Number of G-File areas: ',numareas:1);
- for cura:=0 to numareas-2 do begin
- repeat
- writestr (CrLF+'New area #'+strr(cura+1)+' [?/List]:[CR/Quit]:');
- if length(input)=0 then goto exit;
- if input='?' then begin
- listareas;
- newa:=-1
- end else begin
- newa:=valu(input)-1;
- if (newa<0) or (newa>=numareas) then begin
- writeln ('Not found! Please re-enter...');
- newa:=-1
- end
- end
- until (newa>0);
- seek (GFileA,cura);
- read (GFileA,GFA);
- seek (GFileA,newa);
- read (GFileA,GFATmp);
- seek (GFileA,cura);
- write (GFileA,GFATmp);
- seek (GFileA,newa);
- write (GFileA,GFA);
- fn1:=uploaddir+'GFile';
- fn2:=fn1+strr(newa+1);
- fn1:=fn1+strr(cura+1);
- assign (f1,fn1);
- assign (f2,fn2);
- rename (f1,'Temp$$$$.XYZ');
- rename (f2,fn1);
- rename (f1,fn2)
- end;
- exit:
- setarea (1)
- end;
-
-
- PrOcEdUrE MoveGFile;
- var an,fn,old:integer;
- newfilesam,sambam,filesam,wangbang:anystr;
- darn:file;
- GFTmp:GFileRec;
- begin
- fn:=GetGFileNum ('move');
- old:=curarea;
- if fn=0 then exit;
- input:='';
- an:=GetAreaNum;
- if an=0 then exit;
- SeekGFile (fn);
- read (GFile,GFTmp);
- removefile (fn);
- if GFTmp.ArcName='' then
- writestr('Literally move the file to correct area? *') else
- input:='N';
- write ('Moving...');
- filesam:=GetFName(GFTmp.Path,GFTmp.FName);
- sambam:=GFTmp.Path;
- setarea(an);
- if (sambam<>GFA.GFileDir) then if yes then begin
- GFTmp.Path:=GFA.GFileDir;
- newfilesam:=GetFName(GFTmp.Path,GFTmp.FName);
- Dos_Shell('Copy '+filesam+' '+newfilesam+' >temp');
- wangbang:=filesam;
- assign(darn,wangbang);
- if exist(newfilesam) then erase (darn) else begin
- GFTmp.Path:=sambam;
- writeln('*> Fatal Error <*');
- end;
- end;
- setarea (An);
- Addfile (GFTmp);
- setarea (old);
- writeln (^B'Done.')
- end;
-
- begin
- if not issysop then begin
- reqlevel (sysoplevel);
- exit
- end;
- repeat
- q:=menu ('G-File Sysop','GFILE','QACDUKRMSO@');
- case q of
- 2:AddGFile;
- 3:EditGFile;
- 4:DeleteGFile;
- 5:UpdateGFile;
- 6:KillGArea;
- 7:ModGArea;
- 8:MoveGFile;
- 9:SortGArea;
- 10:ReorderGAreas;
- end
- until hungupon or (q=1)
- end;
-
- var prompt:lstr;
- n:integer;
- k:char;
- x1,x2,x3,i:integer;
- y1,y2,y3:real;
- q1:mstr;
- a:arearec;
- ms:boolean;
- dammit:boolean;
- begin
-
- dammit:=false;
- x1:=urec.nbu;
- x2:=urec.numon;
- if x1<1 then x1:=1;
- if x2<1 then x2:=1;
- y1:=int(x1);
- y2:=int(x2);
- y1:=y1;
- y2:=y2;
-
- y3:=y1/y2;
- Y3:=Y3*100;
- x3:=trunc(y3);
- IF ANSI THEN ANSICLS;
- if gfratio > 0 then
- if (x3<gfratio) and not issysop and (ulvl<nopcr) then
- begin
- dontstop:=true;
- nobreak:=true;
- if exist (textfiledir+'GFRatio') then printfile (textfiledir+'GFRatio') else begin
- writeln (^T' *> Post/Call Ratio <*');
- writeln (' You''ve posted ',urec.nbu,' messages');
- writeln (' And have called ',urec.numon,' times.');
- writeln (' You have a ',x3,'% ratio now.');
- writeln (' Minimum Ratio is ',GFRATIO,'%.');
- Writeln (^M' Your Posts/G-File ratio is too low,Post a message or two!');
- end;
- dammit:=true;
- end;
- if dammit then exit;
- writeln;
- if (not urec.windows) or (not ansi) then writeln (' *> General Files Section <*');
- writeln;
- itsotay:=false;
- OpenGFile;
- if not itsotay then exit;
- SeekGFileA(1);
- Read (GFileA,GFA);
- if (urec.GFLvl<GFA.Level) {or (GFA.In_Conf<>0)} then begin
- writeln('*> Access Level Too Low <*');
- exit;
- end;
- YourGFStatus(x3,true);
- setarea(1);
- {* if (urec.LastGFileArea>0) then setarea(urec.LastGFileArea)
- else begin
- urec.LastGFileArea:=1;
- end; *}
- repeat
- prompt:='';
- write (^B'[',curarea,'] [',gfa.name,']');
- { begin} { if curconf<>0 then}
- q:=menu ('G-Files','GFILE','QU%LAYNVD_');
- case q of
- 1:begin
- Close(GFile);
- Close(GFileA);
- end;
- 2:UploadGFile;
- 3:SysopCommands;
- 4:FastListGFiles;
- 5:GetArea;
- 6:YourGFStatus(0,false);
- 7:NewScanAll;
- 8:NewScan;
- 9:begin
- n:=GetGFileNum('download');
- if n>0 then ShowGFile(n);
- end;
- 10:;
- end;
- until hungupon or (q=1);
- end;