Category : Files from Magazines
Archive   : VOL7N10.ZIP
Filename : TOGGLE.ASM

 
Output of file : TOGGLE.ASM contained in archive : VOL7N10.ZIP
;=============================================================================
; TOGGLE.COM for the IBM Personal Computer - 1988 by Jeff Prosise
;
; TOGGLE allows the CapsLock, NumLock, and ScrollLock states to be
; toggled on and off in batch mode. Syntax is:
;
; TOGGLE [+c|-c] [+n|-n] [+s|-s]
;
; where the 'c' parameter controls the CapsLock state, 'n' controls
; NumLock, and 's' controls ScrollLock.
;=============================================================================

BIOS_DATA SEGMENT AT 40H
ORG 17H
SHIFT_STATE DB ? ;Bit 4 = ScrollLock
;Bit 5 = NumLock
;Bit 6 = CapsLock
BIOS_DATA ENDS

;=============================================================================
; Code Segment (code and data)
;=============================================================================
CODE SEGMENT PARA PUBLIC 'CODE'
ASSUME CS:CODE, DS:CODE
ORG 100H
BEGIN: JMP MAIN

CR EQU 13
LF EQU 10

PROGRAM DB "TOGGLE 1.0 (c) 1988 Ziff Communications Co.",CR,LF
DB "PC Magazine ",254," Jeff Prosise",CR,LF,"$",1AH

ERRMSG DB CR,LF,"Usage: TOGGLE [+c|-c] [+n|-n] [+s|-s]"
DB CR,LF,"$"

TEXT1 DB CR,LF
DB " CapsLock : $"
TEXT2 DB " NumLock : $"
TEXT3 DB " ScrollLock : $"
ONTEXT DB "On",CR,LF,"$"
OFFTEXT DB "Off",CR,LF,"$"

;-----------------------------------------------------------------------------
; MAIN is the primary portion of the code.
;-----------------------------------------------------------------------------
MAIN PROC NEAR

MOV AX,BIOS_DATA ;point ES to BIOS Data Area
MOV ES,AX
ASSUME ES:BIOS_DATA
CLD ;clear DF
MOV SI,81H ;point SI to command line
;
;Search the command line for entries, and loop until all are processed.
;
MAINLOOP: LODSB ;search for next non-space
CMP AL,20H
JE MAINLOOP

CMP AL,0DH ;branch if end-of-line reached
JE END_PARSE
CMP AL,"+" ;branch if plus operator is
JE PROCESS ; encountered
CMP AL,"-" ;branch if minus operator is
JE PROCESS ; encountered
;
;An unrecognized entry was found. Print correct syntax and exit.
;
ERROR_EXIT: MOV AH,9 ;display correct syntax
MOV DX,OFFSET ERRMSG
INT 21H
MOV AX,4C01H ;exit with ERRORLEVEL = 1
INT 21H
;
;Check current parameter against list of valid ones.
;
PROCESS: LODSB ;get parameter byte
AND AL,0DFH ;capitalize it
MOV AH,10H ;branch if parameter is an "S"
CMP AL,"S"
JE TOGGLE_STATE_BIT
MOV AH,20H ;branch on "N"
CMP AL,"N"
JE TOGGLE_STATE_BIT
MOV AH,40H ;branch on "C"
CMP AL,"C"
JNE ERROR_EXIT
;
;Turn the indicated state bit on or off.
;
TOGGLE_STATE_BIT:
CMP BYTE PTR [SI-2],"+" ;branch if operator was a
JNE CLEAR_BIT ; minus symbol
OR SHIFT_STATE,AH ;turn indicated state on
JMP MAINLOOP ;reenter parsing loop

CLEAR_BIT: NOT AH ;complement bit indicator
AND SHIFT_STATE,AH ;turn indicated state off
JMP MAINLOOP ;reenter parsing loop
;
;Display current status of all three lock states and exit.

;
END_PARSE: MOV AH,9 ;display copyright notice
MOV DX,OFFSET PROGRAM
INT 21H

MOV AH,9 ;display CapsLock state
MOV DX,OFFSET TEXT1
INT 21H
MOV AH,40H
CALL PRINT_STATE

MOV AH,9 ;display NumLock state
MOV DX,OFFSET TEXT2
INT 21H
MOV AH,20H
CALL PRINT_STATE

MOV AH,9 ;display ScrollLock state
MOV DX,OFFSET TEXT3
INT 21H
MOV AH,10H
CALL PRINT_STATE

MOV AX,4C00H ;exit with ERRORLEVEL = 0
INT 21H
MAIN ENDP

;-----------------------------------------------------------------------------
; PRINT_STATE is called by MAIN to display "On" or "Off" to a 1 or 0 value,
; respectively, of the bit in the BIOS shift state byte indicated in AH.
;-----------------------------------------------------------------------------
PRINT_STATE PROC NEAR
MOV DX,OFFSET OFFTEXT ;preload "Off" text address
TEST SHIFT_STATE,AH ;test actual state
JZ IS_OFF ;branch if assumption valid
MOV DX,OFFSET ONTEXT ;load "On" text address
IS_OFF: MOV AH,9 ;display "On" or "Off"
INT 21H
RET
PRINT_STATE ENDP

CODE ENDS
END BEGIN


  3 Responses to “Category : Files from Magazines
Archive   : VOL7N10.ZIP
Filename : TOGGLE.ASM

  1. Very nice! Thank you for this wonderful archive. I wonder why I found it only now. Long live the BBS file archives!

  2. This is so awesome! 😀 I’d be cool if you could download an entire archive of this at once, though.

  3. But one thing that puzzles me is the “mtswslnkmcjklsdlsbdmMICROSOFT” string. There is an article about it here. It is definitely worth a read: http://www.os2museum.com/wp/mtswslnk/