739 lines
		
	
	
		
			20 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			739 lines
		
	
	
		
			20 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
program makedat;
 | 
						||
 | 
						||
type tpalette=array[0..767] of byte;
 | 
						||
var  palette:tpalette;
 | 
						||
 | 
						||
{****************************************************************************}
 | 
						||
{****************************************************************************}
 | 
						||
{****************************************************************************}
 | 
						||
 | 
						||
Procedure XMODE;assembler;
 | 
						||
const
 | 
						||
  X360Y270 : array[0..18] of word =
 | 
						||
  ( $12E7, $6B00, $5901, $5A02, $8E03, $5E04, $8A05, $3006, $F007, $0008,
 | 
						||
    $6109, $2010, $A911, $1B12, $2D13, $0014, $1F15, $2F16, $E317 );
 | 
						||
asm
 | 
						||
  push ds
 | 
						||
 | 
						||
  mov   ax,13h
 | 
						||
  int   10h
 | 
						||
 | 
						||
  mov   dx,3c4h
 | 
						||
  mov   ax,0604h
 | 
						||
  out   dx,ax
 | 
						||
  mov   ax,0100h
 | 
						||
  out   dx,ax
 | 
						||
 | 
						||
  lea si,X360Y270
 | 
						||
  lodsb
 | 
						||
  or    al,al
 | 
						||
  jz    @@DontSetDot
 | 
						||
  mov   dx,3C2h
 | 
						||
  out   dx,al
 | 
						||
 | 
						||
  @@DontSetDot:
 | 
						||
  mov   dx,3C4h
 | 
						||
  mov   ax,0300h
 | 
						||
  out   dx,ax
 | 
						||
  mov   dx,3D4h
 | 
						||
  mov   al,11h
 | 
						||
  out   dx,al
 | 
						||
  inc   dx
 | 
						||
  in    al,dx
 | 
						||
  and   al,07fh
 | 
						||
  out   dx,al
 | 
						||
  dec   dx
 | 
						||
  cld
 | 
						||
  xor   cx,cx
 | 
						||
  lodsb
 | 
						||
  mov   cl,al
 | 
						||
 | 
						||
  @@SetCRTParmsLoop:
 | 
						||
  lodsw
 | 
						||
  out   dx,ax
 | 
						||
  loop  @@SetCRTParmsLoop
 | 
						||
 | 
						||
  mov   dx,3C4h
 | 
						||
  mov   ax,0f02h
 | 
						||
  out   dx,ax
 | 
						||
  mov   ax,0A000h
 | 
						||
  mov   es,ax
 | 
						||
  sub   di,di
 | 
						||
  sub   ax,ax
 | 
						||
  mov   cx,8000h
 | 
						||
  rep   stosw
 | 
						||
 | 
						||
  mov   dx,3D4h
 | 
						||
  mov   al,13h
 | 
						||
  out   dx,al
 | 
						||
  inc   dx
 | 
						||
  mov   ax,90
 | 
						||
  shr   ax,1
 | 
						||
  out   dx,al
 | 
						||
 | 
						||
  pop ds
 | 
						||
end;
 | 
						||
 | 
						||
Procedure pixel(x,y : word;coul : byte);assembler;
 | 
						||
asm
 | 
						||
  mov dx,3C4h
 | 
						||
  mov ax,0102h
 | 
						||
  mov cx,x
 | 
						||
  and cx,3
 | 
						||
  shl ah,cl
 | 
						||
  out dx,ax
 | 
						||
 | 
						||
  mov ax,0A000h
 | 
						||
  mov es,ax
 | 
						||
 | 
						||
  mov ax,y
 | 
						||
  mov bx,90
 | 
						||
  mul bx
 | 
						||
 | 
						||
  mov bx,x
 | 
						||
  shr bx,2
 | 
						||
  add ax,bx
 | 
						||
  mov di,ax
 | 
						||
  mov al,coul
 | 
						||
  stosb
 | 
						||
end;
 | 
						||
 | 
						||
Function lit_pixel(x,y : word):byte;
 | 
						||
var a : byte;
 | 
						||
begin
 | 
						||
  asm
 | 
						||
    mov ax,0A000h
 | 
						||
    mov es,ax
 | 
						||
 | 
						||
    mov ax,y
 | 
						||
    mov bx,90
 | 
						||
    mul bx
 | 
						||
 | 
						||
    mov bx,x
 | 
						||
    mov cl,bl
 | 
						||
    and cl,3
 | 
						||
 | 
						||
    shr bx,2
 | 
						||
    add ax,bx
 | 
						||
    mov di,ax
 | 
						||
 | 
						||
    mov dx,3CEh
 | 
						||
    mov al,4
 | 
						||
    mov ah,cl
 | 
						||
    out dx,ax
 | 
						||
 | 
						||
    mov al,[es:di]
 | 
						||
    mov a,al
 | 
						||
  end;
 | 
						||
  lit_pixel:=a;
 | 
						||
end;
 | 
						||
 | 
						||
 | 
						||
procedure set_palette; assembler;
 | 
						||
asm
 | 
						||
  push ds
 | 
						||
  lea si,palette
 | 
						||
  mov dx,3C8h
 | 
						||
  xor al,al
 | 
						||
  out dx,al
 | 
						||
  inc dl
 | 
						||
  mov cx,768
 | 
						||
  rep outsb
 | 
						||
  pop ds
 | 
						||
end;
 | 
						||
 | 
						||
 | 
						||
{----------------------------------------------------------------------------}
 | 
						||
{----------------------------------------------------------------------------}
 | 
						||
{----------------------------------------------------------------------------}
 | 
						||
 | 
						||
type t_os_tampon=array[0..63999] of byte;
 | 
						||
var  os_index:word;
 | 
						||
var  os_tampon:^t_os_tampon;
 | 
						||
 | 
						||
function octet_suivant(var f:file):byte;
 | 
						||
var effect_result:word;
 | 
						||
begin
 | 
						||
  inc(os_index);
 | 
						||
  if (os_index>=64000) then
 | 
						||
  begin
 | 
						||
    {$I-}
 | 
						||
    blockread(f,os_tampon^,64000,effect_result);
 | 
						||
    {$I+}
 | 
						||
    os_index:=0;
 | 
						||
  end;
 | 
						||
  octet_suivant:=os_tampon^[os_index];
 | 
						||
end;
 | 
						||
 | 
						||
procedure init_os;
 | 
						||
begin
 | 
						||
  new(os_tampon);
 | 
						||
  os_index:=64000;
 | 
						||
end;
 | 
						||
 | 
						||
procedure close_os;
 | 
						||
begin
 | 
						||
  dispose(os_tampon);
 | 
						||
end;
 | 
						||
 | 
						||
{----------------------------------------------------------------------------}
 | 
						||
 | 
						||
var eo_index:word;
 | 
						||
var eo_tampon:^t_os_tampon;
 | 
						||
 | 
						||
procedure ecrire_octet(var f:file; octet:byte);
 | 
						||
var
 | 
						||
    effect_result:word;
 | 
						||
begin
 | 
						||
  eo_tampon^[eo_index]:=octet;
 | 
						||
  inc(eo_index);
 | 
						||
  if (eo_index>=64000) then
 | 
						||
  begin
 | 
						||
    blockwrite(f,eo_tampon^,64000,effect_result);
 | 
						||
    eo_index:=0;
 | 
						||
  end;
 | 
						||
end;
 | 
						||
 | 
						||
procedure init_eo;
 | 
						||
begin
 | 
						||
  new(eo_tampon);
 | 
						||
  eo_index:=0;
 | 
						||
end;
 | 
						||
 | 
						||
procedure close_eo(var f:file);
 | 
						||
var effect_result:word;
 | 
						||
begin
 | 
						||
  if eo_index>0 then blockwrite(f,eo_tampon^,eo_index,effect_result);
 | 
						||
  dispose(eo_tampon);
 | 
						||
end;
 | 
						||
 | 
						||
{----------------------------------------------------------------------------}
 | 
						||
{----------------------------------------------------------------------------}
 | 
						||
{----------------------------------------------------------------------------}
 | 
						||
 | 
						||
 | 
						||
 | 
						||
{--------------------- DEPACKER une IMAGE au format PKM ---------------------}
 | 
						||
procedure load_PKM(nom_fichier:string);
 | 
						||
{errcode retourn<72>: 0=OK , 1=pas un PKM , 2=taille incorrecte}
 | 
						||
type
 | 
						||
  header = record {taille: 780 octets}
 | 
						||
             ident       : array[1..3] of char; { cha<68>ne "PKM" }
 | 
						||
             methode     : byte; { m<>thode de compression:           }
 | 
						||
                                 { 0 = compression en ligne (c)KM    }
 | 
						||
                                 { autres = inconnues pour le moment }
 | 
						||
             Recon1      : byte; { octet de reconnaissance sur 1 octet  }
 | 
						||
             Recon2      : byte; { octet de reconnaissance sur 2 octets }
 | 
						||
             longx       : word; { taille de l'image en X }
 | 
						||
             longy       : word; { taille de l'image en Y }
 | 
						||
             palette     : tpalette; { palette RVB 256*3 }
 | 
						||
             jump        : word; { taille du saut entre le header et l'image }
 | 
						||
           end;
 | 
						||
var
 | 
						||
  TailleX,TailleY:word;
 | 
						||
  errcode:byte;
 | 
						||
  coul,octet:byte;
 | 
						||
  taille_fichier:word;
 | 
						||
  i,j,k:word;
 | 
						||
  c:longint;
 | 
						||
  offsX,offsY,X,Y:word;
 | 
						||
  fich:file;
 | 
						||
  head: header;
 | 
						||
  taille_image: longint;
 | 
						||
begin
 | 
						||
  offsX:=0;
 | 
						||
  offsY:=0;
 | 
						||
  assign(fich,Nom_Fichier);
 | 
						||
  reset(fich,1);
 | 
						||
  taille_fichier:=filesize(fich);
 | 
						||
  blockread(fich,head,SizeOf(Header));
 | 
						||
  if Head.LongY>270 then Head.LongY:=270;
 | 
						||
 | 
						||
  if (head.ident<>'PKM') then
 | 
						||
  begin
 | 
						||
    errcode:=1;
 | 
						||
    exit;
 | 
						||
  end;
 | 
						||
  if (head.longX>360) then
 | 
						||
  begin
 | 
						||
    errcode:=2;
 | 
						||
    exit;
 | 
						||
  end;
 | 
						||
 | 
						||
  { d<>finition de la palette }
 | 
						||
  Palette:=head.palette;
 | 
						||
 | 
						||
  set_palette;
 | 
						||
 | 
						||
  TailleX:=Head.LongX;
 | 
						||
  TailleY:=Head.LongY;
 | 
						||
  taille_image:=Head.LongX;
 | 
						||
  taille_image:=taille_image*Head.LongY;
 | 
						||
  Seek(fich,SizeOf(Header)+Head.Jump);
 | 
						||
 | 
						||
  init_os;
 | 
						||
 | 
						||
  j:=0;
 | 
						||
  octet:=octet_suivant(fich);
 | 
						||
  c:=0;
 | 
						||
  while (c<taille_image) and (j<taille_fichier-SizeOf(Header)-Head.Jump) do
 | 
						||
  begin
 | 
						||
    if (octet<>Head.Recon1) and (octet<>Head.Recon2)
 | 
						||
    then
 | 
						||
    begin
 | 
						||
      X:=c mod head.longX;
 | 
						||
      Y:=c div head.longX;
 | 
						||
      if (X<360) and (Y<270) then
 | 
						||
        pixel(X,Y,octet);
 | 
						||
      inc(j);
 | 
						||
      octet:=octet_suivant(fich);
 | 
						||
      inc(c);
 | 
						||
    end
 | 
						||
    else
 | 
						||
    begin
 | 
						||
      if octet=Head.Recon1
 | 
						||
      then
 | 
						||
      begin
 | 
						||
        inc(j);
 | 
						||
        octet:=octet_suivant(fich);
 | 
						||
        coul:=octet;
 | 
						||
        inc(j);
 | 
						||
        octet:=octet_suivant(fich)-1;
 | 
						||
        for i:=0 to octet do
 | 
						||
        begin
 | 
						||
          X:=(c+i) mod head.longX;
 | 
						||
          Y:=(c+i) div head.longX;
 | 
						||
          if (X<360) and (Y<270) then
 | 
						||
            pixel(X,Y,coul);
 | 
						||
        end;
 | 
						||
        c:=c+octet+1;
 | 
						||
        inc(j);
 | 
						||
        octet:=octet_suivant(fich);
 | 
						||
      end
 | 
						||
      else
 | 
						||
      begin
 | 
						||
        inc(j);
 | 
						||
        octet:=octet_suivant(fich);
 | 
						||
        coul:=octet;
 | 
						||
        inc(j);
 | 
						||
        octet:=octet_suivant(fich);
 | 
						||
        k:=(octet shl 8)+octet_suivant(fich);
 | 
						||
        for i:=0 to (k-1) do
 | 
						||
        begin
 | 
						||
          X:=(c+i) mod head.longX;
 | 
						||
          Y:=(c+i) div head.longX;
 | 
						||
          if (X<360) and (Y<270) then
 | 
						||
            pixel(X,Y,coul);
 | 
						||
        end;
 | 
						||
        c:=c+k;
 | 
						||
        j:=j+2;
 | 
						||
        octet:=octet_suivant(fich);
 | 
						||
      end;
 | 
						||
    end;
 | 
						||
  end;
 | 
						||
  close_os;
 | 
						||
  close(fich);
 | 
						||
  errcode:=0;
 | 
						||
end;
 | 
						||
 | 
						||
{****************************************************************************}
 | 
						||
{****************************************************************************}
 | 
						||
{****************************************************************************}
 | 
						||
 | 
						||
var Crypt_curseur:byte;
 | 
						||
const Crypt_cle:string[13]='Sunset Design';
 | 
						||
 | 
						||
function crypt(octet:byte):byte;
 | 
						||
begin
 | 
						||
  crypt:=octet xor ord(Crypt_cle[Crypt_curseur]);
 | 
						||
  Crypt_curseur:=(Crypt_curseur mod 13)+1;
 | 
						||
end;
 | 
						||
 | 
						||
procedure Ecrire_palette(var Fichier:file);
 | 
						||
var i:word;
 | 
						||
begin
 | 
						||
  for i:=0 to 767 do ecrire_octet(Fichier,crypt(palette[i]));
 | 
						||
end;
 | 
						||
 | 
						||
procedure Lire_et_ecrire_sprite(var Fichier:file; x1,y1,x2,y2:word);
 | 
						||
var i,j:word;
 | 
						||
begin
 | 
						||
  for j:=y1 to y2 do
 | 
						||
    for i:=x1 to x2 do
 | 
						||
      ecrire_octet(Fichier,crypt(lit_pixel(i,j)));
 | 
						||
end;
 | 
						||
 | 
						||
 | 
						||
procedure Ecrire_trames_predefinies(var Fichier:file);
 | 
						||
var
 | 
						||
    n,i,j:word;
 | 
						||
    Octet:byte;
 | 
						||
    Pixel_lu:byte;
 | 
						||
begin
 | 
						||
  for n:=0 to 11 do {Pour chaque trame pr<70>d<EFBFBD>finie}
 | 
						||
  begin
 | 
						||
    for j:=0 to 15 do
 | 
						||
    begin
 | 
						||
      Octet:=0;
 | 
						||
      for i:=0 to 7 do
 | 
						||
      begin
 | 
						||
        Octet:=(Octet shl 1);
 | 
						||
        Pixel_lu:=lit_pixel(9+(17*n)+i,196+j);
 | 
						||
        if Pixel_lu>0 then
 | 
						||
          inc(Octet);
 | 
						||
      end;
 | 
						||
      ecrire_octet(Fichier,crypt(Octet));
 | 
						||
 | 
						||
      Octet:=0;
 | 
						||
      for i:=0 to 7 do
 | 
						||
      begin
 | 
						||
        Octet:=(Octet shl 1);
 | 
						||
        Pixel_lu:=lit_pixel(1+(17*n)+i,196+j);
 | 
						||
        if Pixel_lu>0 then
 | 
						||
          inc(Octet);
 | 
						||
      end;
 | 
						||
      ecrire_octet(Fichier,crypt(Octet));
 | 
						||
    end;
 | 
						||
  end;
 | 
						||
end;
 | 
						||
 | 
						||
 | 
						||
procedure Rajouter_fichier(var Fichier:file;Nom_fichier:string;Crypter:boolean);
 | 
						||
var
 | 
						||
    Fichier_a_ajouter:file;
 | 
						||
    Taille           :word;
 | 
						||
    Indice           :word;
 | 
						||
begin
 | 
						||
  assign   (Fichier_a_ajouter,Nom_fichier);
 | 
						||
  reset    (Fichier_a_ajouter,1);
 | 
						||
  Taille:=filesize(Fichier_a_ajouter);
 | 
						||
 | 
						||
  init_os;
 | 
						||
  if (Crypter) then
 | 
						||
    for Indice:=1 to Taille do
 | 
						||
      ecrire_octet(Fichier,crypt(octet_suivant(Fichier_a_ajouter)))
 | 
						||
  else
 | 
						||
    for Indice:=1 to Taille do
 | 
						||
      ecrire_octet(Fichier,octet_suivant(Fichier_a_ajouter));
 | 
						||
  close_os;
 | 
						||
 | 
						||
  close(Fichier_a_ajouter);
 | 
						||
end;
 | 
						||
 | 
						||
 | 
						||
procedure Coder_partie_de_fonte(var Fichier:file;Pos_X,Pos_Y,Nb_char:word);
 | 
						||
var
 | 
						||
    X,Y:word;
 | 
						||
    Indice_char:word;
 | 
						||
    Couleur_temporaire:byte;
 | 
						||
begin
 | 
						||
  for Indice_char:=1 to Nb_char do
 | 
						||
  begin
 | 
						||
    for X:=0 to 5 do
 | 
						||
      for Y:=0 to 7 do
 | 
						||
      begin
 | 
						||
        Couleur_temporaire:=lit_pixel(Pos_X+X,Pos_Y+Y);
 | 
						||
 | 
						||
        if not (Couleur_temporaire in [25,7,15])
 | 
						||
        then Couleur_temporaire:=0;
 | 
						||
 | 
						||
        ecrire_octet(Fichier,crypt(Couleur_temporaire));
 | 
						||
      end;
 | 
						||
 | 
						||
    inc(Pos_X,6);
 | 
						||
  end;
 | 
						||
end;
 | 
						||
 | 
						||
 | 
						||
var
 | 
						||
    Fichier:file;
 | 
						||
    Position_de_depart_de_la_section_d_aide:longint;
 | 
						||
    Nombre_de_lignes_d_aide :word;
 | 
						||
    Nombre_d_octets_utilises:word;
 | 
						||
 | 
						||
 | 
						||
procedure Demarrer_section_d_aide;
 | 
						||
begin
 | 
						||
  Nombre_de_lignes_d_aide :=0;
 | 
						||
  Nombre_d_octets_utilises:=0;
 | 
						||
  assign(Fichier,'GFX2.DAT');
 | 
						||
  reset (Fichier,1);
 | 
						||
  Position_de_depart_de_la_section_d_aide:=filesize(Fichier);
 | 
						||
  seek(Fichier,Position_de_depart_de_la_section_d_aide);
 | 
						||
  {On <20>crit temporairement des valeurs erron<6F>es dans le fichier:}
 | 
						||
  blockwrite(Fichier,Nombre_de_lignes_d_aide ,2); {Nb de lignes}
 | 
						||
  blockwrite(Fichier,Nombre_d_octets_utilises,2); {Nb d'octets utilis<69>s}
 | 
						||
end;
 | 
						||
 | 
						||
 | 
						||
procedure Terminer_section_d_aide;
 | 
						||
begin
 | 
						||
  seek      (Fichier,Position_de_depart_de_la_section_d_aide);
 | 
						||
  {On <20>crit d<>finitivement les valeurs correctes dans le fichier:}
 | 
						||
  blockwrite(Fichier,Nombre_de_lignes_d_aide ,2); {Nb de lignes}
 | 
						||
  blockwrite(Fichier,Nombre_d_octets_utilises,2); {Nb d'octets utilis<69>s}
 | 
						||
  close     (Fichier);
 | 
						||
end;
 | 
						||
 | 
						||
const
 | 
						||
      TITRE      = 1;
 | 
						||
      SOUS_TITRE = 2;
 | 
						||
      NORMAL     = 3;
 | 
						||
      T          = TITRE;
 | 
						||
      S          = SOUS_TITRE;
 | 
						||
      N          = NORMAL;
 | 
						||
 | 
						||
{$I TABLES}
 | 
						||
 | 
						||
procedure Ecrire_ligne_d_aide(De_type:byte;Chaine:string);
 | 
						||
var
 | 
						||
    Code:byte;   {Code <20> inscrire dans le fichier}
 | 
						||
    Indice:byte; {Indice de balayage de la cha<68>ne}
 | 
						||
begin
 | 
						||
 | 
						||
  if length(Chaine)>44 then
 | 
						||
  begin
 | 
						||
    close     (Fichier);
 | 
						||
    asm
 | 
						||
      mov ax,3
 | 
						||
      int 10h
 | 
						||
    end;
 | 
						||
    writeln('ERREUR DANS L''AIDE !!! Il y a une ligne qui est trop longue !!!');
 | 
						||
    halt(1);
 | 
						||
  end;
 | 
						||
 | 
						||
  case De_type of
 | 
						||
 | 
						||
    TITRE :
 | 
						||
      begin
 | 
						||
        {1<>re ligne:}
 | 
						||
 | 
						||
          {On code la taille de la 1<>re ligne cha<68>ne:}
 | 
						||
          Code:=(length(Chaine) shl 1) or $80;
 | 
						||
          blockwrite(Fichier,Code,1);
 | 
						||
 | 
						||
          {On code la 1<>re ligne de la cha<68>ne selon la table des caract<63>res}
 | 
						||
          {de titrage:}
 | 
						||
          for Indice:=1 to length(Chaine) do
 | 
						||
          begin
 | 
						||
            Code:=TABLE_TITRE[ord(Chaine[Indice])];
 | 
						||
            blockwrite(Fichier,Code,1);
 | 
						||
            inc(Code);
 | 
						||
            blockwrite(Fichier,Code,1);
 | 
						||
          end;
 | 
						||
 | 
						||
          {On met <20> jour les compteurs:}
 | 
						||
          inc(Nombre_de_lignes_d_aide);
 | 
						||
          inc(Nombre_d_octets_utilises,(length(Chaine) shl 1)+1);
 | 
						||
 | 
						||
        {2<>me ligne:}
 | 
						||
 | 
						||
          {On code la taille de la 2<>me ligne cha<68>ne:}
 | 
						||
          Code:=(length(Chaine) shl 1) or $80;
 | 
						||
          blockwrite(Fichier,Code,1);
 | 
						||
 | 
						||
          {On code la 2<>me ligne de la cha<68>ne selon la table des caract<63>res}
 | 
						||
          {de titrage:}
 | 
						||
          for Indice:=1 to length(Chaine) do
 | 
						||
          begin
 | 
						||
            Code:=TABLE_TITRE[ord(Chaine[Indice])];
 | 
						||
            if Chaine[Indice] in ['A'..'V']
 | 
						||
            then inc(Code,44)
 | 
						||
            else inc(Code,40);
 | 
						||
 | 
						||
            blockwrite(Fichier,Code,1);
 | 
						||
            inc(Code);
 | 
						||
            blockwrite(Fichier,Code,1);
 | 
						||
          end;
 | 
						||
 | 
						||
          {On met <20> jour les compteurs:}
 | 
						||
          inc(Nombre_de_lignes_d_aide);
 | 
						||
          inc(Nombre_d_octets_utilises,(length(Chaine) shl 1)+1);
 | 
						||
      end;
 | 
						||
 | 
						||
    SOUS_TITRE :
 | 
						||
      begin
 | 
						||
        {On code la taille de la cha<68>ne:}
 | 
						||
        Code:=length(Chaine);
 | 
						||
        blockwrite(Fichier,Code,1);
 | 
						||
 | 
						||
        {On code la cha<68>ne selon la table des sous-titres:}
 | 
						||
        for Indice:=1 to length(Chaine) do
 | 
						||
        begin
 | 
						||
          Code:=TABLE_SOUS_TITRE[ord(Chaine[Indice])];
 | 
						||
          blockwrite(Fichier,Code,1);
 | 
						||
        end;
 | 
						||
 | 
						||
        {On met <20> jour les compteurs:}
 | 
						||
        inc(Nombre_de_lignes_d_aide);
 | 
						||
        inc(Nombre_d_octets_utilises,length(Chaine)+1);
 | 
						||
      end;
 | 
						||
 | 
						||
    NORMAL :
 | 
						||
      begin
 | 
						||
        {On code la taille de la cha<68>ne:}
 | 
						||
        Code:=length(Chaine);
 | 
						||
        blockwrite(Fichier,Code,1);
 | 
						||
 | 
						||
        {On code la cha<68>ne selon la table des caract<63>res normaux:}
 | 
						||
        for Indice:=1 to length(Chaine) do
 | 
						||
        begin
 | 
						||
          Code:=TABLE_NORMAL[ord(Chaine[Indice])];
 | 
						||
          blockwrite(Fichier,Code,1);
 | 
						||
        end;
 | 
						||
 | 
						||
        {On met <20> jour les compteurs:}
 | 
						||
        inc(Nombre_de_lignes_d_aide);
 | 
						||
        inc(Nombre_d_octets_utilises,length(Chaine)+1);
 | 
						||
      end;
 | 
						||
 | 
						||
  end;
 | 
						||
 | 
						||
end;
 | 
						||
 | 
						||
 | 
						||
{$I HLP_GRET}
 | 
						||
{$I HLP_CRDT}
 | 
						||
{$I HLP_RGST}
 | 
						||
 | 
						||
 | 
						||
BEGIN
 | 
						||
  XMODE;
 | 
						||
 | 
						||
  Load_PKM('GFX2.PKM');
 | 
						||
 | 
						||
  assign(Fichier,'GFX2.DAT');
 | 
						||
  rewrite(Fichier,1);
 | 
						||
  init_eo;
 | 
						||
 | 
						||
  Crypt_curseur:=1;
 | 
						||
 | 
						||
  Ecrire_palette(Fichier);
 | 
						||
  Lire_et_ecrire_sprite(Fichier,  1,  1,254, 44); {Menu}
 | 
						||
 | 
						||
  Lire_et_ecrire_sprite(Fichier,  2, 47, 15, 60); {Shade}
 | 
						||
  Lire_et_ecrire_sprite(Fichier, 19, 47, 32, 60); {Colorize}
 | 
						||
  Lire_et_ecrire_sprite(Fichier, 36, 47, 49, 60); {Smooth}
 | 
						||
  Lire_et_ecrire_sprite(Fichier, 53, 47, 66, 60); {Tiling}
 | 
						||
  Lire_et_ecrire_sprite(Fichier, 70, 47, 83, 60); {Stencil}
 | 
						||
  Lire_et_ecrire_sprite(Fichier, 87, 47,100, 60); {Sieve}
 | 
						||
  Lire_et_ecrire_sprite(Fichier,104, 47,117, 60); {Grid}
 | 
						||
  Lire_et_ecrire_sprite(Fichier,121, 47,134, 60); {Mask}
 | 
						||
  Lire_et_ecrire_sprite(Fichier,138, 47,151, 60); {Smear}
 | 
						||
 | 
						||
  Lire_et_ecrire_sprite(Fichier,  1, 85, 15, 99); {Fleche}
 | 
						||
  Lire_et_ecrire_sprite(Fichier, 17, 85, 31, 99); {Viseur}
 | 
						||
  Lire_et_ecrire_sprite(Fichier, 65, 85, 79, 99); {Viseur pipette}
 | 
						||
  Lire_et_ecrire_sprite(Fichier, 33, 85, 47, 99); {Sablier}
 | 
						||
  Lire_et_ecrire_sprite(Fichier, 49, 85, 63, 99); {Multidirectionnel}
 | 
						||
  Lire_et_ecrire_sprite(Fichier, 81, 85, 95, 99); {Horizontal}
 | 
						||
  Lire_et_ecrire_sprite(Fichier, 97, 85,111, 99); {Viseur fin}
 | 
						||
  Lire_et_ecrire_sprite(Fichier,113, 85,127, 99); {Viseur pipette fin}
 | 
						||
 | 
						||
  Lire_et_ecrire_sprite(Fichier,  2,102, 15,115); {Dessin continu}
 | 
						||
  Lire_et_ecrire_sprite(Fichier, 19,102, 32,115); {Dessin interrompu}
 | 
						||
  Lire_et_ecrire_sprite(Fichier, 36,102, 49,115); {Dessin point}
 | 
						||
  Lire_et_ecrire_sprite(Fichier, 53,102, 66,115); {Pinceau-brosse}
 | 
						||
  Lire_et_ecrire_sprite(Fichier, 70,102, 83,115); {Courbe 3 pts}
 | 
						||
  Lire_et_ecrire_sprite(Fichier, 87,102,100,115); {Courbe 4 pts}
 | 
						||
  Lire_et_ecrire_sprite(Fichier,104,102,117,115); {Ligne}
 | 
						||
  Lire_et_ecrire_sprite(Fichier,121,102,134,115); {K-Line}
 | 
						||
  Lire_et_ecrire_sprite(Fichier,138,102,151,115); {Lignes concentiques}
 | 
						||
 | 
						||
  Lire_et_ecrire_sprite(Fichier,  1,120, 16,135); {Pinceau  1}
 | 
						||
  Lire_et_ecrire_sprite(Fichier, 18,120, 33,135); {Pinceau  2}
 | 
						||
  Lire_et_ecrire_sprite(Fichier, 35,120, 50,135); {Pinceau  3}
 | 
						||
  Lire_et_ecrire_sprite(Fichier, 52,120, 67,135); {Pinceau  4}
 | 
						||
  Lire_et_ecrire_sprite(Fichier, 69,120, 84,135); {Pinceau  5}
 | 
						||
  Lire_et_ecrire_sprite(Fichier, 86,120,101,135); {Pinceau  6}
 | 
						||
  Lire_et_ecrire_sprite(Fichier,103,120,118,135); {Pinceau  7}
 | 
						||
  Lire_et_ecrire_sprite(Fichier,120,120,135,135); {Pinceau  8}
 | 
						||
  Lire_et_ecrire_sprite(Fichier,137,120,152,135); {Pinceau  9}
 | 
						||
  Lire_et_ecrire_sprite(Fichier,154,120,169,135); {Pinceau 10}
 | 
						||
  Lire_et_ecrire_sprite(Fichier,171,120,186,135); {Pinceau 11}
 | 
						||
  Lire_et_ecrire_sprite(Fichier,188,120,203,135); {Pinceau 12}
 | 
						||
  Lire_et_ecrire_sprite(Fichier,  1,137, 16,152); {Pinceau 13}
 | 
						||
  Lire_et_ecrire_sprite(Fichier, 18,137, 33,152); {Pinceau 14}
 | 
						||
  Lire_et_ecrire_sprite(Fichier, 35,137, 50,152); {Pinceau 15}
 | 
						||
  Lire_et_ecrire_sprite(Fichier, 52,137, 67,152); {Pinceau 16}
 | 
						||
  Lire_et_ecrire_sprite(Fichier, 69,137, 84,152); {Pinceau 17}
 | 
						||
  Lire_et_ecrire_sprite(Fichier, 86,137,101,152); {Pinceau 18}
 | 
						||
  Lire_et_ecrire_sprite(Fichier,103,137,118,152); {Pinceau 19}
 | 
						||
  Lire_et_ecrire_sprite(Fichier,120,137,135,152); {Pinceau 20}
 | 
						||
  Lire_et_ecrire_sprite(Fichier,137,137,152,152); {Pinceau 21}
 | 
						||
  Lire_et_ecrire_sprite(Fichier,154,137,169,152); {Pinceau 22}
 | 
						||
  Lire_et_ecrire_sprite(Fichier,171,137,186,152); {Pinceau 23}
 | 
						||
  Lire_et_ecrire_sprite(Fichier,188,137,203,152); {Pinceau 24}
 | 
						||
  Lire_et_ecrire_sprite(Fichier,  1,154, 16,169); {Pinceau 25}
 | 
						||
  Lire_et_ecrire_sprite(Fichier, 18,154, 33,169); {Pinceau 26}
 | 
						||
  Lire_et_ecrire_sprite(Fichier, 35,154, 50,169); {Pinceau 27}
 | 
						||
  Lire_et_ecrire_sprite(Fichier, 52,154, 67,169); {Pinceau 28}
 | 
						||
  Lire_et_ecrire_sprite(Fichier, 69,154, 84,169); {Pinceau 29}
 | 
						||
  Lire_et_ecrire_sprite(Fichier, 86,154,101,169); {Pinceau 30}
 | 
						||
  Lire_et_ecrire_sprite(Fichier,103,154,118,169); {Pinceau 31}
 | 
						||
  Lire_et_ecrire_sprite(Fichier,120,154,135,169); {Pinceau 32}
 | 
						||
  Lire_et_ecrire_sprite(Fichier,137,154,152,169); {Pinceau 33}
 | 
						||
  Lire_et_ecrire_sprite(Fichier,154,154,169,169); {Pinceau 34}
 | 
						||
  Lire_et_ecrire_sprite(Fichier,171,154,186,169); {Pinceau 35}
 | 
						||
  Lire_et_ecrire_sprite(Fichier,188,154,203,169); {Pinceau 36}
 | 
						||
  Lire_et_ecrire_sprite(Fichier,  1,171, 16,186); {Pinceau 37}
 | 
						||
  Lire_et_ecrire_sprite(Fichier, 18,171, 33,186); {Pinceau 38}
 | 
						||
  Lire_et_ecrire_sprite(Fichier, 35,171, 50,186); {Pinceau 39}
 | 
						||
  Lire_et_ecrire_sprite(Fichier, 52,171, 67,186); {Pinceau 40}
 | 
						||
  Lire_et_ecrire_sprite(Fichier, 69,171, 84,186); {Pinceau 41}
 | 
						||
  Lire_et_ecrire_sprite(Fichier, 86,171,101,186); {Pinceau 42}
 | 
						||
  Lire_et_ecrire_sprite(Fichier,103,171,118,186); {Pinceau 43}
 | 
						||
  Lire_et_ecrire_sprite(Fichier,120,171,135,186); {Pinceau 44}
 | 
						||
  Lire_et_ecrire_sprite(Fichier,137,171,152,186); {Pinceau 45}
 | 
						||
  Lire_et_ecrire_sprite(Fichier,154,171,169,186); {Pinceau 46}
 | 
						||
  Lire_et_ecrire_sprite(Fichier,171,171,186,186); {Pinceau 47}
 | 
						||
  Lire_et_ecrire_sprite(Fichier,188,171,203,186); {Pinceau 48}
 | 
						||
 | 
						||
  Lire_et_ecrire_sprite(Fichier,  1,188,  7,194); {Diskette 3"<22>}
 | 
						||
  Lire_et_ecrire_sprite(Fichier,  9,188, 15,194); {Diskette 5"<22>}
 | 
						||
  Lire_et_ecrire_sprite(Fichier, 17,188, 23,194); {HDD}
 | 
						||
  Lire_et_ecrire_sprite(Fichier, 25,188, 31,194); {CD-ROM}
 | 
						||
  Lire_et_ecrire_sprite(Fichier, 33,188, 39,194); {Network}
 | 
						||
 | 
						||
  Lire_et_ecrire_sprite(Fichier,  1,213,231,268); {Logo GrafX2}
 | 
						||
 | 
						||
  Ecrire_trames_predefinies(Fichier);
 | 
						||
 | 
						||
  Rajouter_fichier(Fichier,'FONTE1.FNT',true); {Fonte syst<73>me}
 | 
						||
 | 
						||
  Rajouter_fichier(Fichier,'FONTE2.FNT',true); {Fonte exotique}
 | 
						||
 | 
						||
  Load_PKM('FONTS.PKM');
 | 
						||
 | 
						||
  Coder_partie_de_fonte(Fichier,0,121,45); {Petites fontes}
 | 
						||
  Coder_partie_de_fonte(Fichier,0,129,45);
 | 
						||
  Coder_partie_de_fonte(Fichier,0,137,45);
 | 
						||
  Coder_partie_de_fonte(Fichier,0,145,12);
 | 
						||
  Coder_partie_de_fonte(Fichier,0,153,44); {Grosse fonte}
 | 
						||
  Coder_partie_de_fonte(Fichier,0,161,44);
 | 
						||
  Coder_partie_de_fonte(Fichier,0,169,40);
 | 
						||
  Coder_partie_de_fonte(Fichier,0,177,40);
 | 
						||
 | 
						||
  close_eo(Fichier);
 | 
						||
  close (Fichier);
 | 
						||
 | 
						||
  asm
 | 
						||
    mov ax,3
 | 
						||
    int 10h
 | 
						||
  end;
 | 
						||
 | 
						||
  Generer_l_aide_Credits;
 | 
						||
  Generer_l_aide_Register;
 | 
						||
  Generer_l_aide_Greetings;
 | 
						||
 | 
						||
 | 
						||
  reset(Fichier,1);
 | 
						||
  seek(Fichier,filesize(Fichier));
 | 
						||
  init_eo;
 | 
						||
  Rajouter_fichier(Fichier,'GFX2.INI',false);
 | 
						||
  close_eo(Fichier);
 | 
						||
 | 
						||
  writeln('Le fichier GFX2.DAT est cr<63><72>. (taille = ',filesize(Fichier),' octets)');
 | 
						||
  close(Fichier);
 | 
						||
END.
 |