home *** CD-ROM | disk | FTP | other *** search
/ Jason Aller Floppy Collection / 127.img / DDOS501.ZIP / DDSWITCH.ASM < prev    next >
Assembly Source File  |  1986-04-12  |  2KB  |  72 lines

  1. SUBTTL    SWITCH ROUTINE FOR A COMPILED BASIC PROGRAM
  2.     ;VERSION 1.00    4/12/86
  3. PAGE    60,132
  4.  
  5.     ;THIS ROUTINE SHOULD BE ASSEMBLED AND THEN LINKED INTO A COMPILED
  6.     ;BASIC PROGRAM.     THE BASIC PROGRAM JUST NEEDS THE FOLLOWING LINE:
  7.     ;        CALL    SOFFSET(SWITCH)
  8.     ;NOTES:
  9.     ;1.    WHEN YOU COMPILE THE BASIC PROGRAM YOU MUST USE THE "O" OPTION
  10.     ;        EXAMPLE:    BASCOM/O
  11.     ;2.    REFER TO DDSWITCH.BAS FOR AN EXPLANATION OF "SWITCH" VALUES.
  12.     ;3.    SWITCH MUST BE DEFINED AS AN INTEGER    
  13.  
  14. CODE SEGMENT
  15.     ASSUME    CS:CODE,DS:CODE,ES:CODE,SS:CODE
  16.  
  17. PUBLIC    SOFFSET
  18. EXTENDED_CODE    DB    0    ;0=NO EXTENDED CODE PENDING; 1=EXTENDED CODE PENDING
  19.  
  20. SOFFSET        PROC FAR
  21.     PUSH    BP
  22.     MOV    BP,SP        ;GET STACK POINTER
  23.     MOV    SI,[BP+6]
  24.     LODSW            ;GET SWITCH VALUE
  25.     CMP    AL,1
  26.     JZ    MAKE_INVISIBLE    ;MAKE THE PROGRAM INVISIBLE
  27.     JA    TWO_OR_ABOVE
  28. DO_SWITCH:
  29.     MOV    AX,0E001H
  30. INTERRUPT21:
  31.     INT    21H        ;SWITCH TO THE OTHER TASK
  32. RETURN_TO_BASIC:
  33.     POP    BP        ;RESTORE BP REGISTER
  34.     RET    2        ;RETURN TO MAIN BASIC PROGRAM MODULE
  35. MAKE_INVISIBLE:
  36.     MOV    AH,0E4H
  37.     INT    21H        ;SEE IF IT IS VISIBLE OR INVISIBLE
  38.     CMP    AL,2
  39.     JNZ    DO_SWITCH    ;IT IS VISIBLE SO DO SWITCH
  40.     JMP    RETURN_TO_BASIC    ;ALREADY INVISIBLE
  41. TWO_OR_ABOVE:
  42.     CMP    AL,2        ;DO THEY WANT TO SWITCH OR WHAT ??
  43.     JNZ    DO_SPECIAL_FUNCTION    ;THEY WANT TO DO A SPECIAL FUNCTION
  44.     MOV    AH,0E4H        ;THEY WANT TO MAKE PROGRAM VISIBLE
  45.     INT    21H        ;SEE IF ALREADY VISIBLE
  46.     CMP    AL,1
  47.     JNZ    DO_SWITCH    ;IT IS INVISIBLE - SO DO SWITCH
  48.     JMP    RETURN_TO_BASIC    ;ALREADY VISIBLE
  49. DO_SPECIAL_FUNCTION:
  50.     XCHG    AH,AL        ;PUT FUNCTION NUMBER IN THE AH
  51.     CMP    AH,0E2H        ;ARE THEY SENDING KEYS
  52.     JZ    SENDING_KEY
  53.     CMP    AH,0E3H
  54.     JNZ    INTERRUPT21    ;NOT SENDING KEY - DO INTERRUPT
  55. SENDING_KEY:
  56.     CMP    AL,0
  57.     JZ    SET_EXTENDED_CODE    ;THEY WILL BE SENDING EXTENDED CODE
  58.     CMP    CS:EXTENDED_CODE,0
  59.     JZ    INTERRUPT21        ;NO EXTENDED CODE IN PROGRESS
  60.     MOV    CS:EXTENDED_CODE,0
  61.     MOV    DH,AL
  62.     MOV    AL,0FFH        ;FLAG DOUBLEDOS THAT THIS IS EXTENDED CODE
  63.     XOR    DL,DL
  64.     JMP    INTERRUPT21    ;SEND EXTENDED CODE
  65. SET_EXTENDED_CODE:
  66.     MOV    CS:EXTENDED_CODE,1
  67.     JMP    RETURN_TO_BASIC    ;WAIT FOR CODE CHARACTER CODE
  68. SOFFSET        ENDP
  69.  
  70. CODE    ENDS
  71.     END    
  72.