#include class Item { public: Item * Prev; Item * Next; int Value; void * Process; void * Backup; }; void InsertSort(void); extern Item ItemS ; extern Item Item01 ; extern Item Item02 ; extern Item Item03 ; extern Item Item04 ; extern Item Item05 ; extern Item Item06 ; extern Item Item07 ; extern Item Item08 ; extern Item Item09 ; extern Item Item10 ; extern Item Item11 ; extern Item Item12 ; extern Item ItemE ; extern int Forward, SOL, Backward, EOL; Item ItemS = {NULL,&Item01,0,NULL,&SOL,}; Item Item01 = {&ItemS,&Item02,22,&Forward,&Backward,}; Item Item02 = {&Item01,&Item03,1,&Forward,&Backward,}; Item Item03 = {&Item02,&Item04,35,&Forward,&Backward,}; Item Item04 = {&Item03,&Item05,19,&Forward,&Backward,}; Item Item05 = {&Item04,&Item06,44,&Forward,&Backward,}; Item Item06 = {&Item05,&Item07,61,&Forward,&Backward,}; Item Item07 = {&Item06,&Item08,9,&Forward,&Backward,}; Item Item08 = {&Item07,&Item09,2,&Forward,&Backward,}; Item Item09 = {&Item08,&Item10,47,&Forward,&Backward,}; Item Item10 = {&Item09,&Item11,8,&Forward,&Backward,}; Item Item11 = {&Item10,&Item12,99,&Forward,&Backward,}; Item Item12 = {&Item11,&ItemE,15,&Forward,&Backward,}; Item ItemE = {&Item12,&ItemE,0,&EOL,NULL}; void InsertSort() { static void * Dummy[]={&&Forward,&&EOL,&&Backward,&&SOL,}; Item * Current, *This, *BackPtr; Current = &Item01; goto * Current->Process; Forward: asm("Forward:\n\t.global\tForward\n"); fprintf(stderr,"Forward\n"); This = Current; Current = Current->Next; BackPtr = This->Prev; // unlink; This->Next->Prev = This->Prev; This->Prev->Next = This->Next; goto * BackPtr->Backup; EOL: asm("EOL:\n\t.global\tEOL\n"); fprintf(stderr,"EOL\n"); return; Backward: asm("Backward:\n\t.global\tBackward\n"); fprintf(stderr,"Backward\n"); if (This->Value < BackPtr->Value) { BackPtr = BackPtr->Prev; goto * BackPtr->Backup; } else { This->Next = BackPtr->Next; This->Prev = BackPtr; BackPtr->Next->Prev = This; BackPtr->Next = This; goto * Current->Process; } SOL: asm("SOL:\n\t.global\tSOL\n"); fprintf(stderr,"SOL\n"); This->Next = BackPtr->Next; This->Prev = BackPtr; BackPtr->Next->Prev = This; BackPtr->Next = This; goto * Current->Process; } main() { InsertSort(); for (Item * Temp = ItemS.Next ; Temp != & ItemE ; Temp = Temp->Next) { fprintf(stdout,"%d\n",Temp->Value); } }