echo ; /* Note that this declares an int available externally lc:lc -cwusf -v -y pmode.c lc:blink lib:c.o pmode.o TO pmode LIB lib:amiga.lib,lib:lc.lib SD SC ND VERBOSE quit */ /* * Created on 88/07/27 by Dario de Judicibus * via Canton 101, Rome I 00144, ITALY * * Module: pmode (Printer MODE) * * Purpose: select different printer modes * * Syntax: pmode { [op]flag } * * ParmList: flag one of the following characters: * l : Near Letter Quality * d : Double Strike * s : Shadow * e : Enlarged * c : Condensed * p : Proportional * where [op] is * + : to set style on * - : to set style off * x : to reset styles * * Syntax Guideline (BNF): * * arglist ::= "arg" | "arglist | arg" * {arglist} argument is required * [arglist] argument is optional * arg | arg OR indicator: choose one * arg ... repeat argument * * ========================================================================= * @Mod | on | by | reason * -----+--------+-----+---------------------------------------------------- * @001 | 880727 | DdJ | Version 1 Release 0 Modification 0 * */ #include "exec/types.h" #include "libraries/dos.h" #include "libraries/dosextens.h" #include "proto/exec.h" #include "proto/dos.h" #include "stdio.h" #include "ctype.h" #include "string.h" #define A_BANNER "\x9B4;33mPrint Mode\x9B0;33m Version 1\x9B0m by Dario de Judicibus - Copyright © 1988\n" #define H0_BANNER "\x9B33mSyntax:\x9B0m pmode { [op]flag }\n" #define H1_BANNER "Operators are:\n \x9B33m+\x9B0m to switch on style\n \x9B33m-\x9B0m to switch off style\n \x9B33mx\x9B0m to reset all styles\n" #define H2_BANNER "Flags are:\n \x9B33ml\x9B0metter quality \x9B33md\x9B0mouble strike \x9B33ms\x9B0mhadow\n \x9B33me\x9B0mnlarged \x9B33mc\x9B0mondensed \x9B33mp\x9B0mroportional\n" #define B_T_N(c) ( (c == ' ') || (c == '\t') || (c == '\n') ) #define NLQ_ON "\x1B[2\x22z" #define NLQ_OFF "\x1B[1\x22z" #define DBS_ON "\x1B[4\x22z" #define DBS_OFF "\x1B[3\x22z" #define SHD_ON "\x1B[6\x22z" #define SHD_OFF "\x1B[5\x22z" #define ENL_ON "\x1B[6w" #define ENL_OFF "\x1B[5w" #define CMP_ON "\x1B[4w" #define CMP_OFF "\x1B[3w" #define PRO_ON "\x1B[2p" #define PRO_OFF "\x1B[1p" #define RESET_ALL "\x1B[1\x22z\x1B[3\x22z\x1B[5\x22z\x1B[0w\x1B[1p" struct FileHandle *prt; extern VOID PrintIt(int, char *); VOID PrintIt(out,msg) int out; char *msg; { Write(out,msg,strlen(msg)); } VOID _main(cmd) char *cmd; { char style; int toggle; echo = Output(); if (!(cmd)) Exit(RETURN_WARN); /* Must be called from CLI */ while (*cmd != ' ') cmd++; /* Skip over command name */ while (B_T_N(*cmd)) cmd++; /* Skip over leading blanks */ if (*cmd == '\0') { PrintIt(echo,A_BANNER); Exit(RETURN_OK); } if (*cmd == '+') { toggle = TRUE; ++cmd; } else if (*cmd == '-') { toggle = FALSE; ++cmd; } else if (*cmd == 'x') ; else { PrintIt(echo,H0_BANNER); PrintIt(echo,H1_BANNER); PrintIt(echo,H2_BANNER); Exit(RETURN_OK); } style = *cmd; if((BOOL)(prt = Open("PRT:",MODE_NEWFILE))) { switch(style) { case 'l': PrintIt(prt,(toggle? NLQ_ON : NLQ_OFF)); break; case 'd': PrintIt(prt,(toggle? DBS_ON : DBS_OFF)); break; case 's': PrintIt(prt,(toggle? SHD_ON : SHD_OFF)); break; case 'e': PrintIt(prt,(toggle? ENL_ON : ENL_OFF)); break; case 'c': PrintIt(prt,(toggle? CMP_ON : CMP_OFF)); break; case 'p': PrintIt(prt,(toggle? PRO_ON : PRO_OFF)); break; case 'x': PrintIt(prt,RESET_ALL); break; default : PrintIt(echo,H0_BANNER); PrintIt(echo,H1_BANNER); PrintIt(echo,H2_BANNER); Close(prt); Exit(RETURN_WARN); } Close(prt); } }