/* ------------------------------------------------------------------- */ /* GeMiniTel - ‚mulateur vid‚o DRCS "temps r‚‚l" pour ATARI ST */ /* Routine de digitalisation Sweetel2 */ /* Algo/programme (c)1995 ROCHE Xavier - ATARI - PureC */ /* ------------------------------------------------------------------- */ /* d‚finitions arrstr */ #include "arrstr.h" /* divers: uchar, AND, min etc.. */ #include "gu_type.h" /* Variables qui doivent ˆtre fix‚es avant le #include "gmtlib.c" : */ /* - Adresse bitmap de gmt: */ #define gmt_bit_adr adr_bit /* - Adresse bitmap de comparaison (s'il y a lieu) de gmt: */ /* #define gmt_bit_cmp /* - Longueur d'une ligne de gmt_bit_adr et gmt_bit_cmp en octets: */ #define gmt_line_len lindest /* - Position de d‚part gmtel xy (0..39 et 1..24) et dimensions de la fenˆtre: */ #define gmt_startmx startmx #define gmt_startmy startmy #define gmt_sizemw sizemw #define gmt_sizemh sizemh /* - Couleur texte et fond (0..7): */ #define gmt_colt colt #define gmt_colf colf /* - Option de chargement de fonte 0 = Fonte avant (le texte) 1 = Fonte aprŠs 2 = Fonte avant chaque ligne (entrelac‚) 3 = Fonte aprŠs chaque ligne */ #define gmt_opt opt /* - Option #2 de placement du fond 0 = Pas de fond 1 = Placer un fond … chaque dessin */ #define gmt_opt2 opt2 /* - Mode animation: 0 : g‚n‚rer que des images fixes, pas de gmt_bit_cmp 1 : g‚n‚rer en tenant compte de l'image pr‚c‚dente gmt_bit_cmp des routines d'optimisation sont mises en oeuvre ‚galement */ #define gmt_anim 0 /* - Compactage 0 : pas de compactage simultan‚ 1 : compactage simultan‚ */ #define gmt_optcom 1 /* compactage */ /* - Option #4 de contr“le des caractŠres DRCS / 0 = pas de contr“le 1 = contr“le: si keep[x]=1 alors ne pas utiliser x */ #define gmt_opt4 0 /* --------------------------------------------------------------------- */ /* vars globales */ /* index couleur fond et texte 0..7 */ int colf=1,colt=6; /* Position et taille de la fenˆtre minitel */ int startmx=2,startmy=3; int sizemw,sizemh; int opt=3; int opt2=1; int lindest; long adr_bit; /* le "noyau" */ #include "gmtlib.c" ARRSTR vpage; void gm_XX1(void); #define ch2_(arrvar,PT) ( (char) *( (char*) (&arrvar[0] + PT) ) ) #define lo_(arrvar,PT) ( (long) *( (long*) (arrvar + PT) ) ) /* --------------------------------------------------------------------- */ long cdecl gmtel( int * _newch, int * _alldone, char * _keep , char * _drcs, int _hwind, int _wwind,int _starty , int _startx, int _colf , int _colt, int _clsflag, int _t, int _hpos , int _wpos , int _ypos , int _xpos, int _len , long _adrdest, int _h , int _w , long _bitmap ) { /* r‚cup‚rer params: */ colf = _colf; colt = _colt; startmx = _startx; startmy = _starty; sizemw = _wwind; sizemh = _hwind; adr_bit = _bitmap; vpage.maxlen = _len; opt = _t; vpage.len=0; lindest=_w / 8; /* Taille ligne mono en octets */ gmt_clear(); /* on r‚initialise les champs! indispensable! */ /* caractŠres qui ne doivent pas ˆtre modifi‚s: */ if ( _keep ) { /* si adr _keep */ int a; for( a=0 ; a < 94*2 ; a++ ) keep[a] = _keep[a]; } else { /* pas de '_keep' */ int a; for( a=0 ; a < 94*2 ; a++ ) keep[a] = 0; /* tout peut ˆtre utilis‚ */ } if ( _drcs ) { /* si adr _drcs */ int a,b,c; for( c=0 ; c < 2 ; c++ ) { for( b=0 ; b < 94 ; b++ ) { for( a=0 ; a < 10 ; a++ ) { * (char*) ( &drcs[0][0] + 10*94*c+b*10+a ) = * (char*) ( _drcs + a*94*2+b*2+c ); } } } } if ( gmt_cut(_xpos,_ypos,_wpos,_hpos) ) return -1; if ( _adrdest ) { /* si adr dest */ char flag=3; vpage.str = (char*) _adrdest; if (_clsflag) { /* dessiner aussi fenˆtre 1= avant 0= pendant */ opt2=0; if ( (colf != 0) || (colt != 7) ) /* d‚finir couleur */ gmt_cls(&vpage); } else /* dessiner un fond pour chaque ligne */ opt2=1; if ( opt == -1 ) /* pas de fonte */ flag=1; if ( gmt_code(&vpage,flag,_xpos,_ypos,_wpos,_hpos) ) return -1; } if ( _drcs ) { /* si adr _drcs */ int a,b,c; for( c=0 ; c < 2 ; c++ ) { for( b=0 ; b < 94 ; b++ ) { for( a=0 ; a < 10 ; a++ ) { * (char*) ( _drcs + a*94*2+b*2+c ) = * (char*) ( &drcs[0][0] + 10*94*c+b*10+a ); } } } } if ( _alldone ) { /* si adresse d‚clar‚e */ * _alldone = I_full; } if ( _newch ) { * _newch = I_ndrcs; } return (vpage.len); }