home *** CD-ROM | disk | FTP | other *** search
/ Hall of Fame / HallofFameCDROM.cdr / proglc / batch.lzh / GETENV.ASM < prev    next >
Encoding:
Assembly Source File  |  1985-09-15  |  2.0 KB  |  64 lines

  1. PAGE    58,132
  2. ;    FILE:    GETENV.ASM
  3. ;
  4. ;        THIS ROUTINE FINDS THE SYSTEM WIDE ENVIRONMENT STRING
  5. ;    AND RETURNS A POINTER TO IT.  GETVAR WAS WRITTEN TO BE CALLED
  6. ;    FROM C, AND REQUIRES THE LARGE MEMORY MODEL SINCE THE SYSTEM
  7. ;    ENVIRONMENT STRING LIVES OFF IN NEVER NEVER LAND.
  8. ;
  9.  
  10. PSPSEG    SEGMENT    PARA AT 0
  11.             ;DEFINE SOME SYMBOLS IN THE PSP
  12.     ORG    014H
  13. ERRSEG    DW    ?
  14.  
  15. PSPSEG    ENDS
  16.  
  17. INCLUDE    MODEL.H
  18. INCLUDE    PROLOGUE.H
  19.  
  20.     PUBLIC    GETENV ;(&PNTER) RETURNS LENGTH IN FUNCVAL
  21. GETENV    PROC    FAR
  22.     PUSH    BP        ;DO THE STACK FRAMING STUFF SO
  23.     MOV    BP,SP        ;YOU CAN GET ARGUMENT POINTER
  24. ARG=6
  25.     MOV    AX,_PSPSEG+2        ;GET THE PSP SEGMENT SAVED BY C86
  26.     MOV    ES,AX            ;PUT IN ES FOR GRABBING INFO
  27.     ASSUME    ES:PSPSEG        ;LET THE ASSEMBLER KNOW THIS...
  28.     MOV     DX,ERRSEG        ;GET THE CALLING PROGRAMS SEG FROM
  29.                     ;THE ERROR VECTOR.
  30.     MOV     ES,DX            ;PUT IT IN ES
  31.     MOV     BX,WORD PTR ES:[002CH]    ;GET THE CALLERS ENVIRONMENT STRING
  32.     CMP     BX,0            ;IF IT IS ZERO,
  33.     JNZ     RET_ADDRESS
  34.     MOV     BX,DX            ;THEN ASSUME THE ENVIRONMENT STRING
  35.     DEC     BX            ;FOLLOWS THIS PROGRAM.  POINT ES AT
  36.     MOV     ES,BX            ;THE SEGMENT ALLOCATION INFO, AND
  37.     ADD     BX,WORD PTR ES:[0003]    ;SKIP FORWARD TO NEXT ALLOC SEGMENT.
  38.     ADD     BX,2            ;MUST ADD 2 PARAS TO GET OVER INFO.
  39. RET_ADDRESS:
  40.     LES    DI,ARG[BP]        ;GET ADDRESS OF ARGUMENT POINTER
  41.     XOR    AX,AX            ;CREATE A ZERO OFFSET
  42.     STOS    WORD PTR ES:[DI]    ;AND STORE THAT IN FIRS WORD
  43.     MOV    ES:[DI],BX        ;RETURN ENVIRONMENT SEGMENT AFTER THAT
  44.     DEC     BX            ;BACKUP 16 BYTES FROM ENVIRONMENT TO
  45.     MOV     ES,BX            ;GET THE SEGMENT ALLOCATION INFO
  46.     MOV     AX,WORD PTR ES:[0003]    ;FETCH SIZE OF ENVIRONMENT SEGMENT
  47.     SHL     AX,1            ;MULTIPLY THAT BY 16
  48.     SHL     AX,1            ;TO GET THE ENVIRONMENT STRING SIZE.
  49.     SHL     AX,1
  50.     SHL     AX,1
  51.     POP    BP
  52.     RET
  53. GETENV    ENDP
  54.  
  55. INCLUDE    EPILOGUE.H
  56.  
  57. @DATAC    SEGMENT    BYTE PUBLIC 'DATAC'
  58.  
  59.     EXTRN    _PSPSEG:WORD    ;C86 STORES THE PSP SEGMENT ADDRESS HERE
  60.  
  61. @DATAC    ENDS
  62.  
  63.     END
  64.