void ReleaseAliasList(aliasL* head) { if (head) { aliasL *a, *b; a = head->child; if (a == head) { ReleaseAlias(head); } else { do { b = a->child; ReleaseAlias(a); a = b; } while (a != head); ReleaseAlias(head); } } }
/* * __RegisterClass - cover for register class */ BOOL FAR PASCAL __RegisterClass(LPWNDCLASS wc) { WNDCLASS nwc; BOOL rc; nwc = *wc; GetAlias( &nwc.lpszMenuName ); GetAlias( &nwc.lpszClassName ); rc = RegisterClass( &nwc ); ReleaseAlias( wc->lpszMenuName, nwc.lpszMenuName ); ReleaseAlias( wc->lpszClassName, nwc.lpszClassName ); return( rc ); } /* __RegisterClass */
void AddAlias(aliasL** aliasHeadPtr, char* cmdline) { aliasL *aliasNode = (aliasL*)malloc(sizeof(aliasL)); char* name = NULL; char* cmd = strdup(cmdline); size_t len = 0; name = strsep(&cmd, "="); len = strlen(cmd); if (name && cmd) { if (cmd[0] == '\'') { cmd++; cmd[len-2] = 0; } aliasNode = (aliasL*)malloc(sizeof(aliasL)); aliasNode->name = name; aliasNode->cmd = strdup(cmd); if (!(*aliasHeadPtr)) { aliasNode->child = aliasNode; aliasNode->parent = aliasNode; *aliasHeadPtr = aliasNode; } else { aliasL* node = *aliasHeadPtr; do { if (strcmp(node->name, aliasNode->name) == 0) { free(node->cmd); node->cmd = strdup(cmdline); ReleaseAlias(aliasNode); break; } else if (strcmp(node->name, aliasNode->name) > 0) { aliasNode->child = node; aliasNode->parent = node->parent;; node->parent->child = aliasNode; node->parent = aliasNode; if (node == *aliasHeadPtr) { *aliasHeadPtr = (*aliasHeadPtr)->parent; } break; } else { node = node->child; } } while (node != *aliasHeadPtr); if (node == *aliasHeadPtr) { aliasNode->child = node; aliasNode->parent = node->parent;; node->parent->child = aliasNode; node->parent = aliasNode; } } } }
void DelAlias(aliasL** aliasHeadPtr, char* cmd) { aliasL *ptr = *aliasHeadPtr; if (ptr) { do { if (!strcmp(ptr->name, cmd)) { if (ptr == *aliasHeadPtr) { if (ptr->child == ptr) { *aliasHeadPtr = NULL; } else { *aliasHeadPtr = ptr->child; } } ptr->parent->child = ptr->child; ptr->child->parent = ptr->parent; ReleaseAlias(ptr); return; } ptr = ptr->child; } while (ptr != *aliasHeadPtr); } printf("unalias: no such hash table element %s\n", cmd); }