home *** CD-ROM | disk | FTP | other *** search
- Declare SUB IM (xn%, fc$, ifn$, kl%, ky$, rn&, rc%)
-
- 'COLOR 14, 1
- 'CALL SaveScrn(a$)
- 'CLS : FILES
- 'CALL SaveScrn(b$)
- 'CLS : SHELL "DIR"
- 'CALL SaveScrn(c$)
- 'CLS
- 'PRINT "Press a key...";
- 'DO: LOOP WHILE INKEY$ = ""
- 'CALL RestoreScrn(c$)
- 'CALL PopWindow(10, 10, 20, 70, 78)
- 'LOCATE 25, 1
- 'PRINT "Press a key...";
- 'DO: LOOP WHILE INKEY$ = ""
- 'CALL RestoreScrn(b$)
- 'LOCATE 25, 1
- 'PRINT "Press a key...";
- 'DO: LOOP WHILE INKEY$ = ""
- 'CALL RestoreScrn(a$)
- 'LOCATE 25, 1
- 'PRINT "Press a key...";
- 'CLS
- 'END
-
- SUB AddKeyRec (krs%, ky$, Rec$, rn&, status%) public
- CALL Info(krs%, xn%, kl%, Rfn%, Rfl%)
- if Rfl%>0 then rn& = (LOF(Rfn%) \ Rfl%) + 1
- fc$ = "A": CALL im(xn%, fc$, ifn$, kl%, ky$, rn&, rc%)
- status% = rc% ' rc% = 109 is duplicate key
- IF rc% <> 0 THEN
- CALL IndexError(rc%)
- ELSE
- IF LEN(Rec$) < Rfl% THEN Rec$ = Rec$ + SPACE$(Rfl% - LEN(Rec$))
- if len(Rec$)>0 and rn&>0 then PUT #Rfn%, rn&, Rec$
- END IF
- END SUB
-
- SUB Cdate (dt$) public
- ' Format Date$ converted to YYMMDD dt$ passed as ""
- ' Format YYMMDDD converted to MM-DD-YY
- IF LEN(dt$) = 6 THEN
- dt$ = MID$(dt$, 3, 2) + "-" + MID$(dt$, 5, 2) + "-" + MID$(dt$, 1, 2)
- END IF
- IF LEN(dt$) = 0 THEN
- dt$ = MID$(DATE$, 9, 2) + MID$(DATE$, 1, 2) + MID$(DATE$, 4, 2)
- END IF
- END SUB
-
- FUNCTION ColorAttribute% (row%, col%) public
- DEF SEG = GetVideoSegment
- '*** Determine the background color of the cel at row%, col% ****
- step1% = (PEEK(((row% - 1) * 160) + ((col% - 1) * 2) + 1) AND &HFF)
- ColorAttribute% = step1%
- DEF SEG '**** Restore BASIC's default data segment ****
- END FUNCTION
-
- SUB DateEdit (row%, col%, colr%, vk$, dt$, xk%) public
- ' Typ% =1 Edit MM/DD/YYYY returns YYYYMMDD
- ' Typ% =2 Edit MM/DD/YYYY returns YYYDDD YYY= YYYY-1700
- ' Typ% =3 Edit MM/DD/YYYY returns YYYYDDD
- st$ = dt$: fld% = 10: Typ% = xk%
- FOR xk% = 48 TO 57: vk$ = vk$ + CHR$(xk%): NEXT
- IF colr% = -1 THEN colr% = ColorAttribute%(row%, col%)
- SELECT CASE Typ%
- CASE 1
- st$ = MID$(dt$, 5, 2) + "-" + MID$(dt$, 7, 2) + "-" + MID$(dt$, 1, 4)
- CASE 2
- CALL Julian(st$) ' get back MM-DD-YYYY
- CASE 3
- CALL Julian(st$) ' get back MM-DD-YYYY
- END SELECT
- DO
- CALL FastPrint(row%, col%, st$, colr%)
- IF c% <= 0 THEN c% = 0
- IF c% = 2 THEN c% = 3
- IF c% = 5 THEN c% = 6
- IF c% >= fld% THEN c% = fld% - 1
- LOCATE row%, (col% + c%), 1, 6, 7
- xk% = KeyIn%
- IF xk% > 0 AND xk% < 255 THEN
- IF INSTR(vk$, CHR$(xk%)) AND c% < fld% THEN
- c% = c% + 1: MID$(st$, c%, 1) = CHR$(xk%)
- END IF
- END IF
- SELECT CASE xk%
- CASE 13
- SELECT CASE Typ%
- CASE 1
- dt$ = MID$(st$, 7, 4) + MID$(st$, 1, 2) + MID$(st$, 4, 2)
- CASE 2
- CALL Julian(st$)
- Year% = VAL(MID$(st$, 1, 4)) - 1300
- dt$ = MID$(STR$(Year%), 2) + MID$(st$, 5, 3)
- CASE 3
- CALL Julian(st$): dt$ = st$ ' get back YYYYDDD
- END SELECT
- CASE 8 ' Backspace Key
- MID$(st$, (c% + 1), 1) = " ": c% = c% - 1
- IF c% = 2 THEN c% = 1
- IF c% = 5 THEN c% = 4
- CASE -46 ' Alt C to clear field
- st$ = " - - ": c% = 0
- CASE -71
- c% = 0: xk% = 0 ' Home Key start of field
- CASE -79
- c% = fld% - 1: xk% = 0 ' End Key end of field
- CASE -75
- c% = c% - 1: xk% = 0 ' Left Arrow Key
- IF c% = 2 THEN c% = 1
- IF c% = 5 THEN c% = 4
- CASE -77
- c% = c% + 1: xk% = 0 ' Right Arrow Key
- IF c% = 2 THEN c% = 3
- IF c% = 5 THEN c% = 6
- END SELECT
- IF xk% = -77 OR xk% = -75 OR xk% = -83 OR xk% = -82 OR xk% = -46 THEN xk% = 0
- IF xk% < 0 OR xk% = 13 OR xk% = 27 THEN EXIT SUB ' Exit keys
- LOOP
- END SUB
-
- FUNCTION DayOfWeek$ public
- IF VAL(dt$) < 1991001 THEN
- ndays& = NumDays("1991003", dt$)
- ELSE
- ndays& = NumDays(dt$, "1991003")
- END IF
- day% = 1 + (ndays& MOD 7)
- SELECT CASE day%
- CASE 1
- DayOfWeek = "Sunday"
- CASE 2
- DayOfWeek = "Monday"
- CASE 3
- DayOfWeek = "Tuesday"
- CASE 4
- DayOfWeek = "Wednesday"
- CASE 5
- DayOfWeek = "Thursday"
- CASE 6
- DayOfWeek = "Friday"
- CASE 7
- DayOfWeek = "Saturday"
- CASE ELSE
- DayOfWeek = "Error"
- END SELECT
- END FUNCTION
-
- SUB DeleteKeyRec (krs%, ky$, Rec$, status%) public
- ' Deletes Current Key & Data Record or Just Key
- CALL Info(krs%, xn%, kl%, Rfn%, Rfl%)
- fc$ = "R": CALL im(xn%, fc$, ifn$, kl%, ky$, rn&, rc%)
- IF rc% <> 0 THEN CALL IndexError(rc%): EXIT SUB
- fc$ = "D": CALL im(xn%, fc$, ifn$, kl%, ky$, rn&, rc%)
- IF rc% <> 0 THEN
- CALL IndexError(rc%): status% = rc%
- ELSE
- ' Delete Rec$ if Rec$ not a nul
- IF Rec$ <> "" AND Rfn% <> 0 AND rn& > 0 THEN
- Rec$ = SPACE$(Rfl%): PUT #Rfn%, rn&, Rec$
- END IF
- END IF
- END SUB
-
- SUB EditField (row%, col%, colr%, vk$, st$, xk%) public
- fld% = LEN(st$)
- IF colr% = -1 THEN colr% = ColorAttribute%(row%, col%)
- IF xk% > 10 THEN cap% = 1: xk% = xk% - 10
- SELECT CASE xk%
- CASE 1 ' All keys accepted
- FOR xk% = 32 TO 126: vk$ = vk$ + CHR$(xk%): NEXT
- CASE 2 ' Numeric ONLY
- FOR xk% = 48 TO 57: vk$ = vk$ + CHR$(xk%): NEXT
- CASE 3 ' Numeric DECIMAL
- FOR xk% = 42 TO 57: vk$ = vk$ + CHR$(xk%): NEXT
- CASE 4 ' Alpha ONLY
- FOR xk% = 65 TO 90: vk$ = vk$ + CHR$(xk%): NEXT
- FOR xk% = 97 TO 122: vk$ = vk$ + CHR$(xk%): NEXT
- END SELECT
- DO
- IF cap% = 1 THEN st$ = UCASE$(st$)
- CALL FastPrint(row%, col%, st$, colr%)
- IF c% >= fld% THEN c% = fld% - 1
- IF c% < 0 THEN c% = 0
- LOCATE row%, (col% + c%), 1, 6, 7
- xk% = KeyIn%
- IF xk% > 0 AND xk% < 255 THEN
- IF INSTR(vk$, CHR$(xk%)) AND c% < fld% THEN
- c% = c% + 1: MID$(st$, c%, 1) = CHR$(xk%)
- END IF
- END IF
- SELECT CASE xk%
- CASE 8 ' Backspace Key
- MID$(st$, (c% + 1), 1) = " ": c% = c% - 1
- CASE -83 ' Del Key
- new$ = MID$(st$, 1, c%) + MID$(st$, (c% + 2), fld%) + " "
- st$ = new$: new$ = ""
- CASE -82 ' Insert Key
- new$ = MID$(st$, 1, c%) + " " + MID$(st$, (c% + 1), (fld% - 1))
- st$ = new$: new$ = ""
- CASE -46 ' Alt C to clear field
- st$ = SPACE$(fld%): c% = 0
- CASE -71
- c% = 0: xk% = 0 ' Home Key start of field
- CASE -79
- c% = fld% - 1: xk% = 0 ' End Key end of field
- CASE -75
- c% = c% - 1: xk% = 0 ' Left Arrow Key
- CASE -77
- c% = c% + 1: xk% = 0 ' Right Arrow Key
- END SELECT
- IF xk% = -77 OR xk% = -75 OR xk% = -83 OR xk% = -82 OR xk% = -46 THEN xk% = 0
- IF xk% < 0 OR xk% = 13 OR xk% = 27 THEN EXIT SUB ' Exit keys
- LOOP
- END SUB
-
- SUB FastPrint (row%, col%, st$, colr%) public
- '**** Get Current screen color if colr% set to -1 *****
- IF colr% = -1 THEN colr% = ColorAttribute%(row%, col%)
- '**** Calculate video memory offset, where display will begin ****
- offset% = 160 * (row% - 1) + 2 * (col% - 1)
- DEF SEG = GetVideoSegment '** Set default data segment to screen memory **
- '**** Place the string into video memory, along with the color ****
- stPos% = 1
- FOR x% = 0 TO ((LEN(st$) - 1) * 2) STEP 2
- POKE x% + offset%, ASC(MID$(st$, stPos%, 1))
- POKE x% + offset% + 1, colr%
- stPos% = stPos% + 1
- NEXT x%
- DEF SEG '**** Restore BASIC's default data segment ****
- END SUB
-
-
- SUB GetEqual (krs%, ky$, Rec$, rn&, status%) public
- ' to get first record make ky$ < first possible record
- ' to get last record make k$ > last possible record
- CALL Info(krs%, xn%, kl%, Rfn%, Rfl%)
- fc$ = "Q": CALL im(xn%, fc$, ifn$, kl%, ky$, rn&, rc%)
- status% = rc%: Rec$ = SPACE$(Rfl%)
- IF rc% <> 0 THEN
- If rc%> 114 and rc%<117 then
- fc$ = "L" :CALL im(xn%, fc$, ifn$, kl%, ky$, rn&, rc%)
- else
- CALL IndexError(rc%): exit sub
- end if
- end if
- ' Get the associated data record if the data file exists
- IF Rfl% > 0 AND rn& <= LOF(Rfn%) \ Rfl% AND rn& > 0 THEN
- GET #Rfn%, rn&, Rec$
- END IF
- END SUB
-
- SUB GetNext (krs%, ky$, Rec$, status%) public
- CALL Info(krs%, xn%, kl%, Rfn%, Rfl%)
- ky$ = SPACE$(kl%)
- fc$ = "N": CALL im(xn%, fc$, ifn$, kl%, ky$, rn&, rc%)
- status% = rc%: Rec$ = SPACE$(Rfl%)
- IF rc% <> 0 THEN
- IF rc% = 116 THEN
- fc$ = "L":CALL im(xn%, fc$, ifn$, kl%, ky$, rn&, rc%)
- ELSE
- CALL IndexError(rc%): exit sub
- END IF
- END IF
- ' Get the associated data record if the data file exists
- IF Rfl% > 0 AND rn& <= LOF(Rfn%) \ Rfl% AND rn& > 0 THEN
- GET #Rfn%, rn&, Rec$
- END IF
- END SUB
-
- SUB GetPrev (krs%, ky$, Rec$, status%) public
- CALL Info(krs%, xn%, kl%, Rfn%, Rfl%)
- ky$ = SPACE$(kl%)
- fc$ = "L": CALL im(xn%, fc$, ifn$, kl%, ky$, rn&, rc%)
- status% = rc%: Rec$ = SPACE$(Rfl%)
- IF rc% <> 0 THEN
- IF rc% = 116 THEN
- ky$=space$(kl%): fc$ = "Q"
- CALL im(xn%, fc$, ifn$, kl%, ky$, rn&, rc%)
- ELSE
- CALL IndexError(rc%): exit sub
- END IF
- 'ky$= space$(kl%)
- END IF
- ' Get the associated data record if the data file exists
- IF Rfl% > 0 AND rn& <= LOF(Rfn%) \ Rfl% AND rn& > 0 THEN
- GET #Rfn%, rn&, Rec$
- END IF
- END SUB
-
- FUNCTION GetVideoSegment& public
- DEF SEG = 0 '**** Set default segment to 0 ****
- adapter = PEEK(&H463) '** PEEK at value stored at video adapter address.**
- '**** Set function equal to proper segment value. ****
- IF adapter = &HB4 THEN
- GetVideoSegment& = &HB000 '**** Monochrom Monitor was reported
- ELSE
- GetVideoSegment& = &HB800 '**** Color Monitor was reported
- END IF
- END FUNCTION
-
- SUB IndexError (rc%) public
- CALL SaveScrn(Scrn$)
- CALL PopWindow(3, 23, 6, 57, 78)
- st$ = "Index Manager Failed Code:"+str$(rc%)
- CALL FastPrint(4, 25, st$, 78)
- gosub GetRC : CALL FastPrint(5, 30, st$, 78)
- xk%=KeyIn%
- CALL RestoreScrn(Scrn$)
- exit sub
- GetRC:
- select case rc%
- case 1
- st$="Function Number Invalid"
- case 2
- st$= "File Name Invalid"
- case 3
- st$="File/Path Not Found"
- case 4
- st$= "Handle Not Available"
- case 5
- st$="File Name Access Denied"
- case 6
- st$= "Handle Invalid or Not Opened"
- case 101
- st$="Invalid Index Number"
- case 102
- st$= "Invalid Function Code"
- case 103
- st$="Invalid File Name"
- case 104
- st$= "Invalid Key Lenghth"
- case 105, 108
- st$="Invalid Key"
- case 106
- st$= "Invalid Record Number"
- case 107
- st$="Index Not Opened"
- case 109
- st$= "Duplicate Key"
- case 110
- st$="Disk Full/Write Error"
- case 111
- st$= "Invalid Index Block Size"
- case 112
- st$="Index Already In Use"
- case 113, 114
- st$= "Invalid Block/Record Read"
- case 115
- st$="Key Not Found"
- case 116
- st$= "End Of File"
- case else
- st$= "Unknown Error"
- end select
- return
- END SUB
-
- SUB Info (krs%, xn%, kl%, Rfn%, Rfl%) public
- STATIC xn1%, kl1%, Rfn1%, Rfl1%
- STATIC xn2%, kl2%, Rfn2%, Rfl2%
- STATIC xn3%, kl3%, Rfn3%, Rfl3%
- STATIC xn4%, kl4%, Rfn4%, Rfl1%
- STATIC xn5%, kl5%, Rfn5%, Rfl2%
- STATIC xn6%, kl6%, Rfn6%, Rfl3%
- STATIC xn7%, kl7%, Rfn7%, Rfl1%
- STATIC xn8%, kl8%, Rfn8%, Rfl2%
- STATIC xn9%, kl9%, Rfn9%, Rfl3%
- STATIC xn10%, kl10%, Rfn10%, Rfl10%
- STATIC xn11%, kl11%, Rfn11%, Rfl11%
- STATIC xn12%, kl12%, Rfn12%, Rfl12%
- SELECT CASE krs%
- CASE -1 ' store information about key-record-set (krs%)
- xn1% = xn%: kl1% = kl%: Rfn1% = Rfn%: Rfl1% = Rfl%
- CASE 1 ' retrieve information about key-record-set (krs%)
- xn% = xn1%: kl% = kl1%: Rfn% = Rfn1%: Rfl% = Rfl1%
- CASE -2
- xn2% = xn%: kl2% = kl%: Rfn2% = Rfn%: Rfl2% = Rfl%
- CASE 2
- xn% = xn2%: kl% = kl2%: Rfn% = Rfn2%: Rfl% = Rfl2%
- CASE -3
- xn3% = xn%: kl3% = kl%: Rfn3% = Rfn%: Rfl3% = Rfl%
- CASE 3
- xn% = xn3%: kl% = kl3%: Rfn% = Rfn3%: Rfl% = Rfl3%
- CASE -4
- xn4% = xn%: kl4% = kl%: Rfn4% = Rfn%: Rfl4% = Rfl%
- CASE 4
- xn% = xn4%: kl% = kl4%: Rfn% = Rfn4%: Rfl% = Rfl4%
- CASE -5
- xn5% = xn%: kl5% = kl%: Rfn5% = Rfn%: Rfl5% = Rfl%
- CASE 5
- xn% = xn5%: kl% = kl5%: Rfn% = Rfn5%: Rfl% = Rfl5%
- CASE -6
- xn6% = xn%: kl6% = kl%: Rfn6% = Rfn%: Rfl6% = Rfl%
- CASE 6
- xn% = xn6%: kl% = kl6%: Rfn% = Rfn6%: Rfl% = Rfl6%
- CASE -7
- xn7% = xn%: kl7% = kl%: Rfn7% = Rfn%: Rfl7% = Rfl%
- CASE 7
- xn% = xn7%: kl% = kl7%: Rfn% = Rfn7%: Rfl% = Rfl7%
- CASE -8
- xn8% = xn%: kl8% = kl%: Rfn8% = Rfn%: Rfl8% = Rfl%
- CASE 8
- xn% = xn8%: kl% = kl8%: Rfn% = Rfn8%: Rfl% = Rfl8%
- CASE -9
- xn9% = xn%: kl9% = kl%: Rfn9% = Rfn%: Rfl9% = Rfl%
- CASE 9
- xn% = xn9%: kl% = kl9%: Rfn% = Rfn9%: Rfl% = Rfl9%
- CASE -10
- xn10% = xn%: kl10% = kl%: Rfn10% = Rfn%: Rfl10% = Rfl%
- CASE 10
- xn% = xn10%: kl% = kl10%: Rfn% = Rfn10%: Rfl% = Rfl10%
- CASE -11
- xn11% = xn%: kl11% = kl%: Rfn11% = Rfn%: Rfl11% = Rfl%
- CASE 11
- xn% = xn11%: kl% = kl11%: Rfn% = Rfn11%: Rfl% = Rfl11%
- CASE -12
- xn12% = xn%: kl12% = kl%: Rfn12% = Rfn%: Rfl12% = Rfl%
- CASE 12
- xn% = xn12%: kl% = kl12%: Rfn% = Rfn12%: Rfl% = Rfl12%
- CASE -13
- xn13% = xn%: kl13% = kl%: Rfn13% = Rfn%: Rfl13% = Rfl%
- CASE 13
- xn% = xn13%: kl% = kl13%: Rfn% = Rfn13%: Rfl% = Rfl13%
- END SELECT
- END SUB
-
- FUNCTION IntgrToDollar$ (Intgr&, L%) public
- st$ = STR$(Intgr&)
- IF LEN(st$) < 3 THEN EXIT Function
- t$ = SPACE$(L%) + MID$(st$, 1, (LEN(st$) - 2)) + "." + MID$(st$, (LEN(st$) - 2), 2)
- IntgrToDollar$ = RIGHT$(t$, L%)
- END FUNCTION
-
- SUB Julian (dt$) public
- ' Format MM-DD-YYYY converted to YYYYDDD
- ' Format YYYYDDD converted to MM-DD-YYYY
- ' Format YYYDDD converted to MM-DD-YYYY
- IF LEN(dt$) = 6 THEN
- Year% = 1300 + VAL(MID$(dt$, 1, 3)): st$ = STR$(Year%) + MID$(dt$, 4, 3)
- dt$ = MID$(st$, 2)
- END IF
- IF LEN(dt$) = 10 THEN
- Year% = VAL(MID$(dt$, 7, 4)): Month% = VAL(MID$(dt$, 1, 2))
- day% = VAL(MID$(dt$, 4, 2))
- ddd% = INT((Month% * 30.5) + (day% - 29.5) + .5 * (Month% < 8) + (Month% > 2) * (2 + ((Year% MOD 4) = 0)))
- jd$ = STR$((ddd% + 1000))
- st$ = MID$(dt$, 7, 4) + RIGHT$(jd$, 3): dt$ = st$
- EXIT SUB
- END IF
- IF LEN(dt$) = 7 THEN
- Year% = VAL(MID$(dt$, 1, 4)): ddd% = VAL(MID$(dt$, 5, 3))
- IF Year% MOD 4 = 0 THEN
- M% = 13 + (ddd% < 367) + (ddd% < 336) + (ddd% < 306) + (ddd% < 275) + (ddd% < 245) + (ddd% < 214) + (ddd% < 183) + (ddd% < 153) + (ddd% < 122) + (ddd% < 92) + (ddd% < 61) + (ddd% < 32)
- day% = ddd% + (M% = 12) * 335 + (M% = 11) * 305 + (M% = 10) * 274 + (M% = 9) * 244 + (M% = 8) * 213 + (M% = 7) * 182 + (M% = 6) * 152 + (M% = 5) * 121 + (M% = 4) * 91 + (M% = 3) * 60 + (M% = 2) * 31
- ELSE
- M% = 13 + (ddd% < 366) + (ddd% < 335) + (ddd% < 305) + (ddd% < 274) + (ddd% < 244) + (ddd% < 213) + (ddd% < 182) + (ddd% < 152) + (ddd% < 121) + (ddd% < 91) + (ddd% < 60) + (ddd% < 32)
- day% = ddd% + (M% = 12) * 334 + (M% = 11) * 304 + (M% = 10) * 273 + (M% = 9) * 243 + (M% = 8) * 212 + (M% = 7) * 181 + (M% = 6) * 151 + (M% = 5) * 120 + (M% = 4) * 90 + (M% = 3) * 59 + (M% = 2) * 31
- END IF
- M$ = RIGHT$(STR$(100 + M%), 2): d$ = RIGHT$(STR$(100 + day%), 2)
- st$ = M$ + "-" + d$ + "-" + MID$(dt$, 1, 4): dt$ = st$
- END IF
- END SUB
-
- FUNCTION KeyIn% public
- DO: ky$ = INKEY$: LOOP UNTIL LEN(ky$) ' wait for a key press
- KeyIn% = (ASC(ky$) * -(LEN(ky$) = 1)) + (ASC(RIGHT$(ky$, 1)) * (LEN(ky$) <> 1))
- END FUNCTION
-
- FUNCTION NumDays& (dt1$, dt2$) public
- ' dt1$= Most resent date YYMMDD
- ' dt2$= Oldest date YYMMDD
- ' nd&= Value returned... number of days between dates
- yr% = VAL(MID$(dt1$, 1, 2))
- yr1% = (-(1900 + yr%) * (yr% > 80)) - ((2000 + yr%) * (yr% <= 80))
- mo1% = VAL(MID$(dt1$, 3, 2))
- da1% = VAL(MID$(dt1$, 5, 2))
- days1& = (yr1% MOD 1900) * 365.25 + .75 ' # of days since 1900
- ddd% = INT((mo1% * 30.5) + (da1% - 29.5) + .5 * (mo1% < 8) + (mo1% > 2) * (2 + ((yr1% MOD 4) = 0)))
- days1& = days1& + ddd%
- yr% = VAL(MID$(dt2$, 1, 2))
- yr2% = (-(1900 + yr%) * (yr% > 80)) - ((2000 + yr%) * (yr% <= 80))
- mo2% = VAL(MID$(dt2$, 3, 2))
- da2% = VAL(MID$(dt2$, 5, 2))
- days2& = (yr2% MOD 1900) * 365.25 + .75 ' # of days since 1900
- ddd% = INT((mo2% * 30.5) + (da2% - 29.5) + .5 * (mo2% < 8) + (mo2% > 2) * (2 + ((yr2% MOD 4) = 0)))
- days2& = days2& + ddd%
- NumDays& = days1& - days2&
- END FUNCTION
-
- FUNCTION NumToString$ (n#, dp%, Ln%) public
- L% = Ln%
- IF L% = 0 THEN EXIT Function
- IF dp% <= 0 THEN
- t& = n#: NumToString$ = RIGHT$((SPACE$(L%) + STR$(t&)), L%)
- ELSE
- t& = (n# * (10 ^ dp%)): st$ = RIGHT$((SPACE$(L%) + STR$(t&)), L%)
- r$ = STRING$((dp% - 1), "0") + MID$((STR$(t& MOD (10 ^ dp%))), 2, dp%)
- t$ = SPACE$(L%) + STR$(t& \ (10 ^ dp%)) + "." + RIGHT$(r$, dp%)
- NumToString$ = RIGHT$(t$, L%)
- END IF
- END FUNCTION
-
- SUB PhoneEdit (row%, col%, colr%, vk$, pn$, xk%) public
- ' Typ% =1 Edit (AAA)XXX-NNNN returns AAAXXXNNNN
- st$ = pn$: fld% = 14: Typ% = xk%: c% = 1
- FOR xk% = 48 TO 57: vk$ = vk$ + CHR$(xk%): NEXT
- IF colr% = -1 THEN colr% = ColorAttribute%(row%, col%)
- st$ = "(" + MID$(pn$, 1, 3) + ") " + MID$(pn$, 4, 3) + "-" + MID$(pn$, 7, 4)
- REDIM S$(fld%): FOR a% = 1 TO fld%: S$(a%) = MID$(st$, a%, 1): NEXT
- DO
- CALL FastPrint(row%, col%, st$, colr%)
- IF c% = 0 THEN c% = 1
- IF c% = 4 THEN c% = 6
- IF c% = 5 THEN c% = 6
- IF c% = 9 THEN c% = 10
- IF c% >= fld% THEN c% = fld% - 1
- LOCATE row%, (col% + c%), 1, 6, 7
- xk% = KeyIn%
- IF xk% > 0 AND xk% < 255 THEN
- IF INSTR(vk$, CHR$(xk%)) AND c% < fld% THEN
- c% = c% + 1
- S$(c%) = CHR$(xk%)
- st$ = "": FOR a% = 1 TO fld%: st$ = st$ + S$(a%): NEXT
- END IF
- END IF
- SELECT CASE xk%
- CASE 13
- pn$ = MID$(st$, 2, 3) + MID$(st$, 7, 3) + MID$(st$, 11, 4)
- CASE 8 ' Backspace Key
- S$(c% + 1) = " ": c% = c% - 1
- IF c% = 4 THEN c% = 3
- IF c% = 5 THEN c% = 3
- IF c% = 9 THEN c% = 8
- st$ = "": FOR a% = 1 TO fld%: st$ = st$ + S$(a%): NEXT
- CASE -46 ' Alt C to clear field
- st$ = "(" + SPACE$(3) + ") " + SPACE$(3) + "-" + SPACE$(4)
- FOR a% = 1 TO fld%: S$(a%) = MID$(st$, a%, 1): NEXT
- c% = 1
- CASE -71
- c% = 1: xk% = 0 ' Home Key start of field
- CASE -79
- c% = fld% - 1: xk% = 0 ' End Key end of field
- CASE -75
- c% = c% - 1: xk% = 0 ' Left Arrow Key
- IF c% = 4 THEN c% = 3
- IF c% = 5 THEN c% = 3
- IF c% = 9 THEN c% = 8
- CASE -77
- c% = c% + 1: xk% = 0 ' Right Arrow Key
- IF c% = 4 THEN c% = 6
- IF c% = 5 THEN c% = 6
- IF c% = 9 THEN c% = 10
- END SELECT
- IF xk% = -77 OR xk% = -75 OR xk% = -83 OR xk% = -82 OR xk% = -46 THEN xk% = 0
- IF xk% < 0 OR xk% = 13 OR xk% = 27 THEN EXIT SUB ' Exit keys
- LOOP
- END SUB
-
- SUB PutScreen (file$) public
- '**** Set the memory segment to the address of screen memory ****
- DEF SEG = GetVideoSegment
- '**** Use the BASIC BLOAD statement to load the saved screen to video RAM **
- LOCATE 1, 1, 0: BLOAD file$, 0
- DEF SEG '**** Restore BASIC's default data segment ****
- END SUB
-
- SUB Wipe (top%, lft%, bottom%, rght%, colr%) public
- ' colr% - combined fg & bg color colr% = fg% + (bg% * 16) │
- ' top% - The top-most row to clear. Allowable range is 1 to 25.
- ' bottom% - The bottom-most row to clear. Allowable range is 1 to 25. │
- ' lft% - The left-most column to clear. Allowable range is 1 to 80. │
- ' rght% - The right-most column to clear. Allowable range is 1 to 80. │
- ' Clear the selected portion of the screen by overwriting with spaces
-
- FOR x% = top% + 1 TO bottom% - 1
- st$ = SPACE$(rght% - lft% - 1)
- CALL FastPrint(x%, (lft% + 1), st$, colr%)
- NEXT x%
- END SUB
-
- SUB RestoreScrn (Scrn$) Public
- DEF SEG = GetVideoSegment&
- POKE$ 0, Scrn$
- DEF SEG
- END SUB
-
- SUB SaveScrn (Scrn$) Public
- DEF SEG = GetVideoSegment&
- 'bRow% = (bRow% - 1) * 80: eRow% = (eRow% - 1) * 80
- Scrn$ = PEEK$(0, 4000)
- DEF SEG
- END SUB
-
- SUB PopWindow (Wa%, Wb%, Wc%, Wd%, colr%) Public
- '
- ' Wa% = TopRow% Wb% = LeftCol% Wc% = BottomRow% Wd% = RightCol%
-
- a$ = STRING$((Wd% - Wb%) - 1, 196)
- st$ = CHR$(218) + a$ + CHR$(191)
- CALL FastPrint(Wa%, Wb%, st$, colr%)
- st$ = CHR$(192) + a$ + CHR$(217)
- CALL FastPrint(Wc%, Wb%, st$, colr%)
-
- 'Side shadow
- segment& = GetVideoSegment&
- FOR x% = Wa% TO Wc% - 1
- offset% = (160 * x%) + (Wd% * 2) + 1
- sf% = GetForeground%(x% + 1, INT(Wd% + 1))
- IF sf% > 15 THEN blink% = 128 ELSE blink% = 0
- IF sf% > 7 THEN sf% = (sf% MOD 8) + blink%
- DEF SEG = segment&: POKE offset%, sf%: DEF SEG
- sf% = GetForeground%(x% + 1, INT(Wd% + 2))
- IF sf% > 15 THEN blink% = 128 ELSE blink% = 0
- IF sf% > 7 THEN sf% = (sf% MOD 8) + blink%
- DEF SEG = segment&: POKE offset% + 2, sf%: DEF SEG
- NEXT x%
-
- ' Main Body Of Window
- x% = Wc% - Wa% - 1 ' Limit
- FOR xyz% = 1 TO x%
- st$ = CHR$(179) + SPACE$((Wd% - Wb%) - 1) + CHR$(179)
- CALL FastPrint((Wa% + xyz%), Wb%, st$, colr%)
- NEXT xyz%
-
- ' Bottom shadow
- offset% = (Wc% * 160): col% = INT(Wb% + 2)
- FOR x% = ((Wb% + 1) * 2) TO ((Wd% + 1) * 2) STEP 2
- sf% = GetForeground%(INT(Wc%) + 1, col%)
- col% = col% + 1
- IF sf% > 15 THEN blink% = 128 ELSE blink% = 0
- IF sf% > 7 THEN sf% = (sf% MOD 8) + blink%
- DEF SEG = segment&: POKE offset% + x% + 1, sf%: DEF SEG
- NEXT x%
- END SUB
-
- FUNCTION GetBackground% (row%, col%) Public
- DEF SEG = GetVideoSegment&
- ' Get color attribute byte
- attr% = PEEK(((row% - 1) * 160) + ((col% - 1) * 2) + 1)
- ' Calculate background
- step1% = (attr% AND &HFF) \ 16
- IF step1% > 7 THEN ' Foreground is blinking
- GetBackground% = step1% - 8
- ELSE ' Foreground is NOT blinking
- GetBackground% = step1%
- END IF
- DEF SEG
- END FUNCTION
-
- FUNCTION GetForeground% (row%, col%) Public
- DEF SEG = GetVideoSegment&
- ' Calculate color attribute byte
- attr% = PEEK(((row% - 1) * 160) + ((col% - 1) * 2) + 1)
- ' Calculate foreground color
- step1% = attr% AND &HFF
- IF step1% > 127 THEN ' Color is blinking
- GetForeground% = ((step1% - 128) MOD 16) + 16
- ELSE ' Color is NOT blinking
- GetForeground% = step1% MOD 16
- END IF
- DEF SEG
- END FUNCTION
-
- FUNCTION FILEXISTS% (FILNAM$) public
- %FLAGS=0 : %AX=1 : %CX=3 : %DX=4 : %DS=8 : %ES=9
-
- FILEXISTS% = -1 : DTA$=STRING$(44,0) : SPEC$=FILNAM$ + CHR$(0)
-
- REG %DS,STRSEG(DTA$) : REG %DX,STRPTR(DTA$) : REG %AX,&H1A00
- CALL INTERRUPT &H21
-
- REG %DS,STRSEG(SPEC$) : REG %DX,STRPTR(SPEC$)
- REG %CX,&H1F00 : REG %AX,&H4E00
- CALL INTERRUPT &H21
-
- IF (REG(%FLAGS) AND 1) THEN FILEXISTS% = 0
- END FUNCTION
-
-