|
|
1.1 ! root 1: /* $Header: util.c,v 10.4 86/11/30 16:45:52 jg Rel $ */ ! 2: /* util.c Various utilities ! 3: * ! 4: * ErrorString Interprets an error string ! 5: * SoundBell Generate audible bell ! 6: * SetKeyClick Control key click ! 7: * SetAutoRepeat Control auto repeat ! 8: * SetLockLED Control Lock LED ! 9: * QueryShape Determine shapes ! 10: * SetVideo Set video blanking ! 11: * ResolveColors does nothing ! 12: * StoreColors does nothing ! 13: * ! 14: */ ! 15: ! 16: /**************************************************************************** ! 17: * * ! 18: * Copyright (c) 1983, 1984 by * ! 19: * DIGITAL EQUIPMENT CORPORATION, Maynard, Massachusetts. * ! 20: * All rights reserved. * ! 21: * * ! 22: * This software is furnished on an as-is basis and may be used and copied * ! 23: * only with inclusion of the above copyright notice. This software or any * ! 24: * other copies thereof may be provided or otherwise made available to * ! 25: * others only for non-commercial purposes. No title to or ownership of * ! 26: * the software is hereby transferred. * ! 27: * * ! 28: * The information in this software is subject to change without notice * ! 29: * and should not be construed as a commitment by DIGITAL EQUIPMENT * ! 30: * CORPORATION. * ! 31: * * ! 32: * DIGITAL assumes no responsibility for the use or reliability of its * ! 33: * software on equipment which is not supplied by DIGITAL. * ! 34: * * ! 35: * * ! 36: ****************************************************************************/ ! 37: ! 38: #include "vs100.h" ! 39: #include "reason.h" ! 40: ! 41: extern int sys_nerr; ! 42: extern char *sys_errlist[]; ! 43: ! 44: char *AllocateSpace(); ! 45: ! 46: struct _ErrEntry { ! 47: int code; ! 48: char *reason; ! 49: } errorList[NUM_ERR_CODES] = { ! 50: {IR_ID , IR_ID_MSG }, ! 51: {IR_CD , IR_CD_MSG }, ! 52: {IR_DCI , IR_DCI_MSG }, ! 53: {IR_DE , IR_DE_MSG }, ! 54: {IR_CM , IR_CM_MSG }, ! 55: {IR_DPM , IR_DPM_MSG }, ! 56: {IR_MM , IR_MM_MSG }, ! 57: {IR_PD , IR_PD_MSG }, ! 58: {IR_AB_ACK , IR_AB_ACK_MSG }, ! 59: {IR_STAT_ACK , IR_STAT_ACK_MSG }, ! 60: {IR_SAVE_ACK , IR_SAVE_ACK_MSG }, ! 61: {ERR_NYI , ERR_NYI_MSG }, ! 62: {ERR_IFC , ERR_IFC_MSG}, ! 63: {ERR_ICC , ERR_ICC_MSG}, ! 64: {ERR_BE_NXM_68K , ERR_BE_NXM_68K_MSG}, ! 65: {ERR_BE_RO , ERR_BE_RO_MSG}, ! 66: {ERR_BE_LD , ERR_BE_LD_MSG}, ! 67: {ERR_BE_S , ERR_BE_S_MSG}, ! 68: {ERR_AE , ERR_AE_MSG}, ! 69: {ERR_ZD , ERR_ZD_MSG}, ! 70: {ERR_II , ERR_II_MSG}, ! 71: {ERR_NXM_BBA , ERR_NXM_BBA_MSG}, ! 72: {ERR_BNI , ERR_BNI_MSG}, ! 73: {ERR_KCQO , ERR_KCQO_MSG}, ! 74: {ERR_DPCQO , ERR_DPCQO_MSG}, ! 75: {ERR_MEQO , ERR_MEQO_MSG}, ! 76: {ERR_DPEQO , ERR_DPEQO_MSG}, ! 77: {ERR_AB_BBA , ERR_AB_BBA_MSG}, ! 78: {ERR_KEQO , ERR_KEQO_MSG}, ! 79: {ERR_KOR , ERR_KOR_MSG}, ! 80: {ERR_DPOR , ERR_DPOR_MSG}, ! 81: {ERR_KFE , ERR_KFE_MSG}, ! 82: {ERR_DPFE , ERR_DPFE_MSG}, ! 83: ! 84: {ERR_ISRCM , ERR_ISRCM_MSG}, ! 85: {ERR_ISRCBW , ERR_ISRCBW_MSG}, ! 86: {ERR_ISRCBH , ERR_ISRCBH_MSG}, ! 87: {ERR_ISRCC , ERR_ISRCC_MSG}, ! 88: {ERR_ISRCBD , ERR_ISRCBD_MSG}, ! 89: {ERR_IMSKM , ERR_IMSKM_MSG}, ! 90: {ERR_IMSKBW , ERR_IMSKBW_MSG}, ! 91: {ERR_IMSKBH , ERR_IMSKBH_MSG}, ! 92: {ERR_IMSKBD , ERR_IMSKBD_MSG}, ! 93: {ERR_IDSTM , ERR_IDSTM_MSG}, ! 94: {ERR_IDSTBW , ERR_IDSTBW_MSG}, ! 95: {ERR_IDSTBH , ERR_IDSTBH_MSG}, ! 96: {ERR_IDSTBD , ERR_IDSTBD_MSG}, ! 97: {ERR_IMAPM , ERR_IMAPM_MSG}, ! 98: {ERR_ICLPM , ERR_ICLPM_MSG}, ! 99: {ERR_ICLPC , ERR_ICLPC_MSG}, ! 100: ! 101: {ERR_SMC_ITC , ERR_SMC_ITC_MSG}, ! 102: {ERR_SCL_CD , ERR_SCL_CD_MSG}, ! 103: {ERR_AC_ICD , ERR_AC_ICD_MSG}, ! 104: ! 105: {ERR_MO_IBC , ERR_MO_IBC_MSG}, ! 106: {ERR_MO_IOT , ERR_MO_IOT_MSG}, ! 107: {ERR_MO_IDT , ERR_MO_IDT_MSG}, ! 108: ! 109: {ERR_IPC , ERR_IPC_MSG}, ! 110: ! 111: {ERR_DC_IPL , ERR_DC_IPL_MSG}, ! 112: {ERR_DC_IPM , ERR_DC_IPM_MSG}, ! 113: {ERR_DC_ICF , ERR_DC_ICF_MSG}, ! 114: {ERR_DC_IPP , ERR_DC_IPP_MSG}, ! 115: {ERR_DC_IPSM , ERR_DC_IPSM_MSG}, ! 116: {ERR_DC_IPMM , ERR_DC_IPMM_MSG}, ! 117: {ERR_DC_IPC , ERR_DC_IPC_MSG}, ! 118: {ERR_DC_ISSRCBW , ERR_DC_ISSRCBW_MSG}, ! 119: {ERR_DC_ISSRCBH , ERR_DC_ISSRCBH_MSG}, ! 120: {ERR_DC_ISSRCBD , ERR_DC_ISSRCBD_MSG}, ! 121: {ERR_DC_ISSRCC , ERR_DC_ISSRCC_MSG}, ! 122: {ERR_DC_IDPM , ERR_DC_IDPM_MSG}, ! 123: {ERR_DC_DXO , ERR_DC_DXO_MSG}, ! 124: {ERR_DC_DYO , ERR_DC_DYO_MSG}, ! 125: {ERR_DC_CRSO , ERR_DC_CRSO_MSG}, ! 126: ! 127: {ERR_PT_ICSL , ERR_PT_ICSL_MSG}, ! 128: {ERR_PT_ICSO , ERR_PT_ICSO_MSG}, ! 129: {ERR_PT_ICSP , ERR_PT_ICSP_MSG}, ! 130: {ERR_PT_ITSL , ERR_PT_ITSL_MSG}, ! 131: {ERR_PT_ICI , ERR_PT_ICI_MSG}, ! 132: {ERR_PT_TSE , ERR_PT_TSE_MSG}, ! 133: {ERR_PT_NFP , ERR_PT_NFP_MSG}, ! 134: {ERR_PT_ISRCFW , ERR_PT_ISRCFW_MSG}, ! 135: {ERR_PT_ISRCFH , ERR_PT_ISRCFH_MSG}, ! 136: {ERR_PT_ISRCFD , ERR_PT_ISRCFD_MSG}, ! 137: {ERR_PT_IMSKFW , ERR_PT_IMSKFW_MSG}, ! 138: {ERR_PT_IMSKFH , ERR_PT_IMSKFH_MSG}, ! 139: {ERR_PT_IMSKFD , ERR_PT_IMSKFD_MSG}, ! 140: {ERR_PT_CSMF , ERR_PT_CSMF_MSG}, ! 141: {ERR_PT_ILB , ERR_PT_ILB_MSG}, ! 142: {ERR_PT_ILE , ERR_PT_ILE_MSG}, ! 143: {ERR_FA_ISRCB , ERR_FA_ISRCB_MSG}, ! 144: {ERR_FA_SO , ERR_FA_SO_MSG}, ! 145: {ERR_FA_IBMM , ERR_FA_IBMM_MSG}, ! 146: ! 147: {ERR_FP_ISRCB , ERR_FP_ISRCB_MSG}, ! 148: {ERR_FP_ICF , ERR_FP_ICF_MSG}, ! 149: {ERR_FP_DXO , ERR_FP_DXO_MSG}, ! 150: {ERR_FP_DYO , ERR_FP_DYO_MSG}, ! 151: ! 152: {ERR_CPU , ERR_CPU_MSG}, ! 153: {ERR_RHB , ERR_RHB_MSG}, ! 154: {ERR_PR , ERR_PR_MSG}, ! 155: {ERR_CRTC , ERR_CRTC_MSG}, ! 156: {ERR_DPE , ERR_DPE_MSG}, ! 157: {ERR_KE , ERR_KE_MSG}, ! 158: {ERR_FOE , ERR_FOE_MSG}, ! 159: {ERR_F0 , ERR_F0_MSG}, ! 160: {ERR_BSR , ERR_BSR_MSG}, ! 161: {ERR_BCC , ERR_BCC_MSG}, ! 162: {ERR_DPTO , ERR_DPTO_MSG}, ! 163: {ERR_FOO , ERR_FOO_MSG}, ! 164: {ERR_KTO , ERR_KTO_MSG}, ! 165: {ERR_KST , ERR_KST_MSG}, ! 166: {ERR_VR , ERR_VR_MSG}, ! 167: {ERR_F1 , ERR_F1_MSG}, ! 168: {ERR_F2 , ERR_F2_MSG}, ! 169: {ERR_F3 , ERR_F3_MSG}, ! 170: {ERR_DPP , ERR_DPP_MSG}, ! 171: {ERR_KP , ERR_KP_MSG}, ! 172: {ERR_FOED , ERR_FOED_MSG}, ! 173: {ERR_FOOD , ERR_FOOD_MSG}, ! 174: {ERR_BCTO , ERR_BCTO_MSG}, ! 175: {ERR_RLB , ERR_RLB_MSG}, ! 176: {ERR_KD , ERR_KD_MSG}, ! 177: {ERR_BVC , ERR_BVC_MSG}, ! 178: ! 179: {ERR_ISRCHW , ERR_ISRCHW_MSG}, ! 180: {ERR_ISRCHH , ERR_ISRCHH_MSG}, ! 181: {ERR_ISRCHD , ERR_ISRCHD_MSG}, ! 182: {ERR_DC_ISSRCHW , ERR_DC_ISSRCHW_MSG}, ! 183: {ERR_DC_ISSRCHH , ERR_DC_ISSRCHH_MSG}, ! 184: {ERR_DC_ISSRCHD , ERR_DC_ISSRCHD_MSG}, ! 185: ! 186: {ERR_LC_ICTX , ERR_LC_ICTX_MSG}, ! 187: {ERR_LC_ICTY , ERR_LC_ICTY_MSG}, ! 188: {ERR_LC_ICCX , ERR_LC_ICCX_MSG}, ! 189: {ERR_LC_ICCY , ERR_LC_ICCY_MSG}, ! 190: {ERR_LC_ICW , ERR_LC_ICW_MSG}, ! 191: {ERR_LC_ICH , ERR_LC_ICH_MSG}, ! 192: {ERR_PT_DXO , ERR_PT_DXO_MSG}, ! 193: {ERR_PT_CRSO , ERR_PT_CRSO_MSG}, ! 194: }; ! 195: ! 196: /* Interpret a string corresponding to an error code. This doesn't ! 197: * work very well since the driver can't return enough bits for the ! 198: * code, but we do our best */ ! 199: ! 200: char *ErrorString (error) ! 201: int error; ! 202: { ! 203: register int i; ! 204: ! 205: for (i = 0; i < NUM_ERR_CODES; i++) { ! 206: if (errorList[i].code == error) ! 207: return (errorList[i].reason); ! 208: } ! 209: if (error > 0 && error < sys_nerr) ! 210: return (sys_errlist[error]); ! 211: return ("Unknown error"); ! 212: } ! 213: ! 214: SoundBell (volume) ! 215: int volume; ! 216: { ! 217: char *buf; ! 218: ! 219: if ((buf = (char *) AllocateSpace(4)) == NULL) ! 220: return; ! 221: buf[0] = 3; ! 222: buf[1] = 0x23; ! 223: buf[2] = 0x87 - volume; ! 224: buf[3] = 0xa7; ! 225: SendToPeripheral(buf, 4, VSE_DKB); ! 226: } ! 227: ! 228: SetKeyClick (volume) ! 229: int volume; ! 230: { ! 231: char *buf; ! 232: ! 233: if ((buf = (char *) AllocateSpace(3)) == NULL) ! 234: return; ! 235: if (volume) { ! 236: buf[0] = 2; ! 237: buf[1] = 0x1b; ! 238: buf[2] = 0x88 - volume; ! 239: } else { ! 240: buf[0] = 1; ! 241: buf[1] = 0x99; ! 242: buf[2] = 0x99; ! 243: } ! 244: SendToPeripheral(buf, 3, VSE_DKB); ! 245: } ! 246: ! 247: QueryShape (shape, width, height) ! 248: int shape; ! 249: short *width, *height; ! 250: { ! 251: switch (shape) { ! 252: case CursorShape: ! 253: if (*width > 64) ! 254: *width = 64; ! 255: if (*height > 64) ! 256: *height = 64; ! 257: break; ! 258: case TileShape: ! 259: *width = *height = 16; ! 260: break; ! 261: } ! 262: } ! 263: ! 264: SetAutoRepeat (onoff) ! 265: int onoff; ! 266: { ! 267: char *buf; ! 268: ! 269: if ((buf = (char *) AllocateSpace(2)) == NULL) ! 270: return; ! 271: buf[0] = 1; ! 272: buf[1] = onoff ? 0xe3 : 0xe1; ! 273: SendToPeripheral(buf, 2, VSE_DKB); ! 274: } ! 275: ! 276: /*ARGSUSED*/ ! 277: SetLockLED (onoff) ! 278: int onoff; ! 279: { ! 280: } ! 281: ! 282: SetVideo (onoff) ! 283: int onoff; ! 284: { ! 285: return (onoff - 1); ! 286: } ! 287: ! 288: /*ARGSUSED*/ ! 289: ResolveColor (red, green, blue) ! 290: unsigned short *red, *green, *blue; ! 291: { ! 292: } ! 293: ! 294: /*ARGSUSED*/ ! 295: StoreColors (count, entries) ! 296: int count; ! 297: ColorDef *entries; ! 298: ! 299: { ! 300: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.