' ****************************************
' * P R I N T   A S C I I                *
' * Gestion fin de ligne et bas d' écran *
' *                                      *
' * CODAGE       Pierre Philippe Launay  *
' * RECHERCHE    Cathy Lardy             *
' * COPYRIGHT    © Décembre 1991         *
' ****************************************
'
vite
PROCEDURE vite  ! Plan du codage
  met.ecran     ! Il est possible d' aller
  lecteur$="DF1:article/ascii"
  longueur%=79                          ! Nombre de lettres par ligne
  ~FRE(0)
  vide$=SPACE$(80)
  debut
RETURN
PROCEDURE debut
  met.variable  ! Beaucoup plus vite
  affichage     ! En optimisant d' avantage
  clic          ! Laché de souris
  salut         ! A vos crayon...
RETURN
PROCEDURE met.variable  ! Précalcul pour aller plus vite
  tab%=8
  tab78%=ADD(tab%,78)
  nom$=""
  fichier$=""
  ecran$=""
  return%=0
  essais&=0
  ligne%=8
  REPEAT
    REPEAT
      FRONTS 2
      FILESELECT "SELECTIONNEZ LE FICHIER ASCII A LIRE"," LIRE ",lecteur$,nom$
      IF nom$=""
        fins
      ENDIF
      nom$=TRIM$(nom$) ! Ote les espaces
      IF NOT EXIST(nom$)
        nom$=""
      ENDIF
      INC essais&
    UNTIL nom$<>"" OR essais&=3
    IF essais&=3 OR INSTR(nom$,":")=LEN(nom$)
      IF nom$="" OR (NOT EXIST(nom$)) OR INSTR(nom$,":")=LEN(nom$)
        ALERT 0,"Ce type d' objets ne convient pas",1,"Eustatique, n' est-il pas ?",bof%
        nom$=""
      ENDIF
    ENDIF
    IF nom$<>""
      OPEN "i",#0,nom$
    ENDIF
  UNTIL nom$<>""
  lof%=LOF(#0)
  CLOSE #0
  nomemoire%=FALSE
  IF AvailMem(&H4)>lof%
    fichier%=MALLOC(lof%,&H4)
  ELSE IF AvailMem(&H2)>lof%
    fichier%=MALLOC(lof%,&H2)
  ELSE
    ALERT 0,"MANQUE DE MEMOIRE|"+"Chip  : "+STR$(AvailMem(4))+"|Fast  : "+STR$(AvailMem(2))+"|----------------|Total : "+STR$(AvailMem(2)+AvailMem(4)),1," Vu ",bof%
    nomemoire%=TRUE
    salut
  ENDIF
  BLOAD nom$,fichier%
  '
  tab%=0
  return%=0
  long%=lof%
  TEXT 12,17,".../..."
  FOR x%=SUCC(fichier%) TO ADD(fichier%,long%)
    INC xreturn%
    IF xreturn%>65
      BYTE{xspace%}=&HA
      xreturn%=0
    ENDIF
    SELECT BYTE{x%}
    CASE 10
      INC return%
      xreturn%=0
      TEXT 12,17,"Return : #"+STR$(return%)
      TEXT 12,27,"Offset : "+STR$(SUB(x%,fichier%))
      xspace%=x%
    CASE 32
      xspace%=x%
    ENDSELECT
  NEXT x%
  '
  debut%=fichier%
  CLS
  ALERT 0,"SELECTION",2,"Search|Print|Page",bof%
  page%=FALSE
  SELECT bof%
  CASE 1
    INPUT "Occurence : ",occurence$
    CLS
    symb%=ASC(LEFT$(occurence$))
    len%=LEN(occurence$)
    TEXT 12,17,".../..."
    FOR x%=SUCC(fichier%) TO ADD(fichier%,long%)
      IF BYTE{x%}=symb%
        IF LEFT$(CHAR{x%},len%)=occurence$
          cherche$=cherche$+MKL$(SUB(ADD(x%,len%),2))
          TEXT 12,17,"Offset : "+STR$(SUB(x%,fichier%),10)
        ENDIF
      ENDIF
    NEXT x%
    xcherche%=5
    cherche%=CVL(LEFT$(cherche$,4))
  CASE 2
    cherche%=long%
  CASE 3
    cherche%=long%
    page%=TRUE
  ENDSELECT
  titre2s$=RIGHT$(nom$,MIN(65,LEN(nom$)))+" "+STR$(lof%)
  TITLEW #0," Chip "+STR$(AvailMem(2))+"    Fast "+STR$(AvailMem(4))+"    Total "+STR$(AvailMem(2)+AvailMem(4)),titre2s$
  CLS
  TEXT 12,17,STR$(SHR(LEN(cherche$),2))+" OCCURENCES..."
  return%=0
  clic                                  ! Clac
  pos%=2
RETURN
PROCEDURE affichage     ! Le test
  CLS
  x%=0
  vide%=V:vide$
  FOR x%=SUCC(fichier%) TO ADD(fichier%,long%)
    SELECT BYTE{x%}
    CASE 10
      DEC pos%
      @return
      ~Text(rastport%,vide%,SUB(78,pos%))
      pos%=1
    DEFAULT     ! On peut ajoutter ici des symboles spéciaux
      SELECT pos%
      CASE 78 TO tab78%
        @return
        pos%=1
      DEFAULT
        INC pos%
      ENDSELECT
    ENDSELECT
    IF x%=cherche%
      cherche%=CVL(MID$(cherche$,xcherche%,4))
      ADD xcherche%,4
      @return
      ~Text(rastport%,vide%,SUB(78,pos%))
      pos%=x%
      clic
    ELSE
      IF MOUSEK
        clic
      ENDIF
    ENDIF
  NEXT x%
  DISPLAY ON                                    ! Affichage visible
RETURN
PROCEDURE return
  INC return%
  SELECT ligne%
  CASE 0 TO 177
    ADD ligne%,8
  DEFAULT
    IF page%=TRUE
      ligne%=16
      clic
      COLOR gris%
      PBOX 2,10,638,187
      COLOR 1
    ELSE
      ~OwnBlitter()
      ~WaitBlit()
      DPOKE &HDFF096,&HC010     ! DMACONR : disque blitterseul set
      LPOKE &HDFF044,&HFFFFFFFF ! Masque  : tout prendre
      DPOKE &HDFF040,&H9F0      ! BLTCON0 : canal A et D
      LPOKE &HDFF050,source%
      LPOKE &HDFF054,cible%
      LPOKE &HDFF064,0          ! BLTxMOD : pas de décalage
      DPOKE &HDFF058,taille%
      ~DisOwnBlitter()
      ~WaitBlit()
    ENDIF
  ENDSELECT
  ~Move(rastport%,2,ligne%) ! Positionnement du curseur
  ~Text(rastport%,debut%,pos%)  ! Affichage
  debut%=SUCC(x%)
RETURN
PROCEDURE salut         ! Respect de l' utilisateur
  SPUT ecran$()
  IF NOT nomemoire%
    ~MFREE(fichier%,lof%)
  ENDIF
  fins                                  ! snif
RETURN
PROCEDURE clic          ! Clac
  REPEAT
    sourisk%=MOUSEK
  UNTIL MOUSEK<>0 OR STRIG(1)<>0 OR INKEY$<>""
  WHILE MOUSEK<>0 OR STRIG(1)<>0 OR INKEY$<>""
  WEND
RETURN
PROCEDURE met.ecran     ! Oh Voui
  OPENS 2,0,0,640,200,1,&H8000
  TITLES #2,"Code PPL (Février 1992)"
  titres$="ArtioDactyl FastPrint"
  planbit%=LONG{ADD(SCREEN(2),&HC0)}         ! Adresse plan de bits 0
  source%=planbit%+0+28*640/8
  cible%=planbit%+0+20*640/8
  taille%=168*64+640/16
  '
  OPENW #0,0,10,640,189,0,&H1000
  titrew$="ArtioDactyl Block Editor"
  TITLEW #0,titrew$,titres$
  rastport%=LONG{ADD(WINDOW(0),50)}
  OPTION BASE 1
  DIM ecran$(2)
RETURN
PROCEDURE ferme.ecran   ! Déjà
  CLOSEW #0
  CLOSES 2
RETURN
PROCEDURE fins          ! Rester bon ami avec le système
  ferme.ecran
  END
RETURN
'
