home *** CD-ROM | disk | FTP | other *** search
/ Simtel MSDOS - Coast to Coast / simteldosarchivecoasttocoast.iso / sysutil / switchar.asm < prev    next >
Assembly Source File  |  1994-03-05  |  6KB  |  171 lines

  1. ;
  2. ; (And you thought this nonsense was limited to Pyramid computers!)
  3. ;
  4. ; UNIVERSE.ASM -- Set the "universe" (MS-DOS or XENIX) of a PC compatible
  5. ;
  6. ; UNIVERSE by itself prints "XENIX" or "MSDOS" depending on the setting of
  7. ; the SWITCHAR as reported by undocumented DOS function call 37H.  With an
  8. ; argument, the first character of the argument is scanned: M sets MS-DOS,
  9. ; X sets Xenix(tm) compatible, and any other prints a help message, along
  10. ; with the current setting.  (UNIVERSE ? acts as just UNIVERSE.)
  11. ;
  12. ; XENIX and MS-DOS are trademarks of Microsoft Inc.
  13. ;
  14.  
  15. CR              EQU     13
  16. LF              EQU     10
  17. SPACE           EQU     32
  18. EOS             EQU     '$'
  19.  
  20. XENIX_SW        EQU     '-'
  21. MSDOS_SW        EQU     '/'
  22.  
  23. ARGC            EQU     80H
  24. ARGV            EQU     81H
  25.  
  26. TELL_CMD        EQU     '?'
  27. XENIX_CMD       EQU     'X'
  28. MSDOS_CMD       EQU     'M'
  29.  
  30. PRINT_STR       EQU     09H
  31. SET_SWITCH      EQU     37H
  32. EXIT            EQU     4CH
  33.  
  34. ;
  35. ; Required nonsense for the 8086/8088.  The 68000 is easier!
  36. ;
  37.  
  38. STACK_SEG       SEGMENT STACK
  39.                 DB      256 DUP(?)
  40. STACK_SEG       ENDS
  41.  
  42. ;
  43. ; The data area.  Ditto the above comment.  THIS shtuff looks like PDP-11
  44. ; with split I and D spaces!
  45. ;
  46.  
  47. DATA_SEG        SEGMENT
  48.  
  49. XENIX_MSG       DB      "You are in the Xenix(tm) universe."
  50.                 DB      CR,LF,EOS
  51.  
  52. MSDOS_MSG       DB      "You are in the MS-DOS(tm) universe."
  53.                 DB      CR,LF,EOS
  54.  
  55. HELP_MSG        DB      "UNIVERSE -- Public Domain MS-DOS 2/3 Uni"
  56.                 DB      "(x)verse Modification Utility"
  57.                 DB      CR,LF
  58.                 DB      "Written 6/30/85 by Brandon Allbery for g"
  59.                 DB      "eneral net sharing and use."
  60.                 DB      CR,LF
  61.                 DB      CR,LF
  62.                 DB      "You are free to copy, distribute, etc. t"
  63.                 DB      "his program in source or object form."
  64.                 DB      CR,LF
  65.                 DB      CR,LF
  66.                 DB      "UNIVERSE without any arguments prints th"
  67.                 DB      "e current universe (XENIX or MS-DOS) of"
  68.                 DB      CR,LF
  69.                 DB      "the computer.  With an argument of X or "
  70.                 DB      "M, it sets the specified mode."
  71.                 DB      CR,LF
  72.                 DB      CR,LF
  73.                 DB      "Xenix and MS-DOS are trademarks of Micro"
  74.                 DB      "Soft, Inc."
  75.                 DB      CR,LF
  76.                 DB      CR,LF,EOS
  77.  
  78. XENIX_SET       DB      "You are now in the Xenix(tm) universe."
  79.                 DB      CR,LF,EOS
  80.  
  81. MSDOS_SET       DB      "You are now in the MS-DOS(tm) universe."
  82.                 DB      CR,LF,EOS
  83.  
  84. DATA_SEG        ENDS
  85.  
  86. TEXT_SEG        SEGMENT
  87.                 ASSUME  CS:TEXT_SEG,DS:DATA_SEG,SS:STACK_SEG
  88.  
  89. ;
  90. ; The main program ascertains the function, placing it in AL, and calls
  91. ; the procedure that does all the work.  On return, it prints the help
  92. ; message, if applicable.
  93. ;
  94.  
  95. MAIN            PROC    FAR
  96.  
  97.                 MOV     BX,DATA_SEG    ; SET UP THE DATA SEGMENT (UGH)
  98.                 MOV     DS,BX
  99.                 MOV     AL,ES:[ARGC]   ; CHECK FOR ARGUMENTS
  100.                 CMP     AL,0           ; NONE, THEN REPORT STATUS
  101.                 JZ      TELL_FUNC
  102.                 MOV     BX,ARGV        ; PREPARE TO SEARCH FOR ARGS
  103. FIND_ARG:       MOV     AL,ES:[BX]     ; GET NEXT CHAR OF ARGUMENT STRING
  104.                 INC     BX             ; AND SKIP PAST IT
  105.                 CMP     AL,SPACE       ; IS IT A SPACE?
  106.                 JZ      FIND_ARG       ; YES, THEN SKIP IT
  107.                 CMP     AL,XENIX_CMD   ; XENIX_CMD, THEN SET XENIX PATHS
  108.                 JZ      DO_FUNC
  109.                 CMP     AL,MSDOS_CMD   ; MSDOS_CMD, THEN SET MS-DOS PATHS
  110.                 JZ      DO_FUNC
  111.                 MOV     DX,OFFSET HELP_MSG ; NONE OF THE ABOVE, PRINT HELP
  112.                 MOV     AH,PRINT_STR
  113.                 INT     21H
  114. TELL_FUNC:      MOV     AL,TELL_CMD    ; SET DEFAULT COMMAND = TELL_CMD
  115. DO_FUNC:        CALL    SWITCHAR       ; DO THE SPECIFIED COMMAND
  116.                 MOV     AL,0           ; AND RETURN A NO-ERROR CODE
  117.                 MOV     AH,EXIT
  118.                 INT     21H
  119.  
  120. MAIN            ENDP
  121.  
  122. ;
  123. ; The SWITCHAR function takes a command in AL, converts it to a system
  124. ; command, and calls the system.
  125. ;
  126.  
  127. SWITCHAR        PROC    NEAR
  128.  
  129.                 CMP     AL,TELL_CMD    ; DO WE REPORT STATUS ONLY?
  130.                 JNZ     IS_XENIX
  131.                 MOV     AL,0
  132.                 MOV     AH,SET_SWITCH
  133.                 INT     21H
  134.                 CMP     DL,MSDOS_SW    ; IS IT THE MS-DOS UNIVERSE?
  135.                 JNZ     OTHER_SW
  136.                 MOV     DX,OFFSET MSDOS_MSG ; PRINT MS-DOS UNIVERSE MSG
  137.                 MOV     AH,PRINT_STR
  138.                 INT     21H
  139.                 RET                    ; AND EXIT TO MAIN PROCEDURE
  140.  
  141. OTHER_SW:       MOV     DX,OFFSET XENIX_MSG ; PRINT XENIX UNIVERSE MSG
  142.                 MOV     AH,PRINT_STR
  143.                 INT     21H
  144.                 RET                    ; AND EXIT AS ABOVE
  145.  
  146. IS_XENIX:       CMP     AL,XENIX_CMD   ; ARE WE SETTING XENIX MODE?
  147.                 JNZ     IS_MSDOS
  148.                 MOV     DL,XENIX_SW    ; YES, TELL DOS WE ARE XENIX
  149.                 MOV     AL,1
  150.                 MOV     AH,SET_SWITCH
  151.                 INT     21H
  152.                 MOV     DX,OFFSET XENIX_SET ; AND TELL THE USER
  153.                 MOV     AH,PRINT_STR
  154.                 INT     21H
  155.                 RET                    ; AND RETURN TO THE MAIN PROCEDURE
  156.  
  157. IS_MSDOS:       MOV     DL,MSDOS_SW    ; NO, SET THE MS-DOS UNIVERSE
  158.                 MOV     AL,1
  159.                 MOV     AH,SET_SWITCH
  160.                 INT     21H
  161.                 MOV     DX,OFFSET MSDOS_SET ; TELL THE USER
  162.                 MOV     AH,PRINT_STR
  163.                 INT     21H
  164.                 RET                    ; AND RETURN AS ABOVE
  165.  
  166. SWITCHAR        ENDP
  167.  
  168. TEXT_SEG        ENDS
  169.  
  170.                 END     MAIN
  171.