Menu

[r225]: / pascal.pas  Maximize  Restore  History

Download this file

110 lines (88 with data), 3.8 kB

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
VAR GREF1, GREF2: REF; GSTAT: SHORT;
{$IFNDEF HASLOWERCASE}
FUNCTION LOWERCASE(A: CHAR): CHAR; BEGIN
IF A IN [CHR(65)..CHR(90)] THEN LOWERCASE:=CHR(ORD(A)+32) ELSE LOWERCASE:=A;
END;
{$ENDIF}
{$IFNDEF HASREADKEY}
FUNCTION READKEY: CHAR; VAR C: CHAR; BEGIN
READ(KBD, C); READKEY:=C;
END;
{$ENDIF}
PROCEDURE MSET(A: POINTER; C: CHAR; L: SHORT);
BEGIN
GREF1.P:= A;
WHILE L>0 DO BEGIN
GREF1.PB^.C:=C; GREF1.A:=SUCC(GREF1.A);
L:=PRED(L);
END
END;
PROCEDURE MREV(A: POINTER; L: SHORT); VAR T: BYTE;
BEGIN GREF1.P:=A;GREF2.P:=A;GREF2.A:=PRED(GREF2.A+L);
WHILE (GREF1.A-GREF2.A)<0 DO BEGIN
T:=GREF1.PB^;GREF1.PB^:=GREF2.PB^;GREF2.PB^:=T;
GREF1.A:=SUCC(GREF1.A);GREF2.A:=PRED(GREF2.A);
END;
END;
PROCEDURE _MMOV(A, B: POINTER; L: SHORT);
BEGIN GREF1.P:= A; GREF2.P:= B;
IF (GREF1.A - GREF2.A) < 0 THEN BEGIN
GREF1.A:=GREF1.A+L;
GREF2.A:=GREF2.A+L;
WHILE L > 0 DO BEGIN
GREF1.A:=PRED(GREF1.A); GREF2.A:=PRED(GREF2.A); GREF1.PB^:=GREF2.PB^;
L:=PRED(L);
END END
ELSE WHILE L > 0 DO BEGIN
GREF1.PB^:=GREF2.PB^; GREF1.A:=SUCC(GREF1.A); GREF2.A:=SUCC(GREF2.A);
L:=PRED(L)
END
END;
{$IFDEF HASSHORTINT}
TYPE IEXT = SHORTINT;
{$ELSE}
FUNCTION IEXT(A: SHORT): SHORT; BEGIN
IF (A AND $80)=0 THEN IEXT:=A AND $00FF ELSE IEXT:=A OR $FF00
END;
{$ENDIF}
FUNCTION IMIN(A, B: SHORT): SHORT; BEGIN IF A<B THEN IMIN:=A ELSE IMIN:=B END;
FUNCTION IMAX(A, B: SHORT): SHORT; BEGIN IF A>B THEN IMAX:=A ELSE IMAX:=B END;
FUNCTION ISQRT(A: SHORT): SHORT; VAR N0, N1: SHORT;
BEGIN IF A > 0 THEN BEGIN N0:=SUCC(A DIV 2); N1:=(N0 + (A DIV N0)) DIV 2;
WHILE N1 < N0 DO BEGIN N0:=N1; N1:=(N0 + (A DIV N0)) DIV 2
END; ISQRT:=N0 END ELSE ISQRT:=0 END;
FUNCTION IPOW(A, B: SHORT): SHORT; VAR OUT: SHORT;
BEGIN OUT:=1; WHILE B > 0 DO BEGIN
IF (B AND 1) <> 0 THEN BEGIN OUT:=OUT * A END;
B:=B SHR 1; A:=A * A
END; IPOW:=OUT END;
PROCEDURE IOFS(VAR A: SHORT; VAR B: S127); BEGIN VAL(B,A,GSTAT) END;
FUNCTION RABS(A: REAL): REAL; BEGIN IF A<0 THEN RABS:=-A ELSE RABS:=A END;
FUNCTION RMIN(A, B: REAL): REAL; BEGIN IF A<B THEN RMIN:=A ELSE RMIN:=B END;
FUNCTION RMAX(A, B: REAL): REAL; BEGIN IF A>B THEN RMAX:=A ELSE RMAX:=B END;
FUNCTION RCMP(A, B: REAL): SHORT; BEGIN IF A<B THEN RCMP:=-1 ELSE IF A>B THEN RCMP:=1 ELSE RCMP:=0 END;
PROCEDURE ROFS(VAR A: REAL; VAR B: S127); BEGIN VAL(B,A,GSTAT) END;
PROCEDURE SDEL(VAR A: S127; I, L: CHAR); BEGIN DELETE(A,ORD(I),ORD(L)) END;
PROCEDURE SINS(VAR A, B: S127; I: CHAR); BEGIN INSERT(B,A,ORD(I)) END;
PROCEDURE SMID(VAR A, B: S127; I, L: CHAR); BEGIN A:=COPY(B,ORD(I),ORD(L)) END;
PROCEDURE SCPY(VAR A, B: S127); BEGIN A:=B END;
PROCEDURE SADD(VAR A, B, C: S127); BEGIN A:=B+C END;
PROCEDURE SFIX(VAR A: S127; L: SHORT);
BEGIN IF L < 0 THEN L:=0 ELSE IF L > 127 THEN L:=127; A[0]:=CHR(L) END;
PROCEDURE SOFI(VAR A: S127; B: SHORT; W: SHORT); BEGIN STR(B:W,A) END;
PROCEDURE SOFR(VAR A: S127; B: REAL; W, D: SHORT); BEGIN STR(B:W:D,A) END;
FUNCTION TNEW(VAR A: TEXT; VAR FN: S127): SHORT; BEGIN
{$IFDEF HPC}ERASE(FN);{$ENDIF}
ASSIGN(A, FN); REWRITE(A); TNEW:=IORESULT END;
FUNCTION TEND(VAR A: TEXT): SHORT; BEGIN CLOSE(A); TEND:=IORESULT END;
FUNCTION TRDC(VAR A: TEXT): CHAR; VAR C: CHAR; BEGIN
IF EOF(A) THEN C:=CHR(0)
ELSE BEGIN IF EOLN(A) THEN BEGIN READLN(A); C:=CHR(10) END ELSE READ(A, C);
IF IORESULT <> 0 THEN C:=CHR(0) END; TRDC:=C END;
FUNCTION TWRC(VAR A: TEXT; B: CHAR): CHAR; BEGIN
IF B = CHR(10) THEN WRITELN(A) ELSE WRITE(A, B);
IF IORESULT <> 0 THEN B:=CHR(0); TWRC:=B END;
FUNCTION TRDS(VAR A: TEXT; VAR B: S127): SHORT;
BEGIN READLN(A, B); TRDS:=IORESULT END;
FUNCTION TWRS(VAR A: TEXT; VAR B: S127): CHAR; VAR I: SHORT;
BEGIN TWRS:=CHR(0);FOR I:=1 TO LENGTH(B) DO TWRS:=TWRC(A, B[I]) END;
Want the latest updates on software, tech news, and AI?
Get latest updates about software, tech news, and AI from SourceForge directly in your inbox once a month.