Menu

[r246]: / pascal.pas  Maximize  Restore  History

Download this file

130 lines (103 with data), 4.4 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
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
VAR GREF1, GREF2: REF; GERRNO, 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}
{$IFNDEF HASUPCASE}
FUNCTION UPCASE(C: CHAR): CHAR; BEGIN
IF C IN [CHR(97)..CHR(122)] THEN UPCASE := CHR(ORD(C) - 32) ELSE UPCASE := C;
END;
{$ENDIF}
FUNCTION ARGC: SHORT; BEGIN ARGC := PARAMCOUNT END;
PROCEDURE ARGV(VAR S: STR127; I: SHORT); BEGIN
S := PARAMSTR(I); FOR I:=1 TO LENGTH(S) DO S[I] := UPCASE(S[I])
END;
PROCEDURE MSET(A: POINTER; C: CHAR; L: SHORT);
BEGIN
GREF1.P:= A;
WHILE L>0 DO BEGIN
GREF1.B^.A:=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.B^;GREF1.B^:=GREF2.B^;GREF2.B^:=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.B^:=GREF2.B^;
L:=PRED(L);
END END
ELSE WHILE L > 0 DO BEGIN
GREF1.B^:=GREF2.B^; 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: STR127); 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: STR127); BEGIN VAL(B,A,GSTAT) END;
PROCEDURE SDEL(VAR A: STR127; I, L: CHAR); BEGIN DELETE(A,ORD(I),ORD(L)) END;
PROCEDURE SINS(VAR A, B: STR127; I: CHAR); BEGIN INSERT(B,A,ORD(I)) END;
PROCEDURE SMID(VAR A, B: STR127; I, L: CHAR); BEGIN A:=COPY(B,ORD(I),ORD(L)) END;
PROCEDURE SCPY(VAR A, B: STR127); BEGIN A:=B END;
PROCEDURE SADD(VAR A, B, C: STR127); BEGIN A:=B+C END;
PROCEDURE SFIX(VAR A: STR127; 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: STR127; B: SHORT; W: SHORT); BEGIN STR(B:W,A) END;
PROCEDURE SOFR(VAR A: STR127; B: REAL; W, D: SHORT); BEGIN STR(B:W:D,A) END;
FUNCTION FOK(VAR A: TEXT): BOOL;
BEGIN GERRNO := IORESULT; FOK := GERRNO = 0; END;
FUNCTION FOLD(VAR F: TEXT; VAR FN: STR127): BOOL;
BEGIN ASSIGN(F, FN); RESET(F); FOLD:=FOK(F) END;
FUNCTION FNEW(VAR F: TEXT; VAR FN: STR127): BOOL; BEGIN
{$IFDEF HPC}ERASE(FN);{$ENDIF}
ASSIGN(F, FN); REWRITE(F); FNEW:=FOK(F) END;
FUNCTION FEND(VAR F: TEXT): BOOL; BEGIN CLOSE(F); FEND:=FOK(F) END;
FUNCTION FRDC(VAR F: TEXT): SHORT; VAR C: CHAR; BEGIN
FRDC:= -1; IF NOT EOF(F) THEN BEGIN
IF EOLN(F) THEN BEGIN READLN(F); IF FOK(F) THEN FRDC := 10 END
ELSE BEGIN READ(F, C); IF FOK(F) THEN FRDC := ORD(C) END
END
END;
FUNCTION FWRC(VAR F: TEXT; C: CHAR): SHORT; BEGIN
IF C = CHR(10) THEN WRITELN(F) ELSE WRITE(F, C);
IF FOK(F) THEN FWRC:=ORD(C) ELSE FWRC:=-1 END;
FUNCTION FRDS(VAR F: TEXT; VAR S: STR127): BOOL;
BEGIN READLN(F, S); FRDS:=FOK(F) END;
FUNCTION FWRS(VAR F: TEXT; VAR S: STR127): CHAR; VAR I: SHORT;
BEGIN FWRS:=CHR(0);FOR I:=1 TO LENGTH(S) DO IF FWRC(F, S[I])=-1 THEN EXIT 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.