COMMAND VT125; BEGIN EXTERNAL PROCEDURE VT1XX_CHANGE; EXTERNAL STRING PROCEDURE VT1XX_LINE; INTEGER IDX,TOP,BOTTOM,NUM2DO,RATIO,QN,IDX2; INTEGER POWERUP,LOOPBACK,EIA,REPEAT,CHANNEL; STRING FCN,KEYWD,MESS,FIL,CHAR; PARSE NOISE "function"; PARSE KEYWORD(WORDS( ANSI:0, ARROW_MODE:0, AUTOREPEAT:0, BLACK:0, CHARACTER_ATTRIBUTE:0, COLUMNS:0, DOUBLE:0, EEEEEE:0, KEYPAD_MODE:0, LED:0, LOCK:0, MUSIC:0, NO_AUTOREPEAT:0, PRINTER:0, QUACK:0, REGION:0, RESET:0, SCROLL_MODE:0, SELECT_CHARACTERS:0, SIREN:0, TEST:0, VT52:0, WHITE:0)); FCN = $ATOM; SELECT FCN OF BEGIN ["PRINTER"]: BEGIN PARSE KEYWORD (WORDS( OFF:4, ON:5)); IDX = $VALUE; PARSE EOL; MESS = "[Printer "; IF IDX EQL 5 THEN MESS = MESS + "ON" ELSE MESS = MESS + "OFF"; MESS = MESS + " at " + $DATE + " " + $TIME + "]"; IF IDX EQL 4 THEN DISPLAY MESS; CALL VT1XX_CHANGE ("[" + $STRING(IDX) + "i"); IF IDX EQL 5 THEN DISPLAY MESS; EXIT; END; ["BLACK"]: BEGIN PARSE NOISE "background"; PARSE EOL; CALL VT1XX_CHANGE ("[?5l"); EXIT; END; ["TEST"]: BEGIN PARSE NOISE "terminal and graphics processor"; PARSE EOL; CALL VT1XX_CHANGE(""); EXIT; END; ["QUACK"]: BEGIN QN = 1000000; !default to many many quacks RATIO = 30; !one that seems to produce good quack CHAR = " "; !linefeed seems to be a good character LOOP:PARSE ( EOL; SWITCH(WORDS ( CHARACTER::0, QUANTITY::0, RATIO::0 )):BEGIN SELECT $ATOM[1:$LENGTH($ATOM)-1] OF BEGIN ["CHARACTER"]: PARSE ( QUOTEDSTRING(HELP "quoted string of characters to use between bells"):CHAR = $ATOM; NUMBER(HELP "ASCII value of character to use between bells", RADIX 8):CHAR = $CVITC($VALUE);); ["QUANTITY"]: BEGIN PARSE NUMBER(HELP "number of quacks");QN = $VALUE;END; ["RATIO"]: BEGIN PARSE NUMBER(HELP "number of characters between bells"); RATIO = $VALUE;END; END; GOTO LOOP;END;); DOCOMMAND "VT125 SCROLL JUMP";DISPLAY "[VT125 SCROLL JUMP being set]"; IDX2 = 0; WHILE IDX2 LSS QN DO BEGIN DISPLAY BINARY ""; IDX = 0; WHILE IDX LSS RATIO DO BEGIN DISPLAY BINARY CHAR; IDX = IDX + 1; END; IDX2 = IDX2 + 1; END; END; ["SELECT-CHARACTERS"]: BEGIN PARSE NOISE "set"; PARSE KEYWORD (DEFAULT "ASCII", WORDS( ASCII:66, GRAPHICS:48, ROM1:49, ROM2:50, UNITED_KINGDOM:65)); IDX = $VALUE; PARSE EOL; CALL VT1XX_CHANGE ("(" + $CVITC(IDX) + ")" + $CVITC(IDX)); !Make both CTRL/N and CTRL/O sets be the specified one for now! EXIT; END; ["CHARACTER-ATTRIBUTE"]: BEGIN PARSE NOISE "is"; PARSE KEYWORD (DEFAULT "NONE", WORDS( BLINK:5, BOLD:1, NONE:0, REVERSE_VIDEO:7, UNDERSCORE:4)); IDX = $VALUE; !Get correct selective parameter PARSE NOISE "for subsequent typeout"; PARSE EOL; CALL VT1XX_CHANGE ("[" + $STRING(IDX) + "m"); EXIT; END; ["EEEEEE"]: BEGIN PARSE NOISE "eeeeee!"; PARSE EOL; CALL VT1XX_CHANGE ("#8"); EXIT; END; ["MUSIC"]: BEGIN PARSE NOISE "mode"; PARSE EOL; DOCOMMAND "VT125 AUTOREPEAT"; CALL VT1XX_CHANGE (""); DISPLAY "Requires keyclick to be on -- hold a key down to get a note!"; DISPLAY "Use VT125 RESET to turn off music mode."; EXIT; END; ["SIREN"]: BEGIN PARSE EOL; CALL VT1XX_CHANGE (""); DISPLAY "Use VT125 RESET to stop this cacophony!"; EXIT; END; ["LED"]: BEGIN PARSE KEYWORD (WORDS( CYCLE:0, L1_ON:1, L2_ON:2, L3_ON:3, L4_ON:4, OFF:0)); IDX = $VALUE; FCN = $ATOM; PARSE EOL; SELECT FCN OF BEGIN ["CYCLE"]: BEGIN IDX = 0; UNTIL 2+2=5 DO BEGIN DOCOMMAND "VT125 LED OFF"; DOCOMMAND "VT125 LED L" + $STRING(1+IDX-IDX/4*4); IDX = IDX + 1;END; END; [OTHERWISE]:CALL VT1XX_CHANGE("[" + $STRING(IDX) + "q"); END; EXIT; END; ["RESET"]: BEGIN PARSE NOISE "to default settings"; PARSE EOL; CALL VT1XX_CHANGE ("c"); EXIT; END; ["WHITE"]: BEGIN PARSE NOISE "background"; PARSE EOL; CALL VT1XX_CHANGE ("[?5h"); EXIT; END; ["NO-AUTOREPEAT"]: BEGIN PARSE NOISE "when keys held down"; PARSE EOL; CALL VT1XX_CHANGE ("[?8l"); EXIT; END; ["LOCK"]: BEGIN PARSE NOISE "keyboard"; PARSE EOL; CALL VT1XX_CHANGE (""); EXIT; END; ["AUTOREPEAT"]: BEGIN PARSE NOISE "when keys held down"; PARSE EOL; CALL VT1XX_CHANGE ("[?8h"); EXIT; END; ["COLUMNS"]: BEGIN PARSE NOISE "wide"; PARSE KEYWORD (DEFAULT "80", WORDS ( 132:0, 80:0)); KEYWD = $ATOM; PARSE EOL; DOCOMMAND "TERMINAL WIDTH " + KEYWD; SELECT KEYWD OF BEGIN ["132"]:CALL VT1XX_CHANGE ("[?3h"); ["80"]:CALL VT1XX_CHANGE ("[?3l"); END; EXIT; END; ["DOUBLE"]: BEGIN PARSE KEYWORD (WORDS ( HEIGHT:0, WIDTH:1)); KEYWD = $ATOM;SELECT KEYWD OF BEGIN ["HEIGHT"]: BEGIN PARSE NOISE "file"; PARSE FILE( HELP "file to be displayed in big letters", INPUT); FIL = $FILES; PARSE EOL; IDX = 24; CHANNEL = $OPEN(FIL,$INPUT); IF CHANNEL = 0 THEN ABORT $LASTERROR; WHILE $EOF(CHANNEL) EQL 0 DO BEGIN MESS = $READ(CHANNEL); IF IDX = 24 THEN IDX = 0; DISPLAY BINARY VT1XX_LINE(IDX+1) + "#3"; DISPLAY NORETURN $CR+MESS; DISPLAY BINARY VT1XX_LINE(IDX+2) + "#4"; DISPLAY NORETURN $CR+MESS; IDX = IDX + 2; END; END; ["WIDTH"]: BEGIN PARSE EOL; NUM2DO = 24; WHILE NUM2DO > 0 DO BEGIN CALL VT1XX_CHANGE ("[" + $STRING (NUM2DO) + ";0H#6"); NUM2DO = NUM2DO - 1; END; CALL VT1XX_CHANGE (""); END; END; EXIT; END; ["KEYPAD-MODE"]: BEGIN PARSE NOISE "is"; PARSE KEYWORD (DEFAULT "NUMERIC", WORDS ( APPLICATION:0, NUMERIC:1)); KEYWD = $ATOM; PARSE EOL; SELECT KEYWD OF BEGIN ["APPLICATION"]:CALL VT1XX_CHANGE ("="); ["NUMERIC"]:CALL VT1XX_CHANGE (">"); END; EXIT; END; ["ARROW-MODE"]: BEGIN PARSE NOISE "is"; PARSE KEYWORD (DEFAULT "CURSOR", WORDS ( APPLICATION:0, CURSOR:1)); KEYWD = $ATOM; PARSE EOL; SELECT KEYWD OF BEGIN ["APPLICATION"]:CALL VT1XX_CHANGE ("[?1h"); ["CURSOR"]:CALL VT1XX_CHANGE ("[?1l"); END; EXIT; END; ["SCROLL-MODE"]: BEGIN PARSE NOISE "style"; PARSE KEYWORD (DEFAULT "SMOOTH", WORDS ( JUMP:0, SMOOTH:1)); KEYWD = $ATOM; PARSE EOL; SELECT KEYWD OF BEGIN ["JUMP"]:CALL VT1XX_CHANGE ("[?4l"); ["SMOOTH"]:CALL VT1XX_CHANGE ("[?4h"); END; EXIT; END; ["REGION"]: BEGIN GUIDE "from line"; PARSE NUMBER (HELP "Line number of top of region",DEFAULT "1"); TOP = $VALUE; GUIDE "through line"; PARSE NUMBER (HELP "Line number of bottom of region",DEFAULT "24"); BOTTOM = $VALUE; PARSE EOL; DOCOMMAND "TER LEN " + $STRING (BOTTOM-TOP+1); IDX = TOP; WHILE IDX LEQ BOTTOM DO BEGIN !Clear new region CALL VT1XX_CHANGE ("[" + $STRING(IDX) + ";0H"); IDX = IDX + 1; END; CALL VT1XX_CHANGE ("[" + $STRING(TOP) + ";" + $STRING(BOTTOM) + "r"); CALL VT1XX_CHANGE ("[" + $STRING(TOP) + ";0H"); EXIT; END; ["ANSI"]: BEGIN GUIDE "mode"; PARSE EOL; IF $TTYPE = 15 THEN BEGIN DISPLAY BINARY "<"; DOCOMMAND "TERMINAL VT100"; DOCOMMAND "TERMINAL NO PAUSE END-OF-PAGE"; END; EXIT; END; ["VT52"]: BEGIN GUIDE "mode"; PARSE EOL; IF $TTYPE = 16 THEN BEGIN DISPLAY BINARY "[?2l"; DOCOMMAND "TERMINAL VT52"; DOCOMMAND "TERMINAL NO PAUSE END-OF-PAGE"; END; EXIT; END; END; END; PROCEDURE VT1XX_CHANGE (STRING STR); BEGIN EXTERNAL STRING PROCEDURE VT1XX_ANSIIZE; DISPLAY BINARY VT1XX_ANSIIZE(STR); END; !VT1XX_LINE(N) returns the string necessary to put the VT125 cursor at line N. STRING PROCEDURE VT1XX_LINE(INTEGER N); BEGIN STRING X; EXTERNAL STRING PROCEDURE VT1XX_ANSIIZE; X = VT1XX_ANSIIZE("[" + $STRING(N) + ";0H"); RETURN X; END; !VT1XX_ANSIIZE puts appropriate escape codes on strings so that they work !regardless of whether VT125 is in ANSI or VT52 mode. STRING PROCEDURE VT1XX_ANSIIZE(STRING STR); BEGIN STRING RESULT; IF $TTYPE = 15 THEN RESULT = "<"; RESULT = RESULT + STR; IF $TTYPE = 15 THEN RESULT = RESULT + "[?2l"; RETURN RESULT; END; !Make V work as VD like it did before SYNONYM V VDIRECTORY COMMAND BLANK; BEGIN EXTERNAL PROCEDURE VT1XX_CHANGE; GUIDE "Screen"; PARSE EOL; CALL VT1XX_CHANGE ("P1pS(E)\") END; COMMAND SHOW; BEGIN EXTERNAL PROCEDURE VT1XX_CHANGE, ONESLIDE; INTEGER CHAN, PRINT; STRING FILE; PARSE NOISE "slide or tray"; PRINT = 0 ; !default not to print slides SL: PARSE ( KEYWORD (WORDS(TRAY:0)):BEGIN PARSE FILE (DEFAULT_EXT "SHO", HELP "Tray file"); FILE = $FILES; PARSE EOL; CHAN = $OPEN(FILE,$INPUT); IF CHAN = 0 THEN ABORT $LASTERROR +": " + FILE; CALL VT1XX_CHANGE (""); DISPLAY BINARY "P1ps(e)"; ! FILE WILL NOW BE THE PIC FILES LOOP: FILE = $READ(CHAN); IF $EOF(CHAN) <> 0 THEN GOTO DONE; IF $SEARCH("+*;!{}",FILE[1:1]) NEQ 0 THEN GOTO LOOP; FILE = FILE + ".PIC"; DISPLAY BINARY "s(e)"; CALL ONESLIDE(FILE, PRINT); GOTO LOOP; DONE: DISPLAY BINARY "\"; CALL $CLOSE(CHAN); END; SWITCH (WORDS(PRINT:0)):BEGIN PRINT = 1 ; GOTO SL ; END ; FILE (DEFAULT_EXT "PIC", HELP "Picture file"):BEGIN FILE = $FILES; PARSE EOL; CALL VT1XX_CHANGE (""); DISPLAY BINARY "P1ps(e)"; CALL ONESLIDE (FILE, PRINT); DISPLAY BINARY "\"; END; ); !END OF PARSE END; !OF COMMAND SHOW PROCEDURE ONESLIDE(STRING FILE; INTEGER PRINT); BEGIN INTEGER CHAN; STRING LINE; CHAN = $OPEN(FILE,$INPUT); IF CHAN = 0 THEN BEGIN DISPLAY BINARY "\"; ABORT $LASTERROR +": " + FILE; END; LOOP: LINE = $READ(CHAN); IF $EOF(CHAN) <> 0 THEN GOTO DONE; DISPLAY BINARY LINE + $CRLF; GOTO LOOP; DONE: IF PRINT = 1 THEN DISPLAY BINARY "s(h)" + $CRLF ELSE DISPLAY BINARY "s(t255)" + $CRLF ; CALL $CLOSE(CHAN); END;