PROGRAM UCASE;{$P,C-,M-,F-}
{$I+}
TYPE
$STRING0 = STRING 0;
$STRING80 =STRING 80;
$STRING255 = STRING 255;

VAR
DATA:$STRING80;
FUNCTION LENGTH(x:$STRING255):INTEGER;EXTERNAL;
PROCEDURE SETLENGTH(VAR X:$STRING0; Y:INTEGER);EXTERNAL;

{function to convert a string of maximum length = 255 to all upper
case letters, and return the converted string..corresponds to the BASIC
command UCASE$.  
requires pascal/z's external functions, length and setlength}

FUNCTION UCASE(X:$STRING255):$STRING255;
LABEL 1;
VAR
I,LEN,ASCII:INTEGER;
UCASEX:$STRING255;

BEGIN
SETLENGTH(UCASEX,0);
LEN:=LENGTH(X);
IF (LEN = 0) OR (LEN > 255)  THEN GOTO 1;

FOR I:=1 TO LEN DO
	
	IF (ORD(X[I]) > 96) AND (ORD(X[I]) < 123) THEN 
	APPEND(UCASEX,CHR(ORD(X[I])-32)) ELSE
	APPEND(UCASEX,X[I]);

{97 represents a little 'a' and 122 a little 'z'..32 is the offset between
  a capital and a little letter in ascii code}

UCASE:=UCASEX;
1: {immediate exit upon fatal error}

END;

Begin
end.