UNIT Editform; (* DESCRIPTION : Edit form for print and display INPUT supported types : - byte, integer, longint, real - boolean, char, string - pointer - double, extended - date , time from OPDATE - timestamp from NLCS - currency from BUSINESS OUTPUT string CF masque.txt : help file in french for more explanations RELEASE : 1.0 DATE : 30/09/94 AUTHOR : Fernand LEMOINE rue du CollŠge 34 B-6200 CHATELET BELGIQUE All code granted to the public domain Questions and comments are welcome REQUIREMENT : * Turbo Pascal 5.0 or later * Opdate, Opstring, Opabsfld, OPpInline , Opdos from Object Professional * Business and nlcs units *) INTERFACE USES nlcs, business, opstring , opdate; CONST Blank = ' '; PadChar : Char = '-'; HexaChar : Char = 'h'; TYPE TCountryInfo = (dos3, iso); VAR SymbolStr : String[5]; TrueUserStr : String[10]; FalseUserStr : String[10]; FUNCTION BooleanForm(mask : String; value : Boolean) : String; FUNCTION CharForm(mask : String; value : Char) : String; FUNCTION PointerForm(mask : String; value : Pointer) : String; FUNCTION TimeStampForm(mask : String; value : TimeStamp) : String; FUNCTION StringForm(mask : String; value : String) : String; FUNCTION IntegerForm(mask : String; value : Integer) : String; FUNCTION ByteForm(mask : String; value : Byte) : String; FUNCTION WordForm(mask : String; value : Word) : String; FUNCTION LongintForm(mask : String; value : LongInt) : String; FUNCTION RealForm(mask : String; value : Real) : String; FUNCTION DateForm(mask : String; value : date) : String; FUNCTION TimeForm(mask : String; value : time) : String; FUNCTION HelpDate(pays : str3) : String; FUNCTION HelpTime(pays : str3) : String; {$IFOPT N+} function DoubleForm (mask:string;value: double): string; function ExtendedForm (mask:string;value: extended): string; function CurrencyForm (mask:string;valeur: currency): string; function HelpCurrency (value : byte ; pays : str3 ; info : tcountryinfo ) : string; procedure ChangeDecCommaChar (DC,CC : char); {$ENDIF} IMPLEMENTATION USES opabsfld, opinline, opdos; CONST Delimitor : CharSet = ['/']; (* --------------------------------------------------------------- *) FUNCTION BooleanForm(mask : String; value : Boolean) : String; BEGIN IF mask = 'B' THEN IF value = True THEN BooleanForm := TrueChar ELSE BooleanForm := FalseChar ELSE IF mask = 'Y' THEN IF value = True THEN BooleanForm := YesChar ELSE BooleanForm := NoChar ELSE IF mask = 'O' THEN IF value = True THEN BooleanForm := 'On' ELSE BooleanForm := 'Off' ELSE IF mask = 'U' THEN IF value = True THEN BooleanForm := TrueUserStr ELSE BooleanForm := FalseUserStr ELSE BooleanForm := ''; END; (* --------------------------------------------------------------- *) FUNCTION CharForm(mask : String; value : Char) : String; CONST table_char : ARRAY[0..32] OF String[3] = ('NUL', 'SOH', 'STX', 'ETX', 'EOT', 'ENQ', 'ACK', 'BEL', 'BS ', 'HT ', 'LF ', 'VT ', 'FF ', 'CR ', 'SO ', 'SI ', 'DLE', 'DC1', 'DC2', 'DC3', 'DC4', 'NAK', 'SYN', 'ETB', 'CAN', 'EM ', 'SUB', 'ESC', 'FS ', 'GS ', 'RS ', 'US ', 'SP '); BEGIN CASE mask[1] OF 'X' : CharForm := value; '!' : CharForm := Upcase(value); 'L' : CharForm := Locase(value); 'D' : CharForm := '#' + LongintForm('@@@', Ord(value)); 'K' : CharForm := '#h' + HexB(Byte(value)); '^' : CASE Ord(value) OF 0..32 : CharForm := table_char[Ord(value)]; 127 : CharForm := 'DEL'; 255 : CharForm := 'END' ELSE CharForm := value; END; END; END; (* --------------------------------------------------------------- *) FUNCTION PointerForm(mask : String; value : Pointer) : String; BEGIN IF mask = 'Ps' THEN PointerForm := HexPtr(value) ELSE IF mask = 'Pn' THEN PointerForm := HexPtr(Normalized(value)) ELSE IF mask = 'Pl' THEN PointerForm := Long2Str(PtrToLong(value)) ELSE PointerForm := '*****'; END; (* --------------------------------------------------------------- *) FUNCTION IntegerForm(mask : String; value : Integer) : String; VAR wrk : String; BEGIN CASE mask[1] OF '(' : BEGIN Delete(mask, 1, 1); IF value < 0 THEN BEGIN wrk := '(' + opstring.LongintForm(mask, value) + ')'; IF Pos('#', mask) <> 0 THEN Delete(wrk, 2, 1); IntegerForm := wrk; END ELSE IntegerForm := opstring.LongintForm(mask, value); END; 'D' : BEGIN Delete(mask, 1, 1); IF value < 0 THEN BEGIN wrk := opstring.LongintForm(mask, value) + 'DB'; IF Pos('#', mask) <> 0 THEN Delete(wrk, 1, 1); IntegerForm := wrk; END ELSE IntegerForm := opstring.LongintForm(mask, value); END; 'R' : BEGIN Delete(mask, 1, 1); IF value < 0 THEN BEGIN wrk := opstring.LongintForm(mask, value) + 'CR'; IF Pos('#', mask) <> 0 THEN Delete(wrk, 1, 1); IntegerForm := wrk; END ELSE IntegerForm := opstring.LongintForm(mask, value); END; ELSE IntegerForm := opstring.LongintForm(mask, value); END; END; FUNCTION RomanDate(n : Word) : String; CONST Mille = 'M'; CinqCent = 'D'; Cent = 'C'; Cinquante = 'L'; Dix = 'X'; Cinq = 'V'; Un = 'I'; VAR Res : String; BEGIN Res := ''; IF (n = 0) OR (n > 9999) THEN BEGIN RomanDate := '***'; Exit; END; WHILE n >= 1000 DO BEGIN n := n - 1000; Res := Res + Mille; END; IF n >= 900 THEN BEGIN n := n - 900; Res := Res + 'XM'; END; WHILE n >= 500 DO BEGIN n := n - 500; Res := Res + CinqCent; END; IF n >= 400 THEN BEGIN n := n - 400; Res := Res + 'CD'; END; WHILE n >= 100 DO BEGIN n := n - 100; Res := Res + Cent; END; IF n >= 90 THEN BEGIN n := n - 90; Res := Res + 'XC'; END; IF n >= 50 THEN BEGIN n := n - 50; Res := Res + Cinquante; END; IF n >= 40 THEN BEGIN n := n - 40; Res := Res + 'XL'; END; WHILE n >= 10 DO BEGIN n := n - 10; Res := Res + Dix; END; IF n = 9 THEN BEGIN n := n - 9; Res := Res + 'IX'; END; IF n >= 5 THEN BEGIN n := n - 5; Res := Res + Cinq; END; IF n = 4 THEN BEGIN n := n - 4; Res := Res + 'IV'; END; WHILE n >= 1 DO BEGIN n := n - 1; Res := Res + Un; END; RomanDate := Res; END; (* --------------------------------------------------------------- *) FUNCTION DateForm(mask : String; value : date) : String; VAR S : String; D, M, Y : Integer; DateOk : Boolean; BEGIN IF Upcase(mask[1]) = 'J' THEN BEGIN S := DateToDateString(InternationalDate(True, True), value); DateOk := DateStringToDMY(InternationalDate(True, True), S, D, M, Y); IF DateOk THEN DateForm := Long2Str(Y) + Long2Str(DayOfYear(value)) ELSE DateForm := '0000000'; END ELSE IF Upcase(mask[1]) = 'R' THEN DateForm := RomanDate(value) ELSE DateForm := DateToDateString(mask, value); END; (* --------------------------------------------------------------- *) FUNCTION TimeForm(mask : String; value : time) : String; BEGIN TimeForm := TimeToTimeString(mask, value); END; (* +++++++++++++++++++++++++++++++++++++++++++++++++++++++ *) FUNCTION HelpDate(pays : str3) : String; VAR S : String[20]; contri : str3; BEGIN contri := pays; IF contri <> currentcountry THEN BEGIN SetCountry(contri); END; S := InternationalDate(True, True); HelpDate := Substitute(S, '/', SlashChar); IF contri <> currentcountry THEN SetCountry(currentcountry); END; (* +++++++++++++++++++++++++++++++++++++++++++++++++++++++ *) FUNCTION HelpTime(pays : str3) : String; VAR S : String[20]; contri : str3; BEGIN contri := pays; IF contri <> currentcountry THEN SetCountry(contri); S := InternationalTime(True, True, True, True); HelpTime := Substitute(S, ':', ColonChar); IF contri <> currentcountry THEN SetCountry(currentcountry); END; (* --------------------------------------------------------------- *) FUNCTION TimeStampForm(mask : String; value : TimeStamp) : String; VAR wrk : String; BEGIN wrk := ''; IF Pos('W', mask) > 0 THEN wrk := wrk + DayString[value.WDay] + Blank; IF Pos('D', mask) > 0 THEN wrk := wrk + DateForm('yyyy/mm/dd', value.D) + Blank; IF Pos('T', mask) > 0 THEN wrk := wrk + TimeForm('hh:mm:ss', value.T) + Blank; IF Pos('Z', mask) > 0 THEN wrk := wrk + value.Indic + Blank; IF Pos('S', mask) > 0 THEN wrk := wrk + BooleanForm('Y', value.IsDst) + Blank; TimeStampForm := wrk; END; (* --------------------------------------------------------------- *) FUNCTION inspect(C : Char; S : String) : Byte; VAR i, j : Byte; BEGIN j := 0; FOR i := 1 TO Length(S) DO IF S[i] = C THEN Inc(j); inspect := j; END; (* --------------------------------------------------------------- *) {$IFOPT N+} Function DoubleForm (mask:string; value: double) : string; var S : string; begin if mask[1] = 'E' then begin Str ( Value: length(mask ),S); DoubleForm := S; end else DoubleForm := '**********'; end; Function ExtendedForm (mask:string; value: extended) : string; var S : string; begin if mask[1] = 'E' then begin Str ( Value: length(mask ),S); ExtendedForm := S; end else ExtendedForm := '**********'; end; (* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ *) procedure ChangeDecCommaChar (DC,CC : char); begin ChangeDecimalChar(DC); CommaChar := CC; end; (* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ *) function HelpCurrency (value : byte ; pays : str3 ; info : tcountryinfo ) : string ; var S : string[20]; contri : str3; begin contri := pays; If contri <> currentcountry then SetCountry (Contri); if info = dos3 then begin S := InternationalCurrency('#',value,false,true); if length(CurrencyLtStr) = 1 then S := Substitute(S,'c','$'); HelpCurrency := S; end else begin S := InternationalCurrency('#',value,false,true); CurrencyIso(pays); S := Filter (S,['c','C']); S := S + ' CCC'; HelpCurrency := S; end; If contri <> currentcountry then SetCountry (Currentcountry); end; function NextPos (objet,target :string; last_pos : integer; ignore_case : boolean): integer; { scan the string TARGET to find the next occurence of the OBJECT within the TARGET } var npos,i,j : integer; same_so_far: boolean; begin if ignore_case then begin target:= StUpCase (Target); objet:= StUpCase (objet); end; npos := -1; i := last_pos + 1; while npos < 0 do if i > (length (target) - length (objet) + 1) then npos := 0 else begin j:= 1; same_so_far := true; while same_so_far and (j <= length (objet)) do if target [i+j-1] = objet[j] then j := j + 1 else same_so_far := false; if same_so_far then npos := i else i := i + 1; end; nextpos := npos; end; procedure ReplaceFirst ( var Target : string; oldsubstr,newsubstr : string; ignore_case : boolean; var oldsubstr_found : boolean); var npos : integer; begin npos := NextPos (oldsubstr, target, 0, ignore_case); if npos > 0 then begin delete (target,npos,length(oldsubstr)); insert (newsubstr,target,npos); oldsubstr_found := true; end else oldsubstr_found := false; end; procedure ReplaceAll ( var Target : string; oldsubstr,newsubstr : string; ignore_case : boolean; var num_substitutions : integer); var npos : integer; begin num_substitutions := 0; npos := 0; repeat npos := nextpos (oldsubstr,target,npos,ignore_case); if npos > 0 then begin delete (target,npos,length(oldsubstr)); insert (newsubstr,target,npos); npos := npos + length(newsubstr); num_substitutions := num_substitutions + 1; end; until npos = 0; end; (* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ *) function CurrencyForm (mask:string;valeur: currency): string; var S,mask2 : string; value: currency; N1,N2,N3 : byte; inter : string[5]; found : boolean; nbr : integer; begin value := valeur / scale_currency; case mask[1] of '(': begin delete(mask,1,1); if value < 0 then begin S := '(' + Form(Mask,value)+')'; if pos('#',Mask) <> 0 then delete(S,2,1); end else S := Form(Mask,value); end ; 'D': begin delete(mask,1,1); if value < 0 then begin S := Form(Mask,value)+'DB'; if pos('#',Mask) <> 0 then delete(S,1,1); end else S := Form(Mask,value); end ; 'R': begin delete(mask,1,1); if value < 0 then begin S := Form(Mask,value)+'CR'; if pos('#',Mask) <> 0 then delete(S,1,1); end else S := Form(Mask,value); end ; 'B' : begin delete(mask,1,1); if value = 0 then S :='' else S := Form(Mask,value); end else S := Form(Mask,value); end; N3 := 0; N3 := inspect(DecimalPt,mask); if N3 > 0 then begin N1 := pos(DecimalPt,S); N2 := pos(comma,S); S[N2] := CommaChar; S[N1] := DecimalChar; end else begin N3 := pos (' ',S); insert(DecimalPt,Mask,N3); N3 := pos (DecimalPt,mask); S:= Form(Mask,value); ReplaceAll(S ,comma,CommaChar,false,nbr); delete(S,N3,1); end; N1 := pos('$',S); if N1 > 0 then begin delete(S,N1,1); S:= TrimLead (S); S := MoneySign + S; end; N1 := inspect(CurrencyLt,S); If N1 > 0 then begin Inter := CharStr(CurrencyLt,N1); ReplaceFirst(S ,Inter,CurrencyLtStr,false,found); end; N2 := inspect(CurrencyRt,S); If N2 > 0 then begin Inter := CharStr(CurrencyRt,N2); ReplaceFirst(S ,Inter,CurrencyRtStr,false,found); end; CurrencyForm := S; end; {$ENDIF} (* --------------------------------------------------------------- *) FUNCTION RealForm(mask : String; value : Real) : String; VAR S : String; BEGIN CASE mask[1] OF 'E' : BEGIN Str(value:Length(mask), S); RealForm := S; END; '%' : BEGIN Delete(mask, 1, 1); RealForm := form(mask, value * 100) + '%'; END; '(' : BEGIN Delete(mask, 1, 1); IF value < 0 THEN BEGIN S := '(' + form(mask, value) + ')'; IF Pos('#', mask) <> 0 THEN Delete(S, 2, 1); RealForm := S; END ELSE RealForm := form(mask, value); END; 'D' : BEGIN Delete(mask, 1, 1); IF value < 0 THEN BEGIN S := form(mask, value) + 'DB'; IF Pos('#', mask) <> 0 THEN Delete(S, 1, 1); RealForm := S; END ELSE RealForm := form(mask, value); END; 'R' : BEGIN Delete(mask, 1, 1); IF value < 0 THEN BEGIN S := form(mask, value) + 'CR'; IF Pos('#', mask) <> 0 THEN Delete(S, 1, 1); RealForm := S; END ELSE RealForm := form(mask, value); END; 'B' : BEGIN Delete(mask, 1, 1); IF value = 0 THEN RealForm := '' ELSE RealForm := form(mask, value); END; 'S' : BEGIN Delete(mask, 1, 1); RealForm := SymbolStr + Blank + form(mask, value); END; 's' : BEGIN Delete(mask, 1, 1); RealForm := SymbolStr + form(mask, value); END ELSE RealForm := form(mask, value); END; IF Copy(mask, Length(mask), 1) = 'S' THEN BEGIN Delete(mask, Length(mask), 1); RealForm := form(mask, value) + Blank + SymbolStr; END; IF Copy(mask, Length(mask), 1) = 's' THEN BEGIN Delete(mask, Length(mask), 1); RealForm := form(mask, value) + SymbolStr; END; END; (* --------------------------------------------------------------- *) FUNCTION LongintForm(mask : String; value : LongInt) : String; VAR wrk : String; BEGIN CASE mask[1] OF 'K' : BEGIN wrk := HexL(value); IF Length(mask) < 8 THEN Delete(wrk, 1, 8 - Length(mask)); LongintForm := HexaChar + wrk; END; 'b' : LongintForm := BinaryL(value); '(' : BEGIN Delete(mask, 1, 1); IF value < 0 THEN BEGIN wrk := '(' + opstring.LongintForm(mask, value) + ')'; IF Pos('#', mask) <> 0 THEN Delete(wrk, 2, 1); LongintForm := wrk; END ELSE LongintForm := opstring.LongintForm(mask, value); END; 'D' : BEGIN Delete(mask, 1, 1); IF value < 0 THEN BEGIN wrk := '(' + opstring.LongintForm(mask, value) + 'DB'; IF Pos('#', mask) <> 0 THEN Delete(wrk, 2, 1); LongintForm := wrk; END ELSE LongintForm := opstring.LongintForm(mask, value); END; 'R' : BEGIN Delete(mask, 1, 1); IF value < 0 THEN BEGIN wrk := '(' + opstring.LongintForm(mask, value) + 'CR'; IF Pos('#', mask) <> 0 THEN Delete(wrk, 2, 1); LongintForm := wrk; END ELSE LongintForm := opstring.LongintForm(mask, value); END; ELSE LongintForm := opstring.LongintForm(mask, value); END; END; (* --------------------------------------------------------------- *) FUNCTION ByteForm(mask : String; value : Byte) : String; VAR wrk : String; BEGIN IF mask[1] = 'K' THEN BEGIN wrk := HexB(value); IF Length(mask) < 2 THEN Delete(wrk, 1, 2 - Length(mask)); ByteForm := HexaChar + wrk; END ELSE IF mask[1] = 'b' THEN ByteForm := BinaryB(value) ELSE ByteForm := opstring.LongintForm(mask, value); END; (* --------------------------------------------------------------- *) FUNCTION WordForm(mask : String; value : Word) : String; VAR wrk : String; BEGIN IF mask[1] = 'K' THEN BEGIN wrk := HexW(value); IF Length(mask) < 4 THEN Delete(wrk, 1, 4 - Length(mask)); WordForm := HexaChar + wrk; END ELSE IF mask[1] = 'b' THEN WordForm := BinaryW(value) ELSE WordForm := opstring.LongintForm(mask, value); END; (* --------------------------------------------------------------- *) FUNCTION Proper(objet : String) : String; CONST WordDelim : CharSet = [' ', '-']; n : Word = 0; VAR wrk : String; i : Byte; BEGIN wrk := StLoCase(objet); wrk[1] := Upcase(wrk[1]); n := WordCount(objet, WordDelim); IF n > 0 THEN BEGIN FOR i := 1 TO n DO wrk[WordPosition(i, wrk, WordDelim)] := Upcase(wrk[WordPosition(i, wrk, WordDelim)]); END; Proper := wrk; END; (* --------------------------------------------------------------- *) FUNCTION StringForm(mask : String; value : String) : String; VAR i, len, nbre : Byte; Str, mask1, mask2 : String; BEGIN Str := ''; i := 1; nbre := WordCount(mask, Delimitor); IF nbre = 2 THEN BEGIN mask1 := Copy(mask, 1, (WordPosition(2, mask, Delimitor) - 2)); mask2 := Copy(mask, (WordPosition(2, mask, Delimitor)), Length(mask)); END ELSE mask2 := mask; IF (Length(value) < Length(mask2)) AND (Pos('&', mask2) = 0) THEN len := Length(value) ELSE len := Length(mask2); nbre := 1; IF mask2[1] = 'x' THEN Str := Proper(Copy(value, 1, len)) ELSE BEGIN WHILE nbre <= len DO BEGIN CASE mask2[nbre] OF 'X' : Str := Str + value[i]; '!' : Str := Str + Upcase(value[i]); 'L' : Str := Str + Locase(value[i]); '&' : Str := Str + PadChar; 'a' : IF value[i] IN AlphaOnlySet THEN Str := Str + value[i] ELSE Str := Str + Blank; 'A' : IF value[i] IN AlphaOnlySet THEN Str := Str + Upcase(value[i]) ELSE Str := Str + Blank; 'l' : IF value[i] IN AlphaOnlySet THEN Str := Str + Locase(value[i]) ELSE Str := Str + Blank; ELSE Str := Str + mask2[i]; END; Inc(nbre); IF mask2[nbre] <> '&' THEN Inc(i); END; END; IF mask1 = 'C' THEN Str := Center(Str, Length(mask2)); IF mask1 = 'CC' THEN Str := CenterCh(Str, PadChar, Length(mask2)); IF mask1 = 'AR' THEN Str := LeftPad(Str, Length(mask2)); IF mask1 = 'ARC' THEN Str := LeftPadCh(Str, PadChar, Length(mask2)); IF mask1 = 'AL' THEN Str := Pad(Str, Length(mask2)); IF mask1 = 'ALC' THEN Str := PadCh(Str, PadChar, Length(mask2)); IF mask1 = 'T' THEN Str := Trim(Str); IF mask1 = 'TL' THEN Str := TrimLead(Str); IF mask1 = 'TT' THEN Str := TrimTrail(Str); IF mask1 = 'TS' THEN Str := TrimSpaces(Str); StringForm := Str; END; END. { ----------------------- DEMO PROGRAM ------------------ } program demoform; {$N+,E+} uses crt, nlcs,editform, opstring,business,opdate; var I1,I2 : integer; R1,R2 : real; C1,C2 : currency; S1,S2 : string[10]; H1,H2 : char; B1 : boolean; P ,P2 : pointer; DT : daytype; D : date; w : longint; Wch : char; begin clrscr; SymbolStr := 'Kgm'; I1 := -1234; R1 := -1234.56; C1 := ToCurrency(I1); B1 := false; H1 := 'c'; H2 := #10; P := @SymbolStr; FalseUserStr := 'Nul'; TrueUserStr := 'Rempli'; DT := sunday; S1 := 'Sant‚'; Writeln ('DEMO EDITFORM '); Writeln ('I1 = -1234 R1 = -1234.56'); Writeln; writeln(IntegerForm('#####',I1)); writeln(IntegerForm('+#####',I1)); writeln(IntegerForm('#####+',I1)); writeln(IntegerForm('(#####',I1)); writeln(RealForm('#####.##',R1)); writeln(RealForm('+#####',R1)); writeln(RealForm('#####.##+',R1)); writeln(RealForm('(#####.##',R1)); writeln(RealForm('D#####,##',R1)); writeln(RealForm('S#####.##',R1)); writeln(RealForm('s#####.##',R1)); writeln(RealForm('#####.##S',R1)); writeln(RealForm('#####.##s',R1)); writeln(RealForm('##.###,##s',R1)); writeln; writeln('Appuyez sur une touche'); WCh := Readkey; clrscr; Writeln(' HelpDate et HelpTime '); writeln; Writeln (HelpDate(currentcountry)); Writeln ('49 ',HelpTime('49')); Writeln ('01 ',HelpTime('US')); Writeln ('02 ',HelpTime('2')); Writeln ('03 ',HelpTime('3')); Writeln ('dk ',HelpDate('DK')); Writeln ('2 ',HelpDate('2')); Writeln ('46 ',HelpDate('46')); Writeln ('FR ',HelpDate('FR')); writeln; writeln('Appuyez sur une touche'); WCh := Readkey; clrscr; writeln('Devise locale : ' ,CurrencyForm('cc##,###.##+',C1), ' ',CurrencyForm('##,###.## CC',C1)); Writeln; Writeln ( ' Convention DOS 3');writeln; writeln( 'US: ',CurrencyForm(Helpcurrency(8,'1',dos3),C1)); writeln('IT: ',CurrencyForm(Helpcurrency(8,'39',dos3),C1)); writeln('FR: ',CurrencyForm(Helpcurrency(6,'33',dos3),C1)); writeln('DE: ',CurrencyForm(Helpcurrency(6,'DE',dos3),C1)); writeln('081: ',CurrencyForm(Helpcurrency(6,'81',dos3),C1)); Writeln; MoneySign := 'F'; writeln('Symbole mon‚taire flottant: ',CurrencyForm('$##,###.##+',C1)); Writeln; Writeln ( 'Convention internationale ');writeln; writeln(CurrencyForm(Helpcurrency(5,'PT',iso),C1)); writeln(CurrencyForm(Helpcurrency(5,'US',iso),C1)); writeln(CurrencyForm(Helpcurrency(5,'IT',iso),C1)); writeln(CurrencyForm(Helpcurrency(5,'DE',iso),C1)); writeln(CurrencyForm(Helpcurrency(5,'FR',iso),C1)); writeln; writeln('Appuyez sur une touche'); WCh := Readkey; clrscr; writeln('PointerForm et BooleanForm'); writeln(' SymbolStr = "Kgm" ; B1 = false; P := @SymbolStr'); writeln; writeln(PointerForm('Ps',P)); writeln(PointerForm('Pn',P)); writeln(PointerForm('Pl',P)); writeln('B1 ',BooleanForm('B',B1)); writeln('B1 ',BooleanForm('Y',B1)); writeln('B1 ',BooleanForm('O',B1)); writeln('B1 ',BooleanForm('U',B1)); writeln('Appuyez sur une touche'); WCh := Readkey; clrscr; writeln('CharForm et StringForm H1 = "c" ; H2 = #10; S1 := "Sant‚"'); writeln; writeln('H1 ',CharForm('!',H1)); writeln('H1 ',CharForm('D',H1)); writeln('H1 ',CharForm('K ',H1)); writeln('H1 ',CharForm('^',H1)); writeln; writeln('H2 ',CharForm('^',H2)); writeln('H2 ',CharForm('X',H2)); writeln('H2 ',CharForm('D',H2)); writeln; writeln(StringForm('!!!!!!',S1)); writeln(StringForm('XXXXXX',S1)); writeln(StringForm('X&X&X&X&X&',S1)); writeln; writeln('Appuyez sur une touche'); WCh := Readkey; end.