home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PC Action 1997 December
/
PCACTION1297.ISO
/
menue
/
POSTFACH
/
97120758.TXT
< prev
next >
Wrap
Text File
|
1997-10-29
|
13KB
|
445 lines
0
PCA CD Viewer für Dos Seite06
Black Baron
Programmieren
Datum: 09.10.1997
Betreff: PCA CD Viewer Seite 6 (FILES.PAS)
From: Black Baron
To: Alle
============================================
Unit FILES;
{---------}
Interface
{-------}
Const MAX_DARSTELLEN = 6;
MAX_VERZEICHNISSE = 5;
VERZEICHNIS_TITEL : Array [ 1 .. MAX_VERZE
'SPIELETI' );
Type SINGLE_DATEN_TYPE = Record
DATEI_NAME : String [ 8 ];
TITEL : String [ 44 ];
VON , ZU : String [ 21 ];
NUMMER : Word;
End;
OPTIONEN_TYPE = Record
CD : Char;
COPY : Boolean;
End;
SAMMEL_DATEN_TYPE = Array [ 1 .. MAX_DARST
Var MAILS_KOPIEREN : Boolean;
Function DATENSAETZE_ANZAHL_LESEN ( TYP : Byte )
Procedure MAIL_SPEICHERN ( TITEL , VON , ZU : St
Function SUCHEN ( BEGRIFF , JOKER : String ; STA
Procedure DATENSATZ_LESEN ( BILD_OBERKANTE : Wor
Procedure ALLE_DATENSAETZE_LESEN ( BILD_OBERKANT
Function HD_VERZEICHNIS_VORHANDEN : Boolean;
Procedure DATEN_BEREITSTELLEN;
Procedure LISTE_BEREITSTELLEN ( TYP : Byte );
Function OPTION_LESEN ( Var OPTIONEN : OPTIONEN_
Procedure OPTION_SCHREIBEN ( OPTIONEN : OPTIONEN
Procedure DATEI_LOESCHEN ( DATEI_NAME : String )
Implementation
{------------}
Uses Crt , CRT_DOSX;
Const ZEICHEN = [ 'a' .. 'z' , 'A' .. 'Z' ];
SHORT_DATEI_GROESSE : Array [ 1 .. 4 ] of
INDEX_Z_MAX = 10;
Type INDEX_INHALT_TYPE = Record
DATEI_NAME : String [ 8 ];
TITEL : String [ 44 ];
VON , ZU : String [ 21 ];
End;
SHORT_INDEX_TYPE = Record
NUMMER : Word;
DATEN : String [ 44 ];
End;
INDEX_Z_TYPE = Array [ 1 .. INDEX_Z_MAX ] o
Function DATENSAETZE_ANZAHL_LESEN;
Var DATEI : File;
GROESSE : Word;
Begin
Assign ( DATEI , PATH . DATEN + VERZEICHNIS_TI
{$I-}
Reset ( DATEI , Sizeof ( INDEX_INHALT_TYPE ) )
FEHLER_EXIT ( 4 , 4 , 0 , True );
GROESSE := Filesize ( DATEI );
FEHLER_EXIT ( 4 , 5 , 0 , True );
{$I+}
Close ( DATEI );
DATENSAETZE_ANZAHL_LESEN := GROESSE;
End;
Procedure MAIL_SPEICHERN;
Var DATEI1 , DATEI2 : Text;
FEHLER : Integer;
INHALT : String;
I : Word;
Begin
Case TYP of
1 : TYP := 1;
2 : TYP := 2;
3 : TYP := 5;
4 : TYP := 3;
5 : TYP := 4;
End;
I := 0;
{$I-}
Repeat
Assign ( DATEI1 , PATH . DATEN + STR_ ( TYP
Reset ( DATEI1 );
FEHLER := Ioresult;
If FEHLER = 0 Then Begin
Close ( DATEI1 );
I := I + 1;
End;
Until ( FEHLER <> 0 ) or ( I > 65535 );
If FEHLER <> 0 Then Begin
Rewrite ( DATEI1 );
FEHLER_EXIT ( 3 , 6 , 0 , True );
Writeln ( DATEI1 , STR_ ( TYP ) );
FEHLER_EXIT ( 3 , 7 , 0 , True );
Writeln ( DATEI1 , '0' );
FEHLER_EXIT ( 3 , 8 , 0 , True );
Writeln ( DATEI1 , TITEL );
FEHLER_EXIT ( 3 , 8 , 0 , True );
Writeln ( DATEI1 , VON );
FEHLER_EXIT ( 3 , 10 , 0 , True );
Writeln ( DATEI1 , ZU );
FEHLER_EXIT ( 3 , 11 , 0 , True );
Assign ( DATEI2 , 'C:\PCACTION\BB_CDV\LASTMA
Reset ( DATEI2 );
If Ioresult = 0 Then Begin
While not Eof ( DATEI2 ) do Begin
Readln ( DATEI2 , INHALT );
FEHLER_EXIT ( 7 , 12 , 0 , True );
Writeln ( DATEI1 , INHALT );
FEHLER_EXIT ( 3 , 12 , 0 , True );
End;
Close ( DATEI2 );
End;
Close ( DATEI1 );
End
Else FEHLER_EXIT ( 6 , 14 , 0 , False );
{$I+}
End;
Function SUCHEN;
Var DATEI : File;
INHALT : SHORT_INDEX_TYPE;
GEFUNDEN : Boolean;
GELESEN : Integer;
Begin
BEGRIFF := UPCASE_STRING ( BEGRIFF );
GEFUNDEN := False;
POS := START_POS;
Assign ( DATEI , PATH . DATEN + VERZEICHNIS_TI
{$I-}
Reset ( DATEI , SHORT_DATEI_GROESSE [ MODUS ]
FEHLER_EXIT ( 4 , 15 , 0 , True );
Seek ( DATEI , START_POS );
FEHLER_EXIT ( 4 , 16 , 0 , True );
Repeat
Blockread ( DATEI , INHALT , 1 , GELESEN );
FEHLER_EXIT ( 4 , 17 , 0 , True );
If GELESEN = 1 Then Begin
If JOKER_VERGLEICHEN ( BEGRIFF , JOKER , U
End;
Until ( GEFUNDEN ) or ( GELESEN <> 1 );
Close ( DATEI );
SUCHEN := GEFUNDEN;
End;
Procedure DATENSATZ_LESEN;
Var DATEI : File;
INHALT1 : SHORT_INDEX_TYPE;
INHALT2 : INDEX_INHALT_TYPE;
POS : Word;
Begin
POS := BILD_OBERKANTE + CURSOR - 2;
If MODUS <> 0 Then Begin
Assign ( DATEI , PATH . DATEN + VERZEICHNIS_
{$I-}
Reset ( DATEI , SHORT_DATEI_GROESSE [ MODUS
FEHLER_EXIT ( 4 , 18 , MODUS + TYP * 10 , Tr
Seek ( DATEI , POS );
FEHLER_EXIT ( 4 , 19 , MODUS + TYP * 10 , Tr
Blockread ( DATEI , INHALT1 , 1 );
FEHLER_EXIT ( 4 , 20 , MODUS + TYP * 10 , Tr
Close ( DATEI );
POS := INHALT1 . NUMMER - 1
End;
Assign ( DATEI , PATH . DATEN + VERZEICHNIS_TI
Reset ( DATEI , Sizeof ( INDEX_INHALT_TYPE ) )
FEHLER_EXIT ( 4 , 21 , MODUS + TYP * 10 , True
Seek ( DATEI , POS );
FEHLER_EXIT ( 4 , 22 , MODUS + TYP * 10 , True
Blockread ( DATEI , INHALT2 , 1 );
FEHLER_EXIT ( 4 , 23 , MODUS + TYP * 10 , True
Close ( DATEI );
{$I+}
DATEN . DATEI_NAME := INHALT2 . DATEI_NAME;
DATEN . TITEL := INHALT2 . TITEL;
DATEN . VON := INHALT2 . VON;
DATEN . ZU := INHALT2 . ZU;
DATEN . NUMMER := POS + 1;
End;
Procedure ALLE_DATENSAETZE_LESEN;
Var I : Byte;
Begin
For I := 1 to MAX_DARSTELLEN do DATENSATZ_LESE
End;
Procedure BEEP;
Var Z : Boolean;
DUMMY : Char;
Begin
Repeat
Z := not Z;
If Z Then Sound ( 100 )
Else Sound ( 1000 );
Delay ( 250 );
Until Keypressed;
Nosound;
While Keypressed do DUMMY := Readkey;
End;
Procedure SIGNAL;
Begin
If PARAMETER_SUCHEN ( '-Sound' ) Then BEEP;
End;
Function HD_VERZEICHNIS_VORHANDEN;
Begin
HD_LAUFWERK_ERMITTELN;
CD_BEZEICHNUNG_LESEN;
Gotoxy ( 63 , 2 );
Write ( PATH . CD_LAUFWERK + ' = ' + PATH . CD
Window ( 3 , 10 , 50 , 20 );
PATH . HAUPT := PATH . HD_LAUFWERK + ':\PCACTI
Writeln ( 'Check HD Path (' + PATH . HAUPT + '
{$I-}
Chdir ( PATH . HAUPT );
{$I+}
If Ioresult <> 0 Then Begin
Writeln ( 'Create HD Path (' + PATH . HAUPT
Mkdir ( PATH . HAUPT );
End;
PATH . HAUPT := PATH . HAUPT + '\' + 'BB_CDV';
Writeln ( 'Check HD Path (' + PATH . HAUPT + '
{$I-}
Chdir ( PATH . HAUPT );
{$I+}
If Ioresult <> 0 Then Begin
Writeln ( 'Create HD Path (' + PATH . HAUPT
Mkdir ( PATH . HAUPT );
End;
PATH . HAUPT := PATH . HAUPT + '\';
PATH . DATEN := PATH . HAUPT + PATH . CD_NAME;
Writeln ( 'Check HD Path (' + PATH . DATEN + '
{$I-}
Chdir ( PATH . DATEN );
{$I+}
If Ioresult <> 0 Then Begin
Writeln ( 'Create HD Path (' + PATH . DATEN
Mkdir ( PATH . DATEN );
HD_VERZEICHNIS_VORHANDEN := False;
Chdir ( PATH . DATEN );
End
Else HD_VERZEICHNIS_VORHANDEN := True;
PATH . DATEN := PATH . DATEN + '\';
End;
Procedure INDEX_KOPIEREN ( TITEL : String ; NUMM
Var INHALT2 : INDEX_INHALT_TYPE;
DATEI1 , DATEI2 : File;
INHALT1 : INHALT1_TYPE;
MAILS , I1 : Word;
X , Y : Integer;
I2 : Byte;
Begin
If NUMMER = 1 Then Writeln ( 'Kopiere Index Da
X := Wherex;
Y := Wherey;
Assign ( DATEI1 , PATH . CD_LAUFWERK + ':\MENU
{$I-}
Reset ( DATEI1 , 1 );
{$I+}
FEHLER_EXIT ( 2 , 24 , 0 , True );
MAILS := ( Filesize ( DATEI1 ) - 226 ) div 104
Window ( 52 , 7 , 71 , 12 );
Gotoxy ( 1 , 1 );
Write ( 'B: 0 ' );
Gotoxy ( 12 , 1 );
Write ( 'M: ' );
Gotoxy ( 15 , 1 );
Write ( MAILS );
Gotoxy ( 1 , 1 + NUMMER );
Write ( TITEL );
Gotoxy ( 11 , 1 + NUMMER );
Write ( '#M: 0' );
Assign ( DATEI2 , PATH . DATEN + TITEL + '.IX0
Rewrite ( DATEI2 , 1 );
Seek ( DATEI1 , 226 );
For I1 := 1 to MAILS do Begin
Gotoxy ( 15 , 1 + NUMMER );
Write ( I1 );
Gotoxy ( 4 , 1 );
Write ( I1 * 104 + 226 );
{$I-}
Blockread ( DATEI1 , INHALT1 , 104 );
{$I+}
FEHLER_EXIT ( 2 , 25 , NUMMER , True );
COPY_STRING ( INHALT1 , INHALT2 . DATEI_NAME
COPY_STRING ( INHALT1 , INHALT2 . TITEL , 19
COPY_STRING ( INHALT1 , INHALT2 . VON , 63 ,
COPY_STRING ( INHALT1 , INHALT2 . ZU , 84 ,
{$I-}
Blockwrite ( DATEI2 , INHALT2 , Sizeof ( INH
{$I+}
FEHLER_EXIT ( 3 , 26 , NUMMER , True );
End;
Close ( DATEI1 );
Close ( DATEI2 );
If NUMMER = MAX_VERZEICHNISSE Then Clrscr;
Window ( 3 , 10 , 50 , 20 );
Gotoxy ( X , Y );
End;
Procedure INDEX_SORTIEREN ( TITEL : String ; NUM
Var DATEI1 , DATEI2 : File;
INHALT1 : INDEX_INHALT_TYPE;
INHALT2 , INHALT3 : SHORT_INDEX_TYPE;
FEHLER , X , Y : Integer;
POS , REST , GROESSE : Longint;
P : Pointer;
I1 , I3 , I4 : Word;
I2 : Char;
UP_STRING : String [ 44 ];
Begin
If NUMMER = 1 Then Writeln ( 'Index sortieren'
X := Wherex;
Y := Wherey;
Window ( 51 , 7 , 79 , 12 );
Write ( TITEL );
For I4 := 1 to 4 do Begin
Gotoxy ( 10 , 1 );
Write ( I4 );
For I2 := 'A' to 'Z' do Begin
Assign ( DATEI2 , PATH . DATEN + TITEL + '
Rewrite ( DATEI2 , 1 );
Close ( DATEI2 );
Gotoxy ( 12 , 1 );
Write ( 'e-' , I2 );
End;
Gotoxy ( 12 , 1 );
Write ( 'e-.' );
Assign ( DATEI2 , PATH . DATEN + TITEL + '.S
Rewrite ( DATEI2 , 1 );
Close ( DATEI2 );
Gotoxy ( 12 , 1 );
Write ( ' ' );
I1 := 0;
Assign ( DATEI1 , PATH . DATEN + TITEL + '.I
Reset ( DATEI1 , Sizeof ( INHALT1 ) );
While not Eof ( DATEI1 ) do Begin
I1 := I1 + 1;
Gotoxy ( 1 , 1 + I4 );
Write ( I1 );
Blockread ( DATEI1 , INHALT1 , 1 );
INHALT3 . DATEN := '
INHALT3 . NUMMER := I1;
Case I4 of
1 : Begin
If INHALT1 . TITEL [ 1 ] in ZEICHEN Th
INHALT1 . TITEL [ 1 ] + '1' )
El
UP_STRING := UPCASE_STRING ( INHALT1 .
INHALT3 . DATEN := INHALT1 . TITEL;
End;
2 : Begin
If INHALT1 . VON [ 1 ] in ZEICHEN Then
Else
UP_STRING := UPCASE_STRING ( INHALT1 .
INHALT3 . DATEN := INHALT1 . VON;
End;
3 : Begin
If INHALT1 . ZU [ 1 ] in ZEICHEN Then
Else
UP_STRING := UPCASE_STRING ( INHALT1 .
INHALT3 . DATEN := INHALT1 . ZU;
End;
4 : Begin
If INHALT1 . DATEI_NAME [ 1 ] in ZEICH
Assign ( DATEI2 , PATH . DATEN + TITE
UP_STRING := UPCASE_STRING ( INHALT1 .
INHALT3 . DATEN := INHALT1 . DATEI_NAM
End;
End;
Gotoxy ( 6 , 1 + I4 );
Write ( 'suche' );
Reset ( DATEI2 , SHORT_DATEI_GROESSE [ I4
{$I-}
Repeat
Blockread ( DATEI2 , INHALT2 , 1 );
FEHLER := Ioresult;
Until ( UP_STRING < UPCASE_STRING ( INHALT
{$I+}
If FEHLER = 0 Then Begin
POS := Filepos ( DATEI2 ) - 1;
GROESSE := Filesize ( DATEI2 );
REST := GROESSE - POS;
Gotoxy ( 6 , 1 + I4 );
Write ( 'ver. P p' , POS , ' g' , GROESS
If ( Maxavail > REST * SHORT_DATEI_GROES
Getmem ( P , REST * SHORT_DATEI_GROESS
Seek ( DATEI2 , POS );
Blockread ( DATEI2 , P^ , REST );
Seek ( DATEI2 , POS + 1 );
Blockwrite ( DATEI2 , P^ , REST );
Freemem ( P , REST * SHORT_DATEI_GROE
End
Else Begin
Gotoxy ( 6 , 1 + I4 );
Write ( 'ver. F p' , POS , ' g' , GROE
For I3 := GROESSE downto POS + 1 do Be
Seek ( DATEI2 , I3 - 1 );
Blockread ( DATEI2 , INHALT2 , 1 );
Blockwrite ( DATEI2 , INHALT2 , 1 );
End;
End;
Seek ( DATEI2 , POS );
End;
Gotoxy ( 6 , 1 + I4 );
Write ( 'schreibe ' );
Blockwrite ( DATEI2 , INHALT3 , 1 );