1                   _MSJ.DFV                                                            SYSTHEMA               Bild 1: Information ber den Master-Environment-Block holen
; GetEnvSeg gibt die Segment-Adresse des Environment-
; Blocks zurck, der dem aktiven Befehlsprozessor gehrt.
;
; Aufruf mit: ES = Aktuelles PSP-Segment
;
; Rckgabe:   ES = Segment-Adresse des Environment-Blocks
 
GetEnvSeg       proc    near
                mov     ax,es                   ;bertrage Adresse nach AX
                cmp     ax,es:[16h]             ;Verzweige, wenn dieses Programm
                je      GES1                    ;sein eigenes Parent-Programm ist
                mov     es,es:[16h]             ;Lies PSP-Adresse des Parent-Programms
                jmp     GetEnvSeg               ;Spring zurck und versuch's noch einmal
GES1:           mov     es,es:[2Ch]             ;Lies Environment-Adresse
                ret                             ;Beende mit Adresse in ES
GetEnvSeg       endp
 
; GetEnvSize berechnet die Gre eines Environment-Blocks.
;
; Aufruf mit: ES = Segment-Adresse des Environment-Blocks
;
; Rckgabe:   AX = Gre des Environment-Blocks in Bytes
 
GetEnvSize      proc    near
                push    es                      ;Speichere ES
                mov     ax,es                   ;bertrage ES nach AX
                dec     ax                      ;Vermindere AX um 1
                mov     es,ax                   ;ES zeigt auf MCB
                mov     ax,es:[03h]             ;Lies Block-Lnge in AX
                mov     cl,4                    ;Multipliziere Lnge mit 16
                shl     ax,cl
                pop     es                      ;Stelle ES wieder her
                ret                             ;Beende mit Lnge in AX
GetEnvSize      endp
 
; GetEnvOffset gibt die Offset-Adresse des ersten freien
; Byte (des abschlieenden Null-Byte) in einem Environment-Block zurck.
;
; Aufruf mit: ES = Segment-Adresse des Environment-Blocks
;
; Rckgabe:   DI = Offset des ersten freien Byte
 
GetEnvOffset    proc    near
                cld                             ;Lsche Direction-Flag
                xor     al,al                   ;Setze AL fr den Befehl SCASB auf Null
                xor     di,di                   ;DI zeigt auf Anfang des Blocks
                mov     cx,0FFFFh               ;Initialisiere CX
GEOLoop:        repne   scasb                   ;Suche nach einem Null-Byte
                cmp     byte ptr es:[di],0      ;Ist auch das nchste Byte Null?
                jne     GEOLoop                 ;Nein, dann springe in der Schleife zurck
                ret                             ;Beende mit Offset in DI
GetEnvOffset    endp
܀     w            y 3  y 6  y `  y c  y   y   y   y 
  y                                                              

  _  y   y 
  y d  y   y   y   y   y S  y V  y                                                              
V    y   y   y   y   y 2  y y  y   y   y J  y                                                              
J    y   y   y F  y \  y _  y   y   y   y %  y                                                              
%  (  y Z  y ]  y {  y   y 	  y m	  y 	  y 	  y O
  y                                                              
O
  
  y 
  y   y   
                                                                                               
   
       8 9 A I     generated by an Aldus application  10.27.9210.00.41
  