LEX 'MARGELEX' * (c) Copyright PPC Paris 1986 ID #E1 MSG 0 POLL POLHND ENTRY MARGE CHAR #D KEY 'MARGIN' Syntaxe: MARGIN N TOKEN 29 ENDTXT pWTKY EQU #1C Poll interceptÅ pour la * margination. RESERV EQU #2F986 Le Lex utilise un octet de * la "RESERVE-RAM" pour * conserver la valeur de la * marge, È l'adresse * (REVSERV)+1. CURSOR EQU #2F47E Octet donnant la position * actuelle du curseur (0È95) CHIRP EQU #0EC5A Emet le BEEP d'erreur du * systÉme d'exploitation. EXPEX- EQU #0F178 Cette routine permet de * placer le paramÉtre * suivant MARGIN sur la Math * Stack. RNDAHX EQU #136CB "POP", teste et transforme * une expression se trouvant * sur la Math Stack en un * nombre hexa. dans A(A) NXTSTM EQU #08A48 Fin d'exÅcution de l'ordre * MARGIN. FIXP EQU #02A6E Routine de compilation de * l'ordre. FIXDC EQU #05493 Routine de dÅcompilation * de l'ordre. ************************************************** * POLHND * But: intercepter le poll pWTKY, tester la * position du curseur et faire un BEEP si elle * concorde avec la valeur de la marge. ************************************************** POLHND LC(2) pWTKY On charge dans C(B) la * valeur du poll "pWTKY" ?B=C B Est-ce celui-lÈ ? GOYES POLL Si oui: on branche en POLL RTNSXM Autrement: fin d'exÅcution * Il existe deux sortes de POLL: les "slow polls" * et les "fast polls" ou FPOLL. * * Lors de l'Åmission d'un FPOLL, le systÉme ne * prend aucune prÅcaution pour prÅserver son * environnement. Il est donc impÅratif de sauver * le contenu de D(A) POLL C=D A R3=C Sauvegarde. D1=(5) 1+RESERV D1 ^ l'endroit oË est * stockÅe la marge. A=DAT1 B A(B) = sa valeur D1=(4) CURSOR D1 ^ CURSOR C=DAT1 B C(B) = position du * curseur ( de 0 È 95 ). ?C#A B La position du curseur # * margination ? GOYES rtnsxm Si oui: fin d'exÅcution. GOSBVL CHIRP Autrement on alerte... rtnsxm C=R3 Restitution de D(A) * conservÅ plus haut dans * R3(A) D=C A Ok RTNSXM On n'intercepte pas le * POLL. ************************************************** * MARGIN * ************************************************** REL(5) MARGEd REL(5) MARGEp MARGE GOSBVL EXPEX- "Collapse" la Math Stack * et y dÅpose le paramÉtre. GOSBVL RNDAHX "POP", teste et convertit * l'expression en un nombre * HEXA dans A(A). GONC SetA20 Si l'expression est < 0, * on met 0 par dÅfaut. ?A#0 A Si l'expression <> 0 GOYES Maxmrg On passe au test suivant. SetA20 A=0 A Maxmrg LC(2) 96 On charge dans C(B): 96 ?C>=A B L'expression <= 96 ? GOYES Setmrg Ok: Setmrg. A=C A Autrement: on place 96 * par dÅfaut. Setmrg D1=(5) 1+RESERV D1 ^ (RESERV)+1 A=A-1 A On dÅcrÅmente pour * compatibilitÅ avec CURSOR DAT1=A B Sauvegarde de la marge * dans (RESERV)+1 GOVLNG NXTSTM Fin d'exÅcution .... MARGEp GOVLNG FIXP MARGEd GOVLNG FIXDC END