REM COPY FUNC 1.0 REM PROGRAMMER D. ALLEN REM CREATED JAN 25, 1984 REM UPDATED MARCH 22, 1986 ' ' THE PURPOSE OF THIS ABASIC SOURCE CODE IS TO PROVIDE USEFUL ' FUNCTIONS TO BASIC PROGRAMMERS. THESE FUNCTIONS ARE PRIMARILY ' MATH ORIENTED. NUMBERS ARE ASSUMED TO BE REAL UNLESS OTHERWISE ' SPECIFIED. ' ' VARIABLE TABLE: ' ' FNCE - LEAST INTEGER >= I ' I - REAL NUMBER ' ' FNCN$ - CENTER JUSTIFY STRING ' X$ - STRING TO BE JUSTFIED ' N - LENGTH OF JUSTIFIED X$ ' Y$ - CHARACTER TO FILL X$ ' ' FNDA - GIVE DATE IN YYMMDD FORM ' D$ - DATE STRING 99/99/99 ' ' FNDC - CONVERT HEXIDECIMAL CHARACTER TO DECIMAL VALUE ' D$ - ONE CHARACTER STRING ' ' FNDF - POSITIVE DIFFERENCE OF 2 NUMBERS ' I,J - REAL NUMBERS ' ' FNEQ - EQUALVALENCE ' I,J - REAL NUMBERS ' ' FNEV - TRUE, IF LEN(I$) IS EVEN ' I$ - STRING ' ' FNFL - GREATEST INTEGER <= I ' I - REAL NUMBER ' ' FNGE - TRUE, IF VAL(I$) >= VAL(J$) ' I$,J$ - STRINGS ' ' FNGT - TRUE, IF VAL(I$) > VAL(J$) ' I$,J$ - STRINGS ' ' FNHX$ - CONVERT DECIMAL VALUE TO HEXIDECIMAL CHARACTER ' D - INTEGER ' ' FNIM - IMPERIAL ' I,J - REAL NUMBERS ' ' FNLE - TRUE, IF VAL(I$) <= VAL(J$) ' I$,J$ - STRINGS ' ' FNLF$ - LEFT JUSTIFY STRING ' X$ - STRING TO BE JUSTIFIED ' N - LENGTH OF JUSTIFIED STRING ' Y$ - CHARACTER TO FILL IN X$ ' ' FNLT - TRUE, IF VAL(I$) < VAL(J$) ' I$,J$ - STRINGS ' ' FNMX - MAXIMUM VALUE OF 2 NUMBERS ' I,J - REAL NUMBERS ' ' FNMO - MODULE (REMAINDER) ' I,J - REAL NUMBERS ' ' FNMD - MID VALUE OF 2 NUMBERS ' I,J - REAL NUMBERS ' ' FNMN - MINIMUM VALUE OF 2 NUMBERS ' I,J - REAL NUMBERS ' ' FNOD - TRUE, IF LEN(I$) IS ODD ' I$ - STRING ' ' FNRP$ - REPLACE ONE STRING WITH ANOTHER ' A$ - STRING TO BE EDITED ' B$ - THAT PORTION OF A$ TO BE CORRECTED ' C$ - REPLACEMENT FOR B$ ' ' FNRG$ - RIGHT JUSTIFY STRING ' X$ - STRING TO BE JUSTIFIED ' N - LENGTH OF JUSTFIED STRING ' Y$ - CHARACTER TO FILL IN X$ ' ' FNSL$ - JUSTIFY STRING LEFT IN SPACES ' D$ - STRING TO JUSTIFY ' D - MAXIMUM STRING LENGTH ' ' FNSR$ - JUSTIFY STRING RIGHT IN SPACES ' D$ - STRING TO JUSTIFY ' D - MAXIMUM STRING LENGTH ' ' FNSP$ - FILL WITH SPACES ' D - NUMBER OF SPACES ' ' FNTB - CENTER STRING VIA TAB ' D$ - STRING TO BE TABBED ' D - PRINTING COLUMN WIDTH ' ' FNTI - GIVE TIME IN SECONDS ' T$ - TIME STRING 99/99/99 ' ' FNXR - EXCLUSIVE OR ' I,J - REAL NUMBERS ' DEF FNCE (I) = -INT(-I) DEF FNCN$ (X$, N, Y$) = STRING$(FIX((N - LEN(X$)) / 2), Y$) + X$ + STRING$(FIX((N - LEN(X$)) / 2), Y$) + STRING$(((N - LEN(X$)) MOD 2), Y$) DEF FNDA (D$) = 10000 * VAL(RIGHT$(D$, 2)) + 100 * VAL(LEFT$(D$, 2)) + VAL(MID$(D$, 4, 2)) DEF FNDC (D$) = INSTR("123456789ABCDEF", LEFT$(D$, 1)) DEF FNDF (I, J) = I - (ABS(I < J) * I + ABS(I >= J) * J) DEF FNEQ (I, J) = NOT (((NOT I AND J) OR (I AND NOT J))) DEF FNEV (I$) = ((LEN(I$) MOD 2) = 0) DEF FNFL (I) = INT(I) DEF FNGE (I$, J$) = (VAL(I$) >= VAL(J$)) DEF FNGT (I$, J$) = (VAL(I$) > VAL(J$)) DEF FNHX$ (D) = MID$("0123456789ABCDEF", D + 1, 1) DEF FNIM (I, J) = (NOT I OR J) DEF FNLE (I$, J$) = (VAL(I$) <= VAL(J$)) DEF FNLF$ (X$, N, Y$) = LEFT$(X$ + STRING$(N, Y$), N) DEF FNLT (I$, J$) = (VAL(I$) < VAL(J$)) DEF FNMX (I, J) = ABS(I >= J) * I + ABS(I < J) * J DEF FNMO (I, J) = I - J * INT(I / J) DEF FNMD (I, J) = (I + J) / 2 DEF FNMN (I, J) = ABS(I < J) * I + ABS(I >= J) * J DEF FNOD (I$) = (LEN(I$) MOD 2) <> 0 DEF FNRP$ (A$, B$, C$) = LEFT$(A$, INSTR(A$, B$) - 1 * (-(INSTR(A$, B$) <> 0))) + LEFT$(C$, LEN(C$) * (-(INSTR(A$, B$) <> 0 AND B$ <> ""))) + RIGHT$(A$, (LEN(A$) - INSTR(A$, B$) - LEN(B$) + 1) * (-(INSTR(A$, B$) <> 0))) + LEFT$(A$, LEN(A$) * (-( _ INSTR(A$, B$) = 0))) DEF FNRG$ (X$, N, Y$) = RIGHT$(STRING$(N, Y$) + X$, N) DEF FNSL$ (D$, D) = LEFT$(D$, D) + STRING$(-(D > 0) * D, 32) DEF FNSR$ (D$, D) = STRING$(-(D > 0) * D, 32) + RIGHT$(D$, D) DEF FNSP$ (D) = STRING$(-(D > 0) * D, 32) DEF FNTB (D$, D) = INT((D - LEN(D$)) / 2) DEF FNTI (T$) = 3600 * VAL(LEFT$(T$, 2)) + 60 * VAL(MID$(T$, 4, 2)) + VAL(RIGHT$(T$, 2)) DEF FNXR (I, J) = ((NOT I AND J) OR (I AND NOT J))