'===========================================================================
' Subject: ADDRESS BOOK                       Date: 01-12-97 (17:42)       
'  Author: Xtance Coders Alliance             Code: QB, QBasic, PDS        
'  Origin: harrys@castel.nl                 Packet: MISC.ABC
'===========================================================================
DECLARE SUB Reg ()
DECLARE SUB NOFilesFound ()
DECLARE SUB CLSScreen ()
DECLARE FUNCTION CHeckBestand! (Welke$)
DECLARE SUB noBackup ()
DECLARE SUB RESTOREBackup ()
DECLARE SUB Backup ()
DECLARE SUB Copy (Bestand1$, Bestand2$, FileCopyShow%, regel%, waar%, BKleur%, FKleur%, car%)
DECLARE SUB FileRead (filename$, LIneCount%, VNaam$(), ANaam$(), Straat$(), Hnummer$(), PCode$(), Tel$(), Stad$(), GDatum$(), Extra1$(), Extra2$())
DECLARE FUNCTION ED$ (z%, x%, m%, n%)
DECLARE SUB editLine (a$, ExitCode, Ascii)
DECLARE FUNCTION ScanCode! ()
DECLARE SUB info.MrSnow ()
DECLARE SUB inFO.Prog ()
DECLARE SUB expand (UpRow%, LtColum%, LoRow%, RtColum%)
DECLARE SUB Drawbox (UpRow%, LtColum%, LoRow%, RtColum%)
DECLARE SUB pause (ticks%)
DECLARE SUB Shadow (UpRow%, LtColum%, LoRow%, RtColum%)
DECLARE SUB CheckShell ()
DECLARE SUB DeleteAdres.Lijst (Welke%, Ect%)
DECLARE SUB NewDataFIle ()
DECLARE SUB DeleteAdres (Welke%, Ect%)
DECLARE SUB Show.KeuseLijst (aDres$(), BackADRES$(), til%)
DECLARE SUB KeuseLijst ()
DECLARE SUB COL (b!, c!, k$, e!, d!)
DECLARE SUB ShowFile (t%)
DECLARE SUB inPutFile (laatste%)
DECLARE FUNCTION DAtaFile.Exist% ()
DECLARE FUNCTION keycode% ()
CONST LST$ = "ADRES.LST"
TYPE Fixed
  Str AS STRING * 100                          'kopieerbuffer 16384
END TYPE
DIM SHARED VNaam$(500), ANaam$(500), Straat$(500), Hnummer$(500), PCode$(500), Tel$(500), Stad$(500), GDatum$(500), Extra1$(500), Extra2$(500)
ON ERROR GOTO fout

'       This program is made by yours Mr. SN()W From
'
'               Xtance Coders Alliance 1997
'
'       E-mail: Mrsnow@freemail.nl
'       or
'       harryst@castel.nl
'
' Please send mail if you use any thing of this or if you have any comments
'
' For All BASIC Code from William Yu 1997
'
' --------------------------------------------------------------------------




CLS

IF DAtaFile.Exist = 1 THEN
	PRINT "CReating new DATA File ..": NewDataFIle
ELSE
FileRead "ADRES.DAT", LIneCount%, VNaam$(), ANaam$(), Straat$(), Hnummer$(), PCode$(), Tel$(), Stad$(), GDatum$(), Extra1$(), Extra2$()
END IF

Start:
CALL KeuseLijst


neetoch:
CLS
KEY(9) OFF
KeuseLijst
END

fout:
COLOR 7, 0: CLS : PRINT "ERROR #"; ERR; "Found"
END
RESUME

Existfout:
RESUME NEXT


Backupnee:
CALL noBackup

GOTO Start

SUB Backup
ON ERROR GOTO Existfout

'(Bestand1$, Bestand2$, FileCopyShow%, Regel%, Waar%, BKleur%, FKleur%, Car%)
a = CHeckBestand("ADRES.BAK\ADRES.DAT")
b = CHeckBestand("ADRES.BAK\ADRES.EXE")
c = CHeckBestand("ADRES.BAK\ADRES.LST")
IF a = 0 OR b = 0 OR c = 0 THEN CALL NOFilesFound
IF a = 0 OR b = 0 OR c = 0 THEN EXIT SUB

expand 4, 5, 12, 75
LOCATE 4, 35: PRINT "[ Backup ]"

MKDIR "ADRES.BAK"
Copy "ADRES.DAT", "ADRES.BAK\ADRES.DAT", 1, 7, 15, 7, 1, 254
Copy LST$, "ADRES.BAK\ADRES.LST", 1, 7, 15, 7, 1, 254
Copy "ADRES.EXE", "ADRES.BAK\ADRES.EXE", 1, 7, 15, 7, 1, 254
LOCATE 10, 12: PRINT "Press 'Y' to return to the menu ..."
DO: LOOP UNTIL UCASE$(INKEY$) = "Y"
ON ERROR GOTO fout


END SUB

FUNCTION CHeckBestand (Welke$)
OPEN Welke$ FOR APPEND AS #5
i = LOF(5)
CLOSE
IF i = 0 THEN CHeckBestand = 0
IF i >= 1 THEN CHeckBestand = 1
END FUNCTION

SUB CheckShell STATIC
OPEN "ADres.Dat" FOR APPEND AS #1
OPEN LST$ FOR APPEND AS #2
a = LOF(1): b = LOF(2)
CLOSE 1, 2
IF a < 30 AND b < 10 THEN CALL NewDataFIle
END SUB

SUB CLSScreen
FOR i = 1 TO 24
LOCATE i, 1: PRINT STRING$(80, 32);
NEXT i
END SUB

SUB COL (b, c, k$, e, d) STATIC
COLOR b, c
PRINT k$
COLOR e, d
END SUB

DEFINT A-Z
SUB Copy (Bestand1$, Bestand2$, FileCopyShow%, regel%, waar%, BKleur%, FKleur%, car%)
COLOR BKleur%, FKleur%
LOCATE regel%, waar%
PRINT STRING$(52, 32);
COLOR BKleur%, FKleur%
LOCATE regel%, waar%
PRINT STRING$(51, 32);


Add% = 0  '0 = overschrijven. -1 = Toevoegen
CopyDate% = 1 '0 = huidige datum. -1 = datum van bronbestand
REDIM Buffer(0) AS Fixed                         ' fixed string in far heap

f1% = FREEFILE                                   ' handle #F1%
OPEN Bestand1$ FOR BINARY AS #f1% LEN = 4096     ' open bronbestand

f2% = FREEFILE                                   ' handle #F2%
IF NOT Add% THEN                                 ' overschrijven
  OPEN Bestand2$ FOR OUTPUT AS #f2%              ' voor alle zekerheid...
  CLOSE #f2%                                     '
  KILL Bestand2$                                 ' wissen
END IF

OPEN Bestand2$ FOR BINARY AS #f2% LEN = 4096     ' open doelbestand

IF Add% THEN                                     ' Toevoegen
  TotalBytes& = LOF(f1%) + LOF(f2%)              ' tel op
  SEEK #f2%, LOF(f2%) + 1                        ' append
ELSE
  TotalBytes& = LOF(f1%)
END IF

DO
  GET #f1%, , Buffer(0)                          ' lees dan 16Kb
  IF NOT EOF(f1%) THEN
    PUT #f2%, , Buffer(0)                        ' schrijf naar 2
  ELSE                                           ' hoeveel rest ?
    FOR x% = 1 TO (TotalBytes& - LOF(f2%)) STEP 4096
	IF TotalBytes& - LOF(f2%) >= 4096 THEN     ' blokken van 4Kb
	Temp$ = MID$(Buffer(0).Str, x%, 4096)
	ELSE
	Temp$ = MID$(Buffer(0).Str, x%, (TotalBytes& - LOF(f2%)))
	END IF
	PUT #f2%, , Temp$                          ' schrijf rest
  
    NEXT x%
  END IF
IF FileCopyShow = 1 THEN
COLOR BKleur%, FKleur%
'LOCATE regel%, waar%
'PRINT STRING$(FIX(LOF(f2%) / (LOF(f1%) / 100)) / 2, Car%); '219

LOCATE regel%, waar% + (FIX(LOF(f2%) / (LOF(f1%) / 100)) / 2)
COLOR 10, 1
PRINT "->"
COLOR BKleur%, FKleur%
LOCATE regel% + 1, waar% + 18: PRINT FIX(LOF(f2%) / (LOF(f1%) / 100)); "% Done  "
LOCATE regel - 2, waar% - 8: PRINT "File: "; Bestand1$; " -->-> "; Bestand2$
END IF

LOOP UNTIL EOF(f1%)
CLOSE 1, 2
SLEEP 1

COLOR BKleur%, FKleur%
END SUB

FUNCTION DAtaFile.Exist STATIC
OPEN "ADRES.DAT" FOR APPEND AS #9
IF LOF(9) < 1 THEN DAtaFile.Exist = 1
IF LOF(9) > 1 THEN DAtaFile.Exist = 2
IF LOF(9) < 1 THEN GOTO nee

CLOSE 9

EXIT FUNCTION
nee:
CLOSE 9
KILL "ADRES.DAT"

END FUNCTION

DEFSNG A-Z
SUB DeleteAdres (Welke%, Ect%) STATIC
'PRINT Welke%, Ect%: END

OPEN "ADRES.DAT" FOR INPUT AS #1
OPEN "ADres.TMP" FOR OUTPUT AS #2

IF Welke% = Ect% THEN GOTO EindeWeg
IF Welke% = 1 THEN GOTO beginWeg

FOR t% = 1 TO Welke% - 1
INPUT #1, VNaam$(t%), ANaam$(t%), Straat$(t%), Hnummer$(t%), PCode$(t%), Stad$(t%), Tel$(t%), GDatum$(t%), Extra1$(t%), Extra2$(t%)
WRITE #2, VNaam$(t%), ANaam$(t%), Straat$(t%), Hnummer$(t%), PCode$(t%), Stad$(t%), Tel$(t%), GDatum$(t%), Extra1$(t%), Extra2$(t%)
NEXT t%

INPUT #1, VNaam$(Welke% + 1), ANaam$(Welke% + 1), Straat$(Welke% + 1), Hnummer$(Welke% + 1), PCode$(Welke% + 1), Stad$(Welke% + 1), Tel$(Welke% + 1), GDatum$(Welke% + 1), Extra1$(Welke% + 1), Extra2$(Welke% + 1)

FOR t% = Welke% + 1 TO Ect%
INPUT #1, VNaam$(t%), ANaam$(t%), Straat$(t%), Hnummer$(t%), PCode$(t%), Stad$(t%), Tel$(t%), GDatum$(t%), Extra1$(t%), Extra2$(t%)
WRITE #2, VNaam$(t%), ANaam$(t%), Straat$(t%), Hnummer$(t%), PCode$(t%), Stad$(t%), Tel$(t%), GDatum$(t%), Extra1$(t%), Extra2$(t%)
NEXT t%
CLOSE 1, 2
KILL "ADRES.DAT"
NAME "ADRES.TMP" AS "ADRES.DAT"
EXIT SUB

EindeWeg:
FOR i% = 1 TO Ect% - 1
INPUT #1, VNaam$(i%), ANaam$(i%), Straat$(i%), Hnummer$(i%), PCode$(i%), Stad$(i%), Tel$(i%), GDatum$(i%), Extra1$(i%), Extra2$(i%)
WRITE #2, VNaam$(i%), ANaam$(i%), Straat$(i%), Hnummer$(i%), PCode$(i%), Stad$(i%), Tel$(i%), GDatum$(i%), Extra1$(i%), Extra2$(i%)
NEXT i%

CLOSE 1, 2
KILL "ADRES.DAT"
NAME "ADRES.TMP" AS "ADRES.DAT"
EXIT SUB

beginWeg:
INPUT #1, VNaam$(i%), ANaam$(i%), Straat$(i%), Hnummer$(i%), PCode$(i%), Stad$(i%), Tel$(i%), GDatum$(i%), Extra1$(i%), Extra2$(i%)

FOR i% = 2 TO Ect%
INPUT #1, VNaam$(i%), ANaam$(i%), Straat$(i%), Hnummer$(i%), PCode$(i%), Stad$(i%), Tel$(i%), GDatum$(i%), Extra1$(i%), Extra2$(i%)
WRITE #2, VNaam$(i%), ANaam$(i%), Straat$(i%), Hnummer$(i%), PCode$(i%), Stad$(i%), Tel$(i%), GDatum$(i%), Extra1$(i%), Extra2$(i%)
NEXT i%
CLOSE 1, 2
KILL "ADRES.DAT"
NAME "ADRES.TMP" AS "ADRES.DAT"
EXIT SUB

END SUB

SUB DeleteAdres.Lijst (Welke%, Ect%) STATIC
'PRINT Welke%, Ect%: END
OPEN LST$ FOR INPUT AS #1
OPEN "ADres.TMP" FOR OUTPUT AS #2

IF Welke% = Ect% THEN GOTO EindeWegLijst
IF Welke% = 1 THEN GOTO beginWegLijst

FOR i% = 1 TO Welke% - 1
INPUT #1, VNaam$(i%), ANaam$(i%)
WRITE #2, VNaam$(i%), ANaam$(i%)
NEXT i%

INPUT #1, VNaam$(Welke% + 1), ANaam$(Welke% + 1)

FOR i% = Welke% + 1 TO Ect%
INPUT #1, VNaam$(i%), ANaam$(i%)
WRITE #2, VNaam$(i%), ANaam$(i%)
NEXT i%
CLOSE 1, 2
KILL LST$
NAME "ADRES.TMP" AS LST$
EXIT SUB

EindeWegLijst:
FOR i% = 1 TO Ect% - 1
INPUT #1, VNaam$(i%), ANaam$(i%)
WRITE #2, VNaam$(i%), ANaam$(i%)
NEXT i%

CLOSE 1, 2
KILL LST$
NAME "ADRES.TMP" AS LST$
EXIT SUB

beginWegLijst:
INPUT #1, VNaam$(1), ANaam$(1)

FOR i% = 2 TO Ect%
INPUT #1, VNaam$(i%), ANaam$(i%)
WRITE #2, VNaam$(i%), ANaam$(i%)
NEXT i%
CLOSE 1, 2
KILL LST$
NAME "ADRES.TMP" AS LST$
EXIT SUB


END SUB

 SUB Drawbox (UpRow%, LtColum%, LoRow%, RtColum%) STATIC
    Wide% = (RtColum% - LtColum%) - 1
    LOCATE UpRow%, LtColum%
    PRINT CHR$(201); STRING$(Wide%, CHR$(205)); CHR$(187);
    FOR i% = UpRow% + 1 TO LoRow% - 1
	LOCATE i%, LtColum%
	PRINT CHR$(186); SPACE$(Wide%); CHR$(186);
    NEXT i%
    LOCATE LoRow%, LtColum%
    PRINT CHR$(200); STRING$(Wide%, CHR$(205)); CHR$(188);
 END SUB

FUNCTION ED$ (z%, x%, m%, n%)
Erik$ = STRING$(25, 32)
COLOR z%, x%
editLine Erik$, ExitCode, 32
COLOR m%, n%
ED$ = Erik$
END FUNCTION

SUB editLine (a$, ExitCode, Ascii) STATIC
    CONST FALSE = 0, TRUE = NOT FALSE
    CONST BACKSPACE = 8
    CONST DELETEKEY = -83
    CONST ENDKEY = -79
    CONST ENTER = 13
    CONST ESCAPE = 27
    CONST HOME = -71
    CONST INSERTKEY = -82
    CONST LEFTARROW = -75
    CONST RIGHTARROW = -77
    CONST TABKEY = 9
 
    row = CSRLIN
    Coli% = POS(0)
    length = LEN(a$)
    Ptr = 0
    insirt = TRUE
    quit = FALSE
    original$ = a$
    DO

    LOCATE row, Coli%, 0
	PRINT a$;
	IF insirt THEN
	    LOCATE row, Coli% + Ptr, 1, 6, 7
	ELSE
	    LOCATE row, Coli% + Ptr, 1, 1, 7
	END IF
	 
	kee = ScanCode
	SELECT CASE kee
	    CASE INSERTKEY
		IF insirt THEN
		    insirt = FALSE
		ELSE
		    insirt = TRUE
		END IF
	    CASE BACKSPACE
		IF Ptr THEN
		    a$ = a$ + CHR$(Ascii)
		    a$ = LEFT$(a$, Ptr - 1) + MID$(a$, Ptr + 1)
		    Ptr = Ptr - 1
		END IF
	    CASE DELETEKEY
		a$ = a$ + CHR$(Ascii)
		a$ = LEFT$(a$, Ptr) + MID$(a$, Ptr + 2)
	    CASE UPARROW
		ExitCode = 1
		quit = TRUE
	    CASE DOWNARROW
		ExitCode = -1
		quit = TRUE
	    CASE LEFTARROW
		IF Ptr THEN
		    Ptr = Ptr - 1
		END IF
	    CASE RIGHTARROW
		IF Ptr < length - 1 THEN
		    Ptr = Ptr + 1
		END IF
	    CASE ENTER
		a$ = LEFT$(a$, Ptr)
		ExitCode = 0
		quit = TRUE
	    CASE HOME
		Ptr = 0
	    CASE ENDKEY
		Ptr = lengte + LEN(RTRIM$(a$))
	    CASE CTRLRIGHTARROW
		DO UNTIL MID$(a$, Ptr + 1, 1) = " " OR Ptr = length - 1
		    Ptr = Ptr + 1
		LOOP
		DO UNTIL MID$(a$, Ptr + 1, 1) <> " " OR Ptr = length - 1
		    Ptr = Ptr + 1
		LOOP
	    CASE CTRLLEFTARROW
		DO UNTIL MID$(a$, Ptr + 1, 1) = " " OR Ptr = 0
		    Ptr = Ptr - 1
		LOOP
		DO UNTIL MID$(a$, Ptr + 1, 1) <> " " OR Ptr = 0
		    Ptr = Ptr - 1
		LOOP
		DO UNTIL MID$(a$, Ptr + 1, 1) = " " OR Ptr = 0
		    Ptr = Ptr - 1
		LOOP
		IF Ptr THEN
		    Ptr = Ptr + 1
		END IF
	    CASE CTRLY
		a$ = SPACE$(length)
		Ptr = 0
	    CASE ESCAPE
		a$ = original$
		Ptr = 0
		insirt = TRUE
	    CASE IS > 255
				
	    CASE IS < 32
		
	    CASE ELSE
		kee$ = CHR$(kee)
		IF insirt THEN
		    a$ = LEFT$(a$, Ptr) + kee$ + MID$(a$, Ptr + 1)
		    a$ = LEFT$(a$, length)
		ELSEIF Ptr < length THEN
		    MID$(a$, Ptr + 1, 1) = kee$
		END IF
		IF Ptr < length THEN
		    Ptr = Ptr + 1
		ELSE
		
		END IF
		ctrlQflag = FALSE
	END SELECT
    LOOP UNTIL quit
a$ = a$

END SUB

 SUB expand (UpRow%, LtColum%, LoRow%, RtColum%) STATIC
    RowCenter% = ((LoRow% - UpRow%) / 2) + UpRow%
    ColCenter% = ((RtColum% - LtColum%) / 2) + LtColum%
    UprRow% = RowCenter%: LeftColum% = ColCenter%
    LwrRow% = RowCenter%: RghtColum% = ColCenter%
    DO
	LeftColum% = LeftColum% - 1
	RghtColum% = RghtColum% + 1
	IF LeftColum% < LtColum% THEN LeftColum% = LtColum%
	IF RghtColum% > RtColum% THEN RghtColum% = RtColum%
	Drawbox UprRow%, LeftColum%, LwrRow%, RghtColum%
	IF LeftColum% = LtColum% AND RghtColum% = RtColum% THEN EXIT DO
    LOOP
    DO
	UprRow% = UprRow% - 1
	LwrRow% = LwrRow% + 1
	IF UprRow% < UpRow% THEN UprRow% = UpRow%
	IF LwrRow% >= LoRow% THEN LwrRow% = LoRow%
	Drawbox UprRow%, LeftColum%, LwrRow%, RghtColum%
	IF UprRow% = UpRow% AND LwrRow% = LoRow% THEN EXIT DO
	pause 1
    LOOP
    Shadow UpRow%, LtColum%, LoRow%, RtColum%
 END SUB

DEFINT A-Z
SUB FileRead (filename$, LIneCount%, VNaam$(), ANaam$(), Straat$(), Hnummer$(), PCode$(), Tel$(), Stad$(), GDatum$(), Extra1$(), Extra2$()) STATIC
 filenumber% = FREEFILE
 OPEN filename$ FOR INPUT AS filenumber%
 IF LOF(1) <= 10 THEN GOTO theend
 DO
  LIneCount% = LIneCount% + 1
  l% = LIneCount%
  INPUT #filenumber%, VNaam$(l%), ANaam$(l%), Straat$(l%), Hnummer$(l%), PCode$(l%), Stad$(l%), Tel$(l%), GDatum$(l%), Extra1$(l%), Extra2$(l%)
		  
 LOOP UNTIL EOF(1)
theend:
CLOSE
EXIT SUB
 
END SUB

DEFSNG A-Z
SUB info.MrSnow STATIC
CLS
COLOR 14, 1
expand 1, 1, 24, 78
LOCATE 1, 33: PRINT "[ MrSnow '95 ]"
LOCATE 7, 10: PRINT "Things that I have Made in QuickBasic '4.5'"
LOCATE 8, 10: PRINT "--------------------------------------------"
LOCATE 9, 10: PRINT "PICME.EXE <-- GIF/PCX Viewer"
LOCATE 10, 10: PRINT "PCX2GIF.EXE <-- PCX to GIF converter"
LOCATE 11, 10: PRINT "REBOOT.EXE <-- Nice REBOOT programm"
LOCATE 12, 10: PRINT "FASTVIEW.EXE <-- Fast TEXT file viewer"
LOCATE 13, 10: PRINT "QSyS.EXE <-- QuickSySinformation "
LOCATE 14, 10: PRINT "TXT2BAS.EXE <-- Converts a TXT file to .BAS file+Viewer"
LOCATE 15, 10: PRINT "CD_INST.EXE <-- CD-ROM Installer '95"
LOCATE 16, 10: PRINT "TCP.QLB/LIB <-- Nice Quickbasic Libery"
LOCATE 18, 10: PRINT "Ect,Ect I have made much more"
LOCATE 22, 20: PRINT "Press 'Q' to Return to the menu ..."
COLOR 7, 1
DO
LOOP UNTIL UCASE$(INKEY$) = CHR$(81)

END SUB

SUB inFO.Prog STATIC
CLS
COLOR 14, 1
expand 1, 1, 18, 78
LOCATE 1, 33: PRINT "[ ADRES.EXE ]"
LOCATE 5, 10: PRINT "Made on 1995-8-27/28"
LOCATE 6, 10: PRINT "This programm is made by: Mr. Snow"
LOCATE 7, 10: PRINT "It's made in QuickBasic 4.5"
LOCATE 8, 10: PRINT "On a BAD Day"
LOCATE 10, 10: PRINT "INclude Files are:"
LOCATE 11, 28: PRINT "ADRES.EXE"
LOCATE 12, 28: PRINT "ADRES.DAT "
LOCATE 13, 28: PRINT "ADRES.LST"
LOCATE 16, 20: PRINT "Press 'Q' to Return to the menu ..."
DO
LOOP UNTIL UCASE$(INKEY$) = CHR$(81)
COLOR 7, 1
END SUB

SUB inPutFile (laatste%) STATIC
b$ = "                    "
ON KEY(9) GOSUB neetoch
KEY(9) ON
'<-- Met EDitLine of LineEdit ??? >>092ouldhekurdkj7y857rq8_*&(@^JDGHUFD"
t% = laatste%
expand 1, 1, 15, 50
LOCATE 1, 51: PRINT "F9 to Abort"
LOCATE 3, 5: PRINT "VoorNaam :";
VNaam$(t%) = ED$(14, 0, 7, 1)
LOCATE 4, 5: PRINT "AchterNaam :";
ANaam$(t%) = ED$(14, 0, 7, 1)
LOCATE 5, 5: PRINT "Straat :";
Straat$(t%) = ED$(14, 0, 7, 1)
LOCATE 6, 5: PRINT "HuisNummer :";
Hnummer$(t%) = ED$(14, 0, 7, 1)
LOCATE 7, 5: PRINT "PostCode :";
PCode$(t%) = ED$(14, 0, 7, 1)
LOCATE 8, 5: PRINT "Plaats (Stad) :";
Stad$(t%) = ED$(14, 0, 7, 1)
LOCATE 9, 5: PRINT "Telefoon :";
Tel$(t%) = ED$(14, 0, 7, 1)
LOCATE 10, 5: PRINT "GeboorteDatum :";
GDatum$(t%) = ED$(14, 0, 7, 1)
LOCATE 12, 5: PRINT "EXtra: ";
Extra1$(t%) = ED$(14, 0, 7, 1)
LOCATE 13, 5: PRINT "EXtra: ";
Extra2$(t%) = ED$(14, 0, 7, 1)
OPEN "ADRES.DAT" FOR APPEND AS #1

WRITE #1, VNaam$(t%), ANaam$(t%), Straat$(t%), Hnummer$(t%), PCode$(t%), Stad$(t%), Tel$(t%), GDatum$(t%), Extra1$(t%), Extra2$(t%)
CLOSE 1

OPEN "ADRES.LST" FOR APPEND AS #1
WRITE #1, VNaam$(t%), ANaam$(t%)
CLOSE
CLS

END SUB

DEFINT A-Z
SUB KeuseLijst STATIC
DIM aDres$(1500), BackADRES$(1500)
OPEN LST$ FOR INPUT AS #1
i = LOF(1)
CLOSE 1
IF i <= 8 THEN LOCATE 20, 20: PRINT "NO Adresses Found !": CALL NewDataFIle
OPEN LST$ FOR INPUT AS #1

l% = 10

DO
l% = l% + 1
INPUT #1, aDres$(l%), BackADRES$(l%)
LOOP UNTIL EOF(1)
CLOSE 1

FOR b = l% + 1 TO l% + 15
aDres$(b) = "": BackADRES$(b) = ""
NEXT b
Show.KeuseLijst aDres$(), BackADRES$(), l%
EXIT SUB

END SUB

FUNCTION keycode% STATIC
 DO
 k$ = INKEY$
 LOOP UNTIL k$ <> ""
 keycode% = CVI(k$ + CHR$(0))
END FUNCTION

DEFSNG A-Z
SUB NewDataFIle
OPEN "ADRES.DAT" FOR OUTPUT AS #9
OPEN LST$ FOR OUTPUT AS #10
    ' VNaam$(t%), ANaam$(t%),    Straat$(t%), Hnummer$(t%), PCode$(t%), Stad$(t%), tel$(t%), GDatum$(t%), Extra1$(t%), Extra2$(t%)
WRITE #9, "Mr.", "Snow", "Heaven", "102", "9736 AD", "Holland", "06-9666", "1980-7-3", "From Xtance Coders All-", "iance 1997"

WRITE #10, "Mr.", "Snow"
CLOSE 9, 10

END SUB

SUB noBackup
expand 4, 5, 13, 75
LOCATE 6, 15: PRINT "You don't have made any BACKUP!!"
LOCATE 8, 15: PRINT "Sleep tyde and you better can "
LOCATE 9, 15: PRINT "Think first....."
LOCATE 11, 15: PRINT "Press [Enter] to return to the menu.."
DO: LOOP UNTIL INKEY$ = CHR$(13)
CLOSE

END SUB

SUB NOFilesFound
expand 4, 5, 13, 75
LOCATE 6, 15: PRINT "Can't Finde one of the FIles to Backup"
LOCATE 8, 15: PRINT "Files: ADRES.DAT ADRES.LST ADRES.EXE"
LOCATE 9, 15: PRINT "Think first....."
LOCATE 11, 15: PRINT "Press [Enter] to return to the menu.."
DO: LOOP UNTIL INKEY$ = CHR$(13)
CLOSE

END SUB

 SUB pause (ticks%) STATIC
    DEF SEG = 0
    DO UNTIL TestTick% > ticks%
	IF LEN(INKEY$) THEN EXIT SUB
	LastTick% = GetTick%
	GetTick% = PEEK(&H46C)
	IF LastTick% <> GetTick% THEN
	    TestTick% = TestTick% + 1
	END IF
    LOOP


    DEF SEG
 END SUB

SUB Reg
END SUB

SUB RESTOREBackup
ON ERROR GOTO Existfout
'(Bestand1$, Bestand2$, FileCopyShow%, Regel%, Waar%, BKleur%, FKleur%, Car%)
a = CHeckBestand("ADRES.BAK\ADRES.DAT")
b = CHeckBestand("ADRES.BAK\ADRES.EXE")
c = CHeckBestand("ADRES.BAK\ADRES.LST")
IF a = 0 OR b = 0 OR c = 0 THEN CALL noBackup
IF a = 0 OR b = 0 OR c = 0 THEN EXIT SUB

expand 4, 5, 10, 75
LOCATE 4, 35: PRINT "[ RESTORE ]"

CHDIR "ADRES.BAK"
CHDIR ".."


Copy "ADRES.BAK\ADRES.DAT", "ADRES.DAT", 1, 7, 15, 7, 1, 254
Copy "ADRES.BAK\ADRES.LST", LST$, 1, 7, 15, 7, 1, 254
Copy "ADRES.BAK\ADRES.EXE", "ADRES.EXE", 1, 7, 15, 7, 1, 254

ON ERROR GOTO fout
END SUB

FUNCTION ScanCode STATIC
    DO
	a$ = INKEY$
    LOOP WHILE a$ = ""
    IF ASC(LEFT$(a$, 1)) = 0 THEN
	ScanCode = -ASC(RIGHT$(a$, 1))
    ELSE
	ScanCode = ASC(a$)
    END IF
END FUNCTION

 SUB Shadow (UpRow%, LtColum%, LoRow%, RtColum%) STATIC
    DEF SEG = &H40
    mono% = PEEK(&H10)
    IF (mono% AND 48) = 48 THEN
	EXIT SUB            '*** Forget the Shadow if it's monochrome.
    ELSE
	DEF SEG = &HB800
    END IF

 attr% = SCREEN(LoRow% + 1, RtColum% + 1, -1)  ' Get the attribute.
    attr% = attr% AND 15                     ' Calculate forground.
    attr% = attr% - 8                        ' Remove bright.
    IF attr% < 1 THEN attr% = 8              ' In case color wasn't bright.


    FOR row% = UpRow% + 1 TO LoRow% + 1       '***** right edge locations.
	FOR Colum% = RtColum% + 1 TO RtColum% + 2   '***** make it 2 chars Wide.
	    offset% = (row% - 1) * 160 + (Colum% - 1) * 2 + 1
	    POKE offset%, attr%
	NEXT
    NEXT
    row% = LoRow% + 1                        '***** now POKE along the
    FOR Colum% = LtColum% + 2 TO RtColum% + 2      '***** bottom edge
	offset% = (row% - 1) * 160 + (Colum% - 1) * 2 + 1
	POKE offset%, attr%
    NEXT
    DEF SEG
 END SUB

DEFINT A-Z
SUB Show.KeuseLijst (aDres$(), BackADRES$(), til) STATIC
IF til = 0 THEN PRINT "NO ADresses": SLEEP 2: EXIT SUB
'IF Til < 11 THEN Til = Til
Begin:
BKleur = 7: FKleur = 1
COLOR BKleur, FKleur
CLSScreen

StartFile = 1 '2

StartOver:
CLSScreen
GOSUB lijn
GOSUB FilePRintLinks


StartToets:
LOCATE 5, 10: PRINT "["; til - 10; "Adresses Found ]"

LOCATE , , 0
DO
a$ = INKEY$
LOOP UNTIL a$ <> ""
'PRINT a$: END
SELECT CASE UCASE$(a$)
CASE CHR$(8)

IF LEN(Toetsen$) > 0 THEN
Toetsen$ = LEFT$(Toetsen$, LEN(Toetsen$) - 1)
END IF

CASE CHR$(13) '<--- Enter
ShowFile TagFIle
GOTO StartOver

CASE CHR$(27)        '<--- Esc
Toetsen$ = ""
LOCATE 23, 2: PRINT STRING$(30, 205); '<--- HELUPPPP
a$ = ""

CASE CHR$(0) + ";" '<-- F1
inPutFile til + 1 - 10
KeuseLijst

CASE CHR$(0) + "<" '<-- F2
expand 10, 20, 15, 60
LOCATE 11, 25: PRINT "Kill the DATA from:"
LOCATE 12, 30: PRINT "--> "; tagBack$; " "; tag$; "<--"
LOCATE 14, 27: PRINT "Keuse [Y/N]:";
DO: a$ = INKEY$: LOOP UNTIL a$ <> ""
PRINT UCASE$(a$)
IF UCASE$(a$) = "Y" OR UCASE$(a$) = "J" THEN
CALL DeleteAdres(TagFIle, til - 10)
CALL DeleteAdres.Lijst(TagFIle, til - 10)
KeuseLijst
ELSE
GOTO StartOver

END IF

CASE CHR$(0) + "=" '<-- F3
expand 9, 20, 11, 60
LOCATE 10, 23: PRINT "Realy! (Kill the LIST) [Y/N]: ";
DO: a$ = INKEY$: LOOP UNTIL a$ <> ""
IF UCASE$(a$) = "Y" OR UCASE$(a$) = "J" THEN
KILL "ADres.DAT": KILL "ADRES.LST"
NewDataFIle
KeuseLijst
ELSE
GOTO Begin
END IF

CASE CHR$(0) + ">"
Backup
GOTO Begin

CASE CHR$(0) + "?" '<-- F5
RESTOREBackup
CALL KeuseLijst

CASE CHR$(0) + "@" '<-- F6
inFO.Prog
GOTO StartOver

CASE CHR$(0) + "A"'<-- F7
info.MrSnow
GOTO StartOver

CASE CHR$(0) + "B" '<-- F8
COLOR 7, 0: CLS
PRINT "Type EXIT to return to the menu ..."
SHELL
CALL CheckShell
KeuseLijst

CASE CHR$(0) + "D" '<-- F10
COLOR 7, 0
CLS : PRINT "Thanks for using ADRES.EXE by Mr. Snow"
Reg
END
		    

CASE CHR$(0) + "P"
o = StartFile
StartFile = StartFile + 1
IF StartFile > til - 10 THEN StartFile = til - 10


CASE CHR$(0) + "H"
o = StartFile
StartFile = StartFile - 1
IF StartFile < 1 THEN StartFile = 1

CASE ELSE
o = StartFile
END SELECT
IF o <> StartFile THEN GOSUB FilePRintLinks
GOTO StartToets






FilePRintLinks:
COLOR 4, 7
LOCATE 10, 2: PRINT " --->                             <---"

COLOR BKleur, FKleur

FOR i = 7 TO 21
IF i = 10 THEN COLOR 4, 7 ELSE COLOR 7, 1
LOCATE i, 8: PRINT SPC(28);
LOCATE i, 8: PRINT aDres$(StartFile + i); " "; BackADRES$(StartFile + i)

IF i = 10 THEN tag$ = aDres$(StartFile + i): tagBack$ = BackADRES$(StartFile + i)
IF i = 10 THEN TagFIle = StartFile + i - 10

NEXT i
RETURN

lijn:
LOCATE , , 0
COLOR BKleur, FKleur
FOR lijn = 6 TO 23
LOCATE lijn, 1: PRINT CHR$(179); SPC(38); CHR$(179);
NEXT lijn

LOCATE 5, 1: PRINT CHR$(213); STRING$(38, 205); CHR$(184);
LOCATE 23, 1: PRINT CHR$(212); STRING$(38, 205); CHR$(190);
LOCATE 1, 1: PRINT CHR$(213); STRING$(78, 205); CHR$(184);
FOR lijn = 2 TO 3
LOCATE lijn, 1: PRINT CHR$(179); SPC(78); CHR$(179);
NEXT lijn

LOCATE 4, 1: PRINT CHR$(212); STRING$(78, 205); CHR$(190);

COLOR 0, 0
LOCATE 25, 1: PRINT SPACE$(80);
COLOR BKleur, FKleur
LOCATE 1, 30: PRINT "[ Done by MrSnow '95 ]"
LOCATE 7, 50: PRINT "F1 - Input new adres"
LOCATE 8, 50: PRINT "F2 - Remove adres"
LOCATE 9, 50: PRINT "F3 - Clear List"
LOCATE 10, 50: PRINT "F4 - Make BACKup of LIST"
LOCATE 11, 50: PRINT "F5 - REstore BACKup of LIST"
LOCATE 12, 50: PRINT "F6 - Info About Programm"
LOCATE 13, 50: PRINT "F7 - Info About MrSnow '95"
LOCATE 14, 50: PRINT "F8 - Shell to Dos"

LOCATE 17, 50: PRINT "F10 - Exit Menu"
COLOR BKleur, 0
RETURN


END SUB

DEFSNG A-Z
SUB ShowFile (t%) STATIC
COLOR 7, 1
OPEN "ADRES.DAT" FOR INPUT AS #1

FOR i = 1 TO t% - 1
INPUT #1, VNaam$(t%), ANaam$(t%), Straat$(t%), Hnummer$(t%), PCode$(t%), Stad$(t%), Tel$(t%), GDatum$(t%), Extra1$(t%), Extra2$(t%)
NEXT i
INPUT #1, VNaam$(t%), ANaam$(t%), Straat$(t%), Hnummer$(t%), PCode$(t%), Stad$(t%), Tel$(t%), GDatum$(t%), Extra1$(t%), Extra2$(t%)
CLOSE 1
expand 5, 8, 20, 55
LOCATE 6, 10: PRINT "VoorNaam :";
CALL COL(14, 1, VNaam$(t%), 7, 1)
LOCATE 7, 10: PRINT "AchterNaam :";
CALL COL(14, 1, ANaam$(t%), 7, 1)
LOCATE 8, 10: PRINT "Straat :";
CALL COL(14, 1, Straat$(t%), 7, 1)
LOCATE 9, 10: PRINT "HuisNummer :";
CALL COL(14, 1, Hnummer$(t%), 7, 1)
LOCATE 10, 10: PRINT "PostCode :";
CALL COL(14, 1, PCode$(t%), 7, 1)
LOCATE 11, 10: PRINT "Plaats (Stad) :";
CALL COL(14, 1, Stad$(t%), 7, 1)
LOCATE 12, 10: PRINT "TeleFoon :";
CALL COL(14, 1, Tel$(t%), 7, 1)
LOCATE 13, 10: PRINT "GeboorteDatum :";
CALL COL(14, 1, GDatum$(t%), 7, 1)

LOCATE 15, 10: PRINT "Extra :";
CALL COL(14, 1, Extra1$(t%), 7, 1)
LOCATE 16, 10: PRINT "Extra :";
CALL COL(14, 1, Extra2$(t%), 7, 1)

LOCATE 18, 10: PRINT "Press [Enter] to return to the ADRES Menu"
DO: LOOP UNTIL INKEY$ = CHR$(13)
END SUB
