bsa@ncoast.UUCP (Brandon Allbery) (07/05/85)
Expires: The following assembler program does exactly that, for all those who want to be able to switch ``on demand''. Maybe I'll hack AVAILDEV into it later on. If you lack assembler, I can mail you the binary, or maybe post it; first I have to learn how to use uuencode on this beastie. . . --bsa -------------------------------- cut here ------------------------------------ ; ; (And you thought this nonsense was limited to Pyramid computers!) ; ; UNIVERSE.ASM -- Set the "universe" (MS-DOS or XENIX) of a PC compatible ; ; UNIVERSE by itself prints "XENIX" or "MSDOS" depending on the setting of ; the SWITCHAR as reported by undocumented DOS function call 37H. With an ; argument, the first character of the argument is scanned: M sets MS-DOS, ; X sets Xenix(tm) compatible, and any other prints a help message, along ; with the current setting. (UNIVERSE ? acts as just UNIVERSE.) ; ; XENIX and MS-DOS are trademarks of Microsoft Inc. ; CR EQU 13 LF EQU 10 SPACE EQU 32 EOS EQU '$' XENIX_SW EQU '-' MSDOS_SW EQU '/' ARGC EQU 80H ARGV EQU 81H TELL_CMD EQU '?' XENIX_CMD EQU 'X' MSDOS_CMD EQU 'M' PRINT_STR EQU 09H SET_SWITCH EQU 37H EXIT EQU 4CH ; ; Required nonsense for the 8086/8088. The 68000 is easier! ; STACK_SEG SEGMENT STACK DB 256 DUP(?) STACK_SEG ENDS ; ; The data area. Ditto the above comment. THIS shtuff looks like PDP-11 ; with split I and D spaces! ; DATA_SEG SEGMENT XENIX_MSG DB "You are in the Xenix(tm) universe." DB CR,LF,EOS MSDOS_MSG DB "You are in the MS-DOS(tm) universe." DB CR,LF,EOS HELP_MSG DB "UNIVERSE -- Public Domain MS-DOS 2/3 Uni" DB "(x)verse Modification Utility" DB CR,LF DB "Written 6/30/85 by Brandon Allbery for g" DB "eneral net sharing and use." DB CR,LF DB CR,LF DB "You are free to copy, distribute, etc. t" DB "his program in source or object form." DB CR,LF DB CR,LF DB "UNIVERSE without any arguments prints th" DB "e current universe (XENIX or MS-DOS) of" DB CR,LF DB "the computer. With an argument of X or " DB "M, it sets the specified mode." DB CR,LF DB CR,LF DB "Xenix and MS-DOS are trademarks of Micro" DB "Soft, Inc." DB CR,LF DB CR,LF,EOS XENIX_SET DB "You are now in the Xenix(tm) universe." DB CR,LF,EOS MSDOS_SET DB "You are now in the MS-DOS(tm) universe." DB CR,LF,EOS DATA_SEG ENDS TEXT_SEG SEGMENT ASSUME CS:TEXT_SEG,DS:DATA_SEG,SS:STACK_SEG ; ; The main program ascertains the function, placing it in AL, and calls ; the procedure that does all the work. On return, it prints the help ; message, if applicable. ; MAIN PROC FAR MOV BX,DATA_SEG ; SET UP THE DATA SEGMENT (UGH) MOV DS,BX MOV AL,ES:[ARGC] ; CHECK FOR ARGUMENTS CMP AL,0 ; NONE, THEN REPORT STATUS JZ TELL_FUNC MOV BX,ARGV ; PREPARE TO SEARCH FOR ARGS FIND_ARG: MOV AL,ES:[BX] ; GET NEXT CHAR OF ARGUMENT STRING INC BX ; AND SKIP PAST IT CMP AL,SPACE ; IS IT A SPACE? JZ FIND_ARG ; YES, THEN SKIP IT CMP AL,XENIX_CMD ; XENIX_CMD, THEN SET XENIX PATHS JZ DO_FUNC CMP AL,MSDOS_CMD ; MSDOS_CMD, THEN SET MS-DOS PATHS JZ DO_FUNC MOV DX,OFFSET HELP_MSG ; NONE OF THE ABOVE, PRINT HELP MOV AH,PRINT_STR INT 21H TELL_FUNC: MOV AL,TELL_CMD ; SET DEFAULT COMMAND = TELL_CMD DO_FUNC: CALL SWITCHAR ; DO THE SPECIFIED COMMAND MOV AL,0 ; AND RETURN A NO-ERROR CODE MOV AH,EXIT INT 21H MAIN ENDP ; ; The SWITCHAR function takes a command in AL, converts it to a system ; command, and calls the system. ; SWITCHAR PROC NEAR CMP AL,TELL_CMD ; DO WE REPORT STATUS ONLY? JNZ IS_XENIX MOV AL,0 MOV AH,SET_SWITCH INT 21H CMP DL,MSDOS_SW ; IS IT THE MS-DOS UNIVERSE? JNZ OTHER_SW MOV DX,OFFSET MSDOS_MSG ; PRINT MS-DOS UNIVERSE MSG MOV AH,PRINT_STR INT 21H RET ; AND EXIT TO MAIN PROCEDURE OTHER_SW: MOV DX,OFFSET XENIX_MSG ; PRINT XENIX UNIVERSE MSG MOV AH,PRINT_STR INT 21H RET ; AND EXIT AS ABOVE IS_XENIX: CMP AL,XENIX_CMD ; ARE WE SETTING XENIX MODE? JNZ IS_MSDOS MOV DL,XENIX_SW ; YES, TELL DOS WE ARE XENIX MOV AL,1 MOV AH,SET_SWITCH INT 21H MOV DX,OFFSET XENIX_SET ; AND TELL THE USER MOV AH,PRINT_STR INT 21H RET ; AND RETURN TO THE MAIN PROCEDURE IS_MSDOS: MOV DL,MSDOS_SW ; NO, SET THE MS-DOS UNIVERSE MOV AL,1 MOV AH,SET_SWITCH INT 21H MOV DX,OFFSET MSDOS_SET ; TELL THE USER MOV AH,PRINT_STR INT 21H RET ; AND RETURN AS ABOVE SWITCHAR ENDP TEXT_SEG ENDS END MAIN -- Brandon Allbery, Unix Consultant -- 6504 Chestnut Road, Independence, OH 44131 decvax!cwruecmp!ncoast!bsa; ncoast!bsa@case.csnet; +1 216 524 1416; 74106,1032 ========================> Trekkies have Warped minds. <=======================