| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- MODULE T19;
- IMPORT FIO, Storage, SYSTEM, Strings, MemUtils, libc;
- IMPORT NumberIO;
- TYPE
- abufType = RECORD
- b : SYSTEM.ADDRESS;
- len : CARDINAL;
- END;
- abufTypePtr = POINTER TO abufType;
- VAR
- abufPtr : abufTypePtr;
- str : ARRAY [0..100] OF CHAR;
- i : CARDINAL;
- PROCEDURE abufInit(VAR ptr : abufTypePtr);
- BEGIN
- Storage.ALLOCATE(ptr,SYSTEM.TSIZE(abufType) );
- ptr^.b := NIL;
- ptr^.len := 0;
- END abufInit;
- PROCEDURE abFree (VAR ptr : abufTypePtr);
- BEGIN
- Storage.DEALLOCATE(ptr^.b, ptr^.len);
- Storage.DEALLOCATE(ptr,SYSTEM.TSIZE(abufType));
- END abFree;
- PROCEDURE abAppend (VAR ptr : abufTypePtr; str: ARRAY OF CHAR );
- (* VAR
- llen : CARDINAL; *)
- BEGIN
- (* llen := Strings.Length(str); *)
- Storage.ALLOCATE( ptr^.b,Strings.Length(str));
- IF ptr <> NIL THEN
- MemUtils.MemCopy(SYSTEM.ADR(str),Strings.Length(str), ptr^.b);
- (* ptr^.len := ptr^.len + llen; *)
- ptr^.len := Strings.Length(str);
- END;
- END abAppend;
- BEGIN
- abufInit(abufPtr);
- str := " Bonjour les petits amis!";
- Storage.ALLOCATE(abufPtr^.b, Strings.Length(str));
-
- (* MemUtils.MemCopy(SYSTEM.ADR(str),Strings.Length(str), abufPtr^.b);
- abufPtr^.len := Strings.Length(str); *)
- abAppend(abufPtr, str);
- (* writing the string in the terminal *)
- libc.write(FIO.StdOut,abufPtr^.b,abufPtr^.len);
-
- abFree(abufPtr);
- END T19.
|